diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..7ab13901 --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +#ignore thumbnails created by windows +Thumbs.db +#Ignore files build by Visual Studio +*.user +*.aps +*.pch +*.vspscc +*_i.c +*_p.c +*.ncb +*.suo +*.bak +*.cache +*.ilk +*.log +[Bb]in +[Dd]ebug*/ +*.sbr +obj/ +[Rr]elease*/ +_ReSharper*/ \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase.sln b/Essentials Core/PepperDashEssentialsBase.sln new file mode 100644 index 00000000..a51c8c5d --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDash_Essentials_Core", "PepperDashEssentialsBase\PepperDash_Essentials_Core.csproj", "{A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Essentials Core/PepperDashEssentialsBase/Comm and IR/ComPortController.cs b/Essentials Core/PepperDashEssentialsBase/Comm and IR/ComPortController.cs new file mode 100644 index 00000000..8b0ee14a --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Comm and IR/ComPortController.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; + +using Newtonsoft.Json; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + public class ComPortController : Device, IBasicCommunication + { + public event EventHandler BytesReceived; + public event EventHandler TextReceived; + + public bool IsConnected { get { return true; } } + + ComPort Port; + ComPort.ComPortSpec Spec; + + public ComPortController(string key, ComPort port, ComPort.ComPortSpec spec) + : base(key) + { + Port = port; + Spec = spec; + //IsConnected = new BoolFeedback(CommonBoolCue.IsConnected, () => true); + + if (Port.Parent is CrestronControlSystem) + { + var result = Port.Register(); + if (result != eDeviceRegistrationUnRegistrationResponse.Success) + { + Debug.Console(0, this, "WARNING: Cannot register Com port: {0}", result); + return; // false + } + } + var specResult = Port.SetComPortSpec(Spec); + if (specResult != 0) + { + Debug.Console(0, this, "WARNING: Cannot set comspec"); + return; // false + } + Port.SerialDataReceived += new ComPortDataReceivedEvent(Port_SerialDataReceived); + } + + ~ComPortController() + { + Port.SerialDataReceived -= Port_SerialDataReceived; + } + + void Port_SerialDataReceived(ComPort ReceivingComPort, ComPortSerialDataEventArgs args) + { + var bytesHandler = BytesReceived; + if (bytesHandler != null) + { + var bytes = Encoding.GetEncoding(28591).GetBytes(args.SerialData); + bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes)); + } + var textHandler = TextReceived; + if (textHandler != null) + textHandler(this, new GenericCommMethodReceiveTextArgs(args.SerialData)); + } + + public override bool Deactivate() + { + return Port.UnRegister() == eDeviceRegistrationUnRegistrationResponse.Success; + } + + #region IBasicCommunication Members + + public void SendText(string text) + { + Port.Send(text); + } + + public void SendBytes(byte[] bytes) + { + var text = Encoding.GetEncoding(28591).GetString(bytes, 0, bytes.Length); + Port.Send(text); + } + + //public BoolFeedback IsConnected { get; private set; } + + public void Connect() + { + } + + public void Disconnect() + { + } + + #endregion + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Comm and IR/ComSpecJsonConverter.cs b/Essentials Core/PepperDashEssentialsBase/Comm and IR/ComSpecJsonConverter.cs new file mode 100644 index 00000000..fe77bf83 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Comm and IR/ComSpecJsonConverter.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + /// + /// This converter creates a proper ComPort.ComPortSpec struct from more-friendly JSON values. It uses + /// ComSpecPropsJsonConverter to finish the individual properties. + /// + public class ComSpecJsonConverter : JsonConverter + { + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + if (objectType == typeof(ComPort.ComPortSpec)) + { + var newSer = new JsonSerializer(); + newSer.Converters.Add(new ComSpecPropsJsonConverter()); + newSer.ObjectCreationHandling = ObjectCreationHandling.Replace; + return newSer.Deserialize(reader); + } + return null; + } + + /// + /// + /// + public override bool CanConvert(Type objectType) + { + return objectType == typeof(ComPort.ComPortSpec); + } + + public override bool CanRead { get { return true; } } + + /// + /// This converter will not be used for writing + /// + public override bool CanWrite { get { return false; } } + + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + throw new NotImplementedException(); + } + } + + /// + /// The gist of this converter: The comspec JSON comes in with normal values that need to be converted + /// into enum names. This converter takes the value and applies the appropriate enum's name prefix to the value + /// and then returns the enum value using Enum.Parse. NOTE: Does not write + /// + public class ComSpecPropsJsonConverter : JsonConverter + { + public override bool CanConvert(Type objectType) + { + return objectType == typeof(ComPort.eComBaudRates) + || objectType == typeof(ComPort.eComDataBits) + || objectType == typeof(ComPort.eComParityType) + || objectType == typeof(ComPort.eComHardwareHandshakeType) + || objectType == typeof(ComPort.eComSoftwareHandshakeType) + || objectType == typeof(ComPort.eComProtocolType) + || objectType == typeof(ComPort.eComStopBits); + } + + public override bool CanRead { get { return true; } } + + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + //Debug.Console(2, "ReadJson type: " + objectType.Name); + if (objectType == typeof(ComPort.eComBaudRates)) + return Enum.Parse(typeof(ComPort.eComBaudRates), "ComspecBaudRate" + reader.Value, false); + else if (objectType == typeof(ComPort.eComDataBits)) + return Enum.Parse(typeof(ComPort.eComDataBits), "ComspecDataBits" + reader.Value, true); + else if (objectType == typeof(ComPort.eComHardwareHandshakeType)) + return Enum.Parse(typeof(ComPort.eComHardwareHandshakeType), "ComspecHardwareHandshake" + reader.Value, true); + else if (objectType == typeof(ComPort.eComParityType)) + return Enum.Parse(typeof(ComPort.eComParityType), "ComspecParity" + reader.Value, true); + else if (objectType == typeof(ComPort.eComProtocolType)) + return Enum.Parse(typeof(ComPort.eComProtocolType), "ComspecProtocol" + reader.Value, true); + else if (objectType == typeof(ComPort.eComSoftwareHandshakeType)) + return Enum.Parse(typeof(ComPort.eComSoftwareHandshakeType), "ComspecSoftwareHandshake" + reader.Value, true); + else if (objectType == typeof(ComPort.eComStopBits)) + return Enum.Parse(typeof(ComPort.eComStopBits), "ComspecStopBits" + reader.Value, true); + return null; + } + + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + throw new NotImplementedException(); + } + } + + +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Comm and IR/CommFactory.cs b/Essentials Core/PepperDashEssentialsBase/Comm and IR/CommFactory.cs new file mode 100644 index 00000000..565b4316 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Comm and IR/CommFactory.cs @@ -0,0 +1,178 @@ +using System; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using PepperDash.Core; +using PepperDash.Essentials.Core.Config; + +namespace PepperDash.Essentials.Core +{ + /// + /// + /// + public class CommFactory + { + public static EssentialsControlPropertiesConfig GetControlPropertiesConfig(DeviceConfig deviceConfig) + { + try + { + return JsonConvert.DeserializeObject + (deviceConfig.Properties["control"].ToString()); + //Debug.Console(2, "Control TEST: {0}", JsonConvert.SerializeObject(controlConfig)); + } + catch (Exception e) + { + + Debug.Console(0, "ERROR: [{0}] Control properties deserialize failed:\r{1}", deviceConfig.Key, e); + return null; + } + } + + + /// + /// Returns a comm method of either com port, TCP, SSH + /// + /// The Device config object + public static IBasicCommunication CreateCommForDevice(DeviceConfig deviceConfig) + { + EssentialsControlPropertiesConfig controlConfig = GetControlPropertiesConfig(deviceConfig); + if (controlConfig == null) + return null; + + IBasicCommunication comm = null; + try + { + var c = controlConfig.TcpSshProperties; + switch (controlConfig.Method) + { + case eControlMethod.Com: + comm = new ComPortController(deviceConfig.Key + "-com", GetComPort(controlConfig), controlConfig.ComParams); + break; + case eControlMethod.IR: + break; + case eControlMethod.Ssh: + { + var ssh = new GenericSshClient(deviceConfig.Key + "-ssh", c.Address, c.Port, c.Username, c.Password); + ssh.AutoReconnect = c.AutoReconnect; + if(ssh.AutoReconnect) + ssh.AutoReconnectIntervalMs = c.AutoReconnectIntervalMs; + comm = ssh; + break; + } + case eControlMethod.Tcpip: + { + var tcp = new GenericTcpIpClient(deviceConfig.Key + "-tcp", c.Address, c.Port, c.BufferSize); + tcp.AutoReconnect = c.AutoReconnect; + if (tcp.AutoReconnect) + tcp.AutoReconnectIntervalMs = c.AutoReconnectIntervalMs; + comm = tcp; + break; + } + case eControlMethod.Telnet: + break; + default: + break; + } + } + catch (Exception e) + { + Debug.Console(0, "Cannot create communication from JSON:\r{0}\r\rException:\r{1}", + deviceConfig.Properties.ToString(), e); + } + + // put it in the device manager if it's the right flavor + var comDev = comm as Device; + if (comDev != null) + DeviceManager.AddDevice(comDev); + return comm; + } + + public static ComPort GetComPort(EssentialsControlPropertiesConfig config) + { + var comPar = config.ComParams; + var dev = GetIComPortsDeviceFromManagedDevice(config.ControlPortDevKey); + if (dev != null && config.ControlPortNumber <= dev.NumberOfComPorts) + return dev.ComPorts[config.ControlPortNumber]; + Debug.Console(0, "GetComPort: Device '{0}' does not have com port {1}", config.ControlPortDevKey, config.ControlPortNumber); + return null; + } + + /// + /// Helper to grab the IComPorts device for this PortDeviceKey. Key "controlSystem" will + /// return the ControlSystem object from the Global class. + /// + /// IComPorts device or null if the device is not found or does not implement IComPorts + public static IComPorts GetIComPortsDeviceFromManagedDevice(string ComPortDevKey) + { + if ((ComPortDevKey.Equals("controlSystem", System.StringComparison.OrdinalIgnoreCase) + || ComPortDevKey.Equals("processor", System.StringComparison.OrdinalIgnoreCase)) + && Global.ControlSystem is IComPorts) + return Global.ControlSystem; + else + { + var dev = DeviceManager.GetDeviceForKey(ComPortDevKey) as IComPorts; + if (dev == null) + Debug.Console(0, "ComPortConfig: Cannot find com port device '{0}'", ComPortDevKey); + return dev; + } + } + } + + /// + /// + /// + public class EssentialsControlPropertiesConfig : + PepperDash.Core.ControlPropertiesConfig + { + // ****** All of these things, except for #Pro-specific com stuff, were + // moved into PepperDash.Core to help non-pro PortalSync. + + //public eControlMethod Method { get; set; } + + //public string ControlPortDevKey { get; set; } + + //[JsonProperty(NullValueHandling = NullValueHandling.Ignore)] // In case "null" is present in config on this value + //public uint ControlPortNumber { get; set; } + + //public TcpSshPropertiesConfig TcpSshProperties { get; set; } + + //public string IrFile { get; set; } + + //public ComPortConfig ComParams { get; set; } + + [JsonConverter(typeof(ComSpecJsonConverter))] + public ComPort.ComPortSpec ComParams { get; set; } + + //public string IpId { get; set; } + + //[JsonIgnore] + //public uint IpIdInt { get { return Convert.ToUInt32(IpId, 16); } } + + //public char EndOfLineChar { get; set; } + + ///// + ///// Defaults to Environment.NewLine; + ///// + //public string EndOfLineString { get; set; } + + //public string DeviceReadyResponsePattern { get; set; } + + //public EssentialsControlPropertiesConfig() + //{ + // EndOfLineString = CrestronEnvironment.NewLine; + //} + } + + public class IrControlSpec + { + public string PortDeviceKey { get; set; } + public uint PortNumber { get; set; } + public string File { get; set; } + } + + //public enum eControlMethod + //{ + // None = 0, Com, IpId, IR, Ssh, Tcpip, Telnet + //} +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Comm and IR/CommunicationExtras.cs b/Essentials Core/PepperDashEssentialsBase/Comm and IR/CommunicationExtras.cs new file mode 100644 index 00000000..05fb3954 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Comm and IR/CommunicationExtras.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + /// + /// + /// + public interface IComPortsDevice + { + IComPorts Device { get; } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Comm and IR/ConsoleCommMockDevice.cs b/Essentials Core/PepperDashEssentialsBase/Comm and IR/ConsoleCommMockDevice.cs new file mode 100644 index 00000000..d833aafa --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Comm and IR/ConsoleCommMockDevice.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +using PepperDash.Core; + +namespace PepperDash.Essentials.Core +{ + public class ConsoleCommMockDevice : Device, ICommunicationMonitor + { + public IBasicCommunication Communication { get; private set; } + public CommunicationGather PortGather { get; private set; } + public StatusMonitorBase CommunicationMonitor { get; private set; } + + /// + /// Defaults to \x0a + /// + public string LineEnding { get; set; } + + /// + /// Set to true to show responses in full hex + /// + public bool ShowHexResponse { get; set; } + + public ConsoleCommMockDevice(string key, string name, ConsoleCommMockDevicePropertiesConfig props, IBasicCommunication comm) + :base(key, name) + { + Communication = comm; + PortGather = new CommunicationGather(Communication, '\x0d'); + PortGather.LineReceived += this.Port_LineReceived; + CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, props.CommunicationMonitorProperties); + LineEnding = props.LineEnding; + } + + public override bool CustomActivate() + { + Communication.Connect(); + CommunicationMonitor.StatusChange += (o, a) => { Debug.Console(2, this, "Communication monitor state: {0}", CommunicationMonitor.Status); }; + CommunicationMonitor.Start(); + + CrestronConsole.AddNewConsoleCommand(SendLine, "send" + Key, "", ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(s => Communication.Connect(), "con" + Key, "", ConsoleAccessLevelEnum.AccessOperator); + return true; + } + + void Port_LineReceived(object dev, GenericCommMethodReceiveTextArgs args) + { + if (Debug.Level == 2) + Debug.Console(2, this, "RX: '{0}'", + ShowHexResponse ? ComTextHelper.GetEscapedText(args.Text) : args.Text); + } + + void SendLine(string s) + { + //if (Debug.Level == 2) + // Debug.Console(2, this, " Send '{0}'", ComTextHelper.GetEscapedText(s)); + Communication.SendText(s + LineEnding); + } + } + + public class ConsoleCommMockDevicePropertiesConfig + { + public string LineEnding { get; set; } + public CommunicationMonitorConfig CommunicationMonitorProperties { get; set; } + + public ConsoleCommMockDevicePropertiesConfig() + { + LineEnding = "\x0a"; + } + } + +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Comm and IR/DELETE ComPortController.cs b/Essentials Core/PepperDashEssentialsBase/Comm and IR/DELETE ComPortController.cs new file mode 100644 index 00000000..ece72b20 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Comm and IR/DELETE ComPortController.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; + +using Newtonsoft.Json; + +namespace PepperDash.Essentials.Core +{ + public class ComPortController : Device, IBasicCommunication + { + public event EventHandler BytesReceived; + public event EventHandler TextReceived; + + ComPort Port; + ComPort.ComPortSpec Spec; + + public ComPortController(string key, IComPorts ComDevice, uint comPortNum, ComPort.ComPortSpec spec) + : base(key) + { + Port = ComDevice.ComPorts[comPortNum]; + Spec = spec; + + Debug.Console(2, "Creating com port '{0}'", key); + Debug.Console(2, "Com port spec:\r{0}", JsonConvert.SerializeObject(spec)); + } + + /// + /// Creates a ComPort if the parameters are correct. Returns and logs errors if not + /// + public static ComPortController GetComPortController(string key, + IComPorts comDevice, uint comPortNum, ComPort.ComPortSpec spec) + { + Debug.Console(1, "Creating com port '{0}'", key); + if (comDevice == null) + throw new ArgumentNullException("comDevice"); + if (string.IsNullOrEmpty(key)) + throw new ArgumentNullException("key"); + if (comPortNum > comDevice.NumberOfComPorts) + { + Debug.Console(0, "[{0}] Com port {1} out of range on {2}", + key, comPortNum, comDevice.GetType().Name); + return null; + } + var port = new ComPortController(key, comDevice, comPortNum, spec); + return port; + } + + /// + /// Registers port and sends ComSpec + /// + /// false if either register or comspec fails + public override bool CustomActivate() + { + var result = Port.Register(); + if (result != eDeviceRegistrationUnRegistrationResponse.Success) + { + Debug.Console(0, this, "Cannot register Com port: {0}", result); + return false; + } + var specResult = Port.SetComPortSpec(Spec); + if (specResult != 0) + { + Debug.Console(0, this, "Cannot set comspec"); + return false; + } + Port.SerialDataReceived += new ComPortDataReceivedEvent(Port_SerialDataReceived); + return true; + } + + void Port_SerialDataReceived(ComPort ReceivingComPort, ComPortSerialDataEventArgs args) + { + if (BytesReceived != null) + { + var bytes = Encoding.GetEncoding(28591).GetBytes(args.SerialData); + BytesReceived(this, new GenericCommMethodReceiveBytesArgs(bytes)); + } + if(TextReceived != null) + TextReceived(this, new GenericCommMethodReceiveTextArgs(args.SerialData)); + } + + public override bool Deactivate() + { + return Port.UnRegister() == eDeviceRegistrationUnRegistrationResponse.Success; + } + + #region IBasicCommunication Members + + public void SendText(string text) + { + Port.Send(text); + } + + public void SendBytes(byte[] bytes) + { + + var text = Encoding.GetEncoding(28591).GetString(bytes, 0, bytes.Length); + Port.Send(text); + } + + #endregion + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Comm and IR/IRPortHelper.cs b/Essentials Core/PepperDashEssentialsBase/Comm and IR/IRPortHelper.cs new file mode 100644 index 00000000..189ca2fc --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Comm and IR/IRPortHelper.cs @@ -0,0 +1,160 @@ +using System; +using System.Collections.Generic; +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronIO; +using Crestron.SimplSharpPro; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using PepperDash.Core; +using PepperDash.Essentials.Core.Config; + +namespace PepperDash.Essentials.Core +{ + /// + /// + /// + public static class IRPortHelper + { + public static string IrDriverPathPrefix + { + get + { + return string.Format(@"\NVRAM\Program{0}\IR\", InitialParametersClass.ApplicationNumber); + } + } + + /// + /// Finds either the ControlSystem or a device controller that contains IR ports and + /// returns a port from the hardware device + /// + /// + /// IrPortConfig object. The port and or filename will be empty/null + /// if valid values don't exist on config + public static IrOutPortConfig GetIrPort(JToken propsToken) + { + var control = propsToken["control"]; + if (control == null) + return null; + if (control["method"].Value() != "ir") + { + Debug.Console(0, "IRPortHelper called with non-IR properties"); + return null; + } + + var port = new IrOutPortConfig(); + + var portDevKey = control.Value("controlPortDevKey"); + var portNum = control.Value("controlPortNumber"); + if (portDevKey == null || portNum == 0) + { + Debug.Console(1, "WARNING: Properties is missing port device or port number"); + return port; + } + + IIROutputPorts irDev = null; + if (portDevKey.Equals("controlSystem", StringComparison.OrdinalIgnoreCase) + || portDevKey.Equals("processor", StringComparison.OrdinalIgnoreCase)) + irDev = Global.ControlSystem; + else + irDev = DeviceManager.GetDeviceForKey(portDevKey) as IIROutputPorts; + + if (irDev == null) + { + Debug.Console(1, "[Config] Error, device with IR ports '{0}' not found", portDevKey); + return port; + } + + if (portNum <= irDev.NumberOfIROutputPorts) // success! + { + var file = IrDriverPathPrefix + control["irFile"].Value(); + port.Port = irDev.IROutputPorts[portNum]; + port.FileName = file; + return port; // new IrOutPortConfig { Port = irDev.IROutputPorts[portNum], FileName = file }; + } + else + { + Debug.Console(1, "[Config] Error, device '{0}' IR port {1} out of range", + portDevKey, portNum); + return port; + } + } + + /// + /// Returns a ready-to-go IrOutputPortController from a DeviceConfig object. + /// + public static IrOutputPortController GetIrOutputPortController(DeviceConfig devConf) + { + var irControllerKey = devConf.Key + "-ir"; + if (devConf.Properties == null) + { + Debug.Console(0, "[{0}] WARNING: Device config does not include properties. IR will not function.", devConf.Key); + return new IrOutputPortController(irControllerKey, null, ""); + } + + var control = devConf.Properties["control"]; + if (control == null) + { + var c = new IrOutputPortController(irControllerKey, null, ""); + Debug.Console(0, c, "WARNING: Device config does not include control properties. IR will not function"); + return c; + } + + var portDevKey = control.Value("controlPortDevKey"); + var portNum = control.Value("controlPortNumber"); + IIROutputPorts irDev = null; + + if (portDevKey == null) + { + var c = new IrOutputPortController(irControllerKey, null, ""); + Debug.Console(0, c, "WARNING: control properties is missing ir device"); + return c; + } + + if (portNum == 0) + { + var c = new IrOutputPortController(irControllerKey, null, ""); + Debug.Console(0, c, "WARNING: control properties is missing ir port number"); + return c; + } + + if (portDevKey.Equals("controlSystem", StringComparison.OrdinalIgnoreCase) + || portDevKey.Equals("processor", StringComparison.OrdinalIgnoreCase)) + irDev = Global.ControlSystem; + else + irDev = DeviceManager.GetDeviceForKey(portDevKey) as IIROutputPorts; + + if (irDev == null) + { + var c = new IrOutputPortController(irControllerKey, null, ""); + Debug.Console(0, c, "WARNING: device with IR ports '{0}' not found", portDevKey); + return c; + } + + if (portNum <= irDev.NumberOfIROutputPorts) // success! + return new IrOutputPortController(irControllerKey, irDev.IROutputPorts[portNum], + IrDriverPathPrefix + control["irFile"].Value()); + else + { + var c = new IrOutputPortController(irControllerKey, null, ""); + Debug.Console(0, c, "WARNING: device '{0}' IR port {1} out of range", + portDevKey, portNum); + return c; + } + } + } + + /// + /// Wrapper to help in IR port creation + /// + public class IrOutPortConfig + { + public IROutputPort Port { get; set; } + public string FileName { get; set; } + + public IrOutPortConfig() + { + FileName = ""; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Comm and IR/REMOVE ComPortConfig.cs b/Essentials Core/PepperDashEssentialsBase/Comm and IR/REMOVE ComPortConfig.cs new file mode 100644 index 00000000..31960634 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Comm and IR/REMOVE ComPortConfig.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + + //public class ComPortConfig + //{ + // //public string ContolPortDevKey { get; set; } + + // //public uint ControlPortNumber { get; set; } + + // [JsonConverter(typeof(ComSpecJsonConverter))] + // public ComPort.ComPortSpec ComParams { get; set; } + //} +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Config/BasicConfig.cs b/Essentials Core/PepperDashEssentialsBase/Config/BasicConfig.cs new file mode 100644 index 00000000..d137c46b --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Config/BasicConfig.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Newtonsoft.Json; +using PepperDash.Core; +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.Core.Config +{ + /// + /// Override this and splice on specific room type behavior, as well as other properties + /// + public class BasicConfig + { + [JsonProperty("info")] + public InfoConfig Info { get; set; } + + //[JsonProperty("roomLists")] + //public Dictionary> RoomLists { get; set; } + + [JsonProperty("devices")] + public List Devices { get; set; } + + [JsonProperty("sourceLists")] + public Dictionary> SourceLists { get; set; } + + [JsonProperty("tieLines")] + public List TieLines { get; set; } + + /// + /// Checks SourceLists for a given list and returns it if found. Otherwise, returns null + /// + public Dictionary GetSourceListForKey(string key) + { + if (string.IsNullOrEmpty(key) || !SourceLists.ContainsKey(key)) + return null; + + return SourceLists[key]; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Config/ConfigPropertiesHelpers.cs b/Essentials Core/PepperDashEssentialsBase/Config/ConfigPropertiesHelpers.cs new file mode 100644 index 00000000..2992a385 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Config/ConfigPropertiesHelpers.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using PepperDash.Essentials.Core; +using PepperDash.Core; +using Newtonsoft.Json.Linq; + +namespace PepperDash.Essentials.Core.Config +{ + public class ConfigPropertiesHelpers + { + /// + /// Returns the value of properties.hasAudio, or false if not defined + /// + public static bool GetHasAudio(DeviceConfig deviceConfig) + { + return deviceConfig.Properties.Value("hasAudio"); + } + + /// + /// Returns the value of properties.hasControls, or false if not defined + /// + public static bool GetHasControls(DeviceConfig deviceConfig) + { + return deviceConfig.Properties.Value("hasControls"); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Config/DeviceConfig.cs b/Essentials Core/PepperDashEssentialsBase/Config/DeviceConfig.cs new file mode 100644 index 00000000..e9ed7931 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Config/DeviceConfig.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronIO; +using Crestron.SimplSharpPro; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using PepperDash.Core; +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.Core.Config +{ + public class DeviceConfig + { + [JsonProperty("key")] + public string Key { get; set; } + + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("group")] + public string Group { get; set; } + + [JsonProperty("type")] + public string Type { get; set; } + + [JsonProperty("properties")] + [JsonConverter(typeof(DevicePropertiesConverter))] + public JToken Properties { get; set; } + } + + /// + /// + /// + public class DevicePropertiesConverter : JsonConverter + { + + public override bool CanConvert(Type objectType) + { + return objectType == typeof(JToken); + } + + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + return JToken.ReadFrom(reader); + } + + public override bool CanWrite + { + get + { + return false; + } + } + + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + throw new NotImplementedException("SOD OFF HOSER"); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Config/InfoConfig.cs b/Essentials Core/PepperDashEssentialsBase/Config/InfoConfig.cs new file mode 100644 index 00000000..32469b53 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Config/InfoConfig.cs @@ -0,0 +1,36 @@ +using System; + +using Newtonsoft.Json; + +namespace PepperDash.Essentials.Core.Config +{ + /// + /// Represents the info section of a Config file + /// + public class InfoConfig + { + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("date")] + public DateTime Date { get; set; } + + [JsonProperty("type")] + public string Type { get; set; } + + [JsonProperty("version")] + public string Version { get; set; } + + [JsonProperty("comment")] + public string Comment { get; set; } + + public InfoConfig() + { + Name = ""; + Date = DateTime.Now; + Type = ""; + Version = ""; + Comment = ""; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Constants/CommonCues.cs b/Essentials Core/PepperDashEssentialsBase/Constants/CommonCues.cs new file mode 100644 index 00000000..2df7e390 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Constants/CommonCues.cs @@ -0,0 +1,128 @@ +using Crestron.SimplSharpPro; + +namespace PepperDash.Essentials.Core +{ + public static class CommonBoolCue + { + public static readonly Cue Power = new Cue("Power", 101, eCueType.Bool); + public static readonly Cue PowerOn = new Cue("PowerOn", 102, eCueType.Bool); + public static readonly Cue PowerOff = new Cue("PowerOff", 103, eCueType.Bool); + + public static readonly Cue HasPowerFeedback = new Cue("HasPowerFeedback", 101, eCueType.Bool); + public static readonly Cue PowerOnFeedback = new Cue("PowerOnFeedback", 102, eCueType.Bool); + public static readonly Cue IsOnlineFeedback = new Cue("IsOnlineFeedback", 104, eCueType.Bool); + public static readonly Cue IsWarmingUp = new Cue("IsWarmingUp", 105, eCueType.Bool); + public static readonly Cue IsCoolingDown = new Cue("IsCoolingDown", 106, eCueType.Bool); + + public static readonly Cue Dash = new Cue("Dash", 109, eCueType.Bool); + public static readonly Cue Digit0 = new Cue("Digit0", 110, eCueType.Bool); + public static readonly Cue Digit1 = new Cue("Digit1", 111, eCueType.Bool); + public static readonly Cue Digit2 = new Cue("Digit2", 112, eCueType.Bool); + public static readonly Cue Digit3 = new Cue("Digit3", 113, eCueType.Bool); + public static readonly Cue Digit4 = new Cue("Digit4", 114, eCueType.Bool); + public static readonly Cue Digit5 = new Cue("Digit5", 115, eCueType.Bool); + public static readonly Cue Digit6 = new Cue("Digit6", 116, eCueType.Bool); + public static readonly Cue Digit7 = new Cue("Digit7", 117, eCueType.Bool); + public static readonly Cue Digit8 = new Cue("Digit8", 118, eCueType.Bool); + public static readonly Cue Digit9 = new Cue("Digit9", 119, eCueType.Bool); + public static readonly Cue KeypadMisc1 = new Cue("KeypadMisc1", 120, eCueType.Bool); + public static readonly Cue KeypadMisc2 = new Cue("KeypadMisc2", 121, eCueType.Bool); + + public static readonly Cue NumericEnter = new Cue("Enter", 122, eCueType.Bool); + public static readonly Cue ChannelUp = new Cue("ChannelUp", 123, eCueType.Bool); + public static readonly Cue ChannelDown = new Cue("ChannelDown", 124, eCueType.Bool); + public static readonly Cue Last = new Cue("Last", 125, eCueType.Bool); + public static readonly Cue OpenClose = new Cue("OpenClose", 126, eCueType.Bool); + public static readonly Cue Subtitle = new Cue("Subtitle", 127, eCueType.Bool); + public static readonly Cue Audio = new Cue("Audio", 128, eCueType.Bool); + public static readonly Cue Info = new Cue("Info", 129, eCueType.Bool); + public static readonly Cue Menu = new Cue("Menu", 130, eCueType.Bool); + public static readonly Cue DeviceMenu = new Cue("DeviceMenu", 131, eCueType.Bool); + public static readonly Cue Return = new Cue("Return", 132, eCueType.Bool); + public static readonly Cue Back = new Cue("Back", 133, eCueType.Bool); + public static readonly Cue Exit = new Cue("Exit", 134, eCueType.Bool); + public static readonly Cue Clear = new Cue("Clear", 135, eCueType.Bool); + public static readonly Cue List = new Cue("List", 136, eCueType.Bool); + public static readonly Cue Guide = new Cue("Guide", 137, eCueType.Bool); + public static readonly Cue Am = new Cue("Am", 136, eCueType.Bool); + public static readonly Cue Fm = new Cue("Fm", 137, eCueType.Bool); + public static readonly Cue Up = new Cue("Up", 138, eCueType.Bool); + public static readonly Cue Down = new Cue("Down", 139, eCueType.Bool); + public static readonly Cue Left = new Cue("Left", 140, eCueType.Bool); + public static readonly Cue Right = new Cue("Right", 141, eCueType.Bool); + public static readonly Cue Select = new Cue("Select", 142, eCueType.Bool); + public static readonly Cue SmartApps = new Cue("SmartApps", 143, eCueType.Bool); + public static readonly Cue Dvr = new Cue("Dvr", 144, eCueType.Bool); + + + public static readonly Cue Play = new Cue("Play", 145, eCueType.Bool); + public static readonly Cue Pause = new Cue("Pause", 146, eCueType.Bool); + public static readonly Cue Stop = new Cue("Stop", 147, eCueType.Bool); + public static readonly Cue ChapNext = new Cue("ChapNext", 148, eCueType.Bool); + public static readonly Cue ChapPrevious = new Cue("ChapPrevious", 149, eCueType.Bool); + public static readonly Cue Rewind = new Cue("Rewind", 150, eCueType.Bool); + public static readonly Cue Ffwd = new Cue("Ffwd", 151, eCueType.Bool); + public static readonly Cue Replay = new Cue("Replay", 152, eCueType.Bool); + public static readonly Cue Advance = new Cue("Advance", 153, eCueType.Bool); + public static readonly Cue Record = new Cue("Record", 154, eCueType.Bool); + public static readonly Cue Red = new Cue("Red", 155, eCueType.Bool); + public static readonly Cue Green = new Cue("Green", 156, eCueType.Bool); + public static readonly Cue Yellow = new Cue("Yellow", 157, eCueType.Bool); + public static readonly Cue Blue = new Cue("Blue", 158, eCueType.Bool); + public static readonly Cue Home = new Cue("Home", 159, eCueType.Bool); + public static readonly Cue PopUp = new Cue("PopUp", 160, eCueType.Bool); + public static readonly Cue PageUp = new Cue("PageUp", 161, eCueType.Bool); + public static readonly Cue PageDown = new Cue("PageDown", 162, eCueType.Bool); + public static readonly Cue Search = new Cue("Search", 163, eCueType.Bool); + public static readonly Cue Setup = new Cue("Setup", 164, eCueType.Bool); + public static readonly Cue RStep = new Cue("RStep", 165, eCueType.Bool); + public static readonly Cue FStep = new Cue("FStep", 166, eCueType.Bool); + + public static readonly Cue IsConnected = new Cue("IsConnected", 281, eCueType.Bool); + public static readonly Cue IsOk = new Cue("IsOk", 282, eCueType.Bool); + public static readonly Cue InWarning = new Cue("InWarning", 283, eCueType.Bool); + public static readonly Cue InError = new Cue("InError", 284, eCueType.Bool); + public static readonly Cue StatusUnknown = new Cue("StatusUnknown", 285, eCueType.Bool); + + public static readonly Cue VolumeUp = new Cue("VolumeUp", 401, eCueType.Bool); + public static readonly Cue VolumeDown = new Cue("VolumeDown", 402, eCueType.Bool); + public static readonly Cue MuteOn = new Cue("MuteOn", 403, eCueType.Bool); + public static readonly Cue MuteOff = new Cue("MuteOff", 404, eCueType.Bool); + public static readonly Cue MuteToggle = new Cue("MuteToggle", 405, eCueType.Bool); + public static readonly Cue ShowVolumeButtons = new Cue("ShowVolumeButtons", 406, eCueType.Bool); + public static readonly Cue ShowVolumeSlider = new Cue("ShowVolumeSlider", 407, eCueType.Bool); + + public static readonly Cue Hdmi1 = new Cue("Hdmi1", 451, eCueType.Bool); + public static readonly Cue Hdmi2 = new Cue("Hdmi2", 452, eCueType.Bool); + public static readonly Cue Hdmi3 = new Cue("Hdmi3", 453, eCueType.Bool); + public static readonly Cue Hdmi4 = new Cue("Hdmi4", 454, eCueType.Bool); + public static readonly Cue Hdmi5 = new Cue("Hdmi5", 455, eCueType.Bool); + public static readonly Cue Hdmi6 = new Cue("Hdmi6", 456, eCueType.Bool); + public static readonly Cue DisplayPort1 = new Cue("DisplayPort1", 457, eCueType.Bool); + public static readonly Cue DisplayPort2 = new Cue("DisplayPort2", 458, eCueType.Bool); + public static readonly Cue Dvi1 = new Cue("Dvi1", 459, eCueType.Bool); + public static readonly Cue Dvi2 = new Cue("Dvi2", 460, eCueType.Bool); + public static readonly Cue Video1 = new Cue("Video1", 461, eCueType.Bool); + public static readonly Cue Video2 = new Cue("Video2", 462, eCueType.Bool); + public static readonly Cue Component1 = new Cue("Component1", 463, eCueType.Bool); + public static readonly Cue Component2 = new Cue("Component2", 464, eCueType.Bool); + public static readonly Cue Vga1 = new Cue("Vga1", 465, eCueType.Bool); + public static readonly Cue Vga2 = new Cue("Vga2", 466, eCueType.Bool); + public static readonly Cue Rgb1 = new Cue("Rgb1", 467, eCueType.Bool); + public static readonly Cue Rgb2 = new Cue("Rgb2", 468, eCueType.Bool); + public static readonly Cue Antenna = new Cue("Antenna", 469, eCueType.Bool); + + + } + + public static class CommonIntCue + { + public static readonly Cue MainVolumeLevel = new Cue("MainVolumeLevel", 401, eCueType.Int); + public static readonly Cue MainVolumeLevelFeedback = new Cue("MainVolumeLevelFeedback", 401, eCueType.Int); + } + + public static class CommonStringCue + { + public static readonly Cue IpConnectionsText = new Cue("IpConnectionsText", 9999, eCueType.String); + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Crestron/CrestronGenericBaseDevice.cs b/Essentials Core/PepperDashEssentialsBase/Crestron/CrestronGenericBaseDevice.cs new file mode 100644 index 00000000..6979dded --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Crestron/CrestronGenericBaseDevice.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Core; + +namespace PepperDash.Essentials.Core +{ + /// + /// A bridge class to cover the basic features of GenericBase hardware + /// + public class CrestronGenericBaseDevice : Device, IOnline, IHasFeedback, ICommunicationMonitor + { + public virtual GenericBase Hardware { get; protected set; } + + public BoolFeedback IsOnline { get; private set; } + public BoolFeedback IsRegistered { get; private set; } + public StringFeedback IpConnectionsText { get; private set; } + + public CrestronGenericBaseDevice(string key, string name, GenericBase hardware) + : base(key, name) + { + Hardware = hardware; + IsOnline = new BoolFeedback(CommonBoolCue.IsOnlineFeedback, () => Hardware.IsOnline); + IsRegistered = new BoolFeedback(new Cue("IsRegistered", 0, eCueType.Bool), () => Hardware.Registered); + IpConnectionsText = new StringFeedback(CommonStringCue.IpConnectionsText, () => + string.Join(",", Hardware.ConnectedIpList.Select(cip => cip.DeviceIpAddress).ToArray())); + CommunicationMonitor = new CrestronGenericBaseCommunicationMonitor(this, hardware, 120000, 300000); + } + + /// + /// Make sure that overriding classes call this! + /// Registers the Crestron device, connects up to the base events, starts communication monitor + /// + public override bool CustomActivate() + { + new CTimer(o => + { + Debug.Console(1, this, "Activating"); + var response = Hardware.RegisterWithLogging(Key); + if (response == eDeviceRegistrationUnRegistrationResponse.Success) + { + Hardware.OnlineStatusChange += new OnlineStatusChangeEventHandler(Hardware_OnlineStatusChange); + CommunicationMonitor.Start(); + } + }, 0); + return true; + } + + /// + /// This disconnects events and unregisters the base hardware device. + /// + /// + public override bool Deactivate() + { + CommunicationMonitor.Stop(); + Hardware.OnlineStatusChange -= Hardware_OnlineStatusChange; + + return Hardware.UnRegister() == eDeviceRegistrationUnRegistrationResponse.Success; + } + + /// + /// Returns a list containing the Outputs that we want to expose. + /// + public virtual List Feedbacks + { + get + { + return new List + { + IsOnline, + IsRegistered, + IpConnectionsText + }; + } + } + + void Hardware_OnlineStatusChange(GenericBase currentDevice, OnlineOfflineEventArgs args) + { + IsOnline.FireUpdate(); + } + + #region IStatusMonitor Members + + public StatusMonitorBase CommunicationMonitor { get; private set; } + #endregion + } + + //*********************************************************************************** + public class CrestronGenericBaseDeviceEventIds + { + public const uint IsOnline = 1; + public const uint IpConnectionsText =2; + } + + /// + /// Adds logging to Register() failure + /// + public static class GenericBaseExtensions + { + public static eDeviceRegistrationUnRegistrationResponse RegisterWithLogging(this GenericBase device, string key) + { + var result = device.Register(); + if (result != eDeviceRegistrationUnRegistrationResponse.Success) + { + Debug.Console(0, Debug.ErrorLogLevel.Error, "Cannot register device '{0}': {1}", key, result); + } + return result; + } + + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Cues and DevAction/Cues.cs b/Essentials Core/PepperDashEssentialsBase/Cues and DevAction/Cues.cs new file mode 100644 index 00000000..69f993a9 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Cues and DevAction/Cues.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; + + +namespace PepperDash.Essentials.Core +{ + /// + /// Encapsulates a string-named, joined and typed command to a device + /// + [Obsolete()] + public class DevAction + { + public Cue Cue { get; private set; } + public Action Action { get; private set; } + + + public DevAction(Cue cue, Action action) + { + Cue = cue; + Action = action; + } + } + + public enum eCueType + { + Bool, Int, String, Void, Other + } + + + /// + /// The Cue class is a container to represent a name / join number / type for simplifying + /// commands coming into devices. + /// + public class Cue + { + public string Name { get; private set; } + public uint Number { get; private set; } + public eCueType Type { get; private set; } + + public Cue(string name, uint join, eCueType type) + { + Name = name; + Number = join; + Type = type; + } + + /// + /// Override that prints out the cue's data + /// + public override string ToString() + { + return string.Format("{0} Cue '{1}'-{2}", Type, Name, Number); + } + + ///// + ///// Returns a new Cue with JoinNumber offset + ///// + //public Cue GetOffsetCopy(uint offset) + //{ + // return new Cue(Name, Number + offset, Type); + //} + + /// + /// Helper method to create a Cue of Bool type + /// + /// Cue + public static Cue BoolCue(string name, uint join) + { + return new Cue(name, join, eCueType.Bool); + } + + /// + /// Helper method to create a Cue of ushort type + /// + /// Cue + public static Cue UShortCue(string name, uint join) + { + return new Cue(name, join, eCueType.Int); + } + + /// + /// Helper method to create a Cue of string type + /// + /// Cue + public static Cue StringCue(string name, uint join) + { + return new Cue(name, join, eCueType.String); + } + + public static readonly Cue DefaultBoolCue = new Cue("-none-", 0, eCueType.Bool); + public static readonly Cue DefaultIntCue = new Cue("-none-", 0, eCueType.Int); + public static readonly Cue DefaultStringCue = new Cue("-none-", 0, eCueType.String); + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/DeviceControlsParentInterfaces/IPresentationSource.cs b/Essentials Core/PepperDashEssentialsBase/DeviceControlsParentInterfaces/IPresentationSource.cs new file mode 100644 index 00000000..ac45a9d4 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/DeviceControlsParentInterfaces/IPresentationSource.cs @@ -0,0 +1,19 @@ +//using System; +//using System.Collections.Generic; +//using Crestron.SimplSharpPro; +//using Crestron.SimplSharpPro.DeviceSupport; + +//using PepperDash.Core; + + +//namespace PepperDash.Essentials.Core +//{ +// public interface IPresentationSource : IKeyed +// { +// string Name { get; } +// PresentationSourceType Type { get; } +// string IconName { get; set; } +// BoolFeedback HasPowerOnFeedback { get; } + +// } +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IChannel.cs b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IChannel.cs new file mode 100644 index 00000000..5a38c703 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IChannel.cs @@ -0,0 +1,47 @@ +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.SmartObjects; + +namespace PepperDash.Essentials.Core +{ + /// + /// + /// + public interface IChannel + { + void ChannelUp(bool pressRelease); + void ChannelDown(bool pressRelease); + void LastChannel(bool pressRelease); + void Guide(bool pressRelease); + void Info(bool pressRelease); + void Exit(bool pressRelease); + } + + /// + /// + /// + public static class IChannelExtensions + { + public static void LinkButtons(this IChannel dev, BasicTriList triList) + { + triList.SetBoolSigAction(123, dev.ChannelUp); + triList.SetBoolSigAction(124, dev.ChannelDown); + triList.SetBoolSigAction(125, dev.LastChannel); + triList.SetBoolSigAction(137, dev.Guide); + triList.SetBoolSigAction(129, dev.Info); + triList.SetBoolSigAction(134, dev.Exit); + } + + public static void UnlinkButtons(this IChannel dev, BasicTriList triList) + { + triList.ClearBoolSigAction(123); + triList.ClearBoolSigAction(124); + triList.ClearBoolSigAction(125); + triList.ClearBoolSigAction(137); + triList.ClearBoolSigAction(129); + triList.ClearBoolSigAction(134); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IColorFunctions.cs b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IColorFunctions.cs new file mode 100644 index 00000000..232362e9 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IColorFunctions.cs @@ -0,0 +1,41 @@ +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.SmartObjects; + +namespace PepperDash.Essentials.Core +{ + /// + /// + /// + public interface IColor + { + void Red(bool pressRelease); + void Green(bool pressRelease); + void Yellow(bool pressRelease); + void Blue(bool pressRelease); + } + + /// + /// + /// + public static class IColorExtensions + { + public static void LinkButtons(this IColor dev, BasicTriList TriList) + { + TriList.SetBoolSigAction(155, dev.Red); + TriList.SetBoolSigAction(156, dev.Green); + TriList.SetBoolSigAction(157, dev.Yellow); + TriList.SetBoolSigAction(158, dev.Blue); + } + + public static void UnlinkButtons(this IColor dev, BasicTriList triList) + { + triList.ClearBoolSigAction(155); + triList.ClearBoolSigAction(156); + triList.ClearBoolSigAction(157); + triList.ClearBoolSigAction(158); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDPad.cs b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDPad.cs new file mode 100644 index 00000000..2e0f3ae7 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDPad.cs @@ -0,0 +1,50 @@ +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.SmartObjects; + +namespace PepperDash.Essentials.Core +{ + /// + /// + /// + public interface IDPad + { + void Up(bool pressRelease); + void Down(bool pressRelease); + void Left(bool pressRelease); + void Right(bool pressRelease); + void Select(bool pressRelease); + void Menu(bool pressRelease); + void Exit(bool pressRelease); + } + + /// + /// + /// + public static class IDPadExtensions + { + public static void LinkButtons(this IDPad dev, BasicTriList triList) + { + triList.SetBoolSigAction(138, dev.Up); + triList.SetBoolSigAction(139, dev.Down); + triList.SetBoolSigAction(140, dev.Left); + triList.SetBoolSigAction(141, dev.Right); + triList.SetBoolSigAction(142, dev.Select); + triList.SetBoolSigAction(130, dev.Menu); + triList.SetBoolSigAction(134, dev.Exit); + } + + public static void UnlinkButtons(this IDPad dev, BasicTriList triList) + { + triList.ClearBoolSigAction(138); + triList.ClearBoolSigAction(139); + triList.ClearBoolSigAction(140); + triList.ClearBoolSigAction(141); + triList.ClearBoolSigAction(142); + triList.ClearBoolSigAction(130); + triList.ClearBoolSigAction(134); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDiscPlayerControls.cs b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDiscPlayerControls.cs new file mode 100644 index 00000000..31fb83b4 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDiscPlayerControls.cs @@ -0,0 +1,13 @@ +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.SmartObjects; + +namespace PepperDash.Essentials.Core +{ + + public interface IDiscPlayerControls : IColor, IDPad, INumericKeypad, IPower, ITransport, IUiDisplayInfo + { + } + +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDisplayBasic.cs b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDisplayBasic.cs new file mode 100644 index 00000000..5624f77c --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDisplayBasic.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +namespace PepperDash.Essentials.Core.Devices.DeviceTypeInterfaces +{ + public interface IDisplayBasic + { + void InputHdmi1(); + void InputHdmi2(); + void InputHdmi3(); + void InputHdmi4(); + void InputDisplayPort1(); + void InputDvi1(); + void InputVideo1(); + void InputVga1(); + void InputVga2(); + void InputRgb1(); + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDumbSource.cs b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDumbSource.cs new file mode 100644 index 00000000..1d4829cd --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDumbSource.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +namespace PepperDash.Essentials.Core +{ + public interface IDumbSource + { + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDvr.cs b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDvr.cs new file mode 100644 index 00000000..9e55702c --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDvr.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.SmartObjects; + +namespace PepperDash.Essentials.Core +{ + /// + /// + /// + public interface IDvr : IDPad + { + void DvrList(bool pressRelease); + void Record(bool pressRelease); + } + + /// + /// + /// + public static class IDvrExtensions + { + public static void LinkButtons(this IDvr dev, BasicTriList triList) + { + triList.SetBoolSigAction(136, dev.DvrList); + triList.SetBoolSigAction(152, dev.Record); + } + + public static void UnlinkButtons(this IDvr dev, BasicTriList triList) + { + triList.ClearBoolSigAction(136); + triList.ClearBoolSigAction(152); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/INumeric.cs b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/INumeric.cs new file mode 100644 index 00000000..0294a0b5 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/INumeric.cs @@ -0,0 +1,84 @@ +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.SmartObjects; + +namespace PepperDash.Essentials.Core +{ + /// + /// + /// + public interface INumericKeypad + { + void Digit0(bool pressRelease); + void Digit1(bool pressRelease); + void Digit2(bool pressRelease); + void Digit3(bool pressRelease); + void Digit4(bool pressRelease); + void Digit5(bool pressRelease); + void Digit6(bool pressRelease); + void Digit7(bool pressRelease); + void Digit8(bool pressRelease); + void Digit9(bool pressRelease); + + /// + /// Used to hide/show the button and/or text on the left-hand keypad button + /// + bool HasKeypadAccessoryButton1 { get; } + string KeypadAccessoryButton1Label { get; } + void KeypadAccessoryButton1(bool pressRelease); + + bool HasKeypadAccessoryButton2 { get; } + string KeypadAccessoryButton2Label { get; } + void KeypadAccessoryButton2(bool pressRelease); + } + + public interface ISetTopBoxNumericKeypad : INumericKeypad + { + void Dash(bool pressRelease); + void KeypadEnter(bool pressRelease); + } + + /// + /// + /// + public static class INumericExtensions + { + /// + /// Links to the smart object, and sets the misc button's labels on joins x and y + /// + public static void LinkButtons(this INumericKeypad dev, BasicTriList trilist) + { + trilist.SetBoolSigAction(110, dev.Digit0); + trilist.SetBoolSigAction(111, dev.Digit1); + trilist.SetBoolSigAction(112, dev.Digit2); + trilist.SetBoolSigAction(113, dev.Digit3); + trilist.SetBoolSigAction(114, dev.Digit4); + trilist.SetBoolSigAction(115, dev.Digit5); + trilist.SetBoolSigAction(116, dev.Digit6); + trilist.SetBoolSigAction(117, dev.Digit7); + trilist.SetBoolSigAction(118, dev.Digit8); + trilist.SetBoolSigAction(119, dev.Digit9); + trilist.SetBoolSigAction(120, dev.KeypadAccessoryButton1); + trilist.SetBoolSigAction(121, dev.KeypadAccessoryButton2); + trilist.StringInput[111].StringValue = dev.KeypadAccessoryButton1Label; + trilist.StringInput[111].StringValue = dev.KeypadAccessoryButton2Label; + } + + public static void UnlinkButtons(this INumericKeypad dev, BasicTriList trilist) + { + trilist.ClearBoolSigAction(110); + trilist.ClearBoolSigAction(111); + trilist.ClearBoolSigAction(112); + trilist.ClearBoolSigAction(113); + trilist.ClearBoolSigAction(114); + trilist.ClearBoolSigAction(115); + trilist.ClearBoolSigAction(116); + trilist.ClearBoolSigAction(117); + trilist.ClearBoolSigAction(118); + trilist.ClearBoolSigAction(119); + trilist.ClearBoolSigAction(120); + trilist.ClearBoolSigAction(121); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IPower.cs b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IPower.cs new file mode 100644 index 00000000..c8750610 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IPower.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.SmartObjects; + +namespace PepperDash.Essentials.Core +{ + /// + /// + /// + public interface IPower + { + void PowerOn(); + void PowerOff(); + void PowerToggle(); + BoolFeedback PowerIsOnFeedback { get; } + } + + /// + /// + /// + public static class IPowerExtensions + { + public static void LinkButtons(this IPower dev, BasicTriList triList) + { + triList.SetSigFalseAction(101, dev.PowerOn); + triList.SetSigFalseAction(102, dev.PowerOff); + triList.SetSigFalseAction(103, dev.PowerToggle); + dev.PowerIsOnFeedback.LinkInputSig(triList.BooleanInput[101]); + } + + public static void UnlinkButtons(this IPower dev, BasicTriList triList) + { + triList.ClearBoolSigAction(101); + triList.ClearBoolSigAction(102); + triList.ClearBoolSigAction(103); + dev.PowerIsOnFeedback.UnlinkInputSig(triList.BooleanInput[101]); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/ISetTopBoxControls.cs b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/ISetTopBoxControls.cs new file mode 100644 index 00000000..8b043cac --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/ISetTopBoxControls.cs @@ -0,0 +1,55 @@ +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.SmartObjects; + +namespace PepperDash.Essentials.Core +{ + /// + /// + /// + public interface ISetTopBoxControls : IChannel, IColor, IDPad, ISetTopBoxNumericKeypad, + ITransport, IUiDisplayInfo + { + /// + /// Show DVR controls? + /// + bool HasDvr { get; } + + /// + /// Show presets controls? + /// + bool HasPresets { get; } + + /// + /// Show number pad controls? + /// + bool HasNumeric { get; } + + /// + /// Show D-pad controls? + /// + bool HasDpad { get; } + + PepperDash.Essentials.Core.Presets.DevicePresetsModel PresetsModel { get; } + void LoadPresets(string filePath); + + void DvrList(bool pressRelease); + void Replay(bool pressRelease); + } + + public static class ISetTopBoxControlsExtensions + { + public static void LinkButtons(this ISetTopBoxControls dev, BasicTriList triList) + { + triList.SetBoolSigAction(136, dev.DvrList); + triList.SetBoolSigAction(152, dev.Replay); + } + + public static void UnlinkButtons(this ISetTopBoxControls dev, BasicTriList triList) + { + triList.ClearBoolSigAction(136); + triList.ClearBoolSigAction(152); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/ITransport.cs b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/ITransport.cs new file mode 100644 index 00000000..1189c10b --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/ITransport.cs @@ -0,0 +1,53 @@ +using Crestron.SimplSharpPro.DeviceSupport; + +namespace PepperDash.Essentials.Core +{ + /// + /// + /// + public interface ITransport + { + void Play(bool pressRelease); + void Pause(bool pressRelease); + void Rewind(bool pressRelease); + void FFwd(bool pressRelease); + void ChapMinus(bool pressRelease); + void ChapPlus(bool pressRelease); + void Stop(bool pressRelease); + void Record(bool pressRelease); + } + + /// + /// + /// + public static class ITransportExtensions + { + /// + /// Attaches to trilist joins: Play:145, Pause:146, Stop:147, ChapPlus:148, ChapMinus:149, Rewind:150, Ffwd:151, Record:154 + /// + /// + public static void LinkButtons(this ITransport dev, BasicTriList triList) + { + triList.SetBoolSigAction(145, dev.Play); + triList.SetBoolSigAction(146, dev.Pause); + triList.SetBoolSigAction(147, dev.Stop); + triList.SetBoolSigAction(148, dev.ChapPlus); + triList.SetBoolSigAction(149, dev.ChapMinus); + triList.SetBoolSigAction(150, dev.Rewind); + triList.SetBoolSigAction(151, dev.FFwd); + triList.SetBoolSigAction(154, dev.Record); + } + + public static void UnlinkButtons(this ITransport dev, BasicTriList triList) + { + triList.ClearBoolSigAction(145); + triList.ClearBoolSigAction(146); + triList.ClearBoolSigAction(147); + triList.ClearBoolSigAction(148); + triList.ClearBoolSigAction(149); + triList.ClearBoolSigAction(150); + triList.ClearBoolSigAction(151); + triList.ClearBoolSigAction(154); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IUiDisplayInfo.cs b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IUiDisplayInfo.cs new file mode 100644 index 00000000..fb51f7e2 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IUiDisplayInfo.cs @@ -0,0 +1,12 @@ +using PepperDash.Core; + +namespace PepperDash.Essentials.Core +{ + /// + /// Describes things needed to show on UI + /// + public interface IUiDisplayInfo : IKeyed + { + uint DisplayUiType { get; } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IWarmingCooling.cs b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IWarmingCooling.cs new file mode 100644 index 00000000..2baf1548 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IWarmingCooling.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +namespace PepperDash.Essentials.Core +{ + /// + /// Defines a class that has warm up and cool down + /// + public interface IWarmingCooling + { + BoolFeedback IsWarmingUpFeedback { get; } + BoolFeedback IsCoolingDownFeedback { get; } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Template.cs b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Template.cs new file mode 100644 index 00000000..31f71df9 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Template.cs @@ -0,0 +1,9 @@ +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.SmartObjects; + +namespace PepperDash.Essentials.Core +{ + +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/DeviceJsonApi.cs b/Essentials Core/PepperDashEssentialsBase/Devices/DeviceJsonApi.cs new file mode 100644 index 00000000..585089ae --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/DeviceJsonApi.cs @@ -0,0 +1,250 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharp.Reflection; +using Newtonsoft.Json; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + public class DeviceJsonApi + { + /// + /// + /// + /// + public static void DoDeviceActionWithJson(string json) + { + var action = JsonConvert.DeserializeObject(json); + DoDeviceAction(action); + } + + + /// + /// + /// + /// + public static void DoDeviceAction(DeviceActionWrapper action) + { + var key = action.DeviceKey; + var obj = FindObjectOnPath(key); + if (obj == null) + return; + + CType t = obj.GetType(); + var method = t.GetMethod(action.MethodName); + if (method == null) + { + Debug.Console(0, "Method '{0}' not found", action.MethodName); + return; + } + var mParams = method.GetParameters(); + // Add empty params if not provided + if (action.Params == null) action.Params = new object[0]; + if (mParams.Length > action.Params.Length) + { + Debug.Console(0, "Method '{0}' requires {1} params", action.MethodName, mParams.Length); + return; + } + object[] convertedParams = mParams + .Select((p, i) => Convert.ChangeType(action.Params[i], p.ParameterType, + System.Globalization.CultureInfo.InvariantCulture)) + .ToArray(); + object ret = method.Invoke(obj, convertedParams); + //Debug.Console(0, JsonConvert.SerializeObject(ret)); + // return something? + } + + /// + /// + /// + /// + /// + public static string GetProperties(string deviceObjectPath) + { + var obj = FindObjectOnPath(deviceObjectPath); + if (obj == null) + return "{ \"error\":\"No Device\"}"; + + CType t = obj.GetType(); + // get the properties and set them into a new collection of NameType wrappers + var props = t.GetProperties().Select(p => new PropertyNameType(p)); + return JsonConvert.SerializeObject(props, Formatting.Indented); + } + + /// + /// + /// + /// + /// + public static string GetMethods(string deviceObjectPath) + { + var obj = FindObjectOnPath(deviceObjectPath); + if (obj == null) + return "{ \"error\":\"No Device\"}"; + + // Package up method names using helper objects + CType t = obj.GetType(); + var methods = t.GetMethods() + .Where(m => !m.IsSpecialName) + .Select(p => new MethodNameParams(p)); + return JsonConvert.SerializeObject(methods, Formatting.Indented); + } + + public static string GetApiMethods(string deviceObjectPath) + { + var obj = FindObjectOnPath(deviceObjectPath); + if (obj == null) + return "{ \"error\":\"No Device\"}"; + + // Package up method names using helper objects + CType t = obj.GetType(); + var methods = t.GetMethods() + .Where(m => !m.IsSpecialName) + .Where(m => m.GetCustomAttributes(typeof(ApiAttribute), true).Any()) + .Select(p => new MethodNameParams(p)); + return JsonConvert.SerializeObject(methods, Formatting.Indented); + } + + + /// + /// Walks down a dotted object path, starting with a Device, and returns the object + /// at the end of the path + /// + public static object FindObjectOnPath(string deviceObjectPath) + { + var path = deviceObjectPath.Split('.'); + + var dev = DeviceManager.GetDeviceForKey(path[0]); + if (dev == null) + { + Debug.Console(0, "Device {0} not found", path[0]); + return null; + } + + // loop through any dotted properties + object obj = dev; + if (path.Length > 1) + { + for (int i = 1; i < path.Length; i++) + { + var objName = path[i]; + string indexStr = null; + var indexOpen = objName.IndexOf('['); + if (indexOpen != -1) + { + var indexClose = objName.IndexOf(']'); + if (indexClose == -1) + { + Debug.Console(0, dev, "ERROR Unmatched index brackets"); + return null; + } + // Get the index and strip quotes if any + indexStr = objName.Substring(indexOpen + 1, indexClose - indexOpen - 1).Replace("\"", ""); + objName = objName.Substring(0, indexOpen); + Debug.Console(0, dev, " Checking for collection '{0}', index '{1}'", objName, indexStr); + } + + CType oType = obj.GetType(); + var prop = oType.GetProperty(objName); + if (prop == null) + { + Debug.Console(0, dev, "Property {0} not found on {1}", objName, path[i - 1]); + return null; + } + // if there's an index, try to get the property + if (indexStr != null) + { + if (!typeof(ICollection).IsAssignableFrom(prop.PropertyType)) + { + Debug.Console(0, dev, "Property {0} is not collection", objName); + return null; + } + var collection = prop.GetValue(obj, null) as ICollection; + // Get the indexed items "property" + var indexedPropInfo = prop.PropertyType.GetProperty("Item"); + // These are the parameters for the indexing. Only care about one + var indexParams = indexedPropInfo.GetIndexParameters(); + if (indexParams.Length > 0) + { + Debug.Console(0, " Indexed, param type: {0}", indexParams[0].ParameterType.Name); + var properParam = Convert.ChangeType(indexStr, indexParams[0].ParameterType, + System.Globalization.CultureInfo.InvariantCulture); + try + { + obj = indexedPropInfo.GetValue(collection, new object[] { properParam }); + } + // if the index is bad, catch it here. + catch (Crestron.SimplSharp.Reflection.TargetInvocationException e) + { + if (e.InnerException is ArgumentOutOfRangeException) + Debug.Console(0, " Index Out of range"); + else if (e.InnerException is KeyNotFoundException) + Debug.Console(0, " Key not found"); + return null; + } + } + + } + else + obj = prop.GetValue(obj, null); + } + } + return obj; + } + } + + public class DeviceActionWrapper + { + public string DeviceKey { get; set; } + public string MethodName { get; set; } + public object[] Params { get; set; } + } + + public class PropertyNameType + { + [JsonIgnore] + public PropertyInfo PropInfo { get; private set; } + public string Name { get { return PropInfo.Name; } } + public string Type { get { return PropInfo.PropertyType.Name; } } + + public PropertyNameType(PropertyInfo info) + { + PropInfo = info; + } + } + + public class MethodNameParams + { + [JsonIgnore] + public MethodInfo MethodInfo { get; private set; } + + public string Name { get { return MethodInfo.Name; } } + public IEnumerable Params { get { + return MethodInfo.GetParameters().Select(p => + new NameType { Name = p.Name, Type = p.ParameterType.Name }); + } } + + public MethodNameParams(MethodInfo info) + { + MethodInfo = info; + } + } + + public class NameType + { + public string Name { get; set; } + public string Type { get; set; } + } + + [AttributeUsage(AttributeTargets.All)] + public class ApiAttribute : CAttribute + { + + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/DeviceManager.cs b/Essentials Core/PepperDashEssentialsBase/Devices/DeviceManager.cs new file mode 100644 index 00000000..40f8ec26 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/DeviceManager.cs @@ -0,0 +1,211 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; +using Crestron.SimplSharpPro.EthernetCommunication; +using Crestron.SimplSharpPro.UI; +using Crestron.SimplSharp.Reflection; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + public static class DeviceManager + { + //public static List Devices { get { return _Devices; } } + //static List _Devices = new List(); + + static Dictionary Devices = new Dictionary(StringComparer.OrdinalIgnoreCase); + + /// + /// Returns a copy of all the devices in a list + /// + public static List AllDevices { get { return new List(Devices.Values); } } + + public static void Initialize(CrestronControlSystem cs) + { + CrestronConsole.AddNewConsoleCommand(ListDeviceCommands, "devcmdlist", "Lists commands", + ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(DoDeviceCommand, "devcmd", "Runs a command on device - key Name value", + ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(ListDeviceCommStatuses, "devcommstatus", "Lists the communication status of all devices", + ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(ListDeviceFeedbacks, "devfb", "Lists current feedbacks", + ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(ListDevices, "devlist", "Lists current managed devices", + ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(DeviceJsonApi.DoDeviceActionWithJson, "devjson", "", + ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(s => + { + CrestronConsole.ConsoleCommandResponse(DeviceJsonApi.GetProperties(s)); + }, "devprops", "", ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(s => + { + CrestronConsole.ConsoleCommandResponse(DeviceJsonApi.GetMethods(s)); + }, "devmethods", "", ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(s => + { + CrestronConsole.ConsoleCommandResponse(DeviceJsonApi.GetApiMethods(s)); + }, "apimethods", "", ConsoleAccessLevelEnum.AccessOperator); + } + + /// + /// Calls activate on all Device class items + /// + public static void ActivateAll() + { + foreach (var d in Devices.Values) + { + if (d is Device) + (d as Device).Activate(); + } + } + + /// + /// Calls activate on all Device class items + /// + public static void DeactivateAll() + { + foreach (var d in Devices.Values) + { + if (d is Device) + (d as Device).Deactivate(); + } + } + + //static void ListMethods(string devKey) + //{ + // var dev = GetDeviceForKey(devKey); + // if(dev != null) + // { + // var type = dev.GetType().GetCType(); + // var methods = type.GetMethods(BindingFlags.Public|BindingFlags.Instance); + // var sb = new StringBuilder(); + // sb.AppendLine(string.Format("{2} methods on [{0}] ({1}):", dev.Key, type.Name, methods.Length)); + // foreach (var m in methods) + // { + // sb.Append(string.Format("{0}(", m.Name)); + // var pars = m.GetParameters(); + // foreach (var p in pars) + // sb.Append(string.Format("({1}){0} ", p.Name, p.ParameterType.Name)); + // sb.AppendLine(")"); + // } + // CrestronConsole.ConsoleCommandResponse(sb.ToString()); + // } + //} + + static void ListDevices(string s) + { + Debug.Console(0, "{0} Devices registered with Device Mangager:",Devices.Count); + var sorted = Devices.Values.ToList(); + sorted.Sort((a, b) => a.Key.CompareTo(b.Key)); + //var devs = Devices.Values.Where(d => d is IKeyed).Select(d => d as IKeyed); + + foreach (var d in sorted) + { + var name = d is IKeyName ? (d as IKeyName).Name : "---"; + Debug.Console(0, " [{0}] {1}", d.Key, name); + } + } + + static void ListDeviceFeedbacks(string devKey) + { + var dev = GetDeviceForKey(devKey); + if(dev == null) + { + Debug.Console(0, "Device '{0}' not found", devKey); + return; + } + var statusDev = dev as IHasFeedback; + if(statusDev == null) + { + Debug.Console(0, "Device '{0}' does not have visible feedbacks", devKey); + return; + } + statusDev.DumpFeedbacksToConsole(true); + } + + static void ListDeviceCommands(string devKey) + { + var dev = GetDeviceForKey(devKey); + if (dev == null) + { + Debug.Console(0, "Device '{0}' not found", devKey); + return; + } + Debug.Console(0, "This needs to be reworked. Stay tuned.", devKey); + } + + static void ListDeviceCommStatuses(string input) + { + var sb = new StringBuilder(); + foreach (var dev in Devices.Values) + { + if (dev is ICommunicationMonitor) + sb.Append(string.Format("{0}: {1}\r", dev.Key, (dev as ICommunicationMonitor).CommunicationMonitor.Status)); + } + CrestronConsole.ConsoleCommandResponse(sb.ToString()); + } + + + static void DoDeviceCommand(string command) + { + Debug.Console(0, "Not yet implemented. Stay tuned"); + } + + public static void AddDevice(IKeyed newDev) + { + // Check for device with same key + //var existingDevice = _Devices.FirstOrDefault(d => d.Key.Equals(newDev.Key, StringComparison.OrdinalIgnoreCase)); + ////// If it exists, remove or warn?? + //if (existingDevice != null) + if(Devices.ContainsKey(newDev.Key)) + { + Debug.Console(0, newDev, "A device with this key already exists. Not added to manager"); + return; + } + Devices.Add(newDev.Key, newDev); + //if (!(_Devices.Contains(newDev))) + // _Devices.Add(newDev); + } + + public static void RemoveDevice(IKeyed newDev) + { + if(newDev == null) + return; + if (Devices.ContainsKey(newDev.Key)) + Devices.Remove(newDev.Key); + //if (_Devices.Contains(newDev)) + // _Devices.Remove(newDev); + else + Debug.Console(0, "Device manager: Device '{0}' does not exist in manager. Cannot remove", newDev.Key); + } + + public static IEnumerable GetDeviceKeys() + { + //return _Devices.Select(d => d.Key).ToList(); + return Devices.Keys; + } + + public static IEnumerable GetDevices() + { + //return _Devices.Select(d => d.Key).ToList(); + return Devices.Values; + } + + public static IKeyed GetDeviceForKey(string key) + { + //return _Devices.FirstOrDefault(d => d.Key.Equals(key, StringComparison.OrdinalIgnoreCase)); + if (key != null && Devices.ContainsKey(key)) + return Devices[key]; + + return null; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/DisplayUiConstants.cs b/Essentials Core/PepperDashEssentialsBase/Devices/DisplayUiConstants.cs new file mode 100644 index 00000000..a42239fc --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/DisplayUiConstants.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +namespace PepperDash.Essentials.Core +{ + /// + /// Integers that represent the "source type number" for given sources. + /// Primarily used by the UI to calculate subpage join offsets + /// Note, for UI, only values 1-49 are valid. + /// + public class DisplayUiConstants + { + public const uint TypeRadio = 1; + public const uint TypeDirecTv = 9; + public const uint TypeBluray = 13; + public const uint TypeChromeTv = 15; + public const uint TypeFireTv = 16; + public const uint TypeAppleTv = 17; + public const uint TypeRoku = 18; + public const uint TypeLaptop = 31; + public const uint TypePc = 32; + + public const uint TypeNoControls = 49; + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/FIND HOMES Interfaces.cs b/Essentials Core/PepperDashEssentialsBase/Devices/FIND HOMES Interfaces.cs new file mode 100644 index 00000000..318f5179 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/FIND HOMES Interfaces.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + public interface IOnline + { + BoolFeedback IsOnline { get; } + } + + ///// + ///// ** WANT THIS AND ALL ITS FRIENDS TO GO AWAY ** + ///// Defines a class that has a list of CueAction objects, typically + ///// for linking functions to user interfaces or API calls + ///// + //public interface IHasCueActionList + //{ + // List CueActionList { get; } + //} + + + //public interface IHasComPortsHardware + //{ + // IComPorts ComPortsDevice { get; } + //} + + /// + /// Describes a device that can have a video sync providing device attached to it + /// + public interface IAttachVideoStatus : IKeyed + { + // Extension methods will depend on this + } + + /// + /// For display classes that can provide usage data + /// + public interface IDisplayUsage + { + IntFeedback LampHours { get; } + } + + public interface IMakeModel : IKeyed + { + string DeviceMake { get; } + string DeviceModel { get; } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/GenericMonitoredTcpDevice.cs b/Essentials Core/PepperDashEssentialsBase/Devices/GenericMonitoredTcpDevice.cs new file mode 100644 index 00000000..e7267782 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/GenericMonitoredTcpDevice.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core.Devices +{ + public class GenericCommunicationMonitoredDevice : Device, ICommunicationMonitor + { + IBasicCommunication Client; + + public StatusMonitorBase CommunicationMonitor { get; private set; } + + public GenericCommunicationMonitoredDevice(string key, string name, IBasicCommunication comm, string pollString, + long pollTime, long warningTime, long errorTime) + : base(key, name) + { + Client = comm; + CommunicationMonitor = new GenericCommunicationMonitor(this, Client, pollTime, warningTime, errorTime, pollString); + + // ------------------------------------------------------DELETE THIS + CommunicationMonitor.StatusChange += (o, a) => + { + Debug.Console(2, this, "Communication monitor status change: {0}", a.Status); + }; + + } + + public GenericCommunicationMonitoredDevice(string key, string name, IBasicCommunication comm, string pollString) + : this(key, name, comm, pollString, 30000, 120000, 300000) + { + } + + + /// + /// Generic monitor for TCP reachability. Default with 30s poll, 120s warning and 300s error times + /// + [Obsolete] + public GenericCommunicationMonitoredDevice(string key, string name, string hostname, int port, string pollString) + : this(key, name, hostname, port, pollString, 30000, 120000, 300000) + { + } + + /// + /// Monitor for TCP reachability + /// + [Obsolete] + public GenericCommunicationMonitoredDevice(string key, string name, string hostname, int port, string pollString, + long pollTime, long warningTime, long errorTime) + : base(key, name) + { + Client = new GenericTcpIpClient(key + "-tcp", hostname, port, 512); + CommunicationMonitor = new GenericCommunicationMonitor(this, Client, pollTime, warningTime, errorTime, pollString); + + // ------------------------------------------------------DELETE THIS + CommunicationMonitor.StatusChange += (o, a) => + { + Debug.Console(2, this, "Communication monitor status change: {0}", a.Status); + }; + } + + + public override bool CustomActivate() + { + CommunicationMonitor.Start(); + return true; + } + + public override bool Deactivate() + { + CommunicationMonitor.Stop(); + return true; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/IAttachVideoStatusExtensions.cs b/Essentials Core/PepperDashEssentialsBase/Devices/IAttachVideoStatusExtensions.cs new file mode 100644 index 00000000..e5218ee0 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/IAttachVideoStatusExtensions.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +namespace PepperDash.Essentials.Core +{ + public static class IAttachVideoStatusExtensions + { + /// + /// Gets the VideoStatusOutputs for the device + /// + /// + /// Attached VideoStatusOutputs or the default if none attached + public static VideoStatusOutputs GetVideoStatuses(this IAttachVideoStatus attachedDev) + { + // See if this device is connected to a status-providing port + var tl = TieLineCollection.Default.FirstOrDefault(t => + t.SourcePort.ParentDevice == attachedDev + && t.DestinationPort is RoutingInputPortWithVideoStatuses); + if (tl != null) + { + // if so, and it's got status, return it -- or null + var port = tl.DestinationPort as RoutingInputPortWithVideoStatuses; + if (port != null) + return port.VideoStatus; + } + return VideoStatusOutputs.NoStatus; + } + + public static bool HasVideoStatuses(this IAttachVideoStatus attachedDev) + { + return TieLineCollection.Default.FirstOrDefault(t => + t.SourcePort.ParentDevice == attachedDev + && t.DestinationPort is RoutingInputPortWithVideoStatuses) != null; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks.cs b/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks.cs new file mode 100644 index 00000000..d06b78c1 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using System.Linq; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Core; + +namespace PepperDash.Essentials.Core +{ + public interface IHasFeedback : IKeyed + { + /// + /// This method shall return a list of all Output objects on a device, + /// including all "aggregate" devices. + /// + List Feedbacks { get; } + + } + + + public static class IHasFeedbackExtensions + { + public static void DumpFeedbacksToConsole(this IHasFeedback source, bool getCurrentStates) + { + var outputs = source.Feedbacks.OrderBy(x => x.Type); + if (outputs != null) + { + Debug.Console(0, source, "\n\nAvailable outputs:"); + foreach (var o in outputs) + { + string val = ""; + if (getCurrentStates) + { + switch (o.Type) + { + case eCueType.Bool: + val = " = " + o.BoolValue; + break; + case eCueType.Int: + val = " = " + o.IntValue; + break; + case eCueType.String: + val = " = " + o.StringValue; + break; + //case eOutputType.Other: + // break; + } + } + Debug.Console(0, "{0,-8} {1,5} {2}{3}", o.Type, o.Cue.Number, + (string.IsNullOrEmpty(o.Cue.Name) ? "-none-" : o.Cue.Name), val); + } + } + else + Debug.Console(0, source, "No available outputs:"); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/IVolumeAndAudioInterfaces.cs b/Essentials Core/PepperDashEssentialsBase/Devices/IVolumeAndAudioInterfaces.cs new file mode 100644 index 00000000..02786ba7 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/IVolumeAndAudioInterfaces.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +namespace PepperDash.Essentials.Core +{ + /// + /// Defines minimal volume control methods + /// + public interface IBasicVolumeControls + { + void VolumeUp(bool pressRelease); + void VolumeDown(bool pressRelease); + void MuteToggle(); + } + + /// + /// Adds feedback and direct volume level set to IBasicVolumeControls + /// + public interface IBasicVolumeWithFeedback : IBasicVolumeControls + { + void SetVolume(ushort level); + void MuteOn(); + void MuteOff(); + IntFeedback VolumeLevelFeedback { get; } + BoolFeedback MuteFeedback { get; } + } + + + /// + /// + /// + public interface IFullAudioSettings : IBasicVolumeWithFeedback + { + void SetBalance(ushort level); + void BalanceLeft(bool pressRelease); + void BalanceRight(bool pressRelease); + + void SetBass(ushort level); + void BassUp(bool pressRelease); + void BassDown(bool pressRelease); + + void SetTreble(ushort level); + void TrebleUp(bool pressRelease); + void TrebleDown(bool pressRelease); + + bool hasMaxVolume { get; } + void SetMaxVolume(ushort level); + void MaxVolumeUp(bool pressRelease); + void MaxVolumeDown(bool pressRelease); + + bool hasDefaultVolume { get; } + void SetDefaultVolume(ushort level); + void DefaultVolumeUp(bool pressRelease); + void DefaultVolumeDown(bool pressRelease); + + void LoudnessToggle(); + void MonoToggle(); + + BoolFeedback LoudnessFeedback { get; } + BoolFeedback MonoFeedback { get; } + IntFeedback BalanceFeedback { get; } + IntFeedback BassFeedback { get; } + IntFeedback TrebleFeedback { get; } + IntFeedback MaxVolumeFeedback { get; } + IntFeedback DefaultVolumeFeedback { get; } + } + + + + /// + /// A class that implements this, contains a reference to an IBasicVolumeControls device. + /// For example, speakers attached to an audio zone. The speakers can provide reference + /// to their linked volume control. + /// + public interface IHasVolumeDevice + { + IBasicVolumeControls VolumeDevice { get; } + } + + /// + /// Identifies a device that contains audio zones + /// + public interface IAudioZones : IRouting + { + Dictionary Zone { get; } + } + + /// + /// Defines minimum functionality for an audio zone + /// + public interface IAudioZone : IBasicVolumeWithFeedback + { + void SelectInput(ushort input); + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/IrOutputPortController.cs b/Essentials Core/PepperDashEssentialsBase/Devices/IrOutputPortController.cs new file mode 100644 index 00000000..c67afe1c --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/IrOutputPortController.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Core; + +namespace PepperDash.Essentials.Core +{ + + /// + /// IR port wrapper. May act standalone + /// + public class IrOutputPortController : Device + { + uint IrPortUid; + IROutputPort IrPort; + + public ushort StandardIrPulseTime { get; set; } + public string DriverFilepath { get; private set; } + public bool DriverIsLoaded { get; private set; } + + /// + /// Constructor for IrDevice base class. If a null port is provided, this class will + /// still function without trying to talk to a port. + /// + public IrOutputPortController(string key, IROutputPort port, string irDriverFilepath) + : base(key) + { + //if (port == null) throw new ArgumentNullException("port"); + IrPort = port; + if (port == null) + { + Debug.Console(0, this, "WARNING No valid IR Port assigned to controller. IR will not function"); + return; + } + LoadDriver(irDriverFilepath); + } + + /// + /// Loads the IR driver at path + /// + /// + public void LoadDriver(string path) + { + if (string.IsNullOrEmpty(path)) path = DriverFilepath; + try + { + IrPortUid = IrPort.LoadIRDriver(path); + DriverFilepath = path; + StandardIrPulseTime = 200; + DriverIsLoaded = true; + } + catch + { + DriverIsLoaded = false; + var message = string.Format("WARNING IR Driver '{0}' failed to load", path); + Debug.Console(0, this, message); + ErrorLog.Error(message); + } + } + + + /// + /// Starts and stops IR command on driver. Safe for missing commands + /// + public virtual void PressRelease(string command, bool state) + { + Debug.Console(2, this, "IR:'{0}'={1}", command, state); + if (IrPort == null) + { + Debug.Console(2, this, "WARNING No IR Port assigned to controller"); + return; + } + if (!DriverIsLoaded) + { + Debug.Console(2, this, "WARNING IR driver is not loaded"); + return; + } + if (state) + { + if (IrPort.IsIRCommandAvailable(IrPortUid, command)) + IrPort.Press(IrPortUid, command); + else + NoIrCommandError(command); + } + else + IrPort.Release(); + } + + /// + /// Pulses a command on driver. Safe for missing commands + /// + public virtual void Pulse(string command, ushort time) + { + if (IrPort == null) + { + Debug.Console(2, this, "WARNING No IR Port assigned to controller"); + return; + } + if (!DriverIsLoaded) + { + Debug.Console(2, this, "WARNING IR driver is not loaded"); + return; + } + if (IrPort.IsIRCommandAvailable(IrPortUid, command)) + IrPort.PressAndRelease(IrPortUid, command, time); + else + NoIrCommandError(command); + } + + /// + /// Notifies the console when a bad command is used. + /// + protected void NoIrCommandError(string command) + { + Debug.Console(2, this, "Device {0}: IR Driver {1} does not contain command {2}", + Key, IrPort.IRDriverFileNameByIRDriverId(IrPortUid), command); + } + + + ///// + ///// When fed a dictionary of uint, string, will return UOs for each item, + ///// attached to this IrOutputPort + ///// + ///// + ///// + //public List GetUOsForIrCommands(Dictionary numStringDict) + //{ + // var funcs = new List(numStringDict.Count); + // foreach (var kvp in numStringDict) + // { + // // Have to assign these locally because of kvp's scope + // var cue = kvp.Key; + // var command = kvp.Value; + // funcs.Add(new BoolCueActionPair(cue, b => this.PressRelease(command, b))); + // } + // return funcs; + //} + + + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/MOVED TO CORE Device.cs b/Essentials Core/PepperDashEssentialsBase/Devices/MOVED TO CORE Device.cs new file mode 100644 index 00000000..9fde162b --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/MOVED TO CORE Device.cs @@ -0,0 +1,92 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; + +//namespace PepperDash.Essentials.Core +//{ +// //********************************************************************************************************* +// /// +// /// The core event and status-bearing class that most if not all device and connectors can derive from. +// /// +// public class Device : IKeyed +// { +// public string Key { get; protected set; } +// public string Name { get; protected set; } +// public bool Enabled { get; protected set; } +// List _PreActivationActions; +// List _PostActivationActions; + +// public static Device DefaultDevice { get { return _DefaultDevice; } } +// static Device _DefaultDevice = new Device("Default", "Default"); + +// /// +// /// Base constructor for all Devices. +// /// +// /// +// public Device(string key) +// { +// Key = key; +// if (key.Contains('.')) Debug.Console(0, this, "WARNING: Device name's should not include '.'"); +// Name = ""; +// } + +// public Device(string key, string name) : this(key) +// { +// Name = name; +// } + +// public void AddPreActivationAction(Action act) +// { +// if (_PreActivationActions == null) +// _PreActivationActions = new List(); +// _PreActivationActions.Add(act); +// } + +// public void AddPostActivationAction(Action act) +// { +// if (_PostActivationActions == null) +// _PostActivationActions = new List(); +// _PostActivationActions.Add(act); +// } + +// /// +// /// Gets this device ready to be used in the system. Runs any added pre-activation items, and +// /// all post-activation at end. Classes needing additional logic to +// /// run should override CustomActivate() +// /// +// public bool Activate() +// { +// if (_PreActivationActions != null) +// _PreActivationActions.ForEach(a => a.Invoke()); +// var result = CustomActivate(); +// if(result && _PostActivationActions != null) +// _PostActivationActions.ForEach(a => a.Invoke()); +// return result; +// } + +// /// +// /// Called in between Pre and PostActivationActions when Activate() is called. +// /// Override to provide addtitional setup when calling activation. Overriding classes +// /// do not need to call base.CustomActivate() +// /// +// /// true if device activated successfully. +// public virtual bool CustomActivate() { return true; } + +// /// +// /// Call to deactivate device - unlink events, etc. Overriding classes do not +// /// need to call base.Deactivate() +// /// +// /// +// public virtual bool Deactivate() { return true; } + +// /// +// /// Helper method to check object for bool value false and fire an Action method +// /// +// /// Should be of type bool, others will be ignored +// /// Action to be run when o is false +// public void OnFalse(object o, Action a) +// { +// if (o is bool && !(bool)o) a(); +// } +// } +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/NewInterfaces.cs b/Essentials Core/PepperDashEssentialsBase/Devices/NewInterfaces.cs new file mode 100644 index 00000000..ca6524f4 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/NewInterfaces.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +namespace PepperDash.Essentials.Core +{ + //public interface IVolumeFunctions + //{ + // BoolCueActionPair VolumeUpCueActionPair { get; } + // BoolCueActionPair VolumeDownCueActionPair { get; } + // BoolCueActionPair MuteToggleCueActionPair { get; } + //} + + //public interface IVolumeTwoWay : IVolumeFunctions + //{ + // IntFeedback VolumeLevelFeedback { get; } + // UShortCueActionPair VolumeLevelCueActionPair { get; } + // BoolFeedback IsMutedFeedback { get; } + //} + + ///// + ///// + ///// + //public static class IFunctionListExtensions + //{ + // public static string GetFunctionsConsoleList(this IHasCueActionList device) + // { + // var sb = new StringBuilder(); + // var list = device.CueActionList; + // foreach (var cap in list) + // sb.AppendFormat("{0,-15} {1,4} {2}\r", cap.Cue.Name, cap.Cue.Number, cap.GetType().Name); + // return sb.ToString(); + // } + //} + + public enum AudioChangeType + { + Mute, Volume + } + + public class AudioChangeEventArgs + { + public AudioChangeType ChangeType { get; private set; } + public IBasicVolumeControls AudioDevice { get; private set; } + + public AudioChangeEventArgs(IBasicVolumeControls device, AudioChangeType changeType) + { + ChangeType = changeType; + AudioDevice = device; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/PresentationDeviceType.cs b/Essentials Core/PepperDashEssentialsBase/Devices/PresentationDeviceType.cs new file mode 100644 index 00000000..adb427fb --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/PresentationDeviceType.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; +using Crestron.SimplSharpPro.EthernetCommunication; +using Crestron.SimplSharpPro.UI; + +namespace PepperDash.Essentials.Core +{ + //[Obsolete] + //public class PresentationDeviceType + //{ + // public const ushort Default = 1; + // public const ushort CableSetTopBox = 2; + // public const ushort SatelliteSetTopBox = 3; + // public const ushort Dvd = 4; + // public const ushort Bluray = 5; + // public const ushort PC = 9; + // public const ushort Laptop = 10; + //} + + public enum PresentationSourceType + { + None, Dvd, Laptop, PC, SetTopBox, VCR + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/REMOVE DefaultDevice.cs b/Essentials Core/PepperDashEssentialsBase/Devices/REMOVE DefaultDevice.cs new file mode 100644 index 00000000..a5954437 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/REMOVE DefaultDevice.cs @@ -0,0 +1,44 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using Crestron.SimplSharp; +//using Crestron.SimplSharpPro; +//using Crestron.SimplSharpPro.DeviceSupport; +//using Crestron.SimplSharpPro.EthernetCommunication; +//using Crestron.SimplSharpPro.UI; + +//using PepperDash.Core; + + +//namespace PepperDash.Essentials.Core +//{ + +//[Obsolete] +// public class PresentationDevice : Device, IPresentationSource +// { +// public PresentationSourceType Type { get; protected set; } +// public string IconName { get { return "Blank"; } set { } } +// public BoolFeedback HasPowerOnFeedback { get; protected set; } + +// PresentationDevice() +// : base("Default", "Default") +// { +// HasPowerOnFeedback = new BoolFeedback(CommonBoolCue.HasPowerFeedback, () => false); +// Type = PresentationSourceType.None; +// } + +// /// +// /// Returns a "default" presentation device, with no abilities. +// /// +// public static IPresentationSource Default +// { +// get +// { +// if (_Default == null) +// _Default = new PresentationDevice(); +// return _Default; +// } +// } +// static IPresentationSource _Default; +// } +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/REMOVE DeviceConfig.cs b/Essentials Core/PepperDashEssentialsBase/Devices/REMOVE DeviceConfig.cs new file mode 100644 index 00000000..280cb858 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/REMOVE DeviceConfig.cs @@ -0,0 +1,52 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using Crestron.SimplSharp; +//using Crestron.SimplSharpPro; + +//using Newtonsoft.Json; +//using Newtonsoft.Json.Linq; + +//namespace PepperDash.Essentials.Core +//{ + +// public class DeviceConfig +// { +// public string Key { get; set; } +// public string Name { get; set; } +// public string Type { get; set; } +// [JsonConverter(typeof(DevicePropertiesJsonConverter))] +// public JToken Properties { get; set; } + + +// } + +// /// +// /// The gist of this converter: The comspec JSON comes in with normal values that need to be converted +// /// into enum names. This converter takes the value and applies the appropriate enum's name prefix to the value +// /// and then returns the enum value using Enum.Parse +// /// +// public class DevicePropertiesJsonConverter : JsonConverter +// { +// public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) +// { +// return JObject.Load(reader); +// } + +// /// +// /// This will be hit with every value in the ComPortConfig class. We only need to +// /// do custom conversion on the comspec items. +// /// +// public override bool CanConvert(Type objectType) +// { +// return true; +// } + +// public override bool CanRead { get { return true; } } +// public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) +// { +// throw new NotImplementedException(); +// } +// } +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/REMOVE IHasFeedbacks.cs b/Essentials Core/PepperDashEssentialsBase/Devices/REMOVE IHasFeedbacks.cs new file mode 100644 index 00000000..511a952b --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/REMOVE IHasFeedbacks.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using System.Linq; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Core; + +namespace PepperDash.Essentials.Core +{ + //public interface IHasFeedback : IKeyed + //{ + // /// + // /// This method shall return a list of all Output objects on a device, + // /// including all "aggregate" devices. + // /// + // List Feedbacks { get; } + + //} + + + //public static class IHasFeedbackExtensions + //{ + // public static void DumpFeedbacksToConsole(this IHasFeedback source, bool getCurrentStates) + // { + // var outputs = source.Feedbacks.OrderBy(x => x.Type); + // if (outputs != null) + // { + // Debug.Console(0, source, "\n\nAvailable outputs:"); + // foreach (var o in outputs) + // { + // string val = ""; + // if (getCurrentStates) + // { + // switch (o.Type) + // { + // case eCueType.Bool: + // val = " = " + o.BoolValue; + // break; + // case eCueType.Int: + // val = " = " + o.IntValue; + // break; + // case eCueType.String: + // val = " = " + o.StringValue; + // break; + // //case eOutputType.Other: + // // break; + // } + // } + // Debug.Console(0, "{0,-8} {1,5} {2}{3}", o.Type, o.Cue.Number, + // (string.IsNullOrEmpty(o.Cue.Name) ? "-none-" : o.Cue.Name), val); + // } + // } + // else + // Debug.Console(0, source, "No available outputs:"); + // } + //} +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE DvdDeviceBase.cs b/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE DvdDeviceBase.cs new file mode 100644 index 00000000..a45f297c --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE DvdDeviceBase.cs @@ -0,0 +1,50 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using Crestron.SimplSharp; +//using Crestron.SimplSharpPro; +//using Crestron.SimplSharpPro.DeviceSupport; + +//using PepperDash.Core; + + +//namespace PepperDash.Essentials.Core +//{ +// public abstract class DvdDeviceBase : Device, IPresentationSource, IHasCueActionList +// { +// public DvdDeviceBase(string key, string name) +// : base(key, name) +// { +// HasPowerOnFeedback = new BoolFeedback(() => false); + +// } + +// #region IPresentationSource Members + +// PresentationSourceType IPresentationSource.Type +// { +// get { return PresentationSourceType.Dvd; } +// } + +// public string IconName +// { +// get +// { +// return "DVD"; +// } +// set { } +// } + +// public virtual BoolFeedback HasPowerOnFeedback { get; private set; } + +// #endregion + +// #region IFunctionList Members + +// public abstract List CueActionList { get; } + +// #endregion + +// } +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE IrDvdBase.cs b/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE IrDvdBase.cs new file mode 100644 index 00000000..bad059f9 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE IrDvdBase.cs @@ -0,0 +1,130 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using Crestron.SimplSharpPro; + +//using PepperDash.Essentials.Core; + +//using PepperDash.Core; + + +//namespace PepperDash.Essentials.Core +//{ +// /// +// /// This DVD class should cover most IR, one-way DVD and Bluray fuctions +// /// +// public class IrDvdBase : Device, IHasCueActionList, +// IPresentationSource, IAttachVideoStatus, IHasFeedback, IRoutingOutputs +// { +// public PresentationSourceType Type { get; protected set; } +// public string IconName { get; set; } + +// public BoolFeedback HasPowerOnFeedback { get; private set; } +// public IrOutputPortController IrPort { get; private set; } + +// public RoutingOutputPort HdmiOut { get; private set; } + +// #region IRoutingOutputs Members + +// /// +// /// Options: hdmi +// /// +// public RoutingPortCollection OutputPorts { get; private set; } + +// #endregion + +// public IrDvdBase(string key, string name, IROutputPort port, IrDriverInfo driverInfo) +// : base(key, name) +// { +// IrPort = new IrOutputPortController("ir-" + key, port, driverInfo.FileName); +// Type = PresentationSourceType.Dvd; +// IconName = "Bluray"; +// HasPowerOnFeedback = new BoolFeedback(CommonBoolCue.HasPowerFeedback, () => false); + +// HdmiOut = new RoutingOutputPort("HDMI", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 0, this); +// OutputPorts = new RoutingPortCollection() +// { +// HdmiOut +// }; +// CueActionList = IrPort.GetUOsForIrCommands(driverInfo.IrMap); +// } + +// public IrDvdBase(string key, string name, IROutputPort port, string irDriverFilepath) +// : base(key, name) +// { +// IrPort = new IrOutputPortController("ir-" + key, port, irDriverFilepath); +// Type = PresentationSourceType.Dvd; +// IconName = "Bluray"; +// HasPowerOnFeedback = new BoolFeedback(CommonBoolCue.HasPowerFeedback, () => false); + +// HdmiOut = new RoutingOutputPort("HDMI", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 0, this); +// OutputPorts = new RoutingPortCollection() +// { +// HdmiOut +// }; +// var numToIr = new Dictionary +// { +// { CommonBoolCue.Power, IROutputStandardCommands.IROut_POWER }, +// { CommonBoolCue.PowerOff, IROutputStandardCommands.IROut_POWER_OFF }, +// { CommonBoolCue.PowerOn, IROutputStandardCommands.IROut_POWER_ON }, +// { CommonBoolCue.Replay, IROutputStandardCommands.IROut_REPLAY }, +// { CommonBoolCue.Play, IROutputStandardCommands.IROut_PLAY }, +// { CommonBoolCue.Pause, IROutputStandardCommands.IROut_PAUSE }, +// { CommonBoolCue.Stop, IROutputStandardCommands.IROut_STOP }, +// { CommonBoolCue.ChapPrevious, IROutputStandardCommands.IROut_TRACK_MINUS }, +// { CommonBoolCue.ChapNext, IROutputStandardCommands.IROut_TRACK_PLUS }, +// { CommonBoolCue.Rewind, IROutputStandardCommands.IROut_RSCAN }, +// { CommonBoolCue.Ffwd, IROutputStandardCommands.IROut_FSCAN }, +// { CommonBoolCue.RStep, IROutputStandardCommands.IROut_R_STEP }, +// { CommonBoolCue.FStep, IROutputStandardCommands.IROut_F_STEP }, +// { CommonBoolCue.Exit, IROutputStandardCommands.IROut_EXIT }, +// { CommonBoolCue.Home, IROutputStandardCommands.IROut_HOME }, +// { CommonBoolCue.Menu, IROutputStandardCommands.IROut_MENU }, +// { CommonBoolCue.PopUp, IROutputStandardCommands.IROut_POPUPMENU }, +// { CommonBoolCue.Up, IROutputStandardCommands.IROut_UP_ARROW }, +// { CommonBoolCue.Down, IROutputStandardCommands.IROut_DN_ARROW }, +// { CommonBoolCue.Left, IROutputStandardCommands.IROut_LEFT_ARROW }, +// { CommonBoolCue.Right, IROutputStandardCommands.IROut_RIGHT_ARROW }, +// { CommonBoolCue.Select, IROutputStandardCommands.IROut_ENTER }, +// { CommonBoolCue.Info, IROutputStandardCommands.IROut_INFO }, +// { CommonBoolCue.Red, IROutputStandardCommands.IROut_RED }, +// { CommonBoolCue.Green, IROutputStandardCommands.IROut_GREEN }, +// { CommonBoolCue.Yellow, IROutputStandardCommands.IROut_YELLOW }, +// { CommonBoolCue.Blue, IROutputStandardCommands.IROut_BLUE }, +// { CommonBoolCue.Digit0, IROutputStandardCommands.IROut_0 }, +// { CommonBoolCue.Digit1, IROutputStandardCommands.IROut_1 }, +// { CommonBoolCue.Digit2, IROutputStandardCommands.IROut_2 }, +// { CommonBoolCue.Digit3, IROutputStandardCommands.IROut_3 }, +// { CommonBoolCue.Digit4, IROutputStandardCommands.IROut_4 }, +// { CommonBoolCue.Digit5, IROutputStandardCommands.IROut_5 }, +// { CommonBoolCue.Digit6, IROutputStandardCommands.IROut_6 }, +// { CommonBoolCue.Digit7, IROutputStandardCommands.IROut_7 }, +// { CommonBoolCue.Digit8, IROutputStandardCommands.IROut_8 }, +// { CommonBoolCue.Digit9, IROutputStandardCommands.IROut_9 }, +// { CommonBoolCue.Audio, "AUDIO" }, +// { CommonBoolCue.Subtitle, "SUBTITLE" }, +// { CommonBoolCue.Setup, "SETUP" }, +// }; +// CueActionList = IrPort.GetUOsForIrCommands(numToIr); +// } + + +// public List Feedbacks +// { +// get { return this.GetVideoStatuses().ToList(); } +// } + + +// #region IFunctionList Members + +// public List CueActionList { get; set; } + +// #endregion +// } + +// public class IrDriverInfo +// { +// public Dictionary IrMap { get; set; } +// public string FileName { get; set; } +// } +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE IrSetTopBoxBase.cs b/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE IrSetTopBoxBase.cs new file mode 100644 index 00000000..a607036f --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/REPLACE IrSetTopBoxBase.cs @@ -0,0 +1,143 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using Crestron.SimplSharpPro; + +//using PepperDash.Essentials.Core; +//using PepperDash.Essentials.Core.Presets; + +//using PepperDash.Core; + + +//namespace PepperDash.Essentials.Core +//{ +// /// +// /// This DVD class should cover most IR, one-way DVD and Bluray fuctions +// /// +// public class IrSetTopBoxBase : Device, IHasCueActionList, +// IPresentationSource, IAttachVideoStatus, IHasFeedback, IRoutingOutputs, IHasSetTopBoxProperties +// { +// public PresentationSourceType Type { get; protected set; } +// public string IconName { get; set; } + +// public BoolFeedback HasPowerOnFeedback { get; private set; } +// public IrOutputPortController IrPort { get; private set; } + +// public DevicePresetsModel PresetsModel { get; private set; } + +// #region IRoutingOutputs Members + +// /// +// /// Options: hdmi +// /// +// public RoutingPortCollection OutputPorts { get; private set; } + +// #endregion + +// public IrSetTopBoxBase(string key, string name, IROutputPort port, string irDriverFilepath) +// : base(key, name) +// { +// IrPort = new IrOutputPortController("ir-" + key, port, irDriverFilepath); +// Type = PresentationSourceType.SetTopBox; +// IconName = "TV"; +// HasPowerOnFeedback = new BoolFeedback(CommonBoolCue.HasPowerFeedback, () => false); +// OutputPorts = new RoutingPortCollection() +// { +// new RoutingOutputPort("HDMI", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 0, this) +// }; +// } + +// public void LoadPresets(string filePath) +// { +// //PresetsModel = new DevicePresetsModel(Key + "-presets", this, filePath); +// //DeviceManager.AddDevice(PresetsModel); +// } + +// #region IDeviceWithOutputs Members + +// public List Feedbacks +// { +// get { return this.GetVideoStatuses().ToList(); } +// } + +// #endregion + +// #region IFunctionList Members + +// public List CueActionList +// { +// get +// { +// // This might be the best way to get the words back into functions +// new BoolCueActionPair(CommonBoolCue.Power, b => IrPort.PressRelease(IROutputStandardCommands.IROut_POWER, b)); +// new BoolCueActionPair(CommonBoolCue.PowerOn, b => IrPort.PressRelease(IROutputStandardCommands.IROut_POWER_ON, b)); +// new BoolCueActionPair(CommonBoolCue.PowerOff, b => IrPort.PressRelease(IROutputStandardCommands.IROut_POWER_OFF, b)); +// new BoolCueActionPair(CommonBoolCue.ChannelUp, b => IrPort.PressRelease(IROutputStandardCommands.IROut_CH_PLUS, b)); + +// var numToIr = new Dictionary +// { +// { CommonBoolCue.Power, IROutputStandardCommands.IROut_POWER }, +// { CommonBoolCue.PowerOn, IROutputStandardCommands.IROut_POWER_ON }, +// { CommonBoolCue.PowerOff, IROutputStandardCommands.IROut_POWER_OFF }, +// { CommonBoolCue.ChannelUp, IROutputStandardCommands.IROut_CH_PLUS }, +// { CommonBoolCue.ChannelDown, IROutputStandardCommands.IROut_CH_MINUS }, +// { CommonBoolCue.Last, IROutputStandardCommands.IROut_LAST }, +// { CommonBoolCue.Play, IROutputStandardCommands.IROut_PLAY }, +// { CommonBoolCue.Pause, IROutputStandardCommands.IROut_PAUSE }, +// { CommonBoolCue.Stop, IROutputStandardCommands.IROut_STOP }, +// { CommonBoolCue.ChapPrevious, IROutputStandardCommands.IROut_TRACK_MINUS }, +// { CommonBoolCue.ChapNext, IROutputStandardCommands.IROut_TRACK_PLUS }, +// { CommonBoolCue.Rewind, IROutputStandardCommands.IROut_RSCAN }, +// { CommonBoolCue.Ffwd, IROutputStandardCommands.IROut_FSCAN }, +// { CommonBoolCue.Replay, IROutputStandardCommands.IROut_REPLAY }, +// { CommonBoolCue.Advance, "ADVANCE" }, +// { CommonBoolCue.Record, IROutputStandardCommands.IROut_RECORD }, +// { CommonBoolCue.Exit, IROutputStandardCommands.IROut_EXIT }, +// { CommonBoolCue.Menu, IROutputStandardCommands.IROut_MENU }, +// { CommonBoolCue.List, IROutputStandardCommands.IROut_DVR }, +// { CommonBoolCue.Dvr, IROutputStandardCommands.IROut_DVR }, +// { CommonBoolCue.Back, IROutputStandardCommands.IROut_BACK }, +// { CommonBoolCue.Up, IROutputStandardCommands.IROut_UP_ARROW }, +// { CommonBoolCue.Down, IROutputStandardCommands.IROut_DN_ARROW }, +// { CommonBoolCue.Left, IROutputStandardCommands.IROut_LEFT_ARROW }, +// { CommonBoolCue.Right, IROutputStandardCommands.IROut_RIGHT_ARROW }, +// { CommonBoolCue.Select, IROutputStandardCommands.IROut_ENTER }, +// { CommonBoolCue.Guide, IROutputStandardCommands.IROut_GUIDE }, +// { CommonBoolCue.PageUp, IROutputStandardCommands.IROut_PAGE_UP }, +// { CommonBoolCue.PageDown, IROutputStandardCommands.IROut_PAGE_DOWN }, +// { CommonBoolCue.Info, IROutputStandardCommands.IROut_INFO }, +// { CommonBoolCue.Red, IROutputStandardCommands.IROut_RED }, +// { CommonBoolCue.Green, IROutputStandardCommands.IROut_GREEN }, +// { CommonBoolCue.Yellow, IROutputStandardCommands.IROut_YELLOW }, +// { CommonBoolCue.Blue, IROutputStandardCommands.IROut_BLUE }, +// { CommonBoolCue.Digit0, IROutputStandardCommands.IROut_0 }, +// { CommonBoolCue.Digit1, IROutputStandardCommands.IROut_1 }, +// { CommonBoolCue.Digit2, IROutputStandardCommands.IROut_2 }, +// { CommonBoolCue.Digit3, IROutputStandardCommands.IROut_3 }, +// { CommonBoolCue.Digit4, IROutputStandardCommands.IROut_4 }, +// { CommonBoolCue.Digit5, IROutputStandardCommands.IROut_5 }, +// { CommonBoolCue.Digit6, IROutputStandardCommands.IROut_6 }, +// { CommonBoolCue.Digit7, IROutputStandardCommands.IROut_7 }, +// { CommonBoolCue.Digit8, IROutputStandardCommands.IROut_8 }, +// { CommonBoolCue.Digit9, IROutputStandardCommands.IROut_9 }, +// { CommonBoolCue.Dash, "DASH" }, +// }; +// return IrPort.GetUOsForIrCommands(numToIr); +// } +// } + +// #endregion + +// #region IHasSetTopBoxProperties Members + +// public bool HasDpad { get; set; } + +// public bool HasPreset { get; set; } + +// public bool HasDvr { get; set; } + +// public bool HasNumbers { get; set; } + +// #endregion +// } +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/SmartObjectBaseTypes.cs b/Essentials Core/PepperDashEssentialsBase/Devices/SmartObjectBaseTypes.cs new file mode 100644 index 00000000..37e62036 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/SmartObjectBaseTypes.cs @@ -0,0 +1,11 @@ + +namespace PepperDash.Essentials.Core +{ + public class SmartObjectJoinOffsets + { + public const ushort Dpad = 1; + public const ushort Numpad = 2; + + public const ushort PresetList = 6; + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/SourceListItem.cs b/Essentials Core/PepperDashEssentialsBase/Devices/SourceListItem.cs new file mode 100644 index 00000000..54436bf1 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/SourceListItem.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronIO; +using Crestron.SimplSharpPro; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using PepperDash.Core; + +namespace PepperDash.Essentials.Core +{ + /// + /// + /// + public enum eSourceListItemType + { + Route, Off, Other, SomethingAwesomerThanThese + } + + /// + /// Represents an item in a source list - can be deserialized into. + /// + public class SourceListItem + { + public string SourceKey { get; set; } + /// + /// Returns the source Device for this, if it exists in DeviceManager + /// + [JsonIgnore] + public Device SourceDevice + { + get + { + if (_SourceDevice == null) + _SourceDevice = DeviceManager.GetDeviceForKey(SourceKey) as Device; + return _SourceDevice; + } + } + Device _SourceDevice; + + /// + /// Gets either the source's Name or this AlternateName property, if + /// defined. If source doesn't exist, returns "Missing source" + /// + public string PreferredName + { + get + { + if (string.IsNullOrEmpty(Name)) + { + if (SourceDevice == null) + return "---"; + return SourceDevice.Name; + } + return Name; + } + } + + /// + /// A name that will override the source's name on the UI + /// + public string Name { get; set; } + public string Icon { get; set; } + public string AltIcon { get; set; } + public bool IncludeInSourceList { get; set; } + public int Order { get; set; } + public string VolumeControlKey { get; set; } + public eSourceListItemType Type { get; set; } + public List RouteList { get; set; } + + public SourceListItem() + { + Icon = "Blank"; + } + } + + public class SourceRouteListItem + { + [JsonProperty("sourceKey")] + public string SourceKey { get; set; } + + [JsonProperty("destinationKey")] + public string DestinationKey { get; set; } + + [JsonProperty("type")] + public eRoutingSignalType Type { get; set; } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Display/BasicIrDisplay.cs b/Essentials Core/PepperDashEssentialsBase/Display/BasicIrDisplay.cs new file mode 100644 index 00000000..230b52da --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Display/BasicIrDisplay.cs @@ -0,0 +1,204 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Routing; + +namespace PepperDash.Essentials.Core +{ + public class BasicIrDisplay : DisplayBase, IBasicVolumeControls, IPower, IWarmingCooling, IRoutingSinkWithSwitching + { + public IrOutputPortController IrPort { get; private set; } + public ushort IrPulseTime { get; set; } + + protected override Func PowerIsOnFeedbackFunc + { + get { return () => _PowerIsOn; } + } + protected override Func IsCoolingDownFeedbackFunc + { + get { return () => _IsCoolingDown; } + } + protected override Func IsWarmingUpFeedbackFunc + { + get { return () => _IsWarmingUp; } + } + + bool _PowerIsOn; + bool _IsWarmingUp; + bool _IsCoolingDown; + + public BasicIrDisplay(string key, string name, IROutputPort port, string irDriverFilepath) + : base(key, name) + { + IrPort = new IrOutputPortController(key + "-ir", port, irDriverFilepath); + DeviceManager.AddDevice(IrPort); + + PowerIsOnFeedback.OutputChange += (o, a) => { + Debug.Console(2, this, "Power on={0}", _PowerIsOn); + if (_PowerIsOn) StartWarmingTimer(); + else StartCoolingTimer(); + }; + IsWarmingUpFeedback.OutputChange += (o, a) => Debug.Console(2, this, "Warming up={0}", _IsWarmingUp); + IsCoolingDownFeedback.OutputChange += (o, a) => Debug.Console(2, this, "Cooling down={0}", _IsCoolingDown); + + InputPorts.AddRange(new RoutingPortCollection + { + new RoutingInputPort(RoutingPortNames.HdmiIn1, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, new Action(Hdmi1), this, false), + new RoutingInputPort(RoutingPortNames.HdmiIn2, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, new Action(Hdmi2), this, false), + new RoutingInputPort(RoutingPortNames.HdmiIn3, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, new Action(Hdmi3), this, false), + new RoutingInputPort(RoutingPortNames.HdmiIn4, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, new Action(Hdmi4), this, false), + new RoutingInputPort(RoutingPortNames.ComponentIn, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, new Action(Component1), this, false), + new RoutingInputPort(RoutingPortNames.CompositeIn, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, new Action(Video1), this, false), + new RoutingInputPort(RoutingPortNames.AntennaIn, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, new Action(Antenna), this, false), + }); + } + + public void Hdmi1() + { + IrPort.Pulse(IROutputStandardCommands.IROut_HDMI_1, IrPulseTime); + } + + public void Hdmi2() + { + IrPort.Pulse(IROutputStandardCommands.IROut_HDMI_2, IrPulseTime); + } + + public void Hdmi3() + { + IrPort.Pulse(IROutputStandardCommands.IROut_HDMI_3, IrPulseTime); + } + + public void Hdmi4() + { + IrPort.Pulse(IROutputStandardCommands.IROut_HDMI_4, IrPulseTime); + } + + public void Component1() + { + IrPort.Pulse(IROutputStandardCommands.IROut_COMPONENT_1, IrPulseTime); + } + + public void Video1() + { + IrPort.Pulse(IROutputStandardCommands.IROut_VIDEO_1, IrPulseTime); + } + + public void Antenna() + { + IrPort.Pulse(IROutputStandardCommands.IROut_ANTENNA, IrPulseTime); + } + + #region IPower Members + + public override void PowerOn() + { + IrPort.Pulse(IROutputStandardCommands.IROut_POWER_ON, IrPulseTime); + _PowerIsOn = true; + PowerIsOnFeedback.FireUpdate(); + } + + public override void PowerOff() + { + _PowerIsOn = false; + PowerIsOnFeedback.FireUpdate(); + IrPort.Pulse(IROutputStandardCommands.IROut_POWER_OFF, IrPulseTime); + } + + public override void PowerToggle() + { + _PowerIsOn = false; + PowerIsOnFeedback.FireUpdate(); + IrPort.Pulse(IROutputStandardCommands.IROut_POWER, IrPulseTime); + } + + #endregion + + #region IBasicVolumeControls Members + + public void VolumeUp(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_VOL_PLUS, pressRelease); + } + + public void VolumeDown(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_VOL_MINUS, pressRelease); + } + + public void MuteToggle() + { + IrPort.Pulse(IROutputStandardCommands.IROut_MUTE, 200); + } + + #endregion + + void StartWarmingTimer() + { + _IsWarmingUp = true; + IsWarmingUpFeedback.FireUpdate(); + new CTimer(o => { + _IsWarmingUp = false; + IsWarmingUpFeedback.FireUpdate(); + }, 10000); + } + + void StartCoolingTimer() + { + _IsCoolingDown = true; + IsCoolingDownFeedback.FireUpdate(); + new CTimer(o => + { + _IsCoolingDown = false; + IsCoolingDownFeedback.FireUpdate(); + }, 7000); + } + + #region IRoutingSink Members + + /// + /// Typically called by the discovery routing algorithm. + /// + /// A delegate containing the input selector method to call + public override void ExecuteSwitch(object inputSelector) + { + + Action finishSwitch = () => + { + var action = inputSelector as Action; + if (action != null) + action(); + }; + + if (!PowerIsOnFeedback.BoolValue) + { + PowerOn(); + EventHandler oneTimer = null; + oneTimer = (o, a) => + { + if (IsWarmingUpFeedback.BoolValue) return; // Only catch done warming + IsWarmingUpFeedback.OutputChange -= oneTimer; + finishSwitch(); + }; + IsWarmingUpFeedback.OutputChange += oneTimer; + } + else // Do it! + finishSwitch(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Display/DELETE IRDisplayBase.cs b/Essentials Core/PepperDashEssentialsBase/Display/DELETE IRDisplayBase.cs new file mode 100644 index 00000000..06b4da07 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Display/DELETE IRDisplayBase.cs @@ -0,0 +1,105 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using Crestron.SimplSharp; +//using Crestron.SimplSharpPro; + +//namespace PepperDash.Essentials.Core +//{ +// public abstract class IRDisplayBase : DisplayBase, IHasCueActionList +// { +// public IrOutputPortController IrPort { get; private set; } +// /// +// /// Default to 200ms +// /// +// public ushort IrPulseTime { get; set; } +// bool _PowerIsOn; +// bool _IsWarmingUp; +// bool _IsCoolingDown; + +// /// +// /// FunctionList is pre-defined to have power commands. +// /// +// public IRDisplayBase(string key, string name, IROutputPort port, string irDriverFilepath) +// : base(key, name) +// { +// IrPort = new IrOutputPortController("ir-" + key, port, irDriverFilepath); +// IrPulseTime = 200; +// WarmupTime = 7000; +// CooldownTime = 10000; + +// CueActionList = new List +// { +// new BoolCueActionPair(CommonBoolCue.Power, b=> PowerToggle()), +// new BoolCueActionPair(CommonBoolCue.PowerOn, b=> PowerOn()), +// new BoolCueActionPair(CommonBoolCue.PowerOff, b=> PowerOff()), +// }; +// } + +// public override void PowerOn() +// { +// if (!PowerIsOnFeedback.BoolValue && !_IsWarmingUp && !_IsCoolingDown) +// { +// _IsWarmingUp = true; +// IsWarmingUpFeedback.FireUpdate(); +// // Fake power-up cycle +// WarmupTimer = new CTimer(o => +// { +// _IsWarmingUp = false; +// _PowerIsOn = true; +// IsWarmingUpFeedback.FireUpdate(); +// PowerIsOnFeedback.FireUpdate(); +// }, WarmupTime); +// } +// IrPort.Pulse(IROutputStandardCommands.IROut_POWER_ON, IrPulseTime); +// } + +// public override void PowerOff() +// { +// // If a display has unreliable-power off feedback, just override this and +// // remove this check. +// if (PowerIsOnFeedback.BoolValue && !_IsWarmingUp && !_IsCoolingDown) +// { +// _IsCoolingDown = true; +// _PowerIsOn = false; +// PowerIsOnFeedback.FireUpdate(); +// IsCoolingDownFeedback.FireUpdate(); +// // Fake cool-down cycle +// CooldownTimer = new CTimer(o => +// { +// _IsCoolingDown = false; +// IsCoolingDownFeedback.FireUpdate(); +// }, CooldownTime); +// } +// IrPort.Pulse(IROutputStandardCommands.IROut_POWER_OFF, IrPulseTime); +// } + +// public override void PowerToggle() +// { +// // Not sure how to handle the feedback, but we should default to power off fb. +// // Does this need to trigger feedback?? +// _PowerIsOn = false; +// IrPort.Pulse(IROutputStandardCommands.IROut_POWER, IrPulseTime); +// } + +// #region IFunctionList Members + +// public List CueActionList +// { +// get; +// private set; +// } + +// #endregion + +// protected override Func PowerIsOnOutputFunc { get { return () => _PowerIsOn; } } +// protected override Func IsCoolingDownOutputFunc { get { return () => _IsCoolingDown; } } +// protected override Func IsWarmingUpOutputFunc { get { return () => _IsWarmingUp; } } + +// public override void ExecuteSwitch(object selector) +// { +// IrPort.Pulse((string)selector, IrPulseTime); +// } +// } +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Display/DisplayBase.cs b/Essentials Core/PepperDashEssentialsBase/Display/DisplayBase.cs new file mode 100644 index 00000000..ad1b5ca9 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Display/DisplayBase.cs @@ -0,0 +1,99 @@ +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; + } + + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs b/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs new file mode 100644 index 00000000..7e6708da --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs @@ -0,0 +1,157 @@ +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; +using PepperDash.Essentials.Core.Routing; + + +namespace PepperDash.Essentials.Core +{ + /// + /// + /// + public class MockDisplay : TwoWayDisplayBase, IBasicVolumeWithFeedback + + { + public RoutingInputPort HdmiIn1 { get; private set; } + public RoutingInputPort HdmiIn2 { get; private set; } + public RoutingInputPort HdmiIn3 { get; private set; } + public RoutingInputPort ComponentIn1 { get; private set; } + public RoutingInputPort VgaIn1 { get; private set; } + + bool _PowerIsOn; + bool _IsWarmingUp; + bool _IsCoolingDown; + + protected override Func PowerIsOnFeedbackFunc { get { return () => _PowerIsOn; } } + protected override Func IsCoolingDownFeedbackFunc { get { return () => _IsCoolingDown; } } + protected override Func IsWarmingUpFeedbackFunc { get { return () => _IsWarmingUp; } } + + ushort _FakeVolumeLevel = 31768; + bool _IsMuted; + + public MockDisplay(string key, string name) + : base(key, name) + { + HdmiIn1 = new RoutingInputPort(RoutingPortNames.HdmiIn1, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, null, this); + HdmiIn2 = new RoutingInputPort(RoutingPortNames.HdmiIn2, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, null, this); + HdmiIn3 = new RoutingInputPort(RoutingPortNames.HdmiIn3, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, null, this); + ComponentIn1 = new RoutingInputPort(RoutingPortNames.ComponentIn, eRoutingSignalType.Video, + eRoutingPortConnectionType.Component, null, this); + VgaIn1 = new RoutingInputPort(RoutingPortNames.VgaIn, eRoutingSignalType.Video, + eRoutingPortConnectionType.Composite, null, this); + InputPorts.AddRange(new[] { HdmiIn1, HdmiIn2, HdmiIn3, ComponentIn1, VgaIn1 }); + + VolumeLevelFeedback = new IntFeedback(() => { return _FakeVolumeLevel; }); + MuteFeedback = new BoolFeedback(CommonBoolCue.MuteOn, () => _IsMuted); + } + + public override void PowerOn() + { + if (!PowerIsOnFeedback.BoolValue && !_IsWarmingUp && !_IsCoolingDown) + { + _IsWarmingUp = true; + IsWarmingUpFeedback.FireUpdate(); + // Fake power-up cycle + WarmupTimer = new CTimer(o => + { + _IsWarmingUp = false; + _PowerIsOn = true; + IsWarmingUpFeedback.FireUpdate(); + PowerIsOnFeedback.FireUpdate(); + }, WarmupTime); + } + } + + public override void PowerOff() + { + // If a display has unreliable-power off feedback, just override this and + // remove this check. + if (PowerIsOnFeedback.BoolValue && !_IsWarmingUp && !_IsCoolingDown) + { + _IsCoolingDown = true; + _PowerIsOn = false; + PowerIsOnFeedback.FireUpdate(); + IsCoolingDownFeedback.FireUpdate(); + // Fake cool-down cycle + CooldownTimer = new CTimer(o => + { + Debug.Console(2, this, "Cooldown timer ending"); + _IsCoolingDown = false; + IsCoolingDownFeedback.FireUpdate(); + }, CooldownTime); + } + } + + public override void PowerToggle() + { + if (PowerIsOnFeedback.BoolValue && !IsWarmingUpFeedback.BoolValue) + PowerOff(); + else if (!PowerIsOnFeedback.BoolValue && !IsCoolingDownFeedback.BoolValue) + PowerOn(); + } + + public override void ExecuteSwitch(object selector) + { + Debug.Console(2, this, "ExecuteSwitch: {0}", selector); + } + + + + #region IBasicVolumeWithFeedback Members + + public IntFeedback VolumeLevelFeedback { get; private set; } + + public void SetVolume(ushort level) + { + _FakeVolumeLevel = level; + VolumeLevelFeedback.FireUpdate(); + } + + public void MuteOn() + { + _IsMuted = true; + MuteFeedback.FireUpdate(); + } + + public void MuteOff() + { + _IsMuted = false; + MuteFeedback.FireUpdate(); + } + + public BoolFeedback MuteFeedback { get; private set; } + + #endregion + + #region IBasicVolumeControls Members + + public void VolumeUp(bool pressRelease) + { + Debug.Console(0, this, "Volume Down {0}", pressRelease); + } + + public void VolumeDown(bool pressRelease) + { + Debug.Console(0, this, "Volume Up {0}", pressRelease); + } + + public void MuteToggle() + { + _IsMuted = !_IsMuted; + MuteFeedback.FireUpdate(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Ethernet/EthernetStatistics.cs b/Essentials Core/PepperDashEssentialsBase/Ethernet/EthernetStatistics.cs new file mode 100644 index 00000000..bac6a20d --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Ethernet/EthernetStatistics.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.Core.Ethernet +{ + public static class EthernetSettings + { + public static readonly BoolFeedback LinkActive = new BoolFeedback(EthernetCue.LinkActive, + () => true); + public static readonly BoolFeedback DhcpActive = new BoolFeedback(EthernetCue.DhcpActive, + () => CrestronEthernetHelper.GetEthernetParameter( + CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_DHCP_STATE, 0) == "ON"); + + + public static readonly StringFeedback Hostname = new StringFeedback(EthernetCue.Hostname, + () => CrestronEthernetHelper.GetEthernetParameter( + CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_HOSTNAME, 0)); + public static readonly StringFeedback IpAddress0 = new StringFeedback(EthernetCue.IpAddress0, + () => CrestronEthernetHelper.GetEthernetParameter( + CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, 0)); + public static readonly StringFeedback SubnetMask0 = new StringFeedback(EthernetCue.SubnetMask0, + () => CrestronEthernetHelper.GetEthernetParameter( + CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_MASK, 0)); + public static readonly StringFeedback DefaultGateway0 = new StringFeedback(EthernetCue.DefaultGateway0, + () => CrestronEthernetHelper.GetEthernetParameter( + CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_ROUTER, 0)); + } + + public static class EthernetCue + { + public static readonly Cue LinkActive = Cue.BoolCue("LinkActive", 1); + public static readonly Cue DhcpActive = Cue.BoolCue("DhcpActive", 2); + + public static readonly Cue Hostname = Cue.StringCue("Hostname", 1); + public static readonly Cue IpAddress0 = Cue.StringCue("IpAddress0", 2); + public static readonly Cue SubnetMask0 = Cue.StringCue("SubnetMask0", 3); + public static readonly Cue DefaultGateway0 = Cue.StringCue("DefaultGateway0", 4); + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Feedbacks/BoolFeedbackOneShot.cs b/Essentials Core/PepperDashEssentialsBase/Feedbacks/BoolFeedbackOneShot.cs new file mode 100644 index 00000000..cc183569 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Feedbacks/BoolFeedbackOneShot.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +namespace PepperDash.Essentials.Core +{ + public class BoolFeedbackPulse + { + public uint TimeoutMs { get; set; } + + /// + /// Defaults to false + /// + public bool CanRetrigger { get; set; } + + public BoolFeedback Feedback { get; private set; } + CTimer Timer; + + bool _BoolValue; + + /// + /// Creates a non-retriggering one shot + /// + public BoolFeedbackPulse(uint timeoutMs) + : this(timeoutMs, false) + { + } + + /// + /// Create a retriggerable one shot by setting canRetrigger true + /// + public BoolFeedbackPulse(uint timeoutMs, bool canRetrigger) + { + TimeoutMs = timeoutMs; + CanRetrigger = canRetrigger; + Feedback = new BoolFeedback(() => _BoolValue); + } + + /// + /// Starts the + /// + /// + public void Start() + { + if (Timer == null) + { + _BoolValue = true; + Feedback.FireUpdate(); + Timer = new CTimer(o => + { + _BoolValue = false; + Feedback.FireUpdate(); + Timer = null; + }, TimeoutMs); + } + // Timer is running, if retrigger is set, reset it. + else if (CanRetrigger) + Timer.Reset(TimeoutMs); + } + + public void Cancel() + { + if(Timer != null) + Timer.Reset(0); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Feedbacks/BoolFeedbackPulseExtender.cs b/Essentials Core/PepperDashEssentialsBase/Feedbacks/BoolFeedbackPulseExtender.cs new file mode 100644 index 00000000..53a5e559 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Feedbacks/BoolFeedbackPulseExtender.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +namespace PepperDash.Essentials.Core +{ + /// + /// A class that wraps a BoolFeedback with logic that extends it's true state for + /// a time period after the value goes false. + /// + public class BoolFeedbackPulseExtender + { + public uint TimeoutMs { get; set; } + public BoolFeedback Feedback { get; private set; } + CTimer Timer; + + /// + /// When set to true, will cause Feedback to go high, and cancel the timer. + /// When false, will start the timer, and after timeout, will go low and + /// feedback will go low. + /// + public bool BoolValue + { + get { return _BoolValue; } + set + { + if (value) + { // if Timer is running and the value goes high, cancel it. + if (Timer != null) + { + Timer.Stop(); + Timer = null; + } + // if it's already true, don't fire again + if (_BoolValue == true) + return; + _BoolValue = true; + Feedback.FireUpdate(); + } + else + { + if (Timer == null) + Timer = new CTimer(o => ClearFeedback(), TimeoutMs); + } + } + } + bool _BoolValue; + + /// + /// Constructor + /// + /// The time which the true state will be extended after set to false + public BoolFeedbackPulseExtender(uint timeoutMs) + { + TimeoutMs = timeoutMs; + Feedback = new BoolFeedback(() => this.BoolValue); + } + + /// + /// Forces the feedback to false regardless of timeout + /// + public void ClearNow() + { + if (Timer != null) + Timer.Stop(); + ClearFeedback(); + } + + void ClearFeedback() + { + _BoolValue = false; + Feedback.FireUpdate(); + Timer = null; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Feedbacks/BoolOutputLogicals.cs b/Essentials Core/PepperDashEssentialsBase/Feedbacks/BoolOutputLogicals.cs new file mode 100644 index 00000000..3074254e --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Feedbacks/BoolOutputLogicals.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; + +namespace PepperDash.Essentials.Core +{ + + + public abstract class BoolFeedbackLogic + { + /// + /// Output representing the "and" value of all connected inputs + /// + public BoolFeedback Output { get; private set; } + + /// + /// List of all connected outputs + /// + protected List OutputsIn = new List(); + + protected bool ComputedValue; + + public BoolFeedbackLogic() + { + Output = new BoolFeedback(() => ComputedValue); + } + + public void AddOutputIn(BoolFeedback output) + { + // Don't double up outputs + if(OutputsIn.Contains(output)) return; + + OutputsIn.Add(output); + output.OutputChange += AnyInput_OutputChange; + Evaluate(); + } + + public void AddOutputsIn(List outputs) + { + foreach (var o in outputs) + { + // skip existing + if (OutputsIn.Contains(o)) continue; + + OutputsIn.Add(o); + o.OutputChange += AnyInput_OutputChange; + } + Evaluate(); + } + + public void RemoveOutputIn(BoolFeedback output) + { + // Don't double up outputs + if (OutputsIn.Contains(output)) return; + + OutputsIn.Remove(output); + output.OutputChange -= AnyInput_OutputChange; + Evaluate(); + } + + public void RemoveOutputsIn(List outputs) + { + foreach (var o in outputs) + { + OutputsIn.Remove(o); + o.OutputChange -= AnyInput_OutputChange; + } + Evaluate(); + } + + void AnyInput_OutputChange(object sender, EventArgs e) + { + Evaluate(); + } + + protected abstract void Evaluate(); + } + + public class BoolFeedbackAnd : BoolFeedbackLogic + { + protected override void Evaluate() + { + var prevValue = ComputedValue; + var newValue = OutputsIn.All(o => o.BoolValue); + if (newValue != prevValue) + { + ComputedValue = newValue; + Output.FireUpdate(); + } + } + } + + public class BoolFeedbackOr : BoolFeedbackLogic + { + protected override void Evaluate() + { + var prevValue = ComputedValue; + var newValue = OutputsIn.Any(o => o.BoolValue); + if (newValue != prevValue) + { + ComputedValue = newValue; + Output.FireUpdate(); + } + } + } + + public class BoolFeedbackLinq : BoolFeedbackLogic + { + Func, bool> Predicate; + + public BoolFeedbackLinq(Func, bool> predicate) + : base() + { + Predicate = predicate; + } + + protected override void Evaluate() + { + var prevValue = ComputedValue; + var newValue = Predicate(OutputsIn); + if (newValue != prevValue) + { + ComputedValue = newValue; + Output.FireUpdate(); + } + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Feedbacks/Feedbacks.cs b/Essentials Core/PepperDashEssentialsBase/Feedbacks/Feedbacks.cs new file mode 100644 index 00000000..ee940f14 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Feedbacks/Feedbacks.cs @@ -0,0 +1,220 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; + +namespace PepperDash.Essentials.Core +{ + public abstract class Feedback + { + public event EventHandler OutputChange; + + public virtual bool BoolValue { get { return false; } } + public virtual int IntValue { get { return 0; } } + public virtual string StringValue { get { return ""; } } + + public Cue Cue { get; private set; } + + public abstract eCueType Type { get; } + + protected Feedback() + { + } + + protected Feedback(Cue cue) + { + Cue = cue; + } + + public abstract void FireUpdate(); + + protected void OnOutputChange() + { + if (OutputChange != null) OutputChange(this, EventArgs.Empty); + } + } + + /// + /// A Feedback whose output is derived from the return value of a provided Func. + /// + public class BoolFeedback : Feedback + { + /// + /// Returns the current value of the feedback, derived from the ValueFunc + /// + public override bool BoolValue { get { return _BoolValue; } } + bool _BoolValue; + + public override eCueType Type { get { return eCueType.Bool; } } + + public Func ValueFunc { get; private set; } + /// + /// The last value delivered on FireUpdate + /// + //public bool PreviousValue { get; private set; } + List LinkedInputSigs = new List(); + List LinkedComplementInputSigs = new List(); + + public BoolFeedback(Func valueFunc) + : this(Cue.DefaultBoolCue, valueFunc) + { + } + + public BoolFeedback(Cue cue, Func valueFunc) + : base(cue) + { + if (cue == null) throw new ArgumentNullException("cue"); + ValueFunc = valueFunc; + } + + public override void FireUpdate() + { + var newValue = ValueFunc.Invoke(); + if (newValue != _BoolValue) + { + _BoolValue = newValue; + LinkedInputSigs.ForEach(s => UpdateSig(s)); + LinkedComplementInputSigs.ForEach(s => UpdateComplementSig(s)); + OnOutputChange(); + } + } + + public void LinkInputSig(BoolInputSig sig) + { + LinkedInputSigs.Add(sig); + UpdateSig(sig); + } + + public void UnlinkInputSig(BoolInputSig sig) + { + LinkedInputSigs.Remove(sig); + } + + public void LinkComplementInputSig(BoolInputSig sig) + { + LinkedComplementInputSigs.Add(sig); + UpdateComplementSig(sig); + } + + public void UnlinkComplementInputSig(BoolInputSig sig) + { + LinkedComplementInputSigs.Remove(sig); + } + + void UpdateSig(BoolInputSig sig) + { + sig.BoolValue = _BoolValue; + } + + void UpdateComplementSig(BoolInputSig sig) + { + sig.BoolValue = !_BoolValue; + } + } + + //****************************************************************************** + public class IntFeedback : Feedback + { + public override int IntValue { get { return _IntValue; } } // ValueFunc.Invoke(); } } + int _IntValue; + public ushort UShortValue { get { return (ushort)_IntValue; } } + public override eCueType Type { get { return eCueType.Int; } } + //public int PreviousValue { get; private set; } + + Func ValueFunc; + List LinkedInputSigs = new List(); + + public IntFeedback(Func valueFunc) + : this(Cue.DefaultIntCue, valueFunc) + { + } + + public IntFeedback(Cue cue, Func valueFunc) + : base(cue) + { + if (cue == null) throw new ArgumentNullException("cue"); + ValueFunc = valueFunc; + } + + public override void FireUpdate() + { + var newValue = ValueFunc.Invoke(); + if (newValue != _IntValue) + { + _IntValue = newValue; + LinkedInputSigs.ForEach(s => UpdateSig(s)); + OnOutputChange(); + } + } + + public void LinkInputSig(UShortInputSig sig) + { + LinkedInputSigs.Add(sig); + UpdateSig(sig); + } + + public void UnlinkInputSig(UShortInputSig sig) + { + LinkedInputSigs.Remove(sig); + } + + void UpdateSig(UShortInputSig sig) + { + sig.UShortValue = UShortValue; + } + } + + + //****************************************************************************** + public class StringFeedback : Feedback + { + public override string StringValue { get { return _StringValue; } } // ValueFunc.Invoke(); } } + string _StringValue; + public override eCueType Type { get { return eCueType.String; } } + //public string PreviousValue { get; private set; } + public Func ValueFunc { get; private set; } + List LinkedInputSigs = new List(); + + public StringFeedback(Func valueFunc) + : this(Cue.DefaultStringCue, valueFunc) + { + } + + public StringFeedback(Cue cue, Func valueFunc) + : base(cue) + { + if (cue == null) throw new ArgumentNullException("cue"); + ValueFunc = valueFunc; + + } + + public override void FireUpdate() + { + var newValue = ValueFunc.Invoke(); + if (newValue != _StringValue) + { + _StringValue = newValue; + LinkedInputSigs.ForEach(s => UpdateSig(s)); + OnOutputChange(); + } + } + + public void LinkInputSig(StringInputSig sig) + { + LinkedInputSigs.Add(sig); + UpdateSig(sig); + } + + public void UnlinkInputSig(StringInputSig sig) + { + LinkedInputSigs.Remove(sig); + } + + void UpdateSig(StringInputSig sig) + { + sig.StringValue = _StringValue; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Fusion/MOVED FusionSystemController.cs b/Essentials Core/PepperDashEssentialsBase/Fusion/MOVED FusionSystemController.cs new file mode 100644 index 00000000..8e7e70c6 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Fusion/MOVED FusionSystemController.cs @@ -0,0 +1,377 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; + +//using Crestron.SimplSharp; +//using Crestron.SimplSharpPro; +//using Crestron.SimplSharpPro.DeviceSupport; + +//using Crestron.SimplSharpPro.Fusion; +//using PepperDash.Essentials.Core; + +//using PepperDash.Core; + + +//namespace PepperDash.Essentials.Core.Fusion +//{ +// public class EssentialsHuddleSpaceFusionSystemController : Device +// { +// FusionRoom FusionRoom; +// Room Room; +// Dictionary SourceToFeedbackSigs = new Dictionary(); + +// StatusMonitorCollection ErrorMessageRollUp; + +// public EssentialsHuddleSpaceFusionSystemController(HuddleSpaceRoom room, uint ipId) +// : base(room.Key + "-fusion") +// { +// Room = room; + +// FusionRoom = new FusionRoom(ipId, Global.ControlSystem, room.Name, "awesomeGuid-" + room.Key); +// FusionRoom.Register(); + +// FusionRoom.FusionStateChange += new FusionStateEventHandler(FusionRoom_FusionStateChange); + +// // Room to fusion room +// room.RoomIsOn.LinkInputSig(FusionRoom.SystemPowerOn.InputSig); +// var srcName = FusionRoom.CreateOffsetStringSig(50, "Source - Name", eSigIoMask.InputSigOnly); +// room.CurrentSourceName.LinkInputSig(srcName.InputSig); + +// FusionRoom.SystemPowerOn.OutputSig.UserObject = new Action(b => { if (b) room.RoomOn(null); }); +// FusionRoom.SystemPowerOff.OutputSig.UserObject = new Action(b => { if (b) room.RoomOff(); }); +// // NO!! room.RoomIsOn.LinkComplementInputSig(FusionRoom.SystemPowerOff.InputSig); +// FusionRoom.ErrorMessage.InputSig.StringValue = "3: 7 Errors: This is a really long error message;This is a really long error message;This is a really long error message;This is a really long error message;This is a really long error message;This is a really long error message;This is a really long error message;"; + +// // Sources +// foreach (var src in room.Sources) +// { +// var srcNum = src.Key; +// var pSrc = src.Value as IPresentationSource; +// var keyNum = ExtractNumberFromKey(pSrc.Key); +// if (keyNum == -1) +// { +// Debug.Console(1, this, "WARNING: Cannot link source '{0}' to numbered Fusion attributes", pSrc.Key); +// continue; +// } +// string attrName = null; +// uint attrNum = Convert.ToUInt32(keyNum); +// switch (pSrc.Type) +// { +// case PresentationSourceType.None: +// break; +// case PresentationSourceType.SetTopBox: +// attrName = "Source - TV " + keyNum; +// attrNum += 115; // TV starts at 116 +// break; +// case PresentationSourceType.Dvd: +// attrName = "Source - DVD " + keyNum; +// attrNum += 120; // DVD starts at 121 +// break; +// case PresentationSourceType.PC: +// attrName = "Source - PC " + keyNum; +// attrNum += 110; // PC starts at 111 +// break; +// case PresentationSourceType.Laptop: +// attrName = "Source - Laptop " + keyNum; +// attrNum += 100; // Laptops start at 101 +// break; +// case PresentationSourceType.VCR: +// attrName = "Source - VCR " + keyNum; +// attrNum += 125; // VCRs start at 126 +// break; +// } +// if (attrName == null) +// { +// Debug.Console(1, this, "Source type {0} does not have corresponsing Fusion attribute type, skipping", pSrc.Type); +// continue; +// } +// Debug.Console(2, this, "Creating attribute '{0}' with join {1} for source {2}", attrName, attrNum, pSrc.Key); +// var sigD = FusionRoom.CreateOffsetBoolSig(attrNum, attrName, eSigIoMask.InputOutputSig); +// // Need feedback when this source is selected +// // Event handler, added below, will compare source changes with this sig dict +// SourceToFeedbackSigs.Add(pSrc, sigD.InputSig); + +// // And respond to selection in Fusion +// sigD.OutputSig.UserObject = new Action(b => { if(b) room.SelectSource(pSrc); }); +// } + +// // Attach to all room's devices with monitors. +// //foreach (var dev in DeviceManager.Devices) +// foreach (var dev in DeviceManager.GetDevices()) +// { +// if (!(dev is ICommunicationMonitor)) +// continue; + +// var keyNum = ExtractNumberFromKey(dev.Key); +// if (keyNum == -1) +// { +// Debug.Console(1, this, "WARNING: Cannot link device '{0}' to numbered Fusion monitoring attributes", dev.Key); +// continue; +// } +// string attrName = null; +// uint attrNum = Convert.ToUInt32(keyNum); + +// //if (dev is SmartGraphicsTouchpanelControllerBase) +// //{ +// // if (attrNum > 10) +// // continue; +// // attrName = "Device Ok - Touch Panel " + attrNum; +// // attrNum += 200; +// //} +// //// add xpanel here + +// //else +// if (dev is DisplayBase) +// { +// if (attrNum > 10) +// continue; +// attrName = "Device Ok - Display " + attrNum; +// attrNum += 240; +// } +// //else if (dev is DvdDeviceBase) +// //{ +// // if (attrNum > 5) +// // continue; +// // attrName = "Device Ok - DVD " + attrNum; +// // attrNum += 260; +// //} +// // add set top box + +// // add Cresnet roll-up + +// // add DM-devices roll-up + +// if (attrName != null) +// { +// // Link comm status to sig and update +// var sigD = FusionRoom.CreateOffsetBoolSig(attrNum, attrName, eSigIoMask.InputSigOnly); +// var smd = dev as ICommunicationMonitor; +// sigD.InputSig.BoolValue = smd.CommunicationMonitor.Status == MonitorStatus.IsOk; +// smd.CommunicationMonitor.StatusChange += (o, a) => { sigD.InputSig.BoolValue = a.Status == MonitorStatus.IsOk; }; +// Debug.Console(0, this, "Linking '{0}' communication monitor to Fusion '{1}'", dev.Key, attrName); +// } +// } + +// // Don't think we need to get current status of this as nothing should be alive yet. +// room.PresentationSourceChange += Room_PresentationSourceChange; + +// // these get used in multiple places +// var display = room.Display; +// var dispPowerOnAction = new Action(b => { if (!b) display.PowerOn(); }); +// var dispPowerOffAction = new Action(b => { if (!b) display.PowerOff(); }); + +// // Display to fusion room sigs +// FusionRoom.DisplayPowerOn.OutputSig.UserObject = dispPowerOnAction; +// FusionRoom.DisplayPowerOff.OutputSig.UserObject = dispPowerOffAction; +// display.PowerIsOnFeedback.LinkInputSig(FusionRoom.DisplayPowerOn.InputSig); +// if (display is IDisplayUsage) +// (display as IDisplayUsage).LampHours.LinkInputSig(FusionRoom.DisplayUsage.InputSig); + +// // Roll up ALL device errors +// ErrorMessageRollUp = new StatusMonitorCollection(this); +// foreach (var dev in DeviceManager.GetDevices()) +// { +// var md = dev as ICommunicationMonitor; +// if (md != null) +// { +// ErrorMessageRollUp.AddMonitor(md.CommunicationMonitor); +// Debug.Console(2, this, "Adding '{0}' to room's overall error monitor", md.CommunicationMonitor.Parent.Key); +// } +// } +// ErrorMessageRollUp.Start(); +// FusionRoom.ErrorMessage.InputSig.StringValue = ErrorMessageRollUp.Message; +// ErrorMessageRollUp.StatusChange += (o, a) => { +// FusionRoom.ErrorMessage.InputSig.StringValue = ErrorMessageRollUp.Message; }; + + +// // static assets --------------- testing + +// // test assets --- THESE ARE BOTH WIRED TO AssetUsage somewhere internally. +// var ta1 = FusionRoom.CreateStaticAsset(1, "Test asset 1", "Awesome Asset", "Awesome123"); +// ta1.AssetError.InputSig.StringValue = "This should be error"; + + +// var ta2 = FusionRoom.CreateStaticAsset(2, "Test asset 2", "Awesome Asset", "Awesome1232"); +// ta2.AssetUsage.InputSig.StringValue = "This should be usage"; + + +// // Make a display asset +// var dispAsset = FusionRoom.CreateStaticAsset(3, display.Name, "Display", "awesomeDisplayId" + room.Key); +// dispAsset.PowerOn.OutputSig.UserObject = dispPowerOnAction; +// dispAsset.PowerOff.OutputSig.UserObject = dispPowerOffAction; +// display.PowerIsOnFeedback.LinkInputSig(dispAsset.PowerOn.InputSig); +// // NO!! display.PowerIsOn.LinkComplementInputSig(dispAsset.PowerOff.InputSig); +// // Use extension methods +// dispAsset.TrySetMakeModel(display); +// dispAsset.TryLinkAssetErrorToCommunication(display); + + +// // Make it so! +// FusionRVI.GenerateFileForAllFusionDevices(); +// } + +// /// +// /// Helper to get the number from the end of a device's key string +// /// +// /// -1 if no number matched +// int ExtractNumberFromKey(string key) +// { +// var capture = System.Text.RegularExpressions.Regex.Match(key, @"\D+(\d+)"); +// if (!capture.Success) +// return -1; +// else return Convert.ToInt32(capture.Groups[1].Value); +// } + +// void Room_PresentationSourceChange(object sender, EssentialsRoomSourceChangeEventArgs e) +// { +// if (e.OldSource != null) +// { +// if (SourceToFeedbackSigs.ContainsKey(e.OldSource)) +// SourceToFeedbackSigs[e.OldSource].BoolValue = false; +// } +// if (e.NewSource != null) +// { +// if (SourceToFeedbackSigs.ContainsKey(e.NewSource)) +// SourceToFeedbackSigs[e.NewSource].BoolValue = true; +// } +// } + +// void FusionRoom_FusionStateChange(FusionBase device, FusionStateEventArgs args) +// { + +// // The sig/UO method: Need separate handlers for fixed and user sigs, all flavors, +// // even though they all contain sigs. + +// var sigData = (args.UserConfiguredSigDetail as BooleanSigDataFixedName); +// if (sigData != null) +// { +// var outSig = sigData.OutputSig; +// if (outSig.UserObject is Action) +// (outSig.UserObject as Action).Invoke(outSig.BoolValue); +// else if (outSig.UserObject is Action) +// (outSig.UserObject as Action).Invoke(outSig.UShortValue); +// else if (outSig.UserObject is Action) +// (outSig.UserObject as Action).Invoke(outSig.StringValue); +// return; +// } + +// var attrData = (args.UserConfiguredSigDetail as BooleanSigData); +// if (attrData != null) +// { +// var outSig = attrData.OutputSig; +// if (outSig.UserObject is Action) +// (outSig.UserObject as Action).Invoke(outSig.BoolValue); +// else if (outSig.UserObject is Action) +// (outSig.UserObject as Action).Invoke(outSig.UShortValue); +// else if (outSig.UserObject is Action) +// (outSig.UserObject as Action).Invoke(outSig.StringValue); +// return; +// } + +// } +// } + + +// public static class FusionRoomExtensions +// { +// /// +// /// Creates and returns a fusion attribute. The join number will match the established Simpl +// /// standard of 50+, and will generate a 50+ join in the RVI. It calls +// /// FusionRoom.AddSig with join number - 49 +// /// +// /// The new attribute +// public static BooleanSigData CreateOffsetBoolSig(this FusionRoom fr, uint number, string name, eSigIoMask mask) +// { +// if (number < 50) throw new ArgumentOutOfRangeException("number", "Cannot be less than 50"); +// number -= 49; +// fr.AddSig(eSigType.Bool, number, name, mask); +// return fr.UserDefinedBooleanSigDetails[number]; +// } + +// /// +// /// Creates and returns a fusion attribute. The join number will match the established Simpl +// /// standard of 50+, and will generate a 50+ join in the RVI. It calls +// /// FusionRoom.AddSig with join number - 49 +// /// +// /// The new attribute +// public static UShortSigData CreateOffsetUshortSig(this FusionRoom fr, uint number, string name, eSigIoMask mask) +// { +// if (number < 50) throw new ArgumentOutOfRangeException("number", "Cannot be less than 50"); +// number -= 49; +// fr.AddSig(eSigType.UShort, number, name, mask); +// return fr.UserDefinedUShortSigDetails[number]; +// } + +// /// +// /// Creates and returns a fusion attribute. The join number will match the established Simpl +// /// standard of 50+, and will generate a 50+ join in the RVI. It calls +// /// FusionRoom.AddSig with join number - 49 +// /// +// /// The new attribute +// public static StringSigData CreateOffsetStringSig(this FusionRoom fr, uint number, string name, eSigIoMask mask) +// { +// if (number < 50) throw new ArgumentOutOfRangeException("number", "Cannot be less than 50"); +// number -= 49; +// fr.AddSig(eSigType.String, number, name, mask); +// return fr.UserDefinedStringSigDetails[number]; +// } + +// /// +// /// Creates and returns a static asset +// /// +// /// the new asset +// public static FusionStaticAsset CreateStaticAsset(this FusionRoom fr, uint number, string name, string type, string instanceId) +// { +// fr.AddAsset(eAssetType.StaticAsset, number, name, type, instanceId); +// return fr.UserConfigurableAssetDetails[number].Asset as FusionStaticAsset; +// } +// } + +// //************************************************************************************************ +// /// +// /// Extensions to enhance Fusion room, asset and signal creation. +// /// +// public static class FusionStaticAssetExtensions +// { +// /// +// /// Tries to set a Fusion asset with the make and model of a device. +// /// If the provided Device is IMakeModel, will set the corresponding parameters on the fusion static asset. +// /// Otherwise, does nothing. +// /// +// public static void TrySetMakeModel(this FusionStaticAsset asset, Device device) +// { +// var mm = device as IMakeModel; +// if (mm != null) +// { +// asset.ParamMake.Value = mm.DeviceMake; +// asset.ParamModel.Value = mm.DeviceModel; +// } +// } + +// /// +// /// Tries to attach the AssetError input on a Fusion asset to a Device's +// /// CommunicationMonitor.StatusChange event. Does nothing if the device is not +// /// IStatusMonitor +// /// +// /// +// /// +// public static void TryLinkAssetErrorToCommunication(this FusionStaticAsset asset, Device device) +// { +// if (device is ICommunicationMonitor) +// { +// var monitor = (device as ICommunicationMonitor).CommunicationMonitor; +// monitor.StatusChange += (o, a) => +// { +// // Link connected and error inputs on asset +// asset.Connected.InputSig.BoolValue = a.Status == MonitorStatus.IsOk; +// asset.AssetError.InputSig.StringValue = a.Status.ToString(); +// }; +// // set current value +// asset.Connected.InputSig.BoolValue = monitor.Status == MonitorStatus.IsOk; +// asset.AssetError.InputSig.StringValue = monitor.Status.ToString(); +// } +// } +// } + +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Global.cs b/Essentials Core/PepperDashEssentialsBase/Global.cs new file mode 100644 index 00000000..8d3a8fdc --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Global.cs @@ -0,0 +1,42 @@ +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronDataStore; +using Crestron.SimplSharpPro; + +//using PepperDash.Essentials.Core.Http; +using PepperDash.Essentials.License; + + + +namespace PepperDash.Essentials.Core +{ + public static class Global + { + public static CrestronControlSystem ControlSystem { get; set; } + + public static LicenseManager LicenseManager { get; set; } + + //public static EssentialsHttpServer HttpConfigServer + //{ + // get + // { + // if (_HttpConfigServer == null) + // _HttpConfigServer = new EssentialsHttpServer(); + // return _HttpConfigServer; + // } + //} + //static EssentialsHttpServer _HttpConfigServer; + + + static Global() + { + // Fire up CrestronDataStoreStatic + var err = CrestronDataStoreStatic.InitCrestronDataStore(); + if (err != CrestronDataStore.CDS_ERROR.CDS_SUCCESS) + { + CrestronConsole.PrintLine("Error starting CrestronDataStoreStatic: {0}", err); + return; + } + } + + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/InUseTracking/IInUseTracking.cs b/Essentials Core/PepperDashEssentialsBase/InUseTracking/IInUseTracking.cs new file mode 100644 index 00000000..97a7c7f6 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/InUseTracking/IInUseTracking.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +namespace PepperDash.Essentials.Core +{ + /// + /// Defines a class that uses an InUseTracker + /// + public interface IInUseTracking + { + InUseTracking InUseTracker { get; } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/InUseTracking/InUseTracking.cs b/Essentials Core/PepperDashEssentialsBase/InUseTracking/InUseTracking.cs new file mode 100644 index 00000000..4bf1a551 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/InUseTracking/InUseTracking.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +namespace PepperDash.Essentials.Core +{ + /// + /// Provides in use tracking. Objects can register with this. InUseFeedback can provide + /// events when usage changes. + /// + public class InUseTracking + { + /// + /// Returns a copied list of all users of this tracker. + /// + public IEnumerable Users { get { return new List(_Users); } } + List _Users = new List(); + + /// + /// Feedback that changes when this goes in/out of use + /// + public BoolFeedback InUseFeedback { get; private set; } + + /// + /// Feedback that changes with the count of users + /// + public IntFeedback InUseCountFeedback { get; private set; } + + public InUseTracking() + { + InUseFeedback = new BoolFeedback(() => _Users.Count > 0); + InUseCountFeedback = new IntFeedback(() => _Users.Count); + } + + /// + /// Add a "user" object to this tracker. A user can be added to this tracker + /// multiple times, provided that the label is different + /// + /// A label to identify the instance of the user. Treated like a "role", etc. + public void AddUser(object objectToAdd, string label) + { + // check if an exact object/label pair exists and ignore if so. No double-registers. + var check = _Users.FirstOrDefault(u => u.Label == label && u.User == objectToAdd); + if (check != null) return; + + var prevCount = _Users.Count; + _Users.Add(new InUseTrackingObject(objectToAdd, label)); + // if this is the first add, fire an update + if (prevCount == 0 && _Users.Count > 0) + InUseFeedback.FireUpdate(); + InUseCountFeedback.FireUpdate(); + } + + /// + /// Remove a user object from this tracking + /// + public void RemoveUser(object objectToRemove, string label) + { + // Find the user object if exists and remove it + var toRemove = _Users.FirstOrDefault(u => u.Label == label && u.User == objectToRemove); + if (toRemove != null) + { + _Users.Remove(toRemove); + if (_Users.Count == 0) + InUseFeedback.FireUpdate(); + InUseCountFeedback.FireUpdate(); + } + } + } + + /// + /// Wrapper for label/object pair representing in-use status. Allows the same object to + /// register for in-use with different roles. + /// + public class InUseTrackingObject + { + public string Label { get; private set; } + public object User { get; private set; } + + public InUseTrackingObject(object user, string label) + { + User = user; + Label = label; + } + } + + //public class InUseEventArgs + //{ + // public int EventType { get; private set; } + // public InUseTracking Tracker { get; private set; } + + // public InUseEventArgs(InUseTracking tracker, int eventType) + // { + // Tracker = tracker; + // EventType = eventType; + // } + //} +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/License/EssentialsLicenseManager.cs b/Essentials Core/PepperDashEssentialsBase/License/EssentialsLicenseManager.cs new file mode 100644 index 00000000..fbeeb38e --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/License/EssentialsLicenseManager.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronDataStore; + +using PepperDash.Essentials.Core; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.License +{ + public abstract class LicenseManager + { + public BoolFeedback LicenseIsValid { get; protected set; } + public StringFeedback LicenseMessage { get; protected set; } + public StringFeedback LicenseLog { get; protected set; } + + protected LicenseManager() + { + CrestronConsole.AddNewConsoleCommand( + s => CrestronConsole.ConsoleCommandResponse(GetStatusString()), + "licensestatus", "shows license and related data", + ConsoleAccessLevelEnum.AccessOperator); + } + + protected abstract string GetStatusString(); + } + + public class MockEssentialsLicenseManager : LicenseManager + { + /// + /// Returns the singleton mock license manager for this app + /// + public static MockEssentialsLicenseManager Manager + { + get + { + if (_Manager == null) + _Manager = new MockEssentialsLicenseManager(); + return _Manager; + } + } + static MockEssentialsLicenseManager _Manager; + + bool IsValid; + + MockEssentialsLicenseManager() : base() + { + LicenseIsValid = new BoolFeedback(LicenseCue.LicenseIsValid, + () => { return IsValid; }); + CrestronConsole.AddNewConsoleCommand( + s => SetFromConsole(s.Equals("true", StringComparison.OrdinalIgnoreCase)), + "mocklicense", "true or false for testing", ConsoleAccessLevelEnum.AccessOperator); + + bool valid; + var err = CrestronDataStoreStatic.GetGlobalBoolValue("MockLicense", out valid); + if (err == CrestronDataStore.CDS_ERROR.CDS_SUCCESS) + SetIsValid(valid); + else if (err == CrestronDataStore.CDS_ERROR.CDS_RECORD_NOT_FOUND) + CrestronDataStoreStatic.SetGlobalBoolValue("MockLicense", false); + else + CrestronConsole.PrintLine("Error restoring Mock License setting: {0}", err); + } + + void SetIsValid(bool isValid) + { + IsValid = isValid; + CrestronDataStoreStatic.SetGlobalBoolValue("MockLicense", isValid); + Debug.Console(0, "Mock License is{0} valid", IsValid ? "" : " not"); + LicenseIsValid.FireUpdate(); + } + + void SetFromConsole(bool isValid) + { + SetIsValid(isValid); + } + + protected override string GetStatusString() + { + return string.Format("License Status: {0}", IsValid ? "Valid" : "Not Valid"); + } + } + + public class EssentialsLicenseManager + { + + } + + public class LicenseCue + { + public static Cue LicenseIsValid = Cue.BoolCue("LicenseIsValid", 15991); + + public static Cue LicenseMessage = Cue.StringCue("LicenseMessage", 15991); + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Monitoring/CrestronGenericBaseCommunicationMonitor.cs b/Essentials Core/PepperDashEssentialsBase/Monitoring/CrestronGenericBaseCommunicationMonitor.cs new file mode 100644 index 00000000..bd57b70a --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Monitoring/CrestronGenericBaseCommunicationMonitor.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using System.ComponentModel; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + /// + /// + /// + public class CrestronGenericBaseCommunicationMonitor : StatusMonitorBase + { + GenericBase Device; + + public CrestronGenericBaseCommunicationMonitor(IKeyed parent, GenericBase device, long warningTime, long errorTime) + : base(parent, warningTime, errorTime) + { + Device = device; + } + + public override void Start() + { + Device.OnlineStatusChange -= Device_OnlineStatusChange; + Device.OnlineStatusChange += Device_OnlineStatusChange; + GetStatus(); + } + + public override void Stop() + { + Device.OnlineStatusChange -= Device_OnlineStatusChange; + } + + void Device_OnlineStatusChange(GenericBase currentDevice, OnlineOfflineEventArgs args) + { + GetStatus(); + } + + void GetStatus() + { + if (Device.IsOnline) + { + Status = MonitorStatus.IsOk; + StopErrorTimers(); + } + else + StartErrorTimers(); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Monitoring/GenericCommunicationMonitor.cs b/Essentials Core/PepperDashEssentialsBase/Monitoring/GenericCommunicationMonitor.cs new file mode 100644 index 00000000..39cbb8a1 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Monitoring/GenericCommunicationMonitor.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using System.ComponentModel; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + /// + /// Used for monitoring comms that are IBasicCommunication. Will send a poll string and provide an event when + /// statuses change. + /// + public class GenericCommunicationMonitor : StatusMonitorBase + { + public IBasicCommunication Client { get; private set; } + + long PollTime; + CTimer PollTimer; + string PollString; + + /// + /// + /// + /// + /// in MS, >= 5000 + /// in MS, >= 5000 + /// in MS, >= 5000 + /// String to send to comm + public GenericCommunicationMonitor(IKeyed parent, IBasicCommunication client, long pollTime, + long warningTime, long errorTime, string pollString) : + base(parent, warningTime, errorTime) + { + if (pollTime > warningTime || pollTime > errorTime) + throw new ArgumentException("pollTime must be less than warning or errorTime"); + if (pollTime < 5000) + throw new ArgumentException("pollTime cannot be less than 5000 ms"); + + Client = client; + PollTime = pollTime; + PollString = pollString; + } + + /// + /// Build the monitor from a config object + /// + public GenericCommunicationMonitor(IKeyed parent, IBasicCommunication client, + CommunicationMonitorConfig props) : + this(parent, client, props.PollInterval, props.TimeToWarning, props.TimeToError, props.PollString) + { + } + + public override void Start() + { + Client.BytesReceived += Client_BytesReceived; + Poll(); + PollTimer = new CTimer(o => Poll(), null, PollTime, PollTime); + } + + public override void Stop() + { + Client.BytesReceived -= this.Client_BytesReceived; + PollTimer.Stop(); + PollTimer = null; + StopErrorTimers(); + } + + /// + /// Upon any receipt of data, set everything to ok! + /// + /// + /// + void Client_BytesReceived(object sender, GenericCommMethodReceiveBytesArgs e) + { + Status = MonitorStatus.IsOk; + StopErrorTimers(); + } + + void Poll() + { + StartErrorTimers(); + if (Client.IsConnected) + { + Debug.Console(2, Client, "Monitor, Polling"); + Client.SendText(PollString); + } + else + { + Debug.Console(2, Client, "Monitor, Comm not connected"); + } + } + + /// + /// When the client connects, and we're waiting for it, respond and disconect from event + /// + void OneTimeConnectHandler(object o, EventArgs a) + { + if (Client.IsConnected) + { + //Client.IsConnected -= OneTimeConnectHandler; + Debug.Console(2, Client, "Monitor, Comm connected"); + Poll(); + } + } + } + + + public class CommunicationMonitorConfig + { + public int PollInterval { get; set; } + public int TimeToWarning { get; set; } + public int TimeToError { get; set; } + public string PollString { get; set; } + + public CommunicationMonitorConfig() + { + PollInterval = 30000; + TimeToWarning = 120000; + TimeToError = 300000; + PollString = ""; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Monitoring/Interfaces and things.cs b/Essentials Core/PepperDashEssentialsBase/Monitoring/Interfaces and things.cs new file mode 100644 index 00000000..b25be535 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Monitoring/Interfaces and things.cs @@ -0,0 +1,53 @@ + +using System; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + public interface IStatusMonitor + { + IKeyed Parent { get; } + event EventHandler StatusChange; + MonitorStatus Status { get; } + string Message { get; } + void Start(); + void Stop(); + } + + + /// + /// Represents a class that has a basic communication monitoring + /// + public interface ICommunicationMonitor + { + StatusMonitorBase CommunicationMonitor { get; } + } + + /// + /// + /// + public enum MonitorStatus + { + IsOk, InWarning, InError, StatusUnknown + } + + public class MonitorStatusChangeEventArgs : EventArgs + { + public MonitorStatus Status { get; private set; } + public string Message { get; private set; } + + public MonitorStatusChangeEventArgs(MonitorStatus status) + { + Status = status; + Message = status == MonitorStatus.IsOk ? "" : status.ToString(); + } + + public MonitorStatusChangeEventArgs(MonitorStatus status, string message) + { + Status = status; + Message = message; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Monitoring/StatusMonitorBase.cs b/Essentials Core/PepperDashEssentialsBase/Monitoring/StatusMonitorBase.cs new file mode 100644 index 00000000..66382979 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Monitoring/StatusMonitorBase.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using System.ComponentModel; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + public abstract class StatusMonitorBase : IStatusMonitor + { + public event EventHandler StatusChange; + + public IKeyed Parent { get; private set; } + + public MonitorStatus Status + { + get { return _Status; } + protected set + { + if (value != _Status) + { + _Status = value; + OnStatusChange(value); + } + + } + } + MonitorStatus _Status; + + public string Message + { + get { return _Message; } + set + { + if (value == _Message) return; + _Message = value; + OnStatusChange(Status, value); + + } + } + string _Message; + + long WarningTime; + long ErrorTime; + CTimer WarningTimer; + CTimer ErrorTimer; + + public StatusMonitorBase(IKeyed parent, long warningTime, long errorTime) + { + Parent = parent; + if (warningTime > errorTime) + throw new ArgumentException("warningTime must be less than errorTime"); + if (warningTime < 5000 || errorTime < 5000) + throw new ArgumentException("time values cannot be less that 5000 ms"); + + Status = MonitorStatus.StatusUnknown; + WarningTime = warningTime; + ErrorTime = errorTime; + } + + public abstract void Start(); + public abstract void Stop(); + + protected void OnStatusChange(MonitorStatus status) + { + var handler = StatusChange; + if (handler != null) + handler(this, new MonitorStatusChangeEventArgs(status)); + } + + protected void OnStatusChange(MonitorStatus status, string message) + { + var handler = StatusChange; + if (handler != null) + handler(this, new MonitorStatusChangeEventArgs(status, message)); + } + + protected void StartErrorTimers() + { + if (WarningTimer == null) WarningTimer = new CTimer(o => { Status = MonitorStatus.InWarning; }, WarningTime); + if (ErrorTimer == null) ErrorTimer = new CTimer(o => { Status = MonitorStatus.InError; }, ErrorTime); + } + + protected void StopErrorTimers() + { + if (WarningTimer != null) WarningTimer.Stop(); + if (ErrorTimer != null) ErrorTimer.Stop(); + WarningTimer = null; + ErrorTimer = null; + } + + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Monitoring/StatusMonitorCollection.cs b/Essentials Core/PepperDashEssentialsBase/Monitoring/StatusMonitorCollection.cs new file mode 100644 index 00000000..c600f57c --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Monitoring/StatusMonitorCollection.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using System.ComponentModel; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + /// + /// + /// + public class StatusMonitorCollection : IStatusMonitor + { + public IKeyed Parent { get; private set; } + + List Monitors = new List(); + + #region IStatusMonitor Members + + public event EventHandler StatusChange; + + public MonitorStatus Status { get; protected set; } + + public string Message { get; private set; } + + + public StatusMonitorCollection(IKeyed parent) + { + Parent = parent; + } + + public void Start() + { + foreach (var mon in Monitors) + mon.StatusChange += mon_StatusChange; + ProcessStatuses(); + } + + + void ProcessStatuses() + { + var InError = Monitors.Where(m => m.Status == MonitorStatus.InError); + var InWarning = Monitors.Where(m => m.Status == MonitorStatus.InWarning); + var IsOk = Monitors.Where(m => m.Status == MonitorStatus.IsOk); + + + MonitorStatus initialStatus; + string prefix = "0:"; + if (InError.Count() > 0) + { + initialStatus = MonitorStatus.InError; + prefix = "3:"; + } + else if (InWarning.Count() > 0) + { + initialStatus = MonitorStatus.InWarning; + prefix = "2:"; + } + else if (InWarning.Count() > 0) + initialStatus = MonitorStatus.IsOk; + else + initialStatus = MonitorStatus.StatusUnknown; + + // Build the error message string + if (InError.Count() > 0 || InWarning.Count() > 0) + { + StringBuilder sb = new StringBuilder(prefix); + if (InError.Count() > 0) + { + // Do string splits and joins + sb.Append(string.Format("{0} Errors:", InError.Count())); + foreach (var mon in InError) + sb.Append(string.Format("{0}, ", mon.Parent.Key)); + } + if (InWarning.Count() > 0) + { + sb.Append(string.Format("{0} Warnings:", InWarning.Count())); + foreach (var mon in InWarning) + sb.Append(string.Format("{0}, ", mon.Parent.Key)); + } + Message = sb.ToString(); + } + + // Want to fire even if status doesn't change because the message may. + Status = initialStatus; + OnStatusChange(initialStatus, Message); + } + + + void mon_StatusChange(object sender, MonitorStatusChangeEventArgs e) + { + ProcessStatuses(); + } + + public void Stop() + { + throw new NotImplementedException(); + } + + #endregion + + public void AddMonitor(IStatusMonitor monitor) + { + if (!Monitors.Contains(monitor)) + Monitors.Add(monitor); + } + + + protected void OnStatusChange(MonitorStatus status, string message) + { + var handler = StatusChange; + if (handler != null) + handler(this, new MonitorStatusChangeEventArgs(status, message)); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj new file mode 100644 index 00000000..272328ec --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj @@ -0,0 +1,225 @@ + + + Release + AnyCPU + 9.0.30729 + 2.0 + {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5} + Library + Properties + PepperDash.Essentials.Core + PepperDash_Essentials_Core + {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.EthernetCommunications.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Remotes.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll + + + + False + ..\..\..\pepperdash-simplsharp-core\Pepperdash Core\Pepperdash Core\bin\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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + rem S# Pro preparation will execute after these operations + + \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo new file mode 100644 index 00000000..6298a562 Binary files /dev/null and b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo differ diff --git a/Essentials Core/PepperDashEssentialsBase/Presets/DevicePresets.cs b/Essentials Core/PepperDashEssentialsBase/Presets/DevicePresets.cs new file mode 100644 index 00000000..4f79626f --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Presets/DevicePresets.cs @@ -0,0 +1,178 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronIO; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +using PepperDash.Core; + +//using SSMono.IO; + +namespace PepperDash.Essentials.Core.Presets +{ + /// + /// Class that represents the model behind presets display + /// + public class DevicePresetsModel : Device + { + public event EventHandler PresetsLoaded; + + public int PulseTime { get; set; } + public int DigitSpacingMS { get; set; } + public bool PresetsAreLoaded { get; private set; } + + public List PresetsList { get { return _PresetsList.ToList(); } } + List _PresetsList; + public int Count { get { return PresetsList != null ? PresetsList.Count : 0; } } + + public bool UseLocalImageStorage { get; set; } + public string ImagesLocalHostPrefix { get; set; } + public string ImagesPathPrefix { get; set; } + public string ListPathPrefix { get; set; } + + /// + /// The methods on the STB device to call when dialing + /// + Dictionary> DialFunctions; + Action EnterFunction; + + bool DialIsRunning; + string FilePath; + bool InitSuccess; + //SSMono.IO.FileSystemWatcher ListWatcher; + + public DevicePresetsModel(string key, ISetTopBoxNumericKeypad setTopBox, string fileName) + : base(key) + { + PulseTime = 150; + DigitSpacingMS = 150; + + try + { + // Grab the digit functions from the device + // If any fail, the whole thing fails peacefully + DialFunctions = new Dictionary>(10) + { + { '1', setTopBox.Digit1 }, + { '2', setTopBox.Digit2 }, + { '3', setTopBox.Digit3 }, + { '4', setTopBox.Digit4 }, + { '5', setTopBox.Digit5 }, + { '6', setTopBox.Digit6 }, + { '7', setTopBox.Digit7 }, + { '8', setTopBox.Digit8 }, + { '9', setTopBox.Digit9 }, + { '0', setTopBox.Digit0 }, + { '-', setTopBox.Dash } + }; + } + catch + { + Debug.Console(0, "DevicePresets '{0}', not attached to INumericKeypad device. Ignoring", key); + DialFunctions = null; + return; + } + + EnterFunction = setTopBox.KeypadEnter; + + UseLocalImageStorage = true; + + ImagesLocalHostPrefix = "http://" + CrestronEthernetHelper.GetEthernetParameter( + CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS,0); + ImagesPathPrefix = @"/presets/images.zip/"; + ListPathPrefix = @"/html/presets/lists/"; + + SetFileName(fileName); + + //ListWatcher = new FileSystemWatcher(@"\HTML\presets\lists"); + //ListWatcher.NotifyFilter = NotifyFilters.LastWrite; + //ListWatcher.EnableRaisingEvents = true; + //ListWatcher.Changed += ListWatcher_Changed; + InitSuccess = true; + } + + + public void SetFileName(string path) + { + FilePath = ListPathPrefix + path; + LoadChannels(); + } + + public void LoadChannels() + { + PresetsAreLoaded = false; + try + { + var pl = JsonConvert.DeserializeObject(Crestron.SimplSharp.CrestronIO.File.ReadToEnd(FilePath, Encoding.ASCII)); + Name = pl.Name; + _PresetsList = pl.Channels; + } + catch (Exception e) + { + Debug.Console(2, this, "LoadChannels: Error reading presets file. These presets will be empty:\r '{0}'\r Error:{1}", FilePath, e.Message); + // Just save a default empty list + _PresetsList = new List(); + } + PresetsAreLoaded = true; + + var handler = PresetsLoaded; + if (handler != null) + handler(this, EventArgs.Empty); + } + + public void Dial(int presetNum) + { + if (presetNum <= _PresetsList.Count) + Dial(_PresetsList[presetNum - 1].Channel); + } + + public void Dial(string chanNum) + { + if (DialIsRunning || !InitSuccess) return; + if (DialFunctions == null) + { + Debug.Console(1, "DevicePresets '{0}', not attached to keypad device. Ignoring channel", Key); + return; + } + + DialIsRunning = true; + CrestronInvoke.BeginInvoke(o => + { + foreach (var c in chanNum.ToCharArray()) + { + if (DialFunctions.ContainsKey(c)) + Pulse(DialFunctions[c]); + CrestronEnvironment.Sleep(DigitSpacingMS); + } + + if (EnterFunction != null) + Pulse(EnterFunction); + DialIsRunning = false; + }); + } + + void Pulse(Action act) + { + act(true); + CrestronEnvironment.Sleep(PulseTime); + act(false); + } + + /// + /// Event handler for filesystem watcher. When directory changes, this is called + /// + //void ListWatcher_Changed(object sender, FileSystemEventArgs e) + //{ + // Debug.Console(1, this, "folder modified: {0}", e.FullPath); + // if (e.FullPath.Equals(FilePath, StringComparison.OrdinalIgnoreCase)) + // { + // Debug.Console(1, this, "File changed: {0}", e.ChangeType); + // LoadChannels(); + // } + //} + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Presets/DevicePresetsView.cs b/Essentials Core/PepperDashEssentialsBase/Presets/DevicePresetsView.cs new file mode 100644 index 00000000..a43a7a2c --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Presets/DevicePresetsView.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +namespace PepperDash.Essentials.Core.Presets +{ + public class DevicePresetsView + { + public bool ShowNumbers { get; set; } + public bool ShowName { get; set; } + public bool ShowIcon { get; set; } + + public SubpageReferenceList SRL { get; private set; } + public DevicePresetsModel Model { get; private set; } + + public DevicePresetsView(BasicTriListWithSmartObject tl, DevicePresetsModel model) + { + if (model == null) + { + throw new ArgumentNullException("model", "DevicePresetsView Cannot be instantiated with null model"); + } + ShowIcon = true; + ShowName = true; + + Model = model; + + SRL = new SubpageReferenceList(tl, 10012, 3, 0, 4); + Model.PresetsLoaded += new EventHandler(Model_PresetsLoaded); + } + + public void Attach() + { + if (Model.PresetsAreLoaded) + { + uint index = 1; + foreach (var p in Model.PresetsList) + { + SRL.AddItem(new PresetsListSubpageReferenceListItem(p, index, SRL, this)); + index++; + } + SRL.Count = (ushort)Model.PresetsList.Count; + } + } + + public void Detach() + { + SRL.Clear(); + } + + void Model_PresetsLoaded(object sender, EventArgs e) + { + Detach(); + Attach(); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Presets/Interfaces.cs b/Essentials Core/PepperDashEssentialsBase/Presets/Interfaces.cs new file mode 100644 index 00000000..95773c58 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Presets/Interfaces.cs @@ -0,0 +1,22 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using Crestron.SimplSharp; + +//namespace PepperDash.Essentials.Core +//{ +// public interface IPresetsFileChanged : IKeyed +// { +// public event EventHandler PresetsFileChanged; +// } + +// public class PresetsFileChangeEventArgs : EventArgs +// { +// public string FilePath { get; private set; } +// public PresetsFileChangeEventArgs(string filePath) +// { +// FilePath = filePath; +// } +// } +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Presets/PresetChannel.cs b/Essentials Core/PepperDashEssentialsBase/Presets/PresetChannel.cs new file mode 100644 index 00000000..b9650e60 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Presets/PresetChannel.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Newtonsoft.Json; + +namespace PepperDash.Essentials.Core.Presets +{ + public class PresetChannel + { + + [JsonProperty(Required = Required.Always)] + public string Name { get; set; } + [JsonProperty(Required = Required.Always)] + public string IconUrl { get; set; } + [JsonProperty(Required = Required.Always)] + public string Channel { get; set; } + } + + public class PresetsList + { + [JsonProperty(Required=Required.Always)] + public string Name { get; set; } + [JsonProperty(Required = Required.Always)] + public List Channels { get; set; } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Presets/PresetsListSubpageReferenceListItem.cs b/Essentials Core/PepperDashEssentialsBase/Presets/PresetsListSubpageReferenceListItem.cs new file mode 100644 index 00000000..78a9d1bf --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Presets/PresetsListSubpageReferenceListItem.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core.Presets +{ + public class PresetsListSubpageReferenceListItem : SubpageReferenceListItem + { + DevicePresetsView View; + PresetChannel Channel; + + public PresetsListSubpageReferenceListItem(PresetChannel chan, uint index, + SubpageReferenceList owner, DevicePresetsView view) + : base(index, owner) + { + View = view; + Channel = chan; + owner.GetBoolFeedbackSig(index, 1).UserObject = new Action(b => { if (!b) view.Model.Dial((int)index); }); + Refresh(); + } + + public override void Clear() + { + Owner.GetBoolFeedbackSig(Index, 1).UserObject = null; + Owner.StringInputSig(Index, 1).StringValue = ""; + Owner.StringInputSig(Index, 2).StringValue = ""; + Owner.StringInputSig(Index, 3).StringValue = ""; + } + + public override void Refresh() + { + var name = View.ShowName ? Channel.Name : ""; + Owner.StringInputSig(Index, 1).StringValue = name; + var chan = View.ShowNumbers ? Channel.Channel : ""; + Owner.StringInputSig(Index, 2).StringValue = chan; + var url = View.Model.ImagesLocalHostPrefix + View.Model.ImagesPathPrefix + Channel.IconUrl; + Debug.Console(2, "icon url={0}", url); + var icon = View.ShowIcon ? url : ""; + Owner.StringInputSig(Index, 3).StringValue = icon; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Properties/AssemblyInfo.cs b/Essentials Core/PepperDashEssentialsBase/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..832809d4 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Properties/AssemblyInfo.cs @@ -0,0 +1,8 @@ +using System.Reflection; + +[assembly: AssemblyTitle("PepperDashEssentialsBase")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("PepperDashEssentialsBase")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyVersion("1.0.0.*")] + diff --git a/Essentials Core/PepperDashEssentialsBase/Properties/ControlSystem.cfg b/Essentials Core/PepperDashEssentialsBase/Properties/ControlSystem.cfg new file mode 100644 index 00000000..e69de29b diff --git a/Essentials Core/PepperDashEssentialsBase/REMOVE SigId.cs b/Essentials Core/PepperDashEssentialsBase/REMOVE SigId.cs new file mode 100644 index 00000000..884f1601 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/REMOVE SigId.cs @@ -0,0 +1,37 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using Crestron.SimplSharpPro; + +//namespace PepperDash.Essentials.Core +//{ +// public class SigId +// { +// public uint Number { get; private set; } +// public eSigType Type { get; private set; } + +// public SigId(eSigType type, uint number) +// { +// Type = type; +// Number = number; +// } + +// public override bool Equals(object id) +// { +// if (id is SigId) +// { +// var sigId = id as SigId; +// return this.Number == sigId.Number && this.Type == sigId.Type; +// } +// else +// return base.Equals(id); +// } + +// public override int GetHashCode() +// { +// return base.GetHashCode(); +// } +// } + +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/SSMonoIOLibrary.clz b/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/SSMonoIOLibrary.clz new file mode 100644 index 00000000..1166c23e Binary files /dev/null and b/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/SSMonoIOLibrary.clz differ diff --git a/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/SSMonoIOLibrary.config b/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/SSMonoIOLibrary.config new file mode 100644 index 00000000..d1d099df --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/SSMonoIOLibrary.config @@ -0,0 +1,16 @@ + + + SSMonoIOLibrary + SSMonoIOLibrary + SSMonoIOLibrary + 1.007.0017 + SIMPL# Plugin + 5 + 5 + + + + 4/6/2016 7:49:24 AM + 1.0.0.14081 + + \ No newline at end of file diff --git a/PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/SimplSharpData.dat b/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/SimplSharpData.dat similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/SimplSharpData.dat rename to Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/SimplSharpData.dat diff --git a/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/manifest.info b/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/manifest.info new file mode 100644 index 00000000..99eb2339 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/manifest.info @@ -0,0 +1,18 @@ +MainAssembly=SSMonoIOLibrary.dll:6c69af117dca3f74ebca99f7a0e3181c +MainAssemblyMinFirmwareVersion=1.007.0017 +ü +DependencySource=SimplSharpCustomAttributesInterface.dll:9c4b4d4c519b655af90016edca2d66b9 +DependencyPath=SSMonoIOLibrary.clz:SimplSharpCustomAttributesInterface.dll +DependencyMainAssembly=SimplSharpCustomAttributesInterface.dll:9c4b4d4c519b655af90016edca2d66b9 +ü +DependencySource=SimplSharpHelperInterface.dll:aed72eb0e19559a3f56708be76445dcd +DependencyPath=SSMonoIOLibrary.clz:SimplSharpHelperInterface.dll +DependencyMainAssembly=SimplSharpHelperInterface.dll:aed72eb0e19559a3f56708be76445dcd +ü +DependencySource=SimplSharpReflectionInterface.dll:e3ff8edbba84ccd7155b9984e67488b2 +DependencyPath=SSMonoIOLibrary.clz:SimplSharpReflectionInterface.dll +DependencyMainAssembly=SimplSharpReflectionInterface.dll:e3ff8edbba84ccd7155b9984e67488b2 +ü +DependencySource=SSharpCrestronExtensionsLibrary.dll:655a49edee523f150d1c03bcb5db87d0 +DependencyPath=SSMonoIOLibrary.clz:SSharpCrestronExtensionsLibrary.dll +DependencyMainAssembly=SSharpCrestronExtensionsLibrary.dll:655a49edee523f150d1c03bcb5db87d0 diff --git a/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/manifest.ser b/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/manifest.ser new file mode 100644 index 00000000..ac2eb253 Binary files /dev/null and b/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/manifest.ser differ diff --git a/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/SSMonoProTaskLibrary.config b/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/SSMonoProTaskLibrary.config new file mode 100644 index 00000000..3b250815 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/SSMonoProTaskLibrary.config @@ -0,0 +1,16 @@ + + + SSMonoProTaskLibrary + SSMonoProTaskLibrary + SSMonoProTaskLibrary + 1.009.0029 + SIMPL# Plugin + 5 + 5 + + + + 4/6/2016 7:55:41 AM + 1.0.0.14269 + + \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/SSMonoProTaskLibrary.cplz b/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/SSMonoProTaskLibrary.cplz new file mode 100644 index 00000000..927a567e Binary files /dev/null and b/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/SSMonoProTaskLibrary.cplz differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpData.dat b/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/SimplSharpData.dat similarity index 89% rename from PepperDashEssentials/PepperDashEssentials/bin/SimplSharpData.dat rename to Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/SimplSharpData.dat index 30d314ca..816bfe12 100644 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpData.dat and b/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/SimplSharpData.dat differ diff --git a/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/manifest.info b/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/manifest.info new file mode 100644 index 00000000..821d5130 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/manifest.info @@ -0,0 +1,30 @@ +MainAssembly=SSMonoProTaskLibrary.dll:5d3a301400516bd812bf1566c72ccbf2 +MainAssemblyMinFirmwareVersion=1.009.0029 +ü +DependencySource=SimplSharpReflectionInterface.dll:e3ff8edbba84ccd7155b9984e67488b2 +DependencyPath=SSMonoProTaskLibrary.cplz:SimplSharpReflectionInterface.dll +DependencyMainAssembly=SimplSharpReflectionInterface.dll:e3ff8edbba84ccd7155b9984e67488b2 +ü +DependencySource=SSharpCrestronExtensionsLibrary.dll:776d0247d8d42164c46c7cc1dfadbd03 +DependencyPath=SSMonoProTaskLibrary.cplz:SSharpCrestronExtensionsLibrary.dll +DependencyMainAssembly=SSharpCrestronExtensionsLibrary.dll:776d0247d8d42164c46c7cc1dfadbd03 +ü +DependencySource=SSMonoConcurrentCollectionsLibrary.dll:b0afcd989b081899c9eb29f9e4c8b799 +DependencyPath=SSMonoProTaskLibrary.cplz:SSMonoConcurrentCollectionsLibrary.dll +DependencyMainAssembly=SSMonoConcurrentCollectionsLibrary.dll:b0afcd989b081899c9eb29f9e4c8b799 +ü +DependencySource=SSMonoProConcurrentCollectionsLibrary.dll:8b718ce29f938bbf9cb5b8fc2d89332f +DependencyPath=SSMonoProTaskLibrary.cplz:SSMonoProConcurrentCollectionsLibrary.dll +DependencyMainAssembly=SSMonoProConcurrentCollectionsLibrary.dll:8b718ce29f938bbf9cb5b8fc2d89332f +ü +DependencySource=SSMonoSupportLibrary.dll:59362515f2c1d61583b2e40793987917 +DependencyPath=SSMonoProTaskLibrary.cplz:SSMonoSupportLibrary.dll +DependencyMainAssembly=SSMonoSupportLibrary.dll:59362515f2c1d61583b2e40793987917 +ü +DependencySource=SSMonoThreadingLibrary.dll:ea2ae2e1d9c425236f39de9192591062 +DependencyPath=SSMonoProTaskLibrary.cplz:SSMonoThreadingLibrary.dll +DependencyMainAssembly=SSMonoThreadingLibrary.dll:ea2ae2e1d9c425236f39de9192591062 +ü +DependencySource=SSMonoTupleLibrary.dll:2a3b419fff4199838079879053fcb41d +DependencyPath=SSMonoProTaskLibrary.cplz:SSMonoTupleLibrary.dll +DependencyMainAssembly=SSMonoTupleLibrary.dll:2a3b419fff4199838079879053fcb41d diff --git a/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/manifest.ser b/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/manifest.ser new file mode 100644 index 00000000..d24ab36c Binary files /dev/null and b/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/manifest.ser differ diff --git a/Essentials Core/PepperDashEssentialsBase/Room/MOVED RoomEventArgs.cs b/Essentials Core/PepperDashEssentialsBase/Room/MOVED RoomEventArgs.cs new file mode 100644 index 00000000..bca9bb62 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Room/MOVED RoomEventArgs.cs @@ -0,0 +1,41 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using Crestron.SimplSharp; + +//namespace PepperDash.Essentials.Core +//{ +// public class EssentialsRoomSourceChangeEventArgs : EventArgs +// { +// public EssentialsRoom Room { get; private set; } +// public IPresentationSource OldSource { get; private set; } +// public IPresentationSource NewSource { get; private set; } + +// public EssentialsRoomSourceChangeEventArgs(EssentialsRoom room, +// IPresentationSource oldSource, IPresentationSource newSource) +// { +// Room = room; +// OldSource = oldSource; +// NewSource = newSource; +// } +// } + + + +// public class EssentialsRoomAudioDeviceChangeEventArgs : EventArgs +// { +// public EssentialsRoom Room { get; private set; } +// public IBasicVolumeControls OldDevice { get; private set; } +// public IBasicVolumeControls NewDevice { get; private set; } + +// public EssentialsRoomAudioDeviceChangeEventArgs(EssentialsRoom room, +// IBasicVolumeControls oldDevice, IBasicVolumeControls newDevice) +// { +// Room = room; +// OldDevice = oldDevice; +// NewDevice = newDevice; +// } +// } + +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Room/Room.cs b/Essentials Core/PepperDashEssentialsBase/Room/Room.cs new file mode 100644 index 00000000..20947d95 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Room/Room.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + //*************************************************************************************************** + + public abstract class Room : Device, IHasFeedback + { + public abstract BoolFeedback RoomIsOnFeedback { get; protected set; } + public abstract BoolFeedback IsCoolingDownFeedback { get; protected set; } + public abstract BoolFeedback IsWarmingUpFeedback { get; protected set; } + + // In concrete classes, these should be computed from the relevant devices + public virtual uint CooldownTime { get { return 10000; } } + public virtual uint WarmupTime { get { return 5000; } } + + public string Description { get; set; } + public string HelpMessage { get; set; } + + public Room(string key, string name) + : base(key, name) + { + Description = ""; + HelpMessage = ""; + } + + public virtual void RoomOn() { } + + public virtual void RoomOff() { } + + #region IDeviceWithOutputs Members + + public virtual List Feedbacks + { + get + { + return new List + { + RoomIsOnFeedback, + IsCoolingDownFeedback, + IsWarmingUpFeedback + }; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Room/RoomCues.cs b/Essentials Core/PepperDashEssentialsBase/Room/RoomCues.cs new file mode 100644 index 00000000..0d439d09 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Room/RoomCues.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; + +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials +{ + public static class RoomCue + { + // Commands/ + //bools + public static readonly Cue RoomOnToggle = Cue.BoolCue("RoomOnToggle", 2001); + public static readonly Cue RoomOn = Cue.BoolCue("RoomOn", 2002); + public static readonly Cue RoomOff = Cue.BoolCue("RoomOff", 2003); + public static readonly Cue VolumeUp = Cue.BoolCue("VolumeUp", 2011); + public static readonly Cue VolumeDown = Cue.BoolCue("VolumeDown", 2012); + public static readonly Cue VolumeDefault = Cue.BoolCue("VolumeDefault", 2013); + public static readonly Cue MuteToggle = Cue.BoolCue("MuteToggle", 2014); + public static readonly Cue MuteOn = Cue.BoolCue("MuteOn", 2015); + public static readonly Cue MuteOff = Cue.BoolCue("MuteOff", 2016); + + //ushorts + public static readonly Cue SelectSourceByNumber = Cue.UShortCue("SelectSourceByNumber", 2001); + public static readonly Cue VolumeLevel = Cue.UShortCue("VolumeLevel", 2011); + public static readonly Cue VolumeLevelPercent = Cue.UShortCue("VolumeLevelPercent", 2012); + + //strings + public static readonly Cue SelectSourceByKey = Cue.StringCue("SelectSourceByKey", 2001); + + // Outputs + //Bools + public static readonly Cue RoomIsOn = Cue.BoolCue("RoomIsOn", 2002); + public static readonly Cue RoomIsOnStandby = Cue.BoolCue("RoomIsOnStandby", 2003); + public static readonly Cue RoomIsWarmingUp = Cue.BoolCue("RoomIsWarmingUp", 2004); + public static readonly Cue RoomIsCoolingDown = Cue.BoolCue("RoomIsCoolingDown", 2005); + public static readonly Cue RoomIsOccupied = Cue.BoolCue("RoomIsOccupied", 2006); + + //Ushorts + public static readonly Cue SourcesCount = Cue.UShortCue("SourcesCount", 2001); + public static readonly Cue CurrentSourceNumber = Cue.UShortCue("CurrentSourceNumber", 2002); + public static readonly Cue CurrentSourceType = Cue.UShortCue("CurrentSourceType", 2003); + + //Strings + public static readonly Cue CurrentSourceKey = Cue.StringCue("CurrentSourceKey", 2001); + public static readonly Cue CurrentSourceName = Cue.StringCue("CurrentSourceName", 2002); + + public static readonly Cue VolumeLevelText = Cue.StringCue("VolumeLevelText", 2012); + + public static readonly Cue Key = Cue.StringCue("RoomKey", 2021); + public static readonly Cue Name = Cue.StringCue("RoomName", 2022); + public static readonly Cue Description = Cue.StringCue("Description", 2023); + public static readonly Cue HelpMessage = Cue.StringCue("HelpMessage", 2024); + + //Special + public static readonly Cue Source = new Cue("Source", 0, eCueType.Other); + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/IRoutingInputsExtensions.cs b/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/IRoutingInputsExtensions.cs new file mode 100644 index 00000000..ad4a3458 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/IRoutingInputsExtensions.cs @@ -0,0 +1,300 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DM; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + /// + /// + /// + public static class IRoutingInputsExtensions + { + /// + /// Gets any existing route for a destination, clears it, and then + /// + public static void ReleaseAndMakeRoute(this IRoutingInputs destination, IRoutingOutputs source, eRoutingSignalType signalType) + { + var sw = new Stopwatch(); + sw.Start(); + + destination.ReleaseRoute(); + + if (source == null) return; + var newRoute = destination.GetRouteToSource(source, signalType); + if (newRoute == null) return; + RouteDescriptorCollection.DefaultCollection.AddRouteDescriptor(newRoute); + Debug.Console(2, destination, "Executing new route"); + newRoute.ExecuteRoutes(); + sw.Stop(); + Debug.Console(2, destination, "Route took {0} ms", sw.ElapsedMilliseconds); + } + + /// + /// Will release the existing route on the destination + /// + /// + /// + public static void ReleaseRoute(this IRoutingInputs destination) + { + var current = RouteDescriptorCollection.DefaultCollection.RemoveRouteDescriptor(destination); + if (current != null) + { + Debug.Console(2, destination, "Releasing current route: {0}", current.Source.Key); + current.ReleaseRoutes(); + } + } + + + /// + /// + /// + /// + /// + /// + /// + public static RouteDescriptor GetRouteToSource(this IRoutingInputs destination, IRoutingOutputs source, eRoutingSignalType signalType) + { + var routeTable = new RouteDescriptor (source, destination, signalType); + + Debug.Console(0, destination, "Attempting to build source route from {0}***", source.Key); + if (!destination.GetRouteToSource(source, null, null, signalType, 0, routeTable)) + routeTable = null; + + Debug.Console(0, destination, "Route{0} discovered ***", routeTable == null ? " NOT" : ""); + return routeTable; + } + + /// + /// The recursive part of this. Will stop on each device, search its inputs for the + /// desired source and if not found, invoke this function for the each input port + /// hoping to find the source. + /// + /// + /// + /// + /// + /// + /// + /// + /// true if source is hit + static bool GetRouteToSource(this IRoutingInputs destination, IRoutingOutputs source, + RoutingOutputPort onSuccessOutputPort, List alreadyCheckedDevices, + eRoutingSignalType signalType, int cycle, RouteDescriptor routeTable) + { + cycle++; + Debug.Console(0, destination, "SelectInput-cycle {1}. Finding {2} route back to {0}", source.Key, cycle, signalType); + var destDevInputTies = TieLineCollection.Default.Where(t => + t.DestinationPort.ParentDevice == destination && (t.Type == signalType || t.Type == eRoutingSignalType.AudioVideo)); + + // find a direct tie + var directTie = destDevInputTies.FirstOrDefault( + t => !(t.SourcePort.ParentDevice is IRoutingInputsOutputs) + && t.DestinationPort.ParentDevice == destination + && t.SourcePort.ParentDevice == source); + RoutingInputPort inputPort = null; + if (directTie != null) // Found a tie directly to the source + { + Debug.Console(0, destination, "Found direct tie to {0}**", source.Key); + inputPort = directTie.DestinationPort; + } + else // no direct-connect. Walk back devices. + { + Debug.Console(0, destination, "is not directly connected to {0}. Walking down tie lines", source.Key); + + // No direct tie? Run back out on the inputs' attached devices... + // Only the ones that are routing devices + var attachedMidpoints = destDevInputTies.Where(t => t.SourcePort.ParentDevice is IRoutingInputsOutputs); + foreach (var inputTieToTry in attachedMidpoints) + { + Debug.Console(0, destination, "Trying to find route on {0}", inputTieToTry.SourcePort.ParentDevice.Key); + var upstreamDeviceOutputPort = inputTieToTry.SourcePort; + var upstreamRoutingDevice = upstreamDeviceOutputPort.ParentDevice as IRoutingInputsOutputs; + // Check if this previous device has already been walked + if (!(alreadyCheckedDevices != null && alreadyCheckedDevices.Contains(upstreamRoutingDevice))) + { + // haven't seen this device yet. Do it. Pass the output port to the next + // level to enable switching on success + var upstreamRoutingSuccess = upstreamRoutingDevice.GetRouteToSource(source, upstreamDeviceOutputPort, + alreadyCheckedDevices, signalType, cycle, routeTable); + if (upstreamRoutingSuccess) + { + Debug.Console(0, destination, "Upstream device route found"); + inputPort = inputTieToTry.DestinationPort; + break; // Stop looping the inputs in this cycle + } + } + } + } + + // we have a route on corresponding inputPort. *** Do the route *** + if (inputPort != null) + { + Debug.Console(0, destination, "adding route:"); + if (onSuccessOutputPort == null) + { + // it's a sink device + routeTable.Routes.Add(new RouteSwitchDescriptor(inputPort)); + } + else if (destination is IRouting) + { + routeTable.Routes.Add(new RouteSwitchDescriptor (onSuccessOutputPort, inputPort)); + } + else // device is merely IRoutingInputOutputs + Debug.Console(0, destination, " No routing. Passthrough device"); + Debug.Console(0, destination, "Exiting cycle {0}", cycle); + return true; + } + + if(alreadyCheckedDevices == null) + alreadyCheckedDevices = new List(); + alreadyCheckedDevices.Add(destination as IRoutingInputsOutputs); + + Debug.Console(0, destination, "No route found to {0}", source.Key); + return false; + } + } + + + + + + // MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE + + + /// + /// A collection of routes - typically the global DefaultCollection is used + /// + public class RouteDescriptorCollection + { + public static RouteDescriptorCollection DefaultCollection + { + get + { + if (_DefaultCollection == null) + _DefaultCollection = new RouteDescriptorCollection(); + return _DefaultCollection; + } + } + static RouteDescriptorCollection _DefaultCollection; + + List RouteDescriptors = new List(); + + public void AddRouteDescriptor(RouteDescriptor descriptor) + { + if (RouteDescriptors.Any(t => t.Destination == descriptor.Destination)) + { + Debug.Console(1, descriptor.Destination, + "Route to [{0}] already exists in global routes table", descriptor.Source.Key); + return; + } + RouteDescriptors.Add(descriptor); + } + + public RouteDescriptor GetRouteDescriptorForDestination(IRoutingInputs destination) + { + return RouteDescriptors.FirstOrDefault(rd => rd.Destination == destination); + } + + /// + /// Returns the RouteDescriptor for a given destination and removes it from collection. + /// Returns null if no route with the provided destination exists. + /// + public RouteDescriptor RemoveRouteDescriptor(IRoutingInputs destination) + { + var descr = GetRouteDescriptorForDestination(destination); + if (descr != null) + RouteDescriptors.Remove(descr); + return descr; + } + } + + /// + /// Represents an collection of individual route steps between Source and Destination + /// + public class RouteDescriptor + { + public IRoutingInputs Destination { get; private set; } + public IRoutingOutputs Source { get; private set; } + public eRoutingSignalType SignalType { get; private set; } + public List Routes { get; private set; } + + + public RouteDescriptor(IRoutingOutputs source, IRoutingInputs destination, eRoutingSignalType signalType) + { + Destination = destination; + Source = source; + SignalType = signalType; + Routes = new List(); + } + + public void ExecuteRoutes() + { + foreach (var route in Routes) + { + Debug.Console(2, route.ToString()); + if (route.SwitchingDevice is IRoutingSinkWithSwitching) + (route.SwitchingDevice as IRoutingSinkWithSwitching).ExecuteSwitch(route.InputPort.Selector); + else if (route.SwitchingDevice is IRouting) + { + (route.SwitchingDevice as IRouting).ExecuteSwitch(route.InputPort.Selector, route.OutputPort.Selector, SignalType); + route.OutputPort.InUseTracker.AddUser(Destination, "destination"); + } + } + } + + public void ReleaseRoutes() + { + foreach (var route in Routes) + { + if (route.SwitchingDevice is IRouting) + { + // Pull the route from the port. Whatever is watching the output's in use tracker is + // responsible for responding appropriately. + route.OutputPort.InUseTracker.RemoveUser(Destination, "destination"); + } + } + } + + public override string ToString() + { + var routesText = Routes.Select(r => r.ToString()).ToArray(); + return string.Format("Route table from {0} to {1}:\r{2}", Source.Key, Destination.Key, string.Join("\r", routesText)); + } + } + + /// + /// Represents an individual link for a route + /// + public class RouteSwitchDescriptor + { + public IRoutingInputs SwitchingDevice { get { return InputPort.ParentDevice; } } + public RoutingOutputPort OutputPort { get; set; } + public RoutingInputPort InputPort { get; set; } + + public RouteSwitchDescriptor(RoutingInputPort inputPort) + { + InputPort = inputPort; + } + + public RouteSwitchDescriptor(RoutingOutputPort outputPort, RoutingInputPort inputPort) + { + InputPort = inputPort; + OutputPort = outputPort; + } + + public override string ToString() + { + if(OutputPort == null) // IRoutingSink + return string.Format("{0} switches to input '{1}'", SwitchingDevice.Key, InputPort.Selector); + + return string.Format("{0} switches output '{1}' to input '{2}'", SwitchingDevice.Key, OutputPort.Selector, InputPort.Selector); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingInterfaces.cs b/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingInterfaces.cs new file mode 100644 index 00000000..352a35dc --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingInterfaces.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DM; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + //******************************************************************************************* + // Interfaces + + public interface IRoutingInputs : IKeyed + { + RoutingPortCollection InputPorts { get; } + } + + public interface IRoutingOutputs : IKeyed + { + RoutingPortCollection OutputPorts { get; } + } + + /// + /// For fixed-source endpoint devices + /// + public interface IRoutingSinkNoSwitching : IRoutingInputs + { + + } + + public interface IRoutingSinkWithSwitching : IRoutingSinkNoSwitching + { + //void ClearRoute(); + void ExecuteSwitch(object inputSelector); + } + + /// + /// For devices like RMCs, baluns, other devices with no switching. + /// + public interface IRoutingInputsOutputs : IRoutingInputs, IRoutingOutputs + { + } + + public interface IRouting : IRoutingInputsOutputs + { + //void ClearRoute(object outputSelector); + void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType); + } + + public interface IRoutingSource : IRoutingOutputs + { + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingPort.cs b/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingPort.cs new file mode 100644 index 00000000..e2a026ab --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingPort.cs @@ -0,0 +1,144 @@ +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, Hdmi, Rgb, Vga, LineAudio, DigitalAudio, Sdi, Composite, Component, DmCat, DmMmFiber, DmSmFiber + } + + /// + /// 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; + } + + } + + /// + /// 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; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingPortCollection.cs b/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingPortCollection.cs new file mode 100644 index 00000000..ba972ab7 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingPortCollection.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + /// + /// Basically a List , with an indexer to find ports by key name + /// + public class RoutingPortCollection : List where T: RoutingPort + { + /// + /// Case-insensitive port lookup linked to ports' keys + /// + public T this[string key] + { + get + { + return this.FirstOrDefault(i => i.Key.Equals(key, StringComparison.OrdinalIgnoreCase)); + } + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/TieLine.cs b/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/TieLine.cs new file mode 100644 index 00000000..6a89d2de --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/TieLine.cs @@ -0,0 +1,142 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DM; + +using PepperDash.Core; + +namespace PepperDash.Essentials.Core +{ + public class TieLine + { + public RoutingOutputPort SourcePort { get; private set; } + public RoutingInputPort DestinationPort { get; private set; } + public int InUseCount { get { return DestinationUsingThis.Count; } } + + /// + /// Gets the type of this tie line. Will either be the type of the desination port + /// or the type of OverrideType when it is set. + /// + public eRoutingSignalType Type + { + get + { + if (OverrideType.HasValue) return OverrideType.Value; + return DestinationPort.Type; + } + } + + /// + /// Use this to override the Type property for the destination port. For example, + /// when the tie line is type AudioVideo, and the signal flow should be limited to + /// Audio-only or Video only, changing this type will alter the signal paths + /// available to the routing algorithm without affecting the actual Type + /// of the destination port. + /// + public eRoutingSignalType? OverrideType { get; set; } + + List DestinationUsingThis = new List(); + + /// + /// For tie lines that represent internal links, like from cards to the matrix in a DM. + /// This property is true if SourcePort and DestinationPort IsInternal + /// property are both true + /// + public bool IsInternal { get { return SourcePort.IsInternal && DestinationPort.IsInternal; } } + public bool TypeMismatch { get { return SourcePort.Type != DestinationPort.Type; } } + public bool ConnectionTypeMismatch { get { return SourcePort.ConnectionType != DestinationPort.ConnectionType; } } + public string TypeMismatchNote { get; set; } + + /// + /// + /// + /// + /// + public TieLine(RoutingOutputPort sourcePort, RoutingInputPort destinationPort) + { + if (sourcePort == null || destinationPort == null) + throw new ArgumentNullException("source or destination port"); + SourcePort = sourcePort; + DestinationPort = destinationPort; + } + + /// + /// Creates a tie line with an overriding Type. See help for OverrideType property for info + /// + /// The signal type to limit the link to. Overrides DestinationPort.Type + public TieLine(RoutingOutputPort sourcePort, RoutingInputPort destinationPort, eRoutingSignalType overrideType) : + this(sourcePort, destinationPort) + { + OverrideType = overrideType; + } + + public static TieLine TieLineFromStrings(string sourceKey, string sourcePortKey, string destinationKey, string destinationPortKey) + { + var sourceDev = DeviceManager.GetDeviceForKey(sourceKey) as IRoutingOutputs; + if (sourceDev == null) + { + Debug.Console(1, "WARNING: Cannot create tie line, routable source '{0}' not found", sourceKey); + return null; + } + var destDev = DeviceManager.GetDeviceForKey(destinationKey) as IRoutingInputs; + if (destDev == null) + { + Debug.Console(1, "WARNING: Cannot create tie line, routable destination '{0}' not found", destinationKey); + return null; + } + var sourcePort = sourceDev.OutputPorts[sourcePortKey]; + if (sourcePort == null) + { + Debug.Console(1, "WARNING: Cannot create tie line. Source '{0}' does not contain port '{1}'", sourceKey, sourcePortKey); + return null; + } + var destPort = destDev.InputPorts[destinationPortKey]; + if (destPort == null) + { + Debug.Console(1, "WARNING: Cannot create tie line. Destination '{0}' does not contain port '{1}'", destinationKey, destinationPortKey); + return null; + } + + return new TieLine(sourcePort, destPort); + } + + /// + /// Will link up video status from supporting inputs to connected outputs + /// + public void Activate() + { + // Now does nothing + } + + public void Deactivate() + { + // Now does nothing + } + + public override string ToString() + { + return string.Format("Tie line: [{0}]{1} --> [{2}]{3}", SourcePort.ParentDevice.Key, SourcePort.Key, + DestinationPort.ParentDevice.Key, DestinationPort.Key); + } + } + + + //******************************************************************************** + + public class TieLineCollection : List + { + public static TieLineCollection Default + { + get + { + if (_Default == null) + _Default = new TieLineCollection(); + return _Default; + } + } + static TieLineCollection _Default; + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/ICardPortsDevice.cs b/Essentials Core/PepperDashEssentialsBase/Routing/ICardPortsDevice.cs new file mode 100644 index 00000000..6f9ea22f --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Routing/ICardPortsDevice.cs @@ -0,0 +1,20 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using Crestron.SimplSharp; + +//using PepperDash.Core; + +//namespace PepperDash.Essentials.Core +//{ +// /// +// /// Defines a class that has cards, like a DM chassis controller, where +// /// we need to access ports on those cards +// /// +// public interface ICardPortsDevice : IKeyed +// { +// RoutingInputPort GetChildInputPort(string card, string port); +// RoutingOutputPort GetChildOutputPort(string card, string port); +// } +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/IRoutingInputsExtensions.cs b/Essentials Core/PepperDashEssentialsBase/Routing/IRoutingInputsExtensions.cs new file mode 100644 index 00000000..b8f03e59 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Routing/IRoutingInputsExtensions.cs @@ -0,0 +1,333 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DM; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + /// + /// Extensions added to any IRoutingInputs classes to provide discovery-based routing + /// on those destinations. + /// + public static class IRoutingInputsExtensions + { + /// + /// Gets any existing RouteDescriptor for a destination, clears it using ReleaseRoute + /// and then attempts a new Route and if sucessful, stores that RouteDescriptor + /// in RouteDescriptorCollection.DefaultCollection + /// + public static void ReleaseAndMakeRoute(this IRoutingInputs destination, IRoutingOutputs source, eRoutingSignalType signalType) + { + destination.ReleaseRoute(); + + if (source == null) return; + var newRoute = destination.GetRouteToSource(source, signalType); + if (newRoute == null) return; + RouteDescriptorCollection.DefaultCollection.AddRouteDescriptor(newRoute); + Debug.Console(1, destination, "Executing new route"); + newRoute.ExecuteRoutes(); + } + + /// + /// Will release the existing route on the destination, if it is found in + /// RouteDescriptorCollection.DefaultCollection + /// + /// + public static void ReleaseRoute(this IRoutingInputs destination) + { + var current = RouteDescriptorCollection.DefaultCollection.RemoveRouteDescriptor(destination); + if (current != null) + { + Debug.Console(1, destination, "Releasing current route: {0}", current.Source.Key); + current.ReleaseRoutes(); + } + } + + /// + /// Builds a RouteDescriptor that contains the steps necessary to make a route between devices. + /// Routes of type AudioVideo will be built as two separate routes, audio and video. If + /// a route is discovered, a new RouteDescriptor is returned. If one or both parts + /// of an audio/video route are discovered a route descriptor is returned. If no route is + /// discovered, then null is returned + /// + public static RouteDescriptor GetRouteToSource(this IRoutingInputs destination, IRoutingOutputs source, eRoutingSignalType signalType) + { + var routeDescr = new RouteDescriptor(source, destination, signalType); + // if it's a single signal type, find the route + if (signalType != eRoutingSignalType.AudioVideo) + { + Debug.Console(1, destination, "Attempting to build source route from {0}", source.Key); + if (!destination.GetRouteToSource(source, null, null, signalType, 0, routeDescr)) + routeDescr = null; + } + // otherwise, audioVideo needs to be handled as two steps. + else + { + Debug.Console(1, destination, "Attempting to build audio and video routes from {0}", source.Key); + var audioSuccess = destination.GetRouteToSource(source, null, null, eRoutingSignalType.Audio, 0, routeDescr); + if (!audioSuccess) + Debug.Console(1, destination, "Cannot find audio route to {0}", source.Key); + var videoSuccess = destination.GetRouteToSource(source, null, null, eRoutingSignalType.Video, 0, routeDescr); + if (!videoSuccess) + Debug.Console(1, destination, "Cannot find video route to {0}", source.Key); + if (!audioSuccess && !videoSuccess) + routeDescr = null; + } + + Debug.Console(1, destination, "Route{0} discovered", routeDescr == null ? " NOT" : ""); + return routeDescr; + } + + /// + /// The recursive part of this. Will stop on each device, search its inputs for the + /// desired source and if not found, invoke this function for the each input port + /// hoping to find the source. + /// + /// + /// + /// The RoutingOutputPort whose link is being checked for a route + /// Prevents Devices from being twice-checked + /// This recursive function should not be called with AudioVideo + /// Just an informational counter + /// The RouteDescriptor being populated as the route is discovered + /// true if source is hit + static bool GetRouteToSource(this IRoutingInputs destination, IRoutingOutputs source, + RoutingOutputPort outputPortToUse, List alreadyCheckedDevices, + eRoutingSignalType signalType, int cycle, RouteDescriptor routeTable) + { + cycle++; + Debug.Console(2, destination, "SelectInput-cycle {1}. Finding {2} route back to {0}", source.Key, cycle, signalType); + var destDevInputTies = TieLineCollection.Default.Where(t => + t.DestinationPort.ParentDevice == destination && (t.Type == signalType || t.Type == eRoutingSignalType.AudioVideo)); + + // find a direct tie + var directTie = destDevInputTies.FirstOrDefault( + t => !(t.SourcePort.ParentDevice is IRoutingInputsOutputs) + && t.DestinationPort.ParentDevice == destination + && t.SourcePort.ParentDevice == source); + RoutingInputPort goodInputPort = null; + if (directTie != null) // Found a tie directly to the source + { + Debug.Console(2, destination, "Found direct tie to {0}**", source.Key); + goodInputPort = directTie.DestinationPort; + } + else // no direct-connect. Walk back devices. + { + Debug.Console(2, destination, "is not directly connected to {0}. Walking down tie lines", source.Key); + + // No direct tie? Run back out on the inputs' attached devices... + // Only the ones that are routing devices + var attachedMidpoints = destDevInputTies.Where(t => t.SourcePort.ParentDevice is IRoutingInputsOutputs); + foreach (var inputTieToTry in attachedMidpoints) + { + Debug.Console(2, destination, "Trying to find route on {0}", inputTieToTry.SourcePort.ParentDevice.Key); + var upstreamDeviceOutputPort = inputTieToTry.SourcePort; + var upstreamRoutingDevice = upstreamDeviceOutputPort.ParentDevice as IRoutingInputsOutputs; + // Check if this previous device has already been walked + if (!(alreadyCheckedDevices != null && alreadyCheckedDevices.Contains(upstreamRoutingDevice))) + { + // haven't seen this device yet. Do it. Pass the output port to the next + // level to enable switching on success + var upstreamRoutingSuccess = upstreamRoutingDevice.GetRouteToSource(source, upstreamDeviceOutputPort, + alreadyCheckedDevices, signalType, cycle, routeTable); + if (upstreamRoutingSuccess) + { + Debug.Console(2, destination, "Upstream device route found"); + goodInputPort = inputTieToTry.DestinationPort; + break; // Stop looping the inputs in this cycle + } + } + } + } + + // we have a route on corresponding inputPort. *** Do the route *** + if (goodInputPort != null) + { + Debug.Console(2, destination, "adding RouteDescriptor"); + if (outputPortToUse == null) + { + // it's a sink device + routeTable.Routes.Add(new RouteSwitchDescriptor(goodInputPort)); + } + else if (destination is IRouting) + { + routeTable.Routes.Add(new RouteSwitchDescriptor (outputPortToUse, goodInputPort)); + } + else // device is merely IRoutingInputOutputs + Debug.Console(2, destination, " No routing. Passthrough device"); + Debug.Console(2, destination, "Exiting cycle {0}", cycle); + return true; + } + + if(alreadyCheckedDevices == null) + alreadyCheckedDevices = new List(); + alreadyCheckedDevices.Add(destination as IRoutingInputsOutputs); + + Debug.Console(2, destination, "No route found to {0}", source.Key); + return false; + } + } + + + + + + // MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE MOVE + + + /// + /// A collection of RouteDescriptors - typically the static DefaultCollection is used + /// + public class RouteDescriptorCollection + { + public static RouteDescriptorCollection DefaultCollection + { + get + { + if (_DefaultCollection == null) + _DefaultCollection = new RouteDescriptorCollection(); + return _DefaultCollection; + } + } + static RouteDescriptorCollection _DefaultCollection; + + List RouteDescriptors = new List(); + + /// + /// Adds a RouteDescriptor to the list. If an existing RouteDescriptor for the + /// destination exists already, it will not be added - in order to preserve + /// proper route releasing. + /// + /// + public void AddRouteDescriptor(RouteDescriptor descriptor) + { + if (RouteDescriptors.Any(t => t.Destination == descriptor.Destination)) + { + Debug.Console(1, descriptor.Destination, + "Route to [{0}] already exists in global routes table", descriptor.Source.Key); + return; + } + RouteDescriptors.Add(descriptor); + } + + /// + /// Gets the RouteDescriptor for a destination + /// + /// null if no RouteDescriptor for a destination exists + public RouteDescriptor GetRouteDescriptorForDestination(IRoutingInputs destination) + { + return RouteDescriptors.FirstOrDefault(rd => rd.Destination == destination); + } + + /// + /// Returns the RouteDescriptor for a given destination AND removes it from collection. + /// Returns null if no route with the provided destination exists. + /// + public RouteDescriptor RemoveRouteDescriptor(IRoutingInputs destination) + { + var descr = GetRouteDescriptorForDestination(destination); + if (descr != null) + RouteDescriptors.Remove(descr); + return descr; + } + } + + /// + /// Represents an collection of individual route steps between Source and Destination + /// + public class RouteDescriptor + { + public IRoutingInputs Destination { get; private set; } + public IRoutingOutputs Source { get; private set; } + public eRoutingSignalType SignalType { get; private set; } + public List Routes { get; private set; } + + + public RouteDescriptor(IRoutingOutputs source, IRoutingInputs destination, eRoutingSignalType signalType) + { + Destination = destination; + Source = source; + SignalType = signalType; + Routes = new List(); + } + + /// + /// Executes all routes described in this collection. Typically called via + /// extension method IRoutingInputs.ReleaseAndMakeRoute() + /// + public void ExecuteRoutes() + { + foreach (var route in Routes) + { + Debug.Console(2, route.ToString()); + if (route.SwitchingDevice is IRoutingSinkWithSwitching) + (route.SwitchingDevice as IRoutingSinkWithSwitching).ExecuteSwitch(route.InputPort.Selector); + else if (route.SwitchingDevice is IRouting) + { + (route.SwitchingDevice as IRouting).ExecuteSwitch(route.InputPort.Selector, route.OutputPort.Selector, SignalType); + route.OutputPort.InUseTracker.AddUser(Destination, "destination-" + SignalType); + Debug.Console(2, "Port {0} routing. Count={1}", route.OutputPort.Key, route.OutputPort.InUseTracker.InUseCountFeedback.UShortValue); + } + } + } + + /// + /// Releases all routes in this collection. Typically called via + /// extension method IRoutingInputs.ReleaseAndMakeRoute() + /// + public void ReleaseRoutes() + { + foreach (var route in Routes) + { + if (route.SwitchingDevice is IRouting) + { + // Pull the route from the port. Whatever is watching the output's in use tracker is + // responsible for responding appropriately. + route.OutputPort.InUseTracker.RemoveUser(Destination, "destination-" + SignalType); + Debug.Console(2, "Port {0} releasing. Count={1}", route.OutputPort.Key, route.OutputPort.InUseTracker.InUseCountFeedback.UShortValue); + } + } + } + + public override string ToString() + { + var routesText = Routes.Select(r => r.ToString()).ToArray(); + return string.Format("Route table from {0} to {1}:\r{2}", Source.Key, Destination.Key, string.Join("\r", routesText)); + } + } + + /// + /// Represents an individual link for a route + /// + public class RouteSwitchDescriptor + { + public IRoutingInputs SwitchingDevice { get { return InputPort.ParentDevice; } } + public RoutingOutputPort OutputPort { get; set; } + public RoutingInputPort InputPort { get; set; } + + public RouteSwitchDescriptor(RoutingInputPort inputPort) + { + InputPort = inputPort; + } + + public RouteSwitchDescriptor(RoutingOutputPort outputPort, RoutingInputPort inputPort) + { + InputPort = inputPort; + OutputPort = outputPort; + } + + public override string ToString() + { + if(OutputPort == null) // IRoutingSink + return string.Format("{0} switches to input '{1}'", SwitchingDevice.Key, InputPort.Selector); + + return string.Format("{0} switches output '{1}' to input '{2}'", SwitchingDevice.Key, OutputPort.Selector, InputPort.Selector); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs new file mode 100644 index 00000000..ea02a3e4 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DM; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + //******************************************************************************************* + // Interfaces + + + /// + /// Defines a class that has a collection of RoutingInputPorts + /// + public interface IRoutingInputs : IKeyed + { + RoutingPortCollection InputPorts { get; } + } + + /// + /// Defines a class that has a collection of RoutingOutputPorts + /// + + public interface IRoutingOutputs : IKeyed + { + RoutingPortCollection OutputPorts { get; } + } + + /// + /// For fixed-source endpoint devices + /// + public interface IRoutingSinkNoSwitching : IRoutingInputs + { + + } + + public interface IRoutingSinkWithSwitching : IRoutingSinkNoSwitching + { + //void ClearRoute(); + void ExecuteSwitch(object inputSelector); + } + + /// + /// For devices like RMCs, baluns, other devices with no switching. + /// + public interface IRoutingInputsOutputs : IRoutingInputs, IRoutingOutputs + { + } + + public interface IRouting : IRoutingInputsOutputs + { + //void ClearRoute(object outputSelector); + void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType); + } + + public interface IRoutingSource : IRoutingOutputs + { + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPort.cs b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPort.cs new file mode 100644 index 00000000..8440763a --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPort.cs @@ -0,0 +1,200 @@ +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); + //} + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortCollection.cs b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortCollection.cs new file mode 100644 index 00000000..ba972ab7 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortCollection.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + /// + /// Basically a List , with an indexer to find ports by key name + /// + public class RoutingPortCollection : List where T: RoutingPort + { + /// + /// Case-insensitive port lookup linked to ports' keys + /// + public T this[string key] + { + get + { + return this.FirstOrDefault(i => i.Key.Equals(key, StringComparison.OrdinalIgnoreCase)); + } + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortNames.cs b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortNames.cs new file mode 100644 index 00000000..97c119b4 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortNames.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +namespace PepperDash.Essentials.Core.Routing +{ + /// + /// These should correspond directly with the portNames var in the config tool. + /// + public class RoutingPortNames + { + public const string AntennaIn = "antennaIn"; + public const string AnyAudioIn = "anyAudioIn"; + public const string AnyAudioOut = "anyAudioOut"; + public const string AnyOut = "anyOut"; + public const string AnyVideoIn = "anyVideoIn"; + public const string AnyVideoOut = "anyVideoOut"; + public const string BalancedAudioOut = "balancedAudioOut"; + public const string ComponentIn = "componentIn"; + public const string ComponentOut = "componentOut"; + public const string CompositeIn = "compositeIn"; + public const string CompositeOut = "compositeOut"; + public const string DisplayPortIn = "displayPortIn"; + public const string DisplayPortIn1 = "displayPortIn1"; + public const string DisplayPortIn2 = "displayPortIn2"; + public const string DisplayPortIn3 = "displayPortIn3"; + 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 HdmiIn = "hdmiIn"; + public const string HdmiIn1 = "hdmiIn1"; + public const string HdmiIn2 = "hdmiIn2"; + public const string HdmiIn3 = "hdmiIn3"; + public const string HdmiIn4 = "hdmiIn4"; + public const string HdmiIn5 = "hdmiIn5"; + public const string HdmiIn6 = "hdmiIn6"; + public const string HdmiOut = "hdmiOut"; + public const string RgbIn = "rgbIn"; + public const string VgaIn = "vgaIn"; + public const string VgaOut = "vgaOut"; + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/TieLine.cs b/Essentials Core/PepperDashEssentialsBase/Routing/TieLine.cs new file mode 100644 index 00000000..25bf4ea3 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Routing/TieLine.cs @@ -0,0 +1,111 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DM; + +using PepperDash.Core; + +namespace PepperDash.Essentials.Core +{ + public class TieLine + { + public RoutingOutputPort SourcePort { get; private set; } + public RoutingInputPort DestinationPort { get; private set; } + //public int InUseCount { get { return DestinationUsingThis.Count; } } + + /// + /// Gets the type of this tie line. Will either be the type of the desination port + /// or the type of OverrideType when it is set. + /// + public eRoutingSignalType Type + { + get + { + if (OverrideType.HasValue) return OverrideType.Value; + return DestinationPort.Type; + } + } + + /// + /// Use this to override the Type property for the destination port. For example, + /// when the tie line is type AudioVideo, and the signal flow should be limited to + /// Audio-only or Video only, changing this type will alter the signal paths + /// available to the routing algorithm without affecting the actual Type + /// of the destination port. + /// + public eRoutingSignalType? OverrideType { get; set; } + + //List DestinationUsingThis = new List(); + + /// + /// For tie lines that represent internal links, like from cards to the matrix in a DM. + /// This property is true if SourcePort and DestinationPort IsInternal + /// property are both true + /// + public bool IsInternal { get { return SourcePort.IsInternal && DestinationPort.IsInternal; } } + public bool TypeMismatch { get { return SourcePort.Type != DestinationPort.Type; } } + public bool ConnectionTypeMismatch { get { return SourcePort.ConnectionType != DestinationPort.ConnectionType; } } + public string TypeMismatchNote { get; set; } + + /// + /// + /// + /// + /// + public TieLine(RoutingOutputPort sourcePort, RoutingInputPort destinationPort) + { + if (sourcePort == null || destinationPort == null) + throw new ArgumentNullException("source or destination port"); + SourcePort = sourcePort; + DestinationPort = destinationPort; + } + + /// + /// Creates a tie line with an overriding Type. See help for OverrideType property for info + /// + /// The signal type to limit the link to. Overrides DestinationPort.Type + public TieLine(RoutingOutputPort sourcePort, RoutingInputPort destinationPort, eRoutingSignalType overrideType) : + this(sourcePort, destinationPort) + { + OverrideType = overrideType; + } + + /// + /// Will link up video status from supporting inputs to connected outputs + /// + public void Activate() + { + // Now does nothing + } + + public void Deactivate() + { + // Now does nothing + } + + public override string ToString() + { + return string.Format("Tie line: [{0}]{1} --> [{2}]{3}", SourcePort.ParentDevice.Key, SourcePort.Key, + DestinationPort.ParentDevice.Key, DestinationPort.Key); + } + } + + //******************************************************************************** + + public class TieLineCollection : List + { + public static TieLineCollection Default + { + get + { + if (_Default == null) + _Default = new TieLineCollection(); + return _Default; + } + } + static TieLineCollection _Default; + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/TieLineConfig.cs b/Essentials Core/PepperDashEssentialsBase/Routing/TieLineConfig.cs new file mode 100644 index 00000000..d0087747 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Routing/TieLineConfig.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections.Generic; +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronIO; +using Crestron.SimplSharpPro; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using PepperDash.Core; +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.Core.Config +{ + public class TieLineConfig + { + public string SourceKey { get; set; } + public string SourceCard { get; set; } + public string SourcePort { get; set; } + public string DestinationKey { get; set; } + public string DestinationCard { get; set; } + public string DestinationPort { get; set; } + + /// + /// Returns the appropriate tie line for either a card-based device or + /// regular device with ports on-device. + /// + /// null if config data does not match ports, cards or devices + public TieLine GetTieLine() + { + Debug.Console(0, "Build TieLine: {0}", this); + // Get the source device + var sourceDev = DeviceManager.GetDeviceForKey(SourceKey) as IRoutingOutputs; + if (sourceDev == null) + { + LogError("Routable source not found"); + return null; + } + + // Get the destination device + var destDev = DeviceManager.GetDeviceForKey(DestinationKey) as IRoutingInputs; + if (destDev == null) + { + LogError("Routable destination not found"); + return null; + } + + //Get the source port + RoutingOutputPort sourceOutputPort = null; + //// If it's a card-based device, get the card and then the source port + //if (sourceDev is ICardPortsDevice) + //{ + // if (SourceCard == null) + // { + // LogError("Card missing from source device config"); + // return null; + // } + // sourceOutputPort = (sourceDev as ICardPortsDevice).GetChildOutputPort(SourceCard, SourcePort); + // if (sourceOutputPort == null) + // { + // LogError("Source card does not contain port"); + // return null; + // } + //} + //// otherwise it's a normal port device, get the source port + //else + //{ + sourceOutputPort = sourceDev.OutputPorts[SourcePort]; + if (sourceOutputPort == null) + { + LogError("Source does not contain port"); + return null; + } + //} + + + //Get the Destination port + RoutingInputPort destinationInputPort = null; + //// If it's a card-based device, get the card and then the Destination port + //if (destDev is ICardPortsDevice) + //{ + // if (DestinationCard == null) + // { + // LogError("Card missing from destination device config"); + // return null; + // } + // destinationInputPort = (destDev as ICardPortsDevice).GetChildInputPort(DestinationCard, DestinationPort); + // if (destinationInputPort == null) + // { + // LogError("Destination card does not contain port"); + // return null; + // } + //} + //// otherwise it's a normal port device, get the Destination port + //else + //{ + destinationInputPort = destDev.InputPorts[DestinationPort]; + if (destinationInputPort == null) + { + LogError("Destination does not contain port"); + return null; + } + //} + + return new TieLine(sourceOutputPort, destinationInputPort); + } + + void LogError(string msg) + { + Debug.Console(1, "WARNING: Cannot create tie line: {0}:\r {1}", msg, this); + } + + public override string ToString() + { + return string.Format("{0}.{1}.{2} --> {3}.{4}.{5}", SourceKey, SourceCard, SourcePort, + DestinationKey, DestinationCard, DestinationPort); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/SigHelper.cs b/Essentials Core/PepperDashEssentialsBase/SigHelper.cs new file mode 100644 index 00000000..3eac3b4f --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/SigHelper.cs @@ -0,0 +1,161 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; + +using PepperDash.Core; + +namespace PepperDash.Essentials.Core +{ + /// + /// Helper class for various Sig events + /// + public class SigHelper + { + /// + /// Runs action when Sig is pressed + /// + /// + public static void Pressed(Sig sig, Action act) { if (sig.BoolValue) act(); } + + /// + /// Runs action when Sig is released + /// + public static void Released(Sig sig, Action act) { if (!sig.BoolValue) act(); } + + /// + /// Safely sets an action to non-null sig + /// + public static void SetBoolOutAction(BoolOutputSig sig, Action a) + { + if (sig != null) + sig.UserObject = a; + } + + /// + /// Safely clears action of non-null sig. + /// + public static void ClearBoolOutAction(BoolOutputSig sig) + { + if (sig != null) + sig.UserObject = null; + } + + /// + /// Does a timed ramp, where the time is scaled proportional to the + /// remaining range to cover + /// + /// Ushort sig to scale + /// Level to go to + /// In ms (not hundredths like Crestron Sig ramp function) + public static void RampTimeScaled(Sig sig, ushort newLevel, uint time) + { + ushort level = sig.UShortValue; + int diff = Math.Abs(level - newLevel); + uint scaledTime = (uint)(diff * time / 65535); + Ramp(sig, newLevel, scaledTime); + } + + /// + /// Ramps signal + /// + /// + /// + /// In ms (not hundredths like Crestron Sig ramp function) + public static void Ramp(Sig sig, ushort level, uint time) + { + sig.CreateRamp(level, time / 10); + } + } + + /// + /// Attaches to UShortInputSig and does incremental ramping of the signal + /// + public class UshortSigIncrementer + { + UShortInputSig TheSig; + public ushort ChangeAmount { get; set; } + public int MaxValue { get; set; } + public int MinValue { get; set; } + public uint RepeatDelay { get; set; } + public uint RepeatTime { get; set; } + bool SignedMode; + CTimer Timer; + + public UshortSigIncrementer(UShortInputSig sig, ushort changeAmount, int minValue, int maxValue, uint repeatDelay, uint repeatTime) + { + TheSig = sig; + ChangeAmount = changeAmount; + MaxValue = maxValue; + MinValue = minValue; + if (MinValue < 0 || MaxValue < 0) SignedMode = true; + RepeatDelay = repeatDelay; + RepeatTime = repeatTime; + if (SignedMode && (MinValue < -32768 || MaxValue > 32767)) + Debug.Console(1, "UshortSigIncrementer has signed values that exceed range of -32768, 32767"); + } + + public void StartUp() + { + if (Timer != null) return; + Go(ChangeAmount); + } + + public void StartDown() + { + if (Timer != null) return; + Go(-ChangeAmount); + } + + void Go(int change) + { + int level; + if (SignedMode) level = TheSig.ShortValue; + else level = TheSig.UShortValue; + + // Fire once then pause + int newLevel = level + change; + bool atLimit = CheckLevel(newLevel, out newLevel); + SetValue((ushort)newLevel); + + + if (atLimit) // Don't go past end + Stop(); + else if (Timer == null) // Only enter the timer if it's not already running + Timer = new CTimer(o => { Go(change); }, null, RepeatDelay, RepeatTime); + } + + bool CheckLevel(int levelIn, out int levelOut) + { + bool IsAtLimit = false; + if (levelIn > MaxValue) + { + levelOut = MaxValue; + IsAtLimit = true; + } + else if (levelIn < MinValue) + { + levelOut = MinValue; + IsAtLimit = true; + } + else + levelOut = levelIn; + return IsAtLimit; + } + + public void Stop() + { + if (Timer != null) + Timer.Stop(); + Timer = null; + } + + void SetValue(ushort value) + { + //CrestronConsole.PrintLine("Increment level:{0} / {1}", value, (short)value); + TheSig.UShortValue = value; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDPad.cs b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDPad.cs new file mode 100644 index 00000000..2307be7e --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDPad.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +namespace PepperDash.Essentials.Core.SmartObjects +{ + public class SmartObjectDPad : SmartObjectHelperBase + { + public BoolOutputSig SigUp { get { return GetBoolOutputNamed("Up"); } } + public BoolOutputSig SigDown { get { return GetBoolOutputNamed("Down"); } } + public BoolOutputSig SigLeft { get { return GetBoolOutputNamed("Left"); } } + public BoolOutputSig SigRight { get { return GetBoolOutputNamed("Right"); } } + public BoolOutputSig SigCenter { get { return GetBoolOutputNamed("Center"); } } + + public SmartObjectDPad(SmartObject so, bool useUserObjectHandler) + : base(so, useUserObjectHandler) + { + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDynamicList.cs b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDynamicList.cs new file mode 100644 index 00000000..5c4f767a --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDynamicList.cs @@ -0,0 +1,122 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core.SmartObjects +{ + public class SmartObjectDynamicList : SmartObjectHelperBase + { + public const string SigNameScrollToItem = "Scroll To Item"; + public const string SigNameSetNumberOfItems = "Set Number of Items"; + + public uint NameSigOffset { get; private set; } + + public ushort Count + { + get + { + return SmartObject.UShortInput[SigNameSetNumberOfItems].UShortValue; + } + set { SmartObject.UShortInput[SigNameSetNumberOfItems].UShortValue = value; } + } + + /// + /// The limit of the list object, as defined by VTPro settings. Zero if object + /// is not a list + /// + public int MaxCount { get; private set; } + + public SmartObjectDynamicList(SmartObject so, bool useUserObjectHandler, uint nameSigOffset) : base(so, useUserObjectHandler) + { + try + { + // Just try to touch the count signal to make sure this is indeed a dynamic list + var c = Count; + NameSigOffset = nameSigOffset; + MaxCount = SmartObject.BooleanOutput.Count(s => s.Name.EndsWith("Pressed")); + //Debug.Console(2, "Smart object {0} has {1} max", so.ID, MaxCount); + } + catch + { + var msg = string.Format("SmartObjectDynamicList: Smart Object {0:X2}-{1} is not a dynamic list. Ignoring", so.Device.ID, so.ID); + Debug.Console(0, Debug.ErrorLogLevel.Error, msg); + } + } + + /// + /// Builds a new list item + /// + public void SetItem(uint index, string mainText, string iconName, Action action) + { + SetItemMainText(index, mainText); + SetItemIcon(index, iconName); + SetItemButtonAction(index, action); + //try + //{ + // SetMainButtonText(index, text); + // SetIcon(index, iconName); + // SetButtonAction(index, action); + //} + //catch(Exception e) + //{ + // Debug.Console(1, "Cannot set Dynamic List item {0} on smart object {1}", index, SmartObject.ID); + // ErrorLog.Warn(e.ToString()); + //} + } + + public void SetItemMainText(uint index, string text) + { + if (index > MaxCount) return; + // The list item template defines CIPS tags that refer to standard joins + (SmartObject.Device as BasicTriList).StringInput[NameSigOffset + index].StringValue = text; + } + + public void SetItemIcon(uint index, string iconName) + { + if (index > MaxCount) return; + SmartObject.StringInput[string.Format("Set Item {0} Icon Serial", index)].StringValue = iconName; + } + + public void SetItemButtonAction(uint index, Action action) + { + if (index > MaxCount) return; + SmartObject.BooleanOutput[string.Format("Item {0} Pressed", index)].UserObject = action; + } + + /// + /// Sets the feedback on the given line, clearing others when interlocked is set + /// + public void SetFeedback(uint index, bool interlocked) + { + if (interlocked) + ClearFeedbacks(); + SmartObject.BooleanInput[string.Format("Item {0} Selected", index)].BoolValue = true; + } + + /// + /// Clears all button feedbacks + /// + public void ClearFeedbacks() + { + for(int i = 1; i<= Count; i++) + SmartObject.BooleanInput[string.Format("Item {0} Selected", i)].BoolValue = false; + } + + /// + /// Removes Action object from all buttons + /// + public void ClearActions() + { + Debug.Console(2, "SO CLEAR"); + for(ushort i = 1; i <= MaxCount; i++) + SmartObject.BooleanOutput[string.Format("Item {0} Pressed", i)].UserObject = null; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectHelper.cs b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectHelper.cs new file mode 100644 index 00000000..f30d8da1 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectHelper.cs @@ -0,0 +1,128 @@ +using System; +using System.Linq; +using System.Collections.Generic; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + public class SmartObjectHelper + { + public static uint GetSmartObjectJoinForTypeAndObject(uint sourceType, uint typeOffset) + { + return (uint)(10000 + (sourceType * 100) + typeOffset); + } + + //public static void DumpSmartObject(SmartGraphicsTouchpanelControllerBase tp, uint id) + //{ + // if (!tp.TriList.SmartObjects.Contains(id)) + // { + // Debug.Console(0, tp, "does not contain smart object ID {0}", id); + // return; + // } + // var so = tp.TriList.SmartObjects[id]; + // Debug.Console(0, tp, "Signals for smart object ID {0}", id); + // Debug.Console(0, "BooleanInput -------------------------------"); + // foreach (var s in so.BooleanInput) + // Debug.Console(0, " {0,5} {1}", s.Number, s.Name); + // Debug.Console(0, "UShortInput -------------------------------"); + // foreach (var s in so.UShortInput) + // Debug.Console(0, " {0,5} {1}", s.Number, s.Name); + // Debug.Console(0, "StringInput -------------------------------"); + // foreach (var s in so.StringInput) + // Debug.Console(0, " {0,5} {1}", s.Number, s.Name); + // Debug.Console(0, "BooleanOutput -------------------------------"); + // foreach (var s in so.BooleanOutput) + // Debug.Console(0, " {0,5} {1}", s.Number, s.Name); + // Debug.Console(0, "UShortOutput -------------------------------"); + // foreach (var s in so.UShortOutput) + // Debug.Console(0, " {0,5} {1}", s.Number, s.Name); + // Debug.Console(0, "StringOutput -------------------------------"); + // foreach (var s in so.StringOutput) + // Debug.Console(0, " {0,5} {1}", s.Number, s.Name); + //} + + ///// + ///// Inserts/removes the appropriate UO's onto sigs + ///// + ///// + ///// + ///// + ///// + //public static void LinkNumpadWithUserObjects(BasicTriListWithSmartObject triList, + // uint smartObjectId, List deviceUserObjects, Cue Misc_1Function, Cue Misc_2Function, bool state) + //{ + // var sigDict = new Dictionary + // { + // { "0", CommonBoolCue.Digit0 }, + // { "1", CommonBoolCue.Digit1 }, + // { "2", CommonBoolCue.Digit2 }, + // { "3", CommonBoolCue.Digit3 }, + // { "4", CommonBoolCue.Digit4 }, + // { "5", CommonBoolCue.Digit5 }, + // { "6", CommonBoolCue.Digit6 }, + // { "7", CommonBoolCue.Digit7 }, + // { "8", CommonBoolCue.Digit8 }, + // { "9", CommonBoolCue.Digit9 }, + // { "Misc_1", Misc_1Function }, + // { "Misc_2", Misc_2Function }, + // }; + // LinkSmartObjectWithUserObjects(triList, smartObjectId, deviceUserObjects, sigDict, state); + //} + + //public static void LinkDpadWithUserObjects(BasicTriListWithSmartObject triList, + // uint smartObjectId, List deviceUserObjects, bool state) + //{ + // var sigDict = new Dictionary + // { + // { "Up", CommonBoolCue.Up }, + // { "Down", CommonBoolCue.Down }, + // { "Left", CommonBoolCue.Left }, + // { "Right", CommonBoolCue.Right }, + // { "OK", CommonBoolCue.Select }, + // }; + // LinkSmartObjectWithUserObjects(triList, smartObjectId, deviceUserObjects, sigDict, state); + //} + + + ///// + ///// MOVE TO HELPER CLASS + ///// + ///// + ///// + ///// + ///// + ///// + //public static void LinkSmartObjectWithUserObjects(BasicTriListWithSmartObject triList, + // uint smartObjectId, List deviceUserObjects, Dictionary smartObjectSigMap, bool state) + //{ + // // Hook up smart objects if applicable + // if (triList.SmartObjects.Contains(smartObjectId)) + // { + // var smartObject = triList.SmartObjects[smartObjectId]; + // foreach (var kvp in smartObjectSigMap) + // { + // if (smartObject.BooleanOutput.Contains(kvp.Key)) + // { + // if (state) + // { + // // look for a user object and if so, attach/detach it to/from the sig. + // var uo = deviceUserObjects.FirstOrDefault(ao => ao.Cue == kvp.Value); + // if (uo != null) + // smartObject.BooleanOutput[kvp.Key].UserObject = uo; + // } + // else + // smartObject.BooleanOutput[kvp.Key].UserObject = null; + // } + // else + // Debug.Console(0, "Smart object {0} does not contain Sig {1}", smartObject.ID, kvp.Key); + // } + // } + // else + // Debug.Console(0, "ERROR Smart object {0} not found on {1:X2}", smartObjectId, triList.ID); + //} + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectHelperBase.cs b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectHelperBase.cs new file mode 100644 index 00000000..741eec45 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectHelperBase.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +namespace PepperDash.Essentials.Core.SmartObjects +{ + public class SmartObjectHelperBase + { + public SmartObject SmartObject { get; private set; } + + /// + /// This should be set by all inheriting classes, after the class has verified that it is linked to the right object. + /// + public bool Validated { get; protected set; } + + public SmartObjectHelperBase(SmartObject so, bool useUserObjectHandler) + { + SmartObject = so; + if (useUserObjectHandler) + { + // Prevent this from double-registering + SmartObject.SigChange -= this.SmartObject_SigChange; + SmartObject.SigChange += this.SmartObject_SigChange; + } + } + + ~SmartObjectHelperBase() + { + SmartObject.SigChange -= this.SmartObject_SigChange; + } + + public BoolOutputSig GetBoolOutputNamed(string name) + { + if (SmartObject.BooleanOutput.Contains(name)) + return SmartObject.BooleanOutput[name]; + return null; + } + + /// + /// Standard Action listener + /// + /// + /// + void SmartObject_SigChange(GenericBase currentDevice, SmartObjectEventArgs args) + { + var uo = args.Sig.UserObject; + if (uo is Action) + (uo as Action)(args.Sig.BoolValue); + else if (uo is Action) + (uo as Action)(args.Sig.UShortValue); + else if (uo is Action) + (uo as Action)(args.Sig.StringValue); + } + + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectNumeric.cs b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectNumeric.cs new file mode 100644 index 00000000..5d234634 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectNumeric.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +namespace PepperDash.Essentials.Core.SmartObjects +{ + public class SmartObjectNumeric : SmartObjectHelperBase + { + + public BoolOutputSig Digit1 { get { return GetBoolOutputNamed("1"); } } + public BoolOutputSig Digit2 { get { return GetBoolOutputNamed("2"); } } + public BoolOutputSig Digit3 { get { return GetBoolOutputNamed("3"); } } + public BoolOutputSig Digit4 { get { return GetBoolOutputNamed("4"); } } + public BoolOutputSig Digit5 { get { return GetBoolOutputNamed("5"); } } + public BoolOutputSig Digit6 { get { return GetBoolOutputNamed("6"); } } + public BoolOutputSig Digit7 { get { return GetBoolOutputNamed("7"); } } + public BoolOutputSig Digit8 { get { return GetBoolOutputNamed("8"); } } + public BoolOutputSig Digit9 { get { return GetBoolOutputNamed("9"); } } + public BoolOutputSig Digit0 { get { return GetBoolOutputNamed("0"); } } + public BoolOutputSig Misc1 { get { return GetBoolOutputNamed("Misc_1"); } } + public BoolOutputSig Misc2 { get { return GetBoolOutputNamed("Misc_2"); } } + + public SmartObjectNumeric(SmartObject so, bool useUserObjectHandler) : base(so, useUserObjectHandler) + { + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/DeviceStatusListController.cs b/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/DeviceStatusListController.cs new file mode 100644 index 00000000..6fec4209 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/DeviceStatusListController.cs @@ -0,0 +1,111 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using Crestron.SimplSharp; +//using Crestron.SimplSharpPro; +//using Crestron.SimplSharpPro.UI; + +//namespace PepperDash.Essentials.Core +//{ +// /// +// /// Controls the device/tech status list - links in to the first 10, 1, 5 statuses in an item's StatusProperties +// /// +// public class DeviceStatusListController : SubpageReferenceListController +// { +// Dictionary Items = new Dictionary(); + +// public DeviceStatusListController(SmartObject list) +// { +// TheList = new SubpageReferenceList(list, 10, 1, 5); +// } + +// /// +// /// Attaches an item's StatusProperties to the list item. +// /// THIS METHOD MAY BE BETTER ABSORBED INTO SOME OTHER CONTROLLER CLASS AS A +// /// PSIG -> LIST ITEM ADAPTER +// /// +// /// List position +// /// +// public void AddItem(uint listIndex, Device device) +// { +// if (device == null) throw new ArgumentNullException("device"); +// Items[listIndex] = device; + +// // Feedback - read the status properties and if there is room for them on the list sigs +// // link them up. +// //foreach (PValue statusPsig in device.StatusProperties) +// //{ +// // uint num = statusPsig.Number; +// // Sig listSig = null; +// // switch (statusPsig.Type) // Switch on the PSig type and whether the PSig number is within the increment range +// // { +// // case eSigType.Bool: +// // if (num > TheList.BoolIncrement) return; +// // listSig = TheList.BoolInputSig(listIndex, num); // Pull the appropriate list sig. +// // break; +// // case eSigType.String: +// // if (num > TheList.StringIncrement) return; +// // listSig = TheList.StringInputSig(listIndex, num); +// // break; +// // case eSigType.UShort: +// // if (num > TheList.UShortIncrement) return; +// // listSig = TheList.UShortInputSig(listIndex, num); +// // break; +// // default: +// // return; +// // } +// // if (listSig != null) // If we got a sig, plug it into the PSig for updates. +// // statusPsig.AddLinkedSig(listSig, true); +// //} + +// // Press/other handlers - read the Commands and if there is room, add them as Sig handlers. +// //foreach (var id in device.Commands.Keys) +// //{ +// // var pValueNumber = id.Number; +// // Sig listSig = null; +// // // Switch on type of a command and if it's in range, get it's list Sig. +// // switch (id.Type) +// // { +// // case eSigType.Bool: +// // if (pValueNumber > TheList.BoolIncrement) return; +// // listSig = TheList.BoolFeedbackSig(listIndex, pValueNumber); +// // break; +// // case eSigType.String: +// // if (pValueNumber > TheList.StringIncrement) return; +// // listSig = TheList.StringOutputSig(listIndex, pValueNumber); +// // break; +// // case eSigType.UShort: +// // if (pValueNumber > TheList.UShortIncrement) return; +// // listSig = TheList.UShortOutputSig(listIndex, pValueNumber); +// // break; +// // default: +// // return; +// // } +// // if (listSig != null) // If we got a sig, add the command to its ChangeAction +// // SigToAction.GetSigToActionUserObjectForSig(listSig).SigChangeAction += device.Commands[id]; +// // // This will need to be undone when detached MAKE A HELPER!!!! +// //} + +// // "Custom things" below +// // Set the name on sig 1 - just an assignment. Don't +// var nameSig = TheList.StringInputSig(listIndex, 1); +// if (nameSig != null) +// nameSig.StringValue = device.Key; + +// // Map IsOnline bool to a 0 / 1 state analog icon +// // Add an action to the online PValue that maps to a ushort sig on the list POTENTIAL LEAK HERE IF +// // this isn't cleaned up on disconnect +// var onlineSig = TheList.UShortInputSig(listIndex, 1); +// //var onlinePValue = device.StatusProperties[Device.JoinIsOnline]; +// //if (onlineSig != null && onlinePValue != null) +// // onlinePValue.AddChangeAction(pv => onlineSig.UShortValue = (ushort)(onlinePValue.BoolValue ? 1 : 0)); +// // //OR onlinePValue.AddLinkedSig(onlineSig, true); + +// // Set the list length based on largest key +// TheList.Count = (ushort)Items.Keys.DefaultIfEmpty().Max(); // The count will be the largest key or 0 +// } +// } + + +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SourceListSubpageReferenceList.cs b/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SourceListSubpageReferenceList.cs new file mode 100644 index 00000000..e8c49b40 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SourceListSubpageReferenceList.cs @@ -0,0 +1,167 @@ + + + +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using Crestron.SimplSharp; +//using Crestron.SimplSharpPro; +//using Crestron.SimplSharpPro.DeviceSupport; +//using Crestron.SimplSharpPro.UI; + +//using PepperDash.Core; + + +//namespace PepperDash.Essentials.Core +//{ + +// //***************************************************************************** +// /// +// /// Wrapper class for subpage reference list. Contains helpful methods to get at the various signal groupings +// /// and to get individual signals using an index and a join. +// /// +// public class SourceListSubpageReferenceList : SubpageReferenceList +// { +// public const uint SmartObjectJoin = 3801; + +// Action SourceSelectCallback; + +// EssentialsRoom CurrentRoom; + +// public SourceListSubpageReferenceList(BasicTriListWithSmartObject tl, +// Action sourceSelectCallback) +// : base(tl, SmartObjectJoin, 3, 1, 3) +// { +// SourceSelectCallback = sourceSelectCallback; +// } + +// void SetSourceList(Dictionary dict) +// { +// // Iterate all positions, including ones missing from the dict. +// var max = dict.Keys.Max(); +// for (uint i = 1; i <= max; i++) +// { +// // Add the source if it's in the dict +// if (dict.ContainsKey(i)) +// { +// Items.Add(new SourceListSubpageReferenceListItem(i, dict[i], this, SourceSelectCallback)); +// // Plug the callback function into the buttons +// } +// // Blank the line +// else +// Items.Add(new SourceListSubpageReferenceListItem(i, null, +// this, SourceSelectCallback)); +// } +// Count = (ushort)max; +// } + +// /// +// /// Links the SRL to the Room's PresentationSourceChange event for updating of the UI +// /// +// /// +// public void AttachToRoom(EssentialsRoom room) +// { +// CurrentRoom = room; +// SetSourceList(room.Sources); +// CurrentRoom.PresentationSourceChange -= CurrentRoom_PresentationSourceChange; +// CurrentRoom.PresentationSourceChange += CurrentRoom_PresentationSourceChange; +// SetPresentationSourceFb(CurrentRoom.CurrentPresentationSource); +// } + +// /// +// /// Disconnects the SRL from a Room's PresentationSourceChange +// /// +// public void DetachFromCurrentRoom() +// { +// ClearPresentationSourceFb(CurrentRoom.CurrentPresentationSource); +// if(CurrentRoom != null) +// CurrentRoom.PresentationSourceChange -= CurrentRoom_PresentationSourceChange; +// CurrentRoom = null; +// } + +// // Handler to route source changes into list feedback +// void CurrentRoom_PresentationSourceChange(object sender, EssentialsRoomSourceChangeEventArgs args) +// { +// Debug.Console(2, "SRL received source change"); +// ClearPresentationSourceFb(args.OldSource); +// SetPresentationSourceFb(args.NewSource); +// } + +// void ClearPresentationSourceFb(IPresentationSource source) +// { +// if (source == null) return; +// var oldSourceItem = (SourceListSubpageReferenceListItem)Items.FirstOrDefault( +// i => ((SourceListSubpageReferenceListItem)i).SourceDevice == source); +// if (oldSourceItem != null) +// oldSourceItem.ClearFeedback(); +// } + +// void SetPresentationSourceFb(IPresentationSource source) +// { +// if (source == null) return; +// // Now set the new source to light up +// var newSourceItem = (SourceListSubpageReferenceListItem)Items.FirstOrDefault( +// i => ((SourceListSubpageReferenceListItem)i).SourceDevice == source); +// if (newSourceItem != null) +// newSourceItem.SetFeedback(); +// } +// } + +// public class SourceListSubpageReferenceListItem : SubpageReferenceListItem +// { +// public readonly IPresentationSource SourceDevice; + +// public const uint ButtonPressJoin = 1; +// public const uint SelectedFeedbackJoin = 2; +// public const uint ButtonTextJoin = 1; +// public const uint IconNameJoin = 2; + +// public SourceListSubpageReferenceListItem(uint index, +// IPresentationSource srcDevice, SubpageReferenceList owner, Action sourceSelectCallback) +// : base(index, owner) +// { +// if (srcDevice == null) throw new ArgumentNullException("srcDevice"); +// if (owner == null) throw new ArgumentNullException("owner"); +// if (sourceSelectCallback == null) throw new ArgumentNullException("sourceSelectCallback"); + + +// SourceDevice = srcDevice; +// var nameSig = owner.StringInputSig(index, ButtonTextJoin); +// // Should be able to see if there is not enough buttons right here +// if (nameSig == null) +// { +// Debug.Console(0, "ERROR: Item {0} does not exist on source list SRL", index); +// return; +// } +// nameSig.StringValue = srcDevice.Name; +// owner.StringInputSig(index, IconNameJoin).StringValue = srcDevice.IconName; + +// // Assign a source selection action to the appropriate button's UserObject - on release +// owner.GetBoolFeedbackSig(index, ButtonPressJoin).UserObject = new Action(b => +// { if (!b) sourceSelectCallback(index); }); + +// // hook up the video icon +// var videoDev = srcDevice as IAttachVideoStatus; +// if (videoDev != null) +// { +// var status = videoDev.GetVideoStatuses(); +// if (status != null) +// { +// Debug.Console(1, "Linking {0} video status to SRL", videoDev.Key); +// videoDev.GetVideoStatuses().VideoSyncFeedback.LinkInputSig(owner.BoolInputSig(index, 3)); +// } +// } +// } + +// public void SetFeedback() +// { +// Owner.BoolInputSig(Index, SelectedFeedbackJoin).BoolValue = true; +// } + +// public void ClearFeedback() +// { +// Owner.BoolInputSig(Index, SelectedFeedbackJoin).BoolValue = false; +// } +// } +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SubpageReferenceList.cs b/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SubpageReferenceList.cs new file mode 100644 index 00000000..83b0934d --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SubpageReferenceList.cs @@ -0,0 +1,262 @@ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; +using Crestron.SimplSharpPro.UI; + +using PepperDash.Core; + + +namespace PepperDash.Essentials.Core +{ + ////***************************************************************************** + ///// + ///// Base class for all subpage reference list controllers + ///// + //public class SubpageReferenceListController + //{ + // public SubpageReferenceList TheList { get; protected set; } + //} + + //***************************************************************************** + /// + /// Wrapper class for subpage reference list. Contains helpful methods to get at the various signal groupings + /// and to get individual signals using an index and a join. + /// + public class SubpageReferenceList + { + + public ushort Count + { + get { return SetNumberOfItemsSig.UShortValue; } + set { SetNumberOfItemsSig.UShortValue = value; } + } + public ushort MaxDefinedItems { get; private set; } + + public UShortInputSig ScrollToItemSig { get; private set; } + UShortInputSig SetNumberOfItemsSig; + public uint BoolIncrement { get; protected set; } + public uint UShortIncrement { get; protected set; } + public uint StringIncrement { get; protected set; } + + protected readonly SmartObject SRL; + protected readonly List Items = new List(); + + public SubpageReferenceList(BasicTriListWithSmartObject triList, uint smartObjectId, + uint boolIncrement, uint ushortIncrement, uint stringIncrement) + { + SmartObject obj; + // Fail cleanly if not defined + if (triList.SmartObjects == null || triList.SmartObjects.Count == 0) + { + Debug.Console(0, "TriList {0:X2} Smart objects not loaded", triList.ID, smartObjectId); + return; + } + if (triList.SmartObjects.TryGetValue(smartObjectId, out obj)) + { + SRL = triList.SmartObjects[smartObjectId]; + ScrollToItemSig = SRL.UShortInput["Scroll To Item"]; + SetNumberOfItemsSig = SRL.UShortInput["Set Number of Items"]; + BoolIncrement = boolIncrement; + UShortIncrement = ushortIncrement; + StringIncrement = stringIncrement; + + // Count the enable lines to see what max items is + MaxDefinedItems = (ushort)SRL.BooleanInput + .Where(s => s.Name.Contains("Enable")).Count(); + Debug.Console(0, "SRL {0} contains max {1} items", SRL.ID, MaxDefinedItems); + + SRL.SigChange -= new SmartObjectSigChangeEventHandler(SRL_SigChange); + SRL.SigChange += new SmartObjectSigChangeEventHandler(SRL_SigChange); + } + else + Debug.Console(0, "TriList 0x{0:X2} Cannot load smart object {1}", triList.ID, smartObjectId); + } + + /// + /// Adds item to saved list of displayed items (not necessarily in order) + /// DOES NOT adjust Count + /// + /// + public void AddItem(SubpageReferenceListItem item) + { + Items.Add(item); + } + + /// + /// Items need to be responsible for managing their own deallocation process, + /// disconnecting from events, etc. + /// + /// + public void Clear() + { + // If a line item needs to disconnect an CueActionPair or do something to release RAM + foreach (var item in Items) item.Clear(); + // Empty the list + Items.Clear(); + // Clean up the SRL + Count = 0; + ScrollToItemSig.UShortValue = 1; + } + + /// + /// Optional call to refresh the signals on the objects in the SRL - this calls Refresh() on + /// all SubpageReferenceListItem items + /// + public void Refresh() + { + foreach (var item in Items) item.Refresh(); + } + + + // Helpers to get sigs by their weird SO names + + /// + /// Returns the Sig associated with a given SRL line index + /// and the join number of the object on the SRL subpage. + /// Note: If the join number exceeds the increment range, or the count of Sigs on the + /// list object, this will return null + /// + /// The line or item position on the SRL + /// The join number of the item on the SRL subpage + /// A Sig or null if the numbers are out of range + public BoolOutputSig GetBoolFeedbackSig(uint index, uint sigNum) + { + if (sigNum > BoolIncrement) return null; + return SRL.BooleanOutput.FirstOrDefault(s => s.Name.Equals(GetBoolFeedbackSigName(index, sigNum))); + } + + /// + /// Returns the Sig associated with a given SRL line index + /// and the join number of the object on the SRL subpage. + /// Note: If the join number exceeds the increment range, or the count of Sigs on the + /// list object, this will return null + /// + /// The line or item position on the SRL + /// The join number of the item on the SRL subpage + /// A Sig or null if the numbers are out of range + public UShortOutputSig GetUShortOutputSig(uint index, uint sigNum) + { + if (sigNum > UShortIncrement) return null; + return SRL.UShortOutput.FirstOrDefault(s => s.Name.Equals(GetBoolFeedbackSigName(index, sigNum))); + } + + /// + /// Returns the Sig associated with a given SRL line index + /// and the join number of the object on the SRL subpage. + /// Note: If the join number exceeds the increment range, or the count of Sigs on the + /// list object, this will return null + /// + /// The line or item position on the SRL + /// The join number of the item on the SRL subpage + /// A Sig or null if the numbers are out of range + public StringOutputSig GetStringOutputSig(uint index, uint sigNum) + { + if (sigNum > StringIncrement) return null; + return SRL.StringOutput.FirstOrDefault(s => s.Name.Equals(GetBoolFeedbackSigName(index, sigNum))); + } + + /// + /// Returns the Sig associated with a given SRL line index + /// and the join number of the object on the SRL subpage. + /// Note: If the join number exceeds the increment range, or the count of Sigs on the + /// list object, this will return null + /// + /// The line on the SRL + /// The join number of the item on the SRL subpage + /// A Sig or null if the numbers are out of range + public BoolInputSig BoolInputSig(uint index, uint sigNum) + { + if (sigNum > BoolIncrement) return null; + return SRL.BooleanInput.FirstOrDefault(s => s.Name.Equals(GetBoolInputSigName(index, sigNum))); + } + + /// + /// Returns the Sig associated with a given SRL line index + /// and the join number of the object on the SRL subpage. + /// Note: If the join number exceeds the increment range, or the count of Sigs on the + /// list object, this will return null + /// + /// The line on the SRL + /// The join number of the item on the SRL subpage + /// A Sig or null if the numbers are out of range + public UShortInputSig UShortInputSig(uint index, uint sigNum) + { + if (sigNum > UShortIncrement) return null; + return SRL.UShortInput.FirstOrDefault(s => s.Name.Equals(GetUShortInputSigName(index, sigNum))); + } + + /// + /// Returns the Sig associated with a given SRL line index + /// and the join number of the object on the SRL subpage. + /// Note: If the join number exceeds the increment range, or the count of Sigs on the + /// list object, this will return null + /// + /// The line on the SRL + /// The join number of the item on the SRL subpage + /// A Sig or null if the numbers are out of range + public StringInputSig StringInputSig(uint index, uint sigNum) + { + if (sigNum > StringIncrement) return null; + return SRL.StringInput.FirstOrDefault(s => s.Name.Equals(GetStringInputSigName(index, sigNum))); + } + + // Helpers to get signal names + + string GetBoolFeedbackSigName(uint index, uint sigNum) + { + var num = (index - 1) * BoolIncrement + sigNum; + return String.Format("press{0}", num); + } + + string GetUShortOutputSigName(uint index, uint sigNum) + { + var num = (index - 1) * UShortIncrement + sigNum; + return String.Format("an_act{0}", num); + } + + string GetStringOutputSigName(uint index, uint sigNum) + { + var num = (index - 1) * StringIncrement + sigNum; + return String.Format("text-i{0}", num); + } + + string GetBoolInputSigName(uint index, uint sigNum) + { + var num = (index - 1) * BoolIncrement + sigNum; + return String.Format("fb{0}", num); + } + + string GetUShortInputSigName(uint index, uint sigNum) + { + var num = (index - 1) * UShortIncrement + sigNum; + return String.Format("an_fb{0}", num); + } + + string GetStringInputSigName(uint index, uint sigNum) + { + var num = (index - 1) * StringIncrement + sigNum; + return String.Format("text-o{0}", num); + } + + /// + /// Stock SigChange handler + /// + /// + /// + public static void SRL_SigChange(GenericBase currentDevice, SmartObjectEventArgs args) + { + var uo = args.Sig.UserObject; + if (uo is Action) + (uo as Action)(args.Sig.BoolValue); + else if (uo is Action) + (uo as Action)(args.Sig.UShortValue); + else if (uo is Action) + (uo as Action)(args.Sig.StringValue); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SubpageReferenceListItem.cs b/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SubpageReferenceListItem.cs new file mode 100644 index 00000000..30e15f74 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SubpageReferenceListItem.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.UI; + +namespace PepperDash.Essentials.Core +{ + public class SubpageReferenceListItem + { + /// + /// The list that this lives in + /// + protected SubpageReferenceList Owner; + protected uint Index; + + public SubpageReferenceListItem(uint index, SubpageReferenceList owner) + { + Index = index; + Owner = owner; + } + + /// + /// Called by SRL to release all referenced objects + /// + public virtual void Clear() + { + } + + public virtual void Refresh() { } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Touchpanels/MOVED LargeTouchpanelControllerBase.cs b/Essentials Core/PepperDashEssentialsBase/Touchpanels/MOVED LargeTouchpanelControllerBase.cs new file mode 100644 index 00000000..97c937b3 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Touchpanels/MOVED LargeTouchpanelControllerBase.cs @@ -0,0 +1,275 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using Crestron.SimplSharp; +//using Crestron.SimplSharpPro; +//using Crestron.SimplSharpPro.DeviceSupport; + +//using PepperDash.Core; + + +//namespace PepperDash.Essentials.Core +//{ +// /// +// /// +// /// +// public class LargeTouchpanelControllerBase : SmartGraphicsTouchpanelControllerBase +// { +// public string PresentationShareButtonInVideoText = "Share"; +// public string PresentationShareButtonNotInVideoText = "Presentation"; + +// SourceListSubpageReferenceList SourceSelectSRL; +// DevicePageControllerBase CurrentPresentationSourcePageController; + +// public LargeTouchpanelControllerBase(string key, string name, +// BasicTriListWithSmartObject triList, string sgdFilePath) +// : base(key, name, triList, sgdFilePath) +// { +// } + +// public override bool CustomActivate() +// { +// var baseSuccess = base.CustomActivate(); +// if (!baseSuccess) return false; + +// SourceSelectSRL = new SourceListSubpageReferenceList(this.TriList, n => +// { if (CurrentRoom != null) CurrentRoom.SelectSource(n); }); + +// var lm = Global.LicenseManager; +// if (lm != null) +// { +// lm.LicenseIsValid.LinkInputSig(TriList.BooleanInput[UiCue.ShowLicensed.Number]); +// //others +// } + +// // Temp things ----------------------------------------------------------------------- +// TriList.StringInput[UiCue.SplashMessage.Number].StringValue = SplashMessage; +// //------------------------------------------------------------------------------------ + +// // Initialize initial view +// ShowSplashOrMain(); +// return true; +// } + +// /// +// /// In Essentials, this should NEVER be called, since it's a one-room solution +// /// +// protected override void HideRoomUI() +// { +// // UI Cleanup here???? + +// //SwapAudioDeviceControls(CurrentRoom.CurrentAudioDevice, null); +// //CurrentRoom.AudioDeviceWillChange -= CurrentRoom_AudioDeviceWillChange; + +// CurrentRoom.IsCoolingDown.OutputChange -= CurrentRoom_IsCoolingDown_OutputChange; +// CurrentRoom.IsWarmingUp.OutputChange -= CurrentRoom_IsWarmingUp_OutputChange; + +// SourceSelectSRL.DetachFromCurrentRoom(); +// } + +// /// +// /// Ties this panel controller to the Room and gets updates. +// /// +// protected override void ShowRoomUI() +// { +// Debug.Console(1, this, "connecting to system '{0}'", CurrentRoom.Key); + +// TriList.StringInput[RoomCue.Name.Number].StringValue = CurrentRoom.Name; +// TriList.StringInput[RoomCue.Description.Number].StringValue = CurrentRoom.Description; + +// CurrentRoom.IsCoolingDown.OutputChange -= CurrentRoom_IsCoolingDown_OutputChange; +// CurrentRoom.IsWarmingUp.OutputChange -= CurrentRoom_IsWarmingUp_OutputChange; +// CurrentRoom.IsCoolingDown.OutputChange += CurrentRoom_IsCoolingDown_OutputChange; +// CurrentRoom.IsWarmingUp.OutputChange += CurrentRoom_IsWarmingUp_OutputChange; + +// SourceSelectSRL.AttachToRoom(CurrentRoom); +// } + +// void CurrentRoom_IsCoolingDown_OutputChange(object sender, EventArgs e) +// { +// Debug.Console(2, this, "Received room in cooldown={0}", CurrentRoom.IsCoolingDown.BoolValue); +// if (CurrentRoom.IsCoolingDown.BoolValue) // When entering cooldown +// { +// // Do we need to check for an already-running cooldown - like in the case of room switches? +// new ModalDialog(TriList).PresentModalTimerDialog(0, "Power Off", "Power", "Please wait, shutting down", +// "", "", CurrentRoom.CooldownTime, true, b => +// { +// ShowSplashOrMain(); +// }); +// } +// } + +// void CurrentRoom_IsWarmingUp_OutputChange(object sender, EventArgs e) +// { +// Debug.Console(2, this, "Received room in warmup={0}", CurrentRoom.IsWarmingUp.BoolValue); +// if (CurrentRoom.IsWarmingUp.BoolValue) // When entering warmup +// { +// // Do we need to check for an already-running cooldown - like in the case of room switches? +// new ModalDialog(TriList).PresentModalTimerDialog(0, "Power On", "Power", "Please wait, powering on", +// "", "", CurrentRoom.WarmupTime, false, b => +// { +// // Reveal sources - or has already been done behind modal +// }); +// } +// } + +// // Handler for source change events. +// void CurrentRoom_PresentationSourceChange(object sender, EssentialsRoomSourceChangeEventArgs args) +// { +// // Put away the old source and set up the new source. +// Debug.Console(2, this, "Received source change={0}", args.NewSource != null ? args.NewSource.Key : "none"); + +// // If we're in tech, don't switch screen modes. Add any other modes we may want to switch away from +// // inside the if below. +// if (MainMode == eMainModeType.Splash) +// setMainMode(eMainModeType.Presentation); +// SetControlSource(args.NewSource); +// } + +// //*********************************************************************** +// //** UI Manipulation +// //*********************************************************************** + +// /// +// /// Shows the splash page or the main presentation page, depending on config setting +// /// +// void ShowSplashOrMain() +// { +// if (UsesSplashPage) +// setMainMode(eMainModeType.Splash); +// else +// setMainMode(eMainModeType.Presentation); +// } + +// /// +// /// Switches between main modes +// /// +// void setMainMode(eMainModeType mode) +// { +// MainMode = mode; +// switch (mode) +// { +// case eMainModeType.Presentation: +// TriList.BooleanInput[UiCue.VisibleCommonFooter.Number].BoolValue = true; +// TriList.BooleanInput[UiCue.VisibleCommonHeader.Number].BoolValue = true; +// TriList.BooleanInput[UiCue.VisibleSplash.Number].BoolValue = false; +// TriList.BooleanInput[UiCue.VisiblePresentationSourceList.Number].BoolValue = true; +// ShowCurrentPresentationSourceUi(); +// break; +// case eMainModeType.Splash: +// TriList.BooleanInput[UiCue.VisibleCommonFooter.Number].BoolValue = false; +// TriList.BooleanInput[UiCue.VisibleCommonHeader.Number].BoolValue = false; +// TriList.BooleanInput[UiCue.VisiblePresentationSourceList.Number].BoolValue = false; +// TriList.BooleanInput[UiCue.VisibleSplash.Number].BoolValue = true; +// HideCurrentPresentationSourceUi(); +// break; +// case eMainModeType.Tech: +// new ModalDialog(TriList).PresentModalTimerDialog(1, "Tech page", "Info", +// "Tech page will be here soon!
I promise", +// "Bueno!", "", 0, false, null); +// MainMode = eMainModeType.Presentation; +// break; +// default: +// break; +// } +// } + +// void PowerOffWithConfirmPressed() +// { +// if (!CurrentRoom.RoomIsOn.BoolValue) return; +// // Timeout or button 1 press will shut down +// var modal = new ModalDialog(TriList); +// uint seconds = CurrentRoom.UnattendedShutdownTimeMs / 1000; +// var message = string.Format("Meeting will end in {0} seconds", seconds); +// modal.PresentModalTimerDialog(2, "End Meeting", "Info", message, +// "End Meeting Now", "Cancel", CurrentRoom.UnattendedShutdownTimeMs, true, +// but => { if (but != 2) CurrentRoom.RoomOff(); }); +// } + +// /// +// /// Reveals the basic UI for the current device +// /// +// protected override void ShowCurrentPresentationSourceUi() +// { +// if (MainMode == eMainModeType.Splash && CurrentRoom.RoomIsOn.BoolValue) +// setMainMode(eMainModeType.Presentation); + +// if (CurrentPresentationControlDevice == null) +// { +// // If system is off, do one thing + +// // Otherwise, do something else - shouldn't be in this condition + +// return; +// } + +// // If a controller is already loaded, use it +// if (LoadedPageControllers.ContainsKey(CurrentPresentationControlDevice)) +// CurrentPresentationSourcePageController = LoadedPageControllers[CurrentPresentationControlDevice]; +// else +// { +// // This is by no means optimal, but for now.... +// if (CurrentPresentationControlDevice.Type == PresentationSourceType.SetTopBox +// && CurrentPresentationControlDevice is IHasSetTopBoxProperties) +// CurrentPresentationSourcePageController = new PageControllerLargeSetTopBoxGeneric(TriList, +// CurrentPresentationControlDevice as IHasSetTopBoxProperties); + +// else if (CurrentPresentationControlDevice.Type == PresentationSourceType.Laptop) +// CurrentPresentationSourcePageController = new PageControllerLaptop(TriList); + +// // separate these... +// else if (CurrentPresentationControlDevice.Type == PresentationSourceType.Dvd) +// CurrentPresentationSourcePageController = +// new PageControllerLargeDvd(TriList, CurrentPresentationControlDevice as IHasCueActionList); + +// else +// CurrentPresentationSourcePageController = null; + +// // Save it. +// if (CurrentPresentationSourcePageController != null) +// LoadedPageControllers[CurrentPresentationControlDevice] = CurrentPresentationSourcePageController; +// } + +// if (CurrentPresentationSourcePageController != null) +// CurrentPresentationSourcePageController.SetVisible(true); +// } + +// protected override void HideCurrentPresentationSourceUi() +// { +// if (CurrentPresentationControlDevice != null && CurrentPresentationSourcePageController != null) +// CurrentPresentationSourcePageController.SetVisible(false); +// } + + + +// void ShowHelp() +// { +// new ModalDialog(TriList).PresentModalTimerDialog(1, "Help", "Help", CurrentRoom.HelpMessage, +// "OK", "", 0, false, null); +// } + +// protected void ListSmartObjects() +// { +// Debug.Console(0, this, "Smart objects IDs:"); +// var list = TriList.SmartObjects.OrderBy(s => s.Key); +// foreach (var kvp in list) +// Debug.Console(0, " {0}", kvp.Key); +// } + +// public override List FunctionList +// { +// get +// { +// return new List +// { +// new BoolCueActionPair(UiCue.PressSplash, b => { if(!b) setMainMode(eMainModeType.Presentation); }), +// new BoolCueActionPair(UiCue.PressRoomOffWithConfirm, b => { if(!b) PowerOffWithConfirmPressed(); }), +// new BoolCueActionPair(UiCue.PressModePresentationShare, b => { if(!b) setMainMode(eMainModeType.Presentation); }), +// new BoolCueActionPair(UiCue.PressHelp, b => { if(!b) ShowHelp(); }), +// new BoolCueActionPair(UiCue.PressSettings, b => { if(!b) setMainMode(eMainModeType.Tech); }), +// }; +// } +// } +// //#endregion +// } +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Touchpanels/MOVED UIControllers/DevicePageControllerBase.cs b/Essentials Core/PepperDashEssentialsBase/Touchpanels/MOVED UIControllers/DevicePageControllerBase.cs new file mode 100644 index 00000000..334050e0 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Touchpanels/MOVED UIControllers/DevicePageControllerBase.cs @@ -0,0 +1,244 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using Crestron.SimplSharp; +//using Crestron.SimplSharpPro; +//using Crestron.SimplSharpPro.DeviceSupport; + +//using PepperDash.Essentials.Core.Presets; + +//using PepperDash.Core; + + +//namespace PepperDash.Essentials.Core +//{ +// /// +// /// +// /// +// public abstract class DevicePageControllerBase +// { + +// protected BasicTriListWithSmartObject TriList; +// protected List FixedObjectSigs; + +// public DevicePageControllerBase(BasicTriListWithSmartObject triList) +// { +// TriList = triList; +// } + +// public void SetVisible(bool state) +// { +// foreach (var sig in FixedObjectSigs) +// { +// Debug.Console(2, "set visible {0}={1}", sig.Number, state); +// sig.BoolValue = state; +// } +// CustomSetVisible(state); +// } + +// /// +// /// Add any specialized show/hide logic here - beyond FixedObjectSigs. Overriding +// /// methods do not need to call this base method +// /// +// protected virtual void CustomSetVisible(bool state) +// { +// } +// } + +// //public class InterlockedDevicePageController +// //{ +// // public List ObjectBoolJoins { get; set; } +// // public uint DefaultJoin { get; set; } +// //} + + + + +// ///// +// ///// +// ///// +// //public interface IHasSetTopBoxProperties +// //{ +// // bool HasDpad { get; } +// // bool HasPreset { get; } +// // bool HasDvr { get; } +// // bool HasNumbers { get; } +// // DevicePresetsModel PresetsModel { get; } +// // void LoadPresets(string filePath); +// //} + +// public class PageControllerLaptop : DevicePageControllerBase +// { +// public PageControllerLaptop(BasicTriListWithSmartObject tl) +// : base(tl) +// { +// FixedObjectSigs = new List +// { +// tl.BooleanInput[10092], // well +// tl.BooleanInput[11001] // Laptop info +// }; +// } +// } + +// ///// +// ///// +// ///// +// //public class PageControllerLargeDvd : DevicePageControllerBase +// //{ +// // IHasCueActionList Device; + +// // public PageControllerLargeDvd(BasicTriListWithSmartObject tl, IHasCueActionList device) +// // : base(tl) +// // { + +// // Device = device; +// // FixedObjectSigs = new List +// // { +// // tl.BooleanInput[10093], // well +// // tl.BooleanInput[10411], // DVD Dpad +// // tl.BooleanInput[10412] // everything else +// // }; +// // } + +// // protected override void CustomSetVisible(bool state) +// // { +// // // Hook up smart objects if applicable +// // if (Device != null) +// // { +// // var uos = (Device as IHasCueActionList).CueActionList; +// // SmartObjectHelper.LinkDpadWithUserObjects(TriList, 10411, uos, state); +// // } +// // } +// //} + + +// /// +// /// +// /// +// //public class PageControllerLargeSetTopBoxGeneric : DevicePageControllerBase +// //{ +// // // To-DO: Add properties for component subpage names. DpadPos1, DpadPos2... +// // // Derived classes can then insert special subpages for variations on given +// // // device types. Like DirecTV vs Comcast + +// // public uint DpadSmartObjectId { get; set; } +// // public uint NumberPadSmartObjectId { get; set; } +// // public uint PresetsSmartObjectId { get; set; } +// // public uint Position5TabsId { get; set; } + +// // IHasSetTopBoxProperties Device; +// // DevicePresetsView PresetsView; + + +// // bool ShowPosition5Tabs; +// // uint CurrentVisiblePosition5Item = 1; +// // Dictionary Position5SubpageJoins = new Dictionary +// // { +// // { 1, 10053 }, +// // { 2, 10054 } +// // }; + +// // public PageControllerLargeSetTopBoxGeneric(BasicTriListWithSmartObject tl, IHasSetTopBoxProperties device) +// // : base(tl) +// // { +// // Device = device; +// // DpadSmartObjectId = 10011; +// // NumberPadSmartObjectId = 10014; +// // PresetsSmartObjectId = 10012; +// // Position5TabsId = 10081; + +// // bool dpad = device.HasDpad; +// // bool preset = device.HasPreset; +// // bool dvr = device.HasDvr; +// // bool numbers = device.HasNumbers; +// // uint[] joins = null; + +// // if (dpad && !preset && !dvr && !numbers) joins = new uint[] { 10031, 10091 }; +// // else if (!dpad && preset && !dvr && !numbers) joins = new uint[] { 10032, 10091 }; +// // else if (!dpad && !preset && dvr && !numbers) joins = new uint[] { 10033, 10091 }; +// // else if (!dpad && !preset && !dvr && numbers) joins = new uint[] { 10034, 10091 }; + +// // else if (dpad && preset && !dvr && !numbers) joins = new uint[] { 10042, 10021, 10092 }; +// // else if (dpad && !preset && dvr && !numbers) joins = new uint[] { 10043, 10021, 10092 }; +// // else if (dpad && !preset && !dvr && numbers) joins = new uint[] { 10044, 10021, 10092 }; +// // else if (!dpad && preset && dvr && !numbers) joins = new uint[] { 10043, 10022, 10092 }; +// // else if (!dpad && preset && !dvr && numbers) joins = new uint[] { 10044, 10022, 10092 }; +// // else if (!dpad && !preset && dvr && numbers) joins = new uint[] { 10044, 10023, 10092 }; + +// // else if (dpad && preset && dvr && !numbers) joins = new uint[] { 10053, 10032, 10011, 10093 }; +// // else if (dpad && preset && !dvr && numbers) joins = new uint[] { 10054, 10032, 10011, 10093 }; +// // else if (dpad && !preset && dvr && numbers) joins = new uint[] { 10054, 10033, 10011, 10093 }; +// // else if (!dpad && preset && dvr && numbers) joins = new uint[] { 10054, 10033, 10012, 10093 }; + +// // else if (dpad && preset && dvr && numbers) +// // { +// // joins = new uint[] { 10081, 10032, 10011, 10093 }; // special case +// // ShowPosition5Tabs = true; +// // } +// // // Project the joins into corresponding sigs. +// // FixedObjectSigs = joins.Select(u => TriList.BooleanInput[u]).ToList(); + +// // // Build presets +// // if (device.HasPreset) +// // { +// // PresetsView = new DevicePresetsView(tl, device.PresetsModel); +// // } + + +// // } + +// // protected override void CustomSetVisible(bool state) +// // { +// // if (ShowPosition5Tabs) +// // { +// // // Show selected tab +// // TriList.BooleanInput[Position5SubpageJoins[CurrentVisiblePosition5Item]].BoolValue = state; + +// // var tabSo = TriList.SmartObjects[Position5TabsId]; +// // if (state) // Link up the tab object + +// // { +// // tabSo.BooleanOutput["Tab Button 1 Press"].UserObject = new BoolCueActionPair(b => ShowTab(1)); +// // tabSo.BooleanOutput["Tab Button 2 Press"].UserObject = new BoolCueActionPair(b => ShowTab(2)); +// // } +// // else // Disco tab object +// // { +// // tabSo.BooleanOutput["Tab Button 1 Press"].UserObject = null; +// // tabSo.BooleanOutput["Tab Button 2 Press"].UserObject = null; +// // } +// // } + +// // // Hook up smart objects if applicable +// // if (Device is IHasCueActionList) +// // { +// // var uos = (Device as IHasCueActionList).CueActionList; +// // SmartObjectHelper.LinkDpadWithUserObjects(TriList, DpadSmartObjectId, uos, state); +// // SmartObjectHelper.LinkNumpadWithUserObjects(TriList, NumberPadSmartObjectId, +// // uos, CommonBoolCue.Dash, CommonBoolCue.Last, state); +// // } + + +// // // Link, unlink presets +// // if (Device.HasPreset && state) +// // PresetsView.Attach(); +// // else if (Device.HasPreset && !state) +// // PresetsView.Detach(); +// // } + +// // void ShowTab(uint number) +// // { +// // // Ignore re-presses +// // if (CurrentVisiblePosition5Item == number) return; +// // // Swap subpage +// // var bi = TriList.BooleanInput; +// // if(CurrentVisiblePosition5Item > 0) +// // bi[Position5SubpageJoins[CurrentVisiblePosition5Item]].BoolValue = false; +// // CurrentVisiblePosition5Item = number; +// // bi[Position5SubpageJoins[CurrentVisiblePosition5Item]].BoolValue = true; + +// // // Show feedback on buttons +// // } + +// //} +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Touchpanels/ModalDialog.cs b/Essentials Core/PepperDashEssentialsBase/Touchpanels/ModalDialog.cs new file mode 100644 index 00000000..3a6f0b87 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Touchpanels/ModalDialog.cs @@ -0,0 +1,200 @@ +using System; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro.DeviceSupport; + +namespace PepperDash.Essentials.Core +{ + public class ModalDialog + { + /// + /// Bool press 3991 + /// + public const uint Button1Join = 3991; + /// + /// Bool press 3992 + /// + public const uint Button2Join = 3992; + /// + ///For visibility of single button. Bool feedback 3994 + /// + public const uint OneButtonVisibleJoin = 3994; + /// + /// For visibility of two buttons. Bool feedback 3995. + /// + public const uint TwoButtonVisibleJoin = 3995; + /// + /// Shows the timer guage if in use. Bool feedback 3996 + /// + public const uint TimerVisibleJoin = 3996; + /// + /// Shows the modal subpage. Boolean feeback join 3999 + /// + public const uint ModalVisibleJoin = 3999; + + /// + /// The seconds value of the countdown timer. Ushort join 3991 + /// + public const uint TimerSecondsJoin = 3991; + /// + /// The full ushort value of the countdown timer for a gauge. Ushort join 3992 + /// + public const uint TimerGaugeJoin = 3992; + + /// + /// Text on button one. String join 3991 + /// + public const uint Button1TextJoin = 3991; + /// + /// Text on button two. String join 3992 + /// + public const uint Button2TextJoin = 3992; + /// + /// Message text. String join 3994 + /// + public const uint MessageTextJoin = 3994; + /// + /// Title text. String join 3995 + /// + public const uint TitleTextJoin = 3995; + /// + /// Icon name. String join 3996 + /// + public const uint IconNameJoin = 3996; + + /// + /// Returns true when modal is showing + /// + public bool ModalIsVisible + { + get { return TriList.BooleanInput[ModalVisibleJoin].BoolValue; } + } + + + BasicTriList TriList; + + Action ModalCompleteAction; + CTimer Timer; + + static object CompleteActionLock = new object(); + + /// + /// Creates a new modal to be shown on provided TriList + /// + /// + public ModalDialog(BasicTriList triList) + { + TriList = triList; + // Attach actions to buttons + triList.SetSigFalseAction(Button1Join, () => OnModalComplete(1, true)); + triList.SetSigFalseAction(Button2Join, () => OnModalComplete(2, true)); + } + + /// + /// Shows the dialog + /// + /// Number of buttons to show. 0, 1, 2 + /// The amount of time to show the dialog. Use 0 for no timeout. + /// If the progress bar gauge needs to count down instead of up + /// The action to run when the dialog is dismissed. Parameter will be 1 or 2 if button pressed, or 0 if dialog times out + /// True when modal is created. + public bool PresentModalTimerDialog(uint numberOfButtons, string title, string iconName, + string message, string button1Text, + string button2Text, uint timeMs, bool decreasingGauge, Action completeAction) + { + //Debug.Console(0, "Present dialog"); + // Don't reset dialog if visible now + if (!ModalIsVisible) + { + ModalCompleteAction = completeAction; + TriList.StringInput[TitleTextJoin].StringValue = title; + if (string.IsNullOrEmpty(iconName)) iconName = "Blank"; + TriList.StringInput[IconNameJoin].StringValue = iconName; + TriList.StringInput[MessageTextJoin].StringValue = message; + if (numberOfButtons == 0) + { + // Show no buttons + TriList.BooleanInput[OneButtonVisibleJoin].BoolValue = false; + TriList.BooleanInput[TwoButtonVisibleJoin].BoolValue = false; + } + else if (numberOfButtons == 1) + { + // Show one button + TriList.BooleanInput[OneButtonVisibleJoin].BoolValue = true; + TriList.BooleanInput[TwoButtonVisibleJoin].BoolValue = false; + TriList.StringInput[Button1TextJoin].StringValue = button1Text; + } + else if (numberOfButtons == 2) + { + // Show two + TriList.BooleanInput[OneButtonVisibleJoin].BoolValue = false; + TriList.BooleanInput[TwoButtonVisibleJoin].BoolValue = true; + TriList.StringInput[Button1TextJoin].StringValue = button1Text; + TriList.StringInput[Button2TextJoin].StringValue = button2Text; + } + // Show/hide timer + TriList.BooleanInput[TimerVisibleJoin].BoolValue = timeMs > 0; + + //Reveal and activate + TriList.BooleanInput[ModalVisibleJoin].BoolValue = true; + + // Start ramp timers if visible + if (timeMs > 0) + { + TriList.UShortInput[TimerSecondsJoin].UShortValue = (ushort)(timeMs / 1000); // Seconds display + TriList.UShortInput[TimerSecondsJoin].CreateRamp(0, (uint)(timeMs / 10)); + if (decreasingGauge) + { + // Gauge + TriList.UShortInput[TimerGaugeJoin].UShortValue = ushort.MaxValue; + // Text + TriList.UShortInput[TimerGaugeJoin].CreateRamp(0, (uint)(timeMs / 10)); + } + else + { + TriList.UShortInput[TimerGaugeJoin].UShortValue = 0; // Gauge + TriList.UShortInput[TimerGaugeJoin]. + CreateRamp(ushort.MaxValue, (uint)(timeMs / 10)); + } + Timer = new CTimer(o => OnModalComplete(0, false), timeMs); + } + + // Start a timer and fire action with no button on timeout. + return true; + } + + // Dialog is busy + //Debug.Console(2, "Modal is already visible"); + return false; + } + + public void CancelDialog() + { + if (ModalIsVisible) + { + TriList.UShortInput[TimerSecondsJoin].StopRamp(); + TriList.UShortInput[TimerGaugeJoin].StopRamp(); + if (Timer != null) Timer.Stop(); + TriList.BooleanInput[ModalVisibleJoin].BoolValue = false; + } + } + + // When the modal is cleared or times out, clean up the various bits + void OnModalComplete(uint buttonNum, bool cancelled) + { + //Debug.Console(2, "OnModalComplete {0}, {1}", buttonNum, cancelled); + TriList.BooleanInput[ModalVisibleJoin].BoolValue = false; + if (cancelled) + { + TriList.UShortInput[TimerSecondsJoin].StopRamp(); + TriList.UShortInput[TimerGaugeJoin].StopRamp(); + Timer.Stop(); + } + if (ModalCompleteAction != null) + { + //Debug.Console(2, "Modal complete action"); + ModalCompleteAction(buttonNum); + } + } + } + +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Touchpanels/REMOVE Tsr302Controller.cs b/Essentials Core/PepperDashEssentialsBase/Touchpanels/REMOVE Tsr302Controller.cs new file mode 100644 index 00000000..13cfabcc --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Touchpanels/REMOVE Tsr302Controller.cs @@ -0,0 +1,135 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using Crestron.SimplSharp; +//using Crestron.SimplSharpPro; +//using Crestron.SimplSharpPro.DeviceSupport; +//using Crestron.SimplSharpPro.UI; + +//using PepperDash.Core; + + +//namespace PepperDash.Essentials.Core +//{ +//[Obsolete("Replaced, initially with CrestronTsr302Controller in Resissentials")] +// public class Tsr302Controller : SmartGraphicsTouchpanelControllerBase +// { +// //public override List FunctionList +// //{ +// // get +// // { +// // return new List +// // { + +// // }; +// // } +// //} + +// public Tsr302 Remote { get; private set; } + +// SourceListSubpageReferenceList SourceSelectSRL; +// DevicePageControllerBase CurrentPresentationSourcePageController; +// CTimer VolumeFeedbackTimer; + + +// public Tsr302Controller(string key, string name, Tsr302 device, string sgdFilePath) : +// base(key, name, device, sgdFilePath) +// { +// // Base takes care of TriList +// Remote = device; +// Remote.Home.UserObject = new BoolCueActionPair(b => { if (!b) PressHome(); }); +// Remote.VolumeUp.UserObject = new BoolCueActionPair(b => { if (!b) PressHome(); }); +// Remote.ButtonStateChange += Remote_ButtonStateChange; +// } + +// public override bool CustomActivate() +// { +// var baseSuccess = base.CustomActivate(); +// if (!baseSuccess) return false; + +// SourceSelectSRL = new SourceListSubpageReferenceList(this.TriList, n => +// { if (CurrentRoom != null) CurrentRoom.SelectSource(n); }); + + +// return true; +// } + +// protected override void SwapAudioDeviceControls(IVolumeFunctions oldDev, IVolumeFunctions newDev) +// { +// // stop presses +// if (oldDev != null) +// { +// ReleaseAudioPresses(); +// if (oldDev is IVolumeTwoWay) +// { +// (newDev as IVolumeTwoWay).VolumeLevelFeedback.OutputChange -= VolumeLevelOutput_OutputChange; +// (oldDev as IVolumeTwoWay).VolumeLevelFeedback +// .UnlinkInputSig(TriList.UShortInput[CommonIntCue.MainVolumeLevel.Number]); +// } +// } + +// if (newDev != null) +// { +// Remote.VolumeDown.UserObject = newDev.VolumeDownCueActionPair; +// Remote.VolumeUp.UserObject = newDev.VolumeUpCueActionPair; +// Remote.Mute.UserObject = newDev.MuteToggleCueActionPair; +// if (newDev is IVolumeTwoWay) +// { +// var vOut = (newDev as IVolumeTwoWay).VolumeLevelFeedback; +// vOut.OutputChange += VolumeLevelOutput_OutputChange; +// TriList.UShortInput[CommonIntCue.MainVolumeLevel.Number].UShortValue = vOut.UShortValue; +// } +// } +// else +// { +// Remote.VolumeDown.UserObject = null; +// Remote.VolumeUp.UserObject = null; +// Remote.Mute.UserObject = null; +// } + +// base.SwapAudioDeviceControls(oldDev, newDev); +// } + +// void PressHome() +// { + +// } + +// void VolumeLevelOutput_OutputChange(object sender, EventArgs e) +// { +// // Set level and show popup on timer +// TriList.UShortInput[CommonIntCue.MainVolumeLevel.Number].UShortValue = +// (sender as IntFeedback).UShortValue; + +// if (VolumeFeedbackTimer == null) +// { +// TriList.BooleanInput[CommonBoolCue.ShowVolumeSlider.Number].BoolValue = true; +// VolumeFeedbackTimer = new CTimer(o => { +// TriList.BooleanInput[CommonBoolCue.ShowVolumeSlider.Number].BoolValue = false; +// }, 1000); +// } + +// } + +// void ReleaseAudioPresses() +// { +// if (Remote.VolumeDown.UserObject is BoolCueActionPair && Remote.VolumeDown.State == eButtonState.Pressed) +// (Remote.VolumeDown.UserObject as BoolCueActionPair).Invoke(false); +// if (Remote.VolumeUp.UserObject is BoolCueActionPair && Remote.VolumeUp.State == eButtonState.Pressed) +// (Remote.VolumeUp.UserObject as BoolCueActionPair).Invoke(false); +// if (Remote.Mute.UserObject is BoolCueActionPair && Remote.Mute.State == eButtonState.Pressed) +// (Remote.Mute.UserObject as BoolCueActionPair).Invoke(false); +// } + +// /// +// /// Handler. Run UO's stored in buttons +// /// +// void Remote_ButtonStateChange(GenericBase device, ButtonEventArgs args) +// { +// Debug.Console(2, this, "{0}={1}", args.Button.Name, args.Button.State); +// var uo = args.Button.UserObject as BoolCueActionPair; +// if (uo != null) +// uo.Invoke(args.NewButtonState == eButtonState.Pressed); +// } +// } +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Touchpanels/SmartGraphicsTouchpanelControllerBase.cs b/Essentials Core/PepperDashEssentialsBase/Touchpanels/SmartGraphicsTouchpanelControllerBase.cs new file mode 100644 index 00000000..42c365d1 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Touchpanels/SmartGraphicsTouchpanelControllerBase.cs @@ -0,0 +1,309 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using Crestron.SimplSharp; +//using Crestron.SimplSharpPro; +//using Crestron.SimplSharpPro.DeviceSupport; + + +//namespace PepperDash.Essentials.Core +//{ +// public abstract class SmartGraphicsTouchpanelControllerBase : CrestronGenericBaseDevice +// { +// public BasicTriListWithSmartObject TriList { get; protected set; } +// public bool UsesSplashPage { get; set; } +// public string SplashMessage { get; set; } +// public bool ShowDate +// { +// set { TriList.BooleanInput[UiCue.ShowDate.Number].BoolValue = value; } +// } +// public bool ShowTime +// { +// set { TriList.BooleanInput[UiCue.ShowTime.Number].BoolValue = value; } +// } + +// public abstract List FunctionList { get; } + + +// protected eMainModeType MainMode; +// protected IPresentationSource CurrentPresentationControlDevice; + +// /// +// /// Defines the signal offset for the presentation device. Defaults to 100 +// /// +// public uint PresentationControlDeviceJoinOffset { get { return 100; } } + +// public enum eMainModeType +// { +// Presentation, Splash, Tech +// } + +// protected string SgdFilePath; +// public EssentialsRoom CurrentRoom { get; protected set; } +// protected Dictionary LoadedPageControllers +// = new Dictionary(); + +// static object RoomChangeLock = new object(); + +// /// +// /// Constructor +// /// +// public SmartGraphicsTouchpanelControllerBase(string key, string name, BasicTriListWithSmartObject triList, +// string sgdFilePath) +// : base(key, name, triList) +// { +// TriList = triList; +// if (string.IsNullOrEmpty(key)) throw new ArgumentNullException("key"); +// if (string.IsNullOrEmpty(sgdFilePath)) throw new ArgumentNullException("sgdFilePath"); +// SgdFilePath = sgdFilePath; +// TriList.LoadSmartObjects(SgdFilePath); +// UsesSplashPage = true; +// SplashMessage = "Welcome"; +// TriList.SigChange += Tsw_AnySigChange; +// foreach (var kvp in TriList.SmartObjects) +// kvp.Value.SigChange += this.Tsw_AnySigChange; +// } + +// public override bool CustomActivate() +// { +// var baseSuccess = base.CustomActivate(); +// if (!baseSuccess) return false; + +// // Wiring up the buttons with UOs +// foreach (var uo in this.FunctionList) +// { +// if (uo.Cue.Number == 0) continue; +// if (uo is BoolCueActionPair) +// TriList.BooleanOutput[uo.Cue.Number].UserObject = uo; +// else if (uo is UShortCueActionPair) +// TriList.UShortOutput[uo.Cue.Number].UserObject = uo; +// else if (uo is StringCueActionPair) +// TriList.StringOutput[uo.Cue.Number].UserObject = uo; +// } + +// return true; +// } + +// //public void SetCurrentRoom(EssentialsRoom room) +// //{ +// // if (CurrentRoom != null) +// // HideRoomUI(); +// // CurrentRoom = room; +// // ShowRoomUI(); +// //} + +// /// +// /// +// /// +// /// +// public void SetCurrentRoom(EssentialsRoom room) +// { +// if (CurrentRoom == room) return; + +// IVolumeFunctions oldAudio = null; +// //Disconnect current room and audio device +// if (CurrentRoom != null) +// { +// HideRoomUI(); +// CurrentRoom.AudioDeviceWillChange -= CurrentRoom_AudioDeviceWillChange; +// CurrentRoom.PresentationSourceChange -= CurrentRoom_PresentationSourceChange; +// oldAudio = CurrentRoom.CurrentAudioDevice; +// } + +// CurrentRoom = room; +// IVolumeFunctions newAudio = null; +// if (CurrentRoom != null) +// { +// CurrentRoom.AudioDeviceWillChange += this.CurrentRoom_AudioDeviceWillChange; +// CurrentRoom.PresentationSourceChange += this.CurrentRoom_PresentationSourceChange; +// SetControlSource(CurrentRoom.CurrentPresentationSource); +// newAudio = CurrentRoom.CurrentAudioDevice; +// ShowRoomUI(); +// } + +// SwapAudioDeviceControls(oldAudio, newAudio); +// } + +// /// +// /// Detaches and attaches an IVolumeFunctions device to the appropriate TP TriList signals. +// /// This will also add IVolumeNumeric if the device implements it. +// /// Overriding classes should call this. Overriding classes are responsible for +// /// linking up to hard keys, etc. +// /// +// /// May be null +// /// May be null +// protected virtual void SwapAudioDeviceControls(IVolumeFunctions oldDev, IVolumeFunctions newDev) +// { +// // Disconnect +// if (oldDev != null) +// { +// TriList.BooleanOutput[CommonBoolCue.VolumeDown.Number].UserObject = null; +// TriList.BooleanOutput[CommonBoolCue.VolumeUp.Number].UserObject = null; +// TriList.BooleanOutput[CommonBoolCue.MuteToggle.Number].UserObject = null; +// TriList.BooleanInput[CommonBoolCue.ShowVolumeButtons.Number].BoolValue = false; +// TriList.BooleanInput[CommonBoolCue.ShowVolumeSlider.Number].BoolValue = false; +// if (oldDev is IVolumeTwoWay) +// { +// TriList.UShortOutput[CommonIntCue.MainVolumeLevel.Number].UserObject = null; +// (oldDev as IVolumeTwoWay).IsMutedFeedback +// .UnlinkInputSig(TriList.BooleanInput[CommonBoolCue.MuteOn.Number]); +// (oldDev as IVolumeTwoWay).VolumeLevelFeedback +// .UnlinkInputSig(TriList.UShortInput[CommonIntCue.MainVolumeLevel.Number]); +// } +// } +// if (newDev != null) +// { +// TriList.BooleanInput[CommonBoolCue.ShowVolumeSlider.Number].BoolValue = true; +// TriList.BooleanOutput[CommonBoolCue.VolumeDown.Number].UserObject = newDev.VolumeDownCueActionPair; +// TriList.BooleanOutput[CommonBoolCue.VolumeUp.Number].UserObject = newDev.VolumeUpCueActionPair; +// TriList.BooleanOutput[CommonBoolCue.MuteToggle.Number].UserObject = newDev.MuteToggleCueActionPair; +// if (newDev is IVolumeTwoWay) +// { +// TriList.BooleanInput[CommonBoolCue.ShowVolumeSlider.Number].BoolValue = true; +// var numDev = newDev as IVolumeTwoWay; +// TriList.UShortOutput[CommonIntCue.MainVolumeLevel.Number].UserObject = numDev.VolumeLevelCueActionPair; +// numDev.VolumeLevelFeedback +// .LinkInputSig(TriList.UShortInput[CommonIntCue.MainVolumeLevel.Number]); +// } +// } +// } + + +// /// +// /// Does nothing. Override to add functionality when calling SetCurrentRoom +// /// +// protected virtual void HideRoomUI() { } + +// /// +// /// Does nothing. Override to add functionality when calling SetCurrentRoom +// /// +// protected virtual void ShowRoomUI() { } + +// /// +// /// Sets up the current presentation device and updates statuses if the device is capable. +// /// +// protected void SetControlSource(IPresentationSource newSource) +// { +// if (CurrentPresentationControlDevice != null) +// { +// HideCurrentPresentationSourceUi(); + +// // Unhook presses and things +// if (CurrentPresentationControlDevice is IHasCueActionList) +// { +// foreach (var uo in (CurrentPresentationControlDevice as IHasCueActionList).CueActionList) +// { +// if (uo.Cue.Number == 0) continue; +// if (uo is BoolCueActionPair) +// { +// var bSig = TriList.BooleanOutput[uo.Cue.Number]; +// // Disconnection should also clear bool sigs in case they are pressed and +// // might be orphaned +// if (bSig.BoolValue) +// (bSig.UserObject as BoolCueActionPair).Invoke(false); +// bSig.UserObject = null; +// } +// else if (uo is UShortCueActionPair) +// TriList.UShortOutput[uo.Cue.Number].UserObject = null; +// else if (uo is StringCueActionPair) +// TriList.StringOutput[uo.Cue.Number].UserObject = null; +// } +// } +// // unhook outputs +// if (CurrentPresentationControlDevice is IHasFeedback) +// { +// foreach (var output in (CurrentPresentationControlDevice as IHasFeedback).Feedbacks) +// { +// if (output.Cue.Number == 0) continue; +// if (output is BoolFeedback) +// (output as BoolFeedback).UnlinkInputSig(TriList.BooleanInput[output.Cue.Number]); +// else if (output is IntFeedback) +// (output as IntFeedback).UnlinkInputSig(TriList.UShortInput[output.Cue.Number]); +// else if (output is StringFeedback) +// (output as StringFeedback).UnlinkInputSig(TriList.StringInput[output.Cue.Number]); +// } +// } +// } +// CurrentPresentationControlDevice = newSource; +// //connect presses and things +// if (newSource is IHasCueActionList) // This has functions, get 'em +// { +// foreach (var ao in (newSource as IHasCueActionList).CueActionList) +// { +// if (ao.Cue.Number == 0) continue; +// if (ao is BoolCueActionPair) +// TriList.BooleanOutput[ao.Cue.Number].UserObject = ao; +// else if (ao is UShortCueActionPair) +// TriList.UShortOutput[ao.Cue.Number].UserObject = ao; +// else if (ao is StringCueActionPair) +// TriList.StringOutput[ao.Cue.Number].UserObject = ao; +// } +// } +// // connect outputs (addInputSig should update sig) +// if (CurrentPresentationControlDevice is IHasFeedback) +// { +// foreach (var output in (CurrentPresentationControlDevice as IHasFeedback).Feedbacks) +// { +// if (output.Cue.Number == 0) continue; +// if (output is BoolFeedback) +// (output as BoolFeedback).LinkInputSig(TriList.BooleanInput[output.Cue.Number]); +// else if (output is IntFeedback) +// (output as IntFeedback).LinkInputSig(TriList.UShortInput[output.Cue.Number]); +// else if (output is StringFeedback) +// (output as StringFeedback).LinkInputSig(TriList.StringInput[output.Cue.Number]); +// } +// } +// ShowCurrentPresentationSourceUi(); +// } + +// /// +// /// Reveals the basic UI for the current device +// /// +// protected virtual void ShowCurrentPresentationSourceUi() +// { +// } + +// /// +// /// Hides the UI for the current device and calls for a feedback signal cleanup +// /// +// protected virtual void HideCurrentPresentationSourceUi() +// { +// } + + +// /// +// /// +// /// +// void CurrentRoom_PresentationSourceChange(object sender, EssentialsRoomSourceChangeEventArgs args) +// { +// SetControlSource(args.NewSource); +// } + + +// /// +// /// +// /// +// void CurrentRoom_AudioDeviceWillChange(object sender, EssentialsRoomAudioDeviceChangeEventArgs e) +// { +// SwapAudioDeviceControls(e.OldDevice, e.NewDevice); +// } + + + +// /// +// /// Panel event handler +// /// +// void Tsw_AnySigChange(object currentDevice, SigEventArgs args) +// { +// // plugged in commands +// object uo = args.Sig.UserObject; + +// if (uo is Action) +// (uo as Action)(args.Sig.BoolValue); +// else if (uo is Action) +// (uo as Action)(args.Sig.UShortValue); +// else if (uo is Action) +// (uo as Action)(args.Sig.StringValue); +// } +// } +//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs b/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs new file mode 100644 index 00000000..8ebec477 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +namespace PepperDash.Essentials.Core +{ + /// + /// Extensions used for more-clear attachment of Actions to user objects on sigs + /// + public static class SigAndTriListExtensions + { + /// + /// Attaches Action to Sig's user object and returns the same Sig. + /// + /// The BoolOutputSig to attach the Action to + /// An action to run when sig is pressed and when released + /// The Sig, sig + public static BoolOutputSig SetBoolSigAction(this BoolOutputSig sig, Action a) + { + sig.UserObject = a; + return sig; + } + + /// + /// Attaches Action to Sig's user object and returns the same Sig. + /// + /// + /// + /// + /// + public static BoolOutputSig SetBoolSigAction(this BasicTriList tl, uint sigNum, Action a) + { + return tl.BooleanOutput[sigNum].SetBoolSigAction(a); + } + + public static BoolOutputSig SetSigTrueAction(this BasicTriList tl, uint sigNum, Action a) + { + return tl.BooleanOutput[sigNum].SetBoolSigAction(b => { if(b) a(); }); + } + + /// + /// Attaches a void Action to a TriList's output sig's UserObject, to be run on release + /// + /// The sig + public static BoolOutputSig SetSigFalseAction(this BasicTriList tl, uint sigNum, Action a) + { + return tl.BooleanOutput[sigNum].SetBoolSigAction(b => { if (!b) a(); }); + } + + /// + /// Attaches a void Action to an output sig's UserObject, to be run on release + /// + /// The Sig + public static BoolOutputSig SetSigFalseAction(this BoolOutputSig sig, Action a) + { + return sig.SetBoolSigAction(b => { if (!b) a(); }); + } + + + /// + /// + /// + /// + /// + /// The Sig + public static UShortOutputSig SetUShortSigAction(this UShortOutputSig sig, Action a) + { + sig.UserObject = a; + return sig; + } + + public static UShortOutputSig SetUShortSigAction(this BasicTriList tl, uint sigNum, Action a) + { + return tl.UShortOutput[sigNum].SetUShortSigAction(a); + } + + public static StringOutputSig SetStringSigAction(this StringOutputSig sig, Action a) + { + sig.UserObject = a; + return sig; + } + + public static StringOutputSig SetStringSigAction(this BasicTriList tl, uint sigNum, Action a) + { + return tl.SetStringSigAction(sigNum, a); + } + + public static Sig ClearSigAction(this Sig sig) + { + sig.UserObject = null; + return sig; + } + + public static BoolOutputSig ClearBoolSigAction(this BasicTriList tl, uint sigNum) + { + return ClearSigAction(tl.BooleanOutput[sigNum]) as BoolOutputSig; + } + + public static UShortOutputSig ClearUShortSigAction(this BasicTriList tl, uint sigNum) + { + return ClearSigAction(tl.UShortOutput[sigNum]) as UShortOutputSig; + } + + public static StringOutputSig ClearStringSigAction(this BasicTriList tl, uint sigNum) + { + return ClearSigAction(tl.StringOutput[sigNum]) as StringOutputSig; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/TriListBridges/HandlerBridge.cs b/Essentials Core/PepperDashEssentialsBase/TriListBridges/HandlerBridge.cs new file mode 100644 index 00000000..e1a69707 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/TriListBridges/HandlerBridge.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + + +namespace PepperDash.Essentials.Core +{ + public abstract class HandlerBridge + { + public bool IsAttached { get; protected set; } + + /// + /// Attaches the handler to the panel's user objects + /// + public abstract void AttachToTriListOutputs(bool sendUpdate); + + /// + /// Removes the handler from the panel's user objects + /// + public abstract void DetachFromTriListOutputs(); + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/UI PageManagers/BlurayPageManager.cs b/Essentials Core/PepperDashEssentialsBase/UI PageManagers/BlurayPageManager.cs new file mode 100644 index 00000000..c272a65a --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/UI PageManagers/BlurayPageManager.cs @@ -0,0 +1,42 @@ +using Crestron.SimplSharpPro.DeviceSupport; +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.Core.PageManagers +{ + public class DiscPlayerMediumPageManager : MediumLeftSwitchablePageManager + { + IDiscPlayerControls Player; + + public DiscPlayerMediumPageManager(IDiscPlayerControls player, BasicTriListWithSmartObject trilist) + : base(player.DisplayUiType) + { + Player = player; + TriList = trilist; + } + + public override void Show() + { + uint offset = GetOffsetJoin(); + BackingPageJoin = offset + 1; + AllLeftSubpages = new uint[] { 7, 8 }; + + if (LeftSubpageJoin == 0) + LeftSubpageJoin = offset + 8; // default to transport + TriList.BooleanInput[BackingPageJoin].BoolValue = true; + TriList.BooleanInput[LeftSubpageJoin].BoolValue = true; + + // Attach buttons to interlock + foreach(var p in AllLeftSubpages) + { + var p2 = p; // scope + TriList.SetSigFalseAction(10000 + p2, () => InterlockLeftSubpage(p2)); + } + } + + public override void Hide() + { + TriList.BooleanInput[BackingPageJoin].BoolValue = false; + TriList.BooleanInput[LeftSubpageJoin].BoolValue = false; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/UI PageManagers/PageManager.cs b/Essentials Core/PepperDashEssentialsBase/UI PageManagers/PageManager.cs new file mode 100644 index 00000000..1f261f87 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/UI PageManagers/PageManager.cs @@ -0,0 +1,96 @@ +using System.Collections.Generic; +using Crestron.SimplSharpPro.DeviceSupport; +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.Core.PageManagers +{ + /// + /// The PageManager classes are used to bridge a device to subpage + /// visibility. + /// + public abstract class PageManager + { + protected List ActiveJoins = new List(); + + public abstract void Show(); + + public abstract void Hide(); + + /// + /// For device types 1-49, returns the offset join for subpage management 10100 - 14900 + /// + /// 1 through 49, as defined in some constants somewhere! + /// + public uint GetOffsetJoin(uint deviceType) + { + return 10000 + (deviceType * 100); + } + } + + /// + /// A simple class that hides and shows the default subpage for a given source type + /// + public class DefaultPageManager : PageManager + { + BasicTriList TriList; + uint BackingPageJoin; + + public DefaultPageManager(IUiDisplayInfo device, BasicTriList trilist) + { + TriList = trilist; + BackingPageJoin = GetOffsetJoin(device.DisplayUiType) + 1; + } + + public DefaultPageManager(uint join, BasicTriList trilist) + { + TriList = trilist; + BackingPageJoin = join; + } + + public override void Show() + { + TriList.BooleanInput[BackingPageJoin].BoolValue = true; + } + + public override void Hide() + { + TriList.BooleanInput[BackingPageJoin].BoolValue = false; + } + } + + /// + /// A page manager for a page with backing panel and a switchable side panel + /// + public abstract class MediumLeftSwitchablePageManager : PageManager + { + protected BasicTriListWithSmartObject TriList; + protected uint LeftSubpageJoin; + protected uint BackingPageJoin; + protected uint[] AllLeftSubpages; + protected uint DisplayUiType; + + protected MediumLeftSwitchablePageManager(uint displayUiType) + { + DisplayUiType = displayUiType; + } + + protected void InterlockLeftSubpage(uint join) + { + join = join + GetOffsetJoin(); + ClearLeftInterlock(); + TriList.BooleanInput[join].BoolValue = true; + LeftSubpageJoin = join; + } + + protected void ClearLeftInterlock() + { + foreach (var p in AllLeftSubpages) + TriList.BooleanInput[GetOffsetJoin() + p].BoolValue = false; + } + + protected uint GetOffsetJoin() + { + return GetOffsetJoin(DisplayUiType); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/UI PageManagers/SetTopBoxThreePanelPageManager.cs b/Essentials Core/PepperDashEssentialsBase/UI PageManagers/SetTopBoxThreePanelPageManager.cs new file mode 100644 index 00000000..f8838aed --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/UI PageManagers/SetTopBoxThreePanelPageManager.cs @@ -0,0 +1,192 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Crestron.SimplSharpPro.DeviceSupport; +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Presets; + +namespace PepperDash.Essentials.Core.PageManagers +{ + public class ThreePanelPlusOnePageManager : PageManager + { + protected BasicTriListWithSmartObject TriList; + + public uint Position5TabsId { get; set; } + + /// + /// Show the tabs on the third panel + /// + protected bool ShowPosition5Tabs; + + /// + /// Joins that are always visible when this manager is visible + /// + protected uint[] FixedVisibilityJoins; + + /// + /// + /// + protected uint CurrentVisiblePosition5Item; + + /// + /// + /// + /// + public ThreePanelPlusOnePageManager(BasicTriListWithSmartObject trilist) + { + TriList = trilist; + CurrentVisiblePosition5Item = 1; + } + + /// + /// The joins for the switchable panel in position 5 + /// + Dictionary Position5SubpageJoins = new Dictionary + { + { 1, 10053 }, + { 2, 10054 } + }; + + /// + /// + /// + public override void Show() + { + // Project the joins into corresponding sigs. + var fixedSigs = FixedVisibilityJoins.Select(u => TriList.BooleanInput[u]).ToList(); + foreach (var sig in fixedSigs) + sig.BoolValue = true; + + if (ShowPosition5Tabs) + { + // Show selected tab + TriList.BooleanInput[Position5SubpageJoins[CurrentVisiblePosition5Item]].BoolValue = true; + // hook up tab object + var tabSo = TriList.SmartObjects[Position5TabsId]; + tabSo.BooleanOutput["Tab Button 1 Press"].UserObject = new Action(b => { if (!b) ShowTab(1); }); + tabSo.BooleanOutput["Tab Button 2 Press"].UserObject = new Action(b => { if (!b) ShowTab(2); }); + tabSo.SigChange -= tabSo_SigChange; + tabSo.SigChange += tabSo_SigChange; + } + } + + void tabSo_SigChange(Crestron.SimplSharpPro.GenericBase currentDevice, Crestron.SimplSharpPro.SmartObjectEventArgs args) + { + var uo = args.Sig.UserObject; + if(uo is Action) + (uo as Action)(args.Sig.BoolValue); + } + + public override void Hide() + { + var fixedSigs = FixedVisibilityJoins.Select(u => TriList.BooleanInput[u]).ToList(); + foreach (var sig in fixedSigs) + sig.BoolValue = false; + if (ShowPosition5Tabs) + { + TriList.BooleanInput[Position5SubpageJoins[CurrentVisiblePosition5Item]].BoolValue = false; + + //var tabSo = TriList.SmartObjects[Position5TabsId]; + //tabSo.BooleanOutput["Tab Button 1 Press"].UserObject = null; + //tabSo.BooleanOutput["Tab Button 2 Press"].UserObject = null; + } + } + + void ShowTab(uint number) + { + // Ignore re-presses + if (CurrentVisiblePosition5Item == number) return; + // Swap subpage + var bi = TriList.BooleanInput; + if (CurrentVisiblePosition5Item > 0) + bi[Position5SubpageJoins[CurrentVisiblePosition5Item]].BoolValue = false; + CurrentVisiblePosition5Item = number; + bi[Position5SubpageJoins[CurrentVisiblePosition5Item]].BoolValue = true; + } + } + + + + public class SetTopBoxThreePanelPageManager : ThreePanelPlusOnePageManager + { + ISetTopBoxControls SetTopBox; + DevicePresetsView PresetsView; + + public uint DpadSmartObjectId { get; set; } + public uint NumberPadSmartObjectId { get; set; } + public uint PresetsSmartObjectId { get; set; } + + /// + /// A page manager for set top box that shows some combination of four different panels, + /// in three slots on the page. + /// + /// + /// + public SetTopBoxThreePanelPageManager(ISetTopBoxControls stb, BasicTriListWithSmartObject trilist) + : base(trilist) + { + SetTopBox = stb; + TriList = trilist; + + DpadSmartObjectId = 10011; + NumberPadSmartObjectId = 10014; + PresetsSmartObjectId = 10012; + Position5TabsId = 10081; + + bool dpad = stb.HasDpad; + bool preset = stb.HasPresets; + bool dvr = stb.HasDvr; + bool numbers = stb.HasNumeric; + + if (dpad && !preset && !dvr && !numbers) FixedVisibilityJoins = new uint[] { 10031, 10091 }; + else if (!dpad && preset && !dvr && !numbers) FixedVisibilityJoins = new uint[] { 10032, 10091 }; + else if (!dpad && !preset && dvr && !numbers) FixedVisibilityJoins = new uint[] { 10033, 10091 }; + else if (!dpad && !preset && !dvr && numbers) FixedVisibilityJoins = new uint[] { 10034, 10091 }; + + else if (dpad && preset && !dvr && !numbers) FixedVisibilityJoins = new uint[] { 10042, 10021, 10092 }; + else if (dpad && !preset && dvr && !numbers) FixedVisibilityJoins = new uint[] { 10043, 10021, 10092 }; + else if (dpad && !preset && !dvr && numbers) FixedVisibilityJoins = new uint[] { 10044, 10021, 10092 }; + else if (!dpad && preset && dvr && !numbers) FixedVisibilityJoins = new uint[] { 10043, 10022, 10092 }; + else if (!dpad && preset && !dvr && numbers) FixedVisibilityJoins = new uint[] { 10044, 10022, 10092 }; + else if (!dpad && !preset && dvr && numbers) FixedVisibilityJoins = new uint[] { 10044, 10023, 10092 }; + + else if (dpad && preset && dvr && !numbers) FixedVisibilityJoins = new uint[] { 10053, 10032, 10011, 10093 }; + else if (dpad && preset && !dvr && numbers) FixedVisibilityJoins = new uint[] { 10054, 10032, 10011, 10093 }; + else if (dpad && !preset && dvr && numbers) FixedVisibilityJoins = new uint[] { 10054, 10033, 10011, 10093 }; + else if (!dpad && preset && dvr && numbers) FixedVisibilityJoins = new uint[] { 10054, 10033, 10012, 10093 }; + + else if (dpad && preset && dvr && numbers) + { + FixedVisibilityJoins = new uint[] { 10081, 10032, 10011, 10093 }; // special case + ShowPosition5Tabs = true; + } + // Bad config case + else + { + Debug.Console(1, stb, "WARNING: Not configured to show any UI elements"); + FixedVisibilityJoins = new uint[] { 10091 }; + } + + // Build presets + if (stb.HasPresets && stb.PresetsModel != null) + { + PresetsView = new DevicePresetsView(trilist, stb.PresetsModel); + } + } + + public override void Show() + { + if(PresetsView != null) + PresetsView.Attach(); + base.Show(); + } + + public override void Hide() + { + if (PresetsView != null) + PresetsView.Detach(); + base.Hide(); + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/UI PageManagers/SetTopBoxTwoPanelPageManager.cs b/Essentials Core/PepperDashEssentialsBase/UI PageManagers/SetTopBoxTwoPanelPageManager.cs new file mode 100644 index 00000000..cb1e1840 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/UI PageManagers/SetTopBoxTwoPanelPageManager.cs @@ -0,0 +1,60 @@ +using Crestron.SimplSharpPro.DeviceSupport; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Presets; + +namespace PepperDash.Essentials.Core.PageManagers +{ + /// + /// A fixed-layout page manager that expects a DPad on the right, fixed portion of the page, and a two/three + /// tab switchable area on the left for presets, numeric and transport controls + /// + public class SetTopBoxMediumPageManager : MediumLeftSwitchablePageManager + { + ISetTopBoxControls SetTopBox; + DevicePresetsView PresetsView; + + public SetTopBoxMediumPageManager(ISetTopBoxControls stb, BasicTriListWithSmartObject trilist) + : base(stb.DisplayUiType) + { + SetTopBox = stb; + TriList = trilist; + if(stb.PresetsModel != null) + PresetsView = new DevicePresetsView(trilist, stb.PresetsModel); + } + + public override void Show() + { + if(PresetsView != null) + PresetsView.Attach(); + uint offset = GetOffsetJoin(); + if (SetTopBox.HasDvr) // Show backing page with DVR controls + { + BackingPageJoin = offset + 1; + AllLeftSubpages = new uint[] { 6, 7, 8 }; + } + else // Show the backing page with no DVR controls + { + BackingPageJoin = offset + 2; + AllLeftSubpages = new uint[] { 6, 7 }; + } + + if (LeftSubpageJoin == 0) + LeftSubpageJoin = offset + 6; // default to presets + TriList.BooleanInput[BackingPageJoin].BoolValue = true; + TriList.BooleanInput[LeftSubpageJoin].BoolValue = true; + + // Attach buttons to interlock + foreach(var p in AllLeftSubpages) + { + var p2 = p; // scope + TriList.SetSigFalseAction(10000 + p2, () => InterlockLeftSubpage(p2)); + } + } + + public override void Hide() + { + TriList.BooleanInput[BackingPageJoin].BoolValue = false; + TriList.BooleanInput[LeftSubpageJoin].BoolValue = false; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/UI PageManagers/SinglePageManager.cs b/Essentials Core/PepperDashEssentialsBase/UI PageManagers/SinglePageManager.cs new file mode 100644 index 00000000..dd7d605c --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/UI PageManagers/SinglePageManager.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using Crestron.SimplSharpPro.DeviceSupport; +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.Core.PageManagers +{ + /// + /// A simple class that hides and shows the default subpage for a given source type + /// + public class SinglePageManager : PageManager + { + BasicTriList TriList; + uint BackingPageJoin; + + public SinglePageManager(uint pageJoin, BasicTriList trilist) + { + TriList = trilist; + BackingPageJoin = pageJoin; + } + + public override void Show() + { + TriList.BooleanInput[BackingPageJoin].BoolValue = true; + } + + public override void Hide() + { + TriList.BooleanInput[BackingPageJoin].BoolValue = false; + } + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/VideoStatus/VideoStatusCues.cs b/Essentials Core/PepperDashEssentialsBase/VideoStatus/VideoStatusCues.cs new file mode 100644 index 00000000..5db78fb5 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/VideoStatus/VideoStatusCues.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; + +namespace PepperDash.Essentials.Core +{ + public static class VideoStatusCues + { + public static readonly Cue HasVideoStatusFeedback = Cue.BoolCue("HasVideoStatusFeedback", 1); + public static readonly Cue VideoSyncFeedback = Cue.BoolCue("VideoSyncFeedback", 2); + public static readonly Cue HdcpActiveFeedback = Cue.BoolCue("HdcpActiveFeedback", 3); + public static readonly Cue HdcpStateFeedback = Cue.StringCue("HdcpStateFeedback", 3); + public static readonly Cue VideoResolutionFeedback = Cue.StringCue("VideoResolutionFeedback", 2); + public static readonly Cue VideoStatusDeviceKey = Cue.StringCue("VideoStatusDeviceKey", 0); + public static readonly Cue VideoStatusDeviceName = Cue.StringCue("VideoStatusDeviceName", 4); + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/VideoStatus/VideoStatusOutputs.cs b/Essentials Core/PepperDashEssentialsBase/VideoStatus/VideoStatusOutputs.cs new file mode 100644 index 00000000..1890a606 --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/VideoStatus/VideoStatusOutputs.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DM; + +namespace PepperDash.Essentials.Core +{ + /// + /// Use this class to pass in values to RoutingInputPorts. Unused properties will have default + /// funcs assigned to them. + /// + public class VideoStatusFuncsWrapper + { + public Func HasVideoStatusFunc { get; set; } + public Func HdcpActiveFeedbackFunc { get; set; } + public Func HdcpStateFeedbackFunc { get; set; } + public Func VideoResolutionFeedbackFunc { get; set; } + public Func VideoSyncFeedbackFunc { get; set; } + + public VideoStatusFuncsWrapper() + { + HasVideoStatusFunc = () => true; + HdcpActiveFeedbackFunc = () => false; + HdcpStateFeedbackFunc = () => ""; + VideoResolutionFeedbackFunc = () => "n/a"; + VideoSyncFeedbackFunc = () => false; + } + } + + /// + /// Wraps up the common video statuses exposed on a video input port + /// + public class VideoStatusOutputs + { + public BoolFeedback HasVideoStatusFeedback { get; private set; } + public BoolFeedback HdcpActiveFeedback { get; private set; } + public StringFeedback HdcpStateFeedback { get; private set; } + public StringFeedback VideoResolutionFeedback { get; private set; } + public BoolFeedback VideoSyncFeedback { get; private set; } + + /// + /// Gets the default, empty status group. + /// + public static VideoStatusOutputs NoStatus { get { return _Default; } } + static VideoStatusOutputs _Default = new VideoStatusOutputs(new VideoStatusFuncsWrapper + { + HasVideoStatusFunc = () => false + }); + + public VideoStatusOutputs(VideoStatusFuncsWrapper funcs) + { + HasVideoStatusFeedback = new BoolFeedback(VideoStatusCues.HasVideoStatusFeedback, funcs.HasVideoStatusFunc); + HdcpActiveFeedback = new BoolFeedback(VideoStatusCues.HdcpActiveFeedback, funcs.HdcpActiveFeedbackFunc); + HdcpStateFeedback = new StringFeedback(VideoStatusCues.HdcpStateFeedback, funcs.HdcpStateFeedbackFunc); + VideoResolutionFeedback = new StringFeedback(VideoStatusCues.VideoResolutionFeedback, + funcs.VideoResolutionFeedbackFunc); + VideoSyncFeedback = new BoolFeedback(VideoStatusCues.VideoSyncFeedback, funcs.VideoSyncFeedbackFunc); + } + + public void FireAll() + { + HasVideoStatusFeedback.FireUpdate(); + HdcpActiveFeedback.FireUpdate(); + HdcpActiveFeedback.FireUpdate(); + VideoResolutionFeedback.FireUpdate(); + VideoSyncFeedback.FireUpdate(); + } + + public List ToList() + { + return new List + { + HasVideoStatusFeedback, + HdcpActiveFeedback, + HdcpStateFeedback, + VideoResolutionFeedback, + VideoSyncFeedback + }; + } + } + + ///// + ///// Wraps up the common video statuses exposed on a video input port + ///// + //public class BasicVideoStatus : IBasicVideoStatus + //{ + // public event VideoStatusChangeHandler VideoStatusChange; + + // public bool HasVideoStatus { get; private set; } + + // public bool HdcpActive + // { + // get { return HdcpActiveFunc != null ? HdcpActiveFunc() : false; } + // } + + // public string HdcpState + // { + // get { return HdcpStateFunc != null? HdcpStateFunc() : ""; } + // } + + // public string VideoResolution + // { + // get { return VideoResolutionFunc != null ? VideoResolutionFunc() : ""; } + // } + + // public bool VideoSync + // { + // get { return VideoSyncFunc != null ? VideoSyncFunc() : false; } + // } + + // Func HdcpActiveFunc; + // Func HdcpStateFunc; + // Func VideoResolutionFunc; + // Func VideoSyncFunc; + + // public BasicVideoStatus(bool hasVideoStatus, Func hdcpActiveFunc, + // Func hdcpStateFunc, Func videoResolutionFunc, Func videoSyncFunc) + // { + // HasVideoStatus = hasVideoStatus; + // HdcpActiveFunc = hdcpActiveFunc; + // HdcpStateFunc = hdcpStateFunc; + // VideoResolutionFunc = videoResolutionFunc; + // VideoSyncFunc = videoSyncFunc; + // } + //} + + //public enum eVideoStatusChangeType + //{ + // HdcpActive, + // HdcpState, + // VideoResolution, + // VideoSync + //} + + //public interface IBasicVideoStatus + //{ + // event VideoStatusChangeHandler VideoStatusChange; + // bool HdcpActive { get; } + // string HdcpState { get; } + // string VideoResolution { get; } + // bool VideoSync { get; } + //} + + //public delegate void VideoStatusChangeHandler(IBasicVideoStatus device, eVideoStatusChangeType type); +} \ No newline at end of file diff --git a/PepperDashEssentials/PepperDashEssentials/app.config b/Essentials Core/PepperDashEssentialsBase/app.config similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/app.config rename to Essentials Core/PepperDashEssentialsBase/app.config diff --git a/Essentials DM/Essentials_DM.sln b/Essentials DM/Essentials_DM.sln new file mode 100644 index 00000000..fa874f80 --- /dev/null +++ b/Essentials DM/Essentials_DM.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Essentials_DM", "Essentials_DM\Essentials_DM.csproj", "{9199CE8A-0C9F-4952-8672-3EED798B284F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9199CE8A-0C9F-4952-8672-3EED798B284F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9199CE8A-0C9F-4952-8672-3EED798B284F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9199CE8A-0C9F-4952-8672-3EED798B284F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9199CE8A-0C9F-4952-8672-3EED798B284F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Essentials DM/Essentials_DM/Cards REMOVE/DmInputCardBase.cs b/Essentials DM/Essentials_DM/Cards REMOVE/DmInputCardBase.cs new file mode 100644 index 00000000..a0c9536c --- /dev/null +++ b/Essentials DM/Essentials_DM/Cards REMOVE/DmInputCardBase.cs @@ -0,0 +1,62 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using Crestron.SimplSharp; +//using Crestron.SimplSharpPro; +//using Crestron.SimplSharpPro.DeviceSupport; +//using Crestron.SimplSharpPro.DM; +//using Crestron.SimplSharpPro.DM.Cards; + +//using PepperDash.Essentials.Core; +//using PepperDash.Essentials.DM; + +//namespace PepperDash.Essentials.DM.Cards +//{ +// public class DmInputCardControllerBase : IRoutingInputsOutputs +// { +// public string Key { get; private set; } +// public uint Slot { get; private set; } +// public abstract eDmInputCardType Type { get; } + +// //public RoutingOutputPort BackplaneVideoOut { get; private set; } +// //public RoutingOutputPort BackplaneAudioOut { get; private set; } + +// public RoutingPortCollection InputPorts { get; private set; } + +// public RoutingPortCollection OutputPorts { get; private set; } + +// public DmInputCardControllerBase(string key, uint slot) +// { +// Key = key; +// Slot = slot; +// //BackplaneAudioOut = new RoutingOutputPort("backplaneAudioOut", eRoutingSignalType.Audio, +// // eRoutingPortConnectionType.BackplaneOnly, slot, this); +// //BackplaneVideoOut = new RoutingOutputPort("backplaneVideoOut", eRoutingSignalType.Video, +// // eRoutingPortConnectionType.BackplaneOnly, slot, this); +// //InputPorts = new RoutingPortCollection(); +// //OutputPorts = new RoutingPortCollection { BackplaneAudioOut, BackplaneVideoOut }; +// } + +// ///// +// ///// Gets a physical port by name. Returns null if doesn't exist +// ///// +// //public RoutingInputPort GetInputPort(string key) +// //{ +// // return InputPorts.FirstOrDefault(p => p.Key.Equals(key, StringComparison.OrdinalIgnoreCase)); +// //} + +// ///// +// ///// Gets a physical port by name. Returns null if doesn't exist +// ///// +// //public RoutingOutputPort GetOutputPort(string key) +// //{ +// // return OutputPorts.FirstOrDefault(p => p.Key.Equals(key, StringComparison.OrdinalIgnoreCase)); +// //} +// } + +// public enum eDmInputCardType +// { +// None, DmcHd, DmcHdDsp, Dmc4kHd, Dmc4kHdDsp, Dmc4kC, Dmc4kCDsp +// } +//} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Cards REMOVE/DmOutputCardBase.cs b/Essentials DM/Essentials_DM/Cards REMOVE/DmOutputCardBase.cs new file mode 100644 index 00000000..c554539a --- /dev/null +++ b/Essentials DM/Essentials_DM/Cards REMOVE/DmOutputCardBase.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; +using Crestron.SimplSharpPro.DM; +using Crestron.SimplSharpPro.DM.Cards; + +using PepperDash.Essentials.Core; +using PepperDash.Essentials.DM; + +namespace PepperDash.Essentials.DM.Cards +{ + /// + /// + /// + public abstract class DmSingleOutputCardControllerBase// : IRoutingInputsOutputs + { + public string Key { get; private set; } + public uint Slot { get; private set; } + public abstract eDmOutputCardType Type { get; } + + //public RoutingInputPort BackplaneAudioIn1 { get; private set; } + //public RoutingInputPort BackplaneVideoIn1 { get; private set; } + //public RoutingInputPort BackplaneAudioIn2 { get; private set; } + //public RoutingInputPort BackplaneVideoIn2 { get; private set; } + + //public RoutingPortCollection InputPorts { get; private set; } + //public RoutingPortCollection OutputPorts { get; private set; } + + public DmSingleOutputCardControllerBase(string key, uint cardSlot) + { + Key = key; + Slot = cardSlot; + //BackplaneAudioIn1 = new RoutingInputPort("backplaneAudioIn1", eRoutingSignalType.Audio, + // eRoutingPortConnectionType.BackplaneOnly, cardSlot, this); + //BackplaneVideoIn1 = new RoutingInputPort("backplaneVideoIn1", eRoutingSignalType.Video, + // eRoutingPortConnectionType.BackplaneOnly, cardSlot, this); + //BackplaneAudioIn2 = new RoutingInputPort("backplaneAudioIn2", eRoutingSignalType.Audio, + // eRoutingPortConnectionType.BackplaneOnly, cardSlot + 1, this); + //BackplaneVideoIn2 = new RoutingInputPort("backplaneVideoIn2", eRoutingSignalType.Video, + // eRoutingPortConnectionType.BackplaneOnly, cardSlot + 1, this); + //InputPorts = new RoutingPortCollection + //{ + // BackplaneAudioIn1, + // BackplaneAudioIn2, + // BackplaneVideoIn1, + // BackplaneVideoIn2 + //}; + //OutputPorts = new RoutingPortCollection(); + } + + ///// + ///// Gets a physical port by name. Returns null if doesn't exist + ///// + //public RoutingInputPort GetInputPort(string key) + //{ + // return InputPorts.FirstOrDefault(p => p.Key.Equals(key, StringComparison.OrdinalIgnoreCase)); + //} + + ///// + ///// Gets a physical port by name. Returns null if doesn't exist + ///// + //public RoutingOutputPort GetOutputPort(string key) + //{ + // return OutputPorts.FirstOrDefault(p => p.Key.Equals(key, StringComparison.OrdinalIgnoreCase)); + //} + } + + /// + /// + /// + public enum eDmOutputCardType + { + None, Dmc4kCoHd, Dmc4kHdo, DmcCoHd, DmcSoHd + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Cards REMOVE/Dmc4kCoHdSingleOutputCard.cs b/Essentials DM/Essentials_DM/Cards REMOVE/Dmc4kCoHdSingleOutputCard.cs new file mode 100644 index 00000000..3e3fd309 --- /dev/null +++ b/Essentials DM/Essentials_DM/Cards REMOVE/Dmc4kCoHdSingleOutputCard.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; +using Crestron.SimplSharpPro.DM; +using Crestron.SimplSharpPro.DM.Cards; + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.DM; + +namespace PepperDash.Essentials.DM.Cards +{ + public class Dmc4kCoHdSingleOutputCard : DmSingleOutputCardControllerBase + { + public override eDmOutputCardType Type + { + get { return eDmOutputCardType.Dmc4kCoHd; } + } + public Dmc4kCoHdSingle Card { get; private set; } + + //public RoutingOutputPort DmOut1 { get; private set; } + //public RoutingOutputPort DmOut2 { get; private set; } + //public RoutingOutputPort HdmiOut1 { get; private set; } + + public Dmc4kCoHdSingleOutputCard(string key, Dmc4kCoHdSingle card, uint slot) + : base(key, slot) + { + Card = card; + //DmOut1 = new RoutingOutputPort(DmPortName.DmOut1, eRoutingSignalType.AudioVideo, + // eRoutingPortConnectionType.DmCat, null, this); + //DmOut2 = new RoutingOutputPort(DmPortName.DmOut2, eRoutingSignalType.AudioVideo, + // eRoutingPortConnectionType.DmCat, null, this); + //HdmiOut1 = new RoutingOutputPort(DmPortName.HdmiOut1, eRoutingSignalType.AudioVideo, + // eRoutingPortConnectionType.Hdmi, null, this); + + //OutputPorts.AddRange(new[] { DmOut1, DmOut2, HdmiOut1 }); + } + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Cards REMOVE/Dmc4kHdoSingleOutputCard.cs b/Essentials DM/Essentials_DM/Cards REMOVE/Dmc4kHdoSingleOutputCard.cs new file mode 100644 index 00000000..b15c4006 --- /dev/null +++ b/Essentials DM/Essentials_DM/Cards REMOVE/Dmc4kHdoSingleOutputCard.cs @@ -0,0 +1,46 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using Crestron.SimplSharp; +//using Crestron.SimplSharpPro; +//using Crestron.SimplSharpPro.DeviceSupport; +//using Crestron.SimplSharpPro.DM; +//using Crestron.SimplSharpPro.DM.Cards; + +//using PepperDash.Core; +//using PepperDash.Essentials.Core; +//using PepperDash.Essentials.DM; + +//namespace PepperDash.Essentials.DM.Cards +//{ +// public class Dmc4kHdoSingleOutputCard : DmSingleOutputCardControllerBase +// { +// public override eDmOutputCardType Type +// { +// get { return eDmOutputCardType.Dmc4kHdo; } +// } +// public Dmc4kHdoSingle Card { get; private set; } + +// //public RoutingOutputPort AudioOut1 { get; private set; } +// //public RoutingOutputPort AudioOut2 { get; private set; } +// //public RoutingOutputPort HdmiOut1 { get; private set; } +// //public RoutingOutputPort HdmiOut2 { get; private set; } + +// public Dmc4kHdoSingleOutputCard(string key, Dmc4kHdoSingle card, uint slot) +// : base(key, slot) +// { +// Card = card; +// //AudioOut1 = new RoutingOutputPort(DmPortName.BalancedAudioOut1, eRoutingSignalType.Audio, +// // eRoutingPortConnectionType.LineAudio, null, this); +// //AudioOut2 = new RoutingOutputPort(DmPortName.BalancedAudioOut2, eRoutingSignalType.Audio, +// // eRoutingPortConnectionType.LineAudio, null, this); +// //HdmiOut1 = new RoutingOutputPort(DmPortName.HdmiOut1, eRoutingSignalType.AudioVideo, +// // eRoutingPortConnectionType.Hdmi, null, this); +// //HdmiOut2 = new RoutingOutputPort(DmPortName.HdmiOut2, eRoutingSignalType.AudioVideo, +// // eRoutingPortConnectionType.Hdmi, null, this); + +// //OutputPorts.AddRange(new[] { AudioOut1, AudioOut2, HdmiOut1, HdmiOut2 }); +// } +// } +//} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Cards REMOVE/DmcC4kInputCard.cs b/Essentials DM/Essentials_DM/Cards REMOVE/DmcC4kInputCard.cs new file mode 100644 index 00000000..40f6044c --- /dev/null +++ b/Essentials DM/Essentials_DM/Cards REMOVE/DmcC4kInputCard.cs @@ -0,0 +1,76 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using Crestron.SimplSharp; +//using Crestron.SimplSharpPro; +//using Crestron.SimplSharpPro.DeviceSupport; +//using Crestron.SimplSharpPro.DM; +//using Crestron.SimplSharpPro.DM.Cards; + +//using PepperDash.Essentials.Core; +//using PepperDash.Essentials.DM; + +//namespace PepperDash.Essentials.DM.Cards +//{ +// public class Dmc4kCController : DmInputCardControllerBase +// { +// public override eDmInputCardType Type +// { +// get { return eDmInputCardType.Dmc4kC; } +// } +// public Dmc4kC Card { get; private set; } + +// //public RoutingInputPortWithVideoStatuses DmIn { get; private set; } +// //public RoutingOutputPort HdmiLoopOut { get; private set; } +// //public RoutingOutputPort AudioLoopOut { get; private set; } + +// public Dmc4kCController(string key, Dmc4kC card, uint slot) +// : base(key, slot) +// { +// Card = card; +// //DmIn = new RoutingInputPortWithVideoStatuses(DmPortName.DmIn, eRoutingSignalType.AudioVideo, +// // eRoutingPortConnectionType.DmCat, null, this, +// // VideoStatusHelper.GetDmInputStatusFuncs(Card.DmInput)); + +// //HdmiLoopOut = new RoutingOutputPort(DmPortName.HdmiLoopOut, eRoutingSignalType.AudioVideo, +// // eRoutingPortConnectionType.Hdmi, null, this); +// //AudioLoopOut = new RoutingOutputPort(DmPortName.AudioLoopOut, eRoutingSignalType.Audio, +// // eRoutingPortConnectionType.Hdmi, null, this); + +// //InputPorts.Add(DmIn); +// //OutputPorts.AddRange(new[] { HdmiLoopOut, AudioLoopOut }); +// } +// } + +// public class Dmc4kCDspController : DmInputCardControllerBase +// { +// public override eDmInputCardType Type +// { +// get { return eDmInputCardType.Dmc4kCDsp; } +// } +// public Dmc4kCDsp Card { get; private set; } + +// //public RoutingInputPortWithVideoStatuses DmIn { get; private set; } +// //public RoutingOutputPort HdmiLoopOut { get; private set; } +// //public RoutingOutputPort AudioLoopOut { get; private set; } + +// public Dmc4kCDspController(string key, Dmc4kCDsp card, uint slot) +// : base(key, slot) +// { +// Card = card; +// //DmIn = new RoutingInputPortWithVideoStatuses(DmPortName.DmIn, eRoutingSignalType.AudioVideo, +// // eRoutingPortConnectionType.DmCat, null, this, +// // VideoStatusHelper.GetDmInputStatusFuncs(Card.DmInput)); + +// //HdmiLoopOut = new RoutingOutputPort(DmPortName.HdmiLoopOut, eRoutingSignalType.AudioVideo, +// // eRoutingPortConnectionType.Hdmi, null, this); +// //AudioLoopOut = new RoutingOutputPort(DmPortName.AudioLoopOut, eRoutingSignalType.Audio, +// // eRoutingPortConnectionType.Hdmi, null, this); + +// //InputPorts.Add(DmIn); +// //OutputPorts.AddRange(new[] { HdmiLoopOut, AudioLoopOut }); +// } +// } + +//} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Cards REMOVE/DmcHD4kInputCard.cs b/Essentials DM/Essentials_DM/Cards REMOVE/DmcHD4kInputCard.cs new file mode 100644 index 00000000..e317085c --- /dev/null +++ b/Essentials DM/Essentials_DM/Cards REMOVE/DmcHD4kInputCard.cs @@ -0,0 +1,82 @@ +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using Crestron.SimplSharp; +//using Crestron.SimplSharpPro; +//using Crestron.SimplSharpPro.DeviceSupport; +//using Crestron.SimplSharpPro.DM; +//using Crestron.SimplSharpPro.DM.Cards; + +//using PepperDash.Essentials.Core; +//using PepperDash.Essentials.DM; + +//namespace PepperDash.Essentials.DM.Cards +//{ +// /// +// /// +// /// +// public class Dmc4kHdController : DmInputCardControllerBase +// { +// public Dmc4kHd Card { get; private set; } +// public override eDmInputCardType Type +// { +// get { return eDmInputCardType.Dmc4kHd; } +// } + +// public RoutingInputPortWithVideoStatuses HdmiIn { get; private set; } +// public RoutingOutputPort HdmiLoopOut { get; private set; } +// public RoutingOutputPort AudioLoopOut { get; private set; } + +// public Dmc4kHdController(string key, Dmc4kHd card, uint slot) +// : base(key, slot) +// { +// Card = card; +// HdmiIn = new RoutingInputPortWithVideoStatuses(DmPortName.HdmiIn, eRoutingSignalType.AudioVideo, +// eRoutingPortConnectionType.Hdmi, null, this, +// VideoStatusHelper.GetHdmiInputStatusFuncs(Card.HdmiInput)); + +// HdmiLoopOut = new RoutingOutputPort(DmPortName.HdmiLoopOut, eRoutingSignalType.AudioVideo, +// eRoutingPortConnectionType.Hdmi, null, this); +// AudioLoopOut = new RoutingOutputPort(DmPortName.AudioLoopOut, eRoutingSignalType.Audio, +// eRoutingPortConnectionType.Hdmi, null, this); + +// InputPorts.Add(HdmiIn); +// OutputPorts.AddRange(new[] { HdmiLoopOut, AudioLoopOut }); +// } +// } + +// /// +// /// +// /// +// public class Dmc4kHdDspController : DmInputCardControllerBase +// { +// public Dmc4kHdDsp Card { get; private set; } +// public override eDmInputCardType Type +// { +// get { return eDmInputCardType.Dmc4kHdDsp; } +// } + +// //public RoutingInputPortWithVideoStatuses HdmiIn { get; private set; } +// //public RoutingOutputPort HdmiLoopOut { get; private set; } +// //public RoutingOutputPort AudioLoopOut { get; private set; } + +// public Dmc4kHdDspController(string key, Dmc4kHdDsp card, uint slot) +// : base(key, slot) +// { +// Card = card; +// //HdmiIn = new RoutingInputPortWithVideoStatuses(DmPortName.HdmiIn, eRoutingSignalType.AudioVideo, +// // eRoutingPortConnectionType.Hdmi, null, this, +// // VideoStatusHelper.GetHdmiInputStatusFuncs(Card.HdmiInput)); + +// //HdmiLoopOut = new RoutingOutputPort(DmPortName.HdmiLoopOut, eRoutingSignalType.AudioVideo, +// // eRoutingPortConnectionType.Hdmi, null, this); +// //AudioLoopOut = new RoutingOutputPort(DmPortName.AudioLoopOut, eRoutingSignalType.Audio, +// // eRoutingPortConnectionType.Hdmi, null, this); + +// //InputPorts.Add(HdmiIn); +// //OutputPorts.AddRange(new[] { HdmiLoopOut, AudioLoopOut }); +// } +// } +//} + diff --git a/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput.cs b/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput.cs new file mode 100644 index 00000000..3a069c39 --- /dev/null +++ b/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput.cs @@ -0,0 +1,111 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro.DM; + +using PepperDash.Core; +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.DM +{ + public class DmCardAudioOutputController : IBasicVolumeWithFeedback + { + public Audio.Output Output { get; private set; } + + public IntFeedback VolumeLevelFeedback { get; private set; } + + public BoolFeedback MuteFeedback { get; private set; } + + ushort PreMuteVolumeLevel; + bool IsMuted; + + public DmCardAudioOutputController(Audio.Output output) + { + Output = output; + VolumeLevelFeedback = new IntFeedback(() => Output.VolumeFeedback.UShortValue); + MuteFeedback = new BoolFeedback(() => IsMuted); + } + + #region IBasicVolumeWithFeedback Members + + /// + /// + /// + public void MuteOff() + { + SetVolume(PreMuteVolumeLevel); + IsMuted = false; + MuteFeedback.FireUpdate(); + } + + /// + /// + /// + public void MuteOn() + { + PreMuteVolumeLevel = Output.VolumeFeedback.UShortValue; + SetVolume(0); + IsMuted = true; + MuteFeedback.FireUpdate(); + } + + /// + /// + /// + public void SetVolume(ushort level) + { + Debug.Console(2, "Set volume out {0}", level); + Output.Volume.UShortValue = level; + } + + /// + /// + /// + internal void VolumeEventFromChassis() + { + VolumeLevelFeedback.FireUpdate(); + } + + #endregion + + #region IBasicVolumeControls Members + + /// + /// + /// + public void MuteToggle() + { + if (IsMuted) + MuteOff(); + else + MuteOn(); + } + + /// + /// + /// + public void VolumeDown(bool pressRelease) + { + if (pressRelease) + Output.Volume.CreateRamp(0, 400); +#warning SCALE THIS RAMP + else + Output.Volume.StopRamp(); + } + + /// + /// + /// + public void VolumeUp(bool pressRelease) + { + if (pressRelease) + Output.Volume.CreateRamp(65535, 400); + else + Output.Volume.StopRamp(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Chassis/DmChassisController.cs b/Essentials DM/Essentials_DM/Chassis/DmChassisController.cs new file mode 100644 index 00000000..10a545a6 --- /dev/null +++ b/Essentials DM/Essentials_DM/Chassis/DmChassisController.cs @@ -0,0 +1,569 @@ +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.Cards; +using Crestron.SimplSharpPro.DM.Endpoints; +using Crestron.SimplSharpPro.DM.Endpoints.Receivers; + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.DM.Cards; + +using PepperDash.Essentials.DM.Config; + +namespace PepperDash.Essentials.DM +{ + /// + /// Builds a controller for basic DM-RMCs with Com and IR ports and no control functions + /// + /// + public class DmChassisController : CrestronGenericBaseDevice, IRoutingInputsOutputs, IRouting//, ICardPortsDevice + { + public DmMDMnxn Chassis { get; private set; } + + // Need a couple Lists of generic Backplane ports + public RoutingPortCollection InputPorts { get; private set; } + public RoutingPortCollection OutputPorts { get; private set; } + + //public Dictionary InputCards { get; private set; } + //public Dictionary OutputCards { get; private set; } + + public Dictionary InputNames { get; set; } + public Dictionary OutputNames { get; set; } + public Dictionary VolumeControls { get; private set; } + + public const int RouteOffTime = 500; + Dictionary RouteOffTimers = new Dictionary(); + + /// + /// Factory method to create a new chassis controller from config data. Limited to 8x8 right now + /// + public static DmChassisController GetDmChassisController(string key, string name, + string type, DMChassisPropertiesConfig properties) + { + try + { + type = type.ToLower(); + uint ipid = properties.Control.IpIdInt; // Convert.ToUInt16(properties.Id, 16); + DmChassisController controller = null; + if (type == "dmmd8x8") + { + controller = new DmChassisController(key, name, new DmMd8x8(ipid, Global.ControlSystem)); + // add the cards and port names + foreach (var kvp in properties.InputSlots) + controller.AddInputCard(kvp.Value, kvp.Key); + foreach (var kvp in properties.OutputSlots) + controller.AddOutputCard(kvp.Value, kvp.Key); + foreach (var kvp in properties.VolumeControls) + { + // get the card + // check it for an audio-compatible type + // make a something-something that will make it work + // retire to mountain village + var outNum = kvp.Key; + var card = controller.Chassis.Outputs[outNum].Card; + Audio.Output audio = null; + if (card is DmcHdo) + audio = (card as DmcHdo).Audio; + else if (card is Dmc4kHdo) + audio = (card as Dmc4kHdo).Audio; + if (audio == null) + continue; + // wire up the audio to something here... + controller.AddVolumeControl(outNum, audio); + } + + controller.InputNames = properties.InputNames; + controller.OutputNames = properties.OutputNames; + return controller; + } + } + catch (System.Exception e) + { + Debug.Console(0, "Error creating DM chassis:\r{0}", e); + } + return null; + } + + + /// + /// + /// + /// + /// + /// + public DmChassisController(string key, string name, DmMDMnxn chassis) + : base(key, name, chassis) + { + Chassis = chassis; + InputPorts = new RoutingPortCollection(); + OutputPorts = new RoutingPortCollection(); + VolumeControls = new Dictionary(); + IsOnline.OutputChange += new EventHandler(IsOnline_OutputChange); + Chassis.DMOutputChange += new DMOutputEventHandler(Chassis_DMOutputChange); + } + + /// + /// + /// + /// + /// + public void AddInputCard(string type, uint number) + { + Debug.Console(2, this, "Adding input card '{0}', slot {1}", type, number); + if (type == "dmc4kHd") + { + new Dmc4kHd(number, this.Chassis); + AddHdmiInCardPorts(number); + } + else if (type == "dmc4kHdDsp") + { + new Dmc4kHdDsp(number, this.Chassis); + AddHdmiInCardPorts(number); + } + else if (type == "dmc4kC") + { + new Dmc4kC(number, this.Chassis); + AddDmInCardPorts(number); + } + else if (type == "dmc4kCDsp") + { + new Dmc4kCDsp(number, this.Chassis); + AddDmInCardPorts(number); + } + else if (type == "dmcHd") + { + new DmcHd(number, this.Chassis); + AddHdmiInCardPorts(number); + } + else if (type == "dmcHdDsp") + { + new DmcHdDsp(number, this.Chassis); + AddHdmiInCardPorts(number); + } + + else if (type == "dmcC") + { + new DmcC(number, this.Chassis); + AddDmInCardPorts(number); + } + else if (type == "dmcCDsp") + { + new DmcCDsp(number, this.Chassis); + AddDmInCardPorts(number); + } + else if (type == "dmcS") + { + new DmcS(number, Chassis); + AddInputPortWithDebug(number, "dmIn", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmMmFiber); + AddInCardLoopPorts(number); + } + else if (type == "dmcSDsp") + { + new DmcSDsp(number, Chassis); + AddInputPortWithDebug(number, "dmIn", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmMmFiber); + AddInCardLoopPorts(number); + } + else if (type == "dmcS2") + { + new DmcS2(number, Chassis); + AddInputPortWithDebug(number, "dmIn", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmSmFiber); + AddInCardLoopPorts(number); + } + else if (type == "dmcS2Dsp") + { + new DmcS2Dsp(number, Chassis); + AddInputPortWithDebug(number, "dmIn", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmSmFiber); + AddInCardLoopPorts(number); + } + else if (type == "dmcSdi") + { + new DmcSdi(number, Chassis); + AddInputPortWithDebug(number, "sdiIn", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Sdi); + AddOutputPortWithDebug(number, "sdiOut", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Sdi, null); + AddInCardLoopPorts(number); + } + } + + void AddDmInCardPorts(uint number) + { + AddInputPortWithDebug(number, "dmIn", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmCat); + AddInCardLoopPorts(number); + } + + void AddHdmiInCardPorts(uint number) + { + AddInputPortWithDebug(number, "hdmiIn", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi); + AddInCardLoopPorts(number); + } + + void AddInCardLoopPorts(uint number) + { + AddOutputPortWithDebug(number, "hdmiLoopOut", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null); + AddOutputPortWithDebug(number, "audioLoopOut", eRoutingSignalType.Audio, eRoutingPortConnectionType.Hdmi, null); + } + + /// + /// + /// + /// + /// + public void AddOutputCard(string type, uint number) + { + Debug.Console(2, this, "Adding output card '{0}', slot {1}", type, number); + if (type == "dmc4kHdo") + { + new Dmc4kHdoSingle(number, Chassis); + AddDmcHdoPorts(number); + } + else if (type == "dmcHdo") + { + new DmcHdoSingle(number, Chassis); + AddDmcHdoPorts(number); + } + else if (type == "dmc4kCoHd") + { + new Dmc4kCoHdSingle(number, Chassis); + AddDmcCoPorts(number); + } + else if (type == "dmcCoHd") + { + new DmcCoHdSingle(number, Chassis); + AddDmcCoPorts(number); + } + else if (type == "dmcSoHd") + { + new DmcSoHdSingle(number, Chassis); + AddOutputPortWithDebug(number, "dmOut1", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmMmFiber, 2 * (number - 1) + 1); + AddOutputPortWithDebug(number, "hdmiOut1", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 2 * (number - 1) + 1); + AddOutputPortWithDebug(number, "dmOut2", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmMmFiber, 2 * (number - 1) + 2); + + } + else if (type == "dmcS2oHd") + { + new DmcS2oHdSingle(number, Chassis); + AddOutputPortWithDebug(number, "dmOut1", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmSmFiber, 2 * (number - 1) + 1); + AddOutputPortWithDebug(number, "hdmiOut1", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 2 * (number - 1) + 1); + AddOutputPortWithDebug(number, "dmOut2", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmSmFiber, 2 * (number - 1) + 2); + } + + else + Debug.Console(1, this, " WARNING: Output card type '{0}' is not available", type); + } + + void AddDmcHdoPorts(uint number) + { + AddOutputPortWithDebug(number, "hdmiOut1", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 2 * (number - 1) + 1); + AddOutputPortWithDebug(number, "audioOut1", eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio, 2 * (number - 1) + 1); + AddOutputPortWithDebug(number, "hdmiOut2", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 2 * (number - 1) + 2); + AddOutputPortWithDebug(number, "audioOut2", eRoutingSignalType.Audio, eRoutingPortConnectionType.LineAudio, 2 * (number - 1) + 2); + + } + + void AddDmcCoPorts(uint number) + { + AddOutputPortWithDebug(number, "dmOut1", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmCat, 2 * (number - 1) + 1); + AddOutputPortWithDebug(number, "hdmiOut1", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 2 * (number - 1) + 1); + AddOutputPortWithDebug(number, "dmOut2", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.DmCat, 2 * (number - 1) + 2); + } + + /// + /// + /// + void AddInputPortWithDebug(uint cardNum, string portName, eRoutingSignalType sigType, eRoutingPortConnectionType portType) + { + Debug.Console(2, this, " Adding input port '{0}'", portName); + InputPorts.Add(new RoutingInputPort(string.Format("card{0}--{1}", cardNum, portName), + sigType, portType, cardNum, this)); + } + + /// + /// + /// + void AddOutputPortWithDebug(uint cardNum, string portName, eRoutingSignalType sigType, eRoutingPortConnectionType portType, object selector) + { + Debug.Console(2, this, " Adding output port '{0}'", portName); + OutputPorts.Add(new RoutingOutputPort(string.Format("card{0}--{1}", cardNum, portName), + sigType, portType, selector, this)); + } + + /// + /// + /// + void AddVolumeControl(uint number, Audio.Output audio) + { + VolumeControls.Add(number, new DmCardAudioOutputController(audio)); + } + + /// + /// + /// + void Chassis_DMOutputChange(Switch device, DMOutputEventArgs args) + { + if (args.EventId == DMOutputEventIds.VolumeEventId && + VolumeControls.ContainsKey(args.Number)) + VolumeControls[args.Number].VolumeEventFromChassis(); + } + + /// + /// + /// + /// + void StartOffTimer(PortNumberType pnt) + { + if (RouteOffTimers.ContainsKey(pnt)) + return; + RouteOffTimers[pnt] = new CTimer(o => + { + ExecuteSwitch(0, pnt.Number, pnt.Type); + }, RouteOffTime); + } + + // Send out sigs when coming online + void IsOnline_OutputChange(object sender, EventArgs e) + { + if (IsOnline.BoolValue) + { + if (InputNames != null) + foreach (var kvp in InputNames) + Chassis.Inputs[kvp.Key].Name.StringValue = kvp.Value; + if (OutputNames != null) + foreach(var kvp in OutputNames) + Chassis.Outputs[kvp.Key].Name.StringValue = kvp.Value; + } + } + + #region IRouting Members + + public void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType sigType) + { + Debug.Console(0, this, "Making an awesome DM route from {0} to {1} {2}", inputSelector, outputSelector, sigType); + + var input = Convert.ToUInt32(inputSelector); // Cast can sometimes fail + var output = Convert.ToUInt32(outputSelector); + // Check to see if there's an off timer waiting on this and if so, cancel + var key = new PortNumberType(output, sigType); + if (input == 0) + { + StartOffTimer(key); + } + else + { + if(RouteOffTimers.ContainsKey(key)) + { + Debug.Console(2, this, "{0} cancelling route off due to new source", output); + RouteOffTimers[key].Stop(); + RouteOffTimers.Remove(key); + } + } + + Card.DMICard inCard = input == 0 ? null : Chassis.Inputs[input]; + + // NOTE THAT THESE ARE NOTS - TO CATCH THE AudioVideo TYPE + if (sigType != eRoutingSignalType.Audio) + { + Chassis.VideoEnter.BoolValue = true; + Chassis.Outputs[output].VideoOut = inCard; + } + + if (sigType != eRoutingSignalType.Video) + { + Chassis.AudioEnter.BoolValue = true; + Chassis.Outputs[output].AudioOut = inCard; + } + } + + #endregion +// void AddInUseTrackerToPort(RoutingOutputPort port, eRoutingSignalType sigType) +// { +// port.InUseTracker.InUseFeedback.OutputChange += (o, a) => +// { +//#warning Can we add something here that will de-route based on breakaway, or does it even matter? +// if (!port.InUseTracker.InUseFeedback.BoolValue) +// this.ExecuteSwitch(0, port.Selector, sigType); +// }; +// } + + + //[Obsolete] + //public void AddInputCard(uint slot, eDmInputCardType type) + //{ + // var cardKey = Key + "-inputCard" + slot; + // switch (type) + // { + // case eDmInputCardType.Dmc4kHd: + // InputCards[slot] = new Dmc4kHdController(cardKey, + // new Dmc4kHd(slot, this.Chassis), slot); + // break; + // case eDmInputCardType.Dmc4kHdDsp: + // InputCards[slot] = new Dmc4kHdDspController(cardKey, + // new Dmc4kHdDsp(slot, this.Chassis), slot); + // break; + // case eDmInputCardType.Dmc4kC: + // InputCards[slot] = new Dmc4kCController(cardKey, + // new Dmc4kC(slot, this.Chassis), slot); + // break; + // case eDmInputCardType.Dmc4kCDsp: + // InputCards[slot] = new Dmc4kCDspController(cardKey, + // new Dmc4kCDsp(slot, this.Chassis), slot); + // break; + // } + //} + + //[Obsolete] + //public void AddOutputCard(uint cardSlot, eDmOutputCardType type) + //{ + // var cardKey = Key + "-outputCard" + cardSlot; + // switch (type) + // { + // case eDmOutputCardType.Dmc4kCoHd: + // OutputCards[cardSlot] = new Dmc4kCoHdSingleOutputCard(cardKey, + // new Dmc4kCoHdSingle(cardSlot, this.Chassis), cardSlot); + // break; + // case eDmOutputCardType.DmcCoHd: + // OutputCards[cardSlot] = new Dmc4kHdoSingleOutputCard(cardKey, + // new Dmc4kHdoSingle(cardSlot, this.Chassis), cardSlot); + // break; + // default: + // break; + // } + //} + + ///// + ///// Helper to get a specific port from a given attached card + ///// + ///// Named 'input-N' ('output-N' is not valid, as output cards have no inputs) + ///// The port name on the card, for example 'hdmiOut' + ///// Returns port or null if doesn't exist + //public RoutingInputPort GetChildInputPort(string card, string port) + //{ + // return GetChildPort(card, port, false) as RoutingInputPort; + //} + + ///// + ///// Helper to get a specific port from a given attached card + ///// + ///// Named 'input-N' or 'output-N' + ///// The port name on the card, for example 'hdmiOut' + ///// Returns port or null if doesn't exist + //public RoutingOutputPort GetChildOutputPort(string card, string port) + //{ + // return GetChildPort(card, port, true) as RoutingOutputPort; + //} + + ///// + ///// Helper for above methods + ///// + //RoutingPort GetChildPort(string cardKey, string portKey, bool portIsOutput) + //{ + // var cardTokens = cardKey.Split('-'); + // if (cardTokens.Length != 2) + // { + // Debug.Console(0, this, "WARNING: GetChildPort cannot get port. Card parameter must be 'input-N' or 'output-N'"); + // return null; + // } + // try + // { + // uint slotNum = Convert.ToUInt32(cardTokens[1]); + // var cardType = cardTokens[0].ToLower(); + // if (cardType == "input" && InputCards.ContainsKey(slotNum)) + // { + // var card = InputCards[slotNum]; + // if (portIsOutput) + // return card.GetOutputPort(portKey); + // else + // return card.GetInputPort(portKey); + // } + // if (cardType == "output" && OutputCards.ContainsKey(slotNum)) + // { + // var card = OutputCards[slotNum]; + // return card.GetOutputPort(portKey); + // } + // } + // catch (Exception) + // { + // Debug.Console(0, this, "WARNING: GetChildPort cannot get port. Only integer card numbers are valid."); + // } + // return null; + //} + + //public override bool CustomActivate() + //{ + // var tlc = TieLineCollection.Default; + // // Take all cards and TieLine them together with the internal ports + // for (uint i = 1; i <= Chassis.NumberOfInputs; i++) + // { + // // If there's a matching input card for a given input number... + // // This test *shouldn't* be necessary if data is consistent + // if (InputCards.ContainsKey(i)) + // { + // // Get the ports to link + // var cardAudio = InputCards[i].BackplaneAudioOut; + // var chassisAudio = InputPorts.FirstOrDefault(p => + // (uint)p.Selector == i && p.Type == eRoutingSignalType.Audio); + // if (chassisAudio != null) + // tlc.Add(new TieLine(cardAudio, chassisAudio)); + // else + // Debug.Console(0, this, Debug.ErrorLogLevel.Warning, + // "Backplane audio tie line creation for input card {0} failed", i); + + // // Repeat for video link + // var cardVideo = InputCards[i].BackplaneVideoOut; + // var chassisVideo = InputPorts.FirstOrDefault(p => + // (uint)p.Selector == i && p.Type == eRoutingSignalType.Video); + // if (cardVideo != null) + // tlc.Add(new TieLine(cardVideo, chassisVideo)); + // else + // Debug.Console(0, this, Debug.ErrorLogLevel.Warning, + // "Backplane video tie line creation for input card {0} failed", i); + // } + // } + + // // Loop through outputs and do it again - in pairs, because FYC + // for (uint i = 1; i <= Chassis.NumberOfOutputs / 2; i += 1) + // { + // if (OutputCards.ContainsKey(i)) + // { + // //Debug.Console(0, this, "Adding internal TieLines on output card {0}", OutputCards[i].Key); + // // Left side of card + // uint a = i * 2 - 1; + // tlc.Add(new TieLine( + // OutputPorts.First(p => (uint)p.Selector == a && p.Type == eRoutingSignalType.Audio), + // OutputCards[i].BackplaneAudioIn1)); + // tlc.Add(new TieLine( + // OutputPorts.First(p => (uint)p.Selector == a && p.Type == eRoutingSignalType.Video), + // OutputCards[i].BackplaneVideoIn1)); + + // // Right side of card + // uint b = i * 2; + // tlc.Add(new TieLine( + // OutputPorts.First(p => (uint)p.Selector == b && p.Type == eRoutingSignalType.Audio), + // OutputCards[i].BackplaneAudioIn2)); + // tlc.Add(new TieLine( + // OutputPorts.First(p => (uint)p.Selector == b && p.Type == eRoutingSignalType.Video), + // OutputCards[i].BackplaneVideoIn2)); + // } + // } + + // // Base does register and sets up comm monitoring. + // return base.CustomActivate(); + //} + + } + + public struct PortNumberType + { + public uint Number { get; private set; } + public eRoutingSignalType Type { get; private set; } + + public PortNumberType(uint number, eRoutingSignalType type) : this() + { + Number = number; + Type = type; + } + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Config/DMChassisConfig.cs b/Essentials DM/Essentials_DM/Config/DMChassisConfig.cs new file mode 100644 index 00000000..81f28afa --- /dev/null +++ b/Essentials DM/Essentials_DM/Config/DMChassisConfig.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using Crestron.SimplSharpPro.DM; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.DM.Cards; + +namespace PepperDash.Essentials.DM.Config +{ + /// + /// Represents the "properties" property of a DM device config + /// + public class DMChassisPropertiesConfig + { + [JsonProperty("control")] + public ControlPropertiesConfig Control { get; set; } + + [JsonProperty("volumeControls")] + public Dictionary VolumeControls { get; set; } + + [JsonProperty("inputSlots")] + public Dictionary InputSlots { get; set; } + + [JsonProperty("outputSlots")] + public Dictionary OutputSlots { get; set; } + + [JsonProperty("inputNames")] + public Dictionary InputNames { get; set; } + + [JsonProperty("outputNames")] + public Dictionary OutputNames { get; set; } + } + + /// + /// + /// + public class DmCardAudioPropertiesConfig + { + [JsonProperty("outLevel")] + public int OutLevel { get; set; } + + [JsonProperty("isVolumeControlPoint")] + public bool IsVolumeControlPoint { get; set; } + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Config/DeviceFactory.cs b/Essentials DM/Essentials_DM/Config/DeviceFactory.cs new file mode 100644 index 00000000..6ccc13c4 --- /dev/null +++ b/Essentials DM/Essentials_DM/Config/DeviceFactory.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronIO; +using Crestron.SimplSharpPro; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Config; + +namespace PepperDash.Essentials.DM +{ + public class DeviceFactory + { + public static IKeyed GetDevice(DeviceConfig dc) + { + var key = dc.Key; + var name = dc.Name; + var type = dc.Type; + var properties = dc.Properties; + + var typeName = dc.Type.ToLower(); + + if (typeName == "dmmd8x8") + { + var props = JsonConvert.DeserializeObject + (properties.ToString()); + return PepperDash.Essentials.DM.DmChassisController. + GetDmChassisController(key, name, type, props); + } + + // Hand off to DmTxHelper class + else if (typeName.StartsWith("dmtx")) + { + var props = JsonConvert.DeserializeObject + (properties.ToString()); + return PepperDash.Essentials.DM.DmTxHelper.GetDmTxController(key, name, type, props); + } + + // Hand off to DmRmcHelper class + else if (typeName.StartsWith("dmrmc")) + { + var props = JsonConvert.DeserializeObject + (properties.ToString()); + return PepperDash.Essentials.DM.DmRmcHelper.GetDmRmcController(key, name, type, props); + } + + return null; + } + + + } + +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Config/DmRmcConfig.cs b/Essentials DM/Essentials_DM/Config/DmRmcConfig.cs new file mode 100644 index 00000000..702e10b5 --- /dev/null +++ b/Essentials DM/Essentials_DM/Config/DmRmcConfig.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using Crestron.SimplSharpPro.DM; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using PepperDash.Core; +using PepperDash.Essentials.DM.Cards; + +namespace PepperDash.Essentials.DM.Config +{ + /// + /// Represents the "properties" property of a DM TX device config + /// + public class DmRmcPropertiesConfig + { + [JsonProperty("control")] + public ControlPropertiesConfig Control { get; set; } + + [JsonProperty("parentDeviceKey")] + public string ParentDeviceKey { get; set; } + + [JsonProperty("parentOutputNumber")] + public uint ParentOutputNumber { get; set; } + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Config/DmTxConfig.cs b/Essentials DM/Essentials_DM/Config/DmTxConfig.cs new file mode 100644 index 00000000..51d074f8 --- /dev/null +++ b/Essentials DM/Essentials_DM/Config/DmTxConfig.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using Crestron.SimplSharpPro.DM; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using PepperDash.Core; +using PepperDash.Essentials.DM.Cards; + +namespace PepperDash.Essentials.DM.Config +{ + /// + /// Represents the "properties" property of a DM TX device config + /// + public class DmTxPropertiesConfig + { + [JsonProperty("control")] + public ControlPropertiesConfig Control { get; set; } + + [JsonProperty("parentDeviceKey")] + public string ParentDeviceKey { get; set; } + + [JsonProperty("parentInputNumber")] + public uint ParentInputNumber { get; set; } + + [JsonProperty("autoSwitching")] + public bool AutoSwitching { get; set; } + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/DmPortName.cs b/Essentials DM/Essentials_DM/DmPortName.cs new file mode 100644 index 00000000..ae8896a5 --- /dev/null +++ b/Essentials DM/Essentials_DM/DmPortName.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +namespace PepperDash.Essentials.DM +{ + /// + /// Constants for consistent port naming + /// + public class DmPortName + { + public const string AnyVideoIn = "AnyVideoIn"; + public const string AudioLoopOut = "AudioLoopOut"; + public const string BalancedAudioOut = "BalancedAudioOut"; + public const string BalancedAudioOut1 = "BalancedAudioOut1"; + public const string BalancedAudioOut2 = "BalancedAudioOut2"; + public const string CompositeIn = "CompositeIn"; + public const string DisplayPortIn = "DisplayPortIn"; + public const string DmIn = "DmIn"; + public const string DmOut = "DmOut"; + public const string DmOut1 = "DmOut1"; + public const string DmOut2 = "DmOut2"; + public const string HdmiIn = "HdmiIn"; + public const string HdmiIn1 = "HdmiIn1"; + public const string HdmiIn2 = "HdmiIn2"; + public const string HdmiOut1 = "HdmiOut1"; + public const string HdmiOut2 = "HdmiOut2"; + public const string HdmiLoopOut = "HdmiLoopOut"; + public const string HdmiOut = "HdmiOut"; + public const string VgaIn = "VgaIn"; + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc100CController.cs b/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc100CController.cs new file mode 100644 index 00000000..ecefde5c --- /dev/null +++ b/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc100CController.cs @@ -0,0 +1,70 @@ +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.Receivers; + +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.DM +{ + /// + /// Builds a controller for basic DM-RMCs with Com and IR ports and no control functions + /// + /// + public class DmRmc100CController : DmRmcControllerBase, IRoutingInputsOutputs, + IIROutputPorts, IComPorts, ICec + { + public DmRmc100C Rmc { get; private set; } + + public RoutingInputPort DmIn { get; private set; } + public RoutingOutputPort HdmiOut { get; private set; } + + public RoutingPortCollection InputPorts + { + get { return new RoutingPortCollection { DmIn }; } + } + + public RoutingPortCollection OutputPorts + { + get { return new RoutingPortCollection { HdmiOut }; } + } + + /// + /// Make a Crestron RMC and put it in here + /// + public DmRmc100CController(string key, string name, DmRmc100C rmc) + : base(key, name, rmc) + { + Rmc = rmc; + DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.DmCat, 0, this); + HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, null, this); + } + + public override bool CustomActivate() + { + // Base does register and sets up comm monitoring. + return base.CustomActivate(); + } + + #region IIROutputPorts Members + public CrestronCollection IROutputPorts { get { return Rmc.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return Rmc.NumberOfIROutputPorts; } } + #endregion + + #region IComPorts Members + public CrestronCollection ComPorts { get { return Rmc.ComPorts; } } + public int NumberOfComPorts { get { return Rmc.NumberOfComPorts; } } + #endregion + + #region ICec Members + public Cec StreamCec { get { return Rmc.StreamCec; } } + #endregion + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4KScalerCController.cs b/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4KScalerCController.cs new file mode 100644 index 00000000..635b9929 --- /dev/null +++ b/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4KScalerCController.cs @@ -0,0 +1,156 @@ +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.Receivers; + +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.DM +{ + /// + /// Builds a controller for basic DM-RMCs with Com and IR ports and no control functions + /// + /// + public class DmRmc4kScalerCController : DmRmcControllerBase, IRoutingInputsOutputs, IBasicVolumeWithFeedback, + IIROutputPorts, IComPorts, ICec, IRelayPorts + { + public DmRmc4kScalerC Rmc { get; private set; } + + public RoutingInputPort DmIn { get; private set; } + public RoutingOutputPort HdmiOut { get; private set; } + public RoutingOutputPort BalancedAudioOut { get; private set; } + + public RoutingPortCollection InputPorts + { + get { return new RoutingPortCollection { DmIn }; } + } + + public RoutingPortCollection OutputPorts + { + get { return new RoutingPortCollection { HdmiOut, BalancedAudioOut }; } + } + + /// + /// Make a Crestron RMC and put it in here + /// + public DmRmc4kScalerCController(string key, string name, DmRmc4kScalerC rmc) + : base(key, name, rmc) + { + Rmc = rmc; + DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.DmCat, 0, this); + HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, null, this); + BalancedAudioOut = new RoutingOutputPort(DmPortName.BalancedAudioOut, eRoutingSignalType.Audio, + eRoutingPortConnectionType.LineAudio, null, this); + + MuteFeedback = new BoolFeedback(() => false); + VolumeLevelFeedback = new IntFeedback(CommonIntCue.MainVolumeLevelFeedback, () => + rmc.AudioOutput.VolumeFeedback.UShortValue); + } + + public override bool CustomActivate() + { + // Base does register and sets up comm monitoring. + return base.CustomActivate(); + } + + #region IIROutputPorts Members + public CrestronCollection IROutputPorts { get { return Rmc.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return Rmc.NumberOfIROutputPorts; } } + #endregion + + #region IComPorts Members + public CrestronCollection ComPorts { get { return Rmc.ComPorts; } } + public int NumberOfComPorts { get { return Rmc.NumberOfComPorts; } } + #endregion + + #region ICec Members + /// + /// Gets the CEC stream directly from the HDMI port. + /// + public Cec StreamCec { get { return Rmc.HdmiOutput.StreamCec; } } + #endregion + + #region IRelayPorts Members + + public int NumberOfRelayPorts + { + get { return Rmc.NumberOfRelayPorts; } + } + + public CrestronCollection RelayPorts + { + get { return Rmc.RelayPorts; } + } + + #endregion + + #region IBasicVolumeWithFeedback Members + + public BoolFeedback MuteFeedback + { + get; + private set; + } + + /// + /// Not implemented + /// + public void MuteOff() + { + } + + /// + /// Not implemented + /// + public void MuteOn() + { + } + + public void SetVolume(ushort level) + { + Rmc.AudioOutput.Volume.UShortValue = level; + } + + public IntFeedback VolumeLevelFeedback + { + get; + private set; + } + + #endregion + + #region IBasicVolumeControls Members + + /// + /// Not implemented + /// + public void MuteToggle() + { + } + + public void VolumeDown(bool pressRelease) + { + if (pressRelease) + SigHelper.RampTimeScaled(Rmc.AudioOutput.Volume, 0, 4000); + else + Rmc.AudioOutput.Volume.StopRamp(); + } + + public void VolumeUp(bool pressRelease) + { + if (pressRelease) + SigHelper.RampTimeScaled(Rmc.AudioOutput.Volume, 65535, 4000); + else + Rmc.AudioOutput.Volume.StopRamp(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcHelper.cs b/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcHelper.cs new file mode 100644 index 00000000..f0b9eed4 --- /dev/null +++ b/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcHelper.cs @@ -0,0 +1,138 @@ +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.Receivers; + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.DM.Config; + +namespace PepperDash.Essentials.DM +{ + public abstract class DmRmcControllerBase : CrestronGenericBaseDevice + { + public DmRmcControllerBase(string key, string name, EndpointReceiverBase device) + : base(key, name, device) + { } + } + + public class DmRmcHelper + { + /// + /// A factory method for various DmTxControllers + /// + /// + /// + /// + /// + public static DmRmcControllerBase GetDmRmcController(string key, string name, string typeName, DmRmcPropertiesConfig props) + { + // switch on type name... later... + + typeName = typeName.ToLower(); + uint ipid = props.Control.IpIdInt; // Convert.ToUInt16(props.Id, 16); + + + + // right here, we need to grab the tie line that associates this + // RMC with a chassis or processor. If the RMC input's tie line is not + // connected to a chassis, then it's parent is the processor. + // If the RMC is connected to a chassis, then we need to grab the + // output number from the tie line and use that to plug it in. + // Example of chassis-connected: + //{ + // "sourceKey": "dmMd8x8-1", + // "sourcePort": "anyOut2", + // "destinationKey": "dmRmc100C-2", + // "destinationPort": "DmIn" + //} + + // Tx -> RMC link: + //{ + // "sourceKey": "dmTx201C-1", + // "sourcePort": "DmOut", + // "destinationKey": "dmRmc100C-2", + // "destinationPort": "DmIn" + //} + + var tlc = TieLineCollection.Default; + // grab the tie line that has this key as + // THIS DOESN'T WORK BECAUSE THE RMC THAT WE NEED (THIS) HASN'T BEEN MADE + // YET AND THUS WILL NOT HAVE A TIE LINE... + var inputTieLine = tlc.FirstOrDefault(t => + { + var d = t.DestinationPort.ParentDevice; + return d.Key.Equals(key, StringComparison.OrdinalIgnoreCase) + && d is DmChassisController; + }); + + var pKey = props.ParentDeviceKey.ToLower(); + + + + + // Non-DM-chassis endpoints + if (pKey == "processor") + { + // Catch constructor failures, mainly dues to IPID + try + { + if (typeName.StartsWith("dmrmc100c")) + return new DmRmc100CController(key, name, new DmRmc100C(ipid, Global.ControlSystem)); + if (typeName.StartsWith("dmrmcscalerc")) + return new DmRmcScalerCController(key, name, new DmRmcScalerC(ipid, Global.ControlSystem)); + if (typeName.StartsWith("dmrmc4kscalerc")) + return new DmRmc4kScalerCController(key, name, new DmRmc4kScalerC(ipid, Global.ControlSystem)); + } + catch (Exception e) + { + Debug.Console(0, "[{0}] WARNING: Cannot create DM-RMC device: {1}", key, e.Message); + } + + + Debug.Console(0, "Cannot create DM-RMC of type: '{0}'", typeName); + } + // Endpoints attached to DM Chassis + else + { + var parentDev = DeviceManager.GetDeviceForKey(pKey); + if (!(parentDev is DmChassisController)) + { + Debug.Console(0, "Cannot create DM device '{0}'. '{1}' is not a DM Chassis.", + key, pKey); + return null; + } + + var chassis = (parentDev as DmChassisController).Chassis; + var num = props.ParentOutputNumber; + if (num <= 0 || num > chassis.NumberOfOutputs) + { + Debug.Console(0, "Cannot create DM device '{0}'. Output number '{1}' is out of range", + key, num); + return null; + } + + try + { + if (typeName.StartsWith("dmrmc100c")) + return new DmRmc100CController(key, name, new DmRmc100C(ipid, chassis.Outputs[num])); + if (typeName.StartsWith("dmrmcscalerc")) + return new DmRmcScalerCController(key, name, new DmRmcScalerC(ipid, chassis.Outputs[num])); + if (typeName.StartsWith("dmrmc4kscalerc")) + return new DmRmc4kScalerCController(key, name, new DmRmc4kScalerC(ipid, chassis.Outputs[num])); + } + catch (Exception e) + { + Debug.Console(0, "[{0}] WARNING: Cannot create DM-RMC device: {1}", key, e.Message); + } + } + + return null; + } + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcScalerCController.cs b/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcScalerCController.cs new file mode 100644 index 00000000..f37597e5 --- /dev/null +++ b/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcScalerCController.cs @@ -0,0 +1,73 @@ +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.Receivers; + +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.DM +{ + /// + /// Builds a controller for basic DM-RMCs with Com and IR ports and no control functions + /// + /// + public class DmRmcScalerCController : DmRmcControllerBase, IRoutingInputsOutputs, + IIROutputPorts, IComPorts, ICec + { + public DmRmcScalerC Rmc { get; private set; } + + public RoutingInputPort DmIn { get; private set; } + public RoutingOutputPort HdmiOut { get; private set; } + + public RoutingPortCollection InputPorts + { + get { return new RoutingPortCollection { DmIn }; } + } + + public RoutingPortCollection OutputPorts + { + get { return new RoutingPortCollection { HdmiOut }; } + } + + /// + /// Make a Crestron RMC and put it in here + /// + public DmRmcScalerCController(string key, string name, DmRmcScalerC rmc) + : base(key, name, rmc) + { + Rmc = rmc; + DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.DmCat, 0, this); + HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, null, this); + } + + public override bool CustomActivate() + { + // Base does register and sets up comm monitoring. + return base.CustomActivate(); + } + + #region IIROutputPorts Members + public CrestronCollection IROutputPorts { get { return Rmc.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return Rmc.NumberOfIROutputPorts; } } + #endregion + + #region IComPorts Members + public CrestronCollection ComPorts { get { return Rmc.ComPorts; } } + public int NumberOfComPorts { get { return Rmc.NumberOfComPorts; } } + #endregion + + #region ICec Members + /// + /// Gets the CEC stream directly from the HDMI port. + /// + public Cec StreamCec { get { return Rmc.HdmiOutput.StreamCec; } } + #endregion + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTx201CController.cs b/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTx201CController.cs new file mode 100644 index 00000000..f2765ce4 --- /dev/null +++ b/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTx201CController.cs @@ -0,0 +1,196 @@ +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; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.DM.Config; + +namespace PepperDash.Essentials.DM +{ + public class DmTx201SBasicController : DmTxControllerBase, IRoutingInputsOutputs, IHasFeedback + { + public DmTx201S Tx { get; private set; } + + public RoutingInputPortWithVideoStatuses AnyVideoInput { get; private set; } + public RoutingInputPortWithVideoStatuses HdmiInput { get; private set; } + public RoutingInputPortWithVideoStatuses VgaInput { get; private set; } + public RoutingOutputPort DmOutput { get; private set; } + public StringFeedback ActiveVideoInputFeedback { get; private set; } + + /// + /// Helps get the "real" inputs, including when in Auto + /// + public DmTx200Base.eSourceSelection ActualVideoInput + { + get + { + if (Tx.VideoSourceFeedback == DmTx200Base.eSourceSelection.Digital || + Tx.VideoSourceFeedback == DmTx200Base.eSourceSelection.Analog || + Tx.VideoSourceFeedback == DmTx200Base.eSourceSelection.Disable) + return Tx.VideoSourceFeedback; + else // auto + { + if (Tx.HdmiInput.SyncDetectedFeedback.BoolValue) + return DmTx200Base.eSourceSelection.Digital; + else if (Tx.VgaInput.SyncDetectedFeedback.BoolValue) + return DmTx200Base.eSourceSelection.Analog; + else + return DmTx200Base.eSourceSelection.Disable; + } + } + } + + public RoutingPortCollection InputPorts + { + get + { + return new RoutingPortCollection + { + HdmiInput, + VgaInput, + AnyVideoInput + }; + } + } + + public RoutingPortCollection OutputPorts + { + get + { + return new RoutingPortCollection { DmOutput }; + } + } + + /// + /// + /// + /// + /// + /// + public DmTx201SBasicController(string key, string name, DmTx201S tx) + : base(key, name, tx) + { + Tx = tx; + + //Can this be combined into helper somehow?? + var combinedFuncs = new VideoStatusFuncsWrapper + { + HdcpActiveFeedbackFunc = () => + ActualVideoInput == DmTx200Base.eSourceSelection.Digital + && tx.HdmiInput.VideoAttributes.HdcpActiveFeedback.BoolValue, + + HdcpStateFeedbackFunc = () => + ActualVideoInput == DmTx200Base.eSourceSelection.Digital + ? tx.HdmiInput.VideoAttributes.HdcpStateFeedback.ToString() + : "", + + VideoResolutionFeedbackFunc = () => + ActualVideoInput == DmTx200Base.eSourceSelection.Digital + ? Tx.HdmiInput.VideoAttributes.GetVideoResolutionString() + : Tx.VgaInput.VideoAttributes.GetVideoResolutionString(), + + VideoSyncFeedbackFunc = () => + ActualVideoInput == DmTx200Base.eSourceSelection.Digital + ? HdmiInput.VideoStatus.VideoSyncFeedback.BoolValue + : VgaInput.VideoStatus.VideoSyncFeedback.BoolValue + }; + HdmiInput = new RoutingInputPortWithVideoStatuses(DmPortName.HdmiIn, + eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 1, this, + VideoStatusHelper.GetHdmiInputStatusFuncs(tx.HdmiInput)); + VgaInput = new RoutingInputPortWithVideoStatuses(DmPortName.VgaIn, + eRoutingSignalType.Video, eRoutingPortConnectionType.Vga, 2, this, + VideoStatusHelper.GetVgaInputStatusFuncs(tx.VgaInput)); + AnyVideoInput = new RoutingInputPortWithVideoStatuses(DmPortName.AnyVideoIn, + eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.None, 0, this, combinedFuncs); + + DmOutput = new RoutingOutputPort(DmPortName.DmOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.DmCat, null, this); + + ActiveVideoInputFeedback = new StringFeedback(new Cue("ActiveVideoInput", 0, eCueType.String), + () => ActualVideoInput.ToString()); + } + + public override bool CustomActivate() + { + Tx.HdmiInput.InputStreamChange += (o, a) => FireInputStreamChange(HdmiInput, a.EventId); + Tx.HdmiInput.VideoAttributes.AttributeChange += (o, a) => FireVideoAttributeChange(HdmiInput, a.EventId); + + Tx.VgaInput.InputStreamChange += (o, a) => FireInputStreamChange(VgaInput, a.EventId); + Tx.VgaInput.VideoAttributes.AttributeChange += (o, a) => FireVideoAttributeChange(VgaInput, a.EventId); + + // Base does register and sets up comm monitoring. + return base.CustomActivate(); + } + + void Tx_BaseEvent(GenericBase device, BaseEventArgs args) + { + var id = args.EventId; + if (id == DmTx201S.VideoSourceFeedbackEventID) + { + Debug.Console(2, this, " Video Source: {0}", Tx.VideoSourceFeedback); + } + + // ------------------------------ incomplete ----------------------------------------- + else if (id == DmTx201S.AudioSourceFeedbackEventID) + { + Debug.Console(2, this, " Audio Source: {0}", Tx.AudioSourceFeedback); + } + } + + /// + /// Relays the input stream change to the appropriate RoutingInputPort. + /// + void FireInputStreamChange(RoutingInputPortWithVideoStatuses inputPort, int eventId) + { + if (eventId == EndpointInputStreamEventIds.SyncDetectedFeedbackEventId) + { + inputPort.VideoStatus.VideoSyncFeedback.FireUpdate(); + AnyVideoInput.VideoStatus.VideoSyncFeedback.FireUpdate(); + } + } + + /// + /// Relays the VideoAttributes change to a RoutingInputPort + /// + void FireVideoAttributeChange(RoutingInputPortWithVideoStatuses inputPort, int eventId) + { + //// LOCATION: Crestron.SimplSharpPro.DM.VideoAttributeEventIds + //Debug.Console(2, this, "VideoAttributes_AttributeChange event id={0} from {1}", + // args.EventId, (sender as VideoAttributesEnhanced).Owner.GetType()); + switch (eventId) + { + case VideoAttributeEventIds.HdcpActiveFeedbackEventId: + inputPort.VideoStatus.HdcpActiveFeedback.FireUpdate(); + AnyVideoInput.VideoStatus.HdcpActiveFeedback.FireUpdate(); + break; + case VideoAttributeEventIds.HdcpStateFeedbackEventId: + inputPort.VideoStatus.HdcpStateFeedback.FireUpdate(); + AnyVideoInput.VideoStatus.HdcpStateFeedback.FireUpdate(); + break; + case VideoAttributeEventIds.HorizontalResolutionFeedbackEventId: + case VideoAttributeEventIds.VerticalResolutionFeedbackEventId: + inputPort.VideoStatus.VideoResolutionFeedback.FireUpdate(); + AnyVideoInput.VideoStatus.VideoResolutionFeedback.FireUpdate(); + break; + } + } + + public override List Feedbacks + { + get + { + List list = AnyVideoInput.VideoStatus.ToList(); + list.AddRange(base.Feedbacks); + list.Add(ActiveVideoInputFeedback); + return list; + } + } + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTx401CController.cs b/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTx401CController.cs new file mode 100644 index 00000000..f8f51fae --- /dev/null +++ b/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTx401CController.cs @@ -0,0 +1,246 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +//using Crestron.SimplSharpPro.DeviceSupport; +using Crestron.SimplSharpPro.DM; +using Crestron.SimplSharpPro.DM.Endpoints; +using Crestron.SimplSharpPro.DM.Endpoints.Transmitters; + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.DM.Config; + +namespace PepperDash.Essentials.DM +{ + using eVst = DmTx401C.eSourceSelection; + + public class DmTx401CController : DmTxControllerBase, IRoutingInputsOutputs, IHasFeedback, IIROutputPorts, IComPorts + { + public DmTx401C Tx { get; private set; } + + public RoutingInputPortWithVideoStatuses AnyVideoInput { get; private set; } + public RoutingInputPortWithVideoStatuses HdmiIn { get; private set; } + public RoutingInputPortWithVideoStatuses DisplayPortIn { get; private set; } + public RoutingInputPortWithVideoStatuses VgaIn { get; private set; } + public RoutingInputPortWithVideoStatuses CompositeIn { get; private set; } + public RoutingOutputPort DmOut { get; private set; } + + public StringFeedback ActiveVideoInputFeedback { get; private set; } + + /// + /// Helps get the "real" inputs, including when in Auto + /// + public BaseDmTx401.eSourceSelection ActualVideoInput + { + get + { + if (Tx.VideoSourceFeedback != BaseDmTx401.eSourceSelection.Auto) + return Tx.VideoSourceFeedback; + else // auto + { + if (Tx.HdmiInput.SyncDetectedFeedback.BoolValue) + return BaseDmTx401.eSourceSelection.HDMI; + else if (Tx.VgaInput.SyncDetectedFeedback.BoolValue) + return BaseDmTx401.eSourceSelection.VGA; + else if (Tx.DisplayPortInput.SyncDetectedFeedback.BoolValue) + return BaseDmTx401.eSourceSelection.DisplayPort; + else if (Tx.CvbsInput.SyncDetectedFeedback.BoolValue) + return BaseDmTx401.eSourceSelection.Composite; + else + return BaseDmTx401.eSourceSelection.Disabled; + } + } + } + + public RoutingPortCollection InputPorts + { + get + { + return new RoutingPortCollection + { + HdmiIn, + DisplayPortIn, + VgaIn, + CompositeIn, + AnyVideoInput + }; + } + } + + public RoutingPortCollection OutputPorts + { + get + { + return new RoutingPortCollection { DmOut }; + } + } + + /// + /// + /// + /// + /// + /// + public DmTx401CController(string key, string name, DmTx401C tx) + : base(key, name, tx) + { + Tx = tx; + + HdmiIn = new RoutingInputPortWithVideoStatuses(DmPortName.HdmiIn, + eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 1, this, + VideoStatusHelper.GetHdmiInputStatusFuncs(tx.HdmiInput)); + DisplayPortIn = new RoutingInputPortWithVideoStatuses(DmPortName.DisplayPortIn, + eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 2, this, + VideoStatusHelper.GetDisplayPortInputStatusFuncs(tx.DisplayPortInput)); + VgaIn = new RoutingInputPortWithVideoStatuses(DmPortName.VgaIn, + eRoutingSignalType.Video, eRoutingPortConnectionType.Vga, 3, this, + VideoStatusHelper.GetVgaInputStatusFuncs(tx.VgaInput)); + CompositeIn = new RoutingInputPortWithVideoStatuses(DmPortName.CompositeIn, + eRoutingSignalType.Video, eRoutingPortConnectionType.Composite, 3, this, + VideoStatusHelper.GetVgaInputStatusFuncs(tx.VgaInput)); + + ActiveVideoInputFeedback = new StringFeedback(new Cue("ActiveVideoInput", 0, eCueType.String), + () => ActualVideoInput.ToString()); + + + var combinedFuncs = new VideoStatusFuncsWrapper + { + HdcpActiveFeedbackFunc = () => + (ActualVideoInput == eVst.HDMI + && tx.HdmiInput.VideoAttributes.HdcpActiveFeedback.BoolValue) + || (ActualVideoInput == eVst.DisplayPort + && tx.DisplayPortInput.VideoAttributes.HdcpActiveFeedback.BoolValue), + + HdcpStateFeedbackFunc = () => + { + if (ActualVideoInput == eVst.HDMI) + return tx.HdmiInput.VideoAttributes.HdcpStateFeedback.ToString(); + if (ActualVideoInput == eVst.DisplayPort) + return tx.DisplayPortInput.VideoAttributes.HdcpStateFeedback.ToString(); + return ""; + }, + + VideoResolutionFeedbackFunc = () => + { + if (ActualVideoInput == eVst.HDMI) + return tx.HdmiInput.VideoAttributes.GetVideoResolutionString(); + if (ActualVideoInput == eVst.DisplayPort) + return tx.DisplayPortInput.VideoAttributes.GetVideoResolutionString(); + if (ActualVideoInput == eVst.VGA) + return tx.VgaInput.VideoAttributes.GetVideoResolutionString(); + if (ActualVideoInput == eVst.Composite) + return tx.CvbsInput.VideoAttributes.GetVideoResolutionString(); + return ""; + }, + VideoSyncFeedbackFunc = () => + (ActualVideoInput == eVst.HDMI + && tx.HdmiInput.SyncDetectedFeedback.BoolValue) + || (ActualVideoInput == eVst.DisplayPort + && tx.DisplayPortInput.SyncDetectedFeedback.BoolValue) + || (ActualVideoInput == eVst.VGA + && tx.VgaInput.SyncDetectedFeedback.BoolValue) + || (ActualVideoInput == eVst.Composite + && tx.CvbsInput.SyncDetectedFeedback.BoolValue) + }; + + AnyVideoInput = new RoutingInputPortWithVideoStatuses(DmPortName.AnyVideoIn, + eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.None, 0, this, combinedFuncs); + + DmOut = new RoutingOutputPort(DmPortName.DmOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.DmCat, null, this); + } + + public override bool CustomActivate() + { + // Link up all of these damned events to the various RoutingPorts via a helper handler + Tx.HdmiInput.InputStreamChange += (o, a) => FowardInputStreamChange(HdmiIn, a.EventId); + Tx.HdmiInput.VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(HdmiIn, a.EventId); + + Tx.DisplayPortInput.InputStreamChange += (o, a) => FowardInputStreamChange(DisplayPortIn, a.EventId); + Tx.DisplayPortInput.VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(DisplayPortIn, a.EventId); + + Tx.VgaInput.InputStreamChange += (o, a) => FowardInputStreamChange(VgaIn, a.EventId); + Tx.VgaInput.VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(VgaIn, a.EventId); + + // Base does register and sets up comm monitoring. + return base.CustomActivate(); + } + + void Tx_BaseEvent(GenericBase device, BaseEventArgs args) + { + var id = args.EventId; + if (id == EndpointTransmitterBase.VideoSourceFeedbackEventId) + { + Debug.Console(2, this, " Video Source: {0}", Tx.VideoSourceFeedback); + } + + // ------------------------------ incomplete ----------------------------------------- + else if (id == EndpointTransmitterBase.AudioSourceFeedbackEventId) + { + Debug.Console(2, this, " Audio Source: {0}", Tx.AudioSourceFeedback); + } + } + + /// + /// Relays the input stream change to the appropriate RoutingInputPort. + /// + void FowardInputStreamChange(RoutingInputPortWithVideoStatuses inputPort, int eventId) + { + if (eventId == EndpointInputStreamEventIds.SyncDetectedFeedbackEventId) + { + inputPort.VideoStatus.VideoSyncFeedback.FireUpdate(); + AnyVideoInput.VideoStatus.VideoSyncFeedback.FireUpdate(); + } + } + + /// + /// Relays the VideoAttributes change to a RoutingInputPort + /// + void ForwardVideoAttributeChange(RoutingInputPortWithVideoStatuses inputPort, int eventId) + { + //// LOCATION: Crestron.SimplSharpPro.DM.VideoAttributeEventIds + //Debug.Console(2, this, "VideoAttributes_AttributeChange event id={0} from {1}", + // args.EventId, (sender as VideoAttributesEnhanced).Owner.GetType()); + switch (eventId) + { + case VideoAttributeEventIds.HdcpActiveFeedbackEventId: + inputPort.VideoStatus.HdcpActiveFeedback.FireUpdate(); + AnyVideoInput.VideoStatus.HdcpActiveFeedback.FireUpdate(); + break; + case VideoAttributeEventIds.HdcpStateFeedbackEventId: + inputPort.VideoStatus.HdcpStateFeedback.FireUpdate(); + AnyVideoInput.VideoStatus.HdcpStateFeedback.FireUpdate(); + break; + case VideoAttributeEventIds.HorizontalResolutionFeedbackEventId: + case VideoAttributeEventIds.VerticalResolutionFeedbackEventId: + inputPort.VideoStatus.VideoResolutionFeedback.FireUpdate(); + AnyVideoInput.VideoStatus.VideoResolutionFeedback.FireUpdate(); + break; + } + } + + public override List Feedbacks + { + get + { + List list = AnyVideoInput.VideoStatus.ToList(); + list.AddRange(base.Feedbacks); + list.Add(ActiveVideoInputFeedback); + return list; + } + } + + #region IIROutputPorts Members + public CrestronCollection IROutputPorts { get { return Tx.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return Tx.NumberOfIROutputPorts; } } + #endregion + + #region IComPorts Members + public CrestronCollection ComPorts { get { return Tx.ComPorts; } } + public int NumberOfComPorts { get { return Tx.NumberOfComPorts; } } + #endregion + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTx4k302CController.cs b/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTx4k302CController.cs new file mode 100644 index 00000000..fddc2fbe --- /dev/null +++ b/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTx4k302CController.cs @@ -0,0 +1,237 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +//using Crestron.SimplSharpPro.DeviceSupport; +using Crestron.SimplSharpPro.DM; +using Crestron.SimplSharpPro.DM.Endpoints; +using Crestron.SimplSharpPro.DM.Endpoints.Transmitters; + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.DM.Config; + +namespace PepperDash.Essentials.DM +{ + using eVst = Crestron.SimplSharpPro.DeviceSupport.eX02VideoSourceType; + + public class DmTx4k302CController : DmTxControllerBase, IRoutingInputsOutputs, IHasFeedback, + IIROutputPorts, IComPorts + { + public DmTx4k302C Tx { get; private set; } + + public RoutingInputPortWithVideoStatuses AnyVideoInput { get; private set; } + public RoutingInputPortWithVideoStatuses HdmiIn1 { get; private set; } + public RoutingInputPortWithVideoStatuses HdmiIn2 { get; private set; } + public RoutingInputPortWithVideoStatuses VgaIn { get; private set; } + public RoutingOutputPort DmOut { get; private set; } + public RoutingOutputPort HdmiLoopOut { get; private set; } + + public StringFeedback ActiveVideoInputFeedback { get; private set; } + + /// + /// Helps get the "real" inputs, including when in Auto + /// + public Crestron.SimplSharpPro.DeviceSupport.eX02VideoSourceType ActualActiveVideoInput + { + get + { + if (Tx.VideoSourceFeedback != eVst.Auto) + return Tx.VideoSourceFeedback; + else // auto + { + if (Tx.HdmiInputs[1].SyncDetectedFeedback.BoolValue) + return eVst.Hdmi1; + else if (Tx.HdmiInputs[2].SyncDetectedFeedback.BoolValue) + return eVst.Hdmi2; + else if (Tx.VgaInput.SyncDetectedFeedback.BoolValue) + return eVst.Vga; + else + return eVst.AllDisabled; + } + } + } + + public RoutingPortCollection InputPorts + { + get + { + return new RoutingPortCollection + { + HdmiIn1, + HdmiIn2, + VgaIn, + AnyVideoInput + }; + } + } + + public RoutingPortCollection OutputPorts + { + get + { + return new RoutingPortCollection { DmOut, HdmiLoopOut }; + } + } + + /// + /// + /// + /// + /// + /// + public DmTx4k302CController(string key, string name, DmTx4k302C tx) + : base(key, name, tx) + { + Tx = tx; + + HdmiIn1 = new RoutingInputPortWithVideoStatuses(DmPortName.HdmiIn1, + eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 1, this, + VideoStatusHelper.GetHdmiInputStatusFuncs(tx.HdmiInputs[1])); + HdmiIn2 = new RoutingInputPortWithVideoStatuses(DmPortName.HdmiIn2, + eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 2, this, + VideoStatusHelper.GetHdmiInputStatusFuncs(tx.HdmiInputs[2])); + VgaIn = new RoutingInputPortWithVideoStatuses(DmPortName.VgaIn, + eRoutingSignalType.Video, eRoutingPortConnectionType.Vga, 3, this, + VideoStatusHelper.GetVgaInputStatusFuncs(tx.VgaInput)); + ActiveVideoInputFeedback = new StringFeedback(new Cue("ActiveVideoInput", 0, eCueType.String), + () => ActualActiveVideoInput.ToString()); + + var combinedFuncs = new VideoStatusFuncsWrapper + { + HdcpActiveFeedbackFunc = () => + (ActualActiveVideoInput == eVst.Hdmi1 + && tx.HdmiInputs[1].VideoAttributes.HdcpActiveFeedback.BoolValue) + || (ActualActiveVideoInput == eVst.Hdmi2 + && tx.HdmiInputs[2].VideoAttributes.HdcpActiveFeedback.BoolValue), + + HdcpStateFeedbackFunc = () => + { + if (ActualActiveVideoInput == eVst.Hdmi1) + return tx.HdmiInputs[1].VideoAttributes.HdcpStateFeedback.ToString(); + if (ActualActiveVideoInput == eVst.Hdmi2) + return tx.HdmiInputs[2].VideoAttributes.HdcpStateFeedback.ToString(); + return ""; + }, + + VideoResolutionFeedbackFunc = () => + { + if (ActualActiveVideoInput == eVst.Hdmi1) + return tx.HdmiInputs[1].VideoAttributes.GetVideoResolutionString(); + if (ActualActiveVideoInput == eVst.Hdmi2) + return tx.HdmiInputs[2].VideoAttributes.GetVideoResolutionString(); + if (ActualActiveVideoInput == eVst.Vga) + return tx.VgaInput.VideoAttributes.GetVideoResolutionString(); + return ""; + }, + VideoSyncFeedbackFunc = () => + (ActualActiveVideoInput == eVst.Hdmi1 + && tx.HdmiInputs[1].SyncDetectedFeedback.BoolValue) + || (ActualActiveVideoInput == eVst.Hdmi2 + && tx.HdmiInputs[2].SyncDetectedFeedback.BoolValue) + || (ActualActiveVideoInput == eVst.Vga + && tx.VgaInput.SyncDetectedFeedback.BoolValue) + }; + + AnyVideoInput = new RoutingInputPortWithVideoStatuses(DmPortName.AnyVideoIn, + eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.None, 0, this, combinedFuncs); + + DmOut = new RoutingOutputPort(DmPortName.DmOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.DmCat, null, this); + HdmiLoopOut = new RoutingOutputPort(DmPortName.HdmiLoopOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, null, this); + } + + public override bool CustomActivate() + { + // Link up all of these damned events to the various RoutingPorts via a helper handler + Tx.HdmiInputs[1].InputStreamChange += (o, a) => FowardInputStreamChange(HdmiIn1, a.EventId); + Tx.HdmiInputs[1].VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(HdmiIn1, a.EventId); + + Tx.HdmiInputs[2].InputStreamChange += (o, a) => FowardInputStreamChange(HdmiIn2, a.EventId); + Tx.HdmiInputs[2].VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(HdmiIn2, a.EventId); + + Tx.VgaInput.InputStreamChange += (o, a) => FowardInputStreamChange(VgaIn, a.EventId); + Tx.VgaInput.VideoAttributes.AttributeChange += (o, a) => ForwardVideoAttributeChange(VgaIn, a.EventId); + + // Base does register and sets up comm monitoring. + return base.CustomActivate(); + } + + void Tx_BaseEvent(GenericBase device, BaseEventArgs args) + { + var id = args.EventId; + if (id == DmTx4k302C.VideoSourceFeedbackEventId) + { + Debug.Console(2, this, " Video Source: {0}", Tx.VideoSourceFeedback); + } + + // ------------------------------ incomplete ----------------------------------------- + else if (id == DmTx4k302C.AudioSourceFeedbackEventId) + { + Debug.Console(2, this, " Audio Source: {0}", Tx.AudioSourceFeedback); + } + } + + /// + /// Relays the input stream change to the appropriate RoutingInputPort. + /// + void FowardInputStreamChange(RoutingInputPortWithVideoStatuses inputPort, int eventId) + { + if (eventId == EndpointInputStreamEventIds.SyncDetectedFeedbackEventId) + { + inputPort.VideoStatus.VideoSyncFeedback.FireUpdate(); + AnyVideoInput.VideoStatus.VideoSyncFeedback.FireUpdate(); + } + } + + /// + /// Relays the VideoAttributes change to a RoutingInputPort + /// + void ForwardVideoAttributeChange(RoutingInputPortWithVideoStatuses inputPort, int eventId) + { + //// LOCATION: Crestron.SimplSharpPro.DM.VideoAttributeEventIds + //Debug.Console(2, this, "VideoAttributes_AttributeChange event id={0} from {1}", + // args.EventId, (sender as VideoAttributesEnhanced).Owner.GetType()); + switch (eventId) + { + case VideoAttributeEventIds.HdcpActiveFeedbackEventId: + inputPort.VideoStatus.HdcpActiveFeedback.FireUpdate(); + AnyVideoInput.VideoStatus.HdcpActiveFeedback.FireUpdate(); + break; + case VideoAttributeEventIds.HdcpStateFeedbackEventId: + inputPort.VideoStatus.HdcpStateFeedback.FireUpdate(); + AnyVideoInput.VideoStatus.HdcpStateFeedback.FireUpdate(); + break; + case VideoAttributeEventIds.HorizontalResolutionFeedbackEventId: + case VideoAttributeEventIds.VerticalResolutionFeedbackEventId: + inputPort.VideoStatus.VideoResolutionFeedback.FireUpdate(); + AnyVideoInput.VideoStatus.VideoResolutionFeedback.FireUpdate(); + break; + } + } + + public override List Feedbacks + { + get + { + List list = AnyVideoInput.VideoStatus.ToList(); + list.AddRange(base.Feedbacks); + list.Add(ActiveVideoInputFeedback); + return list; + } + } + + #region IIROutputPorts Members + public CrestronCollection IROutputPorts { get { return Tx.IROutputPorts; } } + public int NumberOfIROutputPorts { get { return Tx.NumberOfIROutputPorts; } } + #endregion + + #region IComPorts Members + public CrestronCollection ComPorts { get { return Tx.ComPorts; } } + public int NumberOfComPorts { get { return Tx.NumberOfComPorts; } } + #endregion + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTxHelpers.cs b/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTxHelpers.cs new file mode 100644 index 00000000..268531af --- /dev/null +++ b/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTxHelpers.cs @@ -0,0 +1,105 @@ +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; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.DM.Config; + +namespace PepperDash.Essentials.DM +{ + public class DmTxHelper + { + /// + /// A factory method for various DmTxControllers + /// + /// + /// + /// + /// + public static DmTxControllerBase GetDmTxController(string key, string name, string typeName, DmTxPropertiesConfig props) + { + // switch on type name... later... + + typeName = typeName.ToLower(); + //uint ipid = Convert.ToUInt16(props.Id, 16); + var ipid = props.Control.IpIdInt; + var pKey = props.ParentDeviceKey.ToLower(); + + if (pKey == "processor") + { + // Catch constructor failures, mainly dues to IPID + try + { + if (typeName.StartsWith("dmtx201")) + return new DmTx201SBasicController(key, name, new DmTx201C(ipid, Global.ControlSystem)); + if (typeName.StartsWith("dmtx4k302")) + return new DmTx4k302CController(key, name, new DmTx4k302C(ipid, Global.ControlSystem)); + if (typeName.StartsWith("dmtx401")) + return new DmTx401CController(key, name, new DmTx401C(ipid, Global.ControlSystem)); + Debug.Console(0, "{1} WARNING: Cannot create DM-TX of type: '{0}'", typeName, key); + } + catch (Exception e) + { + Debug.Console(0, "[{0}] WARNING: Cannot create DM-TX device: {1}", key, e.Message); + } + } + else + { + var parentDev = DeviceManager.GetDeviceForKey(pKey); + if (!(parentDev is DmChassisController)) + { + Debug.Console(0, "Cannot create DM device '{0}'. '{1}' is not a DM Chassis.", + key, pKey); + return null; + } + + // Get the Crestron chassis and link stuff up + var switchDev = parentDev as DmChassisController; + var chassis = switchDev.Chassis; + + var num = props.ParentInputNumber; + if (num <= 0 || num > chassis.NumberOfInputs) + { + Debug.Console(0, "Cannot create DM device '{0}'. Input number '{1}' is out of range", + key, num); + return null; + } + + // Catch constructor failures, mainly dues to IPID + try + { + if (typeName.StartsWith("dmtx201")) + return new DmTx201SBasicController(key, name, new DmTx201S(ipid, chassis.Inputs[num])); + + if (typeName.StartsWith("dmtx4k302")) + return new DmTx4k302CController(key, name, new DmTx4k302C(ipid, chassis.Inputs[num])); + + if (typeName.StartsWith("dmtx401")) + return new DmTx401CController(key, name, new DmTx401C(ipid, chassis.Inputs[num])); + } + catch (Exception e) + { + Debug.Console(0, "[{0}] WARNING: Cannot create DM-TX device: {1}", key, e.Message); + } + } + + return null; + } + } + + /// + /// + /// + public abstract class DmTxControllerBase : CrestronGenericBaseDevice + { + public DmTxControllerBase(string key, string name, EndpointTransmitterBase hardware) + : base(key, name, hardware) { } + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Essentials_DM.csproj b/Essentials DM/Essentials_DM/Essentials_DM.csproj new file mode 100644 index 00000000..989755df --- /dev/null +++ b/Essentials DM/Essentials_DM/Essentials_DM.csproj @@ -0,0 +1,126 @@ + + + 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 + ..\..\..\pepperdash-simplsharp-core\Pepperdash Core\Pepperdash Core\bin\PepperDash_Core.dll + + + False + ..\..\..\essentials-core\PepperDashEssentialsBase\PepperDashEssentialsBase\bin\PepperDash_Essentials_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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + rem S# Pro preparation will execute after these operations + + \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Essentials_DM.projectinfo b/Essentials DM/Essentials_DM/Essentials_DM.projectinfo new file mode 100644 index 00000000..5cd01021 Binary files /dev/null and b/Essentials DM/Essentials_DM/Essentials_DM.projectinfo differ diff --git a/Essentials DM/Essentials_DM/Extensions.cs b/Essentials DM/Essentials_DM/Extensions.cs new file mode 100644 index 00000000..1ca7d9af --- /dev/null +++ b/Essentials DM/Essentials_DM/Extensions.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; +using Crestron.SimplSharpPro.DM; +using Crestron.SimplSharpPro.DM.Cards; + +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.DM +{ + public static class VideoAttributesBasicExtensions + { + public static string GetVideoResolutionString(this VideoAttributesBasic va) + { + ushort h = va.HorizontalResolutionFeedback.UShortValue; + ushort v = va.VerticalResolutionFeedback.UShortValue; + if (h == 0 || v == 0) + return "n/a"; + else + return string.Format("{0}x{1}", h, v); + } + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/IDmHdmiInputExtensions.cs b/Essentials DM/Essentials_DM/IDmHdmiInputExtensions.cs new file mode 100644 index 00000000..acab850c --- /dev/null +++ b/Essentials DM/Essentials_DM/IDmHdmiInputExtensions.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro.DM; + +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.DM +{ + public static class IBasicDmInputExtensions + { + public static VideoStatusFuncsWrapper GetVideoStatusFuncsWrapper(this IBasicDMInput input) + { + var va = (input as IVideoAttributesEnhanced).VideoAttributes; + return new VideoStatusFuncsWrapper + { + HasVideoStatusFunc = () => true, + HdcpActiveFeedbackFunc = () => va.HdcpActiveFeedback.BoolValue, + HdcpStateFeedbackFunc = () => va.HdcpStateFeedback.ToString(), + VideoResolutionFeedbackFunc = () => + { + var h = va.HorizontalResolutionFeedback.UShortValue; + var v = va.VerticalResolutionFeedback.UShortValue; + if (h == 0 || v == 0) + return "---"; + return h + "x" + v; + }, + VideoSyncFeedbackFunc = () => input.SyncDetectedFeedback.BoolValue + }; + } + } + + + public static class IEndpointHdmiInputExtensions + { + public static VideoStatusFuncsWrapper GetVideoStatusFuncsWrapper(this Crestron.SimplSharpPro.DM.Endpoints.EndpointHdmiInput input) + { + var va = (input as IVideoAttributesEnhanced).VideoAttributes; + return new VideoStatusFuncsWrapper + { + HasVideoStatusFunc = () => true, + HdcpActiveFeedbackFunc = () => va.HdcpActiveFeedback.BoolValue, + HdcpStateFeedbackFunc = () => va.HdcpStateFeedback.ToString(), + VideoResolutionFeedbackFunc = () => + { + var h = va.HorizontalResolutionFeedback.UShortValue; + var v = va.VerticalResolutionFeedback.UShortValue; + if (h == 0 || v == 0) + return "---"; + return h + "x" + v; + }, + VideoSyncFeedbackFunc = () => input.SyncDetectedFeedback.BoolValue + }; + } + } + + +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/MOVE IBasicVideoStatusFeedbacks.cs b/Essentials DM/Essentials_DM/MOVE IBasicVideoStatusFeedbacks.cs new file mode 100644 index 00000000..26b950ce --- /dev/null +++ b/Essentials DM/Essentials_DM/MOVE IBasicVideoStatusFeedbacks.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.DM +{ + public interface IBasicVideoStatusFeedbacks + { + BoolFeedback HasVideoStatusFeedback { get; } + BoolFeedback HdcpActiveFeedback { get; } + StringFeedback HdcpStateFeedback { get; } + StringFeedback VideoResolutionFeedback { get; } + BoolFeedback VideoSyncFeedback { get; } + } +} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Properties/AssemblyInfo.cs b/Essentials DM/Essentials_DM/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..f8eff059 --- /dev/null +++ b/Essentials DM/Essentials_DM/Properties/AssemblyInfo.cs @@ -0,0 +1,8 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Essentials_DM")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Essentials_DM")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyVersion("1.0.0.*")] + diff --git a/Essentials DM/Essentials_DM/Properties/ControlSystem.cfg b/Essentials DM/Essentials_DM/Properties/ControlSystem.cfg new file mode 100644 index 00000000..e69de29b diff --git a/Essentials DM/Essentials_DM/VideoStatusHelpers.cs b/Essentials DM/Essentials_DM/VideoStatusHelpers.cs new file mode 100644 index 00000000..096b1e36 --- /dev/null +++ b/Essentials DM/Essentials_DM/VideoStatusHelpers.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; +using Crestron.SimplSharpPro.DM; +using Crestron.SimplSharpPro.DM.Endpoints; + +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.DM +{ + /// + /// These methods will get the funcs that return values from various video port types... + /// + public class VideoStatusHelper + { + public static VideoStatusFuncsWrapper GetHdmiInputStatusFuncs(HdmiInputPort port) + { + return new VideoStatusFuncsWrapper + { + HdcpActiveFeedbackFunc = () => port.VideoAttributes.HdcpActiveFeedback.BoolValue, + HdcpStateFeedbackFunc = () => port.VideoAttributes.HdcpStateFeedback.ToString(), + VideoResolutionFeedbackFunc = () => port.VideoAttributes.GetVideoResolutionString(), + VideoSyncFeedbackFunc = () => port.SyncDetectedFeedback.BoolValue + }; + } + + public static VideoStatusFuncsWrapper GetHdmiInputStatusFuncs(EndpointHdmiInput port) + { + return new VideoStatusFuncsWrapper + { + VideoResolutionFeedbackFunc = () => port.VideoAttributes.GetVideoResolutionString(), + VideoSyncFeedbackFunc = () => port.SyncDetectedFeedback.BoolValue + }; + } + + public static VideoStatusFuncsWrapper GetVgaInputStatusFuncs(EndpointVgaInput port) + { + return new VideoStatusFuncsWrapper + { + HdcpActiveFeedbackFunc = () => port.VideoAttributes.HdcpActiveFeedback.BoolValue, + HdcpStateFeedbackFunc = () => port.VideoAttributes.HdcpStateFeedback.ToString(), + VideoResolutionFeedbackFunc = () => port.VideoAttributes.GetVideoResolutionString(), + VideoSyncFeedbackFunc = () => port.SyncDetectedFeedback.BoolValue + }; + } + + public static VideoStatusFuncsWrapper GetDmInputStatusFuncs(DMInputPort port) + { + return new VideoStatusFuncsWrapper + { + HdcpActiveFeedbackFunc = () => port.VideoAttributes.HdcpActiveFeedback.BoolValue, + HdcpStateFeedbackFunc = () => port.VideoAttributes.HdcpStateFeedback.ToString(), + VideoResolutionFeedbackFunc = () => port.VideoAttributes.GetVideoResolutionString(), + VideoSyncFeedbackFunc = () => port.SyncDetectedFeedback.BoolValue + }; + } + + public static VideoStatusFuncsWrapper GetDisplayPortInputStatusFuncs(EndpointDisplayPortInput port) + { + return new VideoStatusFuncsWrapper + { + HdcpActiveFeedbackFunc = () => port.VideoAttributes.HdcpActiveFeedback.BoolValue, + HdcpStateFeedbackFunc = () => port.VideoAttributes.HdcpStateFeedback.ToString(), + VideoResolutionFeedbackFunc = () => port.VideoAttributes.GetVideoResolutionString(), + VideoSyncFeedbackFunc = () => port.SyncDetectedFeedback.BoolValue + }; + } + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common.sln b/Essentials Devices Common/Essentials Devices Common.sln new file mode 100644 index 00000000..84fa1346 --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Essentials Devices Common", "Essentials Devices Common\Essentials Devices Common.csproj", "{892B761C-E479-44CE-BD74-243E9214AF13}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {892B761C-E479-44CE-BD74-243E9214AF13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {892B761C-E479-44CE-BD74-243E9214AF13}.Debug|Any CPU.Build.0 = Debug|Any CPU + {892B761C-E479-44CE-BD74-243E9214AF13}.Release|Any CPU.ActiveCfg = Release|Any CPU + {892B761C-E479-44CE-BD74-243E9214AF13}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Essentials Devices Common/Essentials Devices Common/Audio/GenericAudioOut.cs b/Essentials Devices Common/Essentials Devices Common/Audio/GenericAudioOut.cs new file mode 100644 index 00000000..d9ba06cf --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/Audio/GenericAudioOut.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Routing; + +namespace PepperDash.Essentials.Devices.Common +{ + /// + /// Represents and audio endpoint + /// + public class GenericAudioOut : Device, IRoutingSinkNoSwitching + { + public RoutingInputPort AnyAudioIn { get; private set; } + + public GenericAudioOut(string key, string name) + : base(key, name) + { + AnyAudioIn = new RoutingInputPort(RoutingPortNames.AnyAudioIn, eRoutingSignalType.Audio, + eRoutingPortConnectionType.LineAudio, null, this); + } + + #region IRoutingInputs Members + + public RoutingPortCollection InputPorts + { + get { return new RoutingPortCollection { AnyAudioIn }; } + } + + #endregion + } + + + /// + /// Allows a zone-device's audio control to be attached to the endpoint, for easy routing and + /// control switching. Will also set the zone name on attached devices, like SWAMP or other + /// hardware with names built in. + /// + public class GenericAudioOutWithVolume : GenericAudioOut, IHasVolumeDevice + { + public string VolumeDeviceKey { get; private set; } + public uint VolumeZone { get; private set; } + + public IBasicVolumeControls VolumeDevice + { + get + { + var dev = DeviceManager.GetDeviceForKey(VolumeDeviceKey); + if (dev is IAudioZones) + return (dev as IAudioZones).Zone[VolumeZone]; + else return dev as IBasicVolumeControls; + } + } + + /// + /// Constructor - adds the name to the attached audio device, if appropriate. + /// + /// + /// + /// + /// + public GenericAudioOutWithVolume(string key, string name, string audioDevice, uint zone) + : base(key, name) + { + VolumeDeviceKey = audioDevice; + VolumeZone = zone; + } + + } + +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Crestron/Gateways/CenRfgwController.cs b/Essentials Devices Common/Essentials Devices Common/Crestron/Gateways/CenRfgwController.cs new file mode 100644 index 00000000..ee37674a --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/Crestron/Gateways/CenRfgwController.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.Gateways; + +using PepperDash.Core; +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.Devices.Common +{ + public class CenRfgwController : CrestronGenericBaseDevice + { + public GatewayBase Gateway { get { return Hardware as GatewayBase; } } + + /// + /// Constructor for the on-board gateway + /// + /// + /// + public CenRfgwController(string key, string name, GatewayBase gateway) : + base(key, name, gateway) + { + } + + public static CenRfgwController GetNewExGatewayController(string key, string name, string id, string gatewayType) + { + uint uid; + eExGatewayType type; + try + { + uid = Convert.ToUInt32(id, 16); + type = (eExGatewayType)Enum.Parse(typeof(eExGatewayType), gatewayType, true); + var cs = Global.ControlSystem; + + GatewayBase gw = null; + switch (type) + { + case eExGatewayType.Ethernet: + gw = new CenRfgwEx(uid, cs); + break; + case eExGatewayType.EthernetShared: + gw = new CenRfgwExEthernetSharable(uid, cs); + break; + case eExGatewayType.Cresnet: + gw = new CenRfgwExCresnet(uid, cs); + break; + } + return new CenRfgwController(key, name, gw); + } + catch (Exception) + { + Debug.Console(0, "ERROR: Cannot create EX Gateway, id {0}, type {1}", id, gatewayType); + return null; + } + } + public static CenRfgwController GetNewErGatewayController(string key, string name, string id, string gatewayType) + { + uint uid; + eExGatewayType type; + try + { + uid = Convert.ToUInt32(id, 16); + type = (eExGatewayType)Enum.Parse(typeof(eExGatewayType), gatewayType, true); + var cs = Global.ControlSystem; + + GatewayBase gw = null; + switch (type) + { + case eExGatewayType.Ethernet: + gw = new CenErfgwPoe(uid, cs); + break; + case eExGatewayType.EthernetShared: + gw = new CenErfgwPoeEthernetSharable(uid, cs); + break; + case eExGatewayType.Cresnet: + gw = new CenErfgwPoeCresnet(uid, cs); + break; + } + return new CenRfgwController(key, name, gw); + } + catch (Exception) + { + Debug.Console(0, "ERROR: Cannot create EX Gateway, id {0}, type {1}", id, gatewayType); + return null; + } + } + + + /// + /// Gets the actual Crestron EX gateway for a given key. "processor" or the key of + /// a CenRfgwExController in DeviceManager + /// + /// + /// Either processor GW or Gateway property of CenRfgwExController + public static GatewayBase GetExGatewayBaseForKey(string key) + { + key = key.ToLower(); + if (key == "processor" && Global.ControlSystem.SupportsInternalRFGateway) + return Global.ControlSystem.ControllerRFGatewayDevice; + var gwCont = DeviceManager.GetDeviceForKey(key) as CenRfgwController; + if (gwCont != null) + return gwCont.Gateway; + + return null; + } + } + + public enum eExGatewayType + { + Ethernet, EthernetShared, Cresnet + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraForteDsp.cs b/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraForteDsp.cs new file mode 100644 index 00000000..324e0c5c --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraForteDsp.cs @@ -0,0 +1,304 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using PepperDash.Core; +using PepperDash.Essentials.Core; +using System.Text.RegularExpressions; + + +namespace PepperDash.Essentials.Devices.Common.DSP +{ + + // QUESTIONS: + // + // When subscribing, just use the Instance ID for Custom Name? + + // Verbose on subscriptions? + + // ! "publishToken":"name" "value":-77.0 + // ! "myLevelName" -77 + + + public class BiampTesiraForteDsp : DspBase + { + public IBasicCommunication Communication { get; private set; } + public CommunicationGather PortGather { get; private set; } + public StatusMonitorBase CommunicationMonitor { get; private set; } + + new public Dictionary LevelControlPoints { get; private set; } + + public bool isSubscribed; + + CrestronQueue CommandQueue; + + //new public Dictionary DialerControlPoints { get; private set; } + + //new public Dictionary SwitcherControlPoints { get; private set; } + + /// + /// Shows received lines as hex + /// + public bool ShowHexResponse { get; set; } + + public BiampTesiraForteDsp(string key, string name, IBasicCommunication comm, BiampTesiraFortePropertiesConfig props) : + base(key, name) + { + CommandQueue = new CrestronQueue(20); + + Communication = comm; + var socket = comm as ISocketStatus; + if (socket != null) + { + // This instance uses IP control + socket.ConnectionChange += new EventHandler(socket_ConnectionChange); + } + else + { + // This instance uses RS-232 control + } + PortGather = new CommunicationGather(Communication, '\x0a'); + PortGather.LineReceived += this.Port_LineReceived; + if (props.CommunicationMonitorProperties != null) + { + CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, props.CommunicationMonitorProperties); + } + else + { +#warning Need to deal with this poll string + CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 120000, 120000, 300000, ""); + } + + LevelControlPoints = new Dictionary(); + + foreach (KeyValuePair block in props.LevelControlBlocks) + { + this.LevelControlPoints.Add(block.Key, new TesiraForteLevelControl(block.Value, this)); + } + + } + + public override bool CustomActivate() + { + Communication.Connect(); + CommunicationMonitor.StatusChange += (o, a) => { Debug.Console(2, this, "Communication monitor state: {0}", CommunicationMonitor.Status); }; + CommunicationMonitor.Start(); + + CrestronConsole.AddNewConsoleCommand(SendLine, "send" + Key, "", ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(s => Communication.Connect(), "con" + Key, "", ConsoleAccessLevelEnum.AccessOperator); + return true; + } + + void socket_ConnectionChange(object sender, GenericSocketStatusChageEventArgs e) + { + if (e.Client.IsConnected) + { + Debug.Console(2, this, "Socket Status Change: {0}", e.Client.ClientStatus.ToString()); + // Maybe wait for message indicating valid TTP session + } + } + + /// + /// Initiates the subscription process to the DSP + /// + void SubscribeToAttributes() + { + EnqueueCommand("SESSION set verbose true"); + + foreach (KeyValuePair level in LevelControlPoints) + { + level.Value.Subscribe(); + } + + ResetSubscriptionTimer(); + } + + + + void ResetSubscriptionTimer() + { +#warning Add code to create/reset a CTimer to periodically check for subscribtion status + + isSubscribed = true; + + //CTimer SubscribtionTimer = new CTimer( + } + + /// + /// Handles a response message from the DSP + /// + /// + /// + void Port_LineReceived(object dev, GenericCommMethodReceiveTextArgs args) + { + if (Debug.Level == 2) + Debug.Console(2, this, "RX: '{0}'", + ShowHexResponse ? ComTextHelper.GetEscapedText(args.Text) : args.Text); + + try + { + if (args.Text.IndexOf("Welcome to the Tesira Text Protocol Server...") > -1) + { + // Indicates a new TTP session + + SubscribeToAttributes(); + } + else if (args.Text.IndexOf("publishToken") > -1) + { + // response is from a subscribed attribute + + string pattern = "! \"publishToken\":[\"](.*)[\"] \"value\":(.*)"; + + Match match = Regex.Match(args.Text, pattern); + + if (match.Success) + { + + string key; + + string customName; + + string value; + + customName = match.Groups[1].Value; + + // Finds the key (everything before the '~' character + key = customName.Substring(0, customName.IndexOf("~", 0) - 1); + + value = match.Groups[2].Value; + + foreach (KeyValuePair controlPoint in LevelControlPoints) + { + if (customName == controlPoint.Value.LevelCustomName || customName == controlPoint.Value.MuteCustomName) + { + controlPoint.Value.ParseSubscriptionMessage(customName, value); + return; + } + + } + } + + /// same for dialers + /// same for switchers + + } + else if (args.Text.IndexOf("+OK") > -1) + { + if (args.Text.Length > 4) // Check for a simple "+OK" only 'ack' repsonse + return; + + // response is not from a subscribed attribute. From a get/set/toggle/increment/decrement command + + if (!CommandQueue.IsEmpty) + { + if(CommandQueue.Peek() is QueuedCommand) + { + // Expected response belongs to a child class + QueuedCommand tempCommand = (QueuedCommand)CommandQueue.Dequeue(); + + tempCommand.ControlPoint.ParseGetMessage(tempCommand.AttributeCode, args.Text); + } + else + { + // Expected response belongs to this class + string temp = (string)CommandQueue.Dequeue(); + + } + + SendNextQueuedCommand(); + + } + + + } + else if (args.Text.IndexOf("-ERR") > -1) + { + // Error response + + if (args.Text == "-ERR ALREADY_SUBSCRIBED") + { + // Subscription still valid + ResetSubscriptionTimer(); + } + else + { + SubscribeToAttributes(); + } + + } + } + catch (Exception e) + { + if (Debug.Level == 2) + Debug.Console(2, this, "Error parsing response: '{0}'\n{1}", args.Text, e); + } + + } + + /// + /// Sends a command to the DSP (with delimiter appended) + /// + /// Command to send + public void SendLine(string s) + { + Debug.Console(2, this, "TX: '{0}'", s); + Communication.SendText(s + "\x0a"); + } + + /// + /// Adds a command from a child module to the queue + /// + /// Command object from child module + public void EnqueueCommand(QueuedCommand commandToEnqueue) + { + CommandQueue.Enqueue(commandToEnqueue); + } + + /// + /// Adds a raw string command to the queue + /// + /// + public void EnqueueCommand(string command) + { + CommandQueue.Enqueue(command); + } + + /// + /// Sends the next queued command to the DSP + /// + void SendNextQueuedCommand() + { + if (CommandQueue.Peek() is QueuedCommand) + { + QueuedCommand nextCommand = new QueuedCommand(); + + nextCommand = (QueuedCommand)CommandQueue.Peek(); + + SendLine(nextCommand.Command); + } + else + { + string nextCommand = (string)CommandQueue.Peek(); + + SendLine(nextCommand); + } + } + + /// + /// Sends a command to execute a preset + /// + /// Preset Name + public override void RunPreset(string name) + { + SendLine(string.Format("DEVICE recallPreset {0}", name)); + } + + public class QueuedCommand + { + public string Command { get; set; } + public string AttributeCode { get; set; } + public TesiraForteControlPoint ControlPoint { get; set; } + } + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraForteDspLevel.cs b/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraForteDspLevel.cs new file mode 100644 index 00000000..ec656b9f --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraForteDspLevel.cs @@ -0,0 +1,360 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using PepperDash.Core; +using PepperDash.Essentials.Core; +using System.Text.RegularExpressions; + + +namespace PepperDash.Essentials.Devices.Common.DSP +{ + + // QUESTIONS: + // + // When subscribing, just use the Instance ID for Custom Name? + + // Verbose on subscriptions? + + // ! "publishToken":"name" "value":-77.0 + // ! "myLevelName" -77 + +#warning Working here when set aside for config editor work + + public class TesiraForteLevelControl : TesiraForteControlPoint, IDspLevelControl, IKeyed + { + bool _IsMuted; + ushort _VolumeLevel; + + public BoolFeedback MuteFeedback { get; private set; } + + public IntFeedback VolumeLevelFeedback { get; private set; } + + + public bool Enabled { get; set; } + public string ControlPointTag { get { return base.InstanceTag; } } + + /// + /// Used for to identify level subscription values + /// + public string LevelCustomName { get; private set; } + + /// + /// Used for to identify mute subscription values + /// + public string MuteCustomName { get; private set; } + + /// + /// Minimum fader level + /// + double MinLevel; + + /// + /// Maximum fader level + /// + double MaxLevel; + + /// + /// Checks if a valid subscription string has been recieved for all subscriptions + /// + public bool IsSubsribed + { + get + { + bool isSubscribed = false; + + if (HasMute && MuteIsSubscribed) + isSubscribed = true; + + if (HasLevel && LevelIsSubscribed) + isSubscribed = true; + + return isSubscribed; + } + } + + public bool AutomaticUnmuteOnVolumeUp { get; private set; } + + public bool HasMute { get; private set; } + + public bool HasLevel { get; private set; } + + bool MuteIsSubscribed; + + bool LevelIsSubscribed; + + public TesiraForteLevelControl(string label, string id, int index1, int index2, bool hasMute, bool hasLevel, BiampTesiraForteDsp parent) + : base(id, index1, index2, parent) + { + Initialize(label, hasMute, hasLevel); + } + + public TesiraForteLevelControl(BiampTesiraForteLevelControlBlockConfig config, BiampTesiraForteDsp parent) + : base(config.InstanceTag, config.Index1, config.Index2, parent) + { + Initialize(config.Label, config.HasMute, config.HasLevel); + } + + + /// + /// Initializes this attribute based on config values and generates subscriptions commands and adds commands to the parent's queue. + /// + public void Initialize(string label, bool hasMute, bool hasLevel) + { + Key = string.Format("{0}-{1}", Parent.Key, label); + + DeviceManager.AddDevice(this); + + Debug.Console(2, this, "Adding LevelControl '{0}'", Key); + + this.IsSubscribed = false; + + MuteFeedback = new BoolFeedback(() => _IsMuted); + + VolumeLevelFeedback = new IntFeedback(() => _VolumeLevel); + + HasMute = hasMute; + HasLevel = hasLevel; + } + + public void Subscribe() + { + // Do subscriptions and blah blah + + // Subscribe to mute + if (this.HasMute) + { + MuteCustomName = string.Format("{0}~mute{1}", this.InstanceTag, this.Index1); + + SendSubscriptionCommand(MuteCustomName, "mute", 500); + } + + // Subscribe to level + if (this.HasLevel) + { + LevelCustomName = string.Format("{0}~level{1}", this.InstanceTag, this.Index1); + + SendSubscriptionCommand(LevelCustomName, "level", 250); + + SendFullCommand("get", "minLevel", null); + + SendFullCommand("get", "maxLevel", null); + } + } + + + /// + /// Parses the response from the DspBase + /// + /// + /// + public void ParseSubscriptionMessage(string customName, string value) + { + + // Check for valid subscription response + + if (this.HasMute && customName == MuteCustomName) + { + //if (value.IndexOf("+OK") > -1) + //{ + // int pointer = value.IndexOf(" +OK"); + + // MuteIsSubscribed = true; + + // // Removes the +OK + // value = value.Substring(0, value.Length - (value.Length - (pointer - 1))); + //} + + if (value.IndexOf("true") > -1) + { + _IsMuted = true; + MuteIsSubscribed = true; + + } + else if (value.IndexOf("false") > -1) + { + _IsMuted = false; + MuteIsSubscribed = true; + } + + MuteFeedback.FireUpdate(); + } + else if (this.HasLevel && customName == LevelCustomName) + { + //if (value.IndexOf("+OK") > -1) + //{ + // int pointer = value.IndexOf(" +OK"); + + // LevelIsSubscribed = true; + + //} + + var _value = Double.Parse(value); + + _VolumeLevel = (ushort)Scale(_value, MinLevel, MaxLevel, 0, 65536); + + LevelIsSubscribed = true; + + VolumeLevelFeedback.FireUpdate(); + } + + } + + /// + /// Parses a non subscription response + /// + /// The attribute code of the command + /// The message to parse + public override void ParseGetMessage(string attributeCode, string message) + { + try + { + // Parse a "+OK" message + string pattern = "+OK \"value\":(.*)"; + + Match match = Regex.Match(message, pattern); + + if (match.Success) + { + + string value; + + if (message.IndexOf("\"value\":") > -1) + { + value = message.Substring(message.IndexOf(":"), message.Length - message.IndexOf(":")); + + switch (attributeCode) + { + case "minLevel": + { + MinLevel = Double.Parse(value); + + break; + } + case "maxLevel": + { + MaxLevel = Double.Parse(value); + + break; + } + default: + { + Debug.Console(2, "Response does not match expected attribute codes: '{0}'", message); + + break; + } + } + } + } + } + catch (Exception e) + { + Debug.Console(2, "Unable to parse message: '{0}'\n{1}", message, e); + } + + } + + /// + /// Turns the mute off + /// + public void MuteOff() + { + SendFullCommand("set", "mute", "false"); + } + + /// + /// Turns the mute on + /// + public void MuteOn() + { + SendFullCommand("set", "mute", "true"); + } + + /// + /// Sets the volume to a specified level + /// + /// + public void SetVolume(ushort level) + { + // Unmute volume if new level is higher than existing + if (level > _VolumeLevel && AutomaticUnmuteOnVolumeUp) + if(!_IsMuted) + MuteOff(); + + double volumeLevel = Scale(level, 0, 65535, MinLevel, MaxLevel); + + SendFullCommand("Set", "level", volumeLevel.ToString()); + } + + /// + /// Toggles mute status + /// + public void MuteToggle() + { + SendFullCommand("toggle", "mute", ""); + } + + /// + /// Decrements volume level + /// + /// + public void VolumeDown(bool pressRelease) + { + SendFullCommand("decrement", "level", ""); + } + + /// + /// Increments volume level + /// + /// + public void VolumeUp(bool pressRelease) + { + SendFullCommand("increment", "level", ""); + + if (AutomaticUnmuteOnVolumeUp) + if (!_IsMuted) + MuteOff(); + } + + /// + /// Scales the input from the input range to the output range + /// + /// + /// + /// + /// + /// + /// + int Scale(int input, int inMin, int inMax, int outMin, int outMax) + { + int inputRange = inMax - inMin; + + int outputRange = outMax - outMin; + + var output = (((input-inMin) * outputRange) / inputRange ) - outMin; + + return output; + } + + /// + /// Scales the input from the input range to the output range + /// + /// + /// + /// + /// + /// + /// + double Scale(double input, double inMin, double inMax, double outMin, double outMax) + { + double inputRange = inMax - inMin; + + double outputRange = outMax - outMin; + + var output = (((input - inMin) * outputRange) / inputRange) - outMin; + + return output; + } + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraFortePropertiesConfig.cs b/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraFortePropertiesConfig.cs new file mode 100644 index 00000000..1b4ae8a1 --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraFortePropertiesConfig.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +using PepperDash.Core; +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.Devices.Common.DSP +{ + /// + /// + /// + public class BiampTesiraFortePropertiesConfig + { + public CommunicationMonitorConfig CommunicationMonitorProperties { get; set; } + + public ControlPropertiesConfig Control { get; set; } + + /// + /// These are key-value pairs, string id, string type. + /// Valid types are level and mute. + /// Need to include the index values somehow + /// + public Dictionary LevelControlBlocks { get; set; } + // public Dictionary DialerControlBlocks {get; set;} + } + + public class BiampTesiraForteLevelControlBlockConfig + { + public bool Enabled { get; set; } + public string Label { get; set; } + public string InstanceTag { get; set; } + public int Index1 { get; set; } + public int Index2 { get; set; } + public bool HasMute { get; set; } + public bool HasLevel { get; set; } + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/TesiraForteControlPoint.cs b/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/TesiraForteControlPoint.cs new file mode 100644 index 00000000..cd076139 --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/TesiraForteControlPoint.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +namespace PepperDash.Essentials.Devices.Common.DSP +{ + public abstract class TesiraForteControlPoint : DspControlPoint + { + public string Key { get; protected set; } + + public string InstanceTag { get; set; } + public int Index1 { get; private set; } + public int Index2 { get; private set; } + public BiampTesiraForteDsp Parent { get; private set; } + + public bool IsSubscribed { get; protected set; } + + protected TesiraForteControlPoint(string id, int index1, int index2, BiampTesiraForteDsp parent) + { + InstanceTag = id; + Index1 = index1; + Index2 = index2; + Parent = parent; + } + + virtual public void Initialize() + { + } + + /// + /// Sends a command to the DSP + /// + /// command + /// attribute code + /// value (use "" if not applicable) + public virtual void SendFullCommand(string command, string attributeCode, string value) + { + // Command Format: InstanceTag get/set/toggle/increment/decrement/subscribe/unsubscribe attributeCode [index] [value] + // Ex: "RoomLevel set level 1.00" + + string cmd; + + if (attributeCode == "level" || attributeCode == "mute" || attributeCode == "minLevel" || attributeCode == "maxLevel" || attributeCode == "label" || attributeCode == "rampInterval" || attributeCode == "rampStep") + { + //Command requires Index + + if (String.IsNullOrEmpty(value)) + { + // format command without value + cmd = string.Format("{0} {1} {2} {3}", InstanceTag, command, attributeCode, Index1); + } + else + { + // format commadn with value + cmd = string.Format("{0} {1} {2} {3} {4}", InstanceTag, command, attributeCode, Index1, value); + } + + } + else + { + //Command does not require Index + + if (String.IsNullOrEmpty(value)) + { + cmd = string.Format("{0} {1} {2} {3}", InstanceTag, command, attributeCode, value); + } + else + { + cmd = string.Format("{0} {1} {2}", InstanceTag, command, attributeCode); + } + } + + + Parent.EnqueueCommand(new BiampTesiraForteDsp.QueuedCommand{ Command = cmd, AttributeCode = attributeCode, ControlPoint = this }); + } + + virtual public void ParseGetMessage(string attributeCode, string message) + { + } + + + + public virtual void SendSubscriptionCommand(string customName, string attributeCode, int responseRate) + { + // Subscription string format: InstanceTag subscribe attributeCode Index1 customName responseRate + // Ex: "RoomLevel subscribe level 1 MyRoomLevel 500" + + string cmd; + + if (responseRate > 0) + { + cmd = string.Format("{0} subscribe {1} {2} {3} {4}", InstanceTag, attributeCode, Index1, customName, responseRate); + } + else + { + cmd = string.Format("{0} subscribe {1} {2} {3}", InstanceTag, attributeCode, Index1, customName); + } + + Parent.SendLine(cmd); + } + + + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/TesiraForteMuteControl.cs b/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/TesiraForteMuteControl.cs new file mode 100644 index 00000000..82689408 --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/TesiraForteMuteControl.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +using PepperDash.Core; +using PepperDash.Essentials.Core; + + +namespace PepperDash.Essentials.Devices.Common.DSP +{ + + //QUESTIONS: + + //When subscribing, just use the Instance ID for Custom Name? + + //Verbose on subscriptions? + + //! "publishToken":"name" "value":-77.0 + //! "myLevelName" -77 + + //public class TesiraForteMuteControl : IDspLevelControl + //{ + // BiampTesiraForteDsp Parent; + // bool _IsMuted; + // ushort _VolumeLevel; + + // public TesiraForteMuteControl(string id, BiampTesiraForteDsp parent) + // : base(id) + // { + // Parent = parent; + // } + + // public void Initialize() + // { + + // } + + // protected override Func MuteFeedbackFunc + // { + // get { return () => _IsMuted; } + // } + + // protected override Func VolumeLevelFeedbackFunc + // { + // get { return () => _VolumeLevel; } + // } + + // public override void MuteOff() + // { + // throw new NotImplementedException(); + // } + + // public override void MuteOn() + // { + // throw new NotImplementedException(); + // } + + // public override void SetVolume(ushort level) + // { + // throw new NotImplementedException(); + // } + + // public override void MuteToggle() + // { + // } + + // public override void VolumeDown(bool pressRelease) + // { + // throw new NotImplementedException(); + // } + + // public override void VolumeUp(bool pressRelease) + // { + // throw new NotImplementedException(); + // } + //} +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/DSP/DspBase.cs b/Essentials Devices Common/Essentials Devices Common/DSP/DspBase.cs new file mode 100644 index 00000000..fd8973f0 --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/DSP/DspBase.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +using PepperDash.Core; +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.Devices.Common.DSP +{ + public abstract class DspBase : Device + { + public Dictionary LevelControlPoints { get; private set; } + + public Dictionary DialerControlPoints { get; private set; } + + public Dictionary SwitcherControlPoints { get; private set; } + + public abstract void RunPreset(string name); + + public DspBase(string key, string name) : + base(key, name) { } + + + // in audio call feedback + + // VOIP + // Phone dialer + } + + // Fusion + // Privacy state + // Online state + // level/mutes ? + + // AC Log call stats + + // Typical presets: + // call default preset to restore levels and mutes + + public abstract class DspControlPoint + { + //string Key { get; protected set; } + } + + + + // Main program + // VTC + // ATC + // Mics, unusual + + public interface IDspLevelControl : IBasicVolumeWithFeedback + { + /// + /// In BiAmp: Instance Tag, QSC: Named Control, Polycom: + /// + string ControlPointTag { get; } + int Index1 { get; } + int Index2 { get; } + bool HasMute { get; } + bool HasLevel { get; } + bool AutomaticUnmuteOnVolumeUp { get; } + } + + //public abstract class DspLevelControl : DspControlPoint, IBasicVolumeWithFeedback + //{ + // protected abstract Func MuteFeedbackFunc { get; } + // protected abstract Func VolumeLevelFeedbackFunc { get; } + + // public DspLevelControl(string id) + // { + // MuteFeedback = new BoolFeedback(MuteFeedbackFunc); + // VolumeLevelFeedback = new IntFeedback(VolumeLevelFeedbackFunc); + // } + + // // Poll and listen for these + // // Max value + // // Min value + // #region IBasicVolumeWithFeedback Members + + // public BoolFeedback MuteFeedback { get; private set; } + + // public abstract void MuteOff(); + + // public abstract void MuteOn(); + + // public abstract void SetVolume(ushort level); + + // public IntFeedback VolumeLevelFeedback { get; private set; } + + // #endregion + + // #region IBasicVolumeControls Members + + // public abstract void MuteToggle(); + + // public abstract void VolumeDown(bool pressRelease); + + // public abstract void VolumeUp(bool pressRelease); + + // #endregion + //} + + // Privacy mute + public abstract class DspMuteControl : DspControlPoint + { + protected abstract Func MuteFeedbackFunc { get; } + + public DspMuteControl(string id) + { + MuteFeedback = new BoolFeedback(MuteFeedbackFunc); + } + + public BoolFeedback MuteFeedback { get; private set; } + + public abstract void MuteOff(); + + public abstract void MuteOn(); + + public abstract void MuteToggle(); + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/DSP/PolycomSoundStructure/SoundStructureBasics.cs b/Essentials Devices Common/Essentials Devices Common/DSP/PolycomSoundStructure/SoundStructureBasics.cs new file mode 100644 index 00000000..eb22c083 --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/DSP/PolycomSoundStructure/SoundStructureBasics.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.Devices.Common.DSP +{ + public class SoundStructureBasics + { + public Dictionary Levels { get; private set; } + + + } + + + +} + diff --git a/Essentials Devices Common/Essentials Devices Common/DiscPlayer/IRDiscPlayerBase.cs b/Essentials Devices Common/Essentials Devices Common/DiscPlayer/IRDiscPlayerBase.cs new file mode 100644 index 00000000..95b3eda8 --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/DiscPlayer/IRDiscPlayerBase.cs @@ -0,0 +1,308 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Routing; + +namespace PepperDash.Essentials.Devices.Common +{ + public class IRBlurayBase : Device, IDiscPlayerControls, IUiDisplayInfo, IRoutingOutputs + { + public IrOutputPortController IrPort { get; private set; } + + public uint DisplayUiType { get { return DisplayUiConstants.TypeBluray; } } + + public IRBlurayBase(string key, string name, IrOutputPortController portCont) + : base(key, name) + { + IrPort = portCont; + DeviceManager.AddDevice(portCont); + + HasKeypadAccessoryButton1 = true; + KeypadAccessoryButton1Command = "Clear"; + KeypadAccessoryButton1Label = "Clear"; + + HasKeypadAccessoryButton2 = true; + KeypadAccessoryButton2Command = "NumericEnter"; + KeypadAccessoryButton2Label = "Enter"; + + PowerIsOnFeedback = new BoolFeedback(() => _PowerIsOn); + + HdmiOut = new RoutingOutputPort(RoutingPortNames.HdmiOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, null, this); + AnyAudioOut = new RoutingOutputPort(RoutingPortNames.AnyAudioOut, eRoutingSignalType.Audio, + eRoutingPortConnectionType.DigitalAudio, null, this); + OutputPorts = new RoutingPortCollection { HdmiOut, AnyAudioOut }; + } + + + #region IDPad Members + + public void Up(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_UP_ARROW, pressRelease); + } + + public void Down(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_DN_ARROW, pressRelease); + } + + public void Left(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_LEFT_ARROW, pressRelease); + } + + public void Right(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_RIGHT_ARROW, pressRelease); + } + + public void Select(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_ENTER, pressRelease); + } + + public void Menu(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_MENU, pressRelease); + } + + public void Exit(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_EXIT, pressRelease); + } + + #endregion + + #region INumericKeypad Members + + public void Digit0(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_0, pressRelease); + } + + public void Digit1(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_1, pressRelease); + } + + public void Digit2(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_2, pressRelease); + } + + public void Digit3(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_3, pressRelease); + } + + public void Digit4(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_4, pressRelease); + } + + public void Digit5(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_5, pressRelease); + } + + public void Digit6(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_6, pressRelease); + } + + public void Digit7(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_7, pressRelease); + } + + public void Digit8(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_8, pressRelease); + } + + public void Digit9(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_9, pressRelease); + } + + /// + /// Defaults to true + /// + public bool HasKeypadAccessoryButton1 { get; set; } + + /// + /// Defaults to "-" + /// + public string KeypadAccessoryButton1Label { get; set; } + + + /// + /// Defaults to "Dash" + /// + public string KeypadAccessoryButton1Command { get; set; } + + public void KeypadAccessoryButton1(bool pressRelease) + { + IrPort.PressRelease(KeypadAccessoryButton1Command, pressRelease); + } + + /// + /// Defaults to true + /// + public bool HasKeypadAccessoryButton2 { get; set; } + + /// + /// Defaults to "Enter" + /// + public string KeypadAccessoryButton2Label { get; set; } + + + /// + /// Defaults to "Enter" + /// + public string KeypadAccessoryButton2Command { get; set; } + + public void KeypadAccessoryButton2(bool pressRelease) + { + IrPort.PressRelease(KeypadAccessoryButton2Command, pressRelease); + } + + #endregion + + #region IChannelFunctions Members + + public void ChannelUp(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_CH_PLUS, pressRelease); + } + + public void ChannelDown(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_CH_MINUS, pressRelease); + } + + public void LastChannel(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_LAST, pressRelease); + } + + public void Guide(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_GUIDE, pressRelease); + } + + public void Info(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_INFO, pressRelease); + } + + #endregion + + #region IColorFunctions Members + + public void Red(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_RED, pressRelease); + } + + public void Green(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_GREEN, pressRelease); + } + + public void Yellow(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_YELLOW, pressRelease); + } + + public void Blue(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_BLUE, pressRelease); + } + + #endregion + + #region IRoutingOutputs Members + + public RoutingOutputPort HdmiOut { get; private set; } + public RoutingOutputPort AnyAudioOut { get; private set; } + public RoutingPortCollection OutputPorts { get; private set; } + + #endregion + + #region IPower Members + + public void PowerOn() + { + IrPort.Pulse(IROutputStandardCommands.IROut_POWER_ON, 200); + _PowerIsOn = true; + } + + public void PowerOff() + { + IrPort.Pulse(IROutputStandardCommands.IROut_POWER_OFF, 200); + _PowerIsOn = false; + } + + public void PowerToggle() + { + IrPort.Pulse(IROutputStandardCommands.IROut_POWER, 200); + _PowerIsOn = false; + } + + public BoolFeedback PowerIsOnFeedback { get; set; } + bool _PowerIsOn; + + #endregion + + #region ITransport Members + + public void Play(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_PLAY, pressRelease); + } + + public void Pause(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_PAUSE, pressRelease); + } + + public void Rewind(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_RSCAN, pressRelease); + } + + public void FFwd(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_FSCAN, pressRelease); + } + + public void ChapMinus(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_TRACK_MINUS, pressRelease); + } + + public void ChapPlus(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_TRACK_PLUS, pressRelease); + } + + public void Stop(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_STOP, pressRelease); + } + + public void Record(bool pressRelease) + { + } + + #endregion + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Display/ComTcpDisplayBase.cs b/Essentials Devices Common/Essentials Devices Common/Display/ComTcpDisplayBase.cs new file mode 100644 index 00000000..da92df1f --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/Display/ComTcpDisplayBase.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using PepperDash.Core; +using PepperDash.Essentials.Core; + + +namespace PepperDash.Essentials.Devices.Displays +{ + public abstract class ComTcpDisplayBase : DisplayBase, IPower + { + /// + /// Sets the communication method for this - swaps out event handlers and output handlers + /// + public IBasicCommunication CommunicationMethod + { + get { return _CommunicationMethod; } + set + { + if (_CommunicationMethod != null) + _CommunicationMethod.BytesReceived -= this.CommunicationMethod_BytesReceived; + // Outputs??? + _CommunicationMethod = value; + if (_CommunicationMethod != null) + _CommunicationMethod.BytesReceived += this.CommunicationMethod_BytesReceived; + // Outputs? + } + } + IBasicCommunication _CommunicationMethod; + + public ComTcpDisplayBase(string key, string name) + : base(key, name) + { + + } + + + protected abstract void CommunicationMethod_BytesReceived(object sender, GenericCommMethodReceiveBytesArgs args); + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Display/DeviceFactory.cs b/Essentials Devices Common/Essentials Devices Common/Display/DeviceFactory.cs new file mode 100644 index 00000000..7928ab0d --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/Display/DeviceFactory.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronIO; +using Crestron.SimplSharpPro; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Config; + +namespace PepperDash.Essentials.Devices.Displays +{ + public class DisplayDeviceFactory + { + public static IKeyed GetDevice(DeviceConfig dc) + { + var key = dc.Key; + var name = dc.Name; + var type = dc.Type; + var properties = dc.Properties; + + var typeName = dc.Type.ToLower(); + //if (typeName == "dmmd8x8") + //{ + // var props = JsonConvert.DeserializeObject + // (properties.ToString()); + // return PepperDash.Essentials.DM.DmChassisController. + // GetDmChassisController(key, name, type, props); + //} + + try + { + if (typeName == "necmpsx") + { + var comm = CommFactory.CreateCommForDevice(dc); + if (comm != null) + return new NecPSXMDisplay(dc.Key, dc.Name, comm); + } + } + catch (Exception e) + { + Debug.Console(0, "Displays factory: Exception creating device type {0}, key {1}: {2}", dc.Type, dc.Key, e.Message); + return null; + } + + return null; + } + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Display/NECPSXMDisplay.cs b/Essentials Devices Common/Essentials Devices Common/Display/NECPSXMDisplay.cs new file mode 100644 index 00000000..e699563c --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/Display/NECPSXMDisplay.cs @@ -0,0 +1,354 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Routing; + +namespace PepperDash.Essentials.Devices.Displays +{ + /// + /// + /// + public class NecPSXMDisplay : TwoWayDisplayBase, IBasicVolumeWithFeedback, ICommunicationMonitor + { + public IBasicCommunication Communication { get; private set; } + public CommunicationGather PortGather { get; private set; } + public StatusMonitorBase CommunicationMonitor { get; private set; } + + #region Command constants + public const string InputGetCmd = "\x01\x30\x41\x30\x43\x30\x36\x02\x30\x30\x36\x30\x03\x03\x0D"; + public const string Hdmi1Cmd = "\x01\x30\x41\x30\x45\x30\x41\x02\x30\x30\x36\x30\x30\x30\x31\x31\x03\x72\x0d"; + public const string Hdmi2Cmd = "\x01\x30\x41\x30\x45\x30\x41\x02\x30\x30\x36\x30\x30\x30\x31\x32\x03\x71\x0D"; + public const string Hdmi3Cmd = "\x01\x30\x41\x30\x45\x30\x41\x02\x30\x30\x36\x30\x30\x30\x38\x32\x03\x78\x0D"; + 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 + + bool _PowerIsOn; + bool _IsWarmingUp; + bool _IsCoolingDown; + ushort _VolumeLevel; + bool _IsMuted; + + protected override Func PowerIsOnFeedbackFunc { get { return () => _PowerIsOn; } } + protected override Func IsCoolingDownFeedbackFunc { get { return () => _IsCoolingDown; } } + protected override Func IsWarmingUpFeedbackFunc { get { return () => _IsWarmingUp; } } + + /// + /// Constructor for IBasicCommunication + /// + public NecPSXMDisplay(string key, string name, IBasicCommunication comm) + : base(key, name) + { + Communication = comm; + Init(); + } + /// + /// Constructor for TCP + /// + public NecPSXMDisplay(string key, string name, string hostname, int port) + : base(key, name) + { + Communication = new GenericTcpIpClient(key + "-tcp", hostname, port, 5000); + Init(); + } + + + /// + /// Constructor for COM + /// + public NecPSXMDisplay(string key, string name, ComPort port, ComPort.ComPortSpec spec) + : base(key, name) + { + Communication = new ComPortController(key + "-com", port, spec); + Init(); + } + + 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.HdmiIn4, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, new Action(InputHdmi4), this)); + InputPorts.Add(new RoutingInputPort(RoutingPortNames.DisplayPortIn1, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.DisplayPort, new Action(InputDisplayPort1), this)); + InputPorts.Add(new RoutingInputPort(RoutingPortNames.DisplayPortIn2, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.DisplayPort, new Action(InputDisplayPort2), 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(InputVga), this)); + InputPorts.Add(new RoutingInputPort(RoutingPortNames.RgbIn, eRoutingSignalType.Video, + eRoutingPortConnectionType.Rgb, new Action(new Action(InputRgb)), this)); + + 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); }), + //}; + } + + ~NecPSXMDisplay() + { + PortGather = null; + } + + public override bool CustomActivate() + { + Communication.Connect(); + CommunicationMonitor.StatusChange += (o, a) => { Debug.Console(2, this, "Communication monitor state: {0}", CommunicationMonitor.Status); }; + CommunicationMonitor.Start(); + return true; + } + + public override List Feedbacks + { + get + { + var list = base.Feedbacks; + list.AddRange(new List + { + + }); + return list; + } + } + + void Port_LineReceived(object dev, GenericCommMethodReceiveTextArgs args) + { + if (Debug.Level == 2) + Debug.Console(2, this, "Received: '{0}'", ComTextHelper.GetEscapedText(args.Text)); + + if (args.Text=="DO SOMETHING HERE EVENTUALLY") + { + _IsMuted = true; + MuteFeedback.FireUpdate(); + } + } + + void AppendChecksumAndSend(string s) + { + int x = 0; + for (int i = 1; i < s.Length; i++) + x = x ^ s[i]; + + string send = s + (char)x + '\x0d'; + Send(send); + } + + void Send(string s) + { + if (Debug.Level == 2) + Debug.Console(2, this, "Send: '{0}'", ComTextHelper.GetEscapedText(s)); + Communication.SendText(s); + } + + + public override void PowerOn() + { + Send(PowerOnCmd); + if (!PowerIsOnFeedback.BoolValue && !_IsWarmingUp && !_IsCoolingDown) + { + _IsWarmingUp = true; + IsWarmingUpFeedback.FireUpdate(); + // Fake power-up cycle + WarmupTimer = new CTimer(o => + { + _IsWarmingUp = false; + _PowerIsOn = true; + IsWarmingUpFeedback.FireUpdate(); + PowerIsOnFeedback.FireUpdate(); + }, WarmupTime); + } + } + + public override void PowerOff() + { + // If a display has unreliable-power off feedback, just override this and + // remove this check. + if (PowerIsOnFeedback.BoolValue && !_IsWarmingUp && !_IsCoolingDown) + { + Send(PowerOffCmd); + _IsCoolingDown = true; + _PowerIsOn = false; + PowerIsOnFeedback.FireUpdate(); + IsCoolingDownFeedback.FireUpdate(); + // Fake cool-down cycle + CooldownTimer = new CTimer(o => + { + Debug.Console(2, this, "Cooldown timer ending"); + _IsCoolingDown = false; + IsCoolingDownFeedback.FireUpdate(); + }, CooldownTime); + } + } + + public override void PowerToggle() + { + if (PowerIsOnFeedback.BoolValue && !IsWarmingUpFeedback.BoolValue) + PowerOff(); + else if (!PowerIsOnFeedback.BoolValue && !IsCoolingDownFeedback.BoolValue) + PowerOn(); + } + + public void InputHdmi1() + { + Send(Hdmi1Cmd); + } + + public void InputHdmi2() + { + Send(Hdmi2Cmd); + } + + public void InputHdmi3() + { + Send(Hdmi3Cmd); + } + + public void InputHdmi4() + { + Send(Hdmi4Cmd); + } + + public void InputDisplayPort1() + { + Send(Dp1Cmd); + } + + public void InputDisplayPort2() + { + Send(Dp2Cmd); + } + + public void InputDvi1() + { + Send(Dvi1Cmd); + } + + public void InputVideo1() + { + Send(Video1Cmd); + } + + public void InputVga() + { + Send(VgaCmd); + } + + public void InputRgb() + { + Send(RgbCmd); + } + + public override void ExecuteSwitch(object selector) + { + if (selector is Action) + (selector as Action).Invoke(); + else + Debug.Console(1, this, "WARNING: ExecuteSwitch cannot handle type {0}", selector.GetType()); + //Send((string)selector); + } + + void SetVolume(ushort level) + { + var levelString = string.Format("{0}{1:X4}\x03", VolumeLevelPartialCmd, level); + AppendChecksumAndSend(levelString); + //Debug.Console(2, this, "Volume:{0}", ComTextHelper.GetEscapedText(levelString)); + _VolumeLevel = level; + VolumeLevelFeedback.FireUpdate(); + } + + #region IBasicVolumeWithFeedback Members + + public IntFeedback VolumeLevelFeedback { get; private set; } + + public BoolFeedback MuteFeedback { get; private set; } + + public void MuteOff() + { + Send(MuteOffCmd); + } + + public void MuteOn() + { + Send(MuteOnCmd); + } + + void IBasicVolumeWithFeedback.SetVolume(ushort level) + { + SetVolume(level); + } + + #endregion + + #region IBasicVolumeControls Members + + public void MuteToggle() + { + Send(MuteToggleIrCmd); + } + + public void VolumeDown(bool pressRelease) + { + throw new NotImplementedException(); +#warning need incrementer for these + //Send(VolumeDownCmd); + } + + public void VolumeUp(bool pressRelease) + { + throw new NotImplementedException(); + //Send(VolumeUpCmd); + } + + #endregion + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Display/NecPaSeriesProjector.cs b/Essentials Devices Common/Essentials Devices Common/Display/NecPaSeriesProjector.cs new file mode 100644 index 00000000..72ccd713 --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/Display/NecPaSeriesProjector.cs @@ -0,0 +1,243 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; + +using PepperDash.Essentials.Core; +using PepperDash.Core; + +namespace PepperDash.Essentials.Devices.Displays +{ + public class NecPaSeriesProjector : ComTcpDisplayBase + { + public readonly IntFeedback Lamp1RemainingPercent; + int _Lamp1RemainingPercent; + public readonly IntFeedback Lamp2RemainingPercent; + int _Lamp2RemainingPercent; + protected override Func PowerIsOnFeedbackFunc + { + get { return () => _PowerIsOn; } + } + bool _PowerIsOn; + + protected override Func IsCoolingDownFeedbackFunc + { + get { return () => false; } + } + + protected override Func IsWarmingUpFeedbackFunc + { + get { return () => false; } + } + + public override void PowerToggle() + { + throw new NotImplementedException(); + } + + public override void ExecuteSwitch(object selector) + { + throw new NotImplementedException(); + } + + Dictionary InputMap; + + /// + /// Constructor + /// + public NecPaSeriesProjector(string key, string name) + : base(key, name) + { + Lamp1RemainingPercent = new IntFeedback(Cue.UShortCue("Lamp1RemainingPercent", 0), () => _Lamp1RemainingPercent); + Lamp2RemainingPercent = new IntFeedback(Cue.UShortCue("Lamp2RemainingPercent", 0), () => _Lamp2RemainingPercent); + + InputMap = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "computer1", "\x02\x03\x00\x00\x02\x01\x01\x09" }, + { "computer2", "\x02\x03\x00\x00\x02\x01\x02\x0a" }, + { "computer3", "\x02\x03\x00\x00\x02\x01\x03\x0b" }, + { "hdmi", "\x02\x03\x00\x00\x02\x01\x1a\x22" }, + { "dp", "\x02\x03\x00\x00\x02\x01\x1b\x23" }, + { "video", "\x02\x03\x00\x00\x02\x01\x06\x0e" }, + { "viewer", "\x02\x03\x00\x00\x02\x01\x1f\x27" }, + { "network", "\x02\x03\x00\x00\x02\x01\x20\x28" }, + }; + } + + void IsConnected_OutputChange(object sender, EventArgs e) + { + + } + + public void SetEnable(bool state) + { + var tcp = CommunicationMethod as GenericTcpIpClient; + if (tcp != null) + { + tcp.Connect(); + } + } + + public override void PowerOn() + { + SendText("\x02\x00\x00\x00\x00\x02"); + } + + public override void PowerOff() + { + SendText("\x02\x01\x00\x00\x00\x03"); + } + + public void PictureMuteOn() + { + SendText("\x02\x10\x00\x00\x00\x12"); + } + + public void PictureMuteOff() + { + SendText("\x02\x11\x00\x00\x00\x13"); + } + + public void GetRunningStatus() + { + SendText("\x00\x85\x00\x00\x01\x01\x87"); + } + + public void GetLampRemaining(int lampNum) + { + if (!_PowerIsOn) return; + + var bytes = new byte[]{0x03,0x96,0x00,0x00,0x02,0x00,0x04}; + if (lampNum == 2) + bytes[5] = 0x01; + SendBytes(AppendChecksum(bytes)); + } + + public void SelectInput(string inputKey) + { + if (InputMap.ContainsKey(inputKey)) + SendText(InputMap[inputKey]); + } + + void SendText(string text) + { + if (CommunicationMethod != null) + CommunicationMethod.SendText(text); + } + + void SendBytes(byte[] bytes) + { + if (CommunicationMethod != null) + CommunicationMethod.SendBytes(bytes); + } + + byte[] AppendChecksum(byte[] bytes) + { + byte sum = unchecked((byte)bytes.Sum(x => (int)x)); + var retVal = new byte[bytes.Length + 1]; + bytes.CopyTo(retVal, 0); + retVal[retVal.Length - 1] = sum; + return retVal; + } + + protected override void CommunicationMethod_BytesReceived(object sender, GenericCommMethodReceiveBytesArgs args) + { + var bytes = args.Bytes; + ParseBytes(args.Bytes); + } + + void ParseBytes(byte[] bytes) + { + if (bytes[0] == 0x22) + { + // Power on + if (bytes[1] == 0x00) + { + _PowerIsOn = true; + PowerIsOnFeedback.FireUpdate(); + } + // Power off + else if (bytes[1] == 0x01) + { + _PowerIsOn = false; + PowerIsOnFeedback.FireUpdate(); + } + } + // Running Status + else if (bytes[0] == 0x20 && bytes[1] == 0x85 && bytes[4] == 0x10) + { + var operationStates = new Dictionary + { + { 0x00, "Standby" }, + { 0x04, "Power On" }, + { 0x05, "Cooling" }, + { 0x06, "Standby (error)" }, + { 0x0f, "Standby (power saving" }, + { 0x10, "Network Standby" }, + { 0xff, "Not supported" } + }; + + var newPowerIsOn = bytes[7] == 0x01; + if (newPowerIsOn != _PowerIsOn) + { + _PowerIsOn = newPowerIsOn; + PowerIsOnFeedback.FireUpdate(); + } + + Debug.Console(2, this, "PowerIsOn={0}\rCooling={1}\rPowering on/off={2}\rStatus={3}", + _PowerIsOn, + bytes[8] == 0x01, + bytes[9] == 0x01, + operationStates[bytes[10]]); + + } + // Lamp remaining + else if (bytes[0] == 0x23 && bytes[1] == 0x96 && bytes[4] == 0x06 && bytes[6] == 0x04) + { + var newValue = bytes[7]; + if (bytes[5] == 0x00) + { + if (newValue != _Lamp1RemainingPercent) + { + _Lamp1RemainingPercent = newValue; + Lamp1RemainingPercent.FireUpdate(); + } + } + else + { + if (newValue != _Lamp2RemainingPercent) + { + _Lamp2RemainingPercent = newValue; + Lamp2RemainingPercent.FireUpdate(); + } + } + Debug.Console(0, this, "Lamp {0}, {1}% remaining", (bytes[5] + 1), bytes[7]); + } + + } + + + #region INonStandardControls Members + + public Dictionary> GetNonStandardControls() + { + return new Dictionary> + { + { CommonBoolCue.PowerOn, o => PowerOn() }, + { CommonBoolCue.PowerOff, o => PowerOff() }, + { Cue.BoolCue("PictureMute", 0), o => + { + if((bool)o) + PictureMuteOn(); + else + PictureMuteOff(); } }, + { Cue.UShortCue("GetLampRemaining", 0), o => GetLampRemaining((int) o) }, + { Cue.StringCue("SelectInput", 0), o => SelectInput((String)o) } + }; + } + + #endregion + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj b/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj new file mode 100644 index 00000000..f9b46044 --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj @@ -0,0 +1,126 @@ + + + Release + AnyCPU + 9.0.30729 + 2.0 + {892B761C-E479-44CE-BD74-243E9214AF13} + Library + Properties + PepperDash.Essentials.Devices.Common + Essentials Devices Common + {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.Gateways.dll + + + + False + ..\..\..\PepperDash.Core\Pepperdash Core\Pepperdash Core\bin\PepperDash_Core.dll + + + False + ..\..\..\essentials-core\PepperDashEssentialsBase\PepperDashEssentialsBase\bin\PepperDash_Essentials_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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + rem S# Pro preparation will execute after these operations + + \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.projectinfo b/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.projectinfo new file mode 100644 index 00000000..2b37f762 Binary files /dev/null and b/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.projectinfo differ diff --git a/Essentials Devices Common/Essentials Devices Common/Factory/DeviceFactory.cs b/Essentials Devices Common/Essentials Devices Common/Factory/DeviceFactory.cs new file mode 100644 index 00000000..573a1dd3 --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/Factory/DeviceFactory.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections.Generic; +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronIO; +using Crestron.SimplSharpPro; + +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Config; + +using PepperDash.Essentials.Devices.Common.DSP; + +using PepperDash.Essentials.Devices.Common; + +namespace PepperDash.Essentials.Devices.Common +{ + public class DeviceFactory + { + public static IKeyed GetDevice(DeviceConfig dc) + { + var key = dc.Key; + var name = dc.Name; + var type = dc.Type; + var properties = dc.Properties; + + var typeName = dc.Type.ToLower(); + var groupName = dc.Group.ToLower(); + + if (typeName == "appletv") + { + //var ir = IRPortHelper.GetIrPort(properties); + //if (ir != null) + // return new AppleTV(key, name, ir.Port, ir.FileName); + + var irCont = IRPortHelper.GetIrOutputPortController(dc); + return new AppleTV(key, name, irCont); + + } + + else if (typeName == "basicirdisplay") + { + var ir = IRPortHelper.GetIrPort(properties); + if (ir != null) + return new BasicIrDisplay(key, name, ir.Port, ir.FileName); + } + + else if (typeName == "cenrfgwex") + { + return CenRfgwController.GetNewExGatewayController(key, name, + properties.Value("id"), properties.Value("gatewayType")); + } + + else if (typeName == "cenerfgwpoe") + { + return CenRfgwController.GetNewErGatewayController(key, name, + properties.Value("id"), properties.Value("gatewayType")); + } + + else if (typeName == "genericaudiooutwithvolume") + { + var zone = dc.Properties.Value("zone"); + return new GenericAudioOutWithVolume(key, name, + dc.Properties.Value("volumeDeviceKey"), zone); + } + + else if (groupName == "discplayer") // (typeName == "irbluray") + { + if (properties["control"]["method"].Value() == "ir") + { + var irCont = IRPortHelper.GetIrOutputPortController(dc); + return new IRBlurayBase(key, name, irCont); + + //var ir = IRPortHelper.GetIrPort(properties); + //if (ir != null) + // return new IRBlurayBase(key, name, ir.Port, ir.FileName); + } + else if (properties["control"]["method"].Value() == "com") + { + Debug.Console(0, "[{0}] COM Device type not implemented YET!", key); + } + } + + else if (groupName == "settopbox") //(typeName == "irstbbase") + { + var irCont = IRPortHelper.GetIrOutputPortController(dc); + var config = dc.Properties.ToObject(); + var stb = new IRSetTopBoxBase(key, name, irCont, config); + + //stb.HasDvr = properties.Value("hasDvr"); + var listName = properties.Value("presetsList"); + if (listName != null) + stb.LoadPresets(listName); + return stb; + } + + else if (typeName == "laptop") + { + return new Laptop(key, name); + } + + else if (typeName == "inroompc") + { + return new InRoomPc(key, name); + } + + else if (typeName == "roku") + { + var irCont = IRPortHelper.GetIrOutputPortController(dc); + return new Roku2(key, name, irCont); + + //var ir = IRPortHelper.GetIrPort(properties); + //if (ir != null) + // return new Roku2(key, name, ir.Port, ir.FileName); + } + + else if (typeName == "biamptesira") + { + var comm = CommFactory.CreateCommForDevice(dc); + var props = JsonConvert.DeserializeObject( + properties.ToString()); + return new BiampTesiraForteDsp(key, name, comm, props); + } + + return null; + } + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/PC/InRoomPc.cs b/Essentials Devices Common/Essentials Devices Common/PC/InRoomPc.cs new file mode 100644 index 00000000..ee43356b --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/PC/InRoomPc.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Crestron.SimplSharpPro; + +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Routing; +using PepperDash.Core; + +namespace PepperDash.Essentials.Devices.Common +{ + /// + /// This DVD class should cover most IR, one-way DVD and Bluray fuctions + /// + public class InRoomPc : Device, IHasFeedback, IRoutingOutputs, IAttachVideoStatus, IUiDisplayInfo + { + public uint DisplayUiType { get { return DisplayUiConstants.TypeLaptop; } } + public string IconName { get; set; } + public BoolFeedback HasPowerOnFeedback { get; private set; } + + public RoutingOutputPort AnyVideoOut { get; private set; } + + #region IRoutingOutputs Members + + /// + /// Options: hdmi + /// + public RoutingPortCollection OutputPorts { get; private set; } + + #endregion + + public InRoomPc(string key, string name) + : base(key, name) + { + IconName = "PC"; + HasPowerOnFeedback = new BoolFeedback(CommonBoolCue.HasPowerFeedback, + () => this.GetVideoStatuses() != VideoStatusOutputs.NoStatus); + OutputPorts = new RoutingPortCollection(); + OutputPorts.Add(AnyVideoOut = new RoutingOutputPort(RoutingPortNames.AnyVideoOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.None, 0, this)); + } + + #region IHasFeedback Members + + /// + /// Passes through the VideoStatuses list + /// + public List Feedbacks + { + get { return this.GetVideoStatuses().ToList(); } + } + + #endregion + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/PC/Laptop.cs b/Essentials Devices Common/Essentials Devices Common/PC/Laptop.cs new file mode 100644 index 00000000..3d6f2834 --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/PC/Laptop.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Crestron.SimplSharpPro; + +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Routing; +using PepperDash.Core; + +namespace PepperDash.Essentials.Devices.Common +{ + /// + /// This DVD class should cover most IR, one-way DVD and Bluray fuctions + /// + public class Laptop : Device, IHasFeedback, IRoutingOutputs, IAttachVideoStatus, IUiDisplayInfo + { + public uint DisplayUiType { get { return DisplayUiConstants.TypeLaptop; } } + public string IconName { get; set; } + public BoolFeedback HasPowerOnFeedback { get; private set; } + + public RoutingOutputPort AnyVideoOut { get; private set; } + + #region IRoutingOutputs Members + + /// + /// Options: hdmi + /// + public RoutingPortCollection OutputPorts { get; private set; } + + #endregion + + public Laptop(string key, string name) + : base(key, name) + { + IconName = "Laptop"; + HasPowerOnFeedback = new BoolFeedback(CommonBoolCue.HasPowerFeedback, + () => this.GetVideoStatuses() != VideoStatusOutputs.NoStatus); + OutputPorts = new RoutingPortCollection(); + OutputPorts.Add(AnyVideoOut = new RoutingOutputPort(RoutingPortNames.AnyOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.None, 0, this)); + } + + #region IHasFeedback Members + + /// + /// Passes through the VideoStatuses list + /// + public List Feedbacks + { + get { return this.GetVideoStatuses().ToList(); } + } + + #endregion + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Properties/AssemblyInfo.cs b/Essentials Devices Common/Essentials Devices Common/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..e366b3d4 --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/Properties/AssemblyInfo.cs @@ -0,0 +1,8 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Essentials_Devices_Common")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Essentials_Devices_Common")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyVersion("1.0.0.*")] + diff --git a/Essentials Devices Common/Essentials Devices Common/Properties/ControlSystem.cfg b/Essentials Devices Common/Essentials Devices Common/Properties/ControlSystem.cfg new file mode 100644 index 00000000..e69de29b diff --git a/Essentials Devices Common/Essentials Devices Common/SetTopBox/IRSetTopBoxBase.cs b/Essentials Devices Common/Essentials Devices Common/SetTopBox/IRSetTopBoxBase.cs new file mode 100644 index 00000000..a5e730c1 --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/SetTopBox/IRSetTopBoxBase.cs @@ -0,0 +1,337 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Presets; +using PepperDash.Essentials.Core.Routing; + +namespace PepperDash.Essentials.Devices.Common +{ + public class IRSetTopBoxBase : Device, ISetTopBoxControls, IUiDisplayInfo, IRoutingOutputs + { + public IrOutputPortController IrPort { get; private set; } + + public uint DisplayUiType { get { return DisplayUiConstants.TypeDirecTv; } } + + + public bool HasPresets { get; set; } + public bool HasDvr { get; set; } + public bool HasDpad { get; set; } + public bool HasNumeric { get; set; } + + public DevicePresetsModel PresetsModel { get; private set; } + + public IRSetTopBoxBase(string key, string name, IrOutputPortController portCont, + SetTopBoxPropertiesConfig props) + : base(key, name) + { + IrPort = portCont; + DeviceManager.AddDevice(portCont); + + HasPresets = props.HasPresets; + HasDvr = props.HasDvr; + HasDpad = props.HasDpad; + HasNumeric = props.HasNumeric; + + HasKeypadAccessoryButton1 = true; + KeypadAccessoryButton1Command = "Dash"; + KeypadAccessoryButton1Label = "-"; + + HasKeypadAccessoryButton2 = true; + KeypadAccessoryButton2Command = "NumericEnter"; + KeypadAccessoryButton2Label = "Enter"; + + AnyVideoOut = new RoutingOutputPort(RoutingPortNames.AnyVideoOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, null, this); + AnyAudioOut = new RoutingOutputPort(RoutingPortNames.AnyAudioOut, eRoutingSignalType.Audio, + eRoutingPortConnectionType.DigitalAudio, null, this); + OutputPorts = new RoutingPortCollection { AnyVideoOut, AnyAudioOut }; + + } + + public void LoadPresets(string filePath) + { + PresetsModel = new DevicePresetsModel(Key + "-presets", this, filePath); + DeviceManager.AddDevice(PresetsModel); + } + + + #region ISetTopBoxControls Members + + public void DvrList(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_DVR, pressRelease); + } + + public void Replay(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_REPLAY, pressRelease); + } + + #endregion + + #region IDPad Members + + public void Up(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_UP_ARROW, pressRelease); + } + + public void Down(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_DN_ARROW, pressRelease); + } + + public void Left(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_LEFT_ARROW, pressRelease); + } + + public void Right(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_RIGHT_ARROW, pressRelease); + } + + public void Select(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_ENTER, pressRelease); + } + + public void Menu(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_MENU, pressRelease); + } + + public void Exit(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_EXIT, pressRelease); + } + + #endregion + + #region INumericKeypad Members + + public void Digit0(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_0, pressRelease); + } + + public void Digit1(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_1, pressRelease); + } + + public void Digit2(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_2, pressRelease); + } + + public void Digit3(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_3, pressRelease); + } + + public void Digit4(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_4, pressRelease); + } + + public void Digit5(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_5, pressRelease); + } + + public void Digit6(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_6, pressRelease); + } + + public void Digit7(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_7, pressRelease); + } + + public void Digit8(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_8, pressRelease); + } + + public void Digit9(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_9, pressRelease); + } + + /// + /// Defaults to true + /// + public bool HasKeypadAccessoryButton1 { get; set; } + + /// + /// Defaults to "-" + /// + public string KeypadAccessoryButton1Label { get; set; } + + + /// + /// Defaults to "Dash" + /// + public string KeypadAccessoryButton1Command { get; set; } + + public void KeypadAccessoryButton1(bool pressRelease) + { + IrPort.PressRelease(KeypadAccessoryButton1Command, pressRelease); + } + + /// + /// Defaults to true + /// + public bool HasKeypadAccessoryButton2 { get; set; } + + /// + /// Defaults to "Enter" + /// + public string KeypadAccessoryButton2Label { get; set; } + + + /// + /// Defaults to "Enter" + /// + public string KeypadAccessoryButton2Command { get; set; } + + public void KeypadAccessoryButton2(bool pressRelease) + { + IrPort.PressRelease(KeypadAccessoryButton2Command, pressRelease); + } + + #endregion + + #region ISetTopBoxNumericKeypad Members + + /// + /// Corresponds to "dash" IR command + /// + public void Dash(bool pressRelease) + { + IrPort.PressRelease("dash", pressRelease); + } + + /// + /// Corresponds to "numericEnter" IR command + /// + public void KeypadEnter(bool pressRelease) + { + IrPort.PressRelease("numericEnter", pressRelease); + } + + #endregion + + #region IChannelFunctions Members + + public void ChannelUp(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_CH_PLUS, pressRelease); + } + + public void ChannelDown(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_CH_MINUS, pressRelease); + } + + public void LastChannel(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_LAST, pressRelease); + } + + public void Guide(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_GUIDE, pressRelease); + } + + public void Info(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_INFO, pressRelease); + } + + #endregion + + #region IColorFunctions Members + + public void Red(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_RED, pressRelease); + } + + public void Green(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_GREEN, pressRelease); + } + + public void Yellow(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_YELLOW, pressRelease); + } + + public void Blue(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_BLUE, pressRelease); + } + + #endregion + + #region IRoutingOutputs Members + + public RoutingOutputPort AnyVideoOut { get; private set; } + public RoutingOutputPort AnyAudioOut { get; private set; } + public RoutingPortCollection OutputPorts { get; private set; } + + #endregion + + #region ITransport Members + + public void ChapMinus(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_REPLAY, pressRelease); + } + + public void ChapPlus(bool pressRelease) + { + } + + public void FFwd(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_FSCAN, pressRelease); + } + + public void Pause(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_RSCAN, pressRelease); + } + + public void Play(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_PLAY, pressRelease); + } + + public void Record(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_RECORD, pressRelease); + } + + public void Rewind(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_RSCAN, pressRelease); + } + + public void Stop(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_STOP, pressRelease); + } + + #endregion + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/SetTopBox/SetTopBoxPropertiesConfig.cs b/Essentials Devices Common/Essentials Devices Common/SetTopBox/SetTopBoxPropertiesConfig.cs new file mode 100644 index 00000000..63f9581f --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/SetTopBox/SetTopBoxPropertiesConfig.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +using PepperDash.Core; + +namespace PepperDash.Essentials.Devices.Common +{ + public class SetTopBoxPropertiesConfig + { + public bool HasPresets { get; set; } + public bool HasDvr { get; set; } + public bool HasDpad { get; set; } + public bool HasNumeric { get; set; } + + public ControlPropertiesConfig Control { get; set; } + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Streaming/AppleTV.cs b/Essentials Devices Common/Essentials Devices Common/Streaming/AppleTV.cs new file mode 100644 index 00000000..d8cd66b2 --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/Streaming/AppleTV.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Routing; + +namespace PepperDash.Essentials.Devices.Common +{ + public class AppleTV : Device, IDPad, ITransport, IUiDisplayInfo, IRoutingOutputs + { + + public IrOutputPortController IrPort { get; private set; } + public const string StandardDriverName = "Apple AppleTV-v2.ir"; + public uint DisplayUiType { get { return DisplayUiConstants.TypeAppleTv; } } + + public AppleTV(string key, string name, IrOutputPortController portCont) + : base(key, name) + { + IrPort = portCont; + DeviceManager.AddDevice(portCont); + + HdmiOut = new RoutingOutputPort(RoutingPortNames.HdmiOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, null, this); + AnyAudioOut = new RoutingOutputPort(RoutingPortNames.AnyAudioOut, eRoutingSignalType.Audio, + eRoutingPortConnectionType.DigitalAudio, null, this); + OutputPorts = new RoutingPortCollection { HdmiOut, AnyAudioOut }; + } + + + #region IDPad Members + + public void Up(bool pressRelease) + { + IrPort.PressRelease("+", pressRelease); + } + + public void Down(bool pressRelease) + { + IrPort.PressRelease("-", pressRelease); + } + + public void Left(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_TRACK_MINUS, pressRelease); + } + + public void Right(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_TRACK_PLUS, pressRelease); + } + + public void Select(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_ENTER, pressRelease); + } + + public void Menu(bool pressRelease) + { + IrPort.PressRelease("Menu", pressRelease); + } + + public void Exit(bool pressRelease) + { + + } + + #endregion + + #region ITransport Members + + public void Play(bool pressRelease) + { + IrPort.PressRelease("PLAY/PAUSE", pressRelease); + } + + public void Pause(bool pressRelease) + { + IrPort.PressRelease("PLAY/PAUSE", pressRelease); + } + + /// + /// Not implemented + /// + /// + public void Rewind(bool pressRelease) + { + } + + /// + /// Not implemented + /// + /// + public void FFwd(bool pressRelease) + { + } + + /// + /// Not implemented + /// + /// + public void ChapMinus(bool pressRelease) + { + } + + /// + /// Not implemented + /// + /// + public void ChapPlus(bool pressRelease) + { + } + + /// + /// Not implemented + /// + /// + public void Stop(bool pressRelease) + { + } + + /// + /// Not implemented + /// + /// + public void Record(bool pressRelease) + { + } + + #endregion + + #region IRoutingOutputs Members + + public RoutingOutputPort HdmiOut { get; private set; } + public RoutingOutputPort AnyAudioOut { get; private set; } + public RoutingPortCollection OutputPorts { get; private set; } + + #endregion + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Streaming/Roku.cs b/Essentials Devices Common/Essentials Devices Common/Streaming/Roku.cs new file mode 100644 index 00000000..2d4af003 --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/Streaming/Roku.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Routing; + +namespace PepperDash.Essentials.Devices.Common +{ + public class Roku2 : Device, IDPad, ITransport, IUiDisplayInfo, IRoutingOutputs + { + [Api] + public IrOutputPortController IrPort { get; private set; } + public const string StandardDriverName = "Roku XD_S.ir"; + [Api] + public uint DisplayUiType { get { return DisplayUiConstants.TypeRoku; } } + + public Roku2(string key, string name, IrOutputPortController portCont) + : base(key, name) + { + IrPort = portCont; + DeviceManager.AddDevice(portCont);; + + HdmiOut = new RoutingOutputPort(RoutingPortNames.HdmiOut, eRoutingSignalType.AudioVideo, + eRoutingPortConnectionType.Hdmi, null, this); + OutputPorts = new RoutingPortCollection { HdmiOut }; + } + + #region IDPad Members + + [Api] + public void Up(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_UP_ARROW, pressRelease); + } + + [Api] + public void Down(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_DN_ARROW, pressRelease); + } + + [Api] + public void Left(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_LEFT_ARROW, pressRelease); + } + + [Api] + public void Right(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_RIGHT_ARROW, pressRelease); + } + + [Api] + public void Select(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_ENTER, pressRelease); + } + + [Api] + public void Menu(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_MENU, pressRelease); + } + + [Api] + public void Exit(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_EXIT, pressRelease); + } + + #endregion + + #region ITransport Members + + [Api] + public void Play(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_PLAY, pressRelease); + } + + [Api] + public void Pause(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_PAUSE, pressRelease); + } + + [Api] + public void Rewind(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_RSCAN, pressRelease); + } + + [Api] + public void FFwd(bool pressRelease) + { + IrPort.PressRelease(IROutputStandardCommands.IROut_FSCAN, pressRelease); + } + + /// + /// Not implemented + /// + /// + public void ChapMinus(bool pressRelease) + { + } + + /// + /// Not implemented + /// + /// + public void ChapPlus(bool pressRelease) + { + } + + /// + /// Not implemented + /// + /// + public void Stop(bool pressRelease) + { + } + + /// + /// Not implemented + /// + /// + public void Record(bool pressRelease) + { + } + + #endregion + + #region IRoutingOutputs Members + + public RoutingOutputPort HdmiOut { get; private set; } + public RoutingPortCollection OutputPorts { get; private set; } + + #endregion + + } +} \ No newline at end of file diff --git a/PepperDashEssentials/PepperDashEssentials.sln b/Essentials/PepperDashEssentials.sln similarity index 100% rename from PepperDashEssentials/PepperDashEssentials.sln rename to Essentials/PepperDashEssentials.sln diff --git a/PepperDashEssentials/PepperDashEssentials/Audio/EssentialsVolumeLevelConfig.cs b/Essentials/PepperDashEssentials/Audio/EssentialsVolumeLevelConfig.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Audio/EssentialsVolumeLevelConfig.cs rename to Essentials/PepperDashEssentials/Audio/EssentialsVolumeLevelConfig.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Config/ConfigReader.cs b/Essentials/PepperDashEssentials/Config/ConfigReader.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Config/ConfigReader.cs rename to Essentials/PepperDashEssentials/Config/ConfigReader.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Config/DeviceFactory.cs b/Essentials/PepperDashEssentials/Config/DeviceFactory.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Config/DeviceFactory.cs rename to Essentials/PepperDashEssentials/Config/DeviceFactory.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Config/EssentialsConfig.cs b/Essentials/PepperDashEssentials/Config/EssentialsConfig.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Config/EssentialsConfig.cs rename to Essentials/PepperDashEssentials/Config/EssentialsConfig.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Configuration Original/Builders/TPConfig.cs b/Essentials/PepperDashEssentials/Configuration Original/Builders/TPConfig.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Configuration Original/Builders/TPConfig.cs rename to Essentials/PepperDashEssentials/Configuration Original/Builders/TPConfig.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Configuration Original/ConfigTieLine.cs b/Essentials/PepperDashEssentials/Configuration Original/ConfigTieLine.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Configuration Original/ConfigTieLine.cs rename to Essentials/PepperDashEssentials/Configuration Original/ConfigTieLine.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Configuration Original/Configuration.cs b/Essentials/PepperDashEssentials/Configuration Original/Configuration.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Configuration Original/Configuration.cs rename to Essentials/PepperDashEssentials/Configuration Original/Configuration.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Configuration Original/ConfigurationHelpers.cs b/Essentials/PepperDashEssentials/Configuration Original/ConfigurationHelpers.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Configuration Original/ConfigurationHelpers.cs rename to Essentials/PepperDashEssentials/Configuration Original/ConfigurationHelpers.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/CommFactory.cs b/Essentials/PepperDashEssentials/Configuration Original/Factories/CommFactory.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/CommFactory.cs rename to Essentials/PepperDashEssentials/Configuration Original/Factories/CommFactory.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/DeviceMonitorFactory.cs b/Essentials/PepperDashEssentials/Configuration Original/Factories/DeviceMonitorFactory.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/DeviceMonitorFactory.cs rename to Essentials/PepperDashEssentials/Configuration Original/Factories/DeviceMonitorFactory.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/DisplayFactory.cs b/Essentials/PepperDashEssentials/Configuration Original/Factories/DisplayFactory.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/DisplayFactory.cs rename to Essentials/PepperDashEssentials/Configuration Original/Factories/DisplayFactory.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/DmFactory.cs b/Essentials/PepperDashEssentials/Configuration Original/Factories/DmFactory.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/DmFactory.cs rename to Essentials/PepperDashEssentials/Configuration Original/Factories/DmFactory.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/FactoryHelper.cs b/Essentials/PepperDashEssentials/Configuration Original/Factories/FactoryHelper.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/FactoryHelper.cs rename to Essentials/PepperDashEssentials/Configuration Original/Factories/FactoryHelper.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/MAYBE SetTopBoxFactory.cs b/Essentials/PepperDashEssentials/Configuration Original/Factories/MAYBE SetTopBoxFactory.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/MAYBE SetTopBoxFactory.cs rename to Essentials/PepperDashEssentials/Configuration Original/Factories/MAYBE SetTopBoxFactory.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/PcFactory.cs b/Essentials/PepperDashEssentials/Configuration Original/Factories/PcFactory.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/PcFactory.cs rename to Essentials/PepperDashEssentials/Configuration Original/Factories/PcFactory.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/REMOVE DiscPlayerFactory.cs b/Essentials/PepperDashEssentials/Configuration Original/Factories/REMOVE DiscPlayerFactory.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/REMOVE DiscPlayerFactory.cs rename to Essentials/PepperDashEssentials/Configuration Original/Factories/REMOVE DiscPlayerFactory.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/RemoteFactory.cs b/Essentials/PepperDashEssentials/Configuration Original/Factories/RemoteFactory.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/RemoteFactory.cs rename to Essentials/PepperDashEssentials/Configuration Original/Factories/RemoteFactory.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/TouchpanelFactory.cs b/Essentials/PepperDashEssentials/Configuration Original/Factories/TouchpanelFactory.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Configuration Original/Factories/TouchpanelFactory.cs rename to Essentials/PepperDashEssentials/Configuration Original/Factories/TouchpanelFactory.cs diff --git a/PepperDashEssentials/PepperDashEssentials/ControlSystem.cs b/Essentials/PepperDashEssentials/ControlSystem.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/ControlSystem.cs rename to Essentials/PepperDashEssentials/ControlSystem.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Devices/Amplifier.cs b/Essentials/PepperDashEssentials/Devices/Amplifier.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Devices/Amplifier.cs rename to Essentials/PepperDashEssentials/Devices/Amplifier.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Devices/DiscPlayer/OppoExtendedBdp.cs b/Essentials/PepperDashEssentials/Devices/DiscPlayer/OppoExtendedBdp.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Devices/DiscPlayer/OppoExtendedBdp.cs rename to Essentials/PepperDashEssentials/Devices/DiscPlayer/OppoExtendedBdp.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Devices/NUMERIC AppleTV.cs b/Essentials/PepperDashEssentials/Devices/NUMERIC AppleTV.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Devices/NUMERIC AppleTV.cs rename to Essentials/PepperDashEssentials/Devices/NUMERIC AppleTV.cs diff --git a/PepperDashEssentials/PepperDashEssentials/FOR REFERENCE Room/EssentialsRoom.cs b/Essentials/PepperDashEssentials/FOR REFERENCE Room/EssentialsRoom.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/FOR REFERENCE Room/EssentialsRoom.cs rename to Essentials/PepperDashEssentials/FOR REFERENCE Room/EssentialsRoom.cs diff --git a/PepperDashEssentials/PepperDashEssentials/FOR REFERENCE Room/HuddleSpaceRoom.cs b/Essentials/PepperDashEssentials/FOR REFERENCE Room/HuddleSpaceRoom.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/FOR REFERENCE Room/HuddleSpaceRoom.cs rename to Essentials/PepperDashEssentials/FOR REFERENCE Room/HuddleSpaceRoom.cs diff --git a/PepperDashEssentials/PepperDashEssentials/FOR REFERENCE Room/RoomEventArgs.cs b/Essentials/PepperDashEssentials/FOR REFERENCE Room/RoomEventArgs.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/FOR REFERENCE Room/RoomEventArgs.cs rename to Essentials/PepperDashEssentials/FOR REFERENCE Room/RoomEventArgs.cs diff --git a/PepperDashEssentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/DevicePageControllerBase.cs b/Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/DevicePageControllerBase.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/DevicePageControllerBase.cs rename to Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/DevicePageControllerBase.cs diff --git a/PepperDashEssentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/LargeTouchpanelControllerBase.cs b/Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/LargeTouchpanelControllerBase.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/LargeTouchpanelControllerBase.cs rename to Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/LargeTouchpanelControllerBase.cs diff --git a/PepperDashEssentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLaptop.cs b/Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLaptop.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLaptop.cs rename to Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLaptop.cs diff --git a/PepperDashEssentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLargeDvd.cs b/Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLargeDvd.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLargeDvd.cs rename to Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLargeDvd.cs diff --git a/PepperDashEssentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLargeSetTopBoxGeneric.cs b/Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLargeSetTopBoxGeneric.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLargeSetTopBoxGeneric.cs rename to Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLargeSetTopBoxGeneric.cs diff --git a/PepperDashEssentials/PepperDashEssentials/FOR REFERENCE UI/Panels/REMOVE UiCue.cs b/Essentials/PepperDashEssentials/FOR REFERENCE UI/Panels/REMOVE UiCue.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/FOR REFERENCE UI/Panels/REMOVE UiCue.cs rename to Essentials/PepperDashEssentials/FOR REFERENCE UI/Panels/REMOVE UiCue.cs diff --git a/PepperDashEssentials/PepperDashEssentials/FOR REFERENCE UI/Panels/SmartGraphicsTouchpanelControllerBase.cs b/Essentials/PepperDashEssentials/FOR REFERENCE UI/Panels/SmartGraphicsTouchpanelControllerBase.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/FOR REFERENCE UI/Panels/SmartGraphicsTouchpanelControllerBase.cs rename to Essentials/PepperDashEssentials/FOR REFERENCE UI/Panels/SmartGraphicsTouchpanelControllerBase.cs diff --git a/PepperDashEssentials/PepperDashEssentials/FOR REFERENCE UI/SRL/SourceListSubpageReferenceList.cs b/Essentials/PepperDashEssentials/FOR REFERENCE UI/SRL/SourceListSubpageReferenceList.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/FOR REFERENCE UI/SRL/SourceListSubpageReferenceList.cs rename to Essentials/PepperDashEssentials/FOR REFERENCE UI/SRL/SourceListSubpageReferenceList.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Fusion/FusionSystemController.cs b/Essentials/PepperDashEssentials/Fusion/FusionSystemController.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Fusion/FusionSystemController.cs rename to Essentials/PepperDashEssentials/Fusion/FusionSystemController.cs diff --git a/PepperDashEssentials/PepperDashEssentials/HttpApiHandler.cs b/Essentials/PepperDashEssentials/HttpApiHandler.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/HttpApiHandler.cs rename to Essentials/PepperDashEssentials/HttpApiHandler.cs diff --git a/PepperDashEssentials/PepperDashEssentials/PepperDashEssentials.csproj b/Essentials/PepperDashEssentials/PepperDashEssentials.csproj similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/PepperDashEssentials.csproj rename to Essentials/PepperDashEssentials/PepperDashEssentials.csproj diff --git a/Essentials/PepperDashEssentials/PepperDashEssentials.projectinfo b/Essentials/PepperDashEssentials/PepperDashEssentials.projectinfo new file mode 100644 index 00000000..e4fe4b78 Binary files /dev/null and b/Essentials/PepperDashEssentials/PepperDashEssentials.projectinfo differ diff --git a/PepperDashEssentials/PepperDashEssentials/Properties/AssemblyInfo.cs b/Essentials/PepperDashEssentials/Properties/AssemblyInfo.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Properties/AssemblyInfo.cs rename to Essentials/PepperDashEssentials/Properties/AssemblyInfo.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Properties/ControlSystem.cfg b/Essentials/PepperDashEssentials/Properties/ControlSystem.cfg similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Properties/ControlSystem.cfg rename to Essentials/PepperDashEssentials/Properties/ControlSystem.cfg diff --git a/PepperDashEssentials/PepperDashEssentials/REMOVE EssentialsApp.cs b/Essentials/PepperDashEssentials/REMOVE EssentialsApp.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/REMOVE EssentialsApp.cs rename to Essentials/PepperDashEssentials/REMOVE EssentialsApp.cs diff --git a/PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.DM.dll b/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.DM.dll similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.DM.dll rename to Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.DM.dll diff --git a/PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.DeviceSupport.dll b/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.DeviceSupport.dll similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.DeviceSupport.dll rename to Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.DeviceSupport.dll diff --git a/PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.EthernetCommunications.dll b/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.EthernetCommunications.dll similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.EthernetCommunications.dll rename to Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.EthernetCommunications.dll diff --git a/PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.UI.dll b/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.UI.dll similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.UI.dll rename to Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.UI.dll diff --git a/PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.config b/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.config similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.config rename to Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.config diff --git a/PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.cplz b/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.cplz similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.cplz rename to Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.cplz diff --git a/PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.dll b/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.dll similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.dll rename to Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.dll diff --git a/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/SimplSharpData.dat b/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/SimplSharpData.dat new file mode 100644 index 00000000..816bfe12 Binary files /dev/null and b/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/SimplSharpData.dat differ diff --git a/PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/manifest.info b/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/manifest.info similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/manifest.info rename to Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/manifest.info diff --git a/PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/manifest.ser b/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/manifest.ser similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/manifest.ser rename to Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/manifest.ser diff --git a/PepperDashEssentials/PepperDashEssentials/Room/EssentialsHuddleSpaceRoom.cs b/Essentials/PepperDashEssentials/Room/EssentialsHuddleSpaceRoom.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Room/EssentialsHuddleSpaceRoom.cs rename to Essentials/PepperDashEssentials/Room/EssentialsHuddleSpaceRoom.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Room/EssentialsPresentationRoom.cs b/Essentials/PepperDashEssentials/Room/EssentialsPresentationRoom.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Room/EssentialsPresentationRoom.cs rename to Essentials/PepperDashEssentials/Room/EssentialsPresentationRoom.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Room/EssentialsRoomBase.cs b/Essentials/PepperDashEssentials/Room/EssentialsRoomBase.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Room/EssentialsRoomBase.cs rename to Essentials/PepperDashEssentials/Room/EssentialsRoomBase.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Room/EssentialsRoomConfig.cs b/Essentials/PepperDashEssentials/Room/EssentialsRoomConfig.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Room/EssentialsRoomConfig.cs rename to Essentials/PepperDashEssentials/Room/EssentialsRoomConfig.cs diff --git a/PepperDashEssentials/PepperDashEssentials/Room/VolumeAndSourceChangeArgs.cs b/Essentials/PepperDashEssentials/Room/VolumeAndSourceChangeArgs.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/Room/VolumeAndSourceChangeArgs.cs rename to Essentials/PepperDashEssentials/Room/VolumeAndSourceChangeArgs.cs diff --git a/PepperDashEssentials/PepperDashEssentials/UI Drivers/DualDisplayRouting.cs b/Essentials/PepperDashEssentials/UI Drivers/DualDisplayRouting.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/UI Drivers/DualDisplayRouting.cs rename to Essentials/PepperDashEssentials/UI Drivers/DualDisplayRouting.cs diff --git a/PepperDashEssentials/PepperDashEssentials/UI Drivers/EssentialsHuddlePanelAvFunctionsDriver.cs b/Essentials/PepperDashEssentials/UI Drivers/EssentialsHuddlePanelAvFunctionsDriver.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/UI Drivers/EssentialsHuddlePanelAvFunctionsDriver.cs rename to Essentials/PepperDashEssentials/UI Drivers/EssentialsHuddlePanelAvFunctionsDriver.cs diff --git a/PepperDashEssentials/PepperDashEssentials/UI Drivers/EssentialsPanelMainInterfaceDriver.cs b/Essentials/PepperDashEssentials/UI Drivers/EssentialsPanelMainInterfaceDriver.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/UI Drivers/EssentialsPanelMainInterfaceDriver.cs rename to Essentials/PepperDashEssentials/UI Drivers/EssentialsPanelMainInterfaceDriver.cs diff --git a/PepperDashEssentials/PepperDashEssentials/UI Drivers/EssentialsPresentationPanelAvFunctionsDriver.cs b/Essentials/PepperDashEssentials/UI Drivers/EssentialsPresentationPanelAvFunctionsDriver.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/UI Drivers/EssentialsPresentationPanelAvFunctionsDriver.cs rename to Essentials/PepperDashEssentials/UI Drivers/EssentialsPresentationPanelAvFunctionsDriver.cs diff --git a/PepperDashEssentials/PepperDashEssentials/UI Drivers/SingleSubpageModalAndBackDriver.cs b/Essentials/PepperDashEssentials/UI Drivers/SingleSubpageModalAndBackDriver.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/UI Drivers/SingleSubpageModalAndBackDriver.cs rename to Essentials/PepperDashEssentials/UI Drivers/SingleSubpageModalAndBackDriver.cs diff --git a/PepperDashEssentials/PepperDashEssentials/UI Drivers/SingleSubpageModalDriver.cs b/Essentials/PepperDashEssentials/UI Drivers/SingleSubpageModalDriver.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/UI Drivers/SingleSubpageModalDriver.cs rename to Essentials/PepperDashEssentials/UI Drivers/SingleSubpageModalDriver.cs diff --git a/PepperDashEssentials/PepperDashEssentials/UI Drivers/SmartObjectRoomsList.cs b/Essentials/PepperDashEssentials/UI Drivers/SmartObjectRoomsList.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/UI Drivers/SmartObjectRoomsList.cs rename to Essentials/PepperDashEssentials/UI Drivers/SmartObjectRoomsList.cs diff --git a/PepperDashEssentials/PepperDashEssentials/UI Drivers/UIBoolJoin.cs b/Essentials/PepperDashEssentials/UI Drivers/UIBoolJoin.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/UI Drivers/UIBoolJoin.cs rename to Essentials/PepperDashEssentials/UI Drivers/UIBoolJoin.cs diff --git a/PepperDashEssentials/PepperDashEssentials/UI Drivers/UISmartObjectJoin.cs b/Essentials/PepperDashEssentials/UI Drivers/UISmartObjectJoin.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/UI Drivers/UISmartObjectJoin.cs rename to Essentials/PepperDashEssentials/UI Drivers/UISmartObjectJoin.cs diff --git a/PepperDashEssentials/PepperDashEssentials/UI Drivers/UIStringlJoin.cs b/Essentials/PepperDashEssentials/UI Drivers/UIStringlJoin.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/UI Drivers/UIStringlJoin.cs rename to Essentials/PepperDashEssentials/UI Drivers/UIStringlJoin.cs diff --git a/PepperDashEssentials/PepperDashEssentials/UI Drivers/UIUshortJoin.cs b/Essentials/PepperDashEssentials/UI Drivers/UIUshortJoin.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/UI Drivers/UIUshortJoin.cs rename to Essentials/PepperDashEssentials/UI Drivers/UIUshortJoin.cs diff --git a/PepperDashEssentials/PepperDashEssentials/UI Drivers/enums and base.cs b/Essentials/PepperDashEssentials/UI Drivers/enums and base.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/UI Drivers/enums and base.cs rename to Essentials/PepperDashEssentials/UI Drivers/enums and base.cs diff --git a/PepperDashEssentials/PepperDashEssentials/UI/CrestronTouchpanelPropertiesConfig.cs b/Essentials/PepperDashEssentials/UI/CrestronTouchpanelPropertiesConfig.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/UI/CrestronTouchpanelPropertiesConfig.cs rename to Essentials/PepperDashEssentials/UI/CrestronTouchpanelPropertiesConfig.cs diff --git a/PepperDashEssentials/PepperDashEssentials/UI/DualDisplaySourceSRLController.cs b/Essentials/PepperDashEssentials/UI/DualDisplaySourceSRLController.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/UI/DualDisplaySourceSRLController.cs rename to Essentials/PepperDashEssentials/UI/DualDisplaySourceSRLController.cs diff --git a/PepperDashEssentials/PepperDashEssentials/UI/EssentialsTouchpanelController.cs b/Essentials/PepperDashEssentials/UI/EssentialsTouchpanelController.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/UI/EssentialsTouchpanelController.cs rename to Essentials/PepperDashEssentials/UI/EssentialsTouchpanelController.cs diff --git a/PepperDashEssentials/PepperDashEssentials/UI/SubpageReferenceListActivityItem.cs b/Essentials/PepperDashEssentials/UI/SubpageReferenceListActivityItem.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/UI/SubpageReferenceListActivityItem.cs rename to Essentials/PepperDashEssentials/UI/SubpageReferenceListActivityItem.cs diff --git a/PepperDashEssentials/PepperDashEssentials/UI/SubpageReferenceListSourceItem.cs b/Essentials/PepperDashEssentials/UI/SubpageReferenceListSourceItem.cs similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/UI/SubpageReferenceListSourceItem.cs rename to Essentials/PepperDashEssentials/UI/SubpageReferenceListSourceItem.cs diff --git a/PepperDashEssentials/PepperDashEssentials/bin/PepperDashEssentials.dll.config b/Essentials/PepperDashEssentials/app.config similarity index 100% rename from PepperDashEssentials/PepperDashEssentials/bin/PepperDashEssentials.dll.config rename to Essentials/PepperDashEssentials/app.config diff --git a/PepperDashEssentials/PepperDashEssentials.suo b/PepperDashEssentials/PepperDashEssentials.suo deleted file mode 100644 index 2350fb1f..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials.suo and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/PepperDashEssentials.csproj.user b/PepperDashEssentials/PepperDashEssentials/PepperDashEssentials.csproj.user deleted file mode 100644 index a409a157..00000000 --- a/PepperDashEssentials/PepperDashEssentials/PepperDashEssentials.csproj.user +++ /dev/null @@ -1,11 +0,0 @@ - - - E282E6BE-C7C3-4ece-916A-88FB1CF8AF3C - - - true - Program - \Simpl\App01\SimplSharpPro.exe - 01 PepperDashEssentials - - \ No newline at end of file diff --git a/PepperDashEssentials/PepperDashEssentials/PepperDashEssentials.projectinfo b/PepperDashEssentials/PepperDashEssentials/PepperDashEssentials.projectinfo deleted file mode 100644 index 1cee78c6..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/PepperDashEssentials.projectinfo and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2016-11-18 11-41-34).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2016-11-18 11-41-34).log deleted file mode 100644 index 0f3427aa..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2016-11-18 11-41-34).log +++ /dev/null @@ -1,9 +0,0 @@ -11/18/2016 11:41:34 AM, Info: Initializing SIMPLSharp Services... -11/18/2016 11:41:34 AM, Info: ProjectInfo successfully initialized. -11/18/2016 11:45:04 AM, Info: Saving project information... -11/18/2016 11:45:04 AM, Info: Saving project information... -11/18/2016 11:45:04 AM, Info: Saving project information... -11/18/2016 11:45:04 AM, Info: Saving project information... -11/18/2016 11:45:04 AM, Info: Saving project information... -11/18/2016 11:45:04 AM, Info: Saving project information... -11/18/2016 11:45:05 AM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2016-11-18 11-46-54).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2016-11-18 11-46-54).log deleted file mode 100644 index 4a287a1e..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2016-11-18 11-46-54).log +++ /dev/null @@ -1,20 +0,0 @@ -11/18/2016 11:46:54 AM, Info: Initializing SIMPLSharp Services... -11/18/2016 11:46:54 AM, Info: ProjectInfo successfully initialized. -11/18/2016 11:49:22 AM, Info: Saving project information... -11/18/2016 11:49:22 AM, Info: Saving project information... -11/18/2016 11:49:22 AM, Info: Saving project information... -11/18/2016 11:49:22 AM, Info: Saving project information... -11/18/2016 11:49:22 AM, Info: Saving project information... -11/18/2016 11:49:22 AM, Info: Saving project information... -11/18/2016 11:52:46 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-http-server\EssentialsHttpServer\bin\EssentialsHttpServer.dll... -11/18/2016 11:53:06 AM, Info: Saving project information... -11/18/2016 11:53:06 AM, Info: Saving project information... -11/18/2016 11:53:06 AM, Info: Saving project information... -11/18/2016 11:53:06 AM, Info: Saving project information... -11/18/2016 11:53:07 AM, Info: Saving project information... -11/18/2016 11:53:07 AM, Info: Saving project information... -11/18/2016 11:53:09 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -11/18/2016 11:53:09 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -11/18/2016 11:53:10 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -11/18/2016 11:53:11 AM, Info: Saving project information... -11/18/2016 12:51:23 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2016-11-21 08-15-37).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2016-11-21 08-15-37).log deleted file mode 100644 index de0a7a9b..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2016-11-21 08-15-37).log +++ /dev/null @@ -1,3 +0,0 @@ -11/21/2016 8:15:37 AM, Info: Initializing SIMPLSharp Services... -11/21/2016 8:15:37 AM, Info: ProjectInfo successfully initialized. -11/21/2016 8:32:35 AM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2016-11-21 08-32-44).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2016-11-21 08-32-44).log deleted file mode 100644 index a09c4ea7..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2016-11-21 08-32-44).log +++ /dev/null @@ -1,3 +0,0 @@ -11/21/2016 8:32:44 AM, Info: Initializing SIMPLSharp Services... -11/21/2016 8:32:44 AM, Info: ProjectInfo successfully initialized. -11/21/2016 8:33:03 AM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-03 14-46-05).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-03 14-46-05).log deleted file mode 100644 index 4cf32627..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-03 14-46-05).log +++ /dev/null @@ -1,11 +0,0 @@ -1/3/2017 2:46:05 PM, Info: Initializing SIMPLSharp Services... -1/3/2017 2:46:05 PM, Info: ProjectInfo successfully initialized. -1/3/2017 3:29:58 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/3/2017 3:29:59 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/3/2017 3:29:59 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/3/2017 3:30:01 PM, Info: Saving project information... -1/3/2017 3:36:25 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/3/2017 3:36:26 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/3/2017 3:36:26 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/3/2017 3:36:27 PM, Info: Saving project information... -1/3/2017 4:32:20 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-10 15-37-56).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-10 15-37-56).log deleted file mode 100644 index 4e492f3b..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-10 15-37-56).log +++ /dev/null @@ -1,3 +0,0 @@ -1/10/2017 3:37:56 PM, Info: Initializing SIMPLSharp Services... -1/10/2017 3:37:57 PM, Info: ProjectInfo successfully initialized. -1/10/2017 3:41:24 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-16 09-03-58).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-16 09-03-58).log deleted file mode 100644 index 0dbf3416..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-16 09-03-58).log +++ /dev/null @@ -1,31 +0,0 @@ -1/16/2017 9:03:58 AM, Info: Initializing SIMPLSharp Services... -1/16/2017 9:03:58 AM, Info: ProjectInfo successfully initialized. -1/17/2017 9:47:21 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/17/2017 9:47:22 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/17/2017 9:47:22 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/17/2017 9:47:24 AM, Info: Saving project information... -1/17/2017 10:10:33 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/17/2017 10:10:33 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/17/2017 10:10:34 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/17/2017 10:10:35 AM, Info: Saving project information... -1/17/2017 11:27:26 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/17/2017 11:27:27 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/17/2017 11:27:27 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/17/2017 11:27:28 AM, Info: Saving project information... -1/17/2017 11:31:13 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/17/2017 11:31:13 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/17/2017 11:31:13 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/17/2017 11:31:14 AM, Info: Saving project information... -1/17/2017 12:36:38 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/17/2017 12:36:38 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/17/2017 12:36:39 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/17/2017 12:36:40 PM, Info: Saving project information... -1/17/2017 12:39:52 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/17/2017 12:39:52 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/17/2017 12:39:52 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/17/2017 12:39:54 PM, Info: Saving project information... -1/17/2017 12:40:18 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/17/2017 12:40:19 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/17/2017 12:40:19 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/17/2017 12:40:20 PM, Info: Saving project information... -1/17/2017 5:15:33 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-24 08-36-38).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-24 08-36-38).log deleted file mode 100644 index 40526e86..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-24 08-36-38).log +++ /dev/null @@ -1,49 +0,0 @@ -1/24/2017 8:36:38 AM, Info: Initializing SIMPLSharp Services... -1/24/2017 8:36:38 AM, Info: ProjectInfo successfully initialized. -1/24/2017 8:57:18 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/24/2017 8:57:20 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/24/2017 8:57:20 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/24/2017 8:57:21 AM, Info: Saving project information... -1/24/2017 8:58:46 AM, Info: Saving project information... -1/24/2017 8:58:46 AM, Info: Saving project information... -1/24/2017 8:58:46 AM, Info: Saving project information... -1/24/2017 8:58:46 AM, Info: Saving project information... -1/24/2017 8:58:46 AM, Info: Saving project information... -1/24/2017 8:58:46 AM, Info: Saving project information... -1/24/2017 8:58:47 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/24/2017 8:58:48 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/24/2017 8:58:48 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/24/2017 8:58:50 AM, Info: Saving project information... -1/24/2017 9:25:04 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/24/2017 9:25:04 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/24/2017 9:25:05 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/24/2017 9:25:06 AM, Info: Saving project information... -1/24/2017 9:54:09 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/24/2017 9:54:09 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/24/2017 9:54:09 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/24/2017 9:54:11 AM, Info: Saving project information... -1/24/2017 10:23:04 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\pepperdash-portal-sync\SspPortalSync\SspPortalSync\bin\PepperDashPortalSync.dll... -1/24/2017 10:24:52 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\pepperdash-portal-sync\PepperDashCorePortalSync\PepperDashPortalSync\bin\PepperDashCorePortalSync.dll... -1/24/2017 10:25:07 AM, Info: Saving project information... -1/24/2017 10:25:07 AM, Info: Saving project information... -1/24/2017 10:25:07 AM, Info: Saving project information... -1/24/2017 10:25:07 AM, Info: Saving project information... -1/24/2017 10:25:07 AM, Info: Saving project information... -1/24/2017 10:25:07 AM, Info: Saving project information... -1/24/2017 10:25:09 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/24/2017 10:25:10 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/24/2017 10:25:10 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/24/2017 10:25:11 AM, Info: Saving project information... -1/24/2017 10:25:51 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/24/2017 10:25:52 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/24/2017 10:25:52 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/24/2017 10:25:53 AM, Info: Saving project information... -1/24/2017 10:28:49 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/24/2017 10:28:50 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/24/2017 10:28:50 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/24/2017 10:28:51 AM, Info: Saving project information... -1/24/2017 10:36:42 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/24/2017 10:36:42 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/24/2017 10:36:43 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/24/2017 10:36:44 AM, Info: Saving project information... -1/24/2017 1:02:32 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-31 08-59-28).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-31 08-59-28).log deleted file mode 100644 index a2824dfc..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-31 08-59-28).log +++ /dev/null @@ -1,91 +0,0 @@ -1/31/2017 8:59:28 AM, Info: Initializing SIMPLSharp Services... -1/31/2017 8:59:28 AM, Info: ProjectInfo successfully initialized. -1/31/2017 11:08:48 AM, Info: Saving project information... -1/31/2017 11:08:48 AM, Info: Saving project information... -1/31/2017 11:08:48 AM, Info: Saving project information... -1/31/2017 11:10:57 AM, Info: Saving project information... -1/31/2017 11:10:57 AM, Info: Saving project information... -1/31/2017 11:10:57 AM, Info: Saving project information... -1/31/2017 11:10:57 AM, Info: Saving project information... -1/31/2017 11:10:57 AM, Info: Saving project information... -1/31/2017 11:10:57 AM, Info: Saving project information... -1/31/2017 11:11:00 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/31/2017 11:11:01 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/31/2017 11:11:01 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/31/2017 11:11:03 AM, Info: Saving project information... -1/31/2017 11:57:55 AM, Info: Saving project information... -1/31/2017 11:57:55 AM, Info: Saving project information... -1/31/2017 11:57:55 AM, Info: Saving project information... -1/31/2017 12:02:55 PM, Info: Saving project information... -1/31/2017 12:02:55 PM, Info: Saving project information... -1/31/2017 12:02:55 PM, Info: Saving project information... -1/31/2017 12:07:55 PM, Info: Saving project information... -1/31/2017 12:07:55 PM, Info: Saving project information... -1/31/2017 12:07:55 PM, Info: Saving project information... -1/31/2017 12:12:55 PM, Info: Saving project information... -1/31/2017 12:12:55 PM, Info: Saving project information... -1/31/2017 12:12:55 PM, Info: Saving project information... -1/31/2017 12:17:55 PM, Info: Saving project information... -1/31/2017 12:17:55 PM, Info: Saving project information... -1/31/2017 12:17:55 PM, Info: Saving project information... -1/31/2017 12:22:55 PM, Info: Saving project information... -1/31/2017 12:22:55 PM, Info: Saving project information... -1/31/2017 12:22:55 PM, Info: Saving project information... -1/31/2017 12:27:55 PM, Info: Saving project information... -1/31/2017 12:27:55 PM, Info: Saving project information... -1/31/2017 12:27:55 PM, Info: Saving project information... -1/31/2017 12:32:55 PM, Info: Saving project information... -1/31/2017 12:32:55 PM, Info: Saving project information... -1/31/2017 12:32:55 PM, Info: Saving project information... -1/31/2017 12:37:55 PM, Info: Saving project information... -1/31/2017 12:37:55 PM, Info: Saving project information... -1/31/2017 12:37:55 PM, Info: Saving project information... -1/31/2017 12:42:55 PM, Info: Saving project information... -1/31/2017 12:42:55 PM, Info: Saving project information... -1/31/2017 12:42:55 PM, Info: Saving project information... -1/31/2017 12:47:55 PM, Info: Saving project information... -1/31/2017 12:47:55 PM, Info: Saving project information... -1/31/2017 12:47:55 PM, Info: Saving project information... -1/31/2017 12:52:55 PM, Info: Saving project information... -1/31/2017 12:52:55 PM, Info: Saving project information... -1/31/2017 12:52:55 PM, Info: Saving project information... -1/31/2017 12:57:55 PM, Info: Saving project information... -1/31/2017 12:57:55 PM, Info: Saving project information... -1/31/2017 12:57:55 PM, Info: Saving project information... -1/31/2017 1:02:55 PM, Info: Saving project information... -1/31/2017 1:02:55 PM, Info: Saving project information... -1/31/2017 1:02:55 PM, Info: Saving project information... -1/31/2017 1:07:55 PM, Info: Saving project information... -1/31/2017 1:07:55 PM, Info: Saving project information... -1/31/2017 1:07:55 PM, Info: Saving project information... -1/31/2017 1:12:55 PM, Info: Saving project information... -1/31/2017 1:12:55 PM, Info: Saving project information... -1/31/2017 1:12:55 PM, Info: Saving project information... -1/31/2017 1:17:55 PM, Info: Saving project information... -1/31/2017 1:17:55 PM, Info: Saving project information... -1/31/2017 1:17:55 PM, Info: Saving project information... -1/31/2017 1:22:55 PM, Info: Saving project information... -1/31/2017 1:22:55 PM, Info: Saving project information... -1/31/2017 1:22:55 PM, Info: Saving project information... -1/31/2017 1:27:55 PM, Info: Saving project information... -1/31/2017 1:27:55 PM, Info: Saving project information... -1/31/2017 1:27:55 PM, Info: Saving project information... -1/31/2017 1:32:55 PM, Info: Saving project information... -1/31/2017 1:32:55 PM, Info: Saving project information... -1/31/2017 1:32:55 PM, Info: Saving project information... -1/31/2017 1:37:55 PM, Info: Saving project information... -1/31/2017 1:37:55 PM, Info: Saving project information... -1/31/2017 1:37:55 PM, Info: Saving project information... -1/31/2017 1:42:55 PM, Info: Saving project information... -1/31/2017 1:42:55 PM, Info: Saving project information... -1/31/2017 1:42:55 PM, Info: Saving project information... -1/31/2017 1:47:55 PM, Info: Saving project information... -1/31/2017 1:47:55 PM, Info: Saving project information... -1/31/2017 1:47:55 PM, Info: Saving project information... -1/31/2017 1:52:24 PM, Info: Saving project information... -1/31/2017 1:52:24 PM, Info: Saving project information... -1/31/2017 1:52:24 PM, Info: Saving project information... -1/31/2017 1:52:24 PM, Info: Saving project information... -1/31/2017 1:52:24 PM, Info: Saving project information... -1/31/2017 1:52:24 PM, Info: Saving project information... -1/31/2017 1:52:25 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-31 14-52-20).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-31 14-52-20).log deleted file mode 100644 index 5fe6ce30..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-31 14-52-20).log +++ /dev/null @@ -1,3 +0,0 @@ -1/31/2017 2:52:20 PM, Info: Initializing SIMPLSharp Services... -1/31/2017 2:52:20 PM, Info: ProjectInfo successfully initialized. -1/31/2017 4:17:21 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-31 16-28-49).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-31 16-28-49).log deleted file mode 100644 index 754313f7..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-01-31 16-28-49).log +++ /dev/null @@ -1,7 +0,0 @@ -1/31/2017 4:28:49 PM, Info: Initializing SIMPLSharp Services... -1/31/2017 4:28:49 PM, Info: ProjectInfo successfully initialized. -1/31/2017 4:53:28 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -1/31/2017 4:53:29 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -1/31/2017 4:53:29 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -1/31/2017 4:53:31 PM, Info: Saving project information... -1/31/2017 5:02:34 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-01 09-00-40).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-01 09-00-40).log deleted file mode 100644 index d1ecfa8e..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-01 09-00-40).log +++ /dev/null @@ -1,24 +0,0 @@ -2/1/2017 9:00:40 AM, Info: Initializing SIMPLSharp Services... -2/1/2017 9:00:41 AM, Info: ProjectInfo successfully initialized. -2/1/2017 12:08:44 PM, Info: Saving project information... -2/1/2017 12:08:44 PM, Info: Saving project information... -2/1/2017 12:08:44 PM, Info: Saving project information... -2/1/2017 12:13:44 PM, Info: Saving project information... -2/1/2017 12:13:44 PM, Info: Saving project information... -2/1/2017 12:13:44 PM, Info: Saving project information... -2/1/2017 12:18:45 PM, Info: Saving project information... -2/1/2017 12:18:45 PM, Info: Saving project information... -2/1/2017 12:18:45 PM, Info: Saving project information... -2/1/2017 12:23:44 PM, Info: Saving project information... -2/1/2017 12:23:44 PM, Info: Saving project information... -2/1/2017 12:23:44 PM, Info: Saving project information... -2/1/2017 12:28:44 PM, Info: Saving project information... -2/1/2017 12:28:44 PM, Info: Saving project information... -2/1/2017 12:28:44 PM, Info: Saving project information... -2/1/2017 12:33:27 PM, Info: Saving project information... -2/1/2017 12:33:27 PM, Info: Saving project information... -2/1/2017 12:33:27 PM, Info: Saving project information... -2/1/2017 12:33:27 PM, Info: Saving project information... -2/1/2017 12:33:27 PM, Info: Saving project information... -2/1/2017 12:33:27 PM, Info: Saving project information... -2/1/2017 12:33:30 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-01 14-33-10).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-01 14-33-10).log deleted file mode 100644 index b9a6d7f2..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-01 14-33-10).log +++ /dev/null @@ -1,3 +0,0 @@ -2/1/2017 2:33:10 PM, Info: Initializing SIMPLSharp Services... -2/1/2017 2:33:10 PM, Info: ProjectInfo successfully initialized. -2/1/2017 2:41:00 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-02 08-35-09).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-02 08-35-09).log deleted file mode 100644 index 23994887..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-02 08-35-09).log +++ /dev/null @@ -1,3 +0,0 @@ -2/2/2017 8:35:09 AM, Info: Initializing SIMPLSharp Services... -2/2/2017 8:35:09 AM, Info: ProjectInfo successfully initialized. -2/2/2017 8:36:58 AM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-02 09-43-08).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-02 09-43-08).log deleted file mode 100644 index fbbbad54..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-02 09-43-08).log +++ /dev/null @@ -1,111 +0,0 @@ -2/2/2017 9:43:08 AM, Info: Initializing SIMPLSharp Services... -2/2/2017 9:43:08 AM, Info: ProjectInfo successfully initialized. -2/2/2017 9:48:00 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/2/2017 9:48:01 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/2/2017 9:48:02 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/2/2017 9:48:03 AM, Info: Saving project information... -2/2/2017 9:49:16 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/2/2017 9:49:16 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/2/2017 9:49:16 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/2/2017 9:49:18 AM, Info: Saving project information... -2/2/2017 10:37:52 AM, Info: Saving project information... -2/2/2017 10:37:52 AM, Info: Saving project information... -2/2/2017 10:37:52 AM, Info: Saving project information... -2/2/2017 10:42:52 AM, Info: Saving project information... -2/2/2017 10:42:52 AM, Info: Saving project information... -2/2/2017 10:42:52 AM, Info: Saving project information... -2/2/2017 10:47:52 AM, Info: Saving project information... -2/2/2017 10:47:52 AM, Info: Saving project information... -2/2/2017 10:47:52 AM, Info: Saving project information... -2/2/2017 10:52:52 AM, Info: Saving project information... -2/2/2017 10:52:52 AM, Info: Saving project information... -2/2/2017 10:52:52 AM, Info: Saving project information... -2/2/2017 10:57:52 AM, Info: Saving project information... -2/2/2017 10:57:52 AM, Info: Saving project information... -2/2/2017 10:57:52 AM, Info: Saving project information... -2/2/2017 11:02:52 AM, Info: Saving project information... -2/2/2017 11:02:52 AM, Info: Saving project information... -2/2/2017 11:02:52 AM, Info: Saving project information... -2/2/2017 11:07:52 AM, Info: Saving project information... -2/2/2017 11:07:52 AM, Info: Saving project information... -2/2/2017 11:07:52 AM, Info: Saving project information... -2/2/2017 11:12:52 AM, Info: Saving project information... -2/2/2017 11:12:52 AM, Info: Saving project information... -2/2/2017 11:12:52 AM, Info: Saving project information... -2/2/2017 11:17:52 AM, Info: Saving project information... -2/2/2017 11:17:52 AM, Info: Saving project information... -2/2/2017 11:17:52 AM, Info: Saving project information... -2/2/2017 12:08:13 PM, Info: Saving project information... -2/2/2017 12:08:13 PM, Info: Saving project information... -2/2/2017 12:08:13 PM, Info: Saving project information... -2/2/2017 12:13:12 PM, Info: Saving project information... -2/2/2017 12:13:12 PM, Info: Saving project information... -2/2/2017 12:13:12 PM, Info: Saving project information... -2/2/2017 12:18:12 PM, Info: Saving project information... -2/2/2017 12:18:12 PM, Info: Saving project information... -2/2/2017 12:18:12 PM, Info: Saving project information... -2/2/2017 12:23:12 PM, Info: Saving project information... -2/2/2017 12:23:12 PM, Info: Saving project information... -2/2/2017 12:23:12 PM, Info: Saving project information... -2/2/2017 12:28:12 PM, Info: Saving project information... -2/2/2017 12:28:12 PM, Info: Saving project information... -2/2/2017 12:28:12 PM, Info: Saving project information... -2/2/2017 12:33:12 PM, Info: Saving project information... -2/2/2017 12:33:12 PM, Info: Saving project information... -2/2/2017 12:33:12 PM, Info: Saving project information... -2/2/2017 12:38:12 PM, Info: Saving project information... -2/2/2017 12:38:12 PM, Info: Saving project information... -2/2/2017 12:38:12 PM, Info: Saving project information... -2/2/2017 12:43:12 PM, Info: Saving project information... -2/2/2017 12:43:12 PM, Info: Saving project information... -2/2/2017 12:43:12 PM, Info: Saving project information... -2/2/2017 12:48:12 PM, Info: Saving project information... -2/2/2017 12:48:12 PM, Info: Saving project information... -2/2/2017 12:48:12 PM, Info: Saving project information... -2/2/2017 12:53:12 PM, Info: Saving project information... -2/2/2017 12:53:12 PM, Info: Saving project information... -2/2/2017 12:53:12 PM, Info: Saving project information... -2/2/2017 12:58:12 PM, Info: Saving project information... -2/2/2017 12:58:12 PM, Info: Saving project information... -2/2/2017 12:58:12 PM, Info: Saving project information... -2/2/2017 1:03:12 PM, Info: Saving project information... -2/2/2017 1:03:12 PM, Info: Saving project information... -2/2/2017 1:03:12 PM, Info: Saving project information... -2/2/2017 1:08:12 PM, Info: Saving project information... -2/2/2017 1:08:12 PM, Info: Saving project information... -2/2/2017 1:08:12 PM, Info: Saving project information... -2/2/2017 1:12:32 PM, Info: Saving project information... -2/2/2017 1:12:32 PM, Info: Saving project information... -2/2/2017 1:12:32 PM, Info: Saving project information... -2/2/2017 1:12:32 PM, Info: Saving project information... -2/2/2017 1:12:32 PM, Info: Saving project information... -2/2/2017 1:12:32 PM, Info: Saving project information... -2/2/2017 1:12:34 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/2/2017 1:12:35 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/2/2017 1:12:36 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/2/2017 1:12:37 PM, Info: Saving project information... -2/2/2017 1:12:49 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/2/2017 1:12:49 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/2/2017 1:12:49 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/2/2017 1:12:51 PM, Info: Saving project information... -2/2/2017 1:19:54 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/2/2017 1:19:55 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/2/2017 1:19:55 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/2/2017 1:19:56 PM, Info: Saving project information... -2/2/2017 2:49:46 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/2/2017 2:49:47 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/2/2017 2:49:47 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/2/2017 2:49:49 PM, Info: Saving project information... -2/2/2017 3:17:34 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/2/2017 3:17:35 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/2/2017 3:17:35 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/2/2017 3:17:36 PM, Info: Saving project information... -2/2/2017 3:35:40 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/2/2017 3:35:41 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/2/2017 3:35:41 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/2/2017 3:35:42 PM, Info: Saving project information... -2/2/2017 4:25:42 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/2/2017 4:25:43 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/2/2017 4:25:43 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/2/2017 4:25:44 PM, Info: Saving project information... -2/2/2017 4:34:32 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-06 13-06-34).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-06 13-06-34).log deleted file mode 100644 index adf2a2b8..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-06 13-06-34).log +++ /dev/null @@ -1,43 +0,0 @@ -2/6/2017 1:06:34 PM, Info: Initializing SIMPLSharp Services... -2/6/2017 1:06:34 PM, Info: ProjectInfo successfully initialized. -2/6/2017 1:10:17 PM, Info: Saving project information... -2/6/2017 1:10:17 PM, Info: Saving project information... -2/6/2017 1:10:17 PM, Info: Saving project information... -2/6/2017 1:10:17 PM, Info: Saving project information... -2/6/2017 1:10:17 PM, Info: Saving project information... -2/6/2017 1:10:17 PM, Info: Saving project information... -2/6/2017 1:10:21 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/6/2017 1:10:22 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/6/2017 1:10:22 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/6/2017 1:10:23 PM, Info: Saving project information... -2/6/2017 1:44:38 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/6/2017 1:44:38 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/6/2017 1:44:39 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/6/2017 1:44:40 PM, Info: Saving project information... -2/6/2017 1:48:23 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/6/2017 1:48:24 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/6/2017 1:48:24 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/6/2017 1:48:25 PM, Info: Saving project information... -2/6/2017 1:48:46 PM, Info: Saving project information... -2/6/2017 1:48:46 PM, Info: Saving project information... -2/6/2017 1:48:46 PM, Info: Saving project information... -2/6/2017 1:48:46 PM, Info: Saving project information... -2/6/2017 1:48:46 PM, Info: Saving project information... -2/6/2017 1:48:46 PM, Info: Saving project information... -2/6/2017 1:48:48 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/6/2017 1:48:48 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/6/2017 1:48:48 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/6/2017 1:48:50 PM, Info: Saving project information... -2/6/2017 1:54:12 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/6/2017 1:54:13 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/6/2017 1:54:13 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/6/2017 1:54:14 PM, Info: Saving project information... -2/6/2017 2:14:07 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/6/2017 2:14:07 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/6/2017 2:14:07 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/6/2017 2:14:09 PM, Info: Saving project information... -2/6/2017 2:19:25 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/6/2017 2:19:25 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/6/2017 2:19:26 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/6/2017 2:19:27 PM, Info: Saving project information... -2/6/2017 2:34:42 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-06 15-56-15).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-06 15-56-15).log deleted file mode 100644 index 49910299..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-06 15-56-15).log +++ /dev/null @@ -1,35 +0,0 @@ -2/6/2017 3:56:15 PM, Info: Initializing SIMPLSharp Services... -2/6/2017 3:56:15 PM, Info: ProjectInfo successfully initialized. -2/6/2017 4:07:50 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/6/2017 4:07:51 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/6/2017 4:07:51 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/6/2017 4:07:53 PM, Info: Saving project information... -2/6/2017 4:41:04 PM, Info: Saving project information... -2/6/2017 4:41:04 PM, Info: Saving project information... -2/6/2017 4:41:04 PM, Info: Saving project information... -2/6/2017 4:46:04 PM, Info: Saving project information... -2/6/2017 4:46:04 PM, Info: Saving project information... -2/6/2017 4:46:04 PM, Info: Saving project information... -2/6/2017 4:51:04 PM, Info: Saving project information... -2/6/2017 4:51:04 PM, Info: Saving project information... -2/6/2017 4:51:04 PM, Info: Saving project information... -2/6/2017 4:56:04 PM, Info: Saving project information... -2/6/2017 4:56:04 PM, Info: Saving project information... -2/6/2017 4:56:04 PM, Info: Saving project information... -2/6/2017 5:01:04 PM, Info: Saving project information... -2/6/2017 5:01:04 PM, Info: Saving project information... -2/6/2017 5:01:04 PM, Info: Saving project information... -2/6/2017 5:06:04 PM, Info: Saving project information... -2/6/2017 5:06:04 PM, Info: Saving project information... -2/6/2017 5:06:04 PM, Info: Saving project information... -2/6/2017 5:10:39 PM, Info: Saving project information... -2/6/2017 5:10:39 PM, Info: Saving project information... -2/6/2017 5:10:39 PM, Info: Saving project information... -2/6/2017 5:10:39 PM, Info: Saving project information... -2/6/2017 5:10:39 PM, Info: Saving project information... -2/6/2017 5:10:39 PM, Info: Saving project information... -2/6/2017 5:10:41 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/6/2017 5:10:42 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/6/2017 5:10:43 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/6/2017 5:10:44 PM, Info: Saving project information... -2/7/2017 8:57:36 AM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-07 09-06-38).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-07 09-06-38).log deleted file mode 100644 index 1cb368bc..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-07 09-06-38).log +++ /dev/null @@ -1,3 +0,0 @@ -2/7/2017 9:06:38 AM, Info: Initializing SIMPLSharp Services... -2/7/2017 9:06:38 AM, Info: ProjectInfo successfully initialized. -2/7/2017 9:13:18 AM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-07 11-56-54).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-07 11-56-54).log deleted file mode 100644 index cb6bd63b..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-07 11-56-54).log +++ /dev/null @@ -1,3 +0,0 @@ -2/7/2017 11:56:54 AM, Info: Initializing SIMPLSharp Services... -2/7/2017 11:56:55 AM, Info: ProjectInfo successfully initialized. -2/7/2017 1:28:57 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-07 15-40-21).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-07 15-40-21).log deleted file mode 100644 index b6f0f771..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-07 15-40-21).log +++ /dev/null @@ -1,11 +0,0 @@ -2/7/2017 3:40:21 PM, Info: Initializing SIMPLSharp Services... -2/7/2017 3:40:21 PM, Info: ProjectInfo successfully initialized. -2/7/2017 5:31:40 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/7/2017 5:31:41 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/7/2017 5:31:42 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/7/2017 5:31:43 PM, Info: Saving project information... -2/7/2017 5:36:38 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/7/2017 5:36:39 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/7/2017 5:36:39 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/7/2017 5:36:40 PM, Info: Saving project information... -2/7/2017 5:39:24 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-08 09-31-23).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-08 09-31-23).log deleted file mode 100644 index 392744d7..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-08 09-31-23).log +++ /dev/null @@ -1,7 +0,0 @@ -2/8/2017 9:31:23 AM, Info: Initializing SIMPLSharp Services... -2/8/2017 9:31:23 AM, Info: ProjectInfo successfully initialized. -2/8/2017 9:52:55 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/8/2017 9:52:57 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/8/2017 9:52:57 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/8/2017 9:52:59 AM, Info: Saving project information... -2/8/2017 10:27:42 AM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-08 10-41-39).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-08 10-41-39).log deleted file mode 100644 index 782eeec9..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-08 10-41-39).log +++ /dev/null @@ -1,7 +0,0 @@ -2/8/2017 10:41:39 AM, Info: Initializing SIMPLSharp Services... -2/8/2017 10:41:39 AM, Info: ProjectInfo successfully initialized. -2/8/2017 10:41:46 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/8/2017 10:41:47 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/8/2017 10:41:47 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/8/2017 10:41:49 AM, Info: Saving project information... -2/8/2017 10:42:00 AM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-08 11-44-50).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-08 11-44-50).log deleted file mode 100644 index d7470f6a..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-08 11-44-50).log +++ /dev/null @@ -1,13 +0,0 @@ -2/8/2017 11:44:50 AM, Info: Initializing SIMPLSharp Services... -2/8/2017 11:44:51 AM, Info: ProjectInfo successfully initialized. -2/8/2017 11:45:14 AM, Info: Saving project information... -2/8/2017 11:45:14 AM, Info: Saving project information... -2/8/2017 11:45:14 AM, Info: Saving project information... -2/8/2017 11:45:14 AM, Info: Saving project information... -2/8/2017 11:45:14 AM, Info: Saving project information... -2/8/2017 11:45:14 AM, Info: Saving project information... -2/8/2017 11:45:38 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/8/2017 11:45:39 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/8/2017 11:45:39 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/8/2017 11:45:41 AM, Info: Saving project information... -2/8/2017 11:54:00 AM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-08 12-42-19).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-08 12-42-19).log deleted file mode 100644 index 23aba703..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-08 12-42-19).log +++ /dev/null @@ -1,49 +0,0 @@ -2/8/2017 12:42:19 PM, Info: Initializing SIMPLSharp Services... -2/8/2017 12:42:19 PM, Info: ProjectInfo successfully initialized. -2/8/2017 1:05:56 PM, Info: Saving project information... -2/8/2017 1:05:56 PM, Info: Saving project information... -2/8/2017 1:05:56 PM, Info: Saving project information... -2/8/2017 1:05:56 PM, Info: Saving project information... -2/8/2017 1:05:56 PM, Info: Saving project information... -2/8/2017 1:05:56 PM, Info: Saving project information... -2/8/2017 1:06:09 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/8/2017 1:06:10 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/8/2017 1:06:10 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/8/2017 1:06:11 PM, Info: Saving project information... -2/8/2017 2:04:40 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/8/2017 2:04:40 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/8/2017 2:04:40 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/8/2017 2:04:42 PM, Info: Saving project information... -2/8/2017 2:32:10 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/8/2017 2:32:10 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/8/2017 2:32:10 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/8/2017 2:32:12 PM, Info: Saving project information... -2/8/2017 2:38:27 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/8/2017 2:38:27 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/8/2017 2:38:27 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/8/2017 2:38:29 PM, Info: Saving project information... -2/8/2017 2:41:17 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/8/2017 2:41:18 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/8/2017 2:41:18 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/8/2017 2:41:19 PM, Info: Saving project information... -2/8/2017 2:43:49 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/8/2017 2:43:49 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/8/2017 2:43:49 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/8/2017 2:43:51 PM, Info: Saving project information... -2/8/2017 2:44:11 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/8/2017 2:44:12 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/8/2017 2:44:12 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/8/2017 2:44:13 PM, Info: Saving project information... -2/8/2017 2:52:31 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/8/2017 2:52:31 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/8/2017 2:52:32 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/8/2017 2:52:33 PM, Info: Saving project information... -2/8/2017 3:09:44 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/8/2017 3:09:44 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/8/2017 3:09:45 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/8/2017 3:09:46 PM, Info: Saving project information... -2/8/2017 3:16:21 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/8/2017 3:16:22 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/8/2017 3:16:22 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/8/2017 3:16:23 PM, Info: Saving project information... -2/8/2017 3:59:21 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-09 07-42-37).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-09 07-42-37).log deleted file mode 100644 index 76ab73b9..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-09 07-42-37).log +++ /dev/null @@ -1,35 +0,0 @@ -2/9/2017 7:42:37 AM, Info: Initializing SIMPLSharp Services... -2/9/2017 7:42:37 AM, Info: ProjectInfo successfully initialized. -2/9/2017 8:56:31 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/9/2017 8:56:32 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/9/2017 8:56:32 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/9/2017 8:56:34 AM, Info: Saving project information... -2/9/2017 10:01:00 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/9/2017 10:01:00 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/9/2017 10:01:00 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/9/2017 10:01:02 AM, Info: Saving project information... -2/9/2017 10:35:15 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/9/2017 10:35:16 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/9/2017 10:35:16 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/9/2017 10:35:18 AM, Info: Saving project information... -2/9/2017 10:35:57 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/9/2017 10:35:57 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/9/2017 10:35:57 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/9/2017 10:35:59 AM, Info: Saving project information... -2/9/2017 10:53:38 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/9/2017 10:53:39 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/9/2017 10:53:39 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/9/2017 10:53:40 AM, Info: Saving project information... -2/9/2017 11:00:03 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/9/2017 11:00:04 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/9/2017 11:00:04 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/9/2017 11:00:05 AM, Info: Saving project information... -2/9/2017 11:37:00 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/9/2017 11:37:01 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/9/2017 11:37:01 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/9/2017 11:37:02 AM, Info: Saving project information... -2/9/2017 11:37:39 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/9/2017 11:37:40 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/9/2017 11:37:40 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/9/2017 11:37:41 AM, Info: Saving project information... -2/9/2017 2:32:35 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-09 14-33-30).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-09 14-33-30).log deleted file mode 100644 index e5b29151..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-09 14-33-30).log +++ /dev/null @@ -1,7 +0,0 @@ -2/9/2017 2:33:30 PM, Info: Initializing SIMPLSharp Services... -2/9/2017 2:33:31 PM, Info: ProjectInfo successfully initialized. -2/9/2017 2:44:01 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/9/2017 2:44:02 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/9/2017 2:44:02 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/9/2017 2:44:04 PM, Info: Saving project information... -2/9/2017 4:00:11 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-10 10-07-37).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-10 10-07-37).log deleted file mode 100644 index 7ab607c6..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-10 10-07-37).log +++ /dev/null @@ -1,31 +0,0 @@ -2/10/2017 10:07:37 AM, Info: Initializing SIMPLSharp Services... -2/10/2017 10:07:37 AM, Info: ProjectInfo successfully initialized. -2/10/2017 1:58:49 PM, Info: Saving project information... -2/10/2017 1:58:49 PM, Info: Saving project information... -2/10/2017 1:58:49 PM, Info: Saving project information... -2/10/2017 2:03:49 PM, Info: Saving project information... -2/10/2017 2:03:49 PM, Info: Saving project information... -2/10/2017 2:03:49 PM, Info: Saving project information... -2/10/2017 2:08:49 PM, Info: Saving project information... -2/10/2017 2:08:49 PM, Info: Saving project information... -2/10/2017 2:08:49 PM, Info: Saving project information... -2/10/2017 2:13:49 PM, Info: Saving project information... -2/10/2017 2:13:49 PM, Info: Saving project information... -2/10/2017 2:13:49 PM, Info: Saving project information... -2/10/2017 2:18:49 PM, Info: Saving project information... -2/10/2017 2:18:49 PM, Info: Saving project information... -2/10/2017 2:18:49 PM, Info: Saving project information... -2/10/2017 2:23:49 PM, Info: Saving project information... -2/10/2017 2:23:49 PM, Info: Saving project information... -2/10/2017 2:23:49 PM, Info: Saving project information... -2/10/2017 2:28:46 PM, Info: Saving project information... -2/10/2017 2:28:46 PM, Info: Saving project information... -2/10/2017 2:28:46 PM, Info: Saving project information... -2/10/2017 2:28:46 PM, Info: Saving project information... -2/10/2017 2:28:46 PM, Info: Saving project information... -2/10/2017 2:28:46 PM, Info: Saving project information... -2/10/2017 2:29:51 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/10/2017 2:29:52 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/10/2017 2:29:52 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/10/2017 2:29:54 PM, Info: Saving project information... -2/10/2017 2:31:19 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-13 14-51-26).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-13 14-51-26).log deleted file mode 100644 index 7354458f..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-13 14-51-26).log +++ /dev/null @@ -1,50 +0,0 @@ -2/13/2017 2:51:26 PM, Info: Initializing SIMPLSharp Services... -2/13/2017 2:51:26 PM, Info: ProjectInfo successfully initialized. -2/13/2017 3:00:26 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/13/2017 3:00:27 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/13/2017 3:00:27 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/13/2017 3:00:28 PM, Info: Saving project information... -2/13/2017 3:40:21 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/13/2017 3:40:21 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/13/2017 3:40:21 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/13/2017 3:40:23 PM, Info: Saving project information... -2/13/2017 3:47:17 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/13/2017 3:47:17 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/13/2017 3:47:17 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/13/2017 3:47:19 PM, Info: Saving project information... -2/13/2017 4:05:25 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/13/2017 4:05:25 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/13/2017 4:05:25 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/13/2017 4:05:27 PM, Info: Saving project information... -2/13/2017 4:21:21 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/13/2017 4:21:21 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/13/2017 4:21:22 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/13/2017 4:21:23 PM, Info: Saving project information... -2/13/2017 4:43:04 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials-core\PepperDashEssentialsBase\PepperDashEssentialsBase\bin\PepperDash_Essentials_Core.dll... -2/13/2017 4:43:16 PM, Info: Saving project information... -2/13/2017 4:43:16 PM, Info: Saving project information... -2/13/2017 4:43:16 PM, Info: Saving project information... -2/13/2017 4:43:16 PM, Info: Saving project information... -2/13/2017 4:43:16 PM, Info: Saving project information... -2/13/2017 4:43:16 PM, Info: Saving project information... -2/13/2017 4:43:19 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/13/2017 4:43:19 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/13/2017 4:43:19 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/13/2017 4:43:21 PM, Info: Saving project information... -2/13/2017 4:44:06 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/13/2017 4:44:07 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/13/2017 4:44:07 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/13/2017 4:44:08 PM, Info: Saving project information... -2/13/2017 4:50:55 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/13/2017 4:50:55 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/13/2017 4:50:55 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/13/2017 4:50:57 PM, Info: Saving project information... -2/13/2017 5:19:48 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/13/2017 5:19:49 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/13/2017 5:19:49 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/13/2017 5:19:50 PM, Info: Saving project information... -2/13/2017 5:26:40 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/13/2017 5:26:41 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/13/2017 5:26:41 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/13/2017 5:26:43 PM, Info: Saving project information... -2/13/2017 5:29:13 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-14 09-19-32).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-14 09-19-32).log deleted file mode 100644 index b662ad5a..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-14 09-19-32).log +++ /dev/null @@ -1,110 +0,0 @@ -2/14/2017 9:19:32 AM, Info: Initializing SIMPLSharp Services... -2/14/2017 9:19:32 AM, Info: ProjectInfo successfully initialized. -2/14/2017 9:49:26 AM, Info: Saving project information... -2/14/2017 9:49:26 AM, Info: Saving project information... -2/14/2017 9:49:26 AM, Info: Saving project information... -2/14/2017 9:54:26 AM, Info: Saving project information... -2/14/2017 9:54:26 AM, Info: Saving project information... -2/14/2017 9:54:26 AM, Info: Saving project information... -2/14/2017 9:59:26 AM, Info: Saving project information... -2/14/2017 9:59:26 AM, Info: Saving project information... -2/14/2017 9:59:26 AM, Info: Saving project information... -2/14/2017 10:04:24 AM, Info: Saving project information... -2/14/2017 10:04:24 AM, Info: Saving project information... -2/14/2017 10:04:24 AM, Info: Saving project information... -2/14/2017 10:04:24 AM, Info: Saving project information... -2/14/2017 10:04:24 AM, Info: Saving project information... -2/14/2017 10:04:24 AM, Info: Saving project information... -2/14/2017 10:04:27 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/14/2017 10:04:28 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/14/2017 10:04:29 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/14/2017 10:04:30 AM, Info: Saving project information... -2/14/2017 10:45:07 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/14/2017 10:45:08 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/14/2017 10:45:08 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/14/2017 10:45:09 AM, Info: Saving project information... -2/14/2017 10:54:24 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/14/2017 10:54:25 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/14/2017 10:54:25 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/14/2017 10:54:26 AM, Info: Saving project information... -2/14/2017 11:20:14 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/14/2017 11:20:15 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/14/2017 11:20:15 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/14/2017 11:20:16 AM, Info: Saving project information... -2/14/2017 11:24:21 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/14/2017 11:24:21 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/14/2017 11:24:21 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/14/2017 11:24:23 AM, Info: Saving project information... -2/14/2017 3:14:36 PM, Info: Saving project information... -2/14/2017 3:14:36 PM, Info: Saving project information... -2/14/2017 3:14:36 PM, Info: Saving project information... -2/14/2017 3:19:36 PM, Info: Saving project information... -2/14/2017 3:19:36 PM, Info: Saving project information... -2/14/2017 3:19:36 PM, Info: Saving project information... -2/14/2017 3:24:36 PM, Info: Saving project information... -2/14/2017 3:24:36 PM, Info: Saving project information... -2/14/2017 3:24:36 PM, Info: Saving project information... -2/14/2017 3:29:36 PM, Info: Saving project information... -2/14/2017 3:29:36 PM, Info: Saving project information... -2/14/2017 3:29:36 PM, Info: Saving project information... -2/14/2017 3:34:36 PM, Info: Saving project information... -2/14/2017 3:34:36 PM, Info: Saving project information... -2/14/2017 3:34:36 PM, Info: Saving project information... -2/14/2017 3:39:36 PM, Info: Saving project information... -2/14/2017 3:39:36 PM, Info: Saving project information... -2/14/2017 3:39:36 PM, Info: Saving project information... -2/14/2017 3:56:52 PM, Info: Saving project information... -2/14/2017 3:56:52 PM, Info: Saving project information... -2/14/2017 3:56:52 PM, Info: Saving project information... -2/14/2017 4:01:51 PM, Info: Saving project information... -2/14/2017 4:01:51 PM, Info: Saving project information... -2/14/2017 4:01:51 PM, Info: Saving project information... -2/14/2017 4:06:51 PM, Info: Saving project information... -2/14/2017 4:06:51 PM, Info: Saving project information... -2/14/2017 4:06:51 PM, Info: Saving project information... -2/14/2017 4:11:51 PM, Info: Saving project information... -2/14/2017 4:11:51 PM, Info: Saving project information... -2/14/2017 4:11:51 PM, Info: Saving project information... -2/14/2017 4:16:51 PM, Info: Saving project information... -2/14/2017 4:16:51 PM, Info: Saving project information... -2/14/2017 4:16:51 PM, Info: Saving project information... -2/14/2017 4:21:51 PM, Info: Saving project information... -2/14/2017 4:21:51 PM, Info: Saving project information... -2/14/2017 4:21:51 PM, Info: Saving project information... -2/14/2017 4:26:51 PM, Info: Saving project information... -2/14/2017 4:26:51 PM, Info: Saving project information... -2/14/2017 4:26:51 PM, Info: Saving project information... -2/14/2017 4:31:51 PM, Info: Saving project information... -2/14/2017 4:31:51 PM, Info: Saving project information... -2/14/2017 4:31:51 PM, Info: Saving project information... -2/14/2017 4:36:51 PM, Info: Saving project information... -2/14/2017 4:36:51 PM, Info: Saving project information... -2/14/2017 4:36:51 PM, Info: Saving project information... -2/14/2017 4:41:51 PM, Info: Saving project information... -2/14/2017 4:41:51 PM, Info: Saving project information... -2/14/2017 4:41:51 PM, Info: Saving project information... -2/14/2017 4:46:51 PM, Info: Saving project information... -2/14/2017 4:46:51 PM, Info: Saving project information... -2/14/2017 4:46:51 PM, Info: Saving project information... -2/14/2017 4:51:51 PM, Info: Saving project information... -2/14/2017 4:51:51 PM, Info: Saving project information... -2/14/2017 4:51:51 PM, Info: Saving project information... -2/14/2017 4:56:51 PM, Info: Saving project information... -2/14/2017 4:56:51 PM, Info: Saving project information... -2/14/2017 4:56:51 PM, Info: Saving project information... -2/14/2017 5:01:51 PM, Info: Saving project information... -2/14/2017 5:01:51 PM, Info: Saving project information... -2/14/2017 5:01:51 PM, Info: Saving project information... -2/14/2017 5:06:51 PM, Info: Saving project information... -2/14/2017 5:06:51 PM, Info: Saving project information... -2/14/2017 5:06:51 PM, Info: Saving project information... -2/14/2017 5:11:51 PM, Info: Saving project information... -2/14/2017 5:11:51 PM, Info: Saving project information... -2/14/2017 5:11:51 PM, Info: Saving project information... -2/14/2017 5:16:18 PM, Info: Saving project information... -2/14/2017 5:16:18 PM, Info: Saving project information... -2/14/2017 5:16:18 PM, Info: Saving project information... -2/14/2017 5:16:18 PM, Info: Saving project information... -2/14/2017 5:16:18 PM, Info: Saving project information... -2/14/2017 5:16:18 PM, Info: Saving project information... -2/14/2017 5:16:19 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-15 08-34-11).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-15 08-34-11).log deleted file mode 100644 index ff576f3e..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-15 08-34-11).log +++ /dev/null @@ -1,35 +0,0 @@ -2/15/2017 8:34:11 AM, Info: Initializing SIMPLSharp Services... -2/15/2017 8:34:12 AM, Info: ProjectInfo successfully initialized. -2/15/2017 9:12:15 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/15/2017 9:12:16 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/15/2017 9:12:16 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/15/2017 9:12:18 AM, Info: Saving project information... -2/15/2017 9:12:31 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/15/2017 9:12:32 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/15/2017 9:12:32 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/15/2017 9:12:33 AM, Info: Saving project information... -2/15/2017 9:17:06 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/15/2017 9:17:07 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/15/2017 9:17:07 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/15/2017 9:17:08 AM, Info: Saving project information... -2/15/2017 9:20:54 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/15/2017 9:20:55 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/15/2017 9:20:55 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/15/2017 9:20:56 AM, Info: Saving project information... -2/15/2017 9:32:48 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/15/2017 9:32:48 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/15/2017 9:32:48 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/15/2017 9:32:50 AM, Info: Saving project information... -2/15/2017 10:37:31 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/15/2017 10:37:31 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/15/2017 10:37:31 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/15/2017 10:37:33 AM, Info: Saving project information... -2/15/2017 10:42:09 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/15/2017 10:42:09 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/15/2017 10:42:10 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/15/2017 10:42:11 AM, Info: Saving project information... -2/15/2017 10:47:22 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/15/2017 10:47:23 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/15/2017 10:47:23 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/15/2017 10:47:24 AM, Info: Saving project information... -2/15/2017 12:29:53 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-15 16-06-01).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-15 16-06-01).log deleted file mode 100644 index 3d659bc9..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-15 16-06-01).log +++ /dev/null @@ -1,3 +0,0 @@ -2/15/2017 4:06:01 PM, Info: Initializing SIMPLSharp Services... -2/15/2017 4:06:01 PM, Info: ProjectInfo successfully initialized. -2/15/2017 5:00:05 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-16 13-36-02).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-16 13-36-02).log deleted file mode 100644 index 421eb177..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-16 13-36-02).log +++ /dev/null @@ -1,27 +0,0 @@ -2/16/2017 1:36:02 PM, Info: Initializing SIMPLSharp Services... -2/16/2017 1:36:02 PM, Info: ProjectInfo successfully initialized. -2/16/2017 3:09:53 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/16/2017 3:09:55 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/16/2017 3:09:55 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/16/2017 3:09:56 PM, Info: Saving project information... -2/16/2017 3:16:32 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/16/2017 3:16:33 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/16/2017 3:16:33 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/16/2017 3:16:34 PM, Info: Saving project information... -2/16/2017 3:20:07 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/16/2017 3:20:08 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/16/2017 3:20:08 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/16/2017 3:20:10 PM, Info: Saving project information... -2/16/2017 3:32:15 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/16/2017 3:32:16 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/16/2017 3:32:16 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/16/2017 3:32:17 PM, Info: Saving project information... -2/16/2017 3:41:21 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/16/2017 3:41:22 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/16/2017 3:41:22 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/16/2017 3:41:23 PM, Info: Saving project information... -2/16/2017 3:45:03 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/16/2017 3:45:04 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/16/2017 3:45:04 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/16/2017 3:45:05 PM, Info: Saving project information... -2/16/2017 4:24:42 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-17 08-49-15).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-17 08-49-15).log deleted file mode 100644 index 707c08ae..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-17 08-49-15).log +++ /dev/null @@ -1,35 +0,0 @@ -2/17/2017 8:49:15 AM, Info: Initializing SIMPLSharp Services... -2/17/2017 8:49:15 AM, Info: ProjectInfo successfully initialized. -2/17/2017 9:50:45 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/17/2017 9:50:46 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/17/2017 9:50:46 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/17/2017 9:50:48 AM, Info: Saving project information... -2/17/2017 10:21:23 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/17/2017 10:21:23 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/17/2017 10:21:23 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/17/2017 10:21:25 AM, Info: Saving project information... -2/17/2017 11:43:36 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/17/2017 11:43:37 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/17/2017 11:43:37 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/17/2017 11:43:39 AM, Info: Saving project information... -2/17/2017 12:40:59 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/17/2017 12:40:59 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/17/2017 12:40:59 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/17/2017 12:41:00 PM, Info: Saving project information... -2/17/2017 1:07:27 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/17/2017 1:07:27 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/17/2017 1:07:27 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/17/2017 1:07:29 PM, Info: Saving project information... -2/17/2017 1:23:03 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/17/2017 1:23:04 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/17/2017 1:23:04 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/17/2017 1:23:05 PM, Info: Saving project information... -2/17/2017 1:30:27 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/17/2017 1:30:27 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/17/2017 1:30:27 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/17/2017 1:30:29 PM, Info: Saving project information... -2/17/2017 2:17:11 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/17/2017 2:17:12 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/17/2017 2:17:12 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/17/2017 2:17:13 PM, Info: Saving project information... -2/17/2017 2:31:44 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-20 11-06-26).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-20 11-06-26).log deleted file mode 100644 index 783d99f2..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-20 11-06-26).log +++ /dev/null @@ -1,20 +0,0 @@ -2/20/2017 11:06:26 AM, Info: Initializing SIMPLSharp Services... -2/20/2017 11:06:27 AM, Info: ProjectInfo successfully initialized. -2/20/2017 12:42:22 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/20/2017 12:42:23 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/20/2017 12:42:24 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/20/2017 12:42:25 PM, Info: Saving project information... -2/20/2017 1:36:30 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/20/2017 1:36:30 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/20/2017 1:36:31 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/20/2017 1:36:32 PM, Info: Saving project information... -2/20/2017 1:42:21 PM, Info: Saving project information... -2/20/2017 1:42:21 PM, Info: Saving project information... -2/20/2017 1:42:21 PM, Info: Saving project information... -2/20/2017 1:46:45 PM, Info: Saving project information... -2/20/2017 1:46:45 PM, Info: Saving project information... -2/20/2017 1:46:45 PM, Info: Saving project information... -2/20/2017 1:46:45 PM, Info: Saving project information... -2/20/2017 1:46:45 PM, Info: Saving project information... -2/20/2017 1:46:45 PM, Info: Saving project information... -2/20/2017 1:46:46 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-20 13-48-17).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-20 13-48-17).log deleted file mode 100644 index 8a2564f5..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-20 13-48-17).log +++ /dev/null @@ -1,43 +0,0 @@ -2/20/2017 1:48:17 PM, Info: Initializing SIMPLSharp Services... -2/20/2017 1:48:17 PM, Info: ProjectInfo successfully initialized. -2/20/2017 3:16:00 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/20/2017 3:16:01 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/20/2017 3:16:01 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/20/2017 3:16:03 PM, Info: Saving project information... -2/20/2017 3:48:35 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/20/2017 3:48:36 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/20/2017 3:48:36 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/20/2017 3:48:37 PM, Info: Saving project information... -2/20/2017 4:03:34 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/20/2017 4:03:34 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/20/2017 4:03:35 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/20/2017 4:03:36 PM, Info: Saving project information... -2/20/2017 4:11:39 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/20/2017 4:11:40 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/20/2017 4:11:40 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/20/2017 4:11:41 PM, Info: Saving project information... -2/20/2017 4:26:20 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/20/2017 4:26:20 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/20/2017 4:26:21 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/20/2017 4:26:22 PM, Info: Saving project information... -2/20/2017 4:43:14 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/20/2017 4:43:14 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/20/2017 4:43:14 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/20/2017 4:43:16 PM, Info: Saving project information... -2/20/2017 4:43:52 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/20/2017 4:43:52 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/20/2017 4:43:53 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/20/2017 4:43:54 PM, Info: Saving project information... -2/20/2017 4:49:15 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/20/2017 4:49:15 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/20/2017 4:49:15 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/20/2017 4:49:17 PM, Info: Saving project information... -2/20/2017 5:01:32 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/20/2017 5:01:32 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/20/2017 5:01:32 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/20/2017 5:01:33 PM, Info: Saving project information... -2/20/2017 5:05:08 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/20/2017 5:05:08 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/20/2017 5:05:08 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/20/2017 5:05:09 PM, Info: Saving project information... -2/20/2017 5:21:45 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-21 08-53-37).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-21 08-53-37).log deleted file mode 100644 index dd02bc15..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-21 08-53-37).log +++ /dev/null @@ -1,47 +0,0 @@ -2/21/2017 8:53:37 AM, Info: Initializing SIMPLSharp Services... -2/21/2017 8:53:37 AM, Info: ProjectInfo successfully initialized. -2/21/2017 12:43:46 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/21/2017 12:43:47 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/21/2017 12:43:48 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/21/2017 12:43:49 PM, Info: Saving project information... -2/21/2017 2:29:36 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/21/2017 2:29:36 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/21/2017 2:29:37 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/21/2017 2:29:38 PM, Info: Saving project information... -2/21/2017 2:30:21 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/21/2017 2:30:22 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/21/2017 2:30:22 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/21/2017 2:30:23 PM, Info: Saving project information... -2/21/2017 3:06:54 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/21/2017 3:06:55 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/21/2017 3:06:55 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/21/2017 3:06:56 PM, Info: Saving project information... -2/21/2017 3:27:24 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/21/2017 3:27:24 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/21/2017 3:27:24 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/21/2017 3:27:26 PM, Info: Saving project information... -2/21/2017 3:30:51 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/21/2017 3:30:52 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/21/2017 3:30:52 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/21/2017 3:30:53 PM, Info: Saving project information... -2/21/2017 3:49:36 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/21/2017 3:49:37 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/21/2017 3:49:37 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/21/2017 3:49:38 PM, Info: Saving project information... -2/21/2017 3:53:43 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/21/2017 3:53:43 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/21/2017 3:53:44 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/21/2017 3:53:45 PM, Info: Saving project information... -2/21/2017 4:19:33 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/21/2017 4:19:33 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/21/2017 4:19:33 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/21/2017 4:19:34 PM, Info: Saving project information... -2/21/2017 4:23:46 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/21/2017 4:23:47 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/21/2017 4:23:47 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/21/2017 4:23:48 PM, Info: Saving project information... -2/21/2017 4:26:37 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/21/2017 4:26:38 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/21/2017 4:26:38 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/21/2017 4:26:39 PM, Info: Saving project information... -2/21/2017 4:30:57 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-22 09-20-03).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-22 09-20-03).log deleted file mode 100644 index 00f7fc78..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-22 09-20-03).log +++ /dev/null @@ -1,126 +0,0 @@ -2/22/2017 9:20:03 AM, Info: Initializing SIMPLSharp Services... -2/22/2017 9:20:03 AM, Info: ProjectInfo successfully initialized. -2/22/2017 1:08:29 PM, Info: Saving project information... -2/22/2017 1:08:29 PM, Info: Saving project information... -2/22/2017 1:08:29 PM, Info: Saving project information... -2/22/2017 1:13:29 PM, Info: Saving project information... -2/22/2017 1:13:29 PM, Info: Saving project information... -2/22/2017 1:13:29 PM, Info: Saving project information... -2/22/2017 1:18:29 PM, Info: Saving project information... -2/22/2017 1:18:29 PM, Info: Saving project information... -2/22/2017 1:18:29 PM, Info: Saving project information... -2/22/2017 1:23:29 PM, Info: Saving project information... -2/22/2017 1:23:29 PM, Info: Saving project information... -2/22/2017 1:23:29 PM, Info: Saving project information... -2/22/2017 1:28:29 PM, Info: Saving project information... -2/22/2017 1:28:29 PM, Info: Saving project information... -2/22/2017 1:28:29 PM, Info: Saving project information... -2/22/2017 1:33:29 PM, Info: Saving project information... -2/22/2017 1:33:29 PM, Info: Saving project information... -2/22/2017 1:33:29 PM, Info: Saving project information... -2/22/2017 1:38:29 PM, Info: Saving project information... -2/22/2017 1:38:29 PM, Info: Saving project information... -2/22/2017 1:38:29 PM, Info: Saving project information... -2/22/2017 1:43:29 PM, Info: Saving project information... -2/22/2017 1:43:29 PM, Info: Saving project information... -2/22/2017 1:43:29 PM, Info: Saving project information... -2/22/2017 1:48:29 PM, Info: Saving project information... -2/22/2017 1:48:29 PM, Info: Saving project information... -2/22/2017 1:48:29 PM, Info: Saving project information... -2/22/2017 1:53:29 PM, Info: Saving project information... -2/22/2017 1:53:29 PM, Info: Saving project information... -2/22/2017 1:53:29 PM, Info: Saving project information... -2/22/2017 1:58:29 PM, Info: Saving project information... -2/22/2017 1:58:29 PM, Info: Saving project information... -2/22/2017 1:58:29 PM, Info: Saving project information... -2/22/2017 2:03:29 PM, Info: Saving project information... -2/22/2017 2:03:29 PM, Info: Saving project information... -2/22/2017 2:03:29 PM, Info: Saving project information... -2/22/2017 2:08:29 PM, Info: Saving project information... -2/22/2017 2:08:29 PM, Info: Saving project information... -2/22/2017 2:08:29 PM, Info: Saving project information... -2/22/2017 2:13:29 PM, Info: Saving project information... -2/22/2017 2:13:29 PM, Info: Saving project information... -2/22/2017 2:13:29 PM, Info: Saving project information... -2/22/2017 2:18:29 PM, Info: Saving project information... -2/22/2017 2:18:29 PM, Info: Saving project information... -2/22/2017 2:18:29 PM, Info: Saving project information... -2/22/2017 2:23:29 PM, Info: Saving project information... -2/22/2017 2:23:29 PM, Info: Saving project information... -2/22/2017 2:23:29 PM, Info: Saving project information... -2/22/2017 2:28:29 PM, Info: Saving project information... -2/22/2017 2:28:29 PM, Info: Saving project information... -2/22/2017 2:28:29 PM, Info: Saving project information... -2/22/2017 2:33:29 PM, Info: Saving project information... -2/22/2017 2:33:29 PM, Info: Saving project information... -2/22/2017 2:33:29 PM, Info: Saving project information... -2/22/2017 2:38:29 PM, Info: Saving project information... -2/22/2017 2:38:29 PM, Info: Saving project information... -2/22/2017 2:38:29 PM, Info: Saving project information... -2/22/2017 2:43:29 PM, Info: Saving project information... -2/22/2017 2:43:29 PM, Info: Saving project information... -2/22/2017 2:43:29 PM, Info: Saving project information... -2/22/2017 2:48:29 PM, Info: Saving project information... -2/22/2017 2:48:29 PM, Info: Saving project information... -2/22/2017 2:48:29 PM, Info: Saving project information... -2/22/2017 2:53:29 PM, Info: Saving project information... -2/22/2017 2:53:29 PM, Info: Saving project information... -2/22/2017 2:53:29 PM, Info: Saving project information... -2/22/2017 2:58:29 PM, Info: Saving project information... -2/22/2017 2:58:29 PM, Info: Saving project information... -2/22/2017 2:58:29 PM, Info: Saving project information... -2/22/2017 3:03:29 PM, Info: Saving project information... -2/22/2017 3:03:29 PM, Info: Saving project information... -2/22/2017 3:03:29 PM, Info: Saving project information... -2/22/2017 3:08:29 PM, Info: Saving project information... -2/22/2017 3:08:29 PM, Info: Saving project information... -2/22/2017 3:08:29 PM, Info: Saving project information... -2/22/2017 3:13:29 PM, Info: Saving project information... -2/22/2017 3:13:29 PM, Info: Saving project information... -2/22/2017 3:13:29 PM, Info: Saving project information... -2/22/2017 3:18:29 PM, Info: Saving project information... -2/22/2017 3:18:29 PM, Info: Saving project information... -2/22/2017 3:18:29 PM, Info: Saving project information... -2/22/2017 3:23:29 PM, Info: Saving project information... -2/22/2017 3:23:29 PM, Info: Saving project information... -2/22/2017 3:23:29 PM, Info: Saving project information... -2/22/2017 3:28:29 PM, Info: Saving project information... -2/22/2017 3:28:29 PM, Info: Saving project information... -2/22/2017 3:28:29 PM, Info: Saving project information... -2/22/2017 3:33:29 PM, Info: Saving project information... -2/22/2017 3:33:29 PM, Info: Saving project information... -2/22/2017 3:33:29 PM, Info: Saving project information... -2/22/2017 3:38:29 PM, Info: Saving project information... -2/22/2017 3:38:29 PM, Info: Saving project information... -2/22/2017 3:38:29 PM, Info: Saving project information... -2/22/2017 3:43:29 PM, Info: Saving project information... -2/22/2017 3:43:29 PM, Info: Saving project information... -2/22/2017 3:43:29 PM, Info: Saving project information... -2/22/2017 3:48:29 PM, Info: Saving project information... -2/22/2017 3:48:29 PM, Info: Saving project information... -2/22/2017 3:48:29 PM, Info: Saving project information... -2/22/2017 3:53:29 PM, Info: Saving project information... -2/22/2017 3:53:29 PM, Info: Saving project information... -2/22/2017 3:53:29 PM, Info: Saving project information... -2/22/2017 3:58:29 PM, Info: Saving project information... -2/22/2017 3:58:29 PM, Info: Saving project information... -2/22/2017 3:58:29 PM, Info: Saving project information... -2/22/2017 4:01:29 PM, Info: Saving project information... -2/22/2017 4:01:29 PM, Info: Saving project information... -2/22/2017 4:01:29 PM, Info: Saving project information... -2/22/2017 4:01:29 PM, Info: Saving project information... -2/22/2017 4:01:29 PM, Info: Saving project information... -2/22/2017 4:01:29 PM, Info: Saving project information... -2/22/2017 4:01:33 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/22/2017 4:01:34 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/22/2017 4:01:35 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/22/2017 4:01:36 PM, Info: Saving project information... -2/22/2017 4:10:42 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/22/2017 4:10:43 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/22/2017 4:10:43 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/22/2017 4:10:44 PM, Info: Saving project information... -2/22/2017 4:13:18 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/22/2017 4:13:18 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/22/2017 4:13:18 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/22/2017 4:13:20 PM, Info: Saving project information... -2/22/2017 5:37:25 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-23 08-42-27).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-23 08-42-27).log deleted file mode 100644 index 57c4043d..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-23 08-42-27).log +++ /dev/null @@ -1,68 +0,0 @@ -2/23/2017 8:42:27 AM, Info: Initializing SIMPLSharp Services... -2/23/2017 8:42:27 AM, Info: ProjectInfo successfully initialized. -2/23/2017 8:49:33 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/23/2017 8:49:34 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/23/2017 8:49:34 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/23/2017 8:49:36 AM, Info: Saving project information... -2/23/2017 8:55:41 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/23/2017 8:55:42 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/23/2017 8:55:42 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/23/2017 8:55:43 AM, Info: Saving project information... -2/23/2017 8:57:56 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/23/2017 8:57:56 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/23/2017 8:57:56 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/23/2017 8:57:58 AM, Info: Saving project information... -2/23/2017 9:12:05 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/23/2017 9:12:06 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/23/2017 9:12:06 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/23/2017 9:12:08 AM, Info: Saving project information... -2/23/2017 9:28:52 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/23/2017 9:28:53 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/23/2017 9:28:53 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/23/2017 9:28:54 AM, Exception: The process cannot access the file 'C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz' because it is being used by another process. - at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) - at System.IO.File.Delete(String path) - at Crestron.Tools.SIMPLSharp.Services.Utilities.Zipper.Zip(String zipFileName, Folder folderToZip) - at h.a(String A_0, IList`1 A_1, String A_2) -2/23/2017 9:32:21 AM, Info: Saving project information... -2/23/2017 9:32:21 AM, Info: Saving project information... -2/23/2017 9:32:21 AM, Info: Saving project information... -2/23/2017 9:35:44 AM, Info: Saving project information... -2/23/2017 9:35:44 AM, Info: Saving project information... -2/23/2017 9:35:44 AM, Info: Saving project information... -2/23/2017 9:35:44 AM, Info: Saving project information... -2/23/2017 9:35:44 AM, Info: Saving project information... -2/23/2017 9:35:44 AM, Info: Saving project information... -2/23/2017 9:35:46 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/23/2017 9:35:47 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/23/2017 9:35:47 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/23/2017 9:35:48 AM, Info: Saving project information... -2/23/2017 10:32:33 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/23/2017 10:32:34 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/23/2017 10:32:34 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/23/2017 10:32:35 AM, Info: Saving project information... -2/23/2017 10:35:50 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/23/2017 10:35:51 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/23/2017 10:35:51 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/23/2017 10:35:53 AM, Info: Saving project information... -2/23/2017 10:53:11 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/23/2017 10:53:12 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/23/2017 10:53:12 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/23/2017 10:53:13 AM, Info: Saving project information... -2/23/2017 10:54:13 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/23/2017 10:54:14 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/23/2017 10:54:14 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/23/2017 10:54:15 AM, Info: Saving project information... -2/23/2017 11:00:55 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/23/2017 11:00:56 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/23/2017 11:00:56 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/23/2017 11:00:57 AM, Info: Saving project information... -2/23/2017 11:12:54 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/23/2017 11:12:55 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/23/2017 11:12:55 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/23/2017 11:12:57 AM, Info: Saving project information... -2/23/2017 11:24:45 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/23/2017 11:24:45 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/23/2017 11:24:46 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/23/2017 11:24:47 AM, Info: Saving project information... -2/23/2017 11:56:58 AM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-23 17-42-14).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-23 17-42-14).log deleted file mode 100644 index 0e8d15b5..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-02-23 17-42-14).log +++ /dev/null @@ -1,15 +0,0 @@ -2/23/2017 5:42:14 PM, Info: Initializing SIMPLSharp Services... -2/23/2017 5:42:14 PM, Info: ProjectInfo successfully initialized. -2/23/2017 5:42:30 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/23/2017 5:42:31 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/23/2017 5:42:31 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/23/2017 5:42:32 PM, Info: Saving project information... -2/23/2017 6:13:58 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/23/2017 6:13:58 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/23/2017 6:13:58 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/23/2017 6:14:00 PM, Info: Saving project information... -2/23/2017 6:17:06 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -2/23/2017 6:17:07 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -2/23/2017 6:17:07 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -2/23/2017 6:17:08 PM, Info: Saving project information... -2/23/2017 6:20:34 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-02 09-30-00).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-02 09-30-00).log deleted file mode 100644 index e44dc60c..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-02 09-30-00).log +++ /dev/null @@ -1,37 +0,0 @@ -3/2/2017 9:30:00 AM, Info: Initializing SIMPLSharp Services... -3/2/2017 9:30:00 AM, Info: ProjectInfo successfully initialized. -3/2/2017 9:30:09 AM, Info: Saving project information... -3/2/2017 9:30:09 AM, Info: Saving project information... -3/2/2017 9:30:09 AM, Info: Saving project information... -3/2/2017 9:30:09 AM, Info: Saving project information... -3/2/2017 9:30:09 AM, Info: Saving project information... -3/2/2017 9:30:09 AM, Info: Saving project information... -3/2/2017 9:30:11 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/2/2017 9:30:13 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/2/2017 9:30:13 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/2/2017 9:30:14 AM, Info: Saving project information... -3/2/2017 10:17:17 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/2/2017 10:17:18 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/2/2017 10:17:18 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/2/2017 10:17:20 AM, Info: Saving project information... -3/2/2017 10:25:22 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/2/2017 10:25:23 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/2/2017 10:25:23 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/2/2017 10:25:25 AM, Info: Saving project information... -3/2/2017 2:15:17 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/2/2017 2:15:18 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/2/2017 2:15:18 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/2/2017 2:15:19 PM, Info: Saving project information... -3/2/2017 2:29:51 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/2/2017 2:29:52 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/2/2017 2:29:52 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/2/2017 2:29:53 PM, Info: Saving project information... -3/2/2017 2:32:50 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/2/2017 2:32:51 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/2/2017 2:32:51 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/2/2017 2:32:52 PM, Info: Saving project information... -3/2/2017 2:37:30 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/2/2017 2:37:31 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/2/2017 2:37:31 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/2/2017 2:37:32 PM, Info: Saving project information... -3/3/2017 8:31:30 AM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-03 10-51-03).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-03 10-51-03).log deleted file mode 100644 index 298c2ebb..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-03 10-51-03).log +++ /dev/null @@ -1,23 +0,0 @@ -3/3/2017 10:51:03 AM, Info: Initializing SIMPLSharp Services... -3/3/2017 10:51:03 AM, Info: ProjectInfo successfully initialized. -3/3/2017 10:51:26 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/3/2017 10:51:28 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/3/2017 10:51:28 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/3/2017 10:51:30 AM, Info: Saving project information... -3/3/2017 10:55:54 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/3/2017 10:55:55 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/3/2017 10:55:55 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/3/2017 10:55:56 AM, Info: Saving project information... -3/3/2017 11:04:14 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/3/2017 11:04:15 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/3/2017 11:04:15 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/3/2017 11:04:16 AM, Info: Saving project information... -3/3/2017 12:09:36 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/3/2017 12:09:37 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/3/2017 12:09:37 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/3/2017 12:09:38 PM, Info: Saving project information... -3/3/2017 2:10:13 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/3/2017 2:10:14 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/3/2017 2:10:14 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/3/2017 2:10:16 PM, Info: Saving project information... -3/3/2017 2:41:00 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-06 08-53-09).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-06 08-53-09).log deleted file mode 100644 index 229191b5..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-06 08-53-09).log +++ /dev/null @@ -1,22 +0,0 @@ -3/6/2017 8:53:09 AM, Info: Initializing SIMPLSharp Services... -3/6/2017 8:53:09 AM, Info: ProjectInfo successfully initialized. -3/6/2017 1:19:35 PM, Info: Saving project information... -3/6/2017 1:19:35 PM, Info: Saving project information... -3/6/2017 1:19:35 PM, Info: Saving project information... -3/6/2017 1:24:35 PM, Info: Saving project information... -3/6/2017 1:24:35 PM, Info: Saving project information... -3/6/2017 1:24:35 PM, Info: Saving project information... -3/6/2017 1:29:35 PM, Info: Saving project information... -3/6/2017 1:29:35 PM, Info: Saving project information... -3/6/2017 1:29:35 PM, Info: Saving project information... -3/6/2017 1:31:45 PM, Info: Saving project information... -3/6/2017 1:31:45 PM, Info: Saving project information... -3/6/2017 1:31:45 PM, Info: Saving project information... -3/6/2017 1:31:45 PM, Info: Saving project information... -3/6/2017 1:31:45 PM, Info: Saving project information... -3/6/2017 1:31:45 PM, Info: Saving project information... -3/6/2017 1:31:48 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/6/2017 1:31:50 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/6/2017 1:31:50 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/6/2017 1:31:52 PM, Info: Saving project information... -3/6/2017 5:18:28 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-07 13-43-38).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-07 13-43-38).log deleted file mode 100644 index b7438bde..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-07 13-43-38).log +++ /dev/null @@ -1,3 +0,0 @@ -3/7/2017 1:43:38 PM, Info: Initializing SIMPLSharp Services... -3/7/2017 1:43:39 PM, Info: ProjectInfo successfully initialized. -3/7/2017 2:00:35 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-13 09-02-52).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-13 09-02-52).log deleted file mode 100644 index 0eaeab13..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-13 09-02-52).log +++ /dev/null @@ -1,27 +0,0 @@ -3/13/2017 9:02:52 AM, Info: Initializing SIMPLSharp Services... -3/13/2017 9:02:53 AM, Info: ProjectInfo successfully initialized. -3/13/2017 9:03:08 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/13/2017 9:03:09 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/13/2017 9:03:09 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/13/2017 9:03:11 AM, Info: Saving project information... -3/13/2017 10:06:33 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/13/2017 10:06:34 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/13/2017 10:06:34 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/13/2017 10:06:35 AM, Info: Saving project information... -3/13/2017 10:07:24 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/13/2017 10:07:25 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/13/2017 10:07:25 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/13/2017 10:07:26 AM, Info: Saving project information... -3/13/2017 10:18:49 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/13/2017 10:18:49 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/13/2017 10:18:50 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/13/2017 10:18:51 AM, Info: Saving project information... -3/13/2017 10:40:42 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/13/2017 10:40:43 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/13/2017 10:40:43 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/13/2017 10:40:45 AM, Info: Saving project information... -3/13/2017 10:50:46 AM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/13/2017 10:50:47 AM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/13/2017 10:50:47 AM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/13/2017 10:50:48 AM, Info: Saving project information... -3/13/2017 5:02:05 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-13 10-44-29).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-13 10-44-29).log deleted file mode 100644 index e5f5ff90..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-13 10-44-29).log +++ /dev/null @@ -1,3 +0,0 @@ -3/13/2017 10:44:29 AM, Info: Initializing SIMPLSharp Services... -3/13/2017 10:44:29 AM, Info: ProjectInfo successfully initialized. -3/13/2017 2:48:56 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-14 15-40-49).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-14 15-40-49).log deleted file mode 100644 index 7f4b421c..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-14 15-40-49).log +++ /dev/null @@ -1,11 +0,0 @@ -3/14/2017 3:40:49 PM, Info: Initializing SIMPLSharp Services... -3/14/2017 3:40:50 PM, Info: ProjectInfo successfully initialized. -3/14/2017 4:14:10 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/14/2017 4:14:11 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/14/2017 4:14:12 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/14/2017 4:14:13 PM, Info: Saving project information... -3/14/2017 4:16:12 PM, Info: Validating assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll... -3/14/2017 4:16:12 PM, Info: Verifying assembly C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -3/14/2017 4:16:12 PM, Info: Creating Archive C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.cpz... -3/14/2017 4:16:14 PM, Info: Saving project information... -3/14/2017 4:54:52 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-16 12-22-16).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-16 12-22-16).log deleted file mode 100644 index 2636c352..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-16 12-22-16).log +++ /dev/null @@ -1,3 +0,0 @@ -3/16/2017 12:22:16 PM, Info: Initializing SIMPLSharp Services... -3/16/2017 12:22:16 PM, Info: ProjectInfo successfully initialized. -3/16/2017 12:24:22 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-16 12-44-48).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-16 12-44-48).log deleted file mode 100644 index 02ed1c25..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-16 12-44-48).log +++ /dev/null @@ -1,6 +0,0 @@ -3/16/2017 12:44:48 PM, Info: Initializing SIMPLSharp Services... -3/16/2017 12:44:48 PM, Info: ProjectInfo successfully initialized. -3/16/2017 12:47:38 PM, Info: Saving project information... -3/16/2017 12:47:38 PM, Info: Saving project information... -3/16/2017 12:47:38 PM, Info: Saving project information... -3/17/2017 12:46:21 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-17 09-00-38).log b/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-17 09-00-38).log deleted file mode 100644 index 06ebb861..00000000 --- a/PepperDashEssentials/PepperDashEssentials/SIMPLSharpLogs/(2017-03-17 09-00-38).log +++ /dev/null @@ -1,3 +0,0 @@ -3/17/2017 9:00:38 AM, Info: Initializing SIMPLSharp Services... -3/17/2017 9:00:38 AM, Info: ProjectInfo successfully initialized. -3/17/2017 12:46:21 PM, Info: Terminating SIMPLSharp Services diff --git a/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.DM.dll b/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.DM.dll deleted file mode 100644 index 58cdae5e..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.DM.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.DeviceSupport.dll b/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.DeviceSupport.dll deleted file mode 100644 index 2d21a552..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.DeviceSupport.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.EthernetCommunications.dll b/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.EthernetCommunications.dll deleted file mode 100644 index 3d13af1b..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.EthernetCommunications.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.Fusion.dll b/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.Fusion.dll deleted file mode 100644 index 064ea88b..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.Fusion.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.Gateways.dll b/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.Gateways.dll deleted file mode 100644 index df32978e..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.Gateways.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.Remotes.dll b/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.Remotes.dll deleted file mode 100644 index c46360b5..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.Remotes.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.UI.dll b/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.UI.dll deleted file mode 100644 index 43afe010..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/Crestron.SimplSharpPro.UI.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/Essentials Devices Common.dll b/PepperDashEssentials/PepperDashEssentials/bin/Essentials Devices Common.dll deleted file mode 100644 index 2590cbe3..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/Essentials Devices Common.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/EssentialsHttpServer.dll b/PepperDashEssentials/PepperDashEssentials/bin/EssentialsHttpServer.dll deleted file mode 100644 index 6934c2c0..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/EssentialsHttpServer.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/PepperDashCorePortalSync.dll b/PepperDashEssentials/PepperDashEssentials/bin/PepperDashCorePortalSync.dll deleted file mode 100644 index 17bce5f1..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/PepperDashCorePortalSync.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/PepperDashEssentials.cpz b/PepperDashEssentials/PepperDashEssentials/bin/PepperDashEssentials.cpz deleted file mode 100644 index f58c21e4..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/PepperDashEssentials.cpz and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/PepperDashEssentials.dll b/PepperDashEssentials/PepperDashEssentials/bin/PepperDashEssentials.dll deleted file mode 100644 index e7fd7602..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/PepperDashEssentials.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/PepperDashEssentials.pdb b/PepperDashEssentials/PepperDashEssentials/bin/PepperDashEssentials.pdb deleted file mode 100644 index 39acb47a..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/PepperDashEssentials.pdb and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/PepperDash_Core.dll b/PepperDashEssentials/PepperDashEssentials/bin/PepperDash_Core.dll deleted file mode 100644 index 88995d8e..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/PepperDash_Core.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/PepperDash_Essentials_Core.dll b/PepperDashEssentials/PepperDashEssentials/bin/PepperDash_Essentials_Core.dll deleted file mode 100644 index 7aafbd4b..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/PepperDash_Essentials_Core.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/PepperDash_Essentials_DM.dll b/PepperDashEssentials/PepperDashEssentials/bin/PepperDash_Essentials_DM.dll deleted file mode 100644 index d039c878..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/PepperDash_Essentials_DM.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/PepperDash_Essentials_Displays.dll b/PepperDashEssentials/PepperDashEssentials/bin/PepperDash_Essentials_Displays.dll deleted file mode 100644 index c58e1b88..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/PepperDash_Essentials_Displays.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/ProgramInfo.config b/PepperDashEssentials/PepperDashEssentials/bin/ProgramInfo.config deleted file mode 100644 index 644b5f49..00000000 --- a/PepperDashEssentials/PepperDashEssentials/bin/ProgramInfo.config +++ /dev/null @@ -1,20 +0,0 @@ - - - PepperDashEssentials - PepperDashEssentials - PepperDashEssentials - 1.009.0029 - SIMPL# Plugin - 5 - 5 - - - - 3/20/2017 7:54:11 AM - 1.0.0.12423 - - - Crestron.SIMPLSharp, Version=2.0.48.0, Culture=neutral, PublicKeyToken=812d080f93e2de10 - - - \ No newline at end of file diff --git a/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpCryptographyInterface.dll b/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpCryptographyInterface.dll deleted file mode 100644 index 66cdd97f..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpCryptographyInterface.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpCustomAttributesInterface.dll b/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpCustomAttributesInterface.dll deleted file mode 100644 index 6fd71ec8..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpCustomAttributesInterface.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpHelperInterface.dll b/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpHelperInterface.dll deleted file mode 100644 index 78ba9371..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpHelperInterface.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpNewtonsoft.dll b/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpNewtonsoft.dll deleted file mode 100644 index 81103a7d..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpNewtonsoft.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpPro.exe b/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpPro.exe deleted file mode 100644 index 2cb4658f..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpPro.exe and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpReflectionInterface.dll b/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpReflectionInterface.dll deleted file mode 100644 index edc2f9f6..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpReflectionInterface.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpSQLHelperInterface.dll b/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpSQLHelperInterface.dll deleted file mode 100644 index 69b6dc7a..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/SimplSharpSQLHelperInterface.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/bin/manifest.info b/PepperDashEssentials/PepperDashEssentials/bin/manifest.info deleted file mode 100644 index 5b9e1ac0..00000000 --- a/PepperDashEssentials/PepperDashEssentials/bin/manifest.info +++ /dev/null @@ -1,87 +0,0 @@ -MainAssembly=PepperDashEssentials.dll:36b68cb2a41be892b66878dfa5284633 -MainAssemblyMinFirmwareVersion=1.009.0029 -MainAssemblyResource=SimplSharpData.dat:820b61c48c8a2cace82957eed4cc377c -ü -DependencySource=Crestron.SimplSharpPro.DeviceSupport.dll:caae4b4259aaf619059f0ae34473bfd2 -DependencyPath=PepperDashEssentials.cpz:Crestron.SimplSharpPro.DeviceSupport.dll -DependencyMainAssembly=Crestron.SimplSharpPro.DeviceSupport.dll:caae4b4259aaf619059f0ae34473bfd2 -ü -DependencySource=Crestron.SimplSharpPro.DM.dll:bdf5acfa80cc3bb87f21deb891128b1d -DependencyPath=PepperDashEssentials.cpz:Crestron.SimplSharpPro.DM.dll -DependencyMainAssembly=Crestron.SimplSharpPro.DM.dll:bdf5acfa80cc3bb87f21deb891128b1d -ü -DependencySource=Crestron.SimplSharpPro.EthernetCommunications.dll:36e663497195140ee6f1b4ebc53f5ea7 -DependencyPath=PepperDashEssentials.cpz:Crestron.SimplSharpPro.EthernetCommunications.dll -DependencyMainAssembly=Crestron.SimplSharpPro.EthernetCommunications.dll:36e663497195140ee6f1b4ebc53f5ea7 -ü -DependencySource=Crestron.SimplSharpPro.Fusion.dll:2ceb645ad5aa098f78c4b6c963af2df2 -DependencyPath=PepperDashEssentials.cpz:Crestron.SimplSharpPro.Fusion.dll -DependencyMainAssembly=Crestron.SimplSharpPro.Fusion.dll:2ceb645ad5aa098f78c4b6c963af2df2 -ü -DependencySource=Crestron.SimplSharpPro.Gateways.dll:7242e212aa3843228a5d91eb66829f8a -DependencyPath=PepperDashEssentials.cpz:Crestron.SimplSharpPro.Gateways.dll -DependencyMainAssembly=Crestron.SimplSharpPro.Gateways.dll:7242e212aa3843228a5d91eb66829f8a -ü -DependencySource=Crestron.SimplSharpPro.Remotes.dll:af26e0b230429e692cd350ec63c907be -DependencyPath=PepperDashEssentials.cpz:Crestron.SimplSharpPro.Remotes.dll -DependencyMainAssembly=Crestron.SimplSharpPro.Remotes.dll:af26e0b230429e692cd350ec63c907be -ü -DependencySource=Crestron.SimplSharpPro.UI.dll:089312a0cb0b4537072d4eb234e71e0e -DependencyPath=PepperDashEssentials.cpz:Crestron.SimplSharpPro.UI.dll -DependencyMainAssembly=Crestron.SimplSharpPro.UI.dll:089312a0cb0b4537072d4eb234e71e0e -ü -DependencySource=Essentials Devices Common.dll:8c62479abf8cd36d922665ee540cdd85 -DependencyPath=PepperDashEssentials.cpz:Essentials Devices Common.dll -DependencyMainAssembly=Essentials Devices Common.dll:8c62479abf8cd36d922665ee540cdd85 -ü -DependencySource=EssentialsHttpServer.dll:0666085bdb0856c1d117699c7859bb8c -DependencyPath=PepperDashEssentials.cpz:EssentialsHttpServer.dll -DependencyMainAssembly=EssentialsHttpServer.dll:0666085bdb0856c1d117699c7859bb8c -ü -DependencySource=PepperDashCorePortalSync.dll:815e608cb8a8808dab167837cf89b15a -DependencyPath=PepperDashEssentials.cpz:PepperDashCorePortalSync.dll -DependencyMainAssembly=PepperDashCorePortalSync.dll:815e608cb8a8808dab167837cf89b15a -ü -DependencySource=PepperDash_Core.dll:49fe0d78cb676a902c692056067fef4b -DependencyPath=PepperDashEssentials.cpz:PepperDash_Core.dll -DependencyMainAssembly=PepperDash_Core.dll:49fe0d78cb676a902c692056067fef4b -ü -DependencySource=PepperDash_Essentials_Core.dll:a3ae2c4b5d2e1890a5788cf717d1b579 -DependencyPath=PepperDashEssentials.cpz:PepperDash_Essentials_Core.dll -DependencyMainAssembly=PepperDash_Essentials_Core.dll:a3ae2c4b5d2e1890a5788cf717d1b579 -ü -DependencySource=PepperDash_Essentials_Displays.dll:3135ef6b8f66b5b1bc5223aad3ef66e0 -DependencyPath=PepperDashEssentials.cpz:PepperDash_Essentials_Displays.dll -DependencyMainAssembly=PepperDash_Essentials_Displays.dll:3135ef6b8f66b5b1bc5223aad3ef66e0 -ü -DependencySource=PepperDash_Essentials_DM.dll:a8999dad9e695a649c6f8bdb2d4779d2 -DependencyPath=PepperDashEssentials.cpz:PepperDash_Essentials_DM.dll -DependencyMainAssembly=PepperDash_Essentials_DM.dll:a8999dad9e695a649c6f8bdb2d4779d2 -ü -DependencySource=SimplSharpCryptographyInterface.dll:dd4791a86d6f67ddc309c4ab1e24c663 -DependencyPath=PepperDashEssentials.cpz:SimplSharpCryptographyInterface.dll -DependencyMainAssembly=SimplSharpCryptographyInterface.dll:dd4791a86d6f67ddc309c4ab1e24c663 -ü -DependencySource=SimplSharpCustomAttributesInterface.dll:9c4b4d4c519b655af90016edca2d66b9 -DependencyPath=PepperDashEssentials.cpz:SimplSharpCustomAttributesInterface.dll -DependencyMainAssembly=SimplSharpCustomAttributesInterface.dll:9c4b4d4c519b655af90016edca2d66b9 -ü -DependencySource=SimplSharpHelperInterface.dll:aed72eb0e19559a3f56708be76445dcd -DependencyPath=PepperDashEssentials.cpz:SimplSharpHelperInterface.dll -DependencyMainAssembly=SimplSharpHelperInterface.dll:aed72eb0e19559a3f56708be76445dcd -ü -DependencySource=SimplSharpNewtonsoft.dll:9c09c5d30daedddf895c36acbface0d5 -DependencyPath=PepperDashEssentials.cpz:SimplSharpNewtonsoft.dll -DependencyMainAssembly=SimplSharpNewtonsoft.dll:9c09c5d30daedddf895c36acbface0d5 -ü -DependencySource=SimplSharpPro.exe:88022a3a06b852351fea321019f0ff6d -DependencyPath=PepperDashEssentials.cpz:SimplSharpPro.exe -DependencyMainAssembly=SimplSharpPro.exe:88022a3a06b852351fea321019f0ff6d -ü -DependencySource=SimplSharpReflectionInterface.dll:e3ff8edbba84ccd7155b9984e67488b2 -DependencyPath=PepperDashEssentials.cpz:SimplSharpReflectionInterface.dll -DependencyMainAssembly=SimplSharpReflectionInterface.dll:e3ff8edbba84ccd7155b9984e67488b2 -ü -DependencySource=SimplSharpSQLHelperInterface.dll:f0c505ddecd8a783d4b75217501cbb72 -DependencyPath=PepperDashEssentials.cpz:SimplSharpSQLHelperInterface.dll -DependencyMainAssembly=SimplSharpSQLHelperInterface.dll:f0c505ddecd8a783d4b75217501cbb72 diff --git a/PepperDashEssentials/PepperDashEssentials/bin/manifest.ser b/PepperDashEssentials/PepperDashEssentials/bin/manifest.ser deleted file mode 100644 index 2ba42fd6..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/bin/manifest.ser and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/obj/Debug/PepperDashEssentials.csproj.FileListAbsolute.txt b/PepperDashEssentials/PepperDashEssentials/obj/Debug/PepperDashEssentials.csproj.FileListAbsolute.txt deleted file mode 100644 index 364808e3..00000000 --- a/PepperDashEssentials/PepperDashEssentials/obj/Debug/PepperDashEssentials.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,110 +0,0 @@ -C:\Working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\obj\Debug\ResolveAssemblyReference.cache -C:\Working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -C:\Working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.pdb -C:\Working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.DeviceSupport.dll -C:\Working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.DM.dll -C:\Working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.EthernetCommunications.dll -C:\Working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.UI.dll -C:\Working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpCustomAttributesInterface.dll -C:\Working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpHelperInterface.dll -C:\Working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpPro.exe -C:\Working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\obj\Debug\PepperDashEssentials.dll -C:\Working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\obj\Debug\PepperDashEssentials.pdb -C:\Users\hvolm\Desktop\working\PepperDashEssentials\PepperDashEssentials\obj\Debug\ResolveAssemblyReference.cache -C:\Users\hvolm\Desktop\working\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -C:\Users\hvolm\Desktop\working\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.pdb -C:\Users\hvolm\Desktop\working\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.DeviceSupport.dll -C:\Users\hvolm\Desktop\working\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.DM.dll -C:\Users\hvolm\Desktop\working\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.EthernetCommunications.dll -C:\Users\hvolm\Desktop\working\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.UI.dll -C:\Users\hvolm\Desktop\working\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentialsBase.dll -C:\Users\hvolm\Desktop\working\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpCustomAttributesInterface.dll -C:\Users\hvolm\Desktop\working\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpHelperInterface.dll -C:\Users\hvolm\Desktop\working\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpPro.exe -C:\Users\hvolm\Desktop\working\PepperDashEssentials\PepperDashEssentials\obj\Debug\PepperDashEssentials.dll -C:\Users\hvolm\Desktop\working\PepperDashEssentials\PepperDashEssentials\obj\Debug\PepperDashEssentials.pdb -C:\Working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Newtonsoft.Json.Compact.dll -C:\Working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDash_Essentials_Core.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll.config -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.pdb -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.DeviceSupport.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.DM.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.EthernetCommunications.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.Fusion.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.Remotes.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.UI.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Essentials Devices Common.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\EssentialsHttpServer.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDash_Core.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDash_Essentials_Core.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDash_Essentials_Displays.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDash_Essentials_DM.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpCustomAttributesInterface.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpHelperInterface.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpNewtonsoft.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpPro.exe -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpSQLHelperInterface.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SSMonoIOLibrary.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SSMonoSupportLibrary.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.Gateways.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpReflectionInterface.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Newtonsoft.Json.Compact.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\obj\Debug\ResolveAssemblyReference.cache -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\obj\Debug\PepperDashEssentials.dll -C:\Users\hvolm\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\obj\Debug\PepperDashEssentials.pdb -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\obj\Debug\ResolveAssemblyReference.cache -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\obj\Debug\PepperDashEssentials.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll.config -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.pdb -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.DeviceSupport.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.DM.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.EthernetCommunications.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.Fusion.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.Remotes.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.UI.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Essentials Devices Common.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\EssentialsHttpServer.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDash_Core.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDash_Essentials_Core.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDash_Essentials_Displays.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDash_Essentials_DM.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpCustomAttributesInterface.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpHelperInterface.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpNewtonsoft.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpPro.exe -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpSQLHelperInterface.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpReflectionInterface.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.Gateways.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\Newtonsoft.Json.Compact.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\obj\Debug\PepperDashEssentials.pdb -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\PepperDashCorePortalSync.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpCWSHelperInterface.dll -C:\Users\hvolmer\Desktop\working\essentials-ssp\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpCryptographyInterface.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll.config -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashEssentials.pdb -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.DeviceSupport.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.DM.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.EthernetCommunications.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.Fusion.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.Remotes.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.UI.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\Essentials Devices Common.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\EssentialsHttpServer.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDash_Core.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDash_Essentials_Core.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDash_Essentials_DM.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\PepperDashCorePortalSync.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpCustomAttributesInterface.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpHelperInterface.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpNewtonsoft.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpPro.exe -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpSQLHelperInterface.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpCryptographyInterface.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\Crestron.SimplSharpPro.Gateways.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\bin\SimplSharpReflectionInterface.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\obj\Debug\ResolveAssemblyReference.cache -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\obj\Debug\PepperDashEssentials.dll -C:\Users\hvolmer\Desktop\working\essentials\PepperDashEssentials\PepperDashEssentials\obj\Debug\PepperDashEssentials.pdb diff --git a/PepperDashEssentials/PepperDashEssentials/obj/Debug/PepperDashEssentials.dll b/PepperDashEssentials/PepperDashEssentials/obj/Debug/PepperDashEssentials.dll deleted file mode 100644 index dca028b7..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/obj/Debug/PepperDashEssentials.dll and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/obj/Debug/PepperDashEssentials.pdb b/PepperDashEssentials/PepperDashEssentials/obj/Debug/PepperDashEssentials.pdb deleted file mode 100644 index f8b8797e..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/obj/Debug/PepperDashEssentials.pdb and /dev/null differ diff --git a/PepperDashEssentials/PepperDashEssentials/obj/Debug/ResolveAssemblyReference.cache b/PepperDashEssentials/PepperDashEssentials/obj/Debug/ResolveAssemblyReference.cache deleted file mode 100644 index 312e2d40..00000000 Binary files a/PepperDashEssentials/PepperDashEssentials/obj/Debug/ResolveAssemblyReference.cache and /dev/null differ diff --git a/Release/PepperDash Essentials.zip b/Release/PepperDash Essentials.zip deleted file mode 100644 index 3bca3ef9..00000000 Binary files a/Release/PepperDash Essentials.zip and /dev/null differ diff --git a/Release/PepperDash Essentials/NVRAM/IR/Cisco Explorer 4642HDC.ir b/Release/PepperDash Essentials/NVRAM/IR/Cisco Explorer 4642HDC.ir deleted file mode 100644 index 982acbdd..00000000 Binary files a/Release/PepperDash Essentials/NVRAM/IR/Cisco Explorer 4642HDC.ir and /dev/null differ diff --git a/Release/PepperDash Essentials/NVRAM/IR/Comcast Motorola DVR.ir b/Release/PepperDash Essentials/NVRAM/IR/Comcast Motorola DVR.ir deleted file mode 100644 index abe34ce2..00000000 Binary files a/Release/PepperDash Essentials/NVRAM/IR/Comcast Motorola DVR.ir and /dev/null differ diff --git a/Release/PepperDash Essentials/NVRAM/IR/Comcast X1.ir b/Release/PepperDash Essentials/NVRAM/IR/Comcast X1.ir deleted file mode 100644 index bff5afff..00000000 Binary files a/Release/PepperDash Essentials/NVRAM/IR/Comcast X1.ir and /dev/null differ diff --git a/Release/PepperDash Essentials/NVRAM/IR/DirecTV H21.ir b/Release/PepperDash Essentials/NVRAM/IR/DirecTV H21.ir deleted file mode 100644 index 612a9b2b..00000000 Binary files a/Release/PepperDash Essentials/NVRAM/IR/DirecTV H21.ir and /dev/null differ diff --git a/Release/PepperDash Essentials/NVRAM/IR/EXPLORER 8200HD Full Set Pulsed.ir b/Release/PepperDash Essentials/NVRAM/IR/EXPLORER 8200HD Full Set Pulsed.ir deleted file mode 100644 index 4065f48e..00000000 Binary files a/Release/PepperDash Essentials/NVRAM/IR/EXPLORER 8200HD Full Set Pulsed.ir and /dev/null differ diff --git a/Release/PepperDash Essentials/NVRAM/IR/Etisalat Cable Box.ir b/Release/PepperDash Essentials/NVRAM/IR/Etisalat Cable Box.ir deleted file mode 100644 index c9871add..00000000 Binary files a/Release/PepperDash Essentials/NVRAM/IR/Etisalat Cable Box.ir and /dev/null differ diff --git a/Release/PepperDash Essentials/NVRAM/IR/Etisalat e-Vision.ir b/Release/PepperDash Essentials/NVRAM/IR/Etisalat e-Vision.ir deleted file mode 100644 index 1eddaa09..00000000 Binary files a/Release/PepperDash Essentials/NVRAM/IR/Etisalat e-Vision.ir and /dev/null differ diff --git a/Release/PepperDash Essentials/NVRAM/IR/Panasonic DMP-BD70.ir b/Release/PepperDash Essentials/NVRAM/IR/Panasonic DMP-BD70.ir deleted file mode 100644 index 968f43dc..00000000 Binary files a/Release/PepperDash Essentials/NVRAM/IR/Panasonic DMP-BD70.ir and /dev/null differ diff --git a/Release/PepperDash Essentials/NVRAM/IR/Sony BDP Series.ir b/Release/PepperDash Essentials/NVRAM/IR/Sony BDP Series.ir deleted file mode 100644 index e95344d9..00000000 Binary files a/Release/PepperDash Essentials/NVRAM/IR/Sony BDP Series.ir and /dev/null differ diff --git a/Release/PepperDash Essentials/NVRAM/SGD/Essentials TSW.sgd b/Release/PepperDash Essentials/NVRAM/SGD/Essentials TSW.sgd deleted file mode 100644 index 1c28309f..00000000 --- a/Release/PepperDash Essentials/NVRAM/SGD/Essentials TSW.sgd +++ /dev/null @@ -1,8655 +0,0 @@ -[ -ObjTp=FSgntr -Sgntr=SGD -RelVrs=3 -VTProeVer=6.1.03 -Schema=1 -CRCGUID=88334305-9FAB-4E6A-82E3-1422E906D510 -] -;================================================================================ -[ -ObjTp=Hd -ProjectFile=PepperDash Essentials TSW1050.vtp -VtpGuid=D8D5F125-CB35-42E9-8AE3-4142597FD2C5 -] -;================================================================================ -[ -ObjTp=Symbol -Name=PepperDash Essentials TSW1050_[B.AV] 1D CATV-Full_Channel Presets List Full.ced -Hint=Channel Presets List Full (Smart Object ID=1805) -Code=1 -SGControlType=Subpage Reference List Vertical -SGControlName=Channel Presets List Full -GUID=C4FC0D3A-FF43-4389-9D0A-707641DA5530 -SmplCName=PepperDash Essentials TSW1050_[B.AV] 1D CATV-Full_Channel Presets List Full.ced -SMWRev=4.02.20 -Expand=expand_random -HelpID=10125 -Render=8 -;Define the number of inputs, outputs and parameters -MinVariableInputs=4106 -MaxVariableInputs=4106 -MinVariableOutputs=4106 -MaxVariableOutputs=4106 -NumFixedParams=1 -MinVariableInputsList2=3 -MaxVariableInputsList2=3 -MinVariableOutputsList2=3 -MaxVariableOutputsList2=3 -MinVariableInputsList3=132 -MaxVariableInputsList3=132 -MinVariableOutputsList3=132 -MaxVariableOutputsList3=132 -InputSigType1=Digital -OutputSigType1=Digital -InputList2SigType1=Analog -OutputList2SigType1=Analog -InputList3SigType1=Serial -OutputList3SigType1=Serial - -;Define the cues, and signal types each input, output and parameter. -InputCue1=[~UNUSED3~] -InputSigType1=Digital -InputCue2=[~UNUSED2~] -InputSigType2=Digital -InputCue3=[~UNUSED2~] -InputSigType3=Digital -InputCue4=[~UNUSED2~] -InputSigType4=Digital -InputCue5=[~UNUSED2~] -InputSigType5=Digital -InputCue6=[~UNUSED2~] -InputSigType6=Digital -InputCue7=[~UNUSED2~] -InputSigType7=Digital -InputCue8=[~UNUSED2~] -InputSigType8=Digital -InputCue9=[~UNUSED2~] -InputSigType9=Digital -InputCue10=[~UNUSED2~] -InputSigType10=Digital -InputCue11=[~BeginGroup~]Enable -InputSigType11=Digital -InputCue12=Item 1 Enable -InputSigType12=Digital -InputCue13=Item 2 Enable -InputSigType13=Digital -InputCue14=Item 3 Enable -InputSigType14=Digital -InputCue15=Item 4 Enable -InputSigType15=Digital -InputCue16=Item 5 Enable -InputSigType16=Digital -InputCue17=Item 6 Enable -InputSigType17=Digital -InputCue18=Item 7 Enable -InputSigType18=Digital -InputCue19=Item 8 Enable -InputSigType19=Digital -InputCue20=Item 9 Enable -InputSigType20=Digital -InputCue21=Item 10 Enable -InputSigType21=Digital -InputCue22=Item 11 Enable -InputSigType22=Digital -InputCue23=Item 12 Enable -InputSigType23=Digital -InputCue24=Item 13 Enable -InputSigType24=Digital -InputCue25=Item 14 Enable -InputSigType25=Digital -InputCue26=Item 15 Enable -InputSigType26=Digital -InputCue27=Item 16 Enable -InputSigType27=Digital -InputCue28=Item 17 Enable -InputSigType28=Digital -InputCue29=Item 18 Enable -InputSigType29=Digital -InputCue30=Item 19 Enable -InputSigType30=Digital -InputCue31=Item 20 Enable -InputSigType31=Digital -InputCue32=Item 21 Enable -InputSigType32=Digital -InputCue33=Item 22 Enable -InputSigType33=Digital -InputCue34=Item 23 Enable -InputSigType34=Digital -InputCue35=Item 24 Enable -InputSigType35=Digital -InputCue36=Item 25 Enable -InputSigType36=Digital -InputCue37=Item 26 Enable -InputSigType37=Digital -InputCue38=Item 27 Enable -InputSigType38=Digital -InputCue39=Item 28 Enable -InputSigType39=Digital -InputCue40=Item 29 Enable -InputSigType40=Digital -InputCue41=Item 30 Enable -InputSigType41=Digital -InputCue42=[~UNUSED2~] -InputSigType42=Digital|Analog|Serial|String -InputCue2012=[~EndGroup~]Enable -InputSigType2012=Digital -InputCue2013=[~BeginGroup~]Visible -InputSigType2013=Digital -InputCue2014=Item 1 Visible -InputSigType2014=Digital -InputCue2015=Item 2 Visible -InputSigType2015=Digital -InputCue2016=Item 3 Visible -InputSigType2016=Digital -InputCue2017=Item 4 Visible -InputSigType2017=Digital -InputCue2018=Item 5 Visible -InputSigType2018=Digital -InputCue2019=Item 6 Visible -InputSigType2019=Digital -InputCue2020=Item 7 Visible -InputSigType2020=Digital -InputCue2021=Item 8 Visible -InputSigType2021=Digital -InputCue2022=Item 9 Visible -InputSigType2022=Digital -InputCue2023=Item 10 Visible -InputSigType2023=Digital -InputCue2024=Item 11 Visible -InputSigType2024=Digital -InputCue2025=Item 12 Visible -InputSigType2025=Digital -InputCue2026=Item 13 Visible -InputSigType2026=Digital -InputCue2027=Item 14 Visible -InputSigType2027=Digital -InputCue2028=Item 15 Visible -InputSigType2028=Digital -InputCue2029=Item 16 Visible -InputSigType2029=Digital -InputCue2030=Item 17 Visible -InputSigType2030=Digital -InputCue2031=Item 18 Visible -InputSigType2031=Digital -InputCue2032=Item 19 Visible -InputSigType2032=Digital -InputCue2033=Item 20 Visible -InputSigType2033=Digital -InputCue2034=Item 21 Visible -InputSigType2034=Digital -InputCue2035=Item 22 Visible -InputSigType2035=Digital -InputCue2036=Item 23 Visible -InputSigType2036=Digital -InputCue2037=Item 24 Visible -InputSigType2037=Digital -InputCue2038=Item 25 Visible -InputSigType2038=Digital -InputCue2039=Item 26 Visible -InputSigType2039=Digital -InputCue2040=Item 27 Visible -InputSigType2040=Digital -InputCue2041=Item 28 Visible -InputSigType2041=Digital -InputCue2042=Item 29 Visible -InputSigType2042=Digital -InputCue2043=Item 30 Visible -InputSigType2043=Digital -InputCue2044=[~UNUSED2~] -InputSigType2044=Digital|Analog|Serial|String -InputCue4014=[~EndGroup~]Visible -InputSigType4014=Digital -InputCue4015=[~BeginGroup~]fb -InputSigType4015=Digital -InputCue4016=fb1 -InputSigType4016=Digital -InputCue4017=fb2 -InputSigType4017=Digital -InputCue4018=fb3 -InputSigType4018=Digital -InputCue4019=fb4 -InputSigType4019=Digital -InputCue4020=fb5 -InputSigType4020=Digital -InputCue4021=fb6 -InputSigType4021=Digital -InputCue4022=fb7 -InputSigType4022=Digital -InputCue4023=fb8 -InputSigType4023=Digital -InputCue4024=fb9 -InputSigType4024=Digital -InputCue4025=fb10 -InputSigType4025=Digital -InputCue4026=fb11 -InputSigType4026=Digital -InputCue4027=fb12 -InputSigType4027=Digital -InputCue4028=fb13 -InputSigType4028=Digital -InputCue4029=fb14 -InputSigType4029=Digital -InputCue4030=fb15 -InputSigType4030=Digital -InputCue4031=fb16 -InputSigType4031=Digital -InputCue4032=fb17 -InputSigType4032=Digital -InputCue4033=fb18 -InputSigType4033=Digital -InputCue4034=fb19 -InputSigType4034=Digital -InputCue4035=fb20 -InputSigType4035=Digital -InputCue4036=fb21 -InputSigType4036=Digital -InputCue4037=fb22 -InputSigType4037=Digital -InputCue4038=fb23 -InputSigType4038=Digital -InputCue4039=fb24 -InputSigType4039=Digital -InputCue4040=fb25 -InputSigType4040=Digital -InputCue4041=fb26 -InputSigType4041=Digital -InputCue4042=fb27 -InputSigType4042=Digital -InputCue4043=fb28 -InputSigType4043=Digital -InputCue4044=fb29 -InputSigType4044=Digital -InputCue4045=fb30 -InputSigType4045=Digital -InputCue4046=fb31 -InputSigType4046=Digital -InputCue4047=fb32 -InputSigType4047=Digital -InputCue4048=fb33 -InputSigType4048=Digital -InputCue4049=fb34 -InputSigType4049=Digital -InputCue4050=fb35 -InputSigType4050=Digital -InputCue4051=fb36 -InputSigType4051=Digital -InputCue4052=fb37 -InputSigType4052=Digital -InputCue4053=fb38 -InputSigType4053=Digital -InputCue4054=fb39 -InputSigType4054=Digital -InputCue4055=fb40 -InputSigType4055=Digital -InputCue4056=fb41 -InputSigType4056=Digital -InputCue4057=fb42 -InputSigType4057=Digital -InputCue4058=fb43 -InputSigType4058=Digital -InputCue4059=fb44 -InputSigType4059=Digital -InputCue4060=fb45 -InputSigType4060=Digital -InputCue4061=fb46 -InputSigType4061=Digital -InputCue4062=fb47 -InputSigType4062=Digital -InputCue4063=fb48 -InputSigType4063=Digital -InputCue4064=fb49 -InputSigType4064=Digital -InputCue4065=fb50 -InputSigType4065=Digital -InputCue4066=fb51 -InputSigType4066=Digital -InputCue4067=fb52 -InputSigType4067=Digital -InputCue4068=fb53 -InputSigType4068=Digital -InputCue4069=fb54 -InputSigType4069=Digital -InputCue4070=fb55 -InputSigType4070=Digital -InputCue4071=fb56 -InputSigType4071=Digital -InputCue4072=fb57 -InputSigType4072=Digital -InputCue4073=fb58 -InputSigType4073=Digital -InputCue4074=fb59 -InputSigType4074=Digital -InputCue4075=fb60 -InputSigType4075=Digital -InputCue4076=fb61 -InputSigType4076=Digital -InputCue4077=fb62 -InputSigType4077=Digital -InputCue4078=fb63 -InputSigType4078=Digital -InputCue4079=fb64 -InputSigType4079=Digital -InputCue4080=fb65 -InputSigType4080=Digital -InputCue4081=fb66 -InputSigType4081=Digital -InputCue4082=fb67 -InputSigType4082=Digital -InputCue4083=fb68 -InputSigType4083=Digital -InputCue4084=fb69 -InputSigType4084=Digital -InputCue4085=fb70 -InputSigType4085=Digital -InputCue4086=fb71 -InputSigType4086=Digital -InputCue4087=fb72 -InputSigType4087=Digital -InputCue4088=fb73 -InputSigType4088=Digital -InputCue4089=fb74 -InputSigType4089=Digital -InputCue4090=fb75 -InputSigType4090=Digital -InputCue4091=fb76 -InputSigType4091=Digital -InputCue4092=fb77 -InputSigType4092=Digital -InputCue4093=fb78 -InputSigType4093=Digital -InputCue4094=fb79 -InputSigType4094=Digital -InputCue4095=fb80 -InputSigType4095=Digital -InputCue4096=fb81 -InputSigType4096=Digital -InputCue4097=fb82 -InputSigType4097=Digital -InputCue4098=fb83 -InputSigType4098=Digital -InputCue4099=fb84 -InputSigType4099=Digital -InputCue4100=fb85 -InputSigType4100=Digital -InputCue4101=fb86 -InputSigType4101=Digital -InputCue4102=fb87 -InputSigType4102=Digital -InputCue4103=fb88 -InputSigType4103=Digital -InputCue4104=fb89 -InputSigType4104=Digital -InputCue4105=fb90 -InputSigType4105=Digital -InputCue4106=[~EndGroup~]fb -InputSigType4106=Digital -OutputCue1=Is Moving -OutputSigType1=Digital -OutputCue2=[~UNUSED2~] -OutputSigType2=Digital -OutputCue3=[~UNUSED2~] -OutputSigType3=Digital -OutputCue4=[~UNUSED2~] -OutputSigType4=Digital -OutputCue5=[~UNUSED2~] -OutputSigType5=Digital -OutputCue6=[~UNUSED2~] -OutputSigType6=Digital -OutputCue7=[~UNUSED2~] -OutputSigType7=Digital -OutputCue8=[~UNUSED2~] -OutputSigType8=Digital -OutputCue9=[~UNUSED2~] -OutputSigType9=Digital -OutputCue10=[~UNUSED2~] -OutputSigType10=Digital -OutputCue11=[~BeginGroup~]Enable -OutputSigType11=Digital -OutputCue12=[~UNUSED3~] -OutputSigType12=Digital -OutputCue13=[~UNUSED3~] -OutputSigType13=Digital -OutputCue14=[~UNUSED3~] -OutputSigType14=Digital -OutputCue15=[~UNUSED3~] -OutputSigType15=Digital -OutputCue16=[~UNUSED3~] -OutputSigType16=Digital -OutputCue17=[~UNUSED3~] -OutputSigType17=Digital -OutputCue18=[~UNUSED3~] -OutputSigType18=Digital -OutputCue19=[~UNUSED3~] -OutputSigType19=Digital -OutputCue20=[~UNUSED3~] -OutputSigType20=Digital -OutputCue21=[~UNUSED3~] -OutputSigType21=Digital -OutputCue22=[~UNUSED3~] -OutputSigType22=Digital -OutputCue23=[~UNUSED3~] -OutputSigType23=Digital -OutputCue24=[~UNUSED3~] -OutputSigType24=Digital -OutputCue25=[~UNUSED3~] -OutputSigType25=Digital -OutputCue26=[~UNUSED3~] -OutputSigType26=Digital -OutputCue27=[~UNUSED3~] -OutputSigType27=Digital -OutputCue28=[~UNUSED3~] -OutputSigType28=Digital -OutputCue29=[~UNUSED3~] -OutputSigType29=Digital -OutputCue30=[~UNUSED3~] -OutputSigType30=Digital -OutputCue31=[~UNUSED3~] -OutputSigType31=Digital -OutputCue32=[~UNUSED3~] -OutputSigType32=Digital -OutputCue33=[~UNUSED3~] -OutputSigType33=Digital -OutputCue34=[~UNUSED3~] -OutputSigType34=Digital -OutputCue35=[~UNUSED3~] -OutputSigType35=Digital -OutputCue36=[~UNUSED3~] -OutputSigType36=Digital -OutputCue37=[~UNUSED3~] -OutputSigType37=Digital -OutputCue38=[~UNUSED3~] -OutputSigType38=Digital -OutputCue39=[~UNUSED3~] -OutputSigType39=Digital -OutputCue40=[~UNUSED3~] -OutputSigType40=Digital -OutputCue41=[~UNUSED3~] -OutputSigType41=Digital -OutputCue42=[~UNUSED2~] -OutputSigType42=Digital|Analog|Serial|String -OutputCue2012=[~EndGroup~]Enable -OutputSigType2012=Digital -OutputCue2013=[~BeginGroup~]Visible -OutputSigType2013=Digital -OutputCue2014=[~UNUSED3~] -OutputSigType2014=Digital -OutputCue2015=[~UNUSED3~] -OutputSigType2015=Digital -OutputCue2016=[~UNUSED3~] -OutputSigType2016=Digital -OutputCue2017=[~UNUSED3~] -OutputSigType2017=Digital -OutputCue2018=[~UNUSED3~] -OutputSigType2018=Digital -OutputCue2019=[~UNUSED3~] -OutputSigType2019=Digital -OutputCue2020=[~UNUSED3~] -OutputSigType2020=Digital -OutputCue2021=[~UNUSED3~] -OutputSigType2021=Digital -OutputCue2022=[~UNUSED3~] -OutputSigType2022=Digital -OutputCue2023=[~UNUSED3~] -OutputSigType2023=Digital -OutputCue2024=[~UNUSED3~] -OutputSigType2024=Digital -OutputCue2025=[~UNUSED3~] -OutputSigType2025=Digital -OutputCue2026=[~UNUSED3~] -OutputSigType2026=Digital -OutputCue2027=[~UNUSED3~] -OutputSigType2027=Digital -OutputCue2028=[~UNUSED3~] -OutputSigType2028=Digital -OutputCue2029=[~UNUSED3~] -OutputSigType2029=Digital -OutputCue2030=[~UNUSED3~] -OutputSigType2030=Digital -OutputCue2031=[~UNUSED3~] -OutputSigType2031=Digital -OutputCue2032=[~UNUSED3~] -OutputSigType2032=Digital -OutputCue2033=[~UNUSED3~] -OutputSigType2033=Digital -OutputCue2034=[~UNUSED3~] -OutputSigType2034=Digital -OutputCue2035=[~UNUSED3~] -OutputSigType2035=Digital -OutputCue2036=[~UNUSED3~] -OutputSigType2036=Digital -OutputCue2037=[~UNUSED3~] -OutputSigType2037=Digital -OutputCue2038=[~UNUSED3~] -OutputSigType2038=Digital -OutputCue2039=[~UNUSED3~] -OutputSigType2039=Digital -OutputCue2040=[~UNUSED3~] -OutputSigType2040=Digital -OutputCue2041=[~UNUSED3~] -OutputSigType2041=Digital -OutputCue2042=[~UNUSED3~] -OutputSigType2042=Digital -OutputCue2043=[~UNUSED3~] -OutputSigType2043=Digital -OutputCue2044=[~UNUSED2~] -OutputSigType2044=Digital|Analog|Serial|String -OutputCue4014=[~EndGroup~]Visible -OutputSigType4014=Digital -OutputCue4015=[~BeginGroup~]Press -OutputSigType4015=Digital -OutputCue4016=press1 -OutputSigType4016=Digital -OutputCue4017=press2 -OutputSigType4017=Digital -OutputCue4018=press3 -OutputSigType4018=Digital -OutputCue4019=press4 -OutputSigType4019=Digital -OutputCue4020=press5 -OutputSigType4020=Digital -OutputCue4021=press6 -OutputSigType4021=Digital -OutputCue4022=press7 -OutputSigType4022=Digital -OutputCue4023=press8 -OutputSigType4023=Digital -OutputCue4024=press9 -OutputSigType4024=Digital -OutputCue4025=press10 -OutputSigType4025=Digital -OutputCue4026=press11 -OutputSigType4026=Digital -OutputCue4027=press12 -OutputSigType4027=Digital -OutputCue4028=press13 -OutputSigType4028=Digital -OutputCue4029=press14 -OutputSigType4029=Digital -OutputCue4030=press15 -OutputSigType4030=Digital -OutputCue4031=press16 -OutputSigType4031=Digital -OutputCue4032=press17 -OutputSigType4032=Digital -OutputCue4033=press18 -OutputSigType4033=Digital -OutputCue4034=press19 -OutputSigType4034=Digital -OutputCue4035=press20 -OutputSigType4035=Digital -OutputCue4036=press21 -OutputSigType4036=Digital -OutputCue4037=press22 -OutputSigType4037=Digital -OutputCue4038=press23 -OutputSigType4038=Digital -OutputCue4039=press24 -OutputSigType4039=Digital -OutputCue4040=press25 -OutputSigType4040=Digital -OutputCue4041=press26 -OutputSigType4041=Digital -OutputCue4042=press27 -OutputSigType4042=Digital -OutputCue4043=press28 -OutputSigType4043=Digital -OutputCue4044=press29 -OutputSigType4044=Digital -OutputCue4045=press30 -OutputSigType4045=Digital -OutputCue4046=press31 -OutputSigType4046=Digital -OutputCue4047=press32 -OutputSigType4047=Digital -OutputCue4048=press33 -OutputSigType4048=Digital -OutputCue4049=press34 -OutputSigType4049=Digital -OutputCue4050=press35 -OutputSigType4050=Digital -OutputCue4051=press36 -OutputSigType4051=Digital -OutputCue4052=press37 -OutputSigType4052=Digital -OutputCue4053=press38 -OutputSigType4053=Digital -OutputCue4054=press39 -OutputSigType4054=Digital -OutputCue4055=press40 -OutputSigType4055=Digital -OutputCue4056=press41 -OutputSigType4056=Digital -OutputCue4057=press42 -OutputSigType4057=Digital -OutputCue4058=press43 -OutputSigType4058=Digital -OutputCue4059=press44 -OutputSigType4059=Digital -OutputCue4060=press45 -OutputSigType4060=Digital -OutputCue4061=press46 -OutputSigType4061=Digital -OutputCue4062=press47 -OutputSigType4062=Digital -OutputCue4063=press48 -OutputSigType4063=Digital -OutputCue4064=press49 -OutputSigType4064=Digital -OutputCue4065=press50 -OutputSigType4065=Digital -OutputCue4066=press51 -OutputSigType4066=Digital -OutputCue4067=press52 -OutputSigType4067=Digital -OutputCue4068=press53 -OutputSigType4068=Digital -OutputCue4069=press54 -OutputSigType4069=Digital -OutputCue4070=press55 -OutputSigType4070=Digital -OutputCue4071=press56 -OutputSigType4071=Digital -OutputCue4072=press57 -OutputSigType4072=Digital -OutputCue4073=press58 -OutputSigType4073=Digital -OutputCue4074=press59 -OutputSigType4074=Digital -OutputCue4075=press60 -OutputSigType4075=Digital -OutputCue4076=press61 -OutputSigType4076=Digital -OutputCue4077=press62 -OutputSigType4077=Digital -OutputCue4078=press63 -OutputSigType4078=Digital -OutputCue4079=press64 -OutputSigType4079=Digital -OutputCue4080=press65 -OutputSigType4080=Digital -OutputCue4081=press66 -OutputSigType4081=Digital -OutputCue4082=press67 -OutputSigType4082=Digital -OutputCue4083=press68 -OutputSigType4083=Digital -OutputCue4084=press69 -OutputSigType4084=Digital -OutputCue4085=press70 -OutputSigType4085=Digital -OutputCue4086=press71 -OutputSigType4086=Digital -OutputCue4087=press72 -OutputSigType4087=Digital -OutputCue4088=press73 -OutputSigType4088=Digital -OutputCue4089=press74 -OutputSigType4089=Digital -OutputCue4090=press75 -OutputSigType4090=Digital -OutputCue4091=press76 -OutputSigType4091=Digital -OutputCue4092=press77 -OutputSigType4092=Digital -OutputCue4093=press78 -OutputSigType4093=Digital -OutputCue4094=press79 -OutputSigType4094=Digital -OutputCue4095=press80 -OutputSigType4095=Digital -OutputCue4096=press81 -OutputSigType4096=Digital -OutputCue4097=press82 -OutputSigType4097=Digital -OutputCue4098=press83 -OutputSigType4098=Digital -OutputCue4099=press84 -OutputSigType4099=Digital -OutputCue4100=press85 -OutputSigType4100=Digital -OutputCue4101=press86 -OutputSigType4101=Digital -OutputCue4102=press87 -OutputSigType4102=Digital -OutputCue4103=press88 -OutputSigType4103=Digital -OutputCue4104=press89 -OutputSigType4104=Digital -OutputCue4105=press90 -OutputSigType4105=Digital -OutputCue4106=[~EndGroup~]Press -OutputSigType4106=Digital -InputList2Cue1=[~UNUSED3~] -InputList2SigType1=Analog -InputList2Cue2=Scroll To Item -InputList2SigType2=Analog -InputList2Cue3=Set Number of Items -InputList2SigType3=Analog -OutputList2Cue1=Item Clicked -OutputList2SigType1=Analog -OutputList2Cue2=[~UNUSED3~] -OutputList2SigType2=Analog -OutputList2Cue3=[~UNUSED3~] -OutputList2SigType3=Analog -InputList3Cue1=[~UNUSED2~] -InputList3SigType1=Serial -InputList3Cue2=[~UNUSED2~] -InputList3SigType2=Serial -InputList3Cue3=[~UNUSED2~] -InputList3SigType3=Serial -InputList3Cue4=[~UNUSED2~] -InputList3SigType4=Serial -InputList3Cue5=[~UNUSED2~] -InputList3SigType5=Serial -InputList3Cue6=[~UNUSED2~] -InputList3SigType6=Serial -InputList3Cue7=[~UNUSED2~] -InputList3SigType7=Serial -InputList3Cue8=[~UNUSED2~] -InputList3SigType8=Serial -InputList3Cue9=[~UNUSED2~] -InputList3SigType9=Serial -InputList3Cue10=[~UNUSED2~] -InputList3SigType10=Serial -InputList3Cue11=[~BeginGroup~]text-o -InputList3SigType11=Serial -InputList3Cue12=text-o1 -InputList3SigType12=Serial -InputList3Cue13=text-o2 -InputList3SigType13=Serial -InputList3Cue14=text-o3 -InputList3SigType14=Serial -InputList3Cue15=text-o4 -InputList3SigType15=Serial -InputList3Cue16=text-o5 -InputList3SigType16=Serial -InputList3Cue17=text-o6 -InputList3SigType17=Serial -InputList3Cue18=text-o7 -InputList3SigType18=Serial -InputList3Cue19=text-o8 -InputList3SigType19=Serial -InputList3Cue20=text-o9 -InputList3SigType20=Serial -InputList3Cue21=text-o10 -InputList3SigType21=Serial -InputList3Cue22=text-o11 -InputList3SigType22=Serial -InputList3Cue23=text-o12 -InputList3SigType23=Serial -InputList3Cue24=text-o13 -InputList3SigType24=Serial -InputList3Cue25=text-o14 -InputList3SigType25=Serial -InputList3Cue26=text-o15 -InputList3SigType26=Serial -InputList3Cue27=text-o16 -InputList3SigType27=Serial -InputList3Cue28=text-o17 -InputList3SigType28=Serial -InputList3Cue29=text-o18 -InputList3SigType29=Serial -InputList3Cue30=text-o19 -InputList3SigType30=Serial -InputList3Cue31=text-o20 -InputList3SigType31=Serial -InputList3Cue32=text-o21 -InputList3SigType32=Serial -InputList3Cue33=text-o22 -InputList3SigType33=Serial -InputList3Cue34=text-o23 -InputList3SigType34=Serial -InputList3Cue35=text-o24 -InputList3SigType35=Serial -InputList3Cue36=text-o25 -InputList3SigType36=Serial -InputList3Cue37=text-o26 -InputList3SigType37=Serial -InputList3Cue38=text-o27 -InputList3SigType38=Serial -InputList3Cue39=text-o28 -InputList3SigType39=Serial -InputList3Cue40=text-o29 -InputList3SigType40=Serial -InputList3Cue41=text-o30 -InputList3SigType41=Serial -InputList3Cue42=text-o31 -InputList3SigType42=Serial -InputList3Cue43=text-o32 -InputList3SigType43=Serial -InputList3Cue44=text-o33 -InputList3SigType44=Serial -InputList3Cue45=text-o34 -InputList3SigType45=Serial -InputList3Cue46=text-o35 -InputList3SigType46=Serial -InputList3Cue47=text-o36 -InputList3SigType47=Serial -InputList3Cue48=text-o37 -InputList3SigType48=Serial -InputList3Cue49=text-o38 -InputList3SigType49=Serial -InputList3Cue50=text-o39 -InputList3SigType50=Serial -InputList3Cue51=text-o40 -InputList3SigType51=Serial -InputList3Cue52=text-o41 -InputList3SigType52=Serial -InputList3Cue53=text-o42 -InputList3SigType53=Serial -InputList3Cue54=text-o43 -InputList3SigType54=Serial -InputList3Cue55=text-o44 -InputList3SigType55=Serial -InputList3Cue56=text-o45 -InputList3SigType56=Serial -InputList3Cue57=text-o46 -InputList3SigType57=Serial -InputList3Cue58=text-o47 -InputList3SigType58=Serial -InputList3Cue59=text-o48 -InputList3SigType59=Serial -InputList3Cue60=text-o49 -InputList3SigType60=Serial -InputList3Cue61=text-o50 -InputList3SigType61=Serial -InputList3Cue62=text-o51 -InputList3SigType62=Serial -InputList3Cue63=text-o52 -InputList3SigType63=Serial -InputList3Cue64=text-o53 -InputList3SigType64=Serial -InputList3Cue65=text-o54 -InputList3SigType65=Serial -InputList3Cue66=text-o55 -InputList3SigType66=Serial -InputList3Cue67=text-o56 -InputList3SigType67=Serial -InputList3Cue68=text-o57 -InputList3SigType68=Serial -InputList3Cue69=text-o58 -InputList3SigType69=Serial -InputList3Cue70=text-o59 -InputList3SigType70=Serial -InputList3Cue71=text-o60 -InputList3SigType71=Serial -InputList3Cue72=text-o61 -InputList3SigType72=Serial -InputList3Cue73=text-o62 -InputList3SigType73=Serial -InputList3Cue74=text-o63 -InputList3SigType74=Serial -InputList3Cue75=text-o64 -InputList3SigType75=Serial -InputList3Cue76=text-o65 -InputList3SigType76=Serial -InputList3Cue77=text-o66 -InputList3SigType77=Serial -InputList3Cue78=text-o67 -InputList3SigType78=Serial -InputList3Cue79=text-o68 -InputList3SigType79=Serial -InputList3Cue80=text-o69 -InputList3SigType80=Serial -InputList3Cue81=text-o70 -InputList3SigType81=Serial -InputList3Cue82=text-o71 -InputList3SigType82=Serial -InputList3Cue83=text-o72 -InputList3SigType83=Serial -InputList3Cue84=text-o73 -InputList3SigType84=Serial -InputList3Cue85=text-o74 -InputList3SigType85=Serial -InputList3Cue86=text-o75 -InputList3SigType86=Serial -InputList3Cue87=text-o76 -InputList3SigType87=Serial -InputList3Cue88=text-o77 -InputList3SigType88=Serial -InputList3Cue89=text-o78 -InputList3SigType89=Serial -InputList3Cue90=text-o79 -InputList3SigType90=Serial -InputList3Cue91=text-o80 -InputList3SigType91=Serial -InputList3Cue92=text-o81 -InputList3SigType92=Serial -InputList3Cue93=text-o82 -InputList3SigType93=Serial -InputList3Cue94=text-o83 -InputList3SigType94=Serial -InputList3Cue95=text-o84 -InputList3SigType95=Serial -InputList3Cue96=text-o85 -InputList3SigType96=Serial -InputList3Cue97=text-o86 -InputList3SigType97=Serial -InputList3Cue98=text-o87 -InputList3SigType98=Serial -InputList3Cue99=text-o88 -InputList3SigType99=Serial -InputList3Cue100=text-o89 -InputList3SigType100=Serial -InputList3Cue101=text-o90 -InputList3SigType101=Serial -InputList3Cue102=text-o91 -InputList3SigType102=Serial -InputList3Cue103=text-o92 -InputList3SigType103=Serial -InputList3Cue104=text-o93 -InputList3SigType104=Serial -InputList3Cue105=text-o94 -InputList3SigType105=Serial -InputList3Cue106=text-o95 -InputList3SigType106=Serial -InputList3Cue107=text-o96 -InputList3SigType107=Serial -InputList3Cue108=text-o97 -InputList3SigType108=Serial -InputList3Cue109=text-o98 -InputList3SigType109=Serial -InputList3Cue110=text-o99 -InputList3SigType110=Serial -InputList3Cue111=text-o100 -InputList3SigType111=Serial -InputList3Cue112=text-o101 -InputList3SigType112=Serial -InputList3Cue113=text-o102 -InputList3SigType113=Serial -InputList3Cue114=text-o103 -InputList3SigType114=Serial -InputList3Cue115=text-o104 -InputList3SigType115=Serial -InputList3Cue116=text-o105 -InputList3SigType116=Serial -InputList3Cue117=text-o106 -InputList3SigType117=Serial -InputList3Cue118=text-o107 -InputList3SigType118=Serial -InputList3Cue119=text-o108 -InputList3SigType119=Serial -InputList3Cue120=text-o109 -InputList3SigType120=Serial -InputList3Cue121=text-o110 -InputList3SigType121=Serial -InputList3Cue122=text-o111 -InputList3SigType122=Serial -InputList3Cue123=text-o112 -InputList3SigType123=Serial -InputList3Cue124=text-o113 -InputList3SigType124=Serial -InputList3Cue125=text-o114 -InputList3SigType125=Serial -InputList3Cue126=text-o115 -InputList3SigType126=Serial -InputList3Cue127=text-o116 -InputList3SigType127=Serial -InputList3Cue128=text-o117 -InputList3SigType128=Serial -InputList3Cue129=text-o118 -InputList3SigType129=Serial -InputList3Cue130=text-o119 -InputList3SigType130=Serial -InputList3Cue131=text-o120 -InputList3SigType131=Serial -InputList3Cue132=[~EndGroup~]text-o -InputList3SigType132=Serial -OutputList3Cue1=[~UNUSED2~] -OutputList3SigType1=Serial -OutputList3Cue2=[~UNUSED2~] -OutputList3SigType2=Serial -OutputList3Cue3=[~UNUSED2~] -OutputList3SigType3=Serial -OutputList3Cue4=[~UNUSED2~] -OutputList3SigType4=Serial -OutputList3Cue5=[~UNUSED2~] -OutputList3SigType5=Serial -OutputList3Cue6=[~UNUSED2~] -OutputList3SigType6=Serial -OutputList3Cue7=[~UNUSED2~] -OutputList3SigType7=Serial -OutputList3Cue8=[~UNUSED2~] -OutputList3SigType8=Serial -OutputList3Cue9=[~UNUSED2~] -OutputList3SigType9=Serial -OutputList3Cue10=[~UNUSED2~] -OutputList3SigType10=Serial -OutputList3Cue11=[~BeginGroup~]text-i -OutputList3SigType11=Serial -OutputList3Cue12=text-i1 -OutputList3SigType12=Serial -OutputList3Cue13=text-i2 -OutputList3SigType13=Serial -OutputList3Cue14=text-i3 -OutputList3SigType14=Serial -OutputList3Cue15=text-i4 -OutputList3SigType15=Serial -OutputList3Cue16=text-i5 -OutputList3SigType16=Serial -OutputList3Cue17=text-i6 -OutputList3SigType17=Serial -OutputList3Cue18=text-i7 -OutputList3SigType18=Serial -OutputList3Cue19=text-i8 -OutputList3SigType19=Serial -OutputList3Cue20=text-i9 -OutputList3SigType20=Serial -OutputList3Cue21=text-i10 -OutputList3SigType21=Serial -OutputList3Cue22=text-i11 -OutputList3SigType22=Serial -OutputList3Cue23=text-i12 -OutputList3SigType23=Serial -OutputList3Cue24=text-i13 -OutputList3SigType24=Serial -OutputList3Cue25=text-i14 -OutputList3SigType25=Serial -OutputList3Cue26=text-i15 -OutputList3SigType26=Serial -OutputList3Cue27=text-i16 -OutputList3SigType27=Serial -OutputList3Cue28=text-i17 -OutputList3SigType28=Serial -OutputList3Cue29=text-i18 -OutputList3SigType29=Serial -OutputList3Cue30=text-i19 -OutputList3SigType30=Serial -OutputList3Cue31=text-i20 -OutputList3SigType31=Serial -OutputList3Cue32=text-i21 -OutputList3SigType32=Serial -OutputList3Cue33=text-i22 -OutputList3SigType33=Serial -OutputList3Cue34=text-i23 -OutputList3SigType34=Serial -OutputList3Cue35=text-i24 -OutputList3SigType35=Serial -OutputList3Cue36=text-i25 -OutputList3SigType36=Serial -OutputList3Cue37=text-i26 -OutputList3SigType37=Serial -OutputList3Cue38=text-i27 -OutputList3SigType38=Serial -OutputList3Cue39=text-i28 -OutputList3SigType39=Serial -OutputList3Cue40=text-i29 -OutputList3SigType40=Serial -OutputList3Cue41=text-i30 -OutputList3SigType41=Serial -OutputList3Cue42=text-i31 -OutputList3SigType42=Serial -OutputList3Cue43=text-i32 -OutputList3SigType43=Serial -OutputList3Cue44=text-i33 -OutputList3SigType44=Serial -OutputList3Cue45=text-i34 -OutputList3SigType45=Serial -OutputList3Cue46=text-i35 -OutputList3SigType46=Serial -OutputList3Cue47=text-i36 -OutputList3SigType47=Serial -OutputList3Cue48=text-i37 -OutputList3SigType48=Serial -OutputList3Cue49=text-i38 -OutputList3SigType49=Serial -OutputList3Cue50=text-i39 -OutputList3SigType50=Serial -OutputList3Cue51=text-i40 -OutputList3SigType51=Serial -OutputList3Cue52=text-i41 -OutputList3SigType52=Serial -OutputList3Cue53=text-i42 -OutputList3SigType53=Serial -OutputList3Cue54=text-i43 -OutputList3SigType54=Serial -OutputList3Cue55=text-i44 -OutputList3SigType55=Serial -OutputList3Cue56=text-i45 -OutputList3SigType56=Serial -OutputList3Cue57=text-i46 -OutputList3SigType57=Serial -OutputList3Cue58=text-i47 -OutputList3SigType58=Serial -OutputList3Cue59=text-i48 -OutputList3SigType59=Serial -OutputList3Cue60=text-i49 -OutputList3SigType60=Serial -OutputList3Cue61=text-i50 -OutputList3SigType61=Serial -OutputList3Cue62=text-i51 -OutputList3SigType62=Serial -OutputList3Cue63=text-i52 -OutputList3SigType63=Serial -OutputList3Cue64=text-i53 -OutputList3SigType64=Serial -OutputList3Cue65=text-i54 -OutputList3SigType65=Serial -OutputList3Cue66=text-i55 -OutputList3SigType66=Serial -OutputList3Cue67=text-i56 -OutputList3SigType67=Serial -OutputList3Cue68=text-i57 -OutputList3SigType68=Serial -OutputList3Cue69=text-i58 -OutputList3SigType69=Serial -OutputList3Cue70=text-i59 -OutputList3SigType70=Serial -OutputList3Cue71=text-i60 -OutputList3SigType71=Serial -OutputList3Cue72=text-i61 -OutputList3SigType72=Serial -OutputList3Cue73=text-i62 -OutputList3SigType73=Serial -OutputList3Cue74=text-i63 -OutputList3SigType74=Serial -OutputList3Cue75=text-i64 -OutputList3SigType75=Serial -OutputList3Cue76=text-i65 -OutputList3SigType76=Serial -OutputList3Cue77=text-i66 -OutputList3SigType77=Serial -OutputList3Cue78=text-i67 -OutputList3SigType78=Serial -OutputList3Cue79=text-i68 -OutputList3SigType79=Serial -OutputList3Cue80=text-i69 -OutputList3SigType80=Serial -OutputList3Cue81=text-i70 -OutputList3SigType81=Serial -OutputList3Cue82=text-i71 -OutputList3SigType82=Serial -OutputList3Cue83=text-i72 -OutputList3SigType83=Serial -OutputList3Cue84=text-i73 -OutputList3SigType84=Serial -OutputList3Cue85=text-i74 -OutputList3SigType85=Serial -OutputList3Cue86=text-i75 -OutputList3SigType86=Serial -OutputList3Cue87=text-i76 -OutputList3SigType87=Serial -OutputList3Cue88=text-i77 -OutputList3SigType88=Serial -OutputList3Cue89=text-i78 -OutputList3SigType89=Serial -OutputList3Cue90=text-i79 -OutputList3SigType90=Serial -OutputList3Cue91=text-i80 -OutputList3SigType91=Serial -OutputList3Cue92=text-i81 -OutputList3SigType92=Serial -OutputList3Cue93=text-i82 -OutputList3SigType93=Serial -OutputList3Cue94=text-i83 -OutputList3SigType94=Serial -OutputList3Cue95=text-i84 -OutputList3SigType95=Serial -OutputList3Cue96=text-i85 -OutputList3SigType96=Serial -OutputList3Cue97=text-i86 -OutputList3SigType97=Serial -OutputList3Cue98=text-i87 -OutputList3SigType98=Serial -OutputList3Cue99=text-i88 -OutputList3SigType99=Serial -OutputList3Cue100=text-i89 -OutputList3SigType100=Serial -OutputList3Cue101=text-i90 -OutputList3SigType101=Serial -OutputList3Cue102=text-i91 -OutputList3SigType102=Serial -OutputList3Cue103=text-i92 -OutputList3SigType103=Serial -OutputList3Cue104=text-i93 -OutputList3SigType104=Serial -OutputList3Cue105=text-i94 -OutputList3SigType105=Serial -OutputList3Cue106=text-i95 -OutputList3SigType106=Serial -OutputList3Cue107=text-i96 -OutputList3SigType107=Serial -OutputList3Cue108=text-i97 -OutputList3SigType108=Serial -OutputList3Cue109=text-i98 -OutputList3SigType109=Serial -OutputList3Cue110=text-i99 -OutputList3SigType110=Serial -OutputList3Cue111=text-i100 -OutputList3SigType111=Serial -OutputList3Cue112=text-i101 -OutputList3SigType112=Serial -OutputList3Cue113=text-i102 -OutputList3SigType113=Serial -OutputList3Cue114=text-i103 -OutputList3SigType114=Serial -OutputList3Cue115=text-i104 -OutputList3SigType115=Serial -OutputList3Cue116=text-i105 -OutputList3SigType116=Serial -OutputList3Cue117=text-i106 -OutputList3SigType117=Serial -OutputList3Cue118=text-i107 -OutputList3SigType118=Serial -OutputList3Cue119=text-i108 -OutputList3SigType119=Serial -OutputList3Cue120=text-i109 -OutputList3SigType120=Serial -OutputList3Cue121=text-i110 -OutputList3SigType121=Serial -OutputList3Cue122=text-i111 -OutputList3SigType122=Serial -OutputList3Cue123=text-i112 -OutputList3SigType123=Serial -OutputList3Cue124=text-i113 -OutputList3SigType124=Serial -OutputList3Cue125=text-i114 -OutputList3SigType125=Serial -OutputList3Cue126=text-i115 -OutputList3SigType126=Serial -OutputList3Cue127=text-i116 -OutputList3SigType127=Serial -OutputList3Cue128=text-i117 -OutputList3SigType128=Serial -OutputList3Cue129=text-i118 -OutputList3SigType129=Serial -OutputList3Cue130=text-i119 -OutputList3SigType130=Serial -OutputList3Cue131=text-i120 -OutputList3SigType131=Serial -OutputList3Cue132=[~EndGroup~]text-i -OutputList3SigType132=Serial -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=1 -CedH=1 -SmartObjId=1805d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=1 -Tp=1 -HD=TRUE -DV=1805d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=1 -Name=PepperDash Essentials TSW1050_[B.AV] 1D CATV-Full_Channel Presets List Full.ced -;Cedver is the version of the Smart Graphics control, not the CED file format. -;If the control definition changes, increment this. -CedVer=1 -] -;================================================================================ -[ -ObjTp=Symbol -Name=PepperDash Essentials TSW1050_[B.AV] 1D CATV-Full_CATV Dpad Full.ced -Hint=CATV Dpad Full (Smart Object ID=10201) -Code=2 -SGControlType=DPad -SGControlName=CATV Dpad Full -GUID=8E9A1824-AB69-40BA-8BAF-65D5DD434717 -SmplCName=PepperDash Essentials TSW1050_[B.AV] 1D CATV-Full_CATV Dpad Full.ced -SMWRev=4.02.19 -Expand=expand_random -HelpID=10015 -;Define the number of inputs, outputs and parameters -MinVariableInputs=5 -MaxVariableInputs=5 -MinVariableOutputs=5 -MaxVariableOutputs=5 -NumFixedParams=1 -MinVariableInputsList2=0 -MaxVariableInputsList2=0 -MinVariableOutputsList2=0 -MaxVariableOutputsList2=0 -MinVariableInputsList3=0 -MaxVariableInputsList3=0 -MinVariableOutputsList3=0 -MaxVariableOutputsList3=0 -;Define the cues, and signal types each input, output and parameter. -InputCue1=[~UNUSED3~] -InputSigType1=Digital -OutputCue1=Up -OutputSigType1=Digital -InputCue2=[~UNUSED3~] -InputSigType2=Digital -OutputCue2=Down -OutputSigType2=Digital -InputCue3=[~UNUSED3~] -InputSigType3=Digital -OutputCue3=Left -OutputSigType3=Digital -InputCue4=[~UNUSED3~] -InputSigType4=Digital -OutputCue4=Right -OutputSigType4=Digital -InputCue5=[~UNUSED3~] -InputSigType5=Digital -OutputCue5=OK -OutputSigType5=Digital -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=2 -CedH=2 -SmartObjId=10201d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=2 -Tp=1 -HD=TRUE -DV=10201d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=2 -Name=PepperDash Essentials TSW1050_[B.AV] 1D CATV-Full_CATV Dpad Full.ced -;Cedver is the version of the Smart Graphics control, not the CED file format. -;If the control definition changes, increment this. -CedVer=1 -] -;================================================================================ -[ -ObjTp=Symbol -Name=PepperDash Essentials TSW1050_[B.AV] 1D CATV-Full_CATV Keypad Full.ced -Hint=CATV Keypad Full (Smart Object ID=10202) -Code=3 -SGControlType=Simple Keypad -SGControlName=CATV Keypad Full -GUID=9074CDC5-3FAB-490A-9B62-D88075EB2DB5 -SmplCName=PepperDash Essentials TSW1050_[B.AV] 1D CATV-Full_CATV Keypad Full.ced -SMWRev=4.02.19 -Expand=expand_random -HelpID=10061 -;Define the number of inputs, outputs and parameters -MinVariableInputs=12 -MaxVariableInputs=12 -MinVariableOutputs=12 -MaxVariableOutputs=12 -NumFixedParams=1 -MinVariableInputsList2=0 -MaxVariableInputsList2=0 -MinVariableOutputsList2=0 -MaxVariableOutputsList2=0 -MinVariableInputsList3=0 -MaxVariableInputsList3=0 -MinVariableOutputsList3=0 -MaxVariableOutputsList3=0 -;Define the cues, and signal types each input, output and parameter. -InputCue1=[~UNUSED3~] -InputSigType1=Digital -OutputCue1=1 -OutputSigType1=Digital -InputCue2=[~UNUSED3~] -InputSigType2=Digital -OutputCue2=2 -OutputSigType2=Digital -InputCue3=[~UNUSED3~] -InputSigType3=Digital -OutputCue3=3 -OutputSigType3=Digital -InputCue4=[~UNUSED3~] -InputSigType4=Digital -OutputCue4=4 -OutputSigType4=Digital -InputCue5=[~UNUSED3~] -InputSigType5=Digital -OutputCue5=5 -OutputSigType5=Digital -InputCue6=[~UNUSED3~] -InputSigType6=Digital -OutputCue6=6 -OutputSigType6=Digital -InputCue7=[~UNUSED3~] -InputSigType7=Digital -OutputCue7=7 -OutputSigType7=Digital -InputCue8=[~UNUSED3~] -InputSigType8=Digital -OutputCue8=8 -OutputSigType8=Digital -InputCue9=[~UNUSED3~] -InputSigType9=Digital -OutputCue9=9 -OutputSigType9=Digital -InputCue10=[~UNUSED3~] -InputSigType10=Digital -OutputCue10=0 -OutputSigType10=Digital -InputCue11=[~UNUSED3~] -InputSigType11=Digital -OutputCue11=Misc_1 -OutputSigType11=Digital -InputCue12=[~UNUSED3~] -InputSigType12=Digital -OutputCue12=Misc_2 -OutputSigType12=Digital -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=3 -CedH=3 -SmartObjId=10202d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=3 -Tp=1 -HD=TRUE -DV=10202d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=3 -Name=PepperDash Essentials TSW1050_[B.AV] 1D CATV-Full_CATV Keypad Full.ced -;Cedver is the version of the Smart Graphics control, not the CED file format. -;If the control definition changes, increment this. -CedVer=1 -] -;================================================================================ -[ -ObjTp=Symbol -Name=PepperDash Essentials TSW1050_[C.AC] 04.AC Inactive_AC DTMF Keypad_2.ced -Hint=AC DTMF Keypad_2 (Smart Object ID=21) -Code=4 -SGControlType=Simple Keypad -SGControlName=AC DTMF Keypad_2 -GUID=F2A259FE-82AD-4085-B5A6-22D7B034458C -SmplCName=PepperDash Essentials TSW1050_[C.AC] 04.AC Inactive_AC DTMF Keypad_2.ced -SMWRev=4.02.19 -Expand=expand_random -HelpID=10061 -;Define the number of inputs, outputs and parameters -MinVariableInputs=12 -MaxVariableInputs=12 -MinVariableOutputs=12 -MaxVariableOutputs=12 -NumFixedParams=1 -MinVariableInputsList2=0 -MaxVariableInputsList2=0 -MinVariableOutputsList2=0 -MaxVariableOutputsList2=0 -MinVariableInputsList3=0 -MaxVariableInputsList3=0 -MinVariableOutputsList3=0 -MaxVariableOutputsList3=0 -;Define the cues, and signal types each input, output and parameter. -InputCue1=[~UNUSED3~] -InputSigType1=Digital -OutputCue1=1 -OutputSigType1=Digital -InputCue2=[~UNUSED3~] -InputSigType2=Digital -OutputCue2=2 -OutputSigType2=Digital -InputCue3=[~UNUSED3~] -InputSigType3=Digital -OutputCue3=3 -OutputSigType3=Digital -InputCue4=[~UNUSED3~] -InputSigType4=Digital -OutputCue4=4 -OutputSigType4=Digital -InputCue5=[~UNUSED3~] -InputSigType5=Digital -OutputCue5=5 -OutputSigType5=Digital -InputCue6=[~UNUSED3~] -InputSigType6=Digital -OutputCue6=6 -OutputSigType6=Digital -InputCue7=[~UNUSED3~] -InputSigType7=Digital -OutputCue7=7 -OutputSigType7=Digital -InputCue8=[~UNUSED3~] -InputSigType8=Digital -OutputCue8=8 -OutputSigType8=Digital -InputCue9=[~UNUSED3~] -InputSigType9=Digital -OutputCue9=9 -OutputSigType9=Digital -InputCue10=[~UNUSED3~] -InputSigType10=Digital -OutputCue10=0 -OutputSigType10=Digital -InputCue11=[~UNUSED3~] -InputSigType11=Digital -OutputCue11=* -OutputSigType11=Digital -InputCue12=[~UNUSED3~] -InputSigType12=Digital -OutputCue12=/# -OutputSigType12=Digital -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=4 -CedH=4 -SmartObjId=21d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=4 -Tp=1 -HD=TRUE -DV=21d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=4 -Name=PepperDash Essentials TSW1050_[C.AC] 04.AC Inactive_AC DTMF Keypad_2.ced -;Cedver is the version of the Smart Graphics control, not the CED file format. -;If the control definition changes, increment this. -CedVer=1 -] -;================================================================================ -[ -ObjTp=Symbol -Name=PepperDash Essentials TSW1050_[C.AC] 03.AC Active_AC DTMF Keypad.ced -Hint=AC DTMF Keypad (Smart Object ID=20) -Code=5 -SGControlType=Simple Keypad -SGControlName=AC DTMF Keypad -GUID=D48FD9F3-FA13-4FED-8F73-9FD56045D12D -SmplCName=PepperDash Essentials TSW1050_[C.AC] 03.AC Active_AC DTMF Keypad.ced -SMWRev=4.02.19 -Expand=expand_random -HelpID=10061 -;Define the number of inputs, outputs and parameters -MinVariableInputs=12 -MaxVariableInputs=12 -MinVariableOutputs=12 -MaxVariableOutputs=12 -NumFixedParams=1 -MinVariableInputsList2=0 -MaxVariableInputsList2=0 -MinVariableOutputsList2=0 -MaxVariableOutputsList2=0 -MinVariableInputsList3=0 -MaxVariableInputsList3=0 -MinVariableOutputsList3=0 -MaxVariableOutputsList3=0 -;Define the cues, and signal types each input, output and parameter. -InputCue1=[~UNUSED3~] -InputSigType1=Digital -OutputCue1=1 -OutputSigType1=Digital -InputCue2=[~UNUSED3~] -InputSigType2=Digital -OutputCue2=2 -OutputSigType2=Digital -InputCue3=[~UNUSED3~] -InputSigType3=Digital -OutputCue3=3 -OutputSigType3=Digital -InputCue4=[~UNUSED3~] -InputSigType4=Digital -OutputCue4=4 -OutputSigType4=Digital -InputCue5=[~UNUSED3~] -InputSigType5=Digital -OutputCue5=5 -OutputSigType5=Digital -InputCue6=[~UNUSED3~] -InputSigType6=Digital -OutputCue6=6 -OutputSigType6=Digital -InputCue7=[~UNUSED3~] -InputSigType7=Digital -OutputCue7=7 -OutputSigType7=Digital -InputCue8=[~UNUSED3~] -InputSigType8=Digital -OutputCue8=8 -OutputSigType8=Digital -InputCue9=[~UNUSED3~] -InputSigType9=Digital -OutputCue9=9 -OutputSigType9=Digital -InputCue10=[~UNUSED3~] -InputSigType10=Digital -OutputCue10=0 -OutputSigType10=Digital -InputCue11=[~UNUSED3~] -InputSigType11=Digital -OutputCue11=* -OutputSigType11=Digital -InputCue12=[~UNUSED3~] -InputSigType12=Digital -OutputCue12=/# -OutputSigType12=Digital -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=5 -CedH=5 -SmartObjId=20d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=5 -Tp=1 -HD=TRUE -DV=20d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=5 -Name=PepperDash Essentials TSW1050_[C.AC] 03.AC Active_AC DTMF Keypad.ced -;Cedver is the version of the Smart Graphics control, not the CED file format. -;If the control definition changes, increment this. -CedVer=1 -] -;================================================================================ -[ -ObjTp=Symbol -Name=PepperDash Essentials TSW1050_[B.AV] Staging_Subpage Reference List Horizontal_3.ced -Hint=Subpage Reference List Horizontal_3 (Smart Object ID=3200) -Code=6 -SGControlType=Subpage Reference List Horizontal -SGControlName=Subpage Reference List Horizontal_3 -GUID=D638D437-6722-43E1-B435-EF13DCE5ECF0 -SmplCName=PepperDash Essentials TSW1050_[B.AV] Staging_Subpage Reference List Horizontal_3.ced -SMWRev=4.02.20 -Expand=expand_random -HelpID=10124 -Render=8 -;Define the number of inputs, outputs and parameters -MinVariableInputs=4076 -MaxVariableInputs=4076 -MinVariableOutputs=4076 -MaxVariableOutputs=4076 -NumFixedParams=1 -MinVariableInputsList2=72 -MaxVariableInputsList2=72 -MinVariableOutputsList2=72 -MaxVariableOutputsList2=72 -MinVariableInputsList3=72 -MaxVariableInputsList3=72 -MinVariableOutputsList3=72 -MaxVariableOutputsList3=72 -InputSigType1=Digital -OutputSigType1=Digital -InputList2SigType1=Analog -OutputList2SigType1=Analog -InputList3SigType1=Serial -OutputList3SigType1=Serial - -;Define the cues, and signal types each input, output and parameter. -InputCue1=[~UNUSED3~] -InputSigType1=Digital -InputCue2=[~UNUSED2~] -InputSigType2=Digital -InputCue3=[~UNUSED2~] -InputSigType3=Digital -InputCue4=[~UNUSED2~] -InputSigType4=Digital -InputCue5=[~UNUSED2~] -InputSigType5=Digital -InputCue6=[~UNUSED2~] -InputSigType6=Digital -InputCue7=[~UNUSED2~] -InputSigType7=Digital -InputCue8=[~UNUSED2~] -InputSigType8=Digital -InputCue9=[~UNUSED2~] -InputSigType9=Digital -InputCue10=[~UNUSED2~] -InputSigType10=Digital -InputCue11=[~BeginGroup~]Enable -InputSigType11=Digital -InputCue12=Item 1 Enable -InputSigType12=Digital -InputCue13=Item 2 Enable -InputSigType13=Digital -InputCue14=Item 3 Enable -InputSigType14=Digital -InputCue15=Item 4 Enable -InputSigType15=Digital -InputCue16=Item 5 Enable -InputSigType16=Digital -InputCue17=Item 6 Enable -InputSigType17=Digital -InputCue18=Item 7 Enable -InputSigType18=Digital -InputCue19=Item 8 Enable -InputSigType19=Digital -InputCue20=Item 9 Enable -InputSigType20=Digital -InputCue21=Item 10 Enable -InputSigType21=Digital -InputCue22=Item 11 Enable -InputSigType22=Digital -InputCue23=Item 12 Enable -InputSigType23=Digital -InputCue24=Item 13 Enable -InputSigType24=Digital -InputCue25=Item 14 Enable -InputSigType25=Digital -InputCue26=Item 15 Enable -InputSigType26=Digital -InputCue27=Item 16 Enable -InputSigType27=Digital -InputCue28=Item 17 Enable -InputSigType28=Digital -InputCue29=Item 18 Enable -InputSigType29=Digital -InputCue30=Item 19 Enable -InputSigType30=Digital -InputCue31=Item 20 Enable -InputSigType31=Digital -InputCue32=[~UNUSED2~] -InputSigType32=Digital|Analog|Serial|String -InputCue2012=[~EndGroup~]Enable -InputSigType2012=Digital -InputCue2013=[~BeginGroup~]Visible -InputSigType2013=Digital -InputCue2014=Item 1 Visible -InputSigType2014=Digital -InputCue2015=Item 2 Visible -InputSigType2015=Digital -InputCue2016=Item 3 Visible -InputSigType2016=Digital -InputCue2017=Item 4 Visible -InputSigType2017=Digital -InputCue2018=Item 5 Visible -InputSigType2018=Digital -InputCue2019=Item 6 Visible -InputSigType2019=Digital -InputCue2020=Item 7 Visible -InputSigType2020=Digital -InputCue2021=Item 8 Visible -InputSigType2021=Digital -InputCue2022=Item 9 Visible -InputSigType2022=Digital -InputCue2023=Item 10 Visible -InputSigType2023=Digital -InputCue2024=Item 11 Visible -InputSigType2024=Digital -InputCue2025=Item 12 Visible -InputSigType2025=Digital -InputCue2026=Item 13 Visible -InputSigType2026=Digital -InputCue2027=Item 14 Visible -InputSigType2027=Digital -InputCue2028=Item 15 Visible -InputSigType2028=Digital -InputCue2029=Item 16 Visible -InputSigType2029=Digital -InputCue2030=Item 17 Visible -InputSigType2030=Digital -InputCue2031=Item 18 Visible -InputSigType2031=Digital -InputCue2032=Item 19 Visible -InputSigType2032=Digital -InputCue2033=Item 20 Visible -InputSigType2033=Digital -InputCue2034=[~UNUSED2~] -InputSigType2034=Digital|Analog|Serial|String -InputCue4014=[~EndGroup~]Visible -InputSigType4014=Digital -InputCue4015=[~BeginGroup~]fb -InputSigType4015=Digital -InputCue4016=fb1 -InputSigType4016=Digital -InputCue4017=fb2 -InputSigType4017=Digital -InputCue4018=fb3 -InputSigType4018=Digital -InputCue4019=fb4 -InputSigType4019=Digital -InputCue4020=fb5 -InputSigType4020=Digital -InputCue4021=fb6 -InputSigType4021=Digital -InputCue4022=fb7 -InputSigType4022=Digital -InputCue4023=fb8 -InputSigType4023=Digital -InputCue4024=fb9 -InputSigType4024=Digital -InputCue4025=fb10 -InputSigType4025=Digital -InputCue4026=fb11 -InputSigType4026=Digital -InputCue4027=fb12 -InputSigType4027=Digital -InputCue4028=fb13 -InputSigType4028=Digital -InputCue4029=fb14 -InputSigType4029=Digital -InputCue4030=fb15 -InputSigType4030=Digital -InputCue4031=fb16 -InputSigType4031=Digital -InputCue4032=fb17 -InputSigType4032=Digital -InputCue4033=fb18 -InputSigType4033=Digital -InputCue4034=fb19 -InputSigType4034=Digital -InputCue4035=fb20 -InputSigType4035=Digital -InputCue4036=fb21 -InputSigType4036=Digital -InputCue4037=fb22 -InputSigType4037=Digital -InputCue4038=fb23 -InputSigType4038=Digital -InputCue4039=fb24 -InputSigType4039=Digital -InputCue4040=fb25 -InputSigType4040=Digital -InputCue4041=fb26 -InputSigType4041=Digital -InputCue4042=fb27 -InputSigType4042=Digital -InputCue4043=fb28 -InputSigType4043=Digital -InputCue4044=fb29 -InputSigType4044=Digital -InputCue4045=fb30 -InputSigType4045=Digital -InputCue4046=fb31 -InputSigType4046=Digital -InputCue4047=fb32 -InputSigType4047=Digital -InputCue4048=fb33 -InputSigType4048=Digital -InputCue4049=fb34 -InputSigType4049=Digital -InputCue4050=fb35 -InputSigType4050=Digital -InputCue4051=fb36 -InputSigType4051=Digital -InputCue4052=fb37 -InputSigType4052=Digital -InputCue4053=fb38 -InputSigType4053=Digital -InputCue4054=fb39 -InputSigType4054=Digital -InputCue4055=fb40 -InputSigType4055=Digital -InputCue4056=fb41 -InputSigType4056=Digital -InputCue4057=fb42 -InputSigType4057=Digital -InputCue4058=fb43 -InputSigType4058=Digital -InputCue4059=fb44 -InputSigType4059=Digital -InputCue4060=fb45 -InputSigType4060=Digital -InputCue4061=fb46 -InputSigType4061=Digital -InputCue4062=fb47 -InputSigType4062=Digital -InputCue4063=fb48 -InputSigType4063=Digital -InputCue4064=fb49 -InputSigType4064=Digital -InputCue4065=fb50 -InputSigType4065=Digital -InputCue4066=fb51 -InputSigType4066=Digital -InputCue4067=fb52 -InputSigType4067=Digital -InputCue4068=fb53 -InputSigType4068=Digital -InputCue4069=fb54 -InputSigType4069=Digital -InputCue4070=fb55 -InputSigType4070=Digital -InputCue4071=fb56 -InputSigType4071=Digital -InputCue4072=fb57 -InputSigType4072=Digital -InputCue4073=fb58 -InputSigType4073=Digital -InputCue4074=fb59 -InputSigType4074=Digital -InputCue4075=fb60 -InputSigType4075=Digital -InputCue4076=[~EndGroup~]fb -InputSigType4076=Digital -OutputCue1=Is Moving -OutputSigType1=Digital -OutputCue2=[~UNUSED2~] -OutputSigType2=Digital -OutputCue3=[~UNUSED2~] -OutputSigType3=Digital -OutputCue4=[~UNUSED2~] -OutputSigType4=Digital -OutputCue5=[~UNUSED2~] -OutputSigType5=Digital -OutputCue6=[~UNUSED2~] -OutputSigType6=Digital -OutputCue7=[~UNUSED2~] -OutputSigType7=Digital -OutputCue8=[~UNUSED2~] -OutputSigType8=Digital -OutputCue9=[~UNUSED2~] -OutputSigType9=Digital -OutputCue10=[~UNUSED2~] -OutputSigType10=Digital -OutputCue11=[~BeginGroup~]Enable -OutputSigType11=Digital -OutputCue12=[~UNUSED3~] -OutputSigType12=Digital -OutputCue13=[~UNUSED3~] -OutputSigType13=Digital -OutputCue14=[~UNUSED3~] -OutputSigType14=Digital -OutputCue15=[~UNUSED3~] -OutputSigType15=Digital -OutputCue16=[~UNUSED3~] -OutputSigType16=Digital -OutputCue17=[~UNUSED3~] -OutputSigType17=Digital -OutputCue18=[~UNUSED3~] -OutputSigType18=Digital -OutputCue19=[~UNUSED3~] -OutputSigType19=Digital -OutputCue20=[~UNUSED3~] -OutputSigType20=Digital -OutputCue21=[~UNUSED3~] -OutputSigType21=Digital -OutputCue22=[~UNUSED3~] -OutputSigType22=Digital -OutputCue23=[~UNUSED3~] -OutputSigType23=Digital -OutputCue24=[~UNUSED3~] -OutputSigType24=Digital -OutputCue25=[~UNUSED3~] -OutputSigType25=Digital -OutputCue26=[~UNUSED3~] -OutputSigType26=Digital -OutputCue27=[~UNUSED3~] -OutputSigType27=Digital -OutputCue28=[~UNUSED3~] -OutputSigType28=Digital -OutputCue29=[~UNUSED3~] -OutputSigType29=Digital -OutputCue30=[~UNUSED3~] -OutputSigType30=Digital -OutputCue31=[~UNUSED3~] -OutputSigType31=Digital -OutputCue32=[~UNUSED2~] -OutputSigType32=Digital|Analog|Serial|String -OutputCue2012=[~EndGroup~]Enable -OutputSigType2012=Digital -OutputCue2013=[~BeginGroup~]Visible -OutputSigType2013=Digital -OutputCue2014=[~UNUSED3~] -OutputSigType2014=Digital -OutputCue2015=[~UNUSED3~] -OutputSigType2015=Digital -OutputCue2016=[~UNUSED3~] -OutputSigType2016=Digital -OutputCue2017=[~UNUSED3~] -OutputSigType2017=Digital -OutputCue2018=[~UNUSED3~] -OutputSigType2018=Digital -OutputCue2019=[~UNUSED3~] -OutputSigType2019=Digital -OutputCue2020=[~UNUSED3~] -OutputSigType2020=Digital -OutputCue2021=[~UNUSED3~] -OutputSigType2021=Digital -OutputCue2022=[~UNUSED3~] -OutputSigType2022=Digital -OutputCue2023=[~UNUSED3~] -OutputSigType2023=Digital -OutputCue2024=[~UNUSED3~] -OutputSigType2024=Digital -OutputCue2025=[~UNUSED3~] -OutputSigType2025=Digital -OutputCue2026=[~UNUSED3~] -OutputSigType2026=Digital -OutputCue2027=[~UNUSED3~] -OutputSigType2027=Digital -OutputCue2028=[~UNUSED3~] -OutputSigType2028=Digital -OutputCue2029=[~UNUSED3~] -OutputSigType2029=Digital -OutputCue2030=[~UNUSED3~] -OutputSigType2030=Digital -OutputCue2031=[~UNUSED3~] -OutputSigType2031=Digital -OutputCue2032=[~UNUSED3~] -OutputSigType2032=Digital -OutputCue2033=[~UNUSED3~] -OutputSigType2033=Digital -OutputCue2034=[~UNUSED2~] -OutputSigType2034=Digital|Analog|Serial|String -OutputCue4014=[~EndGroup~]Visible -OutputSigType4014=Digital -OutputCue4015=[~BeginGroup~]Press -OutputSigType4015=Digital -OutputCue4016=press1 -OutputSigType4016=Digital -OutputCue4017=press2 -OutputSigType4017=Digital -OutputCue4018=press3 -OutputSigType4018=Digital -OutputCue4019=press4 -OutputSigType4019=Digital -OutputCue4020=press5 -OutputSigType4020=Digital -OutputCue4021=press6 -OutputSigType4021=Digital -OutputCue4022=press7 -OutputSigType4022=Digital -OutputCue4023=press8 -OutputSigType4023=Digital -OutputCue4024=press9 -OutputSigType4024=Digital -OutputCue4025=press10 -OutputSigType4025=Digital -OutputCue4026=press11 -OutputSigType4026=Digital -OutputCue4027=press12 -OutputSigType4027=Digital -OutputCue4028=press13 -OutputSigType4028=Digital -OutputCue4029=press14 -OutputSigType4029=Digital -OutputCue4030=press15 -OutputSigType4030=Digital -OutputCue4031=press16 -OutputSigType4031=Digital -OutputCue4032=press17 -OutputSigType4032=Digital -OutputCue4033=press18 -OutputSigType4033=Digital -OutputCue4034=press19 -OutputSigType4034=Digital -OutputCue4035=press20 -OutputSigType4035=Digital -OutputCue4036=press21 -OutputSigType4036=Digital -OutputCue4037=press22 -OutputSigType4037=Digital -OutputCue4038=press23 -OutputSigType4038=Digital -OutputCue4039=press24 -OutputSigType4039=Digital -OutputCue4040=press25 -OutputSigType4040=Digital -OutputCue4041=press26 -OutputSigType4041=Digital -OutputCue4042=press27 -OutputSigType4042=Digital -OutputCue4043=press28 -OutputSigType4043=Digital -OutputCue4044=press29 -OutputSigType4044=Digital -OutputCue4045=press30 -OutputSigType4045=Digital -OutputCue4046=press31 -OutputSigType4046=Digital -OutputCue4047=press32 -OutputSigType4047=Digital -OutputCue4048=press33 -OutputSigType4048=Digital -OutputCue4049=press34 -OutputSigType4049=Digital -OutputCue4050=press35 -OutputSigType4050=Digital -OutputCue4051=press36 -OutputSigType4051=Digital -OutputCue4052=press37 -OutputSigType4052=Digital -OutputCue4053=press38 -OutputSigType4053=Digital -OutputCue4054=press39 -OutputSigType4054=Digital -OutputCue4055=press40 -OutputSigType4055=Digital -OutputCue4056=press41 -OutputSigType4056=Digital -OutputCue4057=press42 -OutputSigType4057=Digital -OutputCue4058=press43 -OutputSigType4058=Digital -OutputCue4059=press44 -OutputSigType4059=Digital -OutputCue4060=press45 -OutputSigType4060=Digital -OutputCue4061=press46 -OutputSigType4061=Digital -OutputCue4062=press47 -OutputSigType4062=Digital -OutputCue4063=press48 -OutputSigType4063=Digital -OutputCue4064=press49 -OutputSigType4064=Digital -OutputCue4065=press50 -OutputSigType4065=Digital -OutputCue4066=press51 -OutputSigType4066=Digital -OutputCue4067=press52 -OutputSigType4067=Digital -OutputCue4068=press53 -OutputSigType4068=Digital -OutputCue4069=press54 -OutputSigType4069=Digital -OutputCue4070=press55 -OutputSigType4070=Digital -OutputCue4071=press56 -OutputSigType4071=Digital -OutputCue4072=press57 -OutputSigType4072=Digital -OutputCue4073=press58 -OutputSigType4073=Digital -OutputCue4074=press59 -OutputSigType4074=Digital -OutputCue4075=press60 -OutputSigType4075=Digital -OutputCue4076=[~EndGroup~]Press -OutputSigType4076=Digital -InputList2Cue1=[~UNUSED3~] -InputList2SigType1=Analog -InputList2Cue2=Scroll To Item -InputList2SigType2=Analog -InputList2Cue3=Set Number of Items -InputList2SigType3=Analog -InputList2Cue4=[~UNUSED2~] -InputList2SigType4=Analog -InputList2Cue5=[~UNUSED2~] -InputList2SigType5=Analog -InputList2Cue6=[~UNUSED2~] -InputList2SigType6=Analog -InputList2Cue7=[~UNUSED2~] -InputList2SigType7=Analog -InputList2Cue8=[~UNUSED2~] -InputList2SigType8=Analog -InputList2Cue9=[~UNUSED2~] -InputList2SigType9=Analog -InputList2Cue10=[~UNUSED2~] -InputList2SigType10=Analog -InputList2Cue11=[~BeginGroup~]an_fb -InputList2SigType11=Analog -InputList2Cue12=an_fb1 -InputList2SigType12=Analog -InputList2Cue13=an_fb2 -InputList2SigType13=Analog -InputList2Cue14=an_fb3 -InputList2SigType14=Analog -InputList2Cue15=an_fb4 -InputList2SigType15=Analog -InputList2Cue16=an_fb5 -InputList2SigType16=Analog -InputList2Cue17=an_fb6 -InputList2SigType17=Analog -InputList2Cue18=an_fb7 -InputList2SigType18=Analog -InputList2Cue19=an_fb8 -InputList2SigType19=Analog -InputList2Cue20=an_fb9 -InputList2SigType20=Analog -InputList2Cue21=an_fb10 -InputList2SigType21=Analog -InputList2Cue22=an_fb11 -InputList2SigType22=Analog -InputList2Cue23=an_fb12 -InputList2SigType23=Analog -InputList2Cue24=an_fb13 -InputList2SigType24=Analog -InputList2Cue25=an_fb14 -InputList2SigType25=Analog -InputList2Cue26=an_fb15 -InputList2SigType26=Analog -InputList2Cue27=an_fb16 -InputList2SigType27=Analog -InputList2Cue28=an_fb17 -InputList2SigType28=Analog -InputList2Cue29=an_fb18 -InputList2SigType29=Analog -InputList2Cue30=an_fb19 -InputList2SigType30=Analog -InputList2Cue31=an_fb20 -InputList2SigType31=Analog -InputList2Cue32=an_fb21 -InputList2SigType32=Analog -InputList2Cue33=an_fb22 -InputList2SigType33=Analog -InputList2Cue34=an_fb23 -InputList2SigType34=Analog -InputList2Cue35=an_fb24 -InputList2SigType35=Analog -InputList2Cue36=an_fb25 -InputList2SigType36=Analog -InputList2Cue37=an_fb26 -InputList2SigType37=Analog -InputList2Cue38=an_fb27 -InputList2SigType38=Analog -InputList2Cue39=an_fb28 -InputList2SigType39=Analog -InputList2Cue40=an_fb29 -InputList2SigType40=Analog -InputList2Cue41=an_fb30 -InputList2SigType41=Analog -InputList2Cue42=an_fb31 -InputList2SigType42=Analog -InputList2Cue43=an_fb32 -InputList2SigType43=Analog -InputList2Cue44=an_fb33 -InputList2SigType44=Analog -InputList2Cue45=an_fb34 -InputList2SigType45=Analog -InputList2Cue46=an_fb35 -InputList2SigType46=Analog -InputList2Cue47=an_fb36 -InputList2SigType47=Analog -InputList2Cue48=an_fb37 -InputList2SigType48=Analog -InputList2Cue49=an_fb38 -InputList2SigType49=Analog -InputList2Cue50=an_fb39 -InputList2SigType50=Analog -InputList2Cue51=an_fb40 -InputList2SigType51=Analog -InputList2Cue52=an_fb41 -InputList2SigType52=Analog -InputList2Cue53=an_fb42 -InputList2SigType53=Analog -InputList2Cue54=an_fb43 -InputList2SigType54=Analog -InputList2Cue55=an_fb44 -InputList2SigType55=Analog -InputList2Cue56=an_fb45 -InputList2SigType56=Analog -InputList2Cue57=an_fb46 -InputList2SigType57=Analog -InputList2Cue58=an_fb47 -InputList2SigType58=Analog -InputList2Cue59=an_fb48 -InputList2SigType59=Analog -InputList2Cue60=an_fb49 -InputList2SigType60=Analog -InputList2Cue61=an_fb50 -InputList2SigType61=Analog -InputList2Cue62=an_fb51 -InputList2SigType62=Analog -InputList2Cue63=an_fb52 -InputList2SigType63=Analog -InputList2Cue64=an_fb53 -InputList2SigType64=Analog -InputList2Cue65=an_fb54 -InputList2SigType65=Analog -InputList2Cue66=an_fb55 -InputList2SigType66=Analog -InputList2Cue67=an_fb56 -InputList2SigType67=Analog -InputList2Cue68=an_fb57 -InputList2SigType68=Analog -InputList2Cue69=an_fb58 -InputList2SigType69=Analog -InputList2Cue70=an_fb59 -InputList2SigType70=Analog -InputList2Cue71=an_fb60 -InputList2SigType71=Analog -InputList2Cue72=[~EndGroup~]an_fb -InputList2SigType72=Analog -OutputList2Cue1=Item Clicked -OutputList2SigType1=Analog -OutputList2Cue2=[~UNUSED3~] -OutputList2SigType2=Analog -OutputList2Cue3=[~UNUSED3~] -OutputList2SigType3=Analog -OutputList2Cue4=[~UNUSED2~] -OutputList2SigType4=Analog -OutputList2Cue5=[~UNUSED2~] -OutputList2SigType5=Analog -OutputList2Cue6=[~UNUSED2~] -OutputList2SigType6=Analog -OutputList2Cue7=[~UNUSED2~] -OutputList2SigType7=Analog -OutputList2Cue8=[~UNUSED2~] -OutputList2SigType8=Analog -OutputList2Cue9=[~UNUSED2~] -OutputList2SigType9=Analog -OutputList2Cue10=[~UNUSED2~] -OutputList2SigType10=Analog -OutputList2Cue11=[~BeginGroup~]an_act -OutputList2SigType11=Analog -OutputList2Cue12=an_act1 -OutputList2SigType12=Analog -OutputList2Cue13=an_act2 -OutputList2SigType13=Analog -OutputList2Cue14=an_act3 -OutputList2SigType14=Analog -OutputList2Cue15=an_act4 -OutputList2SigType15=Analog -OutputList2Cue16=an_act5 -OutputList2SigType16=Analog -OutputList2Cue17=an_act6 -OutputList2SigType17=Analog -OutputList2Cue18=an_act7 -OutputList2SigType18=Analog -OutputList2Cue19=an_act8 -OutputList2SigType19=Analog -OutputList2Cue20=an_act9 -OutputList2SigType20=Analog -OutputList2Cue21=an_act10 -OutputList2SigType21=Analog -OutputList2Cue22=an_act11 -OutputList2SigType22=Analog -OutputList2Cue23=an_act12 -OutputList2SigType23=Analog -OutputList2Cue24=an_act13 -OutputList2SigType24=Analog -OutputList2Cue25=an_act14 -OutputList2SigType25=Analog -OutputList2Cue26=an_act15 -OutputList2SigType26=Analog -OutputList2Cue27=an_act16 -OutputList2SigType27=Analog -OutputList2Cue28=an_act17 -OutputList2SigType28=Analog -OutputList2Cue29=an_act18 -OutputList2SigType29=Analog -OutputList2Cue30=an_act19 -OutputList2SigType30=Analog -OutputList2Cue31=an_act20 -OutputList2SigType31=Analog -OutputList2Cue32=an_act21 -OutputList2SigType32=Analog -OutputList2Cue33=an_act22 -OutputList2SigType33=Analog -OutputList2Cue34=an_act23 -OutputList2SigType34=Analog -OutputList2Cue35=an_act24 -OutputList2SigType35=Analog -OutputList2Cue36=an_act25 -OutputList2SigType36=Analog -OutputList2Cue37=an_act26 -OutputList2SigType37=Analog -OutputList2Cue38=an_act27 -OutputList2SigType38=Analog -OutputList2Cue39=an_act28 -OutputList2SigType39=Analog -OutputList2Cue40=an_act29 -OutputList2SigType40=Analog -OutputList2Cue41=an_act30 -OutputList2SigType41=Analog -OutputList2Cue42=an_act31 -OutputList2SigType42=Analog -OutputList2Cue43=an_act32 -OutputList2SigType43=Analog -OutputList2Cue44=an_act33 -OutputList2SigType44=Analog -OutputList2Cue45=an_act34 -OutputList2SigType45=Analog -OutputList2Cue46=an_act35 -OutputList2SigType46=Analog -OutputList2Cue47=an_act36 -OutputList2SigType47=Analog -OutputList2Cue48=an_act37 -OutputList2SigType48=Analog -OutputList2Cue49=an_act38 -OutputList2SigType49=Analog -OutputList2Cue50=an_act39 -OutputList2SigType50=Analog -OutputList2Cue51=an_act40 -OutputList2SigType51=Analog -OutputList2Cue52=an_act41 -OutputList2SigType52=Analog -OutputList2Cue53=an_act42 -OutputList2SigType53=Analog -OutputList2Cue54=an_act43 -OutputList2SigType54=Analog -OutputList2Cue55=an_act44 -OutputList2SigType55=Analog -OutputList2Cue56=an_act45 -OutputList2SigType56=Analog -OutputList2Cue57=an_act46 -OutputList2SigType57=Analog -OutputList2Cue58=an_act47 -OutputList2SigType58=Analog -OutputList2Cue59=an_act48 -OutputList2SigType59=Analog -OutputList2Cue60=an_act49 -OutputList2SigType60=Analog -OutputList2Cue61=an_act50 -OutputList2SigType61=Analog -OutputList2Cue62=an_act51 -OutputList2SigType62=Analog -OutputList2Cue63=an_act52 -OutputList2SigType63=Analog -OutputList2Cue64=an_act53 -OutputList2SigType64=Analog -OutputList2Cue65=an_act54 -OutputList2SigType65=Analog -OutputList2Cue66=an_act55 -OutputList2SigType66=Analog -OutputList2Cue67=an_act56 -OutputList2SigType67=Analog -OutputList2Cue68=an_act57 -OutputList2SigType68=Analog -OutputList2Cue69=an_act58 -OutputList2SigType69=Analog -OutputList2Cue70=an_act59 -OutputList2SigType70=Analog -OutputList2Cue71=an_act60 -OutputList2SigType71=Analog -OutputList2Cue72=[~EndGroup~]an_act -OutputList2SigType72=Analog -InputList3Cue1=[~UNUSED2~] -InputList3SigType1=Serial -InputList3Cue2=[~UNUSED2~] -InputList3SigType2=Serial -InputList3Cue3=[~UNUSED2~] -InputList3SigType3=Serial -InputList3Cue4=[~UNUSED2~] -InputList3SigType4=Serial -InputList3Cue5=[~UNUSED2~] -InputList3SigType5=Serial -InputList3Cue6=[~UNUSED2~] -InputList3SigType6=Serial -InputList3Cue7=[~UNUSED2~] -InputList3SigType7=Serial -InputList3Cue8=[~UNUSED2~] -InputList3SigType8=Serial -InputList3Cue9=[~UNUSED2~] -InputList3SigType9=Serial -InputList3Cue10=[~UNUSED2~] -InputList3SigType10=Serial -InputList3Cue11=[~BeginGroup~]text-o -InputList3SigType11=Serial -InputList3Cue12=text-o1 -InputList3SigType12=Serial -InputList3Cue13=text-o2 -InputList3SigType13=Serial -InputList3Cue14=text-o3 -InputList3SigType14=Serial -InputList3Cue15=text-o4 -InputList3SigType15=Serial -InputList3Cue16=text-o5 -InputList3SigType16=Serial -InputList3Cue17=text-o6 -InputList3SigType17=Serial -InputList3Cue18=text-o7 -InputList3SigType18=Serial -InputList3Cue19=text-o8 -InputList3SigType19=Serial -InputList3Cue20=text-o9 -InputList3SigType20=Serial -InputList3Cue21=text-o10 -InputList3SigType21=Serial -InputList3Cue22=text-o11 -InputList3SigType22=Serial -InputList3Cue23=text-o12 -InputList3SigType23=Serial -InputList3Cue24=text-o13 -InputList3SigType24=Serial -InputList3Cue25=text-o14 -InputList3SigType25=Serial -InputList3Cue26=text-o15 -InputList3SigType26=Serial -InputList3Cue27=text-o16 -InputList3SigType27=Serial -InputList3Cue28=text-o17 -InputList3SigType28=Serial -InputList3Cue29=text-o18 -InputList3SigType29=Serial -InputList3Cue30=text-o19 -InputList3SigType30=Serial -InputList3Cue31=text-o20 -InputList3SigType31=Serial -InputList3Cue32=text-o21 -InputList3SigType32=Serial -InputList3Cue33=text-o22 -InputList3SigType33=Serial -InputList3Cue34=text-o23 -InputList3SigType34=Serial -InputList3Cue35=text-o24 -InputList3SigType35=Serial -InputList3Cue36=text-o25 -InputList3SigType36=Serial -InputList3Cue37=text-o26 -InputList3SigType37=Serial -InputList3Cue38=text-o27 -InputList3SigType38=Serial -InputList3Cue39=text-o28 -InputList3SigType39=Serial -InputList3Cue40=text-o29 -InputList3SigType40=Serial -InputList3Cue41=text-o30 -InputList3SigType41=Serial -InputList3Cue42=text-o31 -InputList3SigType42=Serial -InputList3Cue43=text-o32 -InputList3SigType43=Serial -InputList3Cue44=text-o33 -InputList3SigType44=Serial -InputList3Cue45=text-o34 -InputList3SigType45=Serial -InputList3Cue46=text-o35 -InputList3SigType46=Serial -InputList3Cue47=text-o36 -InputList3SigType47=Serial -InputList3Cue48=text-o37 -InputList3SigType48=Serial -InputList3Cue49=text-o38 -InputList3SigType49=Serial -InputList3Cue50=text-o39 -InputList3SigType50=Serial -InputList3Cue51=text-o40 -InputList3SigType51=Serial -InputList3Cue52=text-o41 -InputList3SigType52=Serial -InputList3Cue53=text-o42 -InputList3SigType53=Serial -InputList3Cue54=text-o43 -InputList3SigType54=Serial -InputList3Cue55=text-o44 -InputList3SigType55=Serial -InputList3Cue56=text-o45 -InputList3SigType56=Serial -InputList3Cue57=text-o46 -InputList3SigType57=Serial -InputList3Cue58=text-o47 -InputList3SigType58=Serial -InputList3Cue59=text-o48 -InputList3SigType59=Serial -InputList3Cue60=text-o49 -InputList3SigType60=Serial -InputList3Cue61=text-o50 -InputList3SigType61=Serial -InputList3Cue62=text-o51 -InputList3SigType62=Serial -InputList3Cue63=text-o52 -InputList3SigType63=Serial -InputList3Cue64=text-o53 -InputList3SigType64=Serial -InputList3Cue65=text-o54 -InputList3SigType65=Serial -InputList3Cue66=text-o55 -InputList3SigType66=Serial -InputList3Cue67=text-o56 -InputList3SigType67=Serial -InputList3Cue68=text-o57 -InputList3SigType68=Serial -InputList3Cue69=text-o58 -InputList3SigType69=Serial -InputList3Cue70=text-o59 -InputList3SigType70=Serial -InputList3Cue71=text-o60 -InputList3SigType71=Serial -InputList3Cue72=[~EndGroup~]text-o -InputList3SigType72=Serial -OutputList3Cue1=[~UNUSED2~] -OutputList3SigType1=Serial -OutputList3Cue2=[~UNUSED2~] -OutputList3SigType2=Serial -OutputList3Cue3=[~UNUSED2~] -OutputList3SigType3=Serial -OutputList3Cue4=[~UNUSED2~] -OutputList3SigType4=Serial -OutputList3Cue5=[~UNUSED2~] -OutputList3SigType5=Serial -OutputList3Cue6=[~UNUSED2~] -OutputList3SigType6=Serial -OutputList3Cue7=[~UNUSED2~] -OutputList3SigType7=Serial -OutputList3Cue8=[~UNUSED2~] -OutputList3SigType8=Serial -OutputList3Cue9=[~UNUSED2~] -OutputList3SigType9=Serial -OutputList3Cue10=[~UNUSED2~] -OutputList3SigType10=Serial -OutputList3Cue11=[~BeginGroup~]text-i -OutputList3SigType11=Serial -OutputList3Cue12=text-i1 -OutputList3SigType12=Serial -OutputList3Cue13=text-i2 -OutputList3SigType13=Serial -OutputList3Cue14=text-i3 -OutputList3SigType14=Serial -OutputList3Cue15=text-i4 -OutputList3SigType15=Serial -OutputList3Cue16=text-i5 -OutputList3SigType16=Serial -OutputList3Cue17=text-i6 -OutputList3SigType17=Serial -OutputList3Cue18=text-i7 -OutputList3SigType18=Serial -OutputList3Cue19=text-i8 -OutputList3SigType19=Serial -OutputList3Cue20=text-i9 -OutputList3SigType20=Serial -OutputList3Cue21=text-i10 -OutputList3SigType21=Serial -OutputList3Cue22=text-i11 -OutputList3SigType22=Serial -OutputList3Cue23=text-i12 -OutputList3SigType23=Serial -OutputList3Cue24=text-i13 -OutputList3SigType24=Serial -OutputList3Cue25=text-i14 -OutputList3SigType25=Serial -OutputList3Cue26=text-i15 -OutputList3SigType26=Serial -OutputList3Cue27=text-i16 -OutputList3SigType27=Serial -OutputList3Cue28=text-i17 -OutputList3SigType28=Serial -OutputList3Cue29=text-i18 -OutputList3SigType29=Serial -OutputList3Cue30=text-i19 -OutputList3SigType30=Serial -OutputList3Cue31=text-i20 -OutputList3SigType31=Serial -OutputList3Cue32=text-i21 -OutputList3SigType32=Serial -OutputList3Cue33=text-i22 -OutputList3SigType33=Serial -OutputList3Cue34=text-i23 -OutputList3SigType34=Serial -OutputList3Cue35=text-i24 -OutputList3SigType35=Serial -OutputList3Cue36=text-i25 -OutputList3SigType36=Serial -OutputList3Cue37=text-i26 -OutputList3SigType37=Serial -OutputList3Cue38=text-i27 -OutputList3SigType38=Serial -OutputList3Cue39=text-i28 -OutputList3SigType39=Serial -OutputList3Cue40=text-i29 -OutputList3SigType40=Serial -OutputList3Cue41=text-i30 -OutputList3SigType41=Serial -OutputList3Cue42=text-i31 -OutputList3SigType42=Serial -OutputList3Cue43=text-i32 -OutputList3SigType43=Serial -OutputList3Cue44=text-i33 -OutputList3SigType44=Serial -OutputList3Cue45=text-i34 -OutputList3SigType45=Serial -OutputList3Cue46=text-i35 -OutputList3SigType46=Serial -OutputList3Cue47=text-i36 -OutputList3SigType47=Serial -OutputList3Cue48=text-i37 -OutputList3SigType48=Serial -OutputList3Cue49=text-i38 -OutputList3SigType49=Serial -OutputList3Cue50=text-i39 -OutputList3SigType50=Serial -OutputList3Cue51=text-i40 -OutputList3SigType51=Serial -OutputList3Cue52=text-i41 -OutputList3SigType52=Serial -OutputList3Cue53=text-i42 -OutputList3SigType53=Serial -OutputList3Cue54=text-i43 -OutputList3SigType54=Serial -OutputList3Cue55=text-i44 -OutputList3SigType55=Serial -OutputList3Cue56=text-i45 -OutputList3SigType56=Serial -OutputList3Cue57=text-i46 -OutputList3SigType57=Serial -OutputList3Cue58=text-i47 -OutputList3SigType58=Serial -OutputList3Cue59=text-i48 -OutputList3SigType59=Serial -OutputList3Cue60=text-i49 -OutputList3SigType60=Serial -OutputList3Cue61=text-i50 -OutputList3SigType61=Serial -OutputList3Cue62=text-i51 -OutputList3SigType62=Serial -OutputList3Cue63=text-i52 -OutputList3SigType63=Serial -OutputList3Cue64=text-i53 -OutputList3SigType64=Serial -OutputList3Cue65=text-i54 -OutputList3SigType65=Serial -OutputList3Cue66=text-i55 -OutputList3SigType66=Serial -OutputList3Cue67=text-i56 -OutputList3SigType67=Serial -OutputList3Cue68=text-i57 -OutputList3SigType68=Serial -OutputList3Cue69=text-i58 -OutputList3SigType69=Serial -OutputList3Cue70=text-i59 -OutputList3SigType70=Serial -OutputList3Cue71=text-i60 -OutputList3SigType71=Serial -OutputList3Cue72=[~EndGroup~]text-i -OutputList3SigType72=Serial -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=6 -CedH=6 -SmartObjId=3200d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=6 -Tp=1 -HD=TRUE -DV=3200d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=6 -Name=PepperDash Essentials TSW1050_[B.AV] Staging_Subpage Reference List Horizontal_3.ced -;Cedver is the version of the Smart Graphics control, not the CED file format. -;If the control definition changes, increment this. -CedVer=1 -] -;================================================================================ -[ -ObjTp=Symbol -Name=PepperDash Essentials TSW1050_[B.AV] Source Ctrl-CATV-Basic_Channel Preset List Basic.ced -Hint=Channel Preset List Basic (Smart Object ID=1806) -Code=7 -SGControlType=Subpage Reference List Vertical -SGControlName=Channel Preset List Basic -GUID=46C43CE4-6BB9-4B76-A13E-B4279202F998 -SmplCName=PepperDash Essentials TSW1050_[B.AV] Source Ctrl-CATV-Basic_Channel Preset List Basic.ced -SMWRev=4.02.20 -Expand=expand_random -HelpID=10125 -Render=8 -;Define the number of inputs, outputs and parameters -MinVariableInputs=4106 -MaxVariableInputs=4106 -MinVariableOutputs=4106 -MaxVariableOutputs=4106 -NumFixedParams=1 -MinVariableInputsList2=3 -MaxVariableInputsList2=3 -MinVariableOutputsList2=3 -MaxVariableOutputsList2=3 -MinVariableInputsList3=132 -MaxVariableInputsList3=132 -MinVariableOutputsList3=132 -MaxVariableOutputsList3=132 -InputSigType1=Digital -OutputSigType1=Digital -InputList2SigType1=Analog -OutputList2SigType1=Analog -InputList3SigType1=Serial -OutputList3SigType1=Serial - -;Define the cues, and signal types each input, output and parameter. -InputCue1=[~UNUSED3~] -InputSigType1=Digital -InputCue2=[~UNUSED2~] -InputSigType2=Digital -InputCue3=[~UNUSED2~] -InputSigType3=Digital -InputCue4=[~UNUSED2~] -InputSigType4=Digital -InputCue5=[~UNUSED2~] -InputSigType5=Digital -InputCue6=[~UNUSED2~] -InputSigType6=Digital -InputCue7=[~UNUSED2~] -InputSigType7=Digital -InputCue8=[~UNUSED2~] -InputSigType8=Digital -InputCue9=[~UNUSED2~] -InputSigType9=Digital -InputCue10=[~UNUSED2~] -InputSigType10=Digital -InputCue11=[~BeginGroup~]Enable -InputSigType11=Digital -InputCue12=Item 1 Enable -InputSigType12=Digital -InputCue13=Item 2 Enable -InputSigType13=Digital -InputCue14=Item 3 Enable -InputSigType14=Digital -InputCue15=Item 4 Enable -InputSigType15=Digital -InputCue16=Item 5 Enable -InputSigType16=Digital -InputCue17=Item 6 Enable -InputSigType17=Digital -InputCue18=Item 7 Enable -InputSigType18=Digital -InputCue19=Item 8 Enable -InputSigType19=Digital -InputCue20=Item 9 Enable -InputSigType20=Digital -InputCue21=Item 10 Enable -InputSigType21=Digital -InputCue22=Item 11 Enable -InputSigType22=Digital -InputCue23=Item 12 Enable -InputSigType23=Digital -InputCue24=Item 13 Enable -InputSigType24=Digital -InputCue25=Item 14 Enable -InputSigType25=Digital -InputCue26=Item 15 Enable -InputSigType26=Digital -InputCue27=Item 16 Enable -InputSigType27=Digital -InputCue28=Item 17 Enable -InputSigType28=Digital -InputCue29=Item 18 Enable -InputSigType29=Digital -InputCue30=Item 19 Enable -InputSigType30=Digital -InputCue31=Item 20 Enable -InputSigType31=Digital -InputCue32=Item 21 Enable -InputSigType32=Digital -InputCue33=Item 22 Enable -InputSigType33=Digital -InputCue34=Item 23 Enable -InputSigType34=Digital -InputCue35=Item 24 Enable -InputSigType35=Digital -InputCue36=Item 25 Enable -InputSigType36=Digital -InputCue37=Item 26 Enable -InputSigType37=Digital -InputCue38=Item 27 Enable -InputSigType38=Digital -InputCue39=Item 28 Enable -InputSigType39=Digital -InputCue40=Item 29 Enable -InputSigType40=Digital -InputCue41=Item 30 Enable -InputSigType41=Digital -InputCue42=[~UNUSED2~] -InputSigType42=Digital|Analog|Serial|String -InputCue2012=[~EndGroup~]Enable -InputSigType2012=Digital -InputCue2013=[~BeginGroup~]Visible -InputSigType2013=Digital -InputCue2014=Item 1 Visible -InputSigType2014=Digital -InputCue2015=Item 2 Visible -InputSigType2015=Digital -InputCue2016=Item 3 Visible -InputSigType2016=Digital -InputCue2017=Item 4 Visible -InputSigType2017=Digital -InputCue2018=Item 5 Visible -InputSigType2018=Digital -InputCue2019=Item 6 Visible -InputSigType2019=Digital -InputCue2020=Item 7 Visible -InputSigType2020=Digital -InputCue2021=Item 8 Visible -InputSigType2021=Digital -InputCue2022=Item 9 Visible -InputSigType2022=Digital -InputCue2023=Item 10 Visible -InputSigType2023=Digital -InputCue2024=Item 11 Visible -InputSigType2024=Digital -InputCue2025=Item 12 Visible -InputSigType2025=Digital -InputCue2026=Item 13 Visible -InputSigType2026=Digital -InputCue2027=Item 14 Visible -InputSigType2027=Digital -InputCue2028=Item 15 Visible -InputSigType2028=Digital -InputCue2029=Item 16 Visible -InputSigType2029=Digital -InputCue2030=Item 17 Visible -InputSigType2030=Digital -InputCue2031=Item 18 Visible -InputSigType2031=Digital -InputCue2032=Item 19 Visible -InputSigType2032=Digital -InputCue2033=Item 20 Visible -InputSigType2033=Digital -InputCue2034=Item 21 Visible -InputSigType2034=Digital -InputCue2035=Item 22 Visible -InputSigType2035=Digital -InputCue2036=Item 23 Visible -InputSigType2036=Digital -InputCue2037=Item 24 Visible -InputSigType2037=Digital -InputCue2038=Item 25 Visible -InputSigType2038=Digital -InputCue2039=Item 26 Visible -InputSigType2039=Digital -InputCue2040=Item 27 Visible -InputSigType2040=Digital -InputCue2041=Item 28 Visible -InputSigType2041=Digital -InputCue2042=Item 29 Visible -InputSigType2042=Digital -InputCue2043=Item 30 Visible -InputSigType2043=Digital -InputCue2044=[~UNUSED2~] -InputSigType2044=Digital|Analog|Serial|String -InputCue4014=[~EndGroup~]Visible -InputSigType4014=Digital -InputCue4015=[~BeginGroup~]fb -InputSigType4015=Digital -InputCue4016=fb1 -InputSigType4016=Digital -InputCue4017=fb2 -InputSigType4017=Digital -InputCue4018=fb3 -InputSigType4018=Digital -InputCue4019=fb4 -InputSigType4019=Digital -InputCue4020=fb5 -InputSigType4020=Digital -InputCue4021=fb6 -InputSigType4021=Digital -InputCue4022=fb7 -InputSigType4022=Digital -InputCue4023=fb8 -InputSigType4023=Digital -InputCue4024=fb9 -InputSigType4024=Digital -InputCue4025=fb10 -InputSigType4025=Digital -InputCue4026=fb11 -InputSigType4026=Digital -InputCue4027=fb12 -InputSigType4027=Digital -InputCue4028=fb13 -InputSigType4028=Digital -InputCue4029=fb14 -InputSigType4029=Digital -InputCue4030=fb15 -InputSigType4030=Digital -InputCue4031=fb16 -InputSigType4031=Digital -InputCue4032=fb17 -InputSigType4032=Digital -InputCue4033=fb18 -InputSigType4033=Digital -InputCue4034=fb19 -InputSigType4034=Digital -InputCue4035=fb20 -InputSigType4035=Digital -InputCue4036=fb21 -InputSigType4036=Digital -InputCue4037=fb22 -InputSigType4037=Digital -InputCue4038=fb23 -InputSigType4038=Digital -InputCue4039=fb24 -InputSigType4039=Digital -InputCue4040=fb25 -InputSigType4040=Digital -InputCue4041=fb26 -InputSigType4041=Digital -InputCue4042=fb27 -InputSigType4042=Digital -InputCue4043=fb28 -InputSigType4043=Digital -InputCue4044=fb29 -InputSigType4044=Digital -InputCue4045=fb30 -InputSigType4045=Digital -InputCue4046=fb31 -InputSigType4046=Digital -InputCue4047=fb32 -InputSigType4047=Digital -InputCue4048=fb33 -InputSigType4048=Digital -InputCue4049=fb34 -InputSigType4049=Digital -InputCue4050=fb35 -InputSigType4050=Digital -InputCue4051=fb36 -InputSigType4051=Digital -InputCue4052=fb37 -InputSigType4052=Digital -InputCue4053=fb38 -InputSigType4053=Digital -InputCue4054=fb39 -InputSigType4054=Digital -InputCue4055=fb40 -InputSigType4055=Digital -InputCue4056=fb41 -InputSigType4056=Digital -InputCue4057=fb42 -InputSigType4057=Digital -InputCue4058=fb43 -InputSigType4058=Digital -InputCue4059=fb44 -InputSigType4059=Digital -InputCue4060=fb45 -InputSigType4060=Digital -InputCue4061=fb46 -InputSigType4061=Digital -InputCue4062=fb47 -InputSigType4062=Digital -InputCue4063=fb48 -InputSigType4063=Digital -InputCue4064=fb49 -InputSigType4064=Digital -InputCue4065=fb50 -InputSigType4065=Digital -InputCue4066=fb51 -InputSigType4066=Digital -InputCue4067=fb52 -InputSigType4067=Digital -InputCue4068=fb53 -InputSigType4068=Digital -InputCue4069=fb54 -InputSigType4069=Digital -InputCue4070=fb55 -InputSigType4070=Digital -InputCue4071=fb56 -InputSigType4071=Digital -InputCue4072=fb57 -InputSigType4072=Digital -InputCue4073=fb58 -InputSigType4073=Digital -InputCue4074=fb59 -InputSigType4074=Digital -InputCue4075=fb60 -InputSigType4075=Digital -InputCue4076=fb61 -InputSigType4076=Digital -InputCue4077=fb62 -InputSigType4077=Digital -InputCue4078=fb63 -InputSigType4078=Digital -InputCue4079=fb64 -InputSigType4079=Digital -InputCue4080=fb65 -InputSigType4080=Digital -InputCue4081=fb66 -InputSigType4081=Digital -InputCue4082=fb67 -InputSigType4082=Digital -InputCue4083=fb68 -InputSigType4083=Digital -InputCue4084=fb69 -InputSigType4084=Digital -InputCue4085=fb70 -InputSigType4085=Digital -InputCue4086=fb71 -InputSigType4086=Digital -InputCue4087=fb72 -InputSigType4087=Digital -InputCue4088=fb73 -InputSigType4088=Digital -InputCue4089=fb74 -InputSigType4089=Digital -InputCue4090=fb75 -InputSigType4090=Digital -InputCue4091=fb76 -InputSigType4091=Digital -InputCue4092=fb77 -InputSigType4092=Digital -InputCue4093=fb78 -InputSigType4093=Digital -InputCue4094=fb79 -InputSigType4094=Digital -InputCue4095=fb80 -InputSigType4095=Digital -InputCue4096=fb81 -InputSigType4096=Digital -InputCue4097=fb82 -InputSigType4097=Digital -InputCue4098=fb83 -InputSigType4098=Digital -InputCue4099=fb84 -InputSigType4099=Digital -InputCue4100=fb85 -InputSigType4100=Digital -InputCue4101=fb86 -InputSigType4101=Digital -InputCue4102=fb87 -InputSigType4102=Digital -InputCue4103=fb88 -InputSigType4103=Digital -InputCue4104=fb89 -InputSigType4104=Digital -InputCue4105=fb90 -InputSigType4105=Digital -InputCue4106=[~EndGroup~]fb -InputSigType4106=Digital -OutputCue1=Is Moving -OutputSigType1=Digital -OutputCue2=[~UNUSED2~] -OutputSigType2=Digital -OutputCue3=[~UNUSED2~] -OutputSigType3=Digital -OutputCue4=[~UNUSED2~] -OutputSigType4=Digital -OutputCue5=[~UNUSED2~] -OutputSigType5=Digital -OutputCue6=[~UNUSED2~] -OutputSigType6=Digital -OutputCue7=[~UNUSED2~] -OutputSigType7=Digital -OutputCue8=[~UNUSED2~] -OutputSigType8=Digital -OutputCue9=[~UNUSED2~] -OutputSigType9=Digital -OutputCue10=[~UNUSED2~] -OutputSigType10=Digital -OutputCue11=[~BeginGroup~]Enable -OutputSigType11=Digital -OutputCue12=[~UNUSED3~] -OutputSigType12=Digital -OutputCue13=[~UNUSED3~] -OutputSigType13=Digital -OutputCue14=[~UNUSED3~] -OutputSigType14=Digital -OutputCue15=[~UNUSED3~] -OutputSigType15=Digital -OutputCue16=[~UNUSED3~] -OutputSigType16=Digital -OutputCue17=[~UNUSED3~] -OutputSigType17=Digital -OutputCue18=[~UNUSED3~] -OutputSigType18=Digital -OutputCue19=[~UNUSED3~] -OutputSigType19=Digital -OutputCue20=[~UNUSED3~] -OutputSigType20=Digital -OutputCue21=[~UNUSED3~] -OutputSigType21=Digital -OutputCue22=[~UNUSED3~] -OutputSigType22=Digital -OutputCue23=[~UNUSED3~] -OutputSigType23=Digital -OutputCue24=[~UNUSED3~] -OutputSigType24=Digital -OutputCue25=[~UNUSED3~] -OutputSigType25=Digital -OutputCue26=[~UNUSED3~] -OutputSigType26=Digital -OutputCue27=[~UNUSED3~] -OutputSigType27=Digital -OutputCue28=[~UNUSED3~] -OutputSigType28=Digital -OutputCue29=[~UNUSED3~] -OutputSigType29=Digital -OutputCue30=[~UNUSED3~] -OutputSigType30=Digital -OutputCue31=[~UNUSED3~] -OutputSigType31=Digital -OutputCue32=[~UNUSED3~] -OutputSigType32=Digital -OutputCue33=[~UNUSED3~] -OutputSigType33=Digital -OutputCue34=[~UNUSED3~] -OutputSigType34=Digital -OutputCue35=[~UNUSED3~] -OutputSigType35=Digital -OutputCue36=[~UNUSED3~] -OutputSigType36=Digital -OutputCue37=[~UNUSED3~] -OutputSigType37=Digital -OutputCue38=[~UNUSED3~] -OutputSigType38=Digital -OutputCue39=[~UNUSED3~] -OutputSigType39=Digital -OutputCue40=[~UNUSED3~] -OutputSigType40=Digital -OutputCue41=[~UNUSED3~] -OutputSigType41=Digital -OutputCue42=[~UNUSED2~] -OutputSigType42=Digital|Analog|Serial|String -OutputCue2012=[~EndGroup~]Enable -OutputSigType2012=Digital -OutputCue2013=[~BeginGroup~]Visible -OutputSigType2013=Digital -OutputCue2014=[~UNUSED3~] -OutputSigType2014=Digital -OutputCue2015=[~UNUSED3~] -OutputSigType2015=Digital -OutputCue2016=[~UNUSED3~] -OutputSigType2016=Digital -OutputCue2017=[~UNUSED3~] -OutputSigType2017=Digital -OutputCue2018=[~UNUSED3~] -OutputSigType2018=Digital -OutputCue2019=[~UNUSED3~] -OutputSigType2019=Digital -OutputCue2020=[~UNUSED3~] -OutputSigType2020=Digital -OutputCue2021=[~UNUSED3~] -OutputSigType2021=Digital -OutputCue2022=[~UNUSED3~] -OutputSigType2022=Digital -OutputCue2023=[~UNUSED3~] -OutputSigType2023=Digital -OutputCue2024=[~UNUSED3~] -OutputSigType2024=Digital -OutputCue2025=[~UNUSED3~] -OutputSigType2025=Digital -OutputCue2026=[~UNUSED3~] -OutputSigType2026=Digital -OutputCue2027=[~UNUSED3~] -OutputSigType2027=Digital -OutputCue2028=[~UNUSED3~] -OutputSigType2028=Digital -OutputCue2029=[~UNUSED3~] -OutputSigType2029=Digital -OutputCue2030=[~UNUSED3~] -OutputSigType2030=Digital -OutputCue2031=[~UNUSED3~] -OutputSigType2031=Digital -OutputCue2032=[~UNUSED3~] -OutputSigType2032=Digital -OutputCue2033=[~UNUSED3~] -OutputSigType2033=Digital -OutputCue2034=[~UNUSED3~] -OutputSigType2034=Digital -OutputCue2035=[~UNUSED3~] -OutputSigType2035=Digital -OutputCue2036=[~UNUSED3~] -OutputSigType2036=Digital -OutputCue2037=[~UNUSED3~] -OutputSigType2037=Digital -OutputCue2038=[~UNUSED3~] -OutputSigType2038=Digital -OutputCue2039=[~UNUSED3~] -OutputSigType2039=Digital -OutputCue2040=[~UNUSED3~] -OutputSigType2040=Digital -OutputCue2041=[~UNUSED3~] -OutputSigType2041=Digital -OutputCue2042=[~UNUSED3~] -OutputSigType2042=Digital -OutputCue2043=[~UNUSED3~] -OutputSigType2043=Digital -OutputCue2044=[~UNUSED2~] -OutputSigType2044=Digital|Analog|Serial|String -OutputCue4014=[~EndGroup~]Visible -OutputSigType4014=Digital -OutputCue4015=[~BeginGroup~]Press -OutputSigType4015=Digital -OutputCue4016=press1 -OutputSigType4016=Digital -OutputCue4017=press2 -OutputSigType4017=Digital -OutputCue4018=press3 -OutputSigType4018=Digital -OutputCue4019=press4 -OutputSigType4019=Digital -OutputCue4020=press5 -OutputSigType4020=Digital -OutputCue4021=press6 -OutputSigType4021=Digital -OutputCue4022=press7 -OutputSigType4022=Digital -OutputCue4023=press8 -OutputSigType4023=Digital -OutputCue4024=press9 -OutputSigType4024=Digital -OutputCue4025=press10 -OutputSigType4025=Digital -OutputCue4026=press11 -OutputSigType4026=Digital -OutputCue4027=press12 -OutputSigType4027=Digital -OutputCue4028=press13 -OutputSigType4028=Digital -OutputCue4029=press14 -OutputSigType4029=Digital -OutputCue4030=press15 -OutputSigType4030=Digital -OutputCue4031=press16 -OutputSigType4031=Digital -OutputCue4032=press17 -OutputSigType4032=Digital -OutputCue4033=press18 -OutputSigType4033=Digital -OutputCue4034=press19 -OutputSigType4034=Digital -OutputCue4035=press20 -OutputSigType4035=Digital -OutputCue4036=press21 -OutputSigType4036=Digital -OutputCue4037=press22 -OutputSigType4037=Digital -OutputCue4038=press23 -OutputSigType4038=Digital -OutputCue4039=press24 -OutputSigType4039=Digital -OutputCue4040=press25 -OutputSigType4040=Digital -OutputCue4041=press26 -OutputSigType4041=Digital -OutputCue4042=press27 -OutputSigType4042=Digital -OutputCue4043=press28 -OutputSigType4043=Digital -OutputCue4044=press29 -OutputSigType4044=Digital -OutputCue4045=press30 -OutputSigType4045=Digital -OutputCue4046=press31 -OutputSigType4046=Digital -OutputCue4047=press32 -OutputSigType4047=Digital -OutputCue4048=press33 -OutputSigType4048=Digital -OutputCue4049=press34 -OutputSigType4049=Digital -OutputCue4050=press35 -OutputSigType4050=Digital -OutputCue4051=press36 -OutputSigType4051=Digital -OutputCue4052=press37 -OutputSigType4052=Digital -OutputCue4053=press38 -OutputSigType4053=Digital -OutputCue4054=press39 -OutputSigType4054=Digital -OutputCue4055=press40 -OutputSigType4055=Digital -OutputCue4056=press41 -OutputSigType4056=Digital -OutputCue4057=press42 -OutputSigType4057=Digital -OutputCue4058=press43 -OutputSigType4058=Digital -OutputCue4059=press44 -OutputSigType4059=Digital -OutputCue4060=press45 -OutputSigType4060=Digital -OutputCue4061=press46 -OutputSigType4061=Digital -OutputCue4062=press47 -OutputSigType4062=Digital -OutputCue4063=press48 -OutputSigType4063=Digital -OutputCue4064=press49 -OutputSigType4064=Digital -OutputCue4065=press50 -OutputSigType4065=Digital -OutputCue4066=press51 -OutputSigType4066=Digital -OutputCue4067=press52 -OutputSigType4067=Digital -OutputCue4068=press53 -OutputSigType4068=Digital -OutputCue4069=press54 -OutputSigType4069=Digital -OutputCue4070=press55 -OutputSigType4070=Digital -OutputCue4071=press56 -OutputSigType4071=Digital -OutputCue4072=press57 -OutputSigType4072=Digital -OutputCue4073=press58 -OutputSigType4073=Digital -OutputCue4074=press59 -OutputSigType4074=Digital -OutputCue4075=press60 -OutputSigType4075=Digital -OutputCue4076=press61 -OutputSigType4076=Digital -OutputCue4077=press62 -OutputSigType4077=Digital -OutputCue4078=press63 -OutputSigType4078=Digital -OutputCue4079=press64 -OutputSigType4079=Digital -OutputCue4080=press65 -OutputSigType4080=Digital -OutputCue4081=press66 -OutputSigType4081=Digital -OutputCue4082=press67 -OutputSigType4082=Digital -OutputCue4083=press68 -OutputSigType4083=Digital -OutputCue4084=press69 -OutputSigType4084=Digital -OutputCue4085=press70 -OutputSigType4085=Digital -OutputCue4086=press71 -OutputSigType4086=Digital -OutputCue4087=press72 -OutputSigType4087=Digital -OutputCue4088=press73 -OutputSigType4088=Digital -OutputCue4089=press74 -OutputSigType4089=Digital -OutputCue4090=press75 -OutputSigType4090=Digital -OutputCue4091=press76 -OutputSigType4091=Digital -OutputCue4092=press77 -OutputSigType4092=Digital -OutputCue4093=press78 -OutputSigType4093=Digital -OutputCue4094=press79 -OutputSigType4094=Digital -OutputCue4095=press80 -OutputSigType4095=Digital -OutputCue4096=press81 -OutputSigType4096=Digital -OutputCue4097=press82 -OutputSigType4097=Digital -OutputCue4098=press83 -OutputSigType4098=Digital -OutputCue4099=press84 -OutputSigType4099=Digital -OutputCue4100=press85 -OutputSigType4100=Digital -OutputCue4101=press86 -OutputSigType4101=Digital -OutputCue4102=press87 -OutputSigType4102=Digital -OutputCue4103=press88 -OutputSigType4103=Digital -OutputCue4104=press89 -OutputSigType4104=Digital -OutputCue4105=press90 -OutputSigType4105=Digital -OutputCue4106=[~EndGroup~]Press -OutputSigType4106=Digital -InputList2Cue1=[~UNUSED3~] -InputList2SigType1=Analog -InputList2Cue2=Scroll To Item -InputList2SigType2=Analog -InputList2Cue3=Set Number of Items -InputList2SigType3=Analog -OutputList2Cue1=Item Clicked -OutputList2SigType1=Analog -OutputList2Cue2=[~UNUSED3~] -OutputList2SigType2=Analog -OutputList2Cue3=[~UNUSED3~] -OutputList2SigType3=Analog -InputList3Cue1=[~UNUSED2~] -InputList3SigType1=Serial -InputList3Cue2=[~UNUSED2~] -InputList3SigType2=Serial -InputList3Cue3=[~UNUSED2~] -InputList3SigType3=Serial -InputList3Cue4=[~UNUSED2~] -InputList3SigType4=Serial -InputList3Cue5=[~UNUSED2~] -InputList3SigType5=Serial -InputList3Cue6=[~UNUSED2~] -InputList3SigType6=Serial -InputList3Cue7=[~UNUSED2~] -InputList3SigType7=Serial -InputList3Cue8=[~UNUSED2~] -InputList3SigType8=Serial -InputList3Cue9=[~UNUSED2~] -InputList3SigType9=Serial -InputList3Cue10=[~UNUSED2~] -InputList3SigType10=Serial -InputList3Cue11=[~BeginGroup~]text-o -InputList3SigType11=Serial -InputList3Cue12=text-o1 -InputList3SigType12=Serial -InputList3Cue13=text-o2 -InputList3SigType13=Serial -InputList3Cue14=text-o3 -InputList3SigType14=Serial -InputList3Cue15=text-o4 -InputList3SigType15=Serial -InputList3Cue16=text-o5 -InputList3SigType16=Serial -InputList3Cue17=text-o6 -InputList3SigType17=Serial -InputList3Cue18=text-o7 -InputList3SigType18=Serial -InputList3Cue19=text-o8 -InputList3SigType19=Serial -InputList3Cue20=text-o9 -InputList3SigType20=Serial -InputList3Cue21=text-o10 -InputList3SigType21=Serial -InputList3Cue22=text-o11 -InputList3SigType22=Serial -InputList3Cue23=text-o12 -InputList3SigType23=Serial -InputList3Cue24=text-o13 -InputList3SigType24=Serial -InputList3Cue25=text-o14 -InputList3SigType25=Serial -InputList3Cue26=text-o15 -InputList3SigType26=Serial -InputList3Cue27=text-o16 -InputList3SigType27=Serial -InputList3Cue28=text-o17 -InputList3SigType28=Serial -InputList3Cue29=text-o18 -InputList3SigType29=Serial -InputList3Cue30=text-o19 -InputList3SigType30=Serial -InputList3Cue31=text-o20 -InputList3SigType31=Serial -InputList3Cue32=text-o21 -InputList3SigType32=Serial -InputList3Cue33=text-o22 -InputList3SigType33=Serial -InputList3Cue34=text-o23 -InputList3SigType34=Serial -InputList3Cue35=text-o24 -InputList3SigType35=Serial -InputList3Cue36=text-o25 -InputList3SigType36=Serial -InputList3Cue37=text-o26 -InputList3SigType37=Serial -InputList3Cue38=text-o27 -InputList3SigType38=Serial -InputList3Cue39=text-o28 -InputList3SigType39=Serial -InputList3Cue40=text-o29 -InputList3SigType40=Serial -InputList3Cue41=text-o30 -InputList3SigType41=Serial -InputList3Cue42=text-o31 -InputList3SigType42=Serial -InputList3Cue43=text-o32 -InputList3SigType43=Serial -InputList3Cue44=text-o33 -InputList3SigType44=Serial -InputList3Cue45=text-o34 -InputList3SigType45=Serial -InputList3Cue46=text-o35 -InputList3SigType46=Serial -InputList3Cue47=text-o36 -InputList3SigType47=Serial -InputList3Cue48=text-o37 -InputList3SigType48=Serial -InputList3Cue49=text-o38 -InputList3SigType49=Serial -InputList3Cue50=text-o39 -InputList3SigType50=Serial -InputList3Cue51=text-o40 -InputList3SigType51=Serial -InputList3Cue52=text-o41 -InputList3SigType52=Serial -InputList3Cue53=text-o42 -InputList3SigType53=Serial -InputList3Cue54=text-o43 -InputList3SigType54=Serial -InputList3Cue55=text-o44 -InputList3SigType55=Serial -InputList3Cue56=text-o45 -InputList3SigType56=Serial -InputList3Cue57=text-o46 -InputList3SigType57=Serial -InputList3Cue58=text-o47 -InputList3SigType58=Serial -InputList3Cue59=text-o48 -InputList3SigType59=Serial -InputList3Cue60=text-o49 -InputList3SigType60=Serial -InputList3Cue61=text-o50 -InputList3SigType61=Serial -InputList3Cue62=text-o51 -InputList3SigType62=Serial -InputList3Cue63=text-o52 -InputList3SigType63=Serial -InputList3Cue64=text-o53 -InputList3SigType64=Serial -InputList3Cue65=text-o54 -InputList3SigType65=Serial -InputList3Cue66=text-o55 -InputList3SigType66=Serial -InputList3Cue67=text-o56 -InputList3SigType67=Serial -InputList3Cue68=text-o57 -InputList3SigType68=Serial -InputList3Cue69=text-o58 -InputList3SigType69=Serial -InputList3Cue70=text-o59 -InputList3SigType70=Serial -InputList3Cue71=text-o60 -InputList3SigType71=Serial -InputList3Cue72=text-o61 -InputList3SigType72=Serial -InputList3Cue73=text-o62 -InputList3SigType73=Serial -InputList3Cue74=text-o63 -InputList3SigType74=Serial -InputList3Cue75=text-o64 -InputList3SigType75=Serial -InputList3Cue76=text-o65 -InputList3SigType76=Serial -InputList3Cue77=text-o66 -InputList3SigType77=Serial -InputList3Cue78=text-o67 -InputList3SigType78=Serial -InputList3Cue79=text-o68 -InputList3SigType79=Serial -InputList3Cue80=text-o69 -InputList3SigType80=Serial -InputList3Cue81=text-o70 -InputList3SigType81=Serial -InputList3Cue82=text-o71 -InputList3SigType82=Serial -InputList3Cue83=text-o72 -InputList3SigType83=Serial -InputList3Cue84=text-o73 -InputList3SigType84=Serial -InputList3Cue85=text-o74 -InputList3SigType85=Serial -InputList3Cue86=text-o75 -InputList3SigType86=Serial -InputList3Cue87=text-o76 -InputList3SigType87=Serial -InputList3Cue88=text-o77 -InputList3SigType88=Serial -InputList3Cue89=text-o78 -InputList3SigType89=Serial -InputList3Cue90=text-o79 -InputList3SigType90=Serial -InputList3Cue91=text-o80 -InputList3SigType91=Serial -InputList3Cue92=text-o81 -InputList3SigType92=Serial -InputList3Cue93=text-o82 -InputList3SigType93=Serial -InputList3Cue94=text-o83 -InputList3SigType94=Serial -InputList3Cue95=text-o84 -InputList3SigType95=Serial -InputList3Cue96=text-o85 -InputList3SigType96=Serial -InputList3Cue97=text-o86 -InputList3SigType97=Serial -InputList3Cue98=text-o87 -InputList3SigType98=Serial -InputList3Cue99=text-o88 -InputList3SigType99=Serial -InputList3Cue100=text-o89 -InputList3SigType100=Serial -InputList3Cue101=text-o90 -InputList3SigType101=Serial -InputList3Cue102=text-o91 -InputList3SigType102=Serial -InputList3Cue103=text-o92 -InputList3SigType103=Serial -InputList3Cue104=text-o93 -InputList3SigType104=Serial -InputList3Cue105=text-o94 -InputList3SigType105=Serial -InputList3Cue106=text-o95 -InputList3SigType106=Serial -InputList3Cue107=text-o96 -InputList3SigType107=Serial -InputList3Cue108=text-o97 -InputList3SigType108=Serial -InputList3Cue109=text-o98 -InputList3SigType109=Serial -InputList3Cue110=text-o99 -InputList3SigType110=Serial -InputList3Cue111=text-o100 -InputList3SigType111=Serial -InputList3Cue112=text-o101 -InputList3SigType112=Serial -InputList3Cue113=text-o102 -InputList3SigType113=Serial -InputList3Cue114=text-o103 -InputList3SigType114=Serial -InputList3Cue115=text-o104 -InputList3SigType115=Serial -InputList3Cue116=text-o105 -InputList3SigType116=Serial -InputList3Cue117=text-o106 -InputList3SigType117=Serial -InputList3Cue118=text-o107 -InputList3SigType118=Serial -InputList3Cue119=text-o108 -InputList3SigType119=Serial -InputList3Cue120=text-o109 -InputList3SigType120=Serial -InputList3Cue121=text-o110 -InputList3SigType121=Serial -InputList3Cue122=text-o111 -InputList3SigType122=Serial -InputList3Cue123=text-o112 -InputList3SigType123=Serial -InputList3Cue124=text-o113 -InputList3SigType124=Serial -InputList3Cue125=text-o114 -InputList3SigType125=Serial -InputList3Cue126=text-o115 -InputList3SigType126=Serial -InputList3Cue127=text-o116 -InputList3SigType127=Serial -InputList3Cue128=text-o117 -InputList3SigType128=Serial -InputList3Cue129=text-o118 -InputList3SigType129=Serial -InputList3Cue130=text-o119 -InputList3SigType130=Serial -InputList3Cue131=text-o120 -InputList3SigType131=Serial -InputList3Cue132=[~EndGroup~]text-o -InputList3SigType132=Serial -OutputList3Cue1=[~UNUSED2~] -OutputList3SigType1=Serial -OutputList3Cue2=[~UNUSED2~] -OutputList3SigType2=Serial -OutputList3Cue3=[~UNUSED2~] -OutputList3SigType3=Serial -OutputList3Cue4=[~UNUSED2~] -OutputList3SigType4=Serial -OutputList3Cue5=[~UNUSED2~] -OutputList3SigType5=Serial -OutputList3Cue6=[~UNUSED2~] -OutputList3SigType6=Serial -OutputList3Cue7=[~UNUSED2~] -OutputList3SigType7=Serial -OutputList3Cue8=[~UNUSED2~] -OutputList3SigType8=Serial -OutputList3Cue9=[~UNUSED2~] -OutputList3SigType9=Serial -OutputList3Cue10=[~UNUSED2~] -OutputList3SigType10=Serial -OutputList3Cue11=[~BeginGroup~]text-i -OutputList3SigType11=Serial -OutputList3Cue12=text-i1 -OutputList3SigType12=Serial -OutputList3Cue13=text-i2 -OutputList3SigType13=Serial -OutputList3Cue14=text-i3 -OutputList3SigType14=Serial -OutputList3Cue15=text-i4 -OutputList3SigType15=Serial -OutputList3Cue16=text-i5 -OutputList3SigType16=Serial -OutputList3Cue17=text-i6 -OutputList3SigType17=Serial -OutputList3Cue18=text-i7 -OutputList3SigType18=Serial -OutputList3Cue19=text-i8 -OutputList3SigType19=Serial -OutputList3Cue20=text-i9 -OutputList3SigType20=Serial -OutputList3Cue21=text-i10 -OutputList3SigType21=Serial -OutputList3Cue22=text-i11 -OutputList3SigType22=Serial -OutputList3Cue23=text-i12 -OutputList3SigType23=Serial -OutputList3Cue24=text-i13 -OutputList3SigType24=Serial -OutputList3Cue25=text-i14 -OutputList3SigType25=Serial -OutputList3Cue26=text-i15 -OutputList3SigType26=Serial -OutputList3Cue27=text-i16 -OutputList3SigType27=Serial -OutputList3Cue28=text-i17 -OutputList3SigType28=Serial -OutputList3Cue29=text-i18 -OutputList3SigType29=Serial -OutputList3Cue30=text-i19 -OutputList3SigType30=Serial -OutputList3Cue31=text-i20 -OutputList3SigType31=Serial -OutputList3Cue32=text-i21 -OutputList3SigType32=Serial -OutputList3Cue33=text-i22 -OutputList3SigType33=Serial -OutputList3Cue34=text-i23 -OutputList3SigType34=Serial -OutputList3Cue35=text-i24 -OutputList3SigType35=Serial -OutputList3Cue36=text-i25 -OutputList3SigType36=Serial -OutputList3Cue37=text-i26 -OutputList3SigType37=Serial -OutputList3Cue38=text-i27 -OutputList3SigType38=Serial -OutputList3Cue39=text-i28 -OutputList3SigType39=Serial -OutputList3Cue40=text-i29 -OutputList3SigType40=Serial -OutputList3Cue41=text-i30 -OutputList3SigType41=Serial -OutputList3Cue42=text-i31 -OutputList3SigType42=Serial -OutputList3Cue43=text-i32 -OutputList3SigType43=Serial -OutputList3Cue44=text-i33 -OutputList3SigType44=Serial -OutputList3Cue45=text-i34 -OutputList3SigType45=Serial -OutputList3Cue46=text-i35 -OutputList3SigType46=Serial -OutputList3Cue47=text-i36 -OutputList3SigType47=Serial -OutputList3Cue48=text-i37 -OutputList3SigType48=Serial -OutputList3Cue49=text-i38 -OutputList3SigType49=Serial -OutputList3Cue50=text-i39 -OutputList3SigType50=Serial -OutputList3Cue51=text-i40 -OutputList3SigType51=Serial -OutputList3Cue52=text-i41 -OutputList3SigType52=Serial -OutputList3Cue53=text-i42 -OutputList3SigType53=Serial -OutputList3Cue54=text-i43 -OutputList3SigType54=Serial -OutputList3Cue55=text-i44 -OutputList3SigType55=Serial -OutputList3Cue56=text-i45 -OutputList3SigType56=Serial -OutputList3Cue57=text-i46 -OutputList3SigType57=Serial -OutputList3Cue58=text-i47 -OutputList3SigType58=Serial -OutputList3Cue59=text-i48 -OutputList3SigType59=Serial -OutputList3Cue60=text-i49 -OutputList3SigType60=Serial -OutputList3Cue61=text-i50 -OutputList3SigType61=Serial -OutputList3Cue62=text-i51 -OutputList3SigType62=Serial -OutputList3Cue63=text-i52 -OutputList3SigType63=Serial -OutputList3Cue64=text-i53 -OutputList3SigType64=Serial -OutputList3Cue65=text-i54 -OutputList3SigType65=Serial -OutputList3Cue66=text-i55 -OutputList3SigType66=Serial -OutputList3Cue67=text-i56 -OutputList3SigType67=Serial -OutputList3Cue68=text-i57 -OutputList3SigType68=Serial -OutputList3Cue69=text-i58 -OutputList3SigType69=Serial -OutputList3Cue70=text-i59 -OutputList3SigType70=Serial -OutputList3Cue71=text-i60 -OutputList3SigType71=Serial -OutputList3Cue72=text-i61 -OutputList3SigType72=Serial -OutputList3Cue73=text-i62 -OutputList3SigType73=Serial -OutputList3Cue74=text-i63 -OutputList3SigType74=Serial -OutputList3Cue75=text-i64 -OutputList3SigType75=Serial -OutputList3Cue76=text-i65 -OutputList3SigType76=Serial -OutputList3Cue77=text-i66 -OutputList3SigType77=Serial -OutputList3Cue78=text-i67 -OutputList3SigType78=Serial -OutputList3Cue79=text-i68 -OutputList3SigType79=Serial -OutputList3Cue80=text-i69 -OutputList3SigType80=Serial -OutputList3Cue81=text-i70 -OutputList3SigType81=Serial -OutputList3Cue82=text-i71 -OutputList3SigType82=Serial -OutputList3Cue83=text-i72 -OutputList3SigType83=Serial -OutputList3Cue84=text-i73 -OutputList3SigType84=Serial -OutputList3Cue85=text-i74 -OutputList3SigType85=Serial -OutputList3Cue86=text-i75 -OutputList3SigType86=Serial -OutputList3Cue87=text-i76 -OutputList3SigType87=Serial -OutputList3Cue88=text-i77 -OutputList3SigType88=Serial -OutputList3Cue89=text-i78 -OutputList3SigType89=Serial -OutputList3Cue90=text-i79 -OutputList3SigType90=Serial -OutputList3Cue91=text-i80 -OutputList3SigType91=Serial -OutputList3Cue92=text-i81 -OutputList3SigType92=Serial -OutputList3Cue93=text-i82 -OutputList3SigType93=Serial -OutputList3Cue94=text-i83 -OutputList3SigType94=Serial -OutputList3Cue95=text-i84 -OutputList3SigType95=Serial -OutputList3Cue96=text-i85 -OutputList3SigType96=Serial -OutputList3Cue97=text-i86 -OutputList3SigType97=Serial -OutputList3Cue98=text-i87 -OutputList3SigType98=Serial -OutputList3Cue99=text-i88 -OutputList3SigType99=Serial -OutputList3Cue100=text-i89 -OutputList3SigType100=Serial -OutputList3Cue101=text-i90 -OutputList3SigType101=Serial -OutputList3Cue102=text-i91 -OutputList3SigType102=Serial -OutputList3Cue103=text-i92 -OutputList3SigType103=Serial -OutputList3Cue104=text-i93 -OutputList3SigType104=Serial -OutputList3Cue105=text-i94 -OutputList3SigType105=Serial -OutputList3Cue106=text-i95 -OutputList3SigType106=Serial -OutputList3Cue107=text-i96 -OutputList3SigType107=Serial -OutputList3Cue108=text-i97 -OutputList3SigType108=Serial -OutputList3Cue109=text-i98 -OutputList3SigType109=Serial -OutputList3Cue110=text-i99 -OutputList3SigType110=Serial -OutputList3Cue111=text-i100 -OutputList3SigType111=Serial -OutputList3Cue112=text-i101 -OutputList3SigType112=Serial -OutputList3Cue113=text-i102 -OutputList3SigType113=Serial -OutputList3Cue114=text-i103 -OutputList3SigType114=Serial -OutputList3Cue115=text-i104 -OutputList3SigType115=Serial -OutputList3Cue116=text-i105 -OutputList3SigType116=Serial -OutputList3Cue117=text-i106 -OutputList3SigType117=Serial -OutputList3Cue118=text-i107 -OutputList3SigType118=Serial -OutputList3Cue119=text-i108 -OutputList3SigType119=Serial -OutputList3Cue120=text-i109 -OutputList3SigType120=Serial -OutputList3Cue121=text-i110 -OutputList3SigType121=Serial -OutputList3Cue122=text-i111 -OutputList3SigType122=Serial -OutputList3Cue123=text-i112 -OutputList3SigType123=Serial -OutputList3Cue124=text-i113 -OutputList3SigType124=Serial -OutputList3Cue125=text-i114 -OutputList3SigType125=Serial -OutputList3Cue126=text-i115 -OutputList3SigType126=Serial -OutputList3Cue127=text-i116 -OutputList3SigType127=Serial -OutputList3Cue128=text-i117 -OutputList3SigType128=Serial -OutputList3Cue129=text-i118 -OutputList3SigType129=Serial -OutputList3Cue130=text-i119 -OutputList3SigType130=Serial -OutputList3Cue131=text-i120 -OutputList3SigType131=Serial -OutputList3Cue132=[~EndGroup~]text-i -OutputList3SigType132=Serial -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=7 -CedH=7 -SmartObjId=1806d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=7 -Tp=1 -HD=TRUE -DV=1806d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=7 -Name=PepperDash Essentials TSW1050_[B.AV] Source Ctrl-CATV-Basic_Channel Preset List Basic.ced -;Cedver is the version of the Smart Graphics control, not the CED file format. -;If the control definition changes, increment this. -CedVer=1 -] -;================================================================================ -[ -ObjTp=Symbol -Name=PepperDash Essentials TSW1050_[A.Global] Footer SRL_Modes Bottom Bar SRL.ced -Hint=Modes Bottom Bar SRL (Smart Object ID=15021) -Code=8 -SGControlType=Subpage Reference List Horizontal -SGControlName=Modes Bottom Bar SRL -GUID=812FF0C4-486D-4ABC-90FA-405F19104323 -SmplCName=PepperDash Essentials TSW1050_[A.Global] Footer SRL_Modes Bottom Bar SRL.ced -SMWRev=4.02.20 -Expand=expand_random -HelpID=10124 -Render=8 -;Define the number of inputs, outputs and parameters -MinVariableInputs=4031 -MaxVariableInputs=4031 -MinVariableOutputs=4031 -MaxVariableOutputs=4031 -NumFixedParams=1 -MinVariableInputsList2=27 -MaxVariableInputsList2=27 -MinVariableOutputsList2=27 -MaxVariableOutputsList2=27 -MinVariableInputsList3=27 -MaxVariableInputsList3=27 -MinVariableOutputsList3=27 -MaxVariableOutputsList3=27 -InputSigType1=Digital -OutputSigType1=Digital -InputList2SigType1=Analog -OutputList2SigType1=Analog -InputList3SigType1=Serial -OutputList3SigType1=Serial - -;Define the cues, and signal types each input, output and parameter. -InputCue1=[~UNUSED3~] -InputSigType1=Digital -InputCue2=[~UNUSED2~] -InputSigType2=Digital -InputCue3=[~UNUSED2~] -InputSigType3=Digital -InputCue4=[~UNUSED2~] -InputSigType4=Digital -InputCue5=[~UNUSED2~] -InputSigType5=Digital -InputCue6=[~UNUSED2~] -InputSigType6=Digital -InputCue7=[~UNUSED2~] -InputSigType7=Digital -InputCue8=[~UNUSED2~] -InputSigType8=Digital -InputCue9=[~UNUSED2~] -InputSigType9=Digital -InputCue10=[~UNUSED2~] -InputSigType10=Digital -InputCue11=[~BeginGroup~]Enable -InputSigType11=Digital -InputCue12=Item 1 Enable -InputSigType12=Digital -InputCue13=Item 2 Enable -InputSigType13=Digital -InputCue14=Item 3 Enable -InputSigType14=Digital -InputCue15=Item 4 Enable -InputSigType15=Digital -InputCue16=Item 5 Enable -InputSigType16=Digital -InputCue17=[~UNUSED2~] -InputSigType17=Digital|Analog|Serial|String -InputCue2012=[~EndGroup~]Enable -InputSigType2012=Digital -InputCue2013=[~BeginGroup~]Visible -InputSigType2013=Digital -InputCue2014=Item 1 Visible -InputSigType2014=Digital -InputCue2015=Item 2 Visible -InputSigType2015=Digital -InputCue2016=Item 3 Visible -InputSigType2016=Digital -InputCue2017=Item 4 Visible -InputSigType2017=Digital -InputCue2018=Item 5 Visible -InputSigType2018=Digital -InputCue2019=[~UNUSED2~] -InputSigType2019=Digital|Analog|Serial|String -InputCue4014=[~EndGroup~]Visible -InputSigType4014=Digital -InputCue4015=[~BeginGroup~]fb -InputSigType4015=Digital -InputCue4016=fb1 -InputSigType4016=Digital -InputCue4017=fb2 -InputSigType4017=Digital -InputCue4018=fb3 -InputSigType4018=Digital -InputCue4019=fb4 -InputSigType4019=Digital -InputCue4020=fb5 -InputSigType4020=Digital -InputCue4021=fb6 -InputSigType4021=Digital -InputCue4022=fb7 -InputSigType4022=Digital -InputCue4023=fb8 -InputSigType4023=Digital -InputCue4024=fb9 -InputSigType4024=Digital -InputCue4025=fb10 -InputSigType4025=Digital -InputCue4026=fb11 -InputSigType4026=Digital -InputCue4027=fb12 -InputSigType4027=Digital -InputCue4028=fb13 -InputSigType4028=Digital -InputCue4029=fb14 -InputSigType4029=Digital -InputCue4030=fb15 -InputSigType4030=Digital -InputCue4031=[~EndGroup~]fb -InputSigType4031=Digital -OutputCue1=Is Moving -OutputSigType1=Digital -OutputCue2=[~UNUSED2~] -OutputSigType2=Digital -OutputCue3=[~UNUSED2~] -OutputSigType3=Digital -OutputCue4=[~UNUSED2~] -OutputSigType4=Digital -OutputCue5=[~UNUSED2~] -OutputSigType5=Digital -OutputCue6=[~UNUSED2~] -OutputSigType6=Digital -OutputCue7=[~UNUSED2~] -OutputSigType7=Digital -OutputCue8=[~UNUSED2~] -OutputSigType8=Digital -OutputCue9=[~UNUSED2~] -OutputSigType9=Digital -OutputCue10=[~UNUSED2~] -OutputSigType10=Digital -OutputCue11=[~BeginGroup~]Enable -OutputSigType11=Digital -OutputCue12=[~UNUSED3~] -OutputSigType12=Digital -OutputCue13=[~UNUSED3~] -OutputSigType13=Digital -OutputCue14=[~UNUSED3~] -OutputSigType14=Digital -OutputCue15=[~UNUSED3~] -OutputSigType15=Digital -OutputCue16=[~UNUSED3~] -OutputSigType16=Digital -OutputCue17=[~UNUSED2~] -OutputSigType17=Digital|Analog|Serial|String -OutputCue2012=[~EndGroup~]Enable -OutputSigType2012=Digital -OutputCue2013=[~BeginGroup~]Visible -OutputSigType2013=Digital -OutputCue2014=[~UNUSED3~] -OutputSigType2014=Digital -OutputCue2015=[~UNUSED3~] -OutputSigType2015=Digital -OutputCue2016=[~UNUSED3~] -OutputSigType2016=Digital -OutputCue2017=[~UNUSED3~] -OutputSigType2017=Digital -OutputCue2018=[~UNUSED3~] -OutputSigType2018=Digital -OutputCue2019=[~UNUSED2~] -OutputSigType2019=Digital|Analog|Serial|String -OutputCue4014=[~EndGroup~]Visible -OutputSigType4014=Digital -OutputCue4015=[~BeginGroup~]Press -OutputSigType4015=Digital -OutputCue4016=press1 -OutputSigType4016=Digital -OutputCue4017=press2 -OutputSigType4017=Digital -OutputCue4018=press3 -OutputSigType4018=Digital -OutputCue4019=press4 -OutputSigType4019=Digital -OutputCue4020=press5 -OutputSigType4020=Digital -OutputCue4021=press6 -OutputSigType4021=Digital -OutputCue4022=press7 -OutputSigType4022=Digital -OutputCue4023=press8 -OutputSigType4023=Digital -OutputCue4024=press9 -OutputSigType4024=Digital -OutputCue4025=press10 -OutputSigType4025=Digital -OutputCue4026=press11 -OutputSigType4026=Digital -OutputCue4027=press12 -OutputSigType4027=Digital -OutputCue4028=press13 -OutputSigType4028=Digital -OutputCue4029=press14 -OutputSigType4029=Digital -OutputCue4030=press15 -OutputSigType4030=Digital -OutputCue4031=[~EndGroup~]Press -OutputSigType4031=Digital -InputList2Cue1=[~UNUSED3~] -InputList2SigType1=Analog -InputList2Cue2=Scroll To Item -InputList2SigType2=Analog -InputList2Cue3=Set Number of Items -InputList2SigType3=Analog -InputList2Cue4=[~UNUSED2~] -InputList2SigType4=Analog -InputList2Cue5=[~UNUSED2~] -InputList2SigType5=Analog -InputList2Cue6=[~UNUSED2~] -InputList2SigType6=Analog -InputList2Cue7=[~UNUSED2~] -InputList2SigType7=Analog -InputList2Cue8=[~UNUSED2~] -InputList2SigType8=Analog -InputList2Cue9=[~UNUSED2~] -InputList2SigType9=Analog -InputList2Cue10=[~UNUSED2~] -InputList2SigType10=Analog -InputList2Cue11=[~BeginGroup~]an_fb -InputList2SigType11=Analog -InputList2Cue12=an_fb1 -InputList2SigType12=Analog -InputList2Cue13=an_fb2 -InputList2SigType13=Analog -InputList2Cue14=an_fb3 -InputList2SigType14=Analog -InputList2Cue15=an_fb4 -InputList2SigType15=Analog -InputList2Cue16=an_fb5 -InputList2SigType16=Analog -InputList2Cue17=an_fb6 -InputList2SigType17=Analog -InputList2Cue18=an_fb7 -InputList2SigType18=Analog -InputList2Cue19=an_fb8 -InputList2SigType19=Analog -InputList2Cue20=an_fb9 -InputList2SigType20=Analog -InputList2Cue21=an_fb10 -InputList2SigType21=Analog -InputList2Cue22=an_fb11 -InputList2SigType22=Analog -InputList2Cue23=an_fb12 -InputList2SigType23=Analog -InputList2Cue24=an_fb13 -InputList2SigType24=Analog -InputList2Cue25=an_fb14 -InputList2SigType25=Analog -InputList2Cue26=an_fb15 -InputList2SigType26=Analog -InputList2Cue27=[~EndGroup~]an_fb -InputList2SigType27=Analog -OutputList2Cue1=Item Clicked -OutputList2SigType1=Analog -OutputList2Cue2=[~UNUSED3~] -OutputList2SigType2=Analog -OutputList2Cue3=[~UNUSED3~] -OutputList2SigType3=Analog -OutputList2Cue4=[~UNUSED2~] -OutputList2SigType4=Analog -OutputList2Cue5=[~UNUSED2~] -OutputList2SigType5=Analog -OutputList2Cue6=[~UNUSED2~] -OutputList2SigType6=Analog -OutputList2Cue7=[~UNUSED2~] -OutputList2SigType7=Analog -OutputList2Cue8=[~UNUSED2~] -OutputList2SigType8=Analog -OutputList2Cue9=[~UNUSED2~] -OutputList2SigType9=Analog -OutputList2Cue10=[~UNUSED2~] -OutputList2SigType10=Analog -OutputList2Cue11=[~BeginGroup~]an_act -OutputList2SigType11=Analog -OutputList2Cue12=an_act1 -OutputList2SigType12=Analog -OutputList2Cue13=an_act2 -OutputList2SigType13=Analog -OutputList2Cue14=an_act3 -OutputList2SigType14=Analog -OutputList2Cue15=an_act4 -OutputList2SigType15=Analog -OutputList2Cue16=an_act5 -OutputList2SigType16=Analog -OutputList2Cue17=an_act6 -OutputList2SigType17=Analog -OutputList2Cue18=an_act7 -OutputList2SigType18=Analog -OutputList2Cue19=an_act8 -OutputList2SigType19=Analog -OutputList2Cue20=an_act9 -OutputList2SigType20=Analog -OutputList2Cue21=an_act10 -OutputList2SigType21=Analog -OutputList2Cue22=an_act11 -OutputList2SigType22=Analog -OutputList2Cue23=an_act12 -OutputList2SigType23=Analog -OutputList2Cue24=an_act13 -OutputList2SigType24=Analog -OutputList2Cue25=an_act14 -OutputList2SigType25=Analog -OutputList2Cue26=an_act15 -OutputList2SigType26=Analog -OutputList2Cue27=[~EndGroup~]an_act -OutputList2SigType27=Analog -InputList3Cue1=[~UNUSED2~] -InputList3SigType1=Serial -InputList3Cue2=[~UNUSED2~] -InputList3SigType2=Serial -InputList3Cue3=[~UNUSED2~] -InputList3SigType3=Serial -InputList3Cue4=[~UNUSED2~] -InputList3SigType4=Serial -InputList3Cue5=[~UNUSED2~] -InputList3SigType5=Serial -InputList3Cue6=[~UNUSED2~] -InputList3SigType6=Serial -InputList3Cue7=[~UNUSED2~] -InputList3SigType7=Serial -InputList3Cue8=[~UNUSED2~] -InputList3SigType8=Serial -InputList3Cue9=[~UNUSED2~] -InputList3SigType9=Serial -InputList3Cue10=[~UNUSED2~] -InputList3SigType10=Serial -InputList3Cue11=[~BeginGroup~]text-o -InputList3SigType11=Serial -InputList3Cue12=text-o1 -InputList3SigType12=Serial -InputList3Cue13=text-o2 -InputList3SigType13=Serial -InputList3Cue14=text-o3 -InputList3SigType14=Serial -InputList3Cue15=text-o4 -InputList3SigType15=Serial -InputList3Cue16=text-o5 -InputList3SigType16=Serial -InputList3Cue17=text-o6 -InputList3SigType17=Serial -InputList3Cue18=text-o7 -InputList3SigType18=Serial -InputList3Cue19=text-o8 -InputList3SigType19=Serial -InputList3Cue20=text-o9 -InputList3SigType20=Serial -InputList3Cue21=text-o10 -InputList3SigType21=Serial -InputList3Cue22=text-o11 -InputList3SigType22=Serial -InputList3Cue23=text-o12 -InputList3SigType23=Serial -InputList3Cue24=text-o13 -InputList3SigType24=Serial -InputList3Cue25=text-o14 -InputList3SigType25=Serial -InputList3Cue26=text-o15 -InputList3SigType26=Serial -InputList3Cue27=[~EndGroup~]text-o -InputList3SigType27=Serial -OutputList3Cue1=[~UNUSED2~] -OutputList3SigType1=Serial -OutputList3Cue2=[~UNUSED2~] -OutputList3SigType2=Serial -OutputList3Cue3=[~UNUSED2~] -OutputList3SigType3=Serial -OutputList3Cue4=[~UNUSED2~] -OutputList3SigType4=Serial -OutputList3Cue5=[~UNUSED2~] -OutputList3SigType5=Serial -OutputList3Cue6=[~UNUSED2~] -OutputList3SigType6=Serial -OutputList3Cue7=[~UNUSED2~] -OutputList3SigType7=Serial -OutputList3Cue8=[~UNUSED2~] -OutputList3SigType8=Serial -OutputList3Cue9=[~UNUSED2~] -OutputList3SigType9=Serial -OutputList3Cue10=[~UNUSED2~] -OutputList3SigType10=Serial -OutputList3Cue11=[~BeginGroup~]text-i -OutputList3SigType11=Serial -OutputList3Cue12=text-i1 -OutputList3SigType12=Serial -OutputList3Cue13=text-i2 -OutputList3SigType13=Serial -OutputList3Cue14=text-i3 -OutputList3SigType14=Serial -OutputList3Cue15=text-i4 -OutputList3SigType15=Serial -OutputList3Cue16=text-i5 -OutputList3SigType16=Serial -OutputList3Cue17=text-i6 -OutputList3SigType17=Serial -OutputList3Cue18=text-i7 -OutputList3SigType18=Serial -OutputList3Cue19=text-i8 -OutputList3SigType19=Serial -OutputList3Cue20=text-i9 -OutputList3SigType20=Serial -OutputList3Cue21=text-i10 -OutputList3SigType21=Serial -OutputList3Cue22=text-i11 -OutputList3SigType22=Serial -OutputList3Cue23=text-i12 -OutputList3SigType23=Serial -OutputList3Cue24=text-i13 -OutputList3SigType24=Serial -OutputList3Cue25=text-i14 -OutputList3SigType25=Serial -OutputList3Cue26=text-i15 -OutputList3SigType26=Serial -OutputList3Cue27=[~EndGroup~]text-i -OutputList3SigType27=Serial -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=8 -CedH=8 -SmartObjId=15021d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=8 -Tp=1 -HD=TRUE -DV=15021d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=8 -Name=PepperDash Essentials TSW1050_[A.Global] Footer SRL_Modes Bottom Bar SRL.ced -;Cedver is the version of the Smart Graphics control, not the CED file format. -;If the control definition changes, increment this. -CedVer=1 -] -;================================================================================ -[ -ObjTp=Symbol -Name=PepperDash Essentials TSW1050_[B.AV] Object - Presets_CATV Icon List Vertical.ced -Hint=CATV Icon List Vertical (Smart Object ID=10012) -Code=9 -SGControlType=Subpage Reference List Vertical -SGControlName=CATV Icon List Vertical -GUID=B34C4DC0-DD10-4C49-AEBA-F968934EFDC6 -SmplCName=PepperDash Essentials TSW1050_[B.AV] Object - Presets_CATV Icon List Vertical.ced -SMWRev=4.02.20 -Expand=expand_random -HelpID=10125 -Render=8 -;Define the number of inputs, outputs and parameters -MinVariableInputs=4316 -MaxVariableInputs=4316 -MinVariableOutputs=4316 -MaxVariableOutputs=4316 -NumFixedParams=1 -MinVariableInputsList2=3 -MaxVariableInputsList2=3 -MinVariableOutputsList2=3 -MaxVariableOutputsList2=3 -MinVariableInputsList3=412 -MaxVariableInputsList3=412 -MinVariableOutputsList3=412 -MaxVariableOutputsList3=412 -InputSigType1=Digital -OutputSigType1=Digital -InputList2SigType1=Analog -OutputList2SigType1=Analog -InputList3SigType1=Serial -OutputList3SigType1=Serial - -;Define the cues, and signal types each input, output and parameter. -InputCue1=[~UNUSED3~] -InputSigType1=Digital -InputCue2=[~UNUSED2~] -InputSigType2=Digital -InputCue3=[~UNUSED2~] -InputSigType3=Digital -InputCue4=[~UNUSED2~] -InputSigType4=Digital -InputCue5=[~UNUSED2~] -InputSigType5=Digital -InputCue6=[~UNUSED2~] -InputSigType6=Digital -InputCue7=[~UNUSED2~] -InputSigType7=Digital -InputCue8=[~UNUSED2~] -InputSigType8=Digital -InputCue9=[~UNUSED2~] -InputSigType9=Digital -InputCue10=[~UNUSED2~] -InputSigType10=Digital -InputCue11=[~BeginGroup~]Enable -InputSigType11=Digital -InputCue12=Item 1 Enable -InputSigType12=Digital -InputCue13=Item 2 Enable -InputSigType13=Digital -InputCue14=Item 3 Enable -InputSigType14=Digital -InputCue15=Item 4 Enable -InputSigType15=Digital -InputCue16=Item 5 Enable -InputSigType16=Digital -InputCue17=Item 6 Enable -InputSigType17=Digital -InputCue18=Item 7 Enable -InputSigType18=Digital -InputCue19=Item 8 Enable -InputSigType19=Digital -InputCue20=Item 9 Enable -InputSigType20=Digital -InputCue21=Item 10 Enable -InputSigType21=Digital -InputCue22=Item 11 Enable -InputSigType22=Digital -InputCue23=Item 12 Enable -InputSigType23=Digital -InputCue24=Item 13 Enable -InputSigType24=Digital -InputCue25=Item 14 Enable -InputSigType25=Digital -InputCue26=Item 15 Enable -InputSigType26=Digital -InputCue27=Item 16 Enable -InputSigType27=Digital -InputCue28=Item 17 Enable -InputSigType28=Digital -InputCue29=Item 18 Enable -InputSigType29=Digital -InputCue30=Item 19 Enable -InputSigType30=Digital -InputCue31=Item 20 Enable -InputSigType31=Digital -InputCue32=Item 21 Enable -InputSigType32=Digital -InputCue33=Item 22 Enable -InputSigType33=Digital -InputCue34=Item 23 Enable -InputSigType34=Digital -InputCue35=Item 24 Enable -InputSigType35=Digital -InputCue36=Item 25 Enable -InputSigType36=Digital -InputCue37=Item 26 Enable -InputSigType37=Digital -InputCue38=Item 27 Enable -InputSigType38=Digital -InputCue39=Item 28 Enable -InputSigType39=Digital -InputCue40=Item 29 Enable -InputSigType40=Digital -InputCue41=Item 30 Enable -InputSigType41=Digital -InputCue42=Item 31 Enable -InputSigType42=Digital -InputCue43=Item 32 Enable -InputSigType43=Digital -InputCue44=Item 33 Enable -InputSigType44=Digital -InputCue45=Item 34 Enable -InputSigType45=Digital -InputCue46=Item 35 Enable -InputSigType46=Digital -InputCue47=Item 36 Enable -InputSigType47=Digital -InputCue48=Item 37 Enable -InputSigType48=Digital -InputCue49=Item 38 Enable -InputSigType49=Digital -InputCue50=Item 39 Enable -InputSigType50=Digital -InputCue51=Item 40 Enable -InputSigType51=Digital -InputCue52=Item 41 Enable -InputSigType52=Digital -InputCue53=Item 42 Enable -InputSigType53=Digital -InputCue54=Item 43 Enable -InputSigType54=Digital -InputCue55=Item 44 Enable -InputSigType55=Digital -InputCue56=Item 45 Enable -InputSigType56=Digital -InputCue57=Item 46 Enable -InputSigType57=Digital -InputCue58=Item 47 Enable -InputSigType58=Digital -InputCue59=Item 48 Enable -InputSigType59=Digital -InputCue60=Item 49 Enable -InputSigType60=Digital -InputCue61=Item 50 Enable -InputSigType61=Digital -InputCue62=Item 51 Enable -InputSigType62=Digital -InputCue63=Item 52 Enable -InputSigType63=Digital -InputCue64=Item 53 Enable -InputSigType64=Digital -InputCue65=Item 54 Enable -InputSigType65=Digital -InputCue66=Item 55 Enable -InputSigType66=Digital -InputCue67=Item 56 Enable -InputSigType67=Digital -InputCue68=Item 57 Enable -InputSigType68=Digital -InputCue69=Item 58 Enable -InputSigType69=Digital -InputCue70=Item 59 Enable -InputSigType70=Digital -InputCue71=Item 60 Enable -InputSigType71=Digital -InputCue72=Item 61 Enable -InputSigType72=Digital -InputCue73=Item 62 Enable -InputSigType73=Digital -InputCue74=Item 63 Enable -InputSigType74=Digital -InputCue75=Item 64 Enable -InputSigType75=Digital -InputCue76=Item 65 Enable -InputSigType76=Digital -InputCue77=Item 66 Enable -InputSigType77=Digital -InputCue78=Item 67 Enable -InputSigType78=Digital -InputCue79=Item 68 Enable -InputSigType79=Digital -InputCue80=Item 69 Enable -InputSigType80=Digital -InputCue81=Item 70 Enable -InputSigType81=Digital -InputCue82=Item 71 Enable -InputSigType82=Digital -InputCue83=Item 72 Enable -InputSigType83=Digital -InputCue84=Item 73 Enable -InputSigType84=Digital -InputCue85=Item 74 Enable -InputSigType85=Digital -InputCue86=Item 75 Enable -InputSigType86=Digital -InputCue87=Item 76 Enable -InputSigType87=Digital -InputCue88=Item 77 Enable -InputSigType88=Digital -InputCue89=Item 78 Enable -InputSigType89=Digital -InputCue90=Item 79 Enable -InputSigType90=Digital -InputCue91=Item 80 Enable -InputSigType91=Digital -InputCue92=Item 81 Enable -InputSigType92=Digital -InputCue93=Item 82 Enable -InputSigType93=Digital -InputCue94=Item 83 Enable -InputSigType94=Digital -InputCue95=Item 84 Enable -InputSigType95=Digital -InputCue96=Item 85 Enable -InputSigType96=Digital -InputCue97=Item 86 Enable -InputSigType97=Digital -InputCue98=Item 87 Enable -InputSigType98=Digital -InputCue99=Item 88 Enable -InputSigType99=Digital -InputCue100=Item 89 Enable -InputSigType100=Digital -InputCue101=Item 90 Enable -InputSigType101=Digital -InputCue102=Item 91 Enable -InputSigType102=Digital -InputCue103=Item 92 Enable -InputSigType103=Digital -InputCue104=Item 93 Enable -InputSigType104=Digital -InputCue105=Item 94 Enable -InputSigType105=Digital -InputCue106=Item 95 Enable -InputSigType106=Digital -InputCue107=Item 96 Enable -InputSigType107=Digital -InputCue108=Item 97 Enable -InputSigType108=Digital -InputCue109=Item 98 Enable -InputSigType109=Digital -InputCue110=Item 99 Enable -InputSigType110=Digital -InputCue111=Item 100 Enable -InputSigType111=Digital -InputCue112=[~UNUSED2~] -InputSigType112=Digital|Analog|Serial|String -InputCue2012=[~EndGroup~]Enable -InputSigType2012=Digital -InputCue2013=[~BeginGroup~]Visible -InputSigType2013=Digital -InputCue2014=Item 1 Visible -InputSigType2014=Digital -InputCue2015=Item 2 Visible -InputSigType2015=Digital -InputCue2016=Item 3 Visible -InputSigType2016=Digital -InputCue2017=Item 4 Visible -InputSigType2017=Digital -InputCue2018=Item 5 Visible -InputSigType2018=Digital -InputCue2019=Item 6 Visible -InputSigType2019=Digital -InputCue2020=Item 7 Visible -InputSigType2020=Digital -InputCue2021=Item 8 Visible -InputSigType2021=Digital -InputCue2022=Item 9 Visible -InputSigType2022=Digital -InputCue2023=Item 10 Visible -InputSigType2023=Digital -InputCue2024=Item 11 Visible -InputSigType2024=Digital -InputCue2025=Item 12 Visible -InputSigType2025=Digital -InputCue2026=Item 13 Visible -InputSigType2026=Digital -InputCue2027=Item 14 Visible -InputSigType2027=Digital -InputCue2028=Item 15 Visible -InputSigType2028=Digital -InputCue2029=Item 16 Visible -InputSigType2029=Digital -InputCue2030=Item 17 Visible -InputSigType2030=Digital -InputCue2031=Item 18 Visible -InputSigType2031=Digital -InputCue2032=Item 19 Visible -InputSigType2032=Digital -InputCue2033=Item 20 Visible -InputSigType2033=Digital -InputCue2034=Item 21 Visible -InputSigType2034=Digital -InputCue2035=Item 22 Visible -InputSigType2035=Digital -InputCue2036=Item 23 Visible -InputSigType2036=Digital -InputCue2037=Item 24 Visible -InputSigType2037=Digital -InputCue2038=Item 25 Visible -InputSigType2038=Digital -InputCue2039=Item 26 Visible -InputSigType2039=Digital -InputCue2040=Item 27 Visible -InputSigType2040=Digital -InputCue2041=Item 28 Visible -InputSigType2041=Digital -InputCue2042=Item 29 Visible -InputSigType2042=Digital -InputCue2043=Item 30 Visible -InputSigType2043=Digital -InputCue2044=Item 31 Visible -InputSigType2044=Digital -InputCue2045=Item 32 Visible -InputSigType2045=Digital -InputCue2046=Item 33 Visible -InputSigType2046=Digital -InputCue2047=Item 34 Visible -InputSigType2047=Digital -InputCue2048=Item 35 Visible -InputSigType2048=Digital -InputCue2049=Item 36 Visible -InputSigType2049=Digital -InputCue2050=Item 37 Visible -InputSigType2050=Digital -InputCue2051=Item 38 Visible -InputSigType2051=Digital -InputCue2052=Item 39 Visible -InputSigType2052=Digital -InputCue2053=Item 40 Visible -InputSigType2053=Digital -InputCue2054=Item 41 Visible -InputSigType2054=Digital -InputCue2055=Item 42 Visible -InputSigType2055=Digital -InputCue2056=Item 43 Visible -InputSigType2056=Digital -InputCue2057=Item 44 Visible -InputSigType2057=Digital -InputCue2058=Item 45 Visible -InputSigType2058=Digital -InputCue2059=Item 46 Visible -InputSigType2059=Digital -InputCue2060=Item 47 Visible -InputSigType2060=Digital -InputCue2061=Item 48 Visible -InputSigType2061=Digital -InputCue2062=Item 49 Visible -InputSigType2062=Digital -InputCue2063=Item 50 Visible -InputSigType2063=Digital -InputCue2064=Item 51 Visible -InputSigType2064=Digital -InputCue2065=Item 52 Visible -InputSigType2065=Digital -InputCue2066=Item 53 Visible -InputSigType2066=Digital -InputCue2067=Item 54 Visible -InputSigType2067=Digital -InputCue2068=Item 55 Visible -InputSigType2068=Digital -InputCue2069=Item 56 Visible -InputSigType2069=Digital -InputCue2070=Item 57 Visible -InputSigType2070=Digital -InputCue2071=Item 58 Visible -InputSigType2071=Digital -InputCue2072=Item 59 Visible -InputSigType2072=Digital -InputCue2073=Item 60 Visible -InputSigType2073=Digital -InputCue2074=Item 61 Visible -InputSigType2074=Digital -InputCue2075=Item 62 Visible -InputSigType2075=Digital -InputCue2076=Item 63 Visible -InputSigType2076=Digital -InputCue2077=Item 64 Visible -InputSigType2077=Digital -InputCue2078=Item 65 Visible -InputSigType2078=Digital -InputCue2079=Item 66 Visible -InputSigType2079=Digital -InputCue2080=Item 67 Visible -InputSigType2080=Digital -InputCue2081=Item 68 Visible -InputSigType2081=Digital -InputCue2082=Item 69 Visible -InputSigType2082=Digital -InputCue2083=Item 70 Visible -InputSigType2083=Digital -InputCue2084=Item 71 Visible -InputSigType2084=Digital -InputCue2085=Item 72 Visible -InputSigType2085=Digital -InputCue2086=Item 73 Visible -InputSigType2086=Digital -InputCue2087=Item 74 Visible -InputSigType2087=Digital -InputCue2088=Item 75 Visible -InputSigType2088=Digital -InputCue2089=Item 76 Visible -InputSigType2089=Digital -InputCue2090=Item 77 Visible -InputSigType2090=Digital -InputCue2091=Item 78 Visible -InputSigType2091=Digital -InputCue2092=Item 79 Visible -InputSigType2092=Digital -InputCue2093=Item 80 Visible -InputSigType2093=Digital -InputCue2094=Item 81 Visible -InputSigType2094=Digital -InputCue2095=Item 82 Visible -InputSigType2095=Digital -InputCue2096=Item 83 Visible -InputSigType2096=Digital -InputCue2097=Item 84 Visible -InputSigType2097=Digital -InputCue2098=Item 85 Visible -InputSigType2098=Digital -InputCue2099=Item 86 Visible -InputSigType2099=Digital -InputCue2100=Item 87 Visible -InputSigType2100=Digital -InputCue2101=Item 88 Visible -InputSigType2101=Digital -InputCue2102=Item 89 Visible -InputSigType2102=Digital -InputCue2103=Item 90 Visible -InputSigType2103=Digital -InputCue2104=Item 91 Visible -InputSigType2104=Digital -InputCue2105=Item 92 Visible -InputSigType2105=Digital -InputCue2106=Item 93 Visible -InputSigType2106=Digital -InputCue2107=Item 94 Visible -InputSigType2107=Digital -InputCue2108=Item 95 Visible -InputSigType2108=Digital -InputCue2109=Item 96 Visible -InputSigType2109=Digital -InputCue2110=Item 97 Visible -InputSigType2110=Digital -InputCue2111=Item 98 Visible -InputSigType2111=Digital -InputCue2112=Item 99 Visible -InputSigType2112=Digital -InputCue2113=Item 100 Visible -InputSigType2113=Digital -InputCue2114=[~UNUSED2~] -InputSigType2114=Digital|Analog|Serial|String -InputCue4014=[~EndGroup~]Visible -InputSigType4014=Digital -InputCue4015=[~BeginGroup~]fb -InputSigType4015=Digital -InputCue4016=fb1 -InputSigType4016=Digital -InputCue4017=fb2 -InputSigType4017=Digital -InputCue4018=fb3 -InputSigType4018=Digital -InputCue4019=fb4 -InputSigType4019=Digital -InputCue4020=fb5 -InputSigType4020=Digital -InputCue4021=fb6 -InputSigType4021=Digital -InputCue4022=fb7 -InputSigType4022=Digital -InputCue4023=fb8 -InputSigType4023=Digital -InputCue4024=fb9 -InputSigType4024=Digital -InputCue4025=fb10 -InputSigType4025=Digital -InputCue4026=fb11 -InputSigType4026=Digital -InputCue4027=fb12 -InputSigType4027=Digital -InputCue4028=fb13 -InputSigType4028=Digital -InputCue4029=fb14 -InputSigType4029=Digital -InputCue4030=fb15 -InputSigType4030=Digital -InputCue4031=fb16 -InputSigType4031=Digital -InputCue4032=fb17 -InputSigType4032=Digital -InputCue4033=fb18 -InputSigType4033=Digital -InputCue4034=fb19 -InputSigType4034=Digital -InputCue4035=fb20 -InputSigType4035=Digital -InputCue4036=fb21 -InputSigType4036=Digital -InputCue4037=fb22 -InputSigType4037=Digital -InputCue4038=fb23 -InputSigType4038=Digital -InputCue4039=fb24 -InputSigType4039=Digital -InputCue4040=fb25 -InputSigType4040=Digital -InputCue4041=fb26 -InputSigType4041=Digital -InputCue4042=fb27 -InputSigType4042=Digital -InputCue4043=fb28 -InputSigType4043=Digital -InputCue4044=fb29 -InputSigType4044=Digital -InputCue4045=fb30 -InputSigType4045=Digital -InputCue4046=fb31 -InputSigType4046=Digital -InputCue4047=fb32 -InputSigType4047=Digital -InputCue4048=fb33 -InputSigType4048=Digital -InputCue4049=fb34 -InputSigType4049=Digital -InputCue4050=fb35 -InputSigType4050=Digital -InputCue4051=fb36 -InputSigType4051=Digital -InputCue4052=fb37 -InputSigType4052=Digital -InputCue4053=fb38 -InputSigType4053=Digital -InputCue4054=fb39 -InputSigType4054=Digital -InputCue4055=fb40 -InputSigType4055=Digital -InputCue4056=fb41 -InputSigType4056=Digital -InputCue4057=fb42 -InputSigType4057=Digital -InputCue4058=fb43 -InputSigType4058=Digital -InputCue4059=fb44 -InputSigType4059=Digital -InputCue4060=fb45 -InputSigType4060=Digital -InputCue4061=fb46 -InputSigType4061=Digital -InputCue4062=fb47 -InputSigType4062=Digital -InputCue4063=fb48 -InputSigType4063=Digital -InputCue4064=fb49 -InputSigType4064=Digital -InputCue4065=fb50 -InputSigType4065=Digital -InputCue4066=fb51 -InputSigType4066=Digital -InputCue4067=fb52 -InputSigType4067=Digital -InputCue4068=fb53 -InputSigType4068=Digital -InputCue4069=fb54 -InputSigType4069=Digital -InputCue4070=fb55 -InputSigType4070=Digital -InputCue4071=fb56 -InputSigType4071=Digital -InputCue4072=fb57 -InputSigType4072=Digital -InputCue4073=fb58 -InputSigType4073=Digital -InputCue4074=fb59 -InputSigType4074=Digital -InputCue4075=fb60 -InputSigType4075=Digital -InputCue4076=fb61 -InputSigType4076=Digital -InputCue4077=fb62 -InputSigType4077=Digital -InputCue4078=fb63 -InputSigType4078=Digital -InputCue4079=fb64 -InputSigType4079=Digital -InputCue4080=fb65 -InputSigType4080=Digital -InputCue4081=fb66 -InputSigType4081=Digital -InputCue4082=fb67 -InputSigType4082=Digital -InputCue4083=fb68 -InputSigType4083=Digital -InputCue4084=fb69 -InputSigType4084=Digital -InputCue4085=fb70 -InputSigType4085=Digital -InputCue4086=fb71 -InputSigType4086=Digital -InputCue4087=fb72 -InputSigType4087=Digital -InputCue4088=fb73 -InputSigType4088=Digital -InputCue4089=fb74 -InputSigType4089=Digital -InputCue4090=fb75 -InputSigType4090=Digital -InputCue4091=fb76 -InputSigType4091=Digital -InputCue4092=fb77 -InputSigType4092=Digital -InputCue4093=fb78 -InputSigType4093=Digital -InputCue4094=fb79 -InputSigType4094=Digital -InputCue4095=fb80 -InputSigType4095=Digital -InputCue4096=fb81 -InputSigType4096=Digital -InputCue4097=fb82 -InputSigType4097=Digital -InputCue4098=fb83 -InputSigType4098=Digital -InputCue4099=fb84 -InputSigType4099=Digital -InputCue4100=fb85 -InputSigType4100=Digital -InputCue4101=fb86 -InputSigType4101=Digital -InputCue4102=fb87 -InputSigType4102=Digital -InputCue4103=fb88 -InputSigType4103=Digital -InputCue4104=fb89 -InputSigType4104=Digital -InputCue4105=fb90 -InputSigType4105=Digital -InputCue4106=fb91 -InputSigType4106=Digital -InputCue4107=fb92 -InputSigType4107=Digital -InputCue4108=fb93 -InputSigType4108=Digital -InputCue4109=fb94 -InputSigType4109=Digital -InputCue4110=fb95 -InputSigType4110=Digital -InputCue4111=fb96 -InputSigType4111=Digital -InputCue4112=fb97 -InputSigType4112=Digital -InputCue4113=fb98 -InputSigType4113=Digital -InputCue4114=fb99 -InputSigType4114=Digital -InputCue4115=fb100 -InputSigType4115=Digital -InputCue4116=fb101 -InputSigType4116=Digital -InputCue4117=fb102 -InputSigType4117=Digital -InputCue4118=fb103 -InputSigType4118=Digital -InputCue4119=fb104 -InputSigType4119=Digital -InputCue4120=fb105 -InputSigType4120=Digital -InputCue4121=fb106 -InputSigType4121=Digital -InputCue4122=fb107 -InputSigType4122=Digital -InputCue4123=fb108 -InputSigType4123=Digital -InputCue4124=fb109 -InputSigType4124=Digital -InputCue4125=fb110 -InputSigType4125=Digital -InputCue4126=fb111 -InputSigType4126=Digital -InputCue4127=fb112 -InputSigType4127=Digital -InputCue4128=fb113 -InputSigType4128=Digital -InputCue4129=fb114 -InputSigType4129=Digital -InputCue4130=fb115 -InputSigType4130=Digital -InputCue4131=fb116 -InputSigType4131=Digital -InputCue4132=fb117 -InputSigType4132=Digital -InputCue4133=fb118 -InputSigType4133=Digital -InputCue4134=fb119 -InputSigType4134=Digital -InputCue4135=fb120 -InputSigType4135=Digital -InputCue4136=fb121 -InputSigType4136=Digital -InputCue4137=fb122 -InputSigType4137=Digital -InputCue4138=fb123 -InputSigType4138=Digital -InputCue4139=fb124 -InputSigType4139=Digital -InputCue4140=fb125 -InputSigType4140=Digital -InputCue4141=fb126 -InputSigType4141=Digital -InputCue4142=fb127 -InputSigType4142=Digital -InputCue4143=fb128 -InputSigType4143=Digital -InputCue4144=fb129 -InputSigType4144=Digital -InputCue4145=fb130 -InputSigType4145=Digital -InputCue4146=fb131 -InputSigType4146=Digital -InputCue4147=fb132 -InputSigType4147=Digital -InputCue4148=fb133 -InputSigType4148=Digital -InputCue4149=fb134 -InputSigType4149=Digital -InputCue4150=fb135 -InputSigType4150=Digital -InputCue4151=fb136 -InputSigType4151=Digital -InputCue4152=fb137 -InputSigType4152=Digital -InputCue4153=fb138 -InputSigType4153=Digital -InputCue4154=fb139 -InputSigType4154=Digital -InputCue4155=fb140 -InputSigType4155=Digital -InputCue4156=fb141 -InputSigType4156=Digital -InputCue4157=fb142 -InputSigType4157=Digital -InputCue4158=fb143 -InputSigType4158=Digital -InputCue4159=fb144 -InputSigType4159=Digital -InputCue4160=fb145 -InputSigType4160=Digital -InputCue4161=fb146 -InputSigType4161=Digital -InputCue4162=fb147 -InputSigType4162=Digital -InputCue4163=fb148 -InputSigType4163=Digital -InputCue4164=fb149 -InputSigType4164=Digital -InputCue4165=fb150 -InputSigType4165=Digital -InputCue4166=fb151 -InputSigType4166=Digital -InputCue4167=fb152 -InputSigType4167=Digital -InputCue4168=fb153 -InputSigType4168=Digital -InputCue4169=fb154 -InputSigType4169=Digital -InputCue4170=fb155 -InputSigType4170=Digital -InputCue4171=fb156 -InputSigType4171=Digital -InputCue4172=fb157 -InputSigType4172=Digital -InputCue4173=fb158 -InputSigType4173=Digital -InputCue4174=fb159 -InputSigType4174=Digital -InputCue4175=fb160 -InputSigType4175=Digital -InputCue4176=fb161 -InputSigType4176=Digital -InputCue4177=fb162 -InputSigType4177=Digital -InputCue4178=fb163 -InputSigType4178=Digital -InputCue4179=fb164 -InputSigType4179=Digital -InputCue4180=fb165 -InputSigType4180=Digital -InputCue4181=fb166 -InputSigType4181=Digital -InputCue4182=fb167 -InputSigType4182=Digital -InputCue4183=fb168 -InputSigType4183=Digital -InputCue4184=fb169 -InputSigType4184=Digital -InputCue4185=fb170 -InputSigType4185=Digital -InputCue4186=fb171 -InputSigType4186=Digital -InputCue4187=fb172 -InputSigType4187=Digital -InputCue4188=fb173 -InputSigType4188=Digital -InputCue4189=fb174 -InputSigType4189=Digital -InputCue4190=fb175 -InputSigType4190=Digital -InputCue4191=fb176 -InputSigType4191=Digital -InputCue4192=fb177 -InputSigType4192=Digital -InputCue4193=fb178 -InputSigType4193=Digital -InputCue4194=fb179 -InputSigType4194=Digital -InputCue4195=fb180 -InputSigType4195=Digital -InputCue4196=fb181 -InputSigType4196=Digital -InputCue4197=fb182 -InputSigType4197=Digital -InputCue4198=fb183 -InputSigType4198=Digital -InputCue4199=fb184 -InputSigType4199=Digital -InputCue4200=fb185 -InputSigType4200=Digital -InputCue4201=fb186 -InputSigType4201=Digital -InputCue4202=fb187 -InputSigType4202=Digital -InputCue4203=fb188 -InputSigType4203=Digital -InputCue4204=fb189 -InputSigType4204=Digital -InputCue4205=fb190 -InputSigType4205=Digital -InputCue4206=fb191 -InputSigType4206=Digital -InputCue4207=fb192 -InputSigType4207=Digital -InputCue4208=fb193 -InputSigType4208=Digital -InputCue4209=fb194 -InputSigType4209=Digital -InputCue4210=fb195 -InputSigType4210=Digital -InputCue4211=fb196 -InputSigType4211=Digital -InputCue4212=fb197 -InputSigType4212=Digital -InputCue4213=fb198 -InputSigType4213=Digital -InputCue4214=fb199 -InputSigType4214=Digital -InputCue4215=fb200 -InputSigType4215=Digital -InputCue4216=fb201 -InputSigType4216=Digital -InputCue4217=fb202 -InputSigType4217=Digital -InputCue4218=fb203 -InputSigType4218=Digital -InputCue4219=fb204 -InputSigType4219=Digital -InputCue4220=fb205 -InputSigType4220=Digital -InputCue4221=fb206 -InputSigType4221=Digital -InputCue4222=fb207 -InputSigType4222=Digital -InputCue4223=fb208 -InputSigType4223=Digital -InputCue4224=fb209 -InputSigType4224=Digital -InputCue4225=fb210 -InputSigType4225=Digital -InputCue4226=fb211 -InputSigType4226=Digital -InputCue4227=fb212 -InputSigType4227=Digital -InputCue4228=fb213 -InputSigType4228=Digital -InputCue4229=fb214 -InputSigType4229=Digital -InputCue4230=fb215 -InputSigType4230=Digital -InputCue4231=fb216 -InputSigType4231=Digital -InputCue4232=fb217 -InputSigType4232=Digital -InputCue4233=fb218 -InputSigType4233=Digital -InputCue4234=fb219 -InputSigType4234=Digital -InputCue4235=fb220 -InputSigType4235=Digital -InputCue4236=fb221 -InputSigType4236=Digital -InputCue4237=fb222 -InputSigType4237=Digital -InputCue4238=fb223 -InputSigType4238=Digital -InputCue4239=fb224 -InputSigType4239=Digital -InputCue4240=fb225 -InputSigType4240=Digital -InputCue4241=fb226 -InputSigType4241=Digital -InputCue4242=fb227 -InputSigType4242=Digital -InputCue4243=fb228 -InputSigType4243=Digital -InputCue4244=fb229 -InputSigType4244=Digital -InputCue4245=fb230 -InputSigType4245=Digital -InputCue4246=fb231 -InputSigType4246=Digital -InputCue4247=fb232 -InputSigType4247=Digital -InputCue4248=fb233 -InputSigType4248=Digital -InputCue4249=fb234 -InputSigType4249=Digital -InputCue4250=fb235 -InputSigType4250=Digital -InputCue4251=fb236 -InputSigType4251=Digital -InputCue4252=fb237 -InputSigType4252=Digital -InputCue4253=fb238 -InputSigType4253=Digital -InputCue4254=fb239 -InputSigType4254=Digital -InputCue4255=fb240 -InputSigType4255=Digital -InputCue4256=fb241 -InputSigType4256=Digital -InputCue4257=fb242 -InputSigType4257=Digital -InputCue4258=fb243 -InputSigType4258=Digital -InputCue4259=fb244 -InputSigType4259=Digital -InputCue4260=fb245 -InputSigType4260=Digital -InputCue4261=fb246 -InputSigType4261=Digital -InputCue4262=fb247 -InputSigType4262=Digital -InputCue4263=fb248 -InputSigType4263=Digital -InputCue4264=fb249 -InputSigType4264=Digital -InputCue4265=fb250 -InputSigType4265=Digital -InputCue4266=fb251 -InputSigType4266=Digital -InputCue4267=fb252 -InputSigType4267=Digital -InputCue4268=fb253 -InputSigType4268=Digital -InputCue4269=fb254 -InputSigType4269=Digital -InputCue4270=fb255 -InputSigType4270=Digital -InputCue4271=fb256 -InputSigType4271=Digital -InputCue4272=fb257 -InputSigType4272=Digital -InputCue4273=fb258 -InputSigType4273=Digital -InputCue4274=fb259 -InputSigType4274=Digital -InputCue4275=fb260 -InputSigType4275=Digital -InputCue4276=fb261 -InputSigType4276=Digital -InputCue4277=fb262 -InputSigType4277=Digital -InputCue4278=fb263 -InputSigType4278=Digital -InputCue4279=fb264 -InputSigType4279=Digital -InputCue4280=fb265 -InputSigType4280=Digital -InputCue4281=fb266 -InputSigType4281=Digital -InputCue4282=fb267 -InputSigType4282=Digital -InputCue4283=fb268 -InputSigType4283=Digital -InputCue4284=fb269 -InputSigType4284=Digital -InputCue4285=fb270 -InputSigType4285=Digital -InputCue4286=fb271 -InputSigType4286=Digital -InputCue4287=fb272 -InputSigType4287=Digital -InputCue4288=fb273 -InputSigType4288=Digital -InputCue4289=fb274 -InputSigType4289=Digital -InputCue4290=fb275 -InputSigType4290=Digital -InputCue4291=fb276 -InputSigType4291=Digital -InputCue4292=fb277 -InputSigType4292=Digital -InputCue4293=fb278 -InputSigType4293=Digital -InputCue4294=fb279 -InputSigType4294=Digital -InputCue4295=fb280 -InputSigType4295=Digital -InputCue4296=fb281 -InputSigType4296=Digital -InputCue4297=fb282 -InputSigType4297=Digital -InputCue4298=fb283 -InputSigType4298=Digital -InputCue4299=fb284 -InputSigType4299=Digital -InputCue4300=fb285 -InputSigType4300=Digital -InputCue4301=fb286 -InputSigType4301=Digital -InputCue4302=fb287 -InputSigType4302=Digital -InputCue4303=fb288 -InputSigType4303=Digital -InputCue4304=fb289 -InputSigType4304=Digital -InputCue4305=fb290 -InputSigType4305=Digital -InputCue4306=fb291 -InputSigType4306=Digital -InputCue4307=fb292 -InputSigType4307=Digital -InputCue4308=fb293 -InputSigType4308=Digital -InputCue4309=fb294 -InputSigType4309=Digital -InputCue4310=fb295 -InputSigType4310=Digital -InputCue4311=fb296 -InputSigType4311=Digital -InputCue4312=fb297 -InputSigType4312=Digital -InputCue4313=fb298 -InputSigType4313=Digital -InputCue4314=fb299 -InputSigType4314=Digital -InputCue4315=fb300 -InputSigType4315=Digital -InputCue4316=[~EndGroup~]fb -InputSigType4316=Digital -OutputCue1=Is Moving -OutputSigType1=Digital -OutputCue2=[~UNUSED2~] -OutputSigType2=Digital -OutputCue3=[~UNUSED2~] -OutputSigType3=Digital -OutputCue4=[~UNUSED2~] -OutputSigType4=Digital -OutputCue5=[~UNUSED2~] -OutputSigType5=Digital -OutputCue6=[~UNUSED2~] -OutputSigType6=Digital -OutputCue7=[~UNUSED2~] -OutputSigType7=Digital -OutputCue8=[~UNUSED2~] -OutputSigType8=Digital -OutputCue9=[~UNUSED2~] -OutputSigType9=Digital -OutputCue10=[~UNUSED2~] -OutputSigType10=Digital -OutputCue11=[~BeginGroup~]Enable -OutputSigType11=Digital -OutputCue12=[~UNUSED3~] -OutputSigType12=Digital -OutputCue13=[~UNUSED3~] -OutputSigType13=Digital -OutputCue14=[~UNUSED3~] -OutputSigType14=Digital -OutputCue15=[~UNUSED3~] -OutputSigType15=Digital -OutputCue16=[~UNUSED3~] -OutputSigType16=Digital -OutputCue17=[~UNUSED3~] -OutputSigType17=Digital -OutputCue18=[~UNUSED3~] -OutputSigType18=Digital -OutputCue19=[~UNUSED3~] -OutputSigType19=Digital -OutputCue20=[~UNUSED3~] -OutputSigType20=Digital -OutputCue21=[~UNUSED3~] -OutputSigType21=Digital -OutputCue22=[~UNUSED3~] -OutputSigType22=Digital -OutputCue23=[~UNUSED3~] -OutputSigType23=Digital -OutputCue24=[~UNUSED3~] -OutputSigType24=Digital -OutputCue25=[~UNUSED3~] -OutputSigType25=Digital -OutputCue26=[~UNUSED3~] -OutputSigType26=Digital -OutputCue27=[~UNUSED3~] -OutputSigType27=Digital -OutputCue28=[~UNUSED3~] -OutputSigType28=Digital -OutputCue29=[~UNUSED3~] -OutputSigType29=Digital -OutputCue30=[~UNUSED3~] -OutputSigType30=Digital -OutputCue31=[~UNUSED3~] -OutputSigType31=Digital -OutputCue32=[~UNUSED3~] -OutputSigType32=Digital -OutputCue33=[~UNUSED3~] -OutputSigType33=Digital -OutputCue34=[~UNUSED3~] -OutputSigType34=Digital -OutputCue35=[~UNUSED3~] -OutputSigType35=Digital -OutputCue36=[~UNUSED3~] -OutputSigType36=Digital -OutputCue37=[~UNUSED3~] -OutputSigType37=Digital -OutputCue38=[~UNUSED3~] -OutputSigType38=Digital -OutputCue39=[~UNUSED3~] -OutputSigType39=Digital -OutputCue40=[~UNUSED3~] -OutputSigType40=Digital -OutputCue41=[~UNUSED3~] -OutputSigType41=Digital -OutputCue42=[~UNUSED3~] -OutputSigType42=Digital -OutputCue43=[~UNUSED3~] -OutputSigType43=Digital -OutputCue44=[~UNUSED3~] -OutputSigType44=Digital -OutputCue45=[~UNUSED3~] -OutputSigType45=Digital -OutputCue46=[~UNUSED3~] -OutputSigType46=Digital -OutputCue47=[~UNUSED3~] -OutputSigType47=Digital -OutputCue48=[~UNUSED3~] -OutputSigType48=Digital -OutputCue49=[~UNUSED3~] -OutputSigType49=Digital -OutputCue50=[~UNUSED3~] -OutputSigType50=Digital -OutputCue51=[~UNUSED3~] -OutputSigType51=Digital -OutputCue52=[~UNUSED3~] -OutputSigType52=Digital -OutputCue53=[~UNUSED3~] -OutputSigType53=Digital -OutputCue54=[~UNUSED3~] -OutputSigType54=Digital -OutputCue55=[~UNUSED3~] -OutputSigType55=Digital -OutputCue56=[~UNUSED3~] -OutputSigType56=Digital -OutputCue57=[~UNUSED3~] -OutputSigType57=Digital -OutputCue58=[~UNUSED3~] -OutputSigType58=Digital -OutputCue59=[~UNUSED3~] -OutputSigType59=Digital -OutputCue60=[~UNUSED3~] -OutputSigType60=Digital -OutputCue61=[~UNUSED3~] -OutputSigType61=Digital -OutputCue62=[~UNUSED3~] -OutputSigType62=Digital -OutputCue63=[~UNUSED3~] -OutputSigType63=Digital -OutputCue64=[~UNUSED3~] -OutputSigType64=Digital -OutputCue65=[~UNUSED3~] -OutputSigType65=Digital -OutputCue66=[~UNUSED3~] -OutputSigType66=Digital -OutputCue67=[~UNUSED3~] -OutputSigType67=Digital -OutputCue68=[~UNUSED3~] -OutputSigType68=Digital -OutputCue69=[~UNUSED3~] -OutputSigType69=Digital -OutputCue70=[~UNUSED3~] -OutputSigType70=Digital -OutputCue71=[~UNUSED3~] -OutputSigType71=Digital -OutputCue72=[~UNUSED3~] -OutputSigType72=Digital -OutputCue73=[~UNUSED3~] -OutputSigType73=Digital -OutputCue74=[~UNUSED3~] -OutputSigType74=Digital -OutputCue75=[~UNUSED3~] -OutputSigType75=Digital -OutputCue76=[~UNUSED3~] -OutputSigType76=Digital -OutputCue77=[~UNUSED3~] -OutputSigType77=Digital -OutputCue78=[~UNUSED3~] -OutputSigType78=Digital -OutputCue79=[~UNUSED3~] -OutputSigType79=Digital -OutputCue80=[~UNUSED3~] -OutputSigType80=Digital -OutputCue81=[~UNUSED3~] -OutputSigType81=Digital -OutputCue82=[~UNUSED3~] -OutputSigType82=Digital -OutputCue83=[~UNUSED3~] -OutputSigType83=Digital -OutputCue84=[~UNUSED3~] -OutputSigType84=Digital -OutputCue85=[~UNUSED3~] -OutputSigType85=Digital -OutputCue86=[~UNUSED3~] -OutputSigType86=Digital -OutputCue87=[~UNUSED3~] -OutputSigType87=Digital -OutputCue88=[~UNUSED3~] -OutputSigType88=Digital -OutputCue89=[~UNUSED3~] -OutputSigType89=Digital -OutputCue90=[~UNUSED3~] -OutputSigType90=Digital -OutputCue91=[~UNUSED3~] -OutputSigType91=Digital -OutputCue92=[~UNUSED3~] -OutputSigType92=Digital -OutputCue93=[~UNUSED3~] -OutputSigType93=Digital -OutputCue94=[~UNUSED3~] -OutputSigType94=Digital -OutputCue95=[~UNUSED3~] -OutputSigType95=Digital -OutputCue96=[~UNUSED3~] -OutputSigType96=Digital -OutputCue97=[~UNUSED3~] -OutputSigType97=Digital -OutputCue98=[~UNUSED3~] -OutputSigType98=Digital -OutputCue99=[~UNUSED3~] -OutputSigType99=Digital -OutputCue100=[~UNUSED3~] -OutputSigType100=Digital -OutputCue101=[~UNUSED3~] -OutputSigType101=Digital -OutputCue102=[~UNUSED3~] -OutputSigType102=Digital -OutputCue103=[~UNUSED3~] -OutputSigType103=Digital -OutputCue104=[~UNUSED3~] -OutputSigType104=Digital -OutputCue105=[~UNUSED3~] -OutputSigType105=Digital -OutputCue106=[~UNUSED3~] -OutputSigType106=Digital -OutputCue107=[~UNUSED3~] -OutputSigType107=Digital -OutputCue108=[~UNUSED3~] -OutputSigType108=Digital -OutputCue109=[~UNUSED3~] -OutputSigType109=Digital -OutputCue110=[~UNUSED3~] -OutputSigType110=Digital -OutputCue111=[~UNUSED3~] -OutputSigType111=Digital -OutputCue112=[~UNUSED2~] -OutputSigType112=Digital|Analog|Serial|String -OutputCue2012=[~EndGroup~]Enable -OutputSigType2012=Digital -OutputCue2013=[~BeginGroup~]Visible -OutputSigType2013=Digital -OutputCue2014=[~UNUSED3~] -OutputSigType2014=Digital -OutputCue2015=[~UNUSED3~] -OutputSigType2015=Digital -OutputCue2016=[~UNUSED3~] -OutputSigType2016=Digital -OutputCue2017=[~UNUSED3~] -OutputSigType2017=Digital -OutputCue2018=[~UNUSED3~] -OutputSigType2018=Digital -OutputCue2019=[~UNUSED3~] -OutputSigType2019=Digital -OutputCue2020=[~UNUSED3~] -OutputSigType2020=Digital -OutputCue2021=[~UNUSED3~] -OutputSigType2021=Digital -OutputCue2022=[~UNUSED3~] -OutputSigType2022=Digital -OutputCue2023=[~UNUSED3~] -OutputSigType2023=Digital -OutputCue2024=[~UNUSED3~] -OutputSigType2024=Digital -OutputCue2025=[~UNUSED3~] -OutputSigType2025=Digital -OutputCue2026=[~UNUSED3~] -OutputSigType2026=Digital -OutputCue2027=[~UNUSED3~] -OutputSigType2027=Digital -OutputCue2028=[~UNUSED3~] -OutputSigType2028=Digital -OutputCue2029=[~UNUSED3~] -OutputSigType2029=Digital -OutputCue2030=[~UNUSED3~] -OutputSigType2030=Digital -OutputCue2031=[~UNUSED3~] -OutputSigType2031=Digital -OutputCue2032=[~UNUSED3~] -OutputSigType2032=Digital -OutputCue2033=[~UNUSED3~] -OutputSigType2033=Digital -OutputCue2034=[~UNUSED3~] -OutputSigType2034=Digital -OutputCue2035=[~UNUSED3~] -OutputSigType2035=Digital -OutputCue2036=[~UNUSED3~] -OutputSigType2036=Digital -OutputCue2037=[~UNUSED3~] -OutputSigType2037=Digital -OutputCue2038=[~UNUSED3~] -OutputSigType2038=Digital -OutputCue2039=[~UNUSED3~] -OutputSigType2039=Digital -OutputCue2040=[~UNUSED3~] -OutputSigType2040=Digital -OutputCue2041=[~UNUSED3~] -OutputSigType2041=Digital -OutputCue2042=[~UNUSED3~] -OutputSigType2042=Digital -OutputCue2043=[~UNUSED3~] -OutputSigType2043=Digital -OutputCue2044=[~UNUSED3~] -OutputSigType2044=Digital -OutputCue2045=[~UNUSED3~] -OutputSigType2045=Digital -OutputCue2046=[~UNUSED3~] -OutputSigType2046=Digital -OutputCue2047=[~UNUSED3~] -OutputSigType2047=Digital -OutputCue2048=[~UNUSED3~] -OutputSigType2048=Digital -OutputCue2049=[~UNUSED3~] -OutputSigType2049=Digital -OutputCue2050=[~UNUSED3~] -OutputSigType2050=Digital -OutputCue2051=[~UNUSED3~] -OutputSigType2051=Digital -OutputCue2052=[~UNUSED3~] -OutputSigType2052=Digital -OutputCue2053=[~UNUSED3~] -OutputSigType2053=Digital -OutputCue2054=[~UNUSED3~] -OutputSigType2054=Digital -OutputCue2055=[~UNUSED3~] -OutputSigType2055=Digital -OutputCue2056=[~UNUSED3~] -OutputSigType2056=Digital -OutputCue2057=[~UNUSED3~] -OutputSigType2057=Digital -OutputCue2058=[~UNUSED3~] -OutputSigType2058=Digital -OutputCue2059=[~UNUSED3~] -OutputSigType2059=Digital -OutputCue2060=[~UNUSED3~] -OutputSigType2060=Digital -OutputCue2061=[~UNUSED3~] -OutputSigType2061=Digital -OutputCue2062=[~UNUSED3~] -OutputSigType2062=Digital -OutputCue2063=[~UNUSED3~] -OutputSigType2063=Digital -OutputCue2064=[~UNUSED3~] -OutputSigType2064=Digital -OutputCue2065=[~UNUSED3~] -OutputSigType2065=Digital -OutputCue2066=[~UNUSED3~] -OutputSigType2066=Digital -OutputCue2067=[~UNUSED3~] -OutputSigType2067=Digital -OutputCue2068=[~UNUSED3~] -OutputSigType2068=Digital -OutputCue2069=[~UNUSED3~] -OutputSigType2069=Digital -OutputCue2070=[~UNUSED3~] -OutputSigType2070=Digital -OutputCue2071=[~UNUSED3~] -OutputSigType2071=Digital -OutputCue2072=[~UNUSED3~] -OutputSigType2072=Digital -OutputCue2073=[~UNUSED3~] -OutputSigType2073=Digital -OutputCue2074=[~UNUSED3~] -OutputSigType2074=Digital -OutputCue2075=[~UNUSED3~] -OutputSigType2075=Digital -OutputCue2076=[~UNUSED3~] -OutputSigType2076=Digital -OutputCue2077=[~UNUSED3~] -OutputSigType2077=Digital -OutputCue2078=[~UNUSED3~] -OutputSigType2078=Digital -OutputCue2079=[~UNUSED3~] -OutputSigType2079=Digital -OutputCue2080=[~UNUSED3~] -OutputSigType2080=Digital -OutputCue2081=[~UNUSED3~] -OutputSigType2081=Digital -OutputCue2082=[~UNUSED3~] -OutputSigType2082=Digital -OutputCue2083=[~UNUSED3~] -OutputSigType2083=Digital -OutputCue2084=[~UNUSED3~] -OutputSigType2084=Digital -OutputCue2085=[~UNUSED3~] -OutputSigType2085=Digital -OutputCue2086=[~UNUSED3~] -OutputSigType2086=Digital -OutputCue2087=[~UNUSED3~] -OutputSigType2087=Digital -OutputCue2088=[~UNUSED3~] -OutputSigType2088=Digital -OutputCue2089=[~UNUSED3~] -OutputSigType2089=Digital -OutputCue2090=[~UNUSED3~] -OutputSigType2090=Digital -OutputCue2091=[~UNUSED3~] -OutputSigType2091=Digital -OutputCue2092=[~UNUSED3~] -OutputSigType2092=Digital -OutputCue2093=[~UNUSED3~] -OutputSigType2093=Digital -OutputCue2094=[~UNUSED3~] -OutputSigType2094=Digital -OutputCue2095=[~UNUSED3~] -OutputSigType2095=Digital -OutputCue2096=[~UNUSED3~] -OutputSigType2096=Digital -OutputCue2097=[~UNUSED3~] -OutputSigType2097=Digital -OutputCue2098=[~UNUSED3~] -OutputSigType2098=Digital -OutputCue2099=[~UNUSED3~] -OutputSigType2099=Digital -OutputCue2100=[~UNUSED3~] -OutputSigType2100=Digital -OutputCue2101=[~UNUSED3~] -OutputSigType2101=Digital -OutputCue2102=[~UNUSED3~] -OutputSigType2102=Digital -OutputCue2103=[~UNUSED3~] -OutputSigType2103=Digital -OutputCue2104=[~UNUSED3~] -OutputSigType2104=Digital -OutputCue2105=[~UNUSED3~] -OutputSigType2105=Digital -OutputCue2106=[~UNUSED3~] -OutputSigType2106=Digital -OutputCue2107=[~UNUSED3~] -OutputSigType2107=Digital -OutputCue2108=[~UNUSED3~] -OutputSigType2108=Digital -OutputCue2109=[~UNUSED3~] -OutputSigType2109=Digital -OutputCue2110=[~UNUSED3~] -OutputSigType2110=Digital -OutputCue2111=[~UNUSED3~] -OutputSigType2111=Digital -OutputCue2112=[~UNUSED3~] -OutputSigType2112=Digital -OutputCue2113=[~UNUSED3~] -OutputSigType2113=Digital -OutputCue2114=[~UNUSED2~] -OutputSigType2114=Digital|Analog|Serial|String -OutputCue4014=[~EndGroup~]Visible -OutputSigType4014=Digital -OutputCue4015=[~BeginGroup~]Press -OutputSigType4015=Digital -OutputCue4016=press1 -OutputSigType4016=Digital -OutputCue4017=press2 -OutputSigType4017=Digital -OutputCue4018=press3 -OutputSigType4018=Digital -OutputCue4019=press4 -OutputSigType4019=Digital -OutputCue4020=press5 -OutputSigType4020=Digital -OutputCue4021=press6 -OutputSigType4021=Digital -OutputCue4022=press7 -OutputSigType4022=Digital -OutputCue4023=press8 -OutputSigType4023=Digital -OutputCue4024=press9 -OutputSigType4024=Digital -OutputCue4025=press10 -OutputSigType4025=Digital -OutputCue4026=press11 -OutputSigType4026=Digital -OutputCue4027=press12 -OutputSigType4027=Digital -OutputCue4028=press13 -OutputSigType4028=Digital -OutputCue4029=press14 -OutputSigType4029=Digital -OutputCue4030=press15 -OutputSigType4030=Digital -OutputCue4031=press16 -OutputSigType4031=Digital -OutputCue4032=press17 -OutputSigType4032=Digital -OutputCue4033=press18 -OutputSigType4033=Digital -OutputCue4034=press19 -OutputSigType4034=Digital -OutputCue4035=press20 -OutputSigType4035=Digital -OutputCue4036=press21 -OutputSigType4036=Digital -OutputCue4037=press22 -OutputSigType4037=Digital -OutputCue4038=press23 -OutputSigType4038=Digital -OutputCue4039=press24 -OutputSigType4039=Digital -OutputCue4040=press25 -OutputSigType4040=Digital -OutputCue4041=press26 -OutputSigType4041=Digital -OutputCue4042=press27 -OutputSigType4042=Digital -OutputCue4043=press28 -OutputSigType4043=Digital -OutputCue4044=press29 -OutputSigType4044=Digital -OutputCue4045=press30 -OutputSigType4045=Digital -OutputCue4046=press31 -OutputSigType4046=Digital -OutputCue4047=press32 -OutputSigType4047=Digital -OutputCue4048=press33 -OutputSigType4048=Digital -OutputCue4049=press34 -OutputSigType4049=Digital -OutputCue4050=press35 -OutputSigType4050=Digital -OutputCue4051=press36 -OutputSigType4051=Digital -OutputCue4052=press37 -OutputSigType4052=Digital -OutputCue4053=press38 -OutputSigType4053=Digital -OutputCue4054=press39 -OutputSigType4054=Digital -OutputCue4055=press40 -OutputSigType4055=Digital -OutputCue4056=press41 -OutputSigType4056=Digital -OutputCue4057=press42 -OutputSigType4057=Digital -OutputCue4058=press43 -OutputSigType4058=Digital -OutputCue4059=press44 -OutputSigType4059=Digital -OutputCue4060=press45 -OutputSigType4060=Digital -OutputCue4061=press46 -OutputSigType4061=Digital -OutputCue4062=press47 -OutputSigType4062=Digital -OutputCue4063=press48 -OutputSigType4063=Digital -OutputCue4064=press49 -OutputSigType4064=Digital -OutputCue4065=press50 -OutputSigType4065=Digital -OutputCue4066=press51 -OutputSigType4066=Digital -OutputCue4067=press52 -OutputSigType4067=Digital -OutputCue4068=press53 -OutputSigType4068=Digital -OutputCue4069=press54 -OutputSigType4069=Digital -OutputCue4070=press55 -OutputSigType4070=Digital -OutputCue4071=press56 -OutputSigType4071=Digital -OutputCue4072=press57 -OutputSigType4072=Digital -OutputCue4073=press58 -OutputSigType4073=Digital -OutputCue4074=press59 -OutputSigType4074=Digital -OutputCue4075=press60 -OutputSigType4075=Digital -OutputCue4076=press61 -OutputSigType4076=Digital -OutputCue4077=press62 -OutputSigType4077=Digital -OutputCue4078=press63 -OutputSigType4078=Digital -OutputCue4079=press64 -OutputSigType4079=Digital -OutputCue4080=press65 -OutputSigType4080=Digital -OutputCue4081=press66 -OutputSigType4081=Digital -OutputCue4082=press67 -OutputSigType4082=Digital -OutputCue4083=press68 -OutputSigType4083=Digital -OutputCue4084=press69 -OutputSigType4084=Digital -OutputCue4085=press70 -OutputSigType4085=Digital -OutputCue4086=press71 -OutputSigType4086=Digital -OutputCue4087=press72 -OutputSigType4087=Digital -OutputCue4088=press73 -OutputSigType4088=Digital -OutputCue4089=press74 -OutputSigType4089=Digital -OutputCue4090=press75 -OutputSigType4090=Digital -OutputCue4091=press76 -OutputSigType4091=Digital -OutputCue4092=press77 -OutputSigType4092=Digital -OutputCue4093=press78 -OutputSigType4093=Digital -OutputCue4094=press79 -OutputSigType4094=Digital -OutputCue4095=press80 -OutputSigType4095=Digital -OutputCue4096=press81 -OutputSigType4096=Digital -OutputCue4097=press82 -OutputSigType4097=Digital -OutputCue4098=press83 -OutputSigType4098=Digital -OutputCue4099=press84 -OutputSigType4099=Digital -OutputCue4100=press85 -OutputSigType4100=Digital -OutputCue4101=press86 -OutputSigType4101=Digital -OutputCue4102=press87 -OutputSigType4102=Digital -OutputCue4103=press88 -OutputSigType4103=Digital -OutputCue4104=press89 -OutputSigType4104=Digital -OutputCue4105=press90 -OutputSigType4105=Digital -OutputCue4106=press91 -OutputSigType4106=Digital -OutputCue4107=press92 -OutputSigType4107=Digital -OutputCue4108=press93 -OutputSigType4108=Digital -OutputCue4109=press94 -OutputSigType4109=Digital -OutputCue4110=press95 -OutputSigType4110=Digital -OutputCue4111=press96 -OutputSigType4111=Digital -OutputCue4112=press97 -OutputSigType4112=Digital -OutputCue4113=press98 -OutputSigType4113=Digital -OutputCue4114=press99 -OutputSigType4114=Digital -OutputCue4115=press100 -OutputSigType4115=Digital -OutputCue4116=press101 -OutputSigType4116=Digital -OutputCue4117=press102 -OutputSigType4117=Digital -OutputCue4118=press103 -OutputSigType4118=Digital -OutputCue4119=press104 -OutputSigType4119=Digital -OutputCue4120=press105 -OutputSigType4120=Digital -OutputCue4121=press106 -OutputSigType4121=Digital -OutputCue4122=press107 -OutputSigType4122=Digital -OutputCue4123=press108 -OutputSigType4123=Digital -OutputCue4124=press109 -OutputSigType4124=Digital -OutputCue4125=press110 -OutputSigType4125=Digital -OutputCue4126=press111 -OutputSigType4126=Digital -OutputCue4127=press112 -OutputSigType4127=Digital -OutputCue4128=press113 -OutputSigType4128=Digital -OutputCue4129=press114 -OutputSigType4129=Digital -OutputCue4130=press115 -OutputSigType4130=Digital -OutputCue4131=press116 -OutputSigType4131=Digital -OutputCue4132=press117 -OutputSigType4132=Digital -OutputCue4133=press118 -OutputSigType4133=Digital -OutputCue4134=press119 -OutputSigType4134=Digital -OutputCue4135=press120 -OutputSigType4135=Digital -OutputCue4136=press121 -OutputSigType4136=Digital -OutputCue4137=press122 -OutputSigType4137=Digital -OutputCue4138=press123 -OutputSigType4138=Digital -OutputCue4139=press124 -OutputSigType4139=Digital -OutputCue4140=press125 -OutputSigType4140=Digital -OutputCue4141=press126 -OutputSigType4141=Digital -OutputCue4142=press127 -OutputSigType4142=Digital -OutputCue4143=press128 -OutputSigType4143=Digital -OutputCue4144=press129 -OutputSigType4144=Digital -OutputCue4145=press130 -OutputSigType4145=Digital -OutputCue4146=press131 -OutputSigType4146=Digital -OutputCue4147=press132 -OutputSigType4147=Digital -OutputCue4148=press133 -OutputSigType4148=Digital -OutputCue4149=press134 -OutputSigType4149=Digital -OutputCue4150=press135 -OutputSigType4150=Digital -OutputCue4151=press136 -OutputSigType4151=Digital -OutputCue4152=press137 -OutputSigType4152=Digital -OutputCue4153=press138 -OutputSigType4153=Digital -OutputCue4154=press139 -OutputSigType4154=Digital -OutputCue4155=press140 -OutputSigType4155=Digital -OutputCue4156=press141 -OutputSigType4156=Digital -OutputCue4157=press142 -OutputSigType4157=Digital -OutputCue4158=press143 -OutputSigType4158=Digital -OutputCue4159=press144 -OutputSigType4159=Digital -OutputCue4160=press145 -OutputSigType4160=Digital -OutputCue4161=press146 -OutputSigType4161=Digital -OutputCue4162=press147 -OutputSigType4162=Digital -OutputCue4163=press148 -OutputSigType4163=Digital -OutputCue4164=press149 -OutputSigType4164=Digital -OutputCue4165=press150 -OutputSigType4165=Digital -OutputCue4166=press151 -OutputSigType4166=Digital -OutputCue4167=press152 -OutputSigType4167=Digital -OutputCue4168=press153 -OutputSigType4168=Digital -OutputCue4169=press154 -OutputSigType4169=Digital -OutputCue4170=press155 -OutputSigType4170=Digital -OutputCue4171=press156 -OutputSigType4171=Digital -OutputCue4172=press157 -OutputSigType4172=Digital -OutputCue4173=press158 -OutputSigType4173=Digital -OutputCue4174=press159 -OutputSigType4174=Digital -OutputCue4175=press160 -OutputSigType4175=Digital -OutputCue4176=press161 -OutputSigType4176=Digital -OutputCue4177=press162 -OutputSigType4177=Digital -OutputCue4178=press163 -OutputSigType4178=Digital -OutputCue4179=press164 -OutputSigType4179=Digital -OutputCue4180=press165 -OutputSigType4180=Digital -OutputCue4181=press166 -OutputSigType4181=Digital -OutputCue4182=press167 -OutputSigType4182=Digital -OutputCue4183=press168 -OutputSigType4183=Digital -OutputCue4184=press169 -OutputSigType4184=Digital -OutputCue4185=press170 -OutputSigType4185=Digital -OutputCue4186=press171 -OutputSigType4186=Digital -OutputCue4187=press172 -OutputSigType4187=Digital -OutputCue4188=press173 -OutputSigType4188=Digital -OutputCue4189=press174 -OutputSigType4189=Digital -OutputCue4190=press175 -OutputSigType4190=Digital -OutputCue4191=press176 -OutputSigType4191=Digital -OutputCue4192=press177 -OutputSigType4192=Digital -OutputCue4193=press178 -OutputSigType4193=Digital -OutputCue4194=press179 -OutputSigType4194=Digital -OutputCue4195=press180 -OutputSigType4195=Digital -OutputCue4196=press181 -OutputSigType4196=Digital -OutputCue4197=press182 -OutputSigType4197=Digital -OutputCue4198=press183 -OutputSigType4198=Digital -OutputCue4199=press184 -OutputSigType4199=Digital -OutputCue4200=press185 -OutputSigType4200=Digital -OutputCue4201=press186 -OutputSigType4201=Digital -OutputCue4202=press187 -OutputSigType4202=Digital -OutputCue4203=press188 -OutputSigType4203=Digital -OutputCue4204=press189 -OutputSigType4204=Digital -OutputCue4205=press190 -OutputSigType4205=Digital -OutputCue4206=press191 -OutputSigType4206=Digital -OutputCue4207=press192 -OutputSigType4207=Digital -OutputCue4208=press193 -OutputSigType4208=Digital -OutputCue4209=press194 -OutputSigType4209=Digital -OutputCue4210=press195 -OutputSigType4210=Digital -OutputCue4211=press196 -OutputSigType4211=Digital -OutputCue4212=press197 -OutputSigType4212=Digital -OutputCue4213=press198 -OutputSigType4213=Digital -OutputCue4214=press199 -OutputSigType4214=Digital -OutputCue4215=press200 -OutputSigType4215=Digital -OutputCue4216=press201 -OutputSigType4216=Digital -OutputCue4217=press202 -OutputSigType4217=Digital -OutputCue4218=press203 -OutputSigType4218=Digital -OutputCue4219=press204 -OutputSigType4219=Digital -OutputCue4220=press205 -OutputSigType4220=Digital -OutputCue4221=press206 -OutputSigType4221=Digital -OutputCue4222=press207 -OutputSigType4222=Digital -OutputCue4223=press208 -OutputSigType4223=Digital -OutputCue4224=press209 -OutputSigType4224=Digital -OutputCue4225=press210 -OutputSigType4225=Digital -OutputCue4226=press211 -OutputSigType4226=Digital -OutputCue4227=press212 -OutputSigType4227=Digital -OutputCue4228=press213 -OutputSigType4228=Digital -OutputCue4229=press214 -OutputSigType4229=Digital -OutputCue4230=press215 -OutputSigType4230=Digital -OutputCue4231=press216 -OutputSigType4231=Digital -OutputCue4232=press217 -OutputSigType4232=Digital -OutputCue4233=press218 -OutputSigType4233=Digital -OutputCue4234=press219 -OutputSigType4234=Digital -OutputCue4235=press220 -OutputSigType4235=Digital -OutputCue4236=press221 -OutputSigType4236=Digital -OutputCue4237=press222 -OutputSigType4237=Digital -OutputCue4238=press223 -OutputSigType4238=Digital -OutputCue4239=press224 -OutputSigType4239=Digital -OutputCue4240=press225 -OutputSigType4240=Digital -OutputCue4241=press226 -OutputSigType4241=Digital -OutputCue4242=press227 -OutputSigType4242=Digital -OutputCue4243=press228 -OutputSigType4243=Digital -OutputCue4244=press229 -OutputSigType4244=Digital -OutputCue4245=press230 -OutputSigType4245=Digital -OutputCue4246=press231 -OutputSigType4246=Digital -OutputCue4247=press232 -OutputSigType4247=Digital -OutputCue4248=press233 -OutputSigType4248=Digital -OutputCue4249=press234 -OutputSigType4249=Digital -OutputCue4250=press235 -OutputSigType4250=Digital -OutputCue4251=press236 -OutputSigType4251=Digital -OutputCue4252=press237 -OutputSigType4252=Digital -OutputCue4253=press238 -OutputSigType4253=Digital -OutputCue4254=press239 -OutputSigType4254=Digital -OutputCue4255=press240 -OutputSigType4255=Digital -OutputCue4256=press241 -OutputSigType4256=Digital -OutputCue4257=press242 -OutputSigType4257=Digital -OutputCue4258=press243 -OutputSigType4258=Digital -OutputCue4259=press244 -OutputSigType4259=Digital -OutputCue4260=press245 -OutputSigType4260=Digital -OutputCue4261=press246 -OutputSigType4261=Digital -OutputCue4262=press247 -OutputSigType4262=Digital -OutputCue4263=press248 -OutputSigType4263=Digital -OutputCue4264=press249 -OutputSigType4264=Digital -OutputCue4265=press250 -OutputSigType4265=Digital -OutputCue4266=press251 -OutputSigType4266=Digital -OutputCue4267=press252 -OutputSigType4267=Digital -OutputCue4268=press253 -OutputSigType4268=Digital -OutputCue4269=press254 -OutputSigType4269=Digital -OutputCue4270=press255 -OutputSigType4270=Digital -OutputCue4271=press256 -OutputSigType4271=Digital -OutputCue4272=press257 -OutputSigType4272=Digital -OutputCue4273=press258 -OutputSigType4273=Digital -OutputCue4274=press259 -OutputSigType4274=Digital -OutputCue4275=press260 -OutputSigType4275=Digital -OutputCue4276=press261 -OutputSigType4276=Digital -OutputCue4277=press262 -OutputSigType4277=Digital -OutputCue4278=press263 -OutputSigType4278=Digital -OutputCue4279=press264 -OutputSigType4279=Digital -OutputCue4280=press265 -OutputSigType4280=Digital -OutputCue4281=press266 -OutputSigType4281=Digital -OutputCue4282=press267 -OutputSigType4282=Digital -OutputCue4283=press268 -OutputSigType4283=Digital -OutputCue4284=press269 -OutputSigType4284=Digital -OutputCue4285=press270 -OutputSigType4285=Digital -OutputCue4286=press271 -OutputSigType4286=Digital -OutputCue4287=press272 -OutputSigType4287=Digital -OutputCue4288=press273 -OutputSigType4288=Digital -OutputCue4289=press274 -OutputSigType4289=Digital -OutputCue4290=press275 -OutputSigType4290=Digital -OutputCue4291=press276 -OutputSigType4291=Digital -OutputCue4292=press277 -OutputSigType4292=Digital -OutputCue4293=press278 -OutputSigType4293=Digital -OutputCue4294=press279 -OutputSigType4294=Digital -OutputCue4295=press280 -OutputSigType4295=Digital -OutputCue4296=press281 -OutputSigType4296=Digital -OutputCue4297=press282 -OutputSigType4297=Digital -OutputCue4298=press283 -OutputSigType4298=Digital -OutputCue4299=press284 -OutputSigType4299=Digital -OutputCue4300=press285 -OutputSigType4300=Digital -OutputCue4301=press286 -OutputSigType4301=Digital -OutputCue4302=press287 -OutputSigType4302=Digital -OutputCue4303=press288 -OutputSigType4303=Digital -OutputCue4304=press289 -OutputSigType4304=Digital -OutputCue4305=press290 -OutputSigType4305=Digital -OutputCue4306=press291 -OutputSigType4306=Digital -OutputCue4307=press292 -OutputSigType4307=Digital -OutputCue4308=press293 -OutputSigType4308=Digital -OutputCue4309=press294 -OutputSigType4309=Digital -OutputCue4310=press295 -OutputSigType4310=Digital -OutputCue4311=press296 -OutputSigType4311=Digital -OutputCue4312=press297 -OutputSigType4312=Digital -OutputCue4313=press298 -OutputSigType4313=Digital -OutputCue4314=press299 -OutputSigType4314=Digital -OutputCue4315=press300 -OutputSigType4315=Digital -OutputCue4316=[~EndGroup~]Press -OutputSigType4316=Digital -InputList2Cue1=[~UNUSED3~] -InputList2SigType1=Analog -InputList2Cue2=Scroll To Item -InputList2SigType2=Analog -InputList2Cue3=Set Number of Items -InputList2SigType3=Analog -OutputList2Cue1=Item Clicked -OutputList2SigType1=Analog -OutputList2Cue2=[~UNUSED3~] -OutputList2SigType2=Analog -OutputList2Cue3=[~UNUSED3~] -OutputList2SigType3=Analog -InputList3Cue1=[~UNUSED2~] -InputList3SigType1=Serial -InputList3Cue2=[~UNUSED2~] -InputList3SigType2=Serial -InputList3Cue3=[~UNUSED2~] -InputList3SigType3=Serial -InputList3Cue4=[~UNUSED2~] -InputList3SigType4=Serial -InputList3Cue5=[~UNUSED2~] -InputList3SigType5=Serial -InputList3Cue6=[~UNUSED2~] -InputList3SigType6=Serial -InputList3Cue7=[~UNUSED2~] -InputList3SigType7=Serial -InputList3Cue8=[~UNUSED2~] -InputList3SigType8=Serial -InputList3Cue9=[~UNUSED2~] -InputList3SigType9=Serial -InputList3Cue10=[~UNUSED2~] -InputList3SigType10=Serial -InputList3Cue11=[~BeginGroup~]text-o -InputList3SigType11=Serial -InputList3Cue12=text-o1 -InputList3SigType12=Serial -InputList3Cue13=text-o2 -InputList3SigType13=Serial -InputList3Cue14=text-o3 -InputList3SigType14=Serial -InputList3Cue15=text-o4 -InputList3SigType15=Serial -InputList3Cue16=text-o5 -InputList3SigType16=Serial -InputList3Cue17=text-o6 -InputList3SigType17=Serial -InputList3Cue18=text-o7 -InputList3SigType18=Serial -InputList3Cue19=text-o8 -InputList3SigType19=Serial -InputList3Cue20=text-o9 -InputList3SigType20=Serial -InputList3Cue21=text-o10 -InputList3SigType21=Serial -InputList3Cue22=text-o11 -InputList3SigType22=Serial -InputList3Cue23=text-o12 -InputList3SigType23=Serial -InputList3Cue24=text-o13 -InputList3SigType24=Serial -InputList3Cue25=text-o14 -InputList3SigType25=Serial -InputList3Cue26=text-o15 -InputList3SigType26=Serial -InputList3Cue27=text-o16 -InputList3SigType27=Serial -InputList3Cue28=text-o17 -InputList3SigType28=Serial -InputList3Cue29=text-o18 -InputList3SigType29=Serial -InputList3Cue30=text-o19 -InputList3SigType30=Serial -InputList3Cue31=text-o20 -InputList3SigType31=Serial -InputList3Cue32=text-o21 -InputList3SigType32=Serial -InputList3Cue33=text-o22 -InputList3SigType33=Serial -InputList3Cue34=text-o23 -InputList3SigType34=Serial -InputList3Cue35=text-o24 -InputList3SigType35=Serial -InputList3Cue36=text-o25 -InputList3SigType36=Serial -InputList3Cue37=text-o26 -InputList3SigType37=Serial -InputList3Cue38=text-o27 -InputList3SigType38=Serial -InputList3Cue39=text-o28 -InputList3SigType39=Serial -InputList3Cue40=text-o29 -InputList3SigType40=Serial -InputList3Cue41=text-o30 -InputList3SigType41=Serial -InputList3Cue42=text-o31 -InputList3SigType42=Serial -InputList3Cue43=text-o32 -InputList3SigType43=Serial -InputList3Cue44=text-o33 -InputList3SigType44=Serial -InputList3Cue45=text-o34 -InputList3SigType45=Serial -InputList3Cue46=text-o35 -InputList3SigType46=Serial -InputList3Cue47=text-o36 -InputList3SigType47=Serial -InputList3Cue48=text-o37 -InputList3SigType48=Serial -InputList3Cue49=text-o38 -InputList3SigType49=Serial -InputList3Cue50=text-o39 -InputList3SigType50=Serial -InputList3Cue51=text-o40 -InputList3SigType51=Serial -InputList3Cue52=text-o41 -InputList3SigType52=Serial -InputList3Cue53=text-o42 -InputList3SigType53=Serial -InputList3Cue54=text-o43 -InputList3SigType54=Serial -InputList3Cue55=text-o44 -InputList3SigType55=Serial -InputList3Cue56=text-o45 -InputList3SigType56=Serial -InputList3Cue57=text-o46 -InputList3SigType57=Serial -InputList3Cue58=text-o47 -InputList3SigType58=Serial -InputList3Cue59=text-o48 -InputList3SigType59=Serial -InputList3Cue60=text-o49 -InputList3SigType60=Serial -InputList3Cue61=text-o50 -InputList3SigType61=Serial -InputList3Cue62=text-o51 -InputList3SigType62=Serial -InputList3Cue63=text-o52 -InputList3SigType63=Serial -InputList3Cue64=text-o53 -InputList3SigType64=Serial -InputList3Cue65=text-o54 -InputList3SigType65=Serial -InputList3Cue66=text-o55 -InputList3SigType66=Serial -InputList3Cue67=text-o56 -InputList3SigType67=Serial -InputList3Cue68=text-o57 -InputList3SigType68=Serial -InputList3Cue69=text-o58 -InputList3SigType69=Serial -InputList3Cue70=text-o59 -InputList3SigType70=Serial -InputList3Cue71=text-o60 -InputList3SigType71=Serial -InputList3Cue72=text-o61 -InputList3SigType72=Serial -InputList3Cue73=text-o62 -InputList3SigType73=Serial -InputList3Cue74=text-o63 -InputList3SigType74=Serial -InputList3Cue75=text-o64 -InputList3SigType75=Serial -InputList3Cue76=text-o65 -InputList3SigType76=Serial -InputList3Cue77=text-o66 -InputList3SigType77=Serial -InputList3Cue78=text-o67 -InputList3SigType78=Serial -InputList3Cue79=text-o68 -InputList3SigType79=Serial -InputList3Cue80=text-o69 -InputList3SigType80=Serial -InputList3Cue81=text-o70 -InputList3SigType81=Serial -InputList3Cue82=text-o71 -InputList3SigType82=Serial -InputList3Cue83=text-o72 -InputList3SigType83=Serial -InputList3Cue84=text-o73 -InputList3SigType84=Serial -InputList3Cue85=text-o74 -InputList3SigType85=Serial -InputList3Cue86=text-o75 -InputList3SigType86=Serial -InputList3Cue87=text-o76 -InputList3SigType87=Serial -InputList3Cue88=text-o77 -InputList3SigType88=Serial -InputList3Cue89=text-o78 -InputList3SigType89=Serial -InputList3Cue90=text-o79 -InputList3SigType90=Serial -InputList3Cue91=text-o80 -InputList3SigType91=Serial -InputList3Cue92=text-o81 -InputList3SigType92=Serial -InputList3Cue93=text-o82 -InputList3SigType93=Serial -InputList3Cue94=text-o83 -InputList3SigType94=Serial -InputList3Cue95=text-o84 -InputList3SigType95=Serial -InputList3Cue96=text-o85 -InputList3SigType96=Serial -InputList3Cue97=text-o86 -InputList3SigType97=Serial -InputList3Cue98=text-o87 -InputList3SigType98=Serial -InputList3Cue99=text-o88 -InputList3SigType99=Serial -InputList3Cue100=text-o89 -InputList3SigType100=Serial -InputList3Cue101=text-o90 -InputList3SigType101=Serial -InputList3Cue102=text-o91 -InputList3SigType102=Serial -InputList3Cue103=text-o92 -InputList3SigType103=Serial -InputList3Cue104=text-o93 -InputList3SigType104=Serial -InputList3Cue105=text-o94 -InputList3SigType105=Serial -InputList3Cue106=text-o95 -InputList3SigType106=Serial -InputList3Cue107=text-o96 -InputList3SigType107=Serial -InputList3Cue108=text-o97 -InputList3SigType108=Serial -InputList3Cue109=text-o98 -InputList3SigType109=Serial -InputList3Cue110=text-o99 -InputList3SigType110=Serial -InputList3Cue111=text-o100 -InputList3SigType111=Serial -InputList3Cue112=text-o101 -InputList3SigType112=Serial -InputList3Cue113=text-o102 -InputList3SigType113=Serial -InputList3Cue114=text-o103 -InputList3SigType114=Serial -InputList3Cue115=text-o104 -InputList3SigType115=Serial -InputList3Cue116=text-o105 -InputList3SigType116=Serial -InputList3Cue117=text-o106 -InputList3SigType117=Serial -InputList3Cue118=text-o107 -InputList3SigType118=Serial -InputList3Cue119=text-o108 -InputList3SigType119=Serial -InputList3Cue120=text-o109 -InputList3SigType120=Serial -InputList3Cue121=text-o110 -InputList3SigType121=Serial -InputList3Cue122=text-o111 -InputList3SigType122=Serial -InputList3Cue123=text-o112 -InputList3SigType123=Serial -InputList3Cue124=text-o113 -InputList3SigType124=Serial -InputList3Cue125=text-o114 -InputList3SigType125=Serial -InputList3Cue126=text-o115 -InputList3SigType126=Serial -InputList3Cue127=text-o116 -InputList3SigType127=Serial -InputList3Cue128=text-o117 -InputList3SigType128=Serial -InputList3Cue129=text-o118 -InputList3SigType129=Serial -InputList3Cue130=text-o119 -InputList3SigType130=Serial -InputList3Cue131=text-o120 -InputList3SigType131=Serial -InputList3Cue132=text-o121 -InputList3SigType132=Serial -InputList3Cue133=text-o122 -InputList3SigType133=Serial -InputList3Cue134=text-o123 -InputList3SigType134=Serial -InputList3Cue135=text-o124 -InputList3SigType135=Serial -InputList3Cue136=text-o125 -InputList3SigType136=Serial -InputList3Cue137=text-o126 -InputList3SigType137=Serial -InputList3Cue138=text-o127 -InputList3SigType138=Serial -InputList3Cue139=text-o128 -InputList3SigType139=Serial -InputList3Cue140=text-o129 -InputList3SigType140=Serial -InputList3Cue141=text-o130 -InputList3SigType141=Serial -InputList3Cue142=text-o131 -InputList3SigType142=Serial -InputList3Cue143=text-o132 -InputList3SigType143=Serial -InputList3Cue144=text-o133 -InputList3SigType144=Serial -InputList3Cue145=text-o134 -InputList3SigType145=Serial -InputList3Cue146=text-o135 -InputList3SigType146=Serial -InputList3Cue147=text-o136 -InputList3SigType147=Serial -InputList3Cue148=text-o137 -InputList3SigType148=Serial -InputList3Cue149=text-o138 -InputList3SigType149=Serial -InputList3Cue150=text-o139 -InputList3SigType150=Serial -InputList3Cue151=text-o140 -InputList3SigType151=Serial -InputList3Cue152=text-o141 -InputList3SigType152=Serial -InputList3Cue153=text-o142 -InputList3SigType153=Serial -InputList3Cue154=text-o143 -InputList3SigType154=Serial -InputList3Cue155=text-o144 -InputList3SigType155=Serial -InputList3Cue156=text-o145 -InputList3SigType156=Serial -InputList3Cue157=text-o146 -InputList3SigType157=Serial -InputList3Cue158=text-o147 -InputList3SigType158=Serial -InputList3Cue159=text-o148 -InputList3SigType159=Serial -InputList3Cue160=text-o149 -InputList3SigType160=Serial -InputList3Cue161=text-o150 -InputList3SigType161=Serial -InputList3Cue162=text-o151 -InputList3SigType162=Serial -InputList3Cue163=text-o152 -InputList3SigType163=Serial -InputList3Cue164=text-o153 -InputList3SigType164=Serial -InputList3Cue165=text-o154 -InputList3SigType165=Serial -InputList3Cue166=text-o155 -InputList3SigType166=Serial -InputList3Cue167=text-o156 -InputList3SigType167=Serial -InputList3Cue168=text-o157 -InputList3SigType168=Serial -InputList3Cue169=text-o158 -InputList3SigType169=Serial -InputList3Cue170=text-o159 -InputList3SigType170=Serial -InputList3Cue171=text-o160 -InputList3SigType171=Serial -InputList3Cue172=text-o161 -InputList3SigType172=Serial -InputList3Cue173=text-o162 -InputList3SigType173=Serial -InputList3Cue174=text-o163 -InputList3SigType174=Serial -InputList3Cue175=text-o164 -InputList3SigType175=Serial -InputList3Cue176=text-o165 -InputList3SigType176=Serial -InputList3Cue177=text-o166 -InputList3SigType177=Serial -InputList3Cue178=text-o167 -InputList3SigType178=Serial -InputList3Cue179=text-o168 -InputList3SigType179=Serial -InputList3Cue180=text-o169 -InputList3SigType180=Serial -InputList3Cue181=text-o170 -InputList3SigType181=Serial -InputList3Cue182=text-o171 -InputList3SigType182=Serial -InputList3Cue183=text-o172 -InputList3SigType183=Serial -InputList3Cue184=text-o173 -InputList3SigType184=Serial -InputList3Cue185=text-o174 -InputList3SigType185=Serial -InputList3Cue186=text-o175 -InputList3SigType186=Serial -InputList3Cue187=text-o176 -InputList3SigType187=Serial -InputList3Cue188=text-o177 -InputList3SigType188=Serial -InputList3Cue189=text-o178 -InputList3SigType189=Serial -InputList3Cue190=text-o179 -InputList3SigType190=Serial -InputList3Cue191=text-o180 -InputList3SigType191=Serial -InputList3Cue192=text-o181 -InputList3SigType192=Serial -InputList3Cue193=text-o182 -InputList3SigType193=Serial -InputList3Cue194=text-o183 -InputList3SigType194=Serial -InputList3Cue195=text-o184 -InputList3SigType195=Serial -InputList3Cue196=text-o185 -InputList3SigType196=Serial -InputList3Cue197=text-o186 -InputList3SigType197=Serial -InputList3Cue198=text-o187 -InputList3SigType198=Serial -InputList3Cue199=text-o188 -InputList3SigType199=Serial -InputList3Cue200=text-o189 -InputList3SigType200=Serial -InputList3Cue201=text-o190 -InputList3SigType201=Serial -InputList3Cue202=text-o191 -InputList3SigType202=Serial -InputList3Cue203=text-o192 -InputList3SigType203=Serial -InputList3Cue204=text-o193 -InputList3SigType204=Serial -InputList3Cue205=text-o194 -InputList3SigType205=Serial -InputList3Cue206=text-o195 -InputList3SigType206=Serial -InputList3Cue207=text-o196 -InputList3SigType207=Serial -InputList3Cue208=text-o197 -InputList3SigType208=Serial -InputList3Cue209=text-o198 -InputList3SigType209=Serial -InputList3Cue210=text-o199 -InputList3SigType210=Serial -InputList3Cue211=text-o200 -InputList3SigType211=Serial -InputList3Cue212=text-o201 -InputList3SigType212=Serial -InputList3Cue213=text-o202 -InputList3SigType213=Serial -InputList3Cue214=text-o203 -InputList3SigType214=Serial -InputList3Cue215=text-o204 -InputList3SigType215=Serial -InputList3Cue216=text-o205 -InputList3SigType216=Serial -InputList3Cue217=text-o206 -InputList3SigType217=Serial -InputList3Cue218=text-o207 -InputList3SigType218=Serial -InputList3Cue219=text-o208 -InputList3SigType219=Serial -InputList3Cue220=text-o209 -InputList3SigType220=Serial -InputList3Cue221=text-o210 -InputList3SigType221=Serial -InputList3Cue222=text-o211 -InputList3SigType222=Serial -InputList3Cue223=text-o212 -InputList3SigType223=Serial -InputList3Cue224=text-o213 -InputList3SigType224=Serial -InputList3Cue225=text-o214 -InputList3SigType225=Serial -InputList3Cue226=text-o215 -InputList3SigType226=Serial -InputList3Cue227=text-o216 -InputList3SigType227=Serial -InputList3Cue228=text-o217 -InputList3SigType228=Serial -InputList3Cue229=text-o218 -InputList3SigType229=Serial -InputList3Cue230=text-o219 -InputList3SigType230=Serial -InputList3Cue231=text-o220 -InputList3SigType231=Serial -InputList3Cue232=text-o221 -InputList3SigType232=Serial -InputList3Cue233=text-o222 -InputList3SigType233=Serial -InputList3Cue234=text-o223 -InputList3SigType234=Serial -InputList3Cue235=text-o224 -InputList3SigType235=Serial -InputList3Cue236=text-o225 -InputList3SigType236=Serial -InputList3Cue237=text-o226 -InputList3SigType237=Serial -InputList3Cue238=text-o227 -InputList3SigType238=Serial -InputList3Cue239=text-o228 -InputList3SigType239=Serial -InputList3Cue240=text-o229 -InputList3SigType240=Serial -InputList3Cue241=text-o230 -InputList3SigType241=Serial -InputList3Cue242=text-o231 -InputList3SigType242=Serial -InputList3Cue243=text-o232 -InputList3SigType243=Serial -InputList3Cue244=text-o233 -InputList3SigType244=Serial -InputList3Cue245=text-o234 -InputList3SigType245=Serial -InputList3Cue246=text-o235 -InputList3SigType246=Serial -InputList3Cue247=text-o236 -InputList3SigType247=Serial -InputList3Cue248=text-o237 -InputList3SigType248=Serial -InputList3Cue249=text-o238 -InputList3SigType249=Serial -InputList3Cue250=text-o239 -InputList3SigType250=Serial -InputList3Cue251=text-o240 -InputList3SigType251=Serial -InputList3Cue252=text-o241 -InputList3SigType252=Serial -InputList3Cue253=text-o242 -InputList3SigType253=Serial -InputList3Cue254=text-o243 -InputList3SigType254=Serial -InputList3Cue255=text-o244 -InputList3SigType255=Serial -InputList3Cue256=text-o245 -InputList3SigType256=Serial -InputList3Cue257=text-o246 -InputList3SigType257=Serial -InputList3Cue258=text-o247 -InputList3SigType258=Serial -InputList3Cue259=text-o248 -InputList3SigType259=Serial -InputList3Cue260=text-o249 -InputList3SigType260=Serial -InputList3Cue261=text-o250 -InputList3SigType261=Serial -InputList3Cue262=text-o251 -InputList3SigType262=Serial -InputList3Cue263=text-o252 -InputList3SigType263=Serial -InputList3Cue264=text-o253 -InputList3SigType264=Serial -InputList3Cue265=text-o254 -InputList3SigType265=Serial -InputList3Cue266=text-o255 -InputList3SigType266=Serial -InputList3Cue267=text-o256 -InputList3SigType267=Serial -InputList3Cue268=text-o257 -InputList3SigType268=Serial -InputList3Cue269=text-o258 -InputList3SigType269=Serial -InputList3Cue270=text-o259 -InputList3SigType270=Serial -InputList3Cue271=text-o260 -InputList3SigType271=Serial -InputList3Cue272=text-o261 -InputList3SigType272=Serial -InputList3Cue273=text-o262 -InputList3SigType273=Serial -InputList3Cue274=text-o263 -InputList3SigType274=Serial -InputList3Cue275=text-o264 -InputList3SigType275=Serial -InputList3Cue276=text-o265 -InputList3SigType276=Serial -InputList3Cue277=text-o266 -InputList3SigType277=Serial -InputList3Cue278=text-o267 -InputList3SigType278=Serial -InputList3Cue279=text-o268 -InputList3SigType279=Serial -InputList3Cue280=text-o269 -InputList3SigType280=Serial -InputList3Cue281=text-o270 -InputList3SigType281=Serial -InputList3Cue282=text-o271 -InputList3SigType282=Serial -InputList3Cue283=text-o272 -InputList3SigType283=Serial -InputList3Cue284=text-o273 -InputList3SigType284=Serial -InputList3Cue285=text-o274 -InputList3SigType285=Serial -InputList3Cue286=text-o275 -InputList3SigType286=Serial -InputList3Cue287=text-o276 -InputList3SigType287=Serial -InputList3Cue288=text-o277 -InputList3SigType288=Serial -InputList3Cue289=text-o278 -InputList3SigType289=Serial -InputList3Cue290=text-o279 -InputList3SigType290=Serial -InputList3Cue291=text-o280 -InputList3SigType291=Serial -InputList3Cue292=text-o281 -InputList3SigType292=Serial -InputList3Cue293=text-o282 -InputList3SigType293=Serial -InputList3Cue294=text-o283 -InputList3SigType294=Serial -InputList3Cue295=text-o284 -InputList3SigType295=Serial -InputList3Cue296=text-o285 -InputList3SigType296=Serial -InputList3Cue297=text-o286 -InputList3SigType297=Serial -InputList3Cue298=text-o287 -InputList3SigType298=Serial -InputList3Cue299=text-o288 -InputList3SigType299=Serial -InputList3Cue300=text-o289 -InputList3SigType300=Serial -InputList3Cue301=text-o290 -InputList3SigType301=Serial -InputList3Cue302=text-o291 -InputList3SigType302=Serial -InputList3Cue303=text-o292 -InputList3SigType303=Serial -InputList3Cue304=text-o293 -InputList3SigType304=Serial -InputList3Cue305=text-o294 -InputList3SigType305=Serial -InputList3Cue306=text-o295 -InputList3SigType306=Serial -InputList3Cue307=text-o296 -InputList3SigType307=Serial -InputList3Cue308=text-o297 -InputList3SigType308=Serial -InputList3Cue309=text-o298 -InputList3SigType309=Serial -InputList3Cue310=text-o299 -InputList3SigType310=Serial -InputList3Cue311=text-o300 -InputList3SigType311=Serial -InputList3Cue312=text-o301 -InputList3SigType312=Serial -InputList3Cue313=text-o302 -InputList3SigType313=Serial -InputList3Cue314=text-o303 -InputList3SigType314=Serial -InputList3Cue315=text-o304 -InputList3SigType315=Serial -InputList3Cue316=text-o305 -InputList3SigType316=Serial -InputList3Cue317=text-o306 -InputList3SigType317=Serial -InputList3Cue318=text-o307 -InputList3SigType318=Serial -InputList3Cue319=text-o308 -InputList3SigType319=Serial -InputList3Cue320=text-o309 -InputList3SigType320=Serial -InputList3Cue321=text-o310 -InputList3SigType321=Serial -InputList3Cue322=text-o311 -InputList3SigType322=Serial -InputList3Cue323=text-o312 -InputList3SigType323=Serial -InputList3Cue324=text-o313 -InputList3SigType324=Serial -InputList3Cue325=text-o314 -InputList3SigType325=Serial -InputList3Cue326=text-o315 -InputList3SigType326=Serial -InputList3Cue327=text-o316 -InputList3SigType327=Serial -InputList3Cue328=text-o317 -InputList3SigType328=Serial -InputList3Cue329=text-o318 -InputList3SigType329=Serial -InputList3Cue330=text-o319 -InputList3SigType330=Serial -InputList3Cue331=text-o320 -InputList3SigType331=Serial -InputList3Cue332=text-o321 -InputList3SigType332=Serial -InputList3Cue333=text-o322 -InputList3SigType333=Serial -InputList3Cue334=text-o323 -InputList3SigType334=Serial -InputList3Cue335=text-o324 -InputList3SigType335=Serial -InputList3Cue336=text-o325 -InputList3SigType336=Serial -InputList3Cue337=text-o326 -InputList3SigType337=Serial -InputList3Cue338=text-o327 -InputList3SigType338=Serial -InputList3Cue339=text-o328 -InputList3SigType339=Serial -InputList3Cue340=text-o329 -InputList3SigType340=Serial -InputList3Cue341=text-o330 -InputList3SigType341=Serial -InputList3Cue342=text-o331 -InputList3SigType342=Serial -InputList3Cue343=text-o332 -InputList3SigType343=Serial -InputList3Cue344=text-o333 -InputList3SigType344=Serial -InputList3Cue345=text-o334 -InputList3SigType345=Serial -InputList3Cue346=text-o335 -InputList3SigType346=Serial -InputList3Cue347=text-o336 -InputList3SigType347=Serial -InputList3Cue348=text-o337 -InputList3SigType348=Serial -InputList3Cue349=text-o338 -InputList3SigType349=Serial -InputList3Cue350=text-o339 -InputList3SigType350=Serial -InputList3Cue351=text-o340 -InputList3SigType351=Serial -InputList3Cue352=text-o341 -InputList3SigType352=Serial -InputList3Cue353=text-o342 -InputList3SigType353=Serial -InputList3Cue354=text-o343 -InputList3SigType354=Serial -InputList3Cue355=text-o344 -InputList3SigType355=Serial -InputList3Cue356=text-o345 -InputList3SigType356=Serial -InputList3Cue357=text-o346 -InputList3SigType357=Serial -InputList3Cue358=text-o347 -InputList3SigType358=Serial -InputList3Cue359=text-o348 -InputList3SigType359=Serial -InputList3Cue360=text-o349 -InputList3SigType360=Serial -InputList3Cue361=text-o350 -InputList3SigType361=Serial -InputList3Cue362=text-o351 -InputList3SigType362=Serial -InputList3Cue363=text-o352 -InputList3SigType363=Serial -InputList3Cue364=text-o353 -InputList3SigType364=Serial -InputList3Cue365=text-o354 -InputList3SigType365=Serial -InputList3Cue366=text-o355 -InputList3SigType366=Serial -InputList3Cue367=text-o356 -InputList3SigType367=Serial -InputList3Cue368=text-o357 -InputList3SigType368=Serial -InputList3Cue369=text-o358 -InputList3SigType369=Serial -InputList3Cue370=text-o359 -InputList3SigType370=Serial -InputList3Cue371=text-o360 -InputList3SigType371=Serial -InputList3Cue372=text-o361 -InputList3SigType372=Serial -InputList3Cue373=text-o362 -InputList3SigType373=Serial -InputList3Cue374=text-o363 -InputList3SigType374=Serial -InputList3Cue375=text-o364 -InputList3SigType375=Serial -InputList3Cue376=text-o365 -InputList3SigType376=Serial -InputList3Cue377=text-o366 -InputList3SigType377=Serial -InputList3Cue378=text-o367 -InputList3SigType378=Serial -InputList3Cue379=text-o368 -InputList3SigType379=Serial -InputList3Cue380=text-o369 -InputList3SigType380=Serial -InputList3Cue381=text-o370 -InputList3SigType381=Serial -InputList3Cue382=text-o371 -InputList3SigType382=Serial -InputList3Cue383=text-o372 -InputList3SigType383=Serial -InputList3Cue384=text-o373 -InputList3SigType384=Serial -InputList3Cue385=text-o374 -InputList3SigType385=Serial -InputList3Cue386=text-o375 -InputList3SigType386=Serial -InputList3Cue387=text-o376 -InputList3SigType387=Serial -InputList3Cue388=text-o377 -InputList3SigType388=Serial -InputList3Cue389=text-o378 -InputList3SigType389=Serial -InputList3Cue390=text-o379 -InputList3SigType390=Serial -InputList3Cue391=text-o380 -InputList3SigType391=Serial -InputList3Cue392=text-o381 -InputList3SigType392=Serial -InputList3Cue393=text-o382 -InputList3SigType393=Serial -InputList3Cue394=text-o383 -InputList3SigType394=Serial -InputList3Cue395=text-o384 -InputList3SigType395=Serial -InputList3Cue396=text-o385 -InputList3SigType396=Serial -InputList3Cue397=text-o386 -InputList3SigType397=Serial -InputList3Cue398=text-o387 -InputList3SigType398=Serial -InputList3Cue399=text-o388 -InputList3SigType399=Serial -InputList3Cue400=text-o389 -InputList3SigType400=Serial -InputList3Cue401=text-o390 -InputList3SigType401=Serial -InputList3Cue402=text-o391 -InputList3SigType402=Serial -InputList3Cue403=text-o392 -InputList3SigType403=Serial -InputList3Cue404=text-o393 -InputList3SigType404=Serial -InputList3Cue405=text-o394 -InputList3SigType405=Serial -InputList3Cue406=text-o395 -InputList3SigType406=Serial -InputList3Cue407=text-o396 -InputList3SigType407=Serial -InputList3Cue408=text-o397 -InputList3SigType408=Serial -InputList3Cue409=text-o398 -InputList3SigType409=Serial -InputList3Cue410=text-o399 -InputList3SigType410=Serial -InputList3Cue411=text-o400 -InputList3SigType411=Serial -InputList3Cue412=[~EndGroup~]text-o -InputList3SigType412=Serial -OutputList3Cue1=[~UNUSED2~] -OutputList3SigType1=Serial -OutputList3Cue2=[~UNUSED2~] -OutputList3SigType2=Serial -OutputList3Cue3=[~UNUSED2~] -OutputList3SigType3=Serial -OutputList3Cue4=[~UNUSED2~] -OutputList3SigType4=Serial -OutputList3Cue5=[~UNUSED2~] -OutputList3SigType5=Serial -OutputList3Cue6=[~UNUSED2~] -OutputList3SigType6=Serial -OutputList3Cue7=[~UNUSED2~] -OutputList3SigType7=Serial -OutputList3Cue8=[~UNUSED2~] -OutputList3SigType8=Serial -OutputList3Cue9=[~UNUSED2~] -OutputList3SigType9=Serial -OutputList3Cue10=[~UNUSED2~] -OutputList3SigType10=Serial -OutputList3Cue11=[~BeginGroup~]text-i -OutputList3SigType11=Serial -OutputList3Cue12=text-i1 -OutputList3SigType12=Serial -OutputList3Cue13=text-i2 -OutputList3SigType13=Serial -OutputList3Cue14=text-i3 -OutputList3SigType14=Serial -OutputList3Cue15=text-i4 -OutputList3SigType15=Serial -OutputList3Cue16=text-i5 -OutputList3SigType16=Serial -OutputList3Cue17=text-i6 -OutputList3SigType17=Serial -OutputList3Cue18=text-i7 -OutputList3SigType18=Serial -OutputList3Cue19=text-i8 -OutputList3SigType19=Serial -OutputList3Cue20=text-i9 -OutputList3SigType20=Serial -OutputList3Cue21=text-i10 -OutputList3SigType21=Serial -OutputList3Cue22=text-i11 -OutputList3SigType22=Serial -OutputList3Cue23=text-i12 -OutputList3SigType23=Serial -OutputList3Cue24=text-i13 -OutputList3SigType24=Serial -OutputList3Cue25=text-i14 -OutputList3SigType25=Serial -OutputList3Cue26=text-i15 -OutputList3SigType26=Serial -OutputList3Cue27=text-i16 -OutputList3SigType27=Serial -OutputList3Cue28=text-i17 -OutputList3SigType28=Serial -OutputList3Cue29=text-i18 -OutputList3SigType29=Serial -OutputList3Cue30=text-i19 -OutputList3SigType30=Serial -OutputList3Cue31=text-i20 -OutputList3SigType31=Serial -OutputList3Cue32=text-i21 -OutputList3SigType32=Serial -OutputList3Cue33=text-i22 -OutputList3SigType33=Serial -OutputList3Cue34=text-i23 -OutputList3SigType34=Serial -OutputList3Cue35=text-i24 -OutputList3SigType35=Serial -OutputList3Cue36=text-i25 -OutputList3SigType36=Serial -OutputList3Cue37=text-i26 -OutputList3SigType37=Serial -OutputList3Cue38=text-i27 -OutputList3SigType38=Serial -OutputList3Cue39=text-i28 -OutputList3SigType39=Serial -OutputList3Cue40=text-i29 -OutputList3SigType40=Serial -OutputList3Cue41=text-i30 -OutputList3SigType41=Serial -OutputList3Cue42=text-i31 -OutputList3SigType42=Serial -OutputList3Cue43=text-i32 -OutputList3SigType43=Serial -OutputList3Cue44=text-i33 -OutputList3SigType44=Serial -OutputList3Cue45=text-i34 -OutputList3SigType45=Serial -OutputList3Cue46=text-i35 -OutputList3SigType46=Serial -OutputList3Cue47=text-i36 -OutputList3SigType47=Serial -OutputList3Cue48=text-i37 -OutputList3SigType48=Serial -OutputList3Cue49=text-i38 -OutputList3SigType49=Serial -OutputList3Cue50=text-i39 -OutputList3SigType50=Serial -OutputList3Cue51=text-i40 -OutputList3SigType51=Serial -OutputList3Cue52=text-i41 -OutputList3SigType52=Serial -OutputList3Cue53=text-i42 -OutputList3SigType53=Serial -OutputList3Cue54=text-i43 -OutputList3SigType54=Serial -OutputList3Cue55=text-i44 -OutputList3SigType55=Serial -OutputList3Cue56=text-i45 -OutputList3SigType56=Serial -OutputList3Cue57=text-i46 -OutputList3SigType57=Serial -OutputList3Cue58=text-i47 -OutputList3SigType58=Serial -OutputList3Cue59=text-i48 -OutputList3SigType59=Serial -OutputList3Cue60=text-i49 -OutputList3SigType60=Serial -OutputList3Cue61=text-i50 -OutputList3SigType61=Serial -OutputList3Cue62=text-i51 -OutputList3SigType62=Serial -OutputList3Cue63=text-i52 -OutputList3SigType63=Serial -OutputList3Cue64=text-i53 -OutputList3SigType64=Serial -OutputList3Cue65=text-i54 -OutputList3SigType65=Serial -OutputList3Cue66=text-i55 -OutputList3SigType66=Serial -OutputList3Cue67=text-i56 -OutputList3SigType67=Serial -OutputList3Cue68=text-i57 -OutputList3SigType68=Serial -OutputList3Cue69=text-i58 -OutputList3SigType69=Serial -OutputList3Cue70=text-i59 -OutputList3SigType70=Serial -OutputList3Cue71=text-i60 -OutputList3SigType71=Serial -OutputList3Cue72=text-i61 -OutputList3SigType72=Serial -OutputList3Cue73=text-i62 -OutputList3SigType73=Serial -OutputList3Cue74=text-i63 -OutputList3SigType74=Serial -OutputList3Cue75=text-i64 -OutputList3SigType75=Serial -OutputList3Cue76=text-i65 -OutputList3SigType76=Serial -OutputList3Cue77=text-i66 -OutputList3SigType77=Serial -OutputList3Cue78=text-i67 -OutputList3SigType78=Serial -OutputList3Cue79=text-i68 -OutputList3SigType79=Serial -OutputList3Cue80=text-i69 -OutputList3SigType80=Serial -OutputList3Cue81=text-i70 -OutputList3SigType81=Serial -OutputList3Cue82=text-i71 -OutputList3SigType82=Serial -OutputList3Cue83=text-i72 -OutputList3SigType83=Serial -OutputList3Cue84=text-i73 -OutputList3SigType84=Serial -OutputList3Cue85=text-i74 -OutputList3SigType85=Serial -OutputList3Cue86=text-i75 -OutputList3SigType86=Serial -OutputList3Cue87=text-i76 -OutputList3SigType87=Serial -OutputList3Cue88=text-i77 -OutputList3SigType88=Serial -OutputList3Cue89=text-i78 -OutputList3SigType89=Serial -OutputList3Cue90=text-i79 -OutputList3SigType90=Serial -OutputList3Cue91=text-i80 -OutputList3SigType91=Serial -OutputList3Cue92=text-i81 -OutputList3SigType92=Serial -OutputList3Cue93=text-i82 -OutputList3SigType93=Serial -OutputList3Cue94=text-i83 -OutputList3SigType94=Serial -OutputList3Cue95=text-i84 -OutputList3SigType95=Serial -OutputList3Cue96=text-i85 -OutputList3SigType96=Serial -OutputList3Cue97=text-i86 -OutputList3SigType97=Serial -OutputList3Cue98=text-i87 -OutputList3SigType98=Serial -OutputList3Cue99=text-i88 -OutputList3SigType99=Serial -OutputList3Cue100=text-i89 -OutputList3SigType100=Serial -OutputList3Cue101=text-i90 -OutputList3SigType101=Serial -OutputList3Cue102=text-i91 -OutputList3SigType102=Serial -OutputList3Cue103=text-i92 -OutputList3SigType103=Serial -OutputList3Cue104=text-i93 -OutputList3SigType104=Serial -OutputList3Cue105=text-i94 -OutputList3SigType105=Serial -OutputList3Cue106=text-i95 -OutputList3SigType106=Serial -OutputList3Cue107=text-i96 -OutputList3SigType107=Serial -OutputList3Cue108=text-i97 -OutputList3SigType108=Serial -OutputList3Cue109=text-i98 -OutputList3SigType109=Serial -OutputList3Cue110=text-i99 -OutputList3SigType110=Serial -OutputList3Cue111=text-i100 -OutputList3SigType111=Serial -OutputList3Cue112=text-i101 -OutputList3SigType112=Serial -OutputList3Cue113=text-i102 -OutputList3SigType113=Serial -OutputList3Cue114=text-i103 -OutputList3SigType114=Serial -OutputList3Cue115=text-i104 -OutputList3SigType115=Serial -OutputList3Cue116=text-i105 -OutputList3SigType116=Serial -OutputList3Cue117=text-i106 -OutputList3SigType117=Serial -OutputList3Cue118=text-i107 -OutputList3SigType118=Serial -OutputList3Cue119=text-i108 -OutputList3SigType119=Serial -OutputList3Cue120=text-i109 -OutputList3SigType120=Serial -OutputList3Cue121=text-i110 -OutputList3SigType121=Serial -OutputList3Cue122=text-i111 -OutputList3SigType122=Serial -OutputList3Cue123=text-i112 -OutputList3SigType123=Serial -OutputList3Cue124=text-i113 -OutputList3SigType124=Serial -OutputList3Cue125=text-i114 -OutputList3SigType125=Serial -OutputList3Cue126=text-i115 -OutputList3SigType126=Serial -OutputList3Cue127=text-i116 -OutputList3SigType127=Serial -OutputList3Cue128=text-i117 -OutputList3SigType128=Serial -OutputList3Cue129=text-i118 -OutputList3SigType129=Serial -OutputList3Cue130=text-i119 -OutputList3SigType130=Serial -OutputList3Cue131=text-i120 -OutputList3SigType131=Serial -OutputList3Cue132=text-i121 -OutputList3SigType132=Serial -OutputList3Cue133=text-i122 -OutputList3SigType133=Serial -OutputList3Cue134=text-i123 -OutputList3SigType134=Serial -OutputList3Cue135=text-i124 -OutputList3SigType135=Serial -OutputList3Cue136=text-i125 -OutputList3SigType136=Serial -OutputList3Cue137=text-i126 -OutputList3SigType137=Serial -OutputList3Cue138=text-i127 -OutputList3SigType138=Serial -OutputList3Cue139=text-i128 -OutputList3SigType139=Serial -OutputList3Cue140=text-i129 -OutputList3SigType140=Serial -OutputList3Cue141=text-i130 -OutputList3SigType141=Serial -OutputList3Cue142=text-i131 -OutputList3SigType142=Serial -OutputList3Cue143=text-i132 -OutputList3SigType143=Serial -OutputList3Cue144=text-i133 -OutputList3SigType144=Serial -OutputList3Cue145=text-i134 -OutputList3SigType145=Serial -OutputList3Cue146=text-i135 -OutputList3SigType146=Serial -OutputList3Cue147=text-i136 -OutputList3SigType147=Serial -OutputList3Cue148=text-i137 -OutputList3SigType148=Serial -OutputList3Cue149=text-i138 -OutputList3SigType149=Serial -OutputList3Cue150=text-i139 -OutputList3SigType150=Serial -OutputList3Cue151=text-i140 -OutputList3SigType151=Serial -OutputList3Cue152=text-i141 -OutputList3SigType152=Serial -OutputList3Cue153=text-i142 -OutputList3SigType153=Serial -OutputList3Cue154=text-i143 -OutputList3SigType154=Serial -OutputList3Cue155=text-i144 -OutputList3SigType155=Serial -OutputList3Cue156=text-i145 -OutputList3SigType156=Serial -OutputList3Cue157=text-i146 -OutputList3SigType157=Serial -OutputList3Cue158=text-i147 -OutputList3SigType158=Serial -OutputList3Cue159=text-i148 -OutputList3SigType159=Serial -OutputList3Cue160=text-i149 -OutputList3SigType160=Serial -OutputList3Cue161=text-i150 -OutputList3SigType161=Serial -OutputList3Cue162=text-i151 -OutputList3SigType162=Serial -OutputList3Cue163=text-i152 -OutputList3SigType163=Serial -OutputList3Cue164=text-i153 -OutputList3SigType164=Serial -OutputList3Cue165=text-i154 -OutputList3SigType165=Serial -OutputList3Cue166=text-i155 -OutputList3SigType166=Serial -OutputList3Cue167=text-i156 -OutputList3SigType167=Serial -OutputList3Cue168=text-i157 -OutputList3SigType168=Serial -OutputList3Cue169=text-i158 -OutputList3SigType169=Serial -OutputList3Cue170=text-i159 -OutputList3SigType170=Serial -OutputList3Cue171=text-i160 -OutputList3SigType171=Serial -OutputList3Cue172=text-i161 -OutputList3SigType172=Serial -OutputList3Cue173=text-i162 -OutputList3SigType173=Serial -OutputList3Cue174=text-i163 -OutputList3SigType174=Serial -OutputList3Cue175=text-i164 -OutputList3SigType175=Serial -OutputList3Cue176=text-i165 -OutputList3SigType176=Serial -OutputList3Cue177=text-i166 -OutputList3SigType177=Serial -OutputList3Cue178=text-i167 -OutputList3SigType178=Serial -OutputList3Cue179=text-i168 -OutputList3SigType179=Serial -OutputList3Cue180=text-i169 -OutputList3SigType180=Serial -OutputList3Cue181=text-i170 -OutputList3SigType181=Serial -OutputList3Cue182=text-i171 -OutputList3SigType182=Serial -OutputList3Cue183=text-i172 -OutputList3SigType183=Serial -OutputList3Cue184=text-i173 -OutputList3SigType184=Serial -OutputList3Cue185=text-i174 -OutputList3SigType185=Serial -OutputList3Cue186=text-i175 -OutputList3SigType186=Serial -OutputList3Cue187=text-i176 -OutputList3SigType187=Serial -OutputList3Cue188=text-i177 -OutputList3SigType188=Serial -OutputList3Cue189=text-i178 -OutputList3SigType189=Serial -OutputList3Cue190=text-i179 -OutputList3SigType190=Serial -OutputList3Cue191=text-i180 -OutputList3SigType191=Serial -OutputList3Cue192=text-i181 -OutputList3SigType192=Serial -OutputList3Cue193=text-i182 -OutputList3SigType193=Serial -OutputList3Cue194=text-i183 -OutputList3SigType194=Serial -OutputList3Cue195=text-i184 -OutputList3SigType195=Serial -OutputList3Cue196=text-i185 -OutputList3SigType196=Serial -OutputList3Cue197=text-i186 -OutputList3SigType197=Serial -OutputList3Cue198=text-i187 -OutputList3SigType198=Serial -OutputList3Cue199=text-i188 -OutputList3SigType199=Serial -OutputList3Cue200=text-i189 -OutputList3SigType200=Serial -OutputList3Cue201=text-i190 -OutputList3SigType201=Serial -OutputList3Cue202=text-i191 -OutputList3SigType202=Serial -OutputList3Cue203=text-i192 -OutputList3SigType203=Serial -OutputList3Cue204=text-i193 -OutputList3SigType204=Serial -OutputList3Cue205=text-i194 -OutputList3SigType205=Serial -OutputList3Cue206=text-i195 -OutputList3SigType206=Serial -OutputList3Cue207=text-i196 -OutputList3SigType207=Serial -OutputList3Cue208=text-i197 -OutputList3SigType208=Serial -OutputList3Cue209=text-i198 -OutputList3SigType209=Serial -OutputList3Cue210=text-i199 -OutputList3SigType210=Serial -OutputList3Cue211=text-i200 -OutputList3SigType211=Serial -OutputList3Cue212=text-i201 -OutputList3SigType212=Serial -OutputList3Cue213=text-i202 -OutputList3SigType213=Serial -OutputList3Cue214=text-i203 -OutputList3SigType214=Serial -OutputList3Cue215=text-i204 -OutputList3SigType215=Serial -OutputList3Cue216=text-i205 -OutputList3SigType216=Serial -OutputList3Cue217=text-i206 -OutputList3SigType217=Serial -OutputList3Cue218=text-i207 -OutputList3SigType218=Serial -OutputList3Cue219=text-i208 -OutputList3SigType219=Serial -OutputList3Cue220=text-i209 -OutputList3SigType220=Serial -OutputList3Cue221=text-i210 -OutputList3SigType221=Serial -OutputList3Cue222=text-i211 -OutputList3SigType222=Serial -OutputList3Cue223=text-i212 -OutputList3SigType223=Serial -OutputList3Cue224=text-i213 -OutputList3SigType224=Serial -OutputList3Cue225=text-i214 -OutputList3SigType225=Serial -OutputList3Cue226=text-i215 -OutputList3SigType226=Serial -OutputList3Cue227=text-i216 -OutputList3SigType227=Serial -OutputList3Cue228=text-i217 -OutputList3SigType228=Serial -OutputList3Cue229=text-i218 -OutputList3SigType229=Serial -OutputList3Cue230=text-i219 -OutputList3SigType230=Serial -OutputList3Cue231=text-i220 -OutputList3SigType231=Serial -OutputList3Cue232=text-i221 -OutputList3SigType232=Serial -OutputList3Cue233=text-i222 -OutputList3SigType233=Serial -OutputList3Cue234=text-i223 -OutputList3SigType234=Serial -OutputList3Cue235=text-i224 -OutputList3SigType235=Serial -OutputList3Cue236=text-i225 -OutputList3SigType236=Serial -OutputList3Cue237=text-i226 -OutputList3SigType237=Serial -OutputList3Cue238=text-i227 -OutputList3SigType238=Serial -OutputList3Cue239=text-i228 -OutputList3SigType239=Serial -OutputList3Cue240=text-i229 -OutputList3SigType240=Serial -OutputList3Cue241=text-i230 -OutputList3SigType241=Serial -OutputList3Cue242=text-i231 -OutputList3SigType242=Serial -OutputList3Cue243=text-i232 -OutputList3SigType243=Serial -OutputList3Cue244=text-i233 -OutputList3SigType244=Serial -OutputList3Cue245=text-i234 -OutputList3SigType245=Serial -OutputList3Cue246=text-i235 -OutputList3SigType246=Serial -OutputList3Cue247=text-i236 -OutputList3SigType247=Serial -OutputList3Cue248=text-i237 -OutputList3SigType248=Serial -OutputList3Cue249=text-i238 -OutputList3SigType249=Serial -OutputList3Cue250=text-i239 -OutputList3SigType250=Serial -OutputList3Cue251=text-i240 -OutputList3SigType251=Serial -OutputList3Cue252=text-i241 -OutputList3SigType252=Serial -OutputList3Cue253=text-i242 -OutputList3SigType253=Serial -OutputList3Cue254=text-i243 -OutputList3SigType254=Serial -OutputList3Cue255=text-i244 -OutputList3SigType255=Serial -OutputList3Cue256=text-i245 -OutputList3SigType256=Serial -OutputList3Cue257=text-i246 -OutputList3SigType257=Serial -OutputList3Cue258=text-i247 -OutputList3SigType258=Serial -OutputList3Cue259=text-i248 -OutputList3SigType259=Serial -OutputList3Cue260=text-i249 -OutputList3SigType260=Serial -OutputList3Cue261=text-i250 -OutputList3SigType261=Serial -OutputList3Cue262=text-i251 -OutputList3SigType262=Serial -OutputList3Cue263=text-i252 -OutputList3SigType263=Serial -OutputList3Cue264=text-i253 -OutputList3SigType264=Serial -OutputList3Cue265=text-i254 -OutputList3SigType265=Serial -OutputList3Cue266=text-i255 -OutputList3SigType266=Serial -OutputList3Cue267=text-i256 -OutputList3SigType267=Serial -OutputList3Cue268=text-i257 -OutputList3SigType268=Serial -OutputList3Cue269=text-i258 -OutputList3SigType269=Serial -OutputList3Cue270=text-i259 -OutputList3SigType270=Serial -OutputList3Cue271=text-i260 -OutputList3SigType271=Serial -OutputList3Cue272=text-i261 -OutputList3SigType272=Serial -OutputList3Cue273=text-i262 -OutputList3SigType273=Serial -OutputList3Cue274=text-i263 -OutputList3SigType274=Serial -OutputList3Cue275=text-i264 -OutputList3SigType275=Serial -OutputList3Cue276=text-i265 -OutputList3SigType276=Serial -OutputList3Cue277=text-i266 -OutputList3SigType277=Serial -OutputList3Cue278=text-i267 -OutputList3SigType278=Serial -OutputList3Cue279=text-i268 -OutputList3SigType279=Serial -OutputList3Cue280=text-i269 -OutputList3SigType280=Serial -OutputList3Cue281=text-i270 -OutputList3SigType281=Serial -OutputList3Cue282=text-i271 -OutputList3SigType282=Serial -OutputList3Cue283=text-i272 -OutputList3SigType283=Serial -OutputList3Cue284=text-i273 -OutputList3SigType284=Serial -OutputList3Cue285=text-i274 -OutputList3SigType285=Serial -OutputList3Cue286=text-i275 -OutputList3SigType286=Serial -OutputList3Cue287=text-i276 -OutputList3SigType287=Serial -OutputList3Cue288=text-i277 -OutputList3SigType288=Serial -OutputList3Cue289=text-i278 -OutputList3SigType289=Serial -OutputList3Cue290=text-i279 -OutputList3SigType290=Serial -OutputList3Cue291=text-i280 -OutputList3SigType291=Serial -OutputList3Cue292=text-i281 -OutputList3SigType292=Serial -OutputList3Cue293=text-i282 -OutputList3SigType293=Serial -OutputList3Cue294=text-i283 -OutputList3SigType294=Serial -OutputList3Cue295=text-i284 -OutputList3SigType295=Serial -OutputList3Cue296=text-i285 -OutputList3SigType296=Serial -OutputList3Cue297=text-i286 -OutputList3SigType297=Serial -OutputList3Cue298=text-i287 -OutputList3SigType298=Serial -OutputList3Cue299=text-i288 -OutputList3SigType299=Serial -OutputList3Cue300=text-i289 -OutputList3SigType300=Serial -OutputList3Cue301=text-i290 -OutputList3SigType301=Serial -OutputList3Cue302=text-i291 -OutputList3SigType302=Serial -OutputList3Cue303=text-i292 -OutputList3SigType303=Serial -OutputList3Cue304=text-i293 -OutputList3SigType304=Serial -OutputList3Cue305=text-i294 -OutputList3SigType305=Serial -OutputList3Cue306=text-i295 -OutputList3SigType306=Serial -OutputList3Cue307=text-i296 -OutputList3SigType307=Serial -OutputList3Cue308=text-i297 -OutputList3SigType308=Serial -OutputList3Cue309=text-i298 -OutputList3SigType309=Serial -OutputList3Cue310=text-i299 -OutputList3SigType310=Serial -OutputList3Cue311=text-i300 -OutputList3SigType311=Serial -OutputList3Cue312=text-i301 -OutputList3SigType312=Serial -OutputList3Cue313=text-i302 -OutputList3SigType313=Serial -OutputList3Cue314=text-i303 -OutputList3SigType314=Serial -OutputList3Cue315=text-i304 -OutputList3SigType315=Serial -OutputList3Cue316=text-i305 -OutputList3SigType316=Serial -OutputList3Cue317=text-i306 -OutputList3SigType317=Serial -OutputList3Cue318=text-i307 -OutputList3SigType318=Serial -OutputList3Cue319=text-i308 -OutputList3SigType319=Serial -OutputList3Cue320=text-i309 -OutputList3SigType320=Serial -OutputList3Cue321=text-i310 -OutputList3SigType321=Serial -OutputList3Cue322=text-i311 -OutputList3SigType322=Serial -OutputList3Cue323=text-i312 -OutputList3SigType323=Serial -OutputList3Cue324=text-i313 -OutputList3SigType324=Serial -OutputList3Cue325=text-i314 -OutputList3SigType325=Serial -OutputList3Cue326=text-i315 -OutputList3SigType326=Serial -OutputList3Cue327=text-i316 -OutputList3SigType327=Serial -OutputList3Cue328=text-i317 -OutputList3SigType328=Serial -OutputList3Cue329=text-i318 -OutputList3SigType329=Serial -OutputList3Cue330=text-i319 -OutputList3SigType330=Serial -OutputList3Cue331=text-i320 -OutputList3SigType331=Serial -OutputList3Cue332=text-i321 -OutputList3SigType332=Serial -OutputList3Cue333=text-i322 -OutputList3SigType333=Serial -OutputList3Cue334=text-i323 -OutputList3SigType334=Serial -OutputList3Cue335=text-i324 -OutputList3SigType335=Serial -OutputList3Cue336=text-i325 -OutputList3SigType336=Serial -OutputList3Cue337=text-i326 -OutputList3SigType337=Serial -OutputList3Cue338=text-i327 -OutputList3SigType338=Serial -OutputList3Cue339=text-i328 -OutputList3SigType339=Serial -OutputList3Cue340=text-i329 -OutputList3SigType340=Serial -OutputList3Cue341=text-i330 -OutputList3SigType341=Serial -OutputList3Cue342=text-i331 -OutputList3SigType342=Serial -OutputList3Cue343=text-i332 -OutputList3SigType343=Serial -OutputList3Cue344=text-i333 -OutputList3SigType344=Serial -OutputList3Cue345=text-i334 -OutputList3SigType345=Serial -OutputList3Cue346=text-i335 -OutputList3SigType346=Serial -OutputList3Cue347=text-i336 -OutputList3SigType347=Serial -OutputList3Cue348=text-i337 -OutputList3SigType348=Serial -OutputList3Cue349=text-i338 -OutputList3SigType349=Serial -OutputList3Cue350=text-i339 -OutputList3SigType350=Serial -OutputList3Cue351=text-i340 -OutputList3SigType351=Serial -OutputList3Cue352=text-i341 -OutputList3SigType352=Serial -OutputList3Cue353=text-i342 -OutputList3SigType353=Serial -OutputList3Cue354=text-i343 -OutputList3SigType354=Serial -OutputList3Cue355=text-i344 -OutputList3SigType355=Serial -OutputList3Cue356=text-i345 -OutputList3SigType356=Serial -OutputList3Cue357=text-i346 -OutputList3SigType357=Serial -OutputList3Cue358=text-i347 -OutputList3SigType358=Serial -OutputList3Cue359=text-i348 -OutputList3SigType359=Serial -OutputList3Cue360=text-i349 -OutputList3SigType360=Serial -OutputList3Cue361=text-i350 -OutputList3SigType361=Serial -OutputList3Cue362=text-i351 -OutputList3SigType362=Serial -OutputList3Cue363=text-i352 -OutputList3SigType363=Serial -OutputList3Cue364=text-i353 -OutputList3SigType364=Serial -OutputList3Cue365=text-i354 -OutputList3SigType365=Serial -OutputList3Cue366=text-i355 -OutputList3SigType366=Serial -OutputList3Cue367=text-i356 -OutputList3SigType367=Serial -OutputList3Cue368=text-i357 -OutputList3SigType368=Serial -OutputList3Cue369=text-i358 -OutputList3SigType369=Serial -OutputList3Cue370=text-i359 -OutputList3SigType370=Serial -OutputList3Cue371=text-i360 -OutputList3SigType371=Serial -OutputList3Cue372=text-i361 -OutputList3SigType372=Serial -OutputList3Cue373=text-i362 -OutputList3SigType373=Serial -OutputList3Cue374=text-i363 -OutputList3SigType374=Serial -OutputList3Cue375=text-i364 -OutputList3SigType375=Serial -OutputList3Cue376=text-i365 -OutputList3SigType376=Serial -OutputList3Cue377=text-i366 -OutputList3SigType377=Serial -OutputList3Cue378=text-i367 -OutputList3SigType378=Serial -OutputList3Cue379=text-i368 -OutputList3SigType379=Serial -OutputList3Cue380=text-i369 -OutputList3SigType380=Serial -OutputList3Cue381=text-i370 -OutputList3SigType381=Serial -OutputList3Cue382=text-i371 -OutputList3SigType382=Serial -OutputList3Cue383=text-i372 -OutputList3SigType383=Serial -OutputList3Cue384=text-i373 -OutputList3SigType384=Serial -OutputList3Cue385=text-i374 -OutputList3SigType385=Serial -OutputList3Cue386=text-i375 -OutputList3SigType386=Serial -OutputList3Cue387=text-i376 -OutputList3SigType387=Serial -OutputList3Cue388=text-i377 -OutputList3SigType388=Serial -OutputList3Cue389=text-i378 -OutputList3SigType389=Serial -OutputList3Cue390=text-i379 -OutputList3SigType390=Serial -OutputList3Cue391=text-i380 -OutputList3SigType391=Serial -OutputList3Cue392=text-i381 -OutputList3SigType392=Serial -OutputList3Cue393=text-i382 -OutputList3SigType393=Serial -OutputList3Cue394=text-i383 -OutputList3SigType394=Serial -OutputList3Cue395=text-i384 -OutputList3SigType395=Serial -OutputList3Cue396=text-i385 -OutputList3SigType396=Serial -OutputList3Cue397=text-i386 -OutputList3SigType397=Serial -OutputList3Cue398=text-i387 -OutputList3SigType398=Serial -OutputList3Cue399=text-i388 -OutputList3SigType399=Serial -OutputList3Cue400=text-i389 -OutputList3SigType400=Serial -OutputList3Cue401=text-i390 -OutputList3SigType401=Serial -OutputList3Cue402=text-i391 -OutputList3SigType402=Serial -OutputList3Cue403=text-i392 -OutputList3SigType403=Serial -OutputList3Cue404=text-i393 -OutputList3SigType404=Serial -OutputList3Cue405=text-i394 -OutputList3SigType405=Serial -OutputList3Cue406=text-i395 -OutputList3SigType406=Serial -OutputList3Cue407=text-i396 -OutputList3SigType407=Serial -OutputList3Cue408=text-i397 -OutputList3SigType408=Serial -OutputList3Cue409=text-i398 -OutputList3SigType409=Serial -OutputList3Cue410=text-i399 -OutputList3SigType410=Serial -OutputList3Cue411=text-i400 -OutputList3SigType411=Serial -OutputList3Cue412=[~EndGroup~]text-i -OutputList3SigType412=Serial -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=9 -CedH=9 -SmartObjId=10012d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=9 -Tp=1 -HD=TRUE -DV=10012d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=9 -Name=PepperDash Essentials TSW1050_[B.AV] Object - Presets_CATV Icon List Vertical.ced -;Cedver is the version of the Smart Graphics control, not the CED file format. -;If the control definition changes, increment this. -CedVer=1 -] -;================================================================================ -[ -ObjTp=Symbol -Name=PepperDash Essentials TSW1050_[B.AV] Object - DPad STB_STB DPad.ced -Hint=STB DPad (Smart Object ID=10011) -Code=10 -SGControlType=DPad -SGControlName=STB DPad -GUID=F2340FAD-85E9-4E49-B46E-15E9B096F58B -SmplCName=PepperDash Essentials TSW1050_[B.AV] Object - DPad STB_STB DPad.ced -SMWRev=4.02.19 -Expand=expand_random -HelpID=10015 -;Define the number of inputs, outputs and parameters -MinVariableInputs=5 -MaxVariableInputs=5 -MinVariableOutputs=5 -MaxVariableOutputs=5 -NumFixedParams=1 -MinVariableInputsList2=0 -MaxVariableInputsList2=0 -MinVariableOutputsList2=0 -MaxVariableOutputsList2=0 -MinVariableInputsList3=0 -MaxVariableInputsList3=0 -MinVariableOutputsList3=0 -MaxVariableOutputsList3=0 -;Define the cues, and signal types each input, output and parameter. -InputCue1=[~UNUSED3~] -InputSigType1=Digital -OutputCue1=Up -OutputSigType1=Digital -InputCue2=[~UNUSED3~] -InputSigType2=Digital -OutputCue2=Down -OutputSigType2=Digital -InputCue3=[~UNUSED3~] -InputSigType3=Digital -OutputCue3=Left -OutputSigType3=Digital -InputCue4=[~UNUSED3~] -InputSigType4=Digital -OutputCue4=Right -OutputSigType4=Digital -InputCue5=[~UNUSED3~] -InputSigType5=Digital -OutputCue5=OK -OutputSigType5=Digital -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=10 -CedH=10 -SmartObjId=10011d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=10 -Tp=1 -HD=TRUE -DV=10011d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=10 -Name=PepperDash Essentials TSW1050_[B.AV] Object - DPad STB_STB DPad.ced -;Cedver is the version of the Smart Graphics control, not the CED file format. -;If the control definition changes, increment this. -CedVer=1 -] -;================================================================================ -[ -ObjTp=Symbol -Name=PepperDash Essentials TSW1050_[B.AV] Object - Tab SetTopBox_Tab Button Horizontal.ced -Hint=Tab Button Horizontal (Smart Object ID=10081) -Code=11 -SGControlType=Horizontal Tab Button -SGControlName=Tab Button Horizontal -GUID=198C97B0-9D0C-46C2-9557-27EA33C0BE9F -SmplCName=PepperDash Essentials TSW1050_[B.AV] Object - Tab SetTopBox_Tab Button Horizontal.ced -SMWRev=4.02.19 -Expand=expand_random -HelpID=10031 -;Define the number of inputs, outputs and parameters -MinVariableInputs=4 -MaxVariableInputs=4 -MinVariableOutputs=4 -MaxVariableOutputs=4 -NumFixedParams=1 -MinVariableInputsList2=0 -MaxVariableInputsList2=0 -MinVariableOutputsList2=0 -MaxVariableOutputsList2=0 -MinVariableInputsList3=0 -MaxVariableInputsList3=0 -MinVariableOutputsList3=0 -MaxVariableOutputsList3=0 -;Define the cues, and signal types each input, output and parameter. -InputCue1=[~UNUSED3~] -InputSigType1=Digital -OutputCue1=Tab Button 1 Press -OutputSigType1=Digital -InputCue2=Tab Button 1 Select -InputSigType2=Digital -OutputCue2=[~UNUSED3~] -OutputSigType2=Digital -InputCue3=[~UNUSED3~] -InputSigType3=Digital -OutputCue3=Tab Button 2 Press -OutputSigType3=Digital -InputCue4=Tab Button 2 Select -InputSigType4=Digital -OutputCue4=[~UNUSED3~] -OutputSigType4=Digital -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=11 -CedH=11 -SmartObjId=10081d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=11 -Tp=1 -HD=TRUE -DV=10081d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=11 -Name=PepperDash Essentials TSW1050_[B.AV] Object - Tab SetTopBox_Tab Button Horizontal.ced -;Cedver is the version of the Smart Graphics control, not the CED file format. -;If the control definition changes, increment this. -CedVer=1 -] -;================================================================================ -[ -ObjTp=Symbol -Name=PepperDash Essentials TSW1050_[B.AV] Object - Dpad DVD_DVD DPad.ced -Hint=DVD DPad (Smart Object ID=10411) -Code=12 -SGControlType=DPad -SGControlName=DVD DPad -GUID=D49BCF22-C770-4146-93E6-00867D885E1E -SmplCName=PepperDash Essentials TSW1050_[B.AV] Object - Dpad DVD_DVD DPad.ced -SMWRev=4.02.19 -Expand=expand_random -HelpID=10015 -;Define the number of inputs, outputs and parameters -MinVariableInputs=5 -MaxVariableInputs=5 -MinVariableOutputs=5 -MaxVariableOutputs=5 -NumFixedParams=1 -MinVariableInputsList2=0 -MaxVariableInputsList2=0 -MinVariableOutputsList2=0 -MaxVariableOutputsList2=0 -MinVariableInputsList3=0 -MaxVariableInputsList3=0 -MinVariableOutputsList3=0 -MaxVariableOutputsList3=0 -;Define the cues, and signal types each input, output and parameter. -InputCue1=[~UNUSED3~] -InputSigType1=Digital -OutputCue1=Up -OutputSigType1=Digital -InputCue2=[~UNUSED3~] -InputSigType2=Digital -OutputCue2=Down -OutputSigType2=Digital -InputCue3=[~UNUSED3~] -InputSigType3=Digital -OutputCue3=Left -OutputSigType3=Digital -InputCue4=[~UNUSED3~] -InputSigType4=Digital -OutputCue4=Right -OutputSigType4=Digital -InputCue5=[~UNUSED3~] -InputSigType5=Digital -OutputCue5=OK -OutputSigType5=Digital -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=12 -CedH=12 -SmartObjId=10411d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=12 -Tp=1 -HD=TRUE -DV=10411d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=12 -Name=PepperDash Essentials TSW1050_[B.AV] Object - Dpad DVD_DVD DPad.ced -;Cedver is the version of the Smart Graphics control, not the CED file format. -;If the control definition changes, increment this. -CedVer=1 -] -;================================================================================ -[ -ObjTp=Symbol -Name=PepperDash Essentials TSW1050_[B.AV] Source-Set Top Box Backer_CATV Keypad.ced -Hint=CATV Keypad (Smart Object ID=10014) -Code=13 -SGControlType=Simple Keypad -SGControlName=CATV Keypad -GUID=5E33D4F4-5C5F-430C-879A-AE82529B3943 -SmplCName=PepperDash Essentials TSW1050_[B.AV] Source-Set Top Box Backer_CATV Keypad.ced -SMWRev=4.02.19 -Expand=expand_random -HelpID=10061 -;Define the number of inputs, outputs and parameters -MinVariableInputs=12 -MaxVariableInputs=12 -MinVariableOutputs=12 -MaxVariableOutputs=12 -NumFixedParams=1 -MinVariableInputsList2=0 -MaxVariableInputsList2=0 -MinVariableOutputsList2=0 -MaxVariableOutputsList2=0 -MinVariableInputsList3=0 -MaxVariableInputsList3=0 -MinVariableOutputsList3=0 -MaxVariableOutputsList3=0 -;Define the cues, and signal types each input, output and parameter. -InputCue1=[~UNUSED3~] -InputSigType1=Digital -OutputCue1=1 -OutputSigType1=Digital -InputCue2=[~UNUSED3~] -InputSigType2=Digital -OutputCue2=2 -OutputSigType2=Digital -InputCue3=[~UNUSED3~] -InputSigType3=Digital -OutputCue3=3 -OutputSigType3=Digital -InputCue4=[~UNUSED3~] -InputSigType4=Digital -OutputCue4=4 -OutputSigType4=Digital -InputCue5=[~UNUSED3~] -InputSigType5=Digital -OutputCue5=5 -OutputSigType5=Digital -InputCue6=[~UNUSED3~] -InputSigType6=Digital -OutputCue6=6 -OutputSigType6=Digital -InputCue7=[~UNUSED3~] -InputSigType7=Digital -OutputCue7=7 -OutputSigType7=Digital -InputCue8=[~UNUSED3~] -InputSigType8=Digital -OutputCue8=8 -OutputSigType8=Digital -InputCue9=[~UNUSED3~] -InputSigType9=Digital -OutputCue9=9 -OutputSigType9=Digital -InputCue10=[~UNUSED3~] -InputSigType10=Digital -OutputCue10=0 -OutputSigType10=Digital -InputCue11=[~UNUSED3~] -InputSigType11=Digital -OutputCue11=Misc_1 -OutputSigType11=Digital -InputCue12=[~UNUSED3~] -InputSigType12=Digital -OutputCue12=Misc_2 -OutputSigType12=Digital -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=13 -CedH=13 -SmartObjId=10014d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=13 -Tp=1 -HD=TRUE -DV=10014d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=13 -Name=PepperDash Essentials TSW1050_[B.AV] Source-Set Top Box Backer_CATV Keypad.ced -;Cedver is the version of the Smart Graphics control, not the CED file format. -;If the control definition changes, increment this. -CedVer=1 -] diff --git a/Release/PepperDash Essentials/PepperDashEssentials.cpz b/Release/PepperDash Essentials/PepperDashEssentials.cpz deleted file mode 100644 index 059dd870..00000000 Binary files a/Release/PepperDash Essentials/PepperDashEssentials.cpz and /dev/null differ diff --git a/docs/tesira_ttp_commands_dec14.pdf b/docs/tesira_ttp_commands_dec14.pdf new file mode 100644 index 00000000..f543bf78 Binary files /dev/null and b/docs/tesira_ttp_commands_dec14.pdf differ