diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..d33ae772 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "essentials-framework"] + path = essentials-framework + url = https://hvolmer@bitbucket.org/Pepperdash_Products/essentials-framework.git diff --git a/Essentials Core/PepperDashEssentialsBase.sln b/Essentials Core/PepperDashEssentialsBase.sln deleted file mode 100644 index a51c8c5d..00000000 --- a/Essentials Core/PepperDashEssentialsBase.sln +++ /dev/null @@ -1,20 +0,0 @@ - -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 deleted file mode 100644 index 45c3a602..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Comm and IR/ComPortController.cs +++ /dev/null @@ -1,134 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -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) - { - if (port == null) - { - Debug.Console(0, this, "ERROR: Invalid com port, continuing but comms will not function"); - return; - } - - 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, "ERROR: 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) - { - OnDataReceived(args.SerialData); - } - - void OnDataReceived(string s) - { - var bytesHandler = BytesReceived; - if (bytesHandler != null) - { - var bytes = Encoding.GetEncoding(28591).GetBytes(s); - bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes)); - } - var textHandler = TextReceived; - if (textHandler != null) - textHandler(this, new GenericCommMethodReceiveTextArgs(s)); - } - - public override bool Deactivate() - { - return Port.UnRegister() == eDeviceRegistrationUnRegistrationResponse.Success; - } - - #region IBasicCommunication Members - - public void SendText(string text) - { - if (Port == null) - return; - Port.Send(text); - } - - public void SendBytes(byte[] bytes) - { - if (Port == null) - return; - var text = Encoding.GetEncoding(28591).GetString(bytes, 0, bytes.Length); - Port.Send(text); - } - - public void Connect() - { - } - - public void Disconnect() - { - } - - #endregion - - /// - /// - /// - /// - public void SimulateReceive(string s) - { - // split out hex chars and build string - var split = Regex.Split(s, @"(\\[Xx][0-9a-fA-F][0-9a-fA-F])"); - StringBuilder b = new StringBuilder(); - foreach (var t in split) - { - if (t.StartsWith(@"\") && t.Length == 4) - b.Append((char)(Convert.ToByte(t.Substring(2, 2), 16))); - else - b.Append(t); - } - - OnDataReceived(b.ToString()); - } - } -} \ 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 deleted file mode 100644 index fe77bf83..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Comm and IR/ComSpecJsonConverter.cs +++ /dev/null @@ -1,102 +0,0 @@ -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 deleted file mode 100644 index 7439662b..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Comm and IR/CommFactory.cs +++ /dev/null @@ -1,198 +0,0 @@ -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 CresnetId { get; set; } - - /// - /// Attempts to provide uint conversion of string CresnetId - /// - public uint CresnetIdInt - { - get - { - try - { - return Convert.ToUInt32(CresnetId, 16); - } - catch (Exception) - { - throw new FormatException(string.Format("ERROR:Unable to convert Cresnet ID: {0} to hex. Error:\n{1}", CresnetId)); - } - } - } - - //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 deleted file mode 100644 index 05fb3954..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Comm and IR/CommunicationExtras.cs +++ /dev/null @@ -1,23 +0,0 @@ -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 deleted file mode 100644 index d833aafa..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Comm and IR/ConsoleCommMockDevice.cs +++ /dev/null @@ -1,74 +0,0 @@ -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 deleted file mode 100644 index ece72b20..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Comm and IR/DELETE ComPortController.cs +++ /dev/null @@ -1,105 +0,0 @@ -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 deleted file mode 100644 index 015b03ea..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Comm and IR/IRPortHelper.cs +++ /dev/null @@ -1,160 +0,0 @@ -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 Global.FilePathPrefix + "IR" + Global.DirectorySeparator; - } - } - - /// - /// 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 deleted file mode 100644 index 31960634..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Comm and IR/REMOVE ComPortConfig.cs +++ /dev/null @@ -1,26 +0,0 @@ -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 deleted file mode 100644 index 5e71b689..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Config/BasicConfig.cs +++ /dev/null @@ -1,40 +0,0 @@ -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("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 deleted file mode 100644 index 2992a385..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Config/ConfigPropertiesHelpers.cs +++ /dev/null @@ -1,30 +0,0 @@ -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 deleted file mode 100644 index bb95da01..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Config/DeviceConfig.cs +++ /dev/null @@ -1,65 +0,0 @@ -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("uid")] - public int Uid { 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 deleted file mode 100644 index b11d8608..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Config/InfoConfig.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; - -using Crestron.SimplSharp.Reflection; - -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("runtimeInfo")] - public RuntimeInfo RuntimeInfo { get; set; } - - [JsonProperty("comment")] - public string Comment { get; set; } - - public InfoConfig() - { - Name = ""; - Date = DateTime.Now; - Type = ""; - Version = ""; - Comment = ""; - - RuntimeInfo = new RuntimeInfo(); - } - } - - - /// - /// Represents runtime information about the program/processor - /// - public class RuntimeInfo - { - /// - /// The name of the running application - /// - [JsonProperty("appName")] - public string AppName { get; set; } - - /// - /// The Assembly version of the running application - /// - [JsonProperty("assemblyVersion")] - public string AssemblyVersion { get; set; } - - /// - /// The OS Version of the processor (Firmware Version) - /// - [JsonProperty("osVersion")] - public string OsVersion { get; set; } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Config/SourceDevicePropertiesConfigBase.cs b/Essentials Core/PepperDashEssentialsBase/Config/SourceDevicePropertiesConfigBase.cs deleted file mode 100644 index e6d13339..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Config/SourceDevicePropertiesConfigBase.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Core.Config -{ - public class SourceDevicePropertiesConfigBase - { - public bool DisableSharing { get; set; } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Constants/CommonCues.cs b/Essentials Core/PepperDashEssentialsBase/Constants/CommonCues.cs deleted file mode 100644 index fd8465b4..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Constants/CommonCues.cs +++ /dev/null @@ -1,127 +0,0 @@ -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 readonly Cue InCall = new Cue("InCall", 501, 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 IO/IOPortConfig.cs b/Essentials Core/PepperDashEssentialsBase/Crestron IO/IOPortConfig.cs deleted file mode 100644 index 167b86cd..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Crestron IO/IOPortConfig.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Core.CrestronIO -{ - public class IOPortConfig - { - public string PortDeviceKey { get; set; } - public uint PortNumber { get; set; } - public bool DisablePullUpResistor { get; set; } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Crestron IO/Inputs/GenericDigitalInputDevice.cs b/Essentials Core/PepperDashEssentialsBase/Crestron IO/Inputs/GenericDigitalInputDevice.cs deleted file mode 100644 index a38c8207..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Crestron IO/Inputs/GenericDigitalInputDevice.cs +++ /dev/null @@ -1,43 +0,0 @@ -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.CrestronIO -{ - public class GenericDigitalInputDevice : Device, IDigitalInput - { - public DigitalInput InputPort { get; private set; } - - public BoolFeedback InputStateFeedback { get; private set; } - - Func InputStateFeedbackFunc - { - get - { - return () => InputPort.State; - } - } - - public GenericDigitalInputDevice(string key, DigitalInput inputPort): - base(key) - { - InputStateFeedback = new BoolFeedback(InputStateFeedbackFunc); - - InputPort = inputPort; - - InputPort.StateChange += new DigitalInputEventHandler(InputPort_StateChange); - - } - - void InputPort_StateChange(DigitalInput digitalInput, DigitalInputEventArgs args) - { - InputStateFeedback.FireUpdate(); - } - - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Crestron IO/Inputs/GenericVersiportInputDevice.cs b/Essentials Core/PepperDashEssentialsBase/Crestron IO/Inputs/GenericVersiportInputDevice.cs deleted file mode 100644 index 37f978a1..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Crestron IO/Inputs/GenericVersiportInputDevice.cs +++ /dev/null @@ -1,50 +0,0 @@ -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.CrestronIO -{ - /// - /// Represents a generic digital input deviced tied to a versiport - /// - public class GenericVersiportDigitalInputDevice : Device, IDigitalInput - { - public Versiport InputPort { get; private set; } - - public BoolFeedback InputStateFeedback { get; private set; } - - Func InputStateFeedbackFunc - { - get - { - return () => InputPort.DigitalIn; - } - } - - public GenericVersiportDigitalInputDevice(string key, Versiport inputPort, IOPortConfig props): - base(key) - { - InputStateFeedback = new BoolFeedback(InputStateFeedbackFunc); - InputPort = inputPort; - InputPort.SetVersiportConfiguration(eVersiportConfiguration.DigitalInput); - if (props.DisablePullUpResistor) - InputPort.DisablePullUpResistor = true; - InputPort.VersiportChange += new VersiportEventHandler(InputPort_VersiportChange); - - Debug.Console(1, this, "Created GenericVersiportDigitalInputDevice on port '{0}'. DisablePullUpResistor: '{1}'", props.PortNumber, InputPort.DisablePullUpResistor); - } - - void InputPort_VersiportChange(Versiport port, VersiportEventArgs args) - { - Debug.Console(1, this, "Versiport change: {0}", args.Event); - - if(args.Event == eVersiportEvent.DigitalInChange) - InputStateFeedback.FireUpdate(); - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Crestron IO/Inputs/IDigitalInput.cs b/Essentials Core/PepperDashEssentialsBase/Crestron IO/Inputs/IDigitalInput.cs deleted file mode 100644 index 2bfe6ce5..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Crestron IO/Inputs/IDigitalInput.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Core.CrestronIO -{ - /// - /// Represents a device that provides digital input - /// - public interface IDigitalInput - { - BoolFeedback InputStateFeedback { get; } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Crestron IO/Relay/GenericRelayDevice.cs b/Essentials Core/PepperDashEssentialsBase/Crestron IO/Relay/GenericRelayDevice.cs deleted file mode 100644 index 6856be6e..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Crestron IO/Relay/GenericRelayDevice.cs +++ /dev/null @@ -1,69 +0,0 @@ -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.CrestronIO -{ - /// - /// Represents a generic device controlled by relays - /// - public class GenericRelayDevice : Device, ISwitchedOutput - { - public Relay RelayOutput { get; private set; } - - public BoolFeedback OutputIsOnFeedback { get; private set; } - - public GenericRelayDevice(string key, Relay relay): - base(key) - { - OutputIsOnFeedback = new BoolFeedback(new Func(() => RelayOutput.State)); - - if (relay.AvailableForUse) - RelayOutput = relay; - - RelayOutput.StateChange += new RelayEventHandler(RelayOutput_StateChange); - } - - void RelayOutput_StateChange(Relay relay, RelayEventArgs args) - { - OutputIsOnFeedback.FireUpdate(); - } - - public void OpenRelay() - { - RelayOutput.State = false; - } - - public void CloseRelay() - { - RelayOutput.State = true; - } - - public void ToggleRelayState() - { - if (RelayOutput.State == true) - OpenRelay(); - else - CloseRelay(); - } - - #region ISwitchedOutput Members - - void ISwitchedOutput.On() - { - CloseRelay(); - } - - void ISwitchedOutput.Off() - { - OpenRelay(); - } - - #endregion - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Crestron IO/Relay/ISwitchedOutput.cs b/Essentials Core/PepperDashEssentialsBase/Crestron IO/Relay/ISwitchedOutput.cs deleted file mode 100644 index 09e5434a..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Crestron IO/Relay/ISwitchedOutput.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Essentials.Core; - -namespace PepperDash.Essentials.Core.CrestronIO -{ - /// - /// Describes an output capable of switching on and off - /// - public interface ISwitchedOutput - { - BoolFeedback OutputIsOnFeedback {get;} - - void On(); - void Off(); - } - - public interface ISwitchedOutputCollection - { - Dictionary SwitchedOutputs { get; } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Crestron/CrestronGenericBaseDevice.cs b/Essentials Core/PepperDashEssentialsBase/Crestron/CrestronGenericBaseDevice.cs deleted file mode 100644 index ac88f0d7..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Crestron/CrestronGenericBaseDevice.cs +++ /dev/null @@ -1,122 +0,0 @@ -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, IUsageTracking - { - 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() - { - Debug.Console(0, this, "Activating"); - var response = Hardware.RegisterWithLogging(Key); - if (response != eDeviceRegistrationUnRegistrationResponse.Success) - { - Debug.Console(0, this, "ERROR: Cannot register Crestron device: {0}", response); - return false; - } - Hardware.OnlineStatusChange += new OnlineStatusChangeEventHandler(Hardware_OnlineStatusChange); - CommunicationMonitor.Start(); - - 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 - - #region IUsageTracking Members - - public UsageTracking UsageTracker { get; 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/Crestron/CrestronGenericBaseDevice.cs.orig b/Essentials Core/PepperDashEssentialsBase/Crestron/CrestronGenericBaseDevice.cs.orig deleted file mode 100644 index 416cc553..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Crestron/CrestronGenericBaseDevice.cs.orig +++ /dev/null @@ -1,128 +0,0 @@ -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, IUsageTracking - { - 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() - { - Debug.Console(0, this, "Activating"); - var response = Hardware.RegisterWithLogging(Key); - if (response != eDeviceRegistrationUnRegistrationResponse.Success) - { -<<<<<<< HEAD - Debug.Console(0, this, "ERROR: Cannot register Crestron device: {0}", response); - return false; - } -======= - Debug.Console(0, this, "ERROR: Cannot register Crestron device: {0}", response); - return false; - } ->>>>>>> origin/feature/ecs-342-neil - Hardware.OnlineStatusChange += new OnlineStatusChangeEventHandler(Hardware_OnlineStatusChange); - CommunicationMonitor.Start(); - - 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 - - #region IUsageTracking Members - - public UsageTracking UsageTracker { get; 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 deleted file mode 100644 index a3940a98..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Cues and DevAction/Cues.cs +++ /dev/null @@ -1,98 +0,0 @@ -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, Serial, 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/Debug/Debug.cs b/Essentials Core/PepperDashEssentialsBase/Debug/Debug.cs deleted file mode 100644 index 3476d0eb..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Debug/Debug.cs +++ /dev/null @@ -1,142 +0,0 @@ -//using System; -//using System.Collections.Generic; -//using System.Linq; -//using System.Text; -//using Crestron.SimplSharp; -//using Crestron.SimplSharp.CrestronDataStore; -//using Crestron.SimplSharpPro; - - -//namespace PepperDash.Essentials.Core -//{ -// public class Debug -// { -// public static uint Level { get; private set; } - -// /// -// /// This should called from the ControlSystem Initiailize method. -// /// -// public static void Initialize() -// { -// // Add command to console -// CrestronConsole.AddNewConsoleCommand(SetDebugFromConsole, "appdebug", -// "appdebug:P [0-2]: Sets the application's console debug message level", -// ConsoleAccessLevelEnum.AccessOperator); - -// uint level = 0; -// var err = CrestronDataStoreStatic.GetGlobalUintValue("DebugLevel", out level); -// if (err == CrestronDataStore.CDS_ERROR.CDS_SUCCESS) -// SetDebugLevel(level); -// else if (err == CrestronDataStore.CDS_ERROR.CDS_RECORD_NOT_FOUND) -// CrestronDataStoreStatic.SetGlobalUintValue("DebugLevel", 0); -// else -// CrestronConsole.PrintLine("Error restoring console debug level setting: {0}", err); -// } - -// /// -// /// Callback for console command -// /// -// /// -// public static void SetDebugFromConsole(string levelString) -// { -// try -// { -// if (string.IsNullOrEmpty(levelString.Trim())) -// { -// CrestronConsole.PrintLine("AppDebug level = {0}", Level); -// return; -// } - -// SetDebugLevel(Convert.ToUInt32(levelString)); -// } -// catch -// { -// CrestronConsole.PrintLine("Usage: appdebug:P [0-2]"); -// } -// } - -// /// -// /// Sets the debug level -// /// -// /// Valid values 0 (no debug), 1 (critical), 2 (all messages) -// public static void SetDebugLevel(uint level) -// { -// if (level <= 2) -// { -// Level = 2; -// CrestronConsole.PrintLine("[Application {0}], Debug level set to {1}", -// InitialParametersClass.ApplicationNumber, level); -// var err = CrestronDataStoreStatic.SetGlobalUintValue("DebugLevel", level); -// if(err != CrestronDataStore.CDS_ERROR.CDS_SUCCESS) -// CrestronConsole.PrintLine("Error saving console debug level setting: {0}", err); -// } -// } - -// /// -// /// Prints message to console if current debug level is equal to or higher than the level of this message. -// /// Uses CrestronConsole.PrintLine. -// /// -// /// -// /// Console format string -// /// Object parameters -// public static void Console(uint level, string format, params object[] items) -// { -// if (Level >= level) -// CrestronConsole.PrintLine("App {0}:{1}", InitialParametersClass.ApplicationNumber, -// string.Format(format, items)); -// } - -// /// -// /// Appends a device Key to the beginning of a message -// /// -// public static void Console(uint level, IKeyed dev, string format, params object[] items) -// { -// if (Level >= level) -// Console(level, "[{0}] {1}", dev.Key, string.Format(format, items)); -// } - -// public static void Console(uint level, IKeyed dev, ErrorLogLevel errorLogLevel, -// string format, params object[] items) -// { -// if (Level >= level) -// { -// var str = string.Format("[{0}] {1}", dev.Key, string.Format(format, items)); -// Console(level, str); -// LogError(errorLogLevel, str); -// } -// } - -// public static void Console(uint level, ErrorLogLevel errorLogLevel, -// string format, params object[] items) -// { -// if (Level >= level) -// { -// var str = string.Format(format, items); -// Console(level, str); -// LogError(errorLogLevel, str); -// } -// } - -// public static void LogError(ErrorLogLevel errorLogLevel, string str) -// { -// string msg = string.Format("App {0}:{1}", InitialParametersClass.ApplicationNumber, str); -// switch (errorLogLevel) -// { -// case ErrorLogLevel.Error: -// ErrorLog.Error(msg); -// break; -// case ErrorLogLevel.Warning: -// ErrorLog.Warn(msg); -// break; -// case ErrorLogLevel.Notice: -// ErrorLog.Notice(msg); -// break; -// } -// } - -// public enum ErrorLogLevel -// { -// Error, Warning, Notice, None -// } -// } -//} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/DeviceControlsParentInterfaces/IPresentationSource.cs b/Essentials Core/PepperDashEssentialsBase/DeviceControlsParentInterfaces/IPresentationSource.cs deleted file mode 100644 index ac45a9d4..00000000 --- a/Essentials Core/PepperDashEssentialsBase/DeviceControlsParentInterfaces/IPresentationSource.cs +++ /dev/null @@ -1,19 +0,0 @@ -//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 deleted file mode 100644 index 5a38c703..00000000 --- a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IChannel.cs +++ /dev/null @@ -1,47 +0,0 @@ -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 deleted file mode 100644 index 232362e9..00000000 --- a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IColorFunctions.cs +++ /dev/null @@ -1,41 +0,0 @@ -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 deleted file mode 100644 index 7c2f139f..00000000 --- a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDPad.cs +++ /dev/null @@ -1,50 +0,0 @@ -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 deleted file mode 100644 index 31fb83b4..00000000 --- a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDiscPlayerControls.cs +++ /dev/null @@ -1,13 +0,0 @@ -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 deleted file mode 100644 index 5624f77c..00000000 --- a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDisplayBasic.cs +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index 1d4829cd..00000000 --- a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDumbSource.cs +++ /dev/null @@ -1,12 +0,0 @@ -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 deleted file mode 100644 index 9e55702c..00000000 --- a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IDvr.cs +++ /dev/null @@ -1,40 +0,0 @@ -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 deleted file mode 100644 index 0294a0b5..00000000 --- a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/INumeric.cs +++ /dev/null @@ -1,84 +0,0 @@ -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 deleted file mode 100644 index 23b67bc1..00000000 --- a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IPower.cs +++ /dev/null @@ -1,48 +0,0 @@ -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.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 deleted file mode 100644 index 8b043cac..00000000 --- a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/ISetTopBoxControls.cs +++ /dev/null @@ -1,55 +0,0 @@ -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 deleted file mode 100644 index 1189c10b..00000000 --- a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/ITransport.cs +++ /dev/null @@ -1,53 +0,0 @@ -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 deleted file mode 100644 index fb51f7e2..00000000 --- a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IUiDisplayInfo.cs +++ /dev/null @@ -1,12 +0,0 @@ -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 deleted file mode 100644 index 2baf1548..00000000 --- a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IWarmingCooling.cs +++ /dev/null @@ -1,17 +0,0 @@ -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 deleted file mode 100644 index 31f71df9..00000000 --- a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Template.cs +++ /dev/null @@ -1,9 +0,0 @@ -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/.IHasFeedbacks_BASE_3692.cs.swp b/Essentials Core/PepperDashEssentialsBase/Devices/.IHasFeedbacks_BASE_3692.cs.swp deleted file mode 100644 index 827c466a..00000000 Binary files a/Essentials Core/PepperDashEssentialsBase/Devices/.IHasFeedbacks_BASE_3692.cs.swp and /dev/null differ diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/.IHasFeedbacks_LOCAL_3692.cs.swp b/Essentials Core/PepperDashEssentialsBase/Devices/.IHasFeedbacks_LOCAL_3692.cs.swp deleted file mode 100644 index e06196a4..00000000 Binary files a/Essentials Core/PepperDashEssentialsBase/Devices/.IHasFeedbacks_LOCAL_3692.cs.swp and /dev/null differ diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/.IHasFeedbacks_REMOTE_3692.cs.swp b/Essentials Core/PepperDashEssentialsBase/Devices/.IHasFeedbacks_REMOTE_3692.cs.swp deleted file mode 100644 index 842256cc..00000000 Binary files a/Essentials Core/PepperDashEssentialsBase/Devices/.IHasFeedbacks_REMOTE_3692.cs.swp and /dev/null differ diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/CodecInterfaces.cs b/Essentials Core/PepperDashEssentialsBase/Devices/CodecInterfaces.cs deleted file mode 100644 index b1a0fb36..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/CodecInterfaces.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Core -{ - /// - /// Adds control of codec receive volume - /// - public interface IReceiveVolume - { - // Break this out into 3 interfaces - void SetReceiveVolume(ushort level); - void ReceiveMuteOn(); - void ReceiveMuteOff(); - void ReceiveMuteToggle(); - IntFeedback ReceiveLevelFeedback { get; } - BoolFeedback ReceiveMuteIsOnFeedback { get; } - } - - /// - /// Adds control of codec transmit volume - /// - public interface ITransmitVolume - { - void SetTransmitVolume(ushort level); - void TransmitMuteOn(); - void TransmitMuteOff(); - void TransmitMuteToggle(); - IntFeedback TransmitLevelFeedback { get; } - BoolFeedback TransmitMuteIsOnFeedback { get; } - } - - /// - /// Adds control of codec privacy function (microphone mute) - /// - public interface IPrivacy - { - void PrivacyModeOn(); - void PrivacyModeOff(); - void PrivacyModeToggle(); - BoolFeedback PrivacyModeIsOnFeedback { get; } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/CodecInterfaces.cs.orig b/Essentials Core/PepperDashEssentialsBase/Devices/CodecInterfaces.cs.orig deleted file mode 100644 index 04d5aac9..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/CodecInterfaces.cs.orig +++ /dev/null @@ -1,92 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Core -{ - /// - /// Requirements for a device that has dialing capabilities - /// - public interface IHasDialer - { - // Add requirements for Dialer functionality - - void Dial(string number); -<<<<<<< HEAD - void EndCall(string number); -======= - void EndCall(object activeCall); - void EndAllCalls(); ->>>>>>> origin/feature/cisco-spark-2 - void AcceptCall(); - void RejectCall(); - void SendDtmf(string digit); - - IntFeedback ActiveCallCountFeedback { get; } - BoolFeedback IncomingCallFeedback { get; } - } - - /// - /// Defines minimum volume controls for a codec device with dialing capabilities - /// - public interface ICodecAudio : IBasicVolumeWithFeedback, IPrivacy - { - - } - - /// - /// Adds control of codec receive volume - /// - public interface IReceiveVolume - { - // Break this out into 3 interfaces - void SetReceiveVolume(ushort level); - void ReceiveMuteOn(); - void ReceiveMuteOff(); - void ReceiveMuteToggle(); - IntFeedback ReceiveLevelFeedback { get; } - BoolFeedback ReceiveMuteIsOnFeedback { get; } - } - - /// - /// Adds control of codec transmit volume - /// - public interface ITransmitVolume - { - void SetTransmitVolume(ushort level); - void TransmitMuteOn(); - void TransmitMuteOff(); - void TransmitMuteToggle(); - IntFeedback TransmitLevelFeedback { get; } - BoolFeedback TransmitMuteIsOnFeedback { get; } - } - - /// - /// Adds control of codec privacy function (microphone mute) - /// - public interface IPrivacy - { - void PrivacyModeOn(); - void PrivacyModeOff(); - void PrivacyModeToggle(); - BoolFeedback PrivacyModeIsOnFeedback { get; } - } - - public interface IHasCallHistory - { - // Add recent calls list - } - - public interface IHasDirectory - { - - } - - public interface IHasObtp - { - - // Upcoming Meeting warning event - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/DeviceJsonApi.cs b/Essentials Core/PepperDashEssentialsBase/Devices/DeviceJsonApi.cs deleted file mode 100644 index 32d53388..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/DeviceJsonApi.cs +++ /dev/null @@ -1,292 +0,0 @@ -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); - } - - /// - /// - /// - /// - /// - 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, obj)); - 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; - } - - /// - /// Sets a property on an object. - /// - /// - /// - public static string SetProperty(string deviceObjectPath) - { - throw new NotImplementedException("This could be really useful. Finish it please"); - - //var obj = FindObjectOnPath(deviceObjectPath); - //if (obj == null) - // return "{\"error\":\"No object found\"}"; - - //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, obj)); - //return JsonConvert.SerializeObject(props, Formatting.Indented); - } - } - - public class DeviceActionWrapper - { - public string DeviceKey { get; set; } - public string MethodName { get; set; } - public object[] Params { get; set; } - } - - public class PropertyNameType - { - object Parent; - - [JsonIgnore] - public PropertyInfo PropInfo { get; private set; } - public string Name { get { return PropInfo.Name; } } - public string Type { get { return PropInfo.PropertyType.Name; } } - public string Value { get - { - if (PropInfo.CanRead) - { - try - { - return PropInfo.GetValue(Parent, null).ToString(); - } - catch (Exception) - { - return null; - } - } - else - return null; - } } - - public bool CanRead { get { return PropInfo.CanRead; } } - public bool CanWrite { get { return PropInfo.CanWrite; } } - - - public PropertyNameType(PropertyInfo info, object parent) - { - PropInfo = info; - Parent = parent; - } - } - - 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 deleted file mode 100644 index 975984e5..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/DeviceManager.cs +++ /dev/null @@ -1,239 +0,0 @@ -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(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); - CrestronConsole.AddNewConsoleCommand(SimulateComReceiveOnDevice, "devsimreceive", - "Simulates incoming data on a com device", ConsoleAccessLevelEnum.AccessOperator); - } - - /// - /// Calls activate on all Device class items - /// - public static void ActivateAll() - { - foreach (var d in Devices.Values) - { - try - { - if (d is Device) - (d as Device).Activate(); - } - catch (Exception e) - { - Debug.Console(0, d, "ERROR: Device activation failure:\r{0}", e); - } - } - } - - /// - /// 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)); - - 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, "WARNING: 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; - } - - /// - /// Console handler that simulates com port data receive - /// - /// - public static void SimulateComReceiveOnDevice(string s) - { - // devcomsim:1 xyzabc - var match = Regex.Match(s, @"(\S*)\s*(.*)"); - if (match.Groups.Count < 3) - { - CrestronConsole.ConsoleCommandResponse(" Format: devsimreceive:P "); - return; - } - //Debug.Console(2, "**** {0} - {1} ****", match.Groups[1].Value, match.Groups[2].Value); - - ComPortController com = GetDeviceForKey(match.Groups[1].Value) as ComPortController; - if (com == null) - { - CrestronConsole.ConsoleCommandResponse("'{0}' is not a comm port device", match.Groups[1].Value); - return; - } - com.SimulateReceive(match.Groups[2].Value); - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/DeviceManager.cs.orig b/Essentials Core/PepperDashEssentialsBase/Devices/DeviceManager.cs.orig deleted file mode 100644 index e768807b..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/DeviceManager.cs.orig +++ /dev/null @@ -1,253 +0,0 @@ -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(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); - CrestronConsole.AddNewConsoleCommand(SimulateComReceiveOnDevice, "devsimreceive", - "Simulates incoming data on a com device", ConsoleAccessLevelEnum.AccessOperator); - } - - /// - /// Calls activate on all Device class items - /// - public static void ActivateAll() - { - foreach (var d in Devices.Values) -<<<<<<< HEAD - { - try - { - if (d is Device) - (d as Device).Activate(); - } - catch (Exception e) - { - Debug.Console(0, d, "ERROR: Device activation failure:\r{0}", e); - } - } -======= - { - try - { - if (d is Device) - (d as Device).Activate(); - } - catch (Exception e) - { - Debug.Console(0, d, "ERROR: Device activation failure:\r{0}", e); - } - } ->>>>>>> origin/feature/ecs-342-neil - } - - /// - /// 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)); - - 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, "WARNING: 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; - } - - /// - /// Console handler that simulates com port data receive - /// - /// - public static void SimulateComReceiveOnDevice(string s) - { - // devcomsim:1 xyzabc - var match = Regex.Match(s, @"(\S*)\s*(.*)"); - if (match.Groups.Count < 3) - { - CrestronConsole.ConsoleCommandResponse(" Format: devsimreceive:P "); - return; - } - //Debug.Console(2, "**** {0} - {1} ****", match.Groups[1].Value, match.Groups[2].Value); - - ComPortController com = GetDeviceForKey(match.Groups[1].Value) as ComPortController; - if (com == null) - { - CrestronConsole.ConsoleCommandResponse("'{0}' is not a comm port device", match.Groups[1].Value); - return; - } - com.SimulateReceive(match.Groups[2].Value); - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/DisplayUiConstants.cs b/Essentials Core/PepperDashEssentialsBase/Devices/DisplayUiConstants.cs deleted file mode 100644 index a42239fc..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/DisplayUiConstants.cs +++ /dev/null @@ -1,28 +0,0 @@ -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 deleted file mode 100644 index 318f5179..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/FIND HOMES Interfaces.cs +++ /dev/null @@ -1,56 +0,0 @@ -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 deleted file mode 100644 index e7267782..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/GenericMonitoredTcpDevice.cs +++ /dev/null @@ -1,79 +0,0 @@ -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 deleted file mode 100644 index e5218ee0..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/IAttachVideoStatusExtensions.cs +++ /dev/null @@ -1,39 +0,0 @@ -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 deleted file mode 100644 index 5d33afa9..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Crestron.SimplSharpPro.DeviceSupport; -using Crestron.SimplSharp.Reflection; - -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) - { - CType t = source.GetType(); - // get the properties and set them into a new collection of NameType wrappers - var props = t.GetProperties().Select(p => new PropertyNameType(p, t)); - - - - var feedbacks = source.Feedbacks.OrderBy(x => x.Type); - if (feedbacks != null) - { - Debug.Console(0, source, "\n\nAvailable feedbacks:"); - foreach (var f in feedbacks) - { - string val = ""; - string type = ""; - if (getCurrentStates) - { - if (f is BoolFeedback) - { - val = f.BoolValue.ToString(); - type = "boolean"; - } - else if (f is IntFeedback) - { - val = f.IntValue.ToString(); - type = "integer"; - } - else if (f is StringFeedback) - { - val = f.StringValue; - type = "string"; - } - } - Debug.Console(0, "{0,-12} {1, -25} {2}", type, - (string.IsNullOrEmpty(f.Cue.Name) ? "-no name-" : f.Cue.Name), val); - } - } - else - Debug.Console(0, source, "No available outputs:"); - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks_BACKUP_3692.cs b/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks_BACKUP_3692.cs deleted file mode 100644 index 8af64e92..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks_BACKUP_3692.cs +++ /dev/null @@ -1,135 +0,0 @@ -<<<<<<< HEAD -using System.Collections.Generic; -using System.Linq; -using Crestron.SimplSharpPro.DeviceSupport; -using Crestron.SimplSharp.Reflection; - -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) - { - CType t = source.GetType(); - // get the properties and set them into a new collection of NameType wrappers - var props = t.GetProperties().Select(p => new PropertyNameType(p, t)); - - - - var feedbacks = source.Feedbacks.OrderBy(x => x.Type); - if (feedbacks != null) - { - Debug.Console(0, source, "\n\nAvailable feedbacks:"); - foreach (var f in feedbacks) - { - string val = ""; - string type = ""; - if (getCurrentStates) - { - if (f is BoolFeedback) - { - val = f.BoolValue.ToString(); - type = "boolean"; - } - else if (f is IntFeedback) - { - val = f.IntValue.ToString(); - type = "integer"; - } - else if (f is StringFeedback) - { - val = f.StringValue; - type = "string"; - } - } - Debug.Console(0, "{0,-12} {1, -25} {2}", type, - (string.IsNullOrEmpty(f.Cue.Name) ? "-no name-" : f.Cue.Name), val); - } - } - else - Debug.Console(0, source, "No available outputs:"); - } - } -======= -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 feedbacks = source.Feedbacks.OrderBy(x => x.Type); - if (feedbacks != null) - { - Debug.Console(0, source, "\n\nAvailable feedbacks:"); - foreach (var f in feedbacks) - { - string val = ""; - if (getCurrentStates) - { - if (f is BoolFeedback) - val = " = " + f.BoolValue; - else if(f is IntFeedback) - val = " = " + f.IntValue; - else if(f is StringFeedback) - val = " = " + f.StringValue; - - //switch (f.Type) - //{ - // case eCueType.Bool: - // val = " = " + f.BoolValue; - // break; - // case eCueType.Int: - // val = " = " + f.IntValue; - // break; - // case eCueType.String: - // val = " = " + f.StringValue; - // break; - // //case eOutputType.Other: - // // break; - //} - } - Debug.Console(0, "{0,-8} {1}{2}", f.GetType(), - (string.IsNullOrEmpty(f.Cue.Name) ? "-none-" : f.Cue.Name), val); - } - } - else - Debug.Console(0, source, "No available outputs:"); - } - } - - public static class IHasFeedbackFusionExtensions - { - - } ->>>>>>> origin/feature/ecs-307 -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks_BASE_3692.cs b/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks_BASE_3692.cs deleted file mode 100644 index 446577f6..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks_BASE_3692.cs +++ /dev/null @@ -1,63 +0,0 @@ -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 feedbacks = source.Feedbacks.OrderBy(x => x.Type); - if (feedbacks != null) - { - Debug.Console(0, source, "\n\nAvailable feedbacks:"); - foreach (var f in feedbacks) - { - string val = ""; - if (getCurrentStates) - { - if (f is BoolFeedback) - val = " = " + f.BoolValue; - else if(f is IntFeedback) - val = " = " + f.IntValue; - else if(f is StringFeedback) - val = " = " + f.StringValue; - - //switch (f.Type) - //{ - // case eCueType.Bool: - // val = " = " + f.BoolValue; - // break; - // case eCueType.Int: - // val = " = " + f.IntValue; - // break; - // case eCueType.String: - // val = " = " + f.StringValue; - // break; - // //case eOutputType.Other: - // // break; - //} - } - Debug.Console(0, "{0,-8} {1}{2}", f.GetType(), - (string.IsNullOrEmpty(f.Cue.Name) ? "-none-" : f.Cue.Name), val); - } - } - else - Debug.Console(0, source, "No available outputs:"); - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks_LOCAL_3692.cs b/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks_LOCAL_3692.cs deleted file mode 100644 index 5d33afa9..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks_LOCAL_3692.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Crestron.SimplSharpPro.DeviceSupport; -using Crestron.SimplSharp.Reflection; - -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) - { - CType t = source.GetType(); - // get the properties and set them into a new collection of NameType wrappers - var props = t.GetProperties().Select(p => new PropertyNameType(p, t)); - - - - var feedbacks = source.Feedbacks.OrderBy(x => x.Type); - if (feedbacks != null) - { - Debug.Console(0, source, "\n\nAvailable feedbacks:"); - foreach (var f in feedbacks) - { - string val = ""; - string type = ""; - if (getCurrentStates) - { - if (f is BoolFeedback) - { - val = f.BoolValue.ToString(); - type = "boolean"; - } - else if (f is IntFeedback) - { - val = f.IntValue.ToString(); - type = "integer"; - } - else if (f is StringFeedback) - { - val = f.StringValue; - type = "string"; - } - } - Debug.Console(0, "{0,-12} {1, -25} {2}", type, - (string.IsNullOrEmpty(f.Cue.Name) ? "-no name-" : f.Cue.Name), val); - } - } - else - Debug.Console(0, source, "No available outputs:"); - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks_REMOTE_3692.cs b/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks_REMOTE_3692.cs deleted file mode 100644 index 1ac02c71..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks_REMOTE_3692.cs +++ /dev/null @@ -1,68 +0,0 @@ -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 feedbacks = source.Feedbacks.OrderBy(x => x.Type); - if (feedbacks != null) - { - Debug.Console(0, source, "\n\nAvailable feedbacks:"); - foreach (var f in feedbacks) - { - string val = ""; - if (getCurrentStates) - { - if (f is BoolFeedback) - val = " = " + f.BoolValue; - else if(f is IntFeedback) - val = " = " + f.IntValue; - else if(f is StringFeedback) - val = " = " + f.StringValue; - - //switch (f.Type) - //{ - // case eCueType.Bool: - // val = " = " + f.BoolValue; - // break; - // case eCueType.Int: - // val = " = " + f.IntValue; - // break; - // case eCueType.String: - // val = " = " + f.StringValue; - // break; - // //case eOutputType.Other: - // // break; - //} - } - Debug.Console(0, "{0,-8} {1}{2}", f.GetType(), - (string.IsNullOrEmpty(f.Cue.Name) ? "-none-" : f.Cue.Name), val); - } - } - else - Debug.Console(0, source, "No available outputs:"); - } - } - - public static class IHasFeedbackFusionExtensions - { - - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/IUsageTracking.cs b/Essentials Core/PepperDashEssentialsBase/Devices/IUsageTracking.cs deleted file mode 100644 index 6d234010..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/IUsageTracking.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using PepperDash.Core; - -namespace PepperDash.Essentials.Core -{ - public interface IUsageTracking - { - UsageTracking UsageTracker { get; set; } - } - - //public static class IUsageTrackingExtensions - //{ - // public static void EnableUsageTracker(this IUsageTracking device) - // { - // device.UsageTracker = new UsageTracking(); - // } - //} - - public class UsageTracking - { - public event EventHandler DeviceUsageEnded; - - public InUseTracking InUseTracker { get; protected set; } - - public bool UsageIsTracked { get; set; } - - public bool UsageTrackingStarted { get; protected set; } - public DateTime UsageStartTime { get; protected set; } - public DateTime UsageEndTime { get; protected set; } - - public Device Parent { get; private set; } - - public UsageTracking(Device parent) - { - Parent = parent; - - InUseTracker = new InUseTracking(); - - InUseTracker.InUseFeedback.OutputChange += InUseFeedback_OutputChange; //new EventHandler(); - } - - void InUseFeedback_OutputChange(object sender, EventArgs e) - { - if(InUseTracker.InUseFeedback.BoolValue) - { - StartDeviceUsage(); - } - else - { - EndDeviceUsage(); - } - } - - - /// - /// Stores the usage start time - /// - public void StartDeviceUsage() - { - UsageTrackingStarted = true; - UsageStartTime = DateTime.Now; - } - - /// - /// Calculates the difference between the usage start and end times, gets the total minutes used and fires an event to pass that info to a consumer - /// - public void EndDeviceUsage() - { - try - { - UsageTrackingStarted = false; - - UsageEndTime = DateTime.Now; - - if (UsageStartTime != null) - { - var timeUsed = UsageEndTime - UsageStartTime; - - var handler = DeviceUsageEnded; - - if (handler != null) - { - Debug.Console(1, "Device Usage Ended for: {0} at {1}. In use for {2} minutes.", Parent.Name, UsageEndTime, timeUsed.Minutes); - handler(this, new DeviceUsageEventArgs() { UsageEndTime = UsageEndTime, MinutesUsed = timeUsed.Minutes }); - } - } - } - catch (Exception e) - { - Debug.Console(1, "Error ending device usage: {0}", e); - } - } - } - - public class DeviceUsageEventArgs : EventArgs - { - public DateTime UsageEndTime { get; set; } - public int MinutesUsed { get; set; } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/IUsageTracking.cs.orig b/Essentials Core/PepperDashEssentialsBase/Devices/IUsageTracking.cs.orig deleted file mode 100644 index 59019df5..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/IUsageTracking.cs.orig +++ /dev/null @@ -1,104 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using PepperDash.Core; - -namespace PepperDash.Essentials.Core -{ - public interface IUsageTracking - { - UsageTracking UsageTracker { get; set; } - } - - //public static class IUsageTrackingExtensions - //{ - // public static void EnableUsageTracker(this IUsageTracking device) - // { - // device.UsageTracker = new UsageTracking(); - // } - //} - - public class UsageTracking - { - public event EventHandler DeviceUsageEnded; - - public InUseTracking InUseTracker { get; protected set; } - - public bool UsageIsTracked { get; set; } - public DateTime UsageStartTime { get; protected set; } - public DateTime UsageEndTime { get; protected set; } - - public Device Parent { get; private set; } - - public UsageTracking(Device parent) - { - Parent = parent; - - InUseTracker = new InUseTracking(); - - InUseTracker.InUseFeedback.OutputChange +=new EventHandler(InUseFeedback_OutputChange); - } - - void InUseFeedback_OutputChange(object sender, EventArgs e) - { - if(InUseTracker.InUseFeedback.BoolValue) - { - StartDeviceUsage(); - } - else - { - EndDeviceUsage(); - } - } - - - /// - /// Stores the usage start time - /// - public void StartDeviceUsage() - { - UsageStartTime = DateTime.Now; - } - - /// - /// Calculates the difference between the usage start and end times, gets the total minutes used and fires an event to pass that info to a consumer - /// - public void EndDeviceUsage() - { - try - { - UsageEndTime = DateTime.Now; - - if (UsageStartTime != null) - { - var timeUsed = UsageEndTime - UsageStartTime; - - var handler = DeviceUsageEnded; - - if (handler != null) - { - Debug.Console(1, "Device Usage Ended for: {0} at {1}. In use for {2} minutes.", Parent.Name, UsageEndTime, timeUsed.Minutes); - handler(this, new DeviceUsageEventArgs() { UsageEndTime = UsageEndTime, MinutesUsed = timeUsed.Minutes }); - } - } - } - catch (Exception e) - { -<<<<<<< HEAD - Debug.Console(1, "Device Usage Ended at {0}. In use for {1} minutes.", UsageEndTime, timeUsed.Minutes); - handler(this, new DeviceUsageEventArgs() { UsageEndTime = UsageEndTime, MinutesUsed = timeUsed.Minutes }); -======= - Debug.Console(1, "Error ending device usage: {0}", e); ->>>>>>> origin/feature/fusion-nyu - } - } - } - - public class DeviceUsageEventArgs : EventArgs - { - public DateTime UsageEndTime { get; set; } - public int MinutesUsed { get; set; } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/IVolumeAndAudioInterfaces.cs b/Essentials Core/PepperDashEssentialsBase/Devices/IVolumeAndAudioInterfaces.cs deleted file mode 100644 index f215d527..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/IVolumeAndAudioInterfaces.cs +++ /dev/null @@ -1,105 +0,0 @@ -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; } - } - - /// - /// A class that implements this contains a reference to a current IBasicVolumeControls device. - /// The class may have multiple IBasicVolumeControls. - /// - public interface IHasCurrentVolumeControls - { - IBasicVolumeControls CurrentVolumeControls { 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 deleted file mode 100644 index c67afe1c..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/IrOutputPortController.cs +++ /dev/null @@ -1,145 +0,0 @@ -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/NewInterfaces.cs b/Essentials Core/PepperDashEssentialsBase/Devices/NewInterfaces.cs deleted file mode 100644 index ca6524f4..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/NewInterfaces.cs +++ /dev/null @@ -1,56 +0,0 @@ -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 deleted file mode 100644 index adb427fb..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/PresentationDeviceType.cs +++ /dev/null @@ -1,28 +0,0 @@ -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 IHasFeedbacks.cs b/Essentials Core/PepperDashEssentialsBase/Devices/REMOVE IHasFeedbacks.cs deleted file mode 100644 index 511a952b..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/REMOVE IHasFeedbacks.cs +++ /dev/null @@ -1,56 +0,0 @@ -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/SmartObjectBaseTypes.cs b/Essentials Core/PepperDashEssentialsBase/Devices/SmartObjectBaseTypes.cs deleted file mode 100644 index 37e62036..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/SmartObjectBaseTypes.cs +++ /dev/null @@ -1,11 +0,0 @@ - -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 deleted file mode 100644 index ba70a29e..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Devices/SourceListItem.cs +++ /dev/null @@ -1,112 +0,0 @@ -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 - { - [JsonProperty("sourceKey")] - 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" - /// - [JsonProperty("preferredName")] - 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 - /// - [JsonProperty("name")] - public string Name { get; set; } - - [JsonProperty("icon")] - public string Icon { get; set; } - - [JsonProperty("altIcon")] - public string AltIcon { get; set; } - - [JsonProperty("includeInSourceList")] - public bool IncludeInSourceList { get; set; } - - [JsonProperty("order")] - public int Order { get; set; } - - [JsonProperty("volumeControlKey")] - public string VolumeControlKey { get; set; } - - [JsonProperty("type")] - public eSourceListItemType Type { get; set; } - - [JsonProperty("routeList")] - public List RouteList { get; set; } - - [JsonProperty("disableCodecSharing")] - public bool DisableCodecSharing { get; set; } - - [JsonProperty("disableRoutedSharing")] - public bool DisableRoutedSharing { 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 deleted file mode 100644 index a1fd6287..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Display/BasicIrDisplay.cs +++ /dev/null @@ -1,204 +0,0 @@ -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 deleted file mode 100644 index 06b4da07..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Display/DELETE IRDisplayBase.cs +++ /dev/null @@ -1,105 +0,0 @@ -//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 deleted file mode 100644 index 39cbbdf2..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Display/DisplayBase.cs +++ /dev/null @@ -1,127 +0,0 @@ -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, IUsageTracking - { - public BoolFeedback PowerIsOnFeedback { get; protected set; } - public BoolFeedback IsCoolingDownFeedback { get; protected set; } - public BoolFeedback IsWarmingUpFeedback { get; private set; } - - public UsageTracking UsageTracker { get; 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(); - - PowerIsOnFeedback.OutputChange += PowerIsOnFeedback_OutputChange; - } - - void PowerIsOnFeedback_OutputChange(object sender, EventArgs e) - { - if (UsageTracker != null) - { - if (PowerIsOnFeedback.BoolValue) - UsageTracker.StartDeviceUsage(); - else - UsageTracker.EndDeviceUsage(); - } - } - - public abstract void PowerOn(); - public abstract void PowerOff(); - public abstract void PowerToggle(); - - public virtual List Feedbacks - { - get - { - return new List - { - PowerIsOnFeedback, - IsCoolingDownFeedback, - IsWarmingUpFeedback - }; - } - } - - public abstract void ExecuteSwitch(object selector); - - } - - /// - /// - /// - public abstract class TwoWayDisplayBase : DisplayBase - { - public StringFeedback CurrentInputFeedback { get; private set; } - - abstract protected Func CurrentInputFeedbackFunc { get; } - - - public static MockDisplay DefaultDisplay - { - get - { - if (_DefaultDisplay == null) - _DefaultDisplay = new MockDisplay("default", "Default Display"); - return _DefaultDisplay; - } - } - static MockDisplay _DefaultDisplay; - - public TwoWayDisplayBase(string key, string name) - : base(key, name) - { - CurrentInputFeedback = new StringFeedback(CurrentInputFeedbackFunc); - - WarmupTime = 7000; - CooldownTime = 15000; - - Feedbacks.Add(CurrentInputFeedback); - - - } - - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs b/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs deleted file mode 100644 index 50604e54..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs +++ /dev/null @@ -1,178 +0,0 @@ -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; } } - protected override Func CurrentInputFeedbackFunc { get { return () => "Not Implemented"; } } - - int VolumeHeldRepeatInterval = 200; - ushort VolumeInterval = 655; - 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.InvokeFireUpdate(); - // Fake power-up cycle - WarmupTimer = new CTimer(o => - { - _IsWarmingUp = false; - _PowerIsOn = true; - IsWarmingUpFeedback.InvokeFireUpdate(); - PowerIsOnFeedback.InvokeFireUpdate(); - }, 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.InvokeFireUpdate(); - IsCoolingDownFeedback.InvokeFireUpdate(); - // Fake cool-down cycle - CooldownTimer = new CTimer(o => - { - Debug.Console(2, this, "Cooldown timer ending"); - _IsCoolingDown = false; - IsCoolingDownFeedback.InvokeFireUpdate(); - }, 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.InvokeFireUpdate(); - } - - public void MuteOn() - { - _IsMuted = true; - MuteFeedback.InvokeFireUpdate(); - } - - public void MuteOff() - { - _IsMuted = false; - MuteFeedback.InvokeFireUpdate(); - } - - public BoolFeedback MuteFeedback { get; private set; } - - #endregion - - #region IBasicVolumeControls Members - - public void VolumeUp(bool pressRelease) - { - //while (pressRelease) - //{ - Debug.Console(2, this, "Volume Down {0}", pressRelease); - if (pressRelease) - { - var newLevel = _FakeVolumeLevel + VolumeInterval; - SetVolume((ushort)newLevel); - CrestronEnvironment.Sleep(VolumeHeldRepeatInterval); - } - //} - } - - public void VolumeDown(bool pressRelease) - { - //while (pressRelease) - //{ - Debug.Console(2, this, "Volume Up {0}", pressRelease); - if (pressRelease) - { - var newLevel = _FakeVolumeLevel - VolumeInterval; - SetVolume((ushort)newLevel); - CrestronEnvironment.Sleep(VolumeHeldRepeatInterval); - } - //} - } - - public void MuteToggle() - { - _IsMuted = !_IsMuted; - MuteFeedback.InvokeFireUpdate(); - } - - #endregion - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Ethernet/EthernetStatistics.cs b/Essentials Core/PepperDashEssentialsBase/Ethernet/EthernetStatistics.cs deleted file mode 100644 index bac6a20d..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Ethernet/EthernetStatistics.cs +++ /dev/null @@ -1,44 +0,0 @@ -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/BoolFeedback.cs b/Essentials Core/PepperDashEssentialsBase/Feedbacks/BoolFeedback.cs deleted file mode 100644 index db007fc4..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Feedbacks/BoolFeedback.cs +++ /dev/null @@ -1,110 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; - -namespace PepperDash.Essentials.Core -{ - /// - /// 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. The ValueFunc is - /// evaluated whenever FireUpdate() is called - /// - public override bool BoolValue { get { return _BoolValue; } } - bool _BoolValue; - - public override eCueType Type { get { return eCueType.Bool; } } - - /// - /// Fake value to be used in test mode - /// - public bool TestValue { get; private set; } - - /// - /// Func that evaluates on FireUpdate - /// - public Func ValueFunc { 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() - { - bool newValue = InTestMode ? TestValue : ValueFunc.Invoke(); - if (newValue != _BoolValue) - { - _BoolValue = newValue; - LinkedInputSigs.ForEach(s => UpdateSig(s)); - LinkedComplementInputSigs.ForEach(s => UpdateComplementSig(s)); - OnOutputChange(newValue); - } - } - - 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); - } - - public override string ToString() - { - return (InTestMode ? "TEST -- " : "") + BoolValue.ToString(); - } - - /// - /// Puts this in test mode, sets the test value and fires an update. - /// - /// - public void SetTestValue(bool value) - { - TestValue = value; - InTestMode = true; - FireUpdate(); - } - - void UpdateSig(BoolInputSig sig) - { - sig.BoolValue = _BoolValue; - } - - void UpdateComplementSig(BoolInputSig sig) - { - sig.BoolValue = !_BoolValue; - } - } - -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Feedbacks/BoolFeedbackOneShot.cs b/Essentials Core/PepperDashEssentialsBase/Feedbacks/BoolFeedbackOneShot.cs deleted file mode 100644 index cc183569..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Feedbacks/BoolFeedbackOneShot.cs +++ /dev/null @@ -1,69 +0,0 @@ -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 deleted file mode 100644 index 53a5e559..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Feedbacks/BoolFeedbackPulseExtender.cs +++ /dev/null @@ -1,78 +0,0 @@ -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 deleted file mode 100644 index 3074254e..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Feedbacks/BoolOutputLogicals.cs +++ /dev/null @@ -1,131 +0,0 @@ -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/FeedbackBase.cs b/Essentials Core/PepperDashEssentialsBase/Feedbacks/FeedbackBase.cs deleted file mode 100644 index f5672e0d..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Feedbacks/FeedbackBase.cs +++ /dev/null @@ -1,88 +0,0 @@ -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 virtual string SerialValue { get { return ""; } } - - public Cue Cue { get; private set; } - - public abstract eCueType Type { get; } - - /// - /// Feedbacks can be put into test mode for simulation of events without real data. - /// Using JSON debugging methods and the Set/ClearTestValue methods, we can simulate - /// Feedback behaviors - /// - public bool InTestMode { get; protected set; } - - /// - /// Base Constructor - empty - /// - protected Feedback() - { - } - - protected Feedback(Cue cue) - { - Cue = cue; - } - - /// - /// Clears test mode and fires update. - /// - public void ClearTestValue() - { - InTestMode = false; - FireUpdate(); - } - - /// - /// Fires an update synchronously - /// - public abstract void FireUpdate(); - - /// - /// Fires the update asynchronously within a CrestronInvoke - /// - public void InvokeFireUpdate() - { - CrestronInvoke.BeginInvoke(o => FireUpdate()); - } - - ///// - ///// Helper method that fires event. Use this intstead of calling OutputChange - ///// - //protected void OnOutputChange() - //{ - // if (OutputChange != null) OutputChange(this, EventArgs.Empty); - //} - - protected void OnOutputChange(bool value) - { - if (OutputChange != null) OutputChange(this, new FeedbackEventArgs(value)); - } - - protected void OnOutputChange(int value) - { - if (OutputChange != null) OutputChange(this, new FeedbackEventArgs(value)); - } - - - protected void OnOutputChange(string value) - { - if (OutputChange != null) OutputChange(this, new FeedbackEventArgs(value)); - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Feedbacks/FeedbackEventArgs.cs b/Essentials Core/PepperDashEssentialsBase/Feedbacks/FeedbackEventArgs.cs deleted file mode 100644 index 9a7f5c29..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Feedbacks/FeedbackEventArgs.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Core -{ - public class FeedbackEventArgs : EventArgs - { - public bool BoolValue { get; private set; } - public int IntValue { get; private set; } - public ushort UShortValue - { - get - { - return (ushort)IntValue; - } - } - public string StringValue { get; private set; } - public eFeedbackEventType Type { get; private set; } - - public FeedbackEventArgs(bool value) - { - BoolValue = value; - Type = eFeedbackEventType.TypeBool; - } - - public FeedbackEventArgs(int value) - { - IntValue = value; - Type = eFeedbackEventType.TypeInt; - } - - public FeedbackEventArgs(string value) - { - StringValue = value; - Type = eFeedbackEventType.TypeString; - } - } - - public enum eFeedbackEventType - { - TypeBool, - TypeInt, - TypeString - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Feedbacks/IntFeedback.cs b/Essentials Core/PepperDashEssentialsBase/Feedbacks/IntFeedback.cs deleted file mode 100644 index 878f11e2..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Feedbacks/IntFeedback.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; - -namespace PepperDash.Essentials.Core -{ - 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 TestValue { get; private set; } - - /// - /// Func evaluated on FireUpdate - /// - 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 = InTestMode ? TestValue : ValueFunc.Invoke(); - if (newValue != _IntValue) - { - _IntValue = newValue; - LinkedInputSigs.ForEach(s => UpdateSig(s)); - OnOutputChange(newValue); - } - } - - public void LinkInputSig(UShortInputSig sig) - { - LinkedInputSigs.Add(sig); - UpdateSig(sig); - } - - public void UnlinkInputSig(UShortInputSig sig) - { - LinkedInputSigs.Remove(sig); - } - - public override string ToString() - { - return (InTestMode ? "TEST -- " : "") + IntValue.ToString(); - } - - /// - /// Puts this in test mode, sets the test value and fires an update. - /// - /// - public void SetTestValue(int value) - { - TestValue = value; - InTestMode = true; - FireUpdate(); - } - - void UpdateSig(UShortInputSig sig) - { - sig.UShortValue = UShortValue; - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Feedbacks/SerialFeedback.cs b/Essentials Core/PepperDashEssentialsBase/Feedbacks/SerialFeedback.cs deleted file mode 100644 index d64400de..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Feedbacks/SerialFeedback.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; - -namespace PepperDash.Essentials.Core -{ - /// - /// To be used for serial data feedback where the event chain / asynchronicity must be maintained - /// and calculating the value based on a Func when it is needed will not suffice. - /// - public class SerialFeedback : Feedback - { - public override string SerialValue { get { return _SerialValue; } } - string _SerialValue; - - public override eCueType Type { get { return eCueType.Serial; } } - - /// - /// Used in testing. Set/Clear functions - /// - public string TestValue { get; private set; } - - List LinkedInputSigs = new List(); - - public SerialFeedback() - { - } - - public override void FireUpdate() - { - throw new NotImplementedException("This feedback type does not use Funcs"); - } - - public void FireUpdate(string newValue) - { - _SerialValue = newValue; - LinkedInputSigs.ForEach(s => UpdateSig(s, newValue)); - OnOutputChange(newValue); - } - - public void LinkInputSig(StringInputSig sig) - { - LinkedInputSigs.Add(sig); - UpdateSig(sig); - } - - public void UnlinkInputSig(StringInputSig sig) - { - LinkedInputSigs.Remove(sig); - } - - public override string ToString() - { - return (InTestMode ? "TEST -- " : "") + SerialValue; - } - - /// - /// Puts this in test mode, sets the test value and fires an update. - /// - /// - public void SetTestValue(string value) - { - TestValue = value; - InTestMode = true; - FireUpdate(TestValue); - } - - void UpdateSig(StringInputSig sig) - { - sig.StringValue = _SerialValue; - } - - void UpdateSig(StringInputSig sig, string value) - { - sig.StringValue = value; - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Feedbacks/StringFeedback.cs b/Essentials Core/PepperDashEssentialsBase/Feedbacks/StringFeedback.cs deleted file mode 100644 index bf7b772a..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Feedbacks/StringFeedback.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; - -namespace PepperDash.Essentials.Core -{ - public class StringFeedback : Feedback - { - public override string StringValue { get { return _StringValue; } } // ValueFunc.Invoke(); } } - string _StringValue; - - public override eCueType Type { get { return eCueType.String; } } - - /// - /// Used in testing. Set/Clear functions - /// - public string TestValue { get; private set; } - - /// - /// Evalutated on FireUpdate - /// - 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 = InTestMode ? TestValue : ValueFunc.Invoke(); - if (newValue != _StringValue) - { - _StringValue = newValue; - LinkedInputSigs.ForEach(s => UpdateSig(s)); - OnOutputChange(newValue); - } - } - - public void LinkInputSig(StringInputSig sig) - { - LinkedInputSigs.Add(sig); - UpdateSig(sig); - } - - public void UnlinkInputSig(StringInputSig sig) - { - LinkedInputSigs.Remove(sig); - } - - public override string ToString() - { - return (InTestMode ? "TEST -- " : "") + StringValue; - } - - /// - /// Puts this in test mode, sets the test value and fires an update. - /// - /// - public void SetTestValue(string value) - { - TestValue = value; - InTestMode = true; - FireUpdate(); - } - - 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 deleted file mode 100644 index 8e7e70c6..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Fusion/MOVED FusionSystemController.cs +++ /dev/null @@ -1,377 +0,0 @@ -//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/Global.cs b/Essentials Core/PepperDashEssentialsBase/Global/Global.cs deleted file mode 100644 index 74682dd1..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Global/Global.cs +++ /dev/null @@ -1,49 +0,0 @@ -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 string FilePathPrefix { get; private set; } - - public static char DirectorySeparator - { - get - { - return System.IO.Path.DirectorySeparatorChar; - } - } - - /// - /// Sets the file path prefix - /// - /// - public static void SetFilePathPrefix(string prefix) - { - FilePathPrefix = prefix; - } - - 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/Global/JobTimer.cs b/Essentials Core/PepperDashEssentialsBase/Global/JobTimer.cs deleted file mode 100644 index 83159c12..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Global/JobTimer.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Core -{ - public static class JobTimer - { - static CTimer MinuteTimer; - - static List Items = new List(); - - /// - /// - /// - /// - public static void AddAction(Action act) - { - - } - - /// - /// - /// - /// - /// - public static void AddJobTimerItem(JobTimerItem item) - { - var existing = Items.FirstOrDefault(i => i.Key == item.Key); - if (existing != null) - { - Items.Remove(existing); - } - Items.Add(item); - } - - static void CheckAndRunTimer() - { - if (Items.Count > 0 && MinuteTimer == null) - { - MinuteTimer = new CTimer(o => MinuteTimerCallback(), null, 60000, 60000); - } - } - - static void MinuteTimerCallback() - { - - - } - } - - /// - /// - /// - public class JobTimerItem - { - public string Key { get; private set; } - public Action JobAction { get; private set; } - public eJobTimerCycleTypes CycleType { get; private set; } - /// - /// - /// - public DateTime RunNextAt { get; set; } - - public JobTimerItem(string key, eJobTimerCycleTypes cycle, Action act) - { - - } - } - - public enum eJobTimerCycleTypes - { - RunEveryDay, - RunEveryHour, - RunEveryHalfHour, - RunEveryMinute - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/InUseTracking/IInUseTracking.cs b/Essentials Core/PepperDashEssentialsBase/InUseTracking/IInUseTracking.cs deleted file mode 100644 index 97a7c7f6..00000000 --- a/Essentials Core/PepperDashEssentialsBase/InUseTracking/IInUseTracking.cs +++ /dev/null @@ -1,16 +0,0 @@ -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 deleted file mode 100644 index 4bf1a551..00000000 --- a/Essentials Core/PepperDashEssentialsBase/InUseTracking/InUseTracking.cs +++ /dev/null @@ -1,100 +0,0 @@ -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 deleted file mode 100644 index fbeeb38e..00000000 --- a/Essentials Core/PepperDashEssentialsBase/License/EssentialsLicenseManager.cs +++ /dev/null @@ -1,98 +0,0 @@ -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/Lighting/Lighting Interfaces.cs b/Essentials Core/PepperDashEssentialsBase/Lighting/Lighting Interfaces.cs deleted file mode 100644 index 55c53784..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Lighting/Lighting Interfaces.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Core; - -namespace PepperDash.Essentials.Core.Lighting -{ - /// - /// Requirements for a device that implements lighting scene control - /// - public interface ILightingScenes - { - event EventHandler LightingSceneChange; - - List LightingScenes { get; } - - void SelectScene(LightingScene scene); - - LightingScene CurrentLightingScene { get; } - - } - - /// - /// Requirements for a device that implements master raise/lower - /// - public interface ILightingMasterRaiseLower - { - void MasterRaise(); - void MasterLower(); - void MasterRaiseLowerStop(); - } - - /// - /// Requiremnts for controlling a lighting load - /// - public interface ILightingLoad - { - void SetLoadLevel(int level); - void Raise(); - void Lower(); - - IntFeedback LoadLevelFeedback { get; } - BoolFeedback LoadIsOnFeedback { get; } - } - - public class LightingSceneChangeEventArgs : EventArgs - { - public LightingScene CurrentLightingScene { get; private set; } - - public LightingSceneChangeEventArgs(LightingScene scene) - { - CurrentLightingScene = scene; - } - } - -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Lighting/LightingBase.cs b/Essentials Core/PepperDashEssentialsBase/Lighting/LightingBase.cs deleted file mode 100644 index 4c629af4..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Lighting/LightingBase.cs +++ /dev/null @@ -1,94 +0,0 @@ -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.Lighting -{ - public abstract class LightingBase : Device, ILightingScenes - { - #region ILightingScenes Members - - public event EventHandler LightingSceneChange; - - public List LightingScenes { get; protected set; } - - public LightingScene CurrentLightingScene { get; protected set; } - - #endregion - - - public LightingBase(string key, string name) - : base(key, name) - { - LightingScenes = new List(); - - CurrentLightingScene = new LightingScene(); - } - - public abstract void SelectScene(LightingScene scene); - - public void SimulateSceneSelect(string sceneName) - { - Debug.Console(1, this, "Simulating selection of scene '{0}'", sceneName); - - var scene = LightingScenes.FirstOrDefault(s => s.Name.Equals(sceneName)); - - if (scene != null) - { - CurrentLightingScene = scene; - OnLightingSceneChange(); - } - } - - /// - /// Sets the IsActive property on each scene and fires the LightingSceneChange event - /// - protected void OnLightingSceneChange() - { - foreach (var scene in LightingScenes) - { - if (scene == CurrentLightingScene) - scene.IsActive = true; - else - scene.IsActive = false; - } - - var handler = LightingSceneChange; - if (handler != null) - { - handler(this, new LightingSceneChangeEventArgs(CurrentLightingScene)); - } - } - - } - - public class LightingScene - { - public string Name { get; set; } - public string ID { get; set; } - bool _IsActive; - public bool IsActive - { - get - { - return _IsActive; - } - set - { - _IsActive = value; - IsActiveFeedback.FireUpdate(); - } - } - public BoolFeedback IsActiveFeedback { get; set; } - - public LightingScene() - { - IsActiveFeedback = new BoolFeedback(new Func(() => IsActive)); - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Monitoring/CrestronGenericBaseCommunicationMonitor.cs b/Essentials Core/PepperDashEssentialsBase/Monitoring/CrestronGenericBaseCommunicationMonitor.cs deleted file mode 100644 index bd57b70a..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Monitoring/CrestronGenericBaseCommunicationMonitor.cs +++ /dev/null @@ -1,57 +0,0 @@ -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 deleted file mode 100644 index 06d198d7..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Monitoring/GenericCommunicationMonitor.cs +++ /dev/null @@ -1,157 +0,0 @@ -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; - Action PollAction; - - /// - /// - /// - /// - /// 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; - } - - /// - /// Poll is a provided action instead of string - /// - /// - /// - /// - /// - /// - /// - public GenericCommunicationMonitor(IKeyed parent, IBasicCommunication client, long pollTime, - long warningTime, long errorTime, Action pollAction) : - 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; - PollAction = pollAction; - } - - - /// - /// 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; - ResetErrorTimers(); - } - - void Poll() - { - StartErrorTimers(); - if (Client.IsConnected) - { - //Debug.Console(2, this, "Polling"); - if(PollAction != null) - PollAction.Invoke(); - else - Client.SendText(PollString); - } - else - { - Debug.Console(2, this, "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, this, "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 deleted file mode 100644 index 26675eb3..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Monitoring/Interfaces and things.cs +++ /dev/null @@ -1,56 +0,0 @@ - -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; } - } - - /// - /// StatusUnknown = 0, IsOk = 1, InWarning = 2, InError = 3 - /// - public enum MonitorStatus - { - StatusUnknown = 0, - IsOk = 1, - InWarning = 2, - InError = 3 - } - - 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 deleted file mode 100644 index bda2c126..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Monitoring/StatusMonitorBase.cs +++ /dev/null @@ -1,114 +0,0 @@ -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, IKeyName - { - public event EventHandler StatusChange; - - /// - /// Format returned: "parentdevkey-comMonitor" - /// - public string Key { get { return Parent.Key + "-comMonitor"; } } - - public string Name { get { return "Comm. monitor"; } } - - 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; - } - - protected void ResetErrorTimers() - { - if(WarningTimer != null) - WarningTimer.Reset(WarningTime, WarningTime); - if(ErrorTimer != null) - ErrorTimer.Reset(ErrorTime, ErrorTime); - - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Monitoring/StatusMonitorCollection.cs b/Essentials Core/PepperDashEssentialsBase/Monitoring/StatusMonitorCollection.cs deleted file mode 100644 index c600f57c..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Monitoring/StatusMonitorCollection.cs +++ /dev/null @@ -1,123 +0,0 @@ -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 deleted file mode 100644 index 1216cc82..00000000 --- a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj +++ /dev/null @@ -1,248 +0,0 @@ - - - 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 - ..\..\Release Package\ - 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.Fusion.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Remotes.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll - - - - False - ..\..\..\pepperdash-simplsharp-core\CLZ Builds\PepperDash_Core.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll - False - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll - False - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe - False - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rem S# Pro preparation will execute after these operations - - \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Presets/DevicePresets.cs b/Essentials Core/PepperDashEssentialsBase/Presets/DevicePresets.cs deleted file mode 100644 index 4f79626f..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Presets/DevicePresets.cs +++ /dev/null @@ -1,178 +0,0 @@ -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 deleted file mode 100644 index a43a7a2c..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Presets/DevicePresetsView.cs +++ /dev/null @@ -1,60 +0,0 @@ -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 deleted file mode 100644 index 95773c58..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Presets/Interfaces.cs +++ /dev/null @@ -1,22 +0,0 @@ -//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 deleted file mode 100644 index b9650e60..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Presets/PresetChannel.cs +++ /dev/null @@ -1,28 +0,0 @@ -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 deleted file mode 100644 index 78a9d1bf..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Presets/PresetsListSubpageReferenceListItem.cs +++ /dev/null @@ -1,49 +0,0 @@ -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 deleted file mode 100644 index 7f23a861..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System.Reflection; - -[assembly: AssemblyTitle("PepperDashEssentialsBase")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("PepperDashEssentialsBase")] -[assembly: AssemblyCopyright("Copyright © 2015")] -[assembly: AssemblyVersion("1.0.3.*")] \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Properties/ControlSystem.cfg b/Essentials Core/PepperDashEssentialsBase/Properties/ControlSystem.cfg deleted file mode 100644 index e69de29b..00000000 diff --git a/Essentials Core/PepperDashEssentialsBase/REMOVE SigId.cs b/Essentials Core/PepperDashEssentialsBase/REMOVE SigId.cs deleted file mode 100644 index 884f1601..00000000 --- a/Essentials Core/PepperDashEssentialsBase/REMOVE SigId.cs +++ /dev/null @@ -1,37 +0,0 @@ -//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/Ramps and Increments/ActionIncrementer.cs b/Essentials Core/PepperDashEssentialsBase/Ramps and Increments/ActionIncrementer.cs deleted file mode 100644 index f63d57bf..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Ramps and Increments/ActionIncrementer.cs +++ /dev/null @@ -1,120 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Core; - -namespace PepperDash.Essentials.Core -{ - /// - /// An incrementer that can use the values of some other object/primitive value to do its thing. - /// It uses an Action to set the value and a Func to get the value from whatever this is - /// attached to. - /// - public class ActionIncrementer - { - public int ChangeAmount { get; set; } - public int MaxValue { get; set; } - public int MinValue { get; set; } - public uint RepeatDelay { get; set; } - public uint RepeatTime { get; set; } - - Action SetAction; - Func GetFunc; - CTimer Timer; - - /// - /// - /// - /// - /// - /// - /// - /// - /// Action that will be called when this needs to set the destination value - /// Func that is called to get the current value - public ActionIncrementer(int changeAmount, int minValue, int maxValue, uint repeatDelay, uint repeatTime, Action setAction, Func getFunc) - { - SetAction = setAction; - GetFunc = getFunc; - ChangeAmount = changeAmount; - MaxValue = maxValue; - MinValue = minValue; - RepeatDelay = repeatDelay; - RepeatTime = repeatTime; - } - - /// - /// Starts incrementing cycle - /// - public void StartUp() - { - if (Timer != null) return; - Go(ChangeAmount); - } - - /// - /// Starts decrementing cycle - /// - public void StartDown() - { - if (Timer != null) return; - Go(-ChangeAmount); - } - - /// - /// Stops the repeat - /// - public void Stop() - { - if (Timer != null) - Timer.Stop(); - Timer = null; - } - - /// - /// Helper that does the work of setting new level, and starting repeat loop, checking against bounds first. - /// - /// - void Go(int change) - { - int currentLevel = GetFunc(); - // Fire once then pause - int newLevel = currentLevel + change; - bool atLimit = CheckLevel(newLevel, out newLevel); - SetAction(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); - } - - /// - /// Helper to check a new level against min/max. Returns revised level if new level - /// will go out of bounds - /// - /// The level to check against bounds - /// Revised level if bounds are exceeded. Min or max - /// true if new level is at or past bounds - 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; - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Ramps and Increments/NumericalHelpers.cs b/Essentials Core/PepperDashEssentialsBase/Ramps and Increments/NumericalHelpers.cs deleted file mode 100644 index 50c12ddc..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Ramps and Increments/NumericalHelpers.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Core -{ - public class NumericalHelpers - { - /// - /// Scales a value - /// - /// - /// - /// - /// - /// - /// - public static double Scale(double input, double inMin, double inMax, double outMin, double outMax) - { - //Debug.Console(2, this, "Scaling (double) input '{0}' with min '{1}'/max '{2}' to output range min '{3}'/max '{4}'", input, inMin, inMax, outMin, outMax); - - double inputRange = inMax - inMin; - - if (inputRange <= 0) - { - throw new ArithmeticException(string.Format("Invalid Input Range '{0}' for Scaling. Min '{1}' Max '{2}'.", inputRange, inMin, inMax)); - } - - double outputRange = outMax - outMin; - - var output = (((input - inMin) * outputRange) / inputRange) + outMin; - - // Debug.Console(2, this, "Scaled output '{0}'", output); - - return output; - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Ramps and Increments/UshortSigIncrementer.cs b/Essentials Core/PepperDashEssentialsBase/Ramps and Increments/UshortSigIncrementer.cs deleted file mode 100644 index 1a6f3c06..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Ramps and Increments/UshortSigIncrementer.cs +++ /dev/null @@ -1,100 +0,0 @@ -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 -{ - /// - /// 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/References/SSMonoIOLibrary.clz/SSMonoIOLibrary.clz b/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/SSMonoIOLibrary.clz deleted file mode 100644 index 1166c23e..00000000 Binary files a/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/SSMonoIOLibrary.clz and /dev/null differ diff --git a/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/SSMonoIOLibrary.config b/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/SSMonoIOLibrary.config deleted file mode 100644 index d1d099df..00000000 --- a/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/SSMonoIOLibrary.config +++ /dev/null @@ -1,16 +0,0 @@ - - - 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/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/manifest.info b/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/manifest.info deleted file mode 100644 index 99eb2339..00000000 --- a/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/manifest.info +++ /dev/null @@ -1,18 +0,0 @@ -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 deleted file mode 100644 index ac2eb253..00000000 Binary files a/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/manifest.ser and /dev/null differ diff --git a/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/SSMonoProTaskLibrary.config b/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/SSMonoProTaskLibrary.config deleted file mode 100644 index 3b250815..00000000 --- a/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/SSMonoProTaskLibrary.config +++ /dev/null @@ -1,16 +0,0 @@ - - - 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 deleted file mode 100644 index 927a567e..00000000 Binary files a/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/SSMonoProTaskLibrary.cplz and /dev/null differ diff --git a/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/SimplSharpData.dat b/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/SimplSharpData.dat deleted file mode 100644 index 816bfe12..00000000 Binary files a/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/SimplSharpData.dat and /dev/null differ diff --git a/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/manifest.info b/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/manifest.info deleted file mode 100644 index 821d5130..00000000 --- a/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/manifest.info +++ /dev/null @@ -1,30 +0,0 @@ -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 deleted file mode 100644 index d24ab36c..00000000 Binary files a/Essentials Core/PepperDashEssentialsBase/References/SSMonoProTaskLibrary.cplz/manifest.ser and /dev/null differ diff --git a/Essentials Core/PepperDashEssentialsBase/Room/MOVED RoomEventArgs.cs b/Essentials Core/PepperDashEssentialsBase/Room/MOVED RoomEventArgs.cs deleted file mode 100644 index bca9bb62..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Room/MOVED RoomEventArgs.cs +++ /dev/null @@ -1,41 +0,0 @@ -//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 deleted file mode 100644 index 97bc8b32..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Room/Room.cs +++ /dev/null @@ -1,56 +0,0 @@ -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 deleted file mode 100644 index 0d439d09..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Room/RoomCues.cs +++ /dev/null @@ -1,61 +0,0 @@ -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 deleted file mode 100644 index ad4a3458..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/IRoutingInputsExtensions.cs +++ /dev/null @@ -1,300 +0,0 @@ -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 deleted file mode 100644 index 352a35dc..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingInterfaces.cs +++ /dev/null @@ -1,57 +0,0 @@ -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 deleted file mode 100644 index e2a026ab..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingPort.cs +++ /dev/null @@ -1,144 +0,0 @@ -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 deleted file mode 100644 index ba972ab7..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/RoutingPortCollection.cs +++ /dev/null @@ -1,26 +0,0 @@ -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 deleted file mode 100644 index 6a89d2de..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Routing-CHECK REMOVE/TieLine.cs +++ /dev/null @@ -1,142 +0,0 @@ -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/DummyRoutingInputsDevice.cs b/Essentials Core/PepperDashEssentialsBase/Routing/DummyRoutingInputsDevice.cs deleted file mode 100644 index 9a92c2ea..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Routing/DummyRoutingInputsDevice.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Core; - -namespace PepperDash.Essentials.Core.Routing -{ - public class DummyRoutingInputsDevice : Device, IRoutingSource - { - /// - /// A single output port, backplane, audioVideo - /// - public RoutingOutputPort AudioVideoOutputPort { get; private set; } - - /// - /// contains the output port - /// - public RoutingPortCollection OutputPorts - { - get { return new RoutingPortCollection() { AudioVideoOutputPort }; } - } - - /// - /// constructor - /// - /// key for special device - public DummyRoutingInputsDevice(string key) : base(key) - { - AudioVideoOutputPort = new RoutingOutputPort("internal", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.BackplaneOnly, - null, this, true); - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/ICardPortsDevice.cs b/Essentials Core/PepperDashEssentialsBase/Routing/ICardPortsDevice.cs deleted file mode 100644 index 6f9ea22f..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Routing/ICardPortsDevice.cs +++ /dev/null @@ -1,20 +0,0 @@ -//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 deleted file mode 100644 index d92a0202..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Routing/IRoutingInputsExtensions.cs +++ /dev/null @@ -1,333 +0,0 @@ -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(2, destination, "Executing full 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, "GetRouteToSource: {0} {1}--> {2}", cycle, source.Key, destination.Key); - - RoutingInputPort goodInputPort = null; - 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.DestinationPort.ParentDevice == destination - && t.SourcePort.ParentDevice == source); - if (directTie != null) // Found a tie directly to the source - { - 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, "ExecuteRoutes: {0}", 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, "Output 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(SwitchingDevice is IRouting) - return string.Format("{0} switches output '{1}' to input '{2}'", SwitchingDevice.Key, OutputPort.Selector, InputPort.Selector); - else - return string.Format("{0} switches to input '{1}'", SwitchingDevice.Key, InputPort.Selector); - - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs deleted file mode 100644 index b175341f..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs +++ /dev/null @@ -1,77 +0,0 @@ -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 - { - - } - - /// - /// Endpoint device like a display, that selects inputs - /// - 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 - { - } - - /// - /// Defines a midpoint device as have internal routing. Any devices in the middle of the - /// signal chain, that do switching, must implement this for routing to work otherwise - /// the routing algorithm will treat the IRoutingInputsOutputs device as a passthrough - /// device. - /// - public interface IRouting : IRoutingInputsOutputs - { - //void ClearRoute(object outputSelector); - void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType); - } - - /// - /// Defines an IRoutingOutputs devices as being a source - the start of the chain - /// - 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 deleted file mode 100644 index 886f4857..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPort.cs +++ /dev/null @@ -1,201 +0,0 @@ -using System; -using System.Collections.Generic; - -using PepperDash.Core; - - -namespace PepperDash.Essentials.Core -{ - /// - /// Base class for RoutingInput and Output ports - /// - public abstract class RoutingPort : IKeyed - { - public string Key { get; private set; } - public eRoutingSignalType Type { get; private set; } - public eRoutingPortConnectionType ConnectionType { get; private set; } - public readonly object Selector; - public bool IsInternal { get; private set; } - public object FeedbackMatchObject { get; set; } - - public RoutingPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType, object selector, bool isInternal) - { - Key = key; - Type = type; - ConnectionType = connType; - Selector = selector; - IsInternal = IsInternal; - } - } - - public enum eRoutingSignalType - { - Audio, - Video, - AudioVideo - } - - public enum eRoutingPortConnectionType - { - None, BackplaneOnly, DisplayPort, Dvi, Hdmi, Rgb, Vga, LineAudio, DigitalAudio, Sdi, - Composite, Component, DmCat, DmMmFiber, DmSmFiber, Speaker - } - - /// - /// Basic RoutingInput with no statuses. - /// - public class RoutingInputPort : RoutingPort - { - /// - /// The IRoutingInputs object this lives on - /// - public IRoutingInputs ParentDevice { get; private set; } - - /// - /// Constructor for a basic RoutingInputPort - /// - /// An object used to refer to this port in the IRouting device's ExecuteSwitch method. - /// May be string, number, whatever - /// The IRoutingInputs object this lives on - public RoutingInputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType, - object selector, IRoutingInputs parent) - : this (key, type, connType, selector, parent, false) - { - } - - /// - /// Constructor for a virtual routing input port that lives inside a device. For example - /// the ports that link a DM card to a DM matrix bus - /// - /// true for internal ports - public RoutingInputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType, - object selector, IRoutingInputs parent, bool isInternal) - : base(key, type, connType, selector, isInternal) - { - if (parent == null) - throw new ArgumentNullException("parent"); - ParentDevice = parent; - } - - - ///// - ///// Static method to get a named port from a named device - ///// - ///// Returns null if device or port doesn't exist - //public static RoutingInputPort GetDevicePort(string deviceKey, string portKey) - //{ - // var sourceDev = DeviceManager.GetDeviceForKey(deviceKey) as IRoutingInputs; - // if (sourceDev == null) - // return null; - // return sourceDev.InputPorts[portKey]; - //} - - ///// - ///// Static method to get a named port from a card in a named ICardPortsDevice device - ///// Uses ICardPortsDevice.GetChildInputPort - ///// - ///// 'input-N' - ///// null if device, card or port doesn't exist - //public static RoutingInputPort GetDeviceCardPort(string deviceKey, string cardKey, string portKey) - //{ - // var sourceDev = DeviceManager.GetDeviceForKey(deviceKey) as ICardPortsDevice; - // if (sourceDev == null) - // return null; - // return sourceDev.GetChildInputPort(cardKey, portKey); - //} - } - - /// - /// A RoutingInputPort for devices like DM-TX and DM input cards. - /// Will provide video statistics on connected signals - /// - public class RoutingInputPortWithVideoStatuses : RoutingInputPort - { - /// - /// Video statuses attached to this port - /// - public VideoStatusOutputs VideoStatus { get; private set; } - - /// - /// Constructor - /// - /// An object used to refer to this port in the IRouting device's ExecuteSwitch method. - /// May be string, number, whatever - /// The IRoutingInputs object this lives on - /// A VideoStatusFuncsWrapper used to assign the callback funcs that will get - /// the values for the various stats - public RoutingInputPortWithVideoStatuses(string key, - eRoutingSignalType type, eRoutingPortConnectionType connType, object selector, - IRoutingInputs parent, VideoStatusFuncsWrapper funcs) : - base(key, type, connType, selector, parent) - { - VideoStatus = new VideoStatusOutputs(funcs); - } - } - - public class RoutingOutputPort : RoutingPort - { - /// - /// The IRoutingOutputs object this port lives on - /// - public IRoutingOutputs ParentDevice { get; private set; } - - public InUseTracking InUseTracker { get; private set; } - - - /// - /// - /// An object used to refer to this port in the IRouting device's ExecuteSwitch method. - /// May be string, number, whatever - /// The IRoutingOutputs object this port lives on - public RoutingOutputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType, - object selector, IRoutingOutputs parent) - : this(key, type, connType, selector, parent, false) - { - } - - public RoutingOutputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType, - object selector, IRoutingOutputs parent, bool isInternal) - : base(key, type, connType, selector, isInternal) - { - if (parent == null) - throw new ArgumentNullException("parent"); - ParentDevice = parent; - InUseTracker = new InUseTracking(); - } - - public override string ToString() - { - return ParentDevice.Key + ":" + Key; - } - - ///// - ///// Static method to get a named port from a named device - ///// - ///// Returns null if device or port doesn't exist - //public static RoutingOutputPort GetDevicePort(string deviceKey, string portKey) - //{ - // var sourceDev = DeviceManager.GetDeviceForKey(deviceKey) as IRoutingOutputs; - // if (sourceDev == null) - // return null; - // var port = sourceDev.OutputPorts[portKey]; - // if (port == null) - // Debug.Console(0, "WARNING: Device '{0}' does does not contain output port '{1}'", deviceKey, portKey); - // return port; - //} - - ///// - ///// Static method to get a named port from a card in a named ICardPortsDevice device - ///// Uses ICardPortsDevice.GetChildOutputPort on that device - ///// - ///// 'input-N' or 'output-N' - ///// null if device, card or port doesn't exist - //public static RoutingOutputPort GetDeviceCardPort(string deviceKey, string cardKey, string portKey) - //{ - // var sourceDev = DeviceManager.GetDeviceForKey(deviceKey) as ICardPortsDevice; - // if (sourceDev == null) - // return null; - // var port = sourceDev.GetChildOutputPort(cardKey, portKey); - //} - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortCollection.cs b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortCollection.cs deleted file mode 100644 index ba972ab7..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortCollection.cs +++ /dev/null @@ -1,26 +0,0 @@ -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 deleted file mode 100644 index 70b9adef..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortNames.cs +++ /dev/null @@ -1,203 +0,0 @@ -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 - { - /// - /// antennaIn - /// - public const string AntennaIn = "antennaIn"; - /// - /// anyAudioIn - /// - public const string AnyAudioIn = "anyAudioIn"; - /// - /// anyAudioOut - /// - public const string AnyAudioOut = "anyAudioOut"; - /// - /// anyOut - /// - public const string AnyOut = "anyOut"; - /// - /// anyVideoIn - /// - public const string AnyVideoIn = "anyVideoIn"; - /// - /// anyVideoOut - /// - public const string AnyVideoOut = "anyVideoOut"; - /// - /// balancedAudioOut - /// - public const string BalancedAudioOut = "balancedAudioOut"; - /// - /// codecOsd - /// - public const string CodecOsd = "codecOsd"; - /// - /// componentIn - /// - public const string ComponentIn = "componentIn"; - /// - /// componentOut - /// - public const string ComponentOut = "componentOut"; - /// - /// compositeIn - /// - public const string CompositeIn = "compositeIn"; - /// - /// compositeOut - /// - public const string CompositeOut = "compositeOut"; - /// - /// displayPortIn - /// - public const string DisplayPortIn = "displayPortIn"; - /// - /// displayPortIn1 - /// - public const string DisplayPortIn1 = "displayPortIn1"; - /// - /// displayPortIn2 - /// - public const string DisplayPortIn2 = "displayPortIn2"; - /// - /// displayPortIn3 - /// - public const string DisplayPortIn3 = "displayPortIn3"; - /// - /// displayPortOut - /// - public const string DisplayPortOut = "displayPortOut"; - /// - /// dmIn - /// - public const string DmIn = "dmIn"; - /// - /// dmOut - /// - public const string DmOut = "dmOut"; - /// - /// dviIn - /// - public const string DviIn = "dviIn"; - /// - /// dviIn1 - /// - public const string DviIn1 = "dviIn1"; - /// - /// dviOut - /// - public const string DviOut = "dviOut"; - /// - /// hdmiIn - /// - public const string HdmiIn = "hdmiIn"; - /// - /// hdmiIn1 - /// - public const string HdmiIn1 = "hdmiIn1"; - /// - /// hdmiIn1PC - /// - public const string HdmiIn1PC = "hdmiIn1PC"; - /// - /// hdmiIn2 - /// - public const string HdmiIn2 = "hdmiIn2"; - /// - /// hdmiIn2PC - /// - public const string HdmiIn2PC = "hdmiIn2PC"; - /// - /// hdmiIn3 - /// - public const string HdmiIn3 = "hdmiIn3"; - /// - /// hdmiIn4 - /// - public const string HdmiIn4 = "hdmiIn4"; - /// - /// hdmiIn5 - /// - public const string HdmiIn5 = "hdmiIn5"; - /// - /// hdmiIn6 - /// - public const string HdmiIn6 = "hdmiIn6"; - /// - /// hdmiOut - /// - public const string HdmiOut = "hdmiOut"; - /// - /// hdmiOut1 - /// - public const string HdmiOut1 = "hdmiOut1"; - /// - /// hdmiOut2 - /// - public const string HdmiOut2 = "hdmiOut2"; - /// - /// hdmiOut3 - /// - public const string HdmiOut3 = "hdmiOut3"; - /// - /// hdmiOut4 - /// - public const string HdmiOut4 = "hdmiOut4"; - /// - /// hdmiOut5 - /// - public const string HdmiOut5 = "hdmiOut5"; - /// - /// hdmiOut6 - /// - public const string HdmiOut6 = "hdmiOut6"; - /// - /// none - /// - public const string None = "none"; - /// - /// rgbIn - /// - public const string RgbIn = "rgbIn"; - /// - /// rgbIn1 - /// - public const string RgbIn1 = "rgbIn1"; - /// - /// rgbIn2 - /// - public const string RgbIn2 = "rgbIn2"; - /// - /// vgaIn - /// - public const string VgaIn = "vgaIn"; - /// - /// vgaIn1 - /// - public const string VgaIn1 = "vgaIn1"; - /// - /// vgaOut - /// - public const string VgaOut = "vgaOut"; - /// - /// IPC/OPS - /// - public const string IpcOps = "ipcOps"; - /// - /// MediaPlayer - /// - public const string MediaPlayer = "mediaPlayer"; - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/TieLine.cs b/Essentials Core/PepperDashEssentialsBase/Routing/TieLine.cs deleted file mode 100644 index 25bf4ea3..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Routing/TieLine.cs +++ /dev/null @@ -1,111 +0,0 @@ -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 deleted file mode 100644 index d0087747..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Routing/TieLineConfig.cs +++ /dev/null @@ -1,118 +0,0 @@ -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/Shades/Shade Interfaces.cs b/Essentials Core/PepperDashEssentialsBase/Shades/Shade Interfaces.cs deleted file mode 100644 index f8887e40..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Shades/Shade Interfaces.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Core; - -namespace PepperDash.Essentials.Core.Shades -{ - public interface IShades - { - List Shades { get; } - } - - /// - /// Requirements for a device that implements basic Open/Close shade control - /// - public interface IShadesOpenClose - { - void Open(); - void Close(); - } - - /// - /// Requirements for a device that implements basic Open/Close/Stop shade control (Uses 3 relays) - /// - public interface IShadesOpenCloseStop : IShadesOpenClose - { - void StopOrPreset(); - } - - /// - /// Requirements for a shade device that provides open/closed feedback - /// - public interface iShadesRaiseLowerFeedback - { - BoolFeedback ShadeIsOpenFeedback { get; } - BoolFeedback ShadeIsClosedFeedback { get; } - } - -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Shades/ShadeBase.cs b/Essentials Core/PepperDashEssentialsBase/Shades/ShadeBase.cs deleted file mode 100644 index 5fbede52..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Shades/ShadeBase.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Core; -using PepperDash.Essentials.Core.CrestronIO; - -namespace PepperDash.Essentials.Core.Shades -{ - /// - /// Base class for a shade device - /// - public abstract class ShadeBase : Device, IShadesOpenClose - { - public ShadeBase(string key, string name) - : base(key, name) - { - - } - - #region iShadesOpenClose Members - - public abstract void Open(); - public abstract void StopOrPreset(); - public abstract void Close(); - - #endregion - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Shades/ShadeController.cs b/Essentials Core/PepperDashEssentialsBase/Shades/ShadeController.cs deleted file mode 100644 index 8d9c5e7f..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Shades/ShadeController.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Core; - -namespace PepperDash.Essentials.Core.Shades -{ - /// - /// Class that contains the shades to be controlled in a room - /// - public class ShadeController : Device, IShades - { - ShadeControllerConfigProperties Config; - - public List Shades { get; private set; } - - public ShadeController(string key, string name, ShadeControllerConfigProperties config) - : base(key, name) - { - Config = config; - - Shades = new List(); - } - - public override bool CustomActivate() - { - foreach (var shadeConfig in Config.Shades) - { - var shade = DeviceManager.GetDeviceForKey(shadeConfig.Key) as ShadeBase; - - if (shade != null) - { - AddShade(shade); - } - } - return base.CustomActivate(); - } - - void AddShade(ShadeBase shade) - { - Shades.Add(shade); - } - } - - public class ShadeControllerConfigProperties - { - public List Shades { get; set; } - - - public class ShadeConfig - { - public string Key { get; set; } - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/SigHelper.cs b/Essentials Core/PepperDashEssentialsBase/SigHelper.cs deleted file mode 100644 index 86395114..00000000 --- a/Essentials Core/PepperDashEssentialsBase/SigHelper.cs +++ /dev/null @@ -1,72 +0,0 @@ -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); - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDPad.cs b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDPad.cs deleted file mode 100644 index 2307be7e..00000000 --- a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDPad.cs +++ /dev/null @@ -1,24 +0,0 @@ -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 deleted file mode 100644 index bf73ba1b..00000000 --- a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDynamicList.cs +++ /dev/null @@ -1,128 +0,0 @@ -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; } - - /// - /// Wrapper for smart object - /// - /// - /// True if the standard user object action handler will be used - /// The starting join of the string sigs for the button labels - 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 deleted file mode 100644 index f30d8da1..00000000 --- a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectHelper.cs +++ /dev/null @@ -1,128 +0,0 @@ -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 deleted file mode 100644 index 6fadf491..00000000 --- a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectHelperBase.cs +++ /dev/null @@ -1,86 +0,0 @@ -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 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; - } - - /// - /// Helper to get a sig name with debugging when fail - /// - /// - /// - public BoolOutputSig GetBoolOutputNamed(string name) - { - if (SmartObject.BooleanOutput.Contains(name)) - return SmartObject.BooleanOutput[name]; - else - Debug.Console(0, "WARNING: Cannot get signal. Smart object {0} on trilist {1:x2} does not contain signal '{2}'", - SmartObject.ID, SmartObject.Device.ID, name); - return null; - } - - /// - /// Sets action on signal after checking for existence. - /// - /// - /// - public void SetBoolAction(string name, Action a) - { - if (SmartObject.BooleanOutput.Contains(name)) - SmartObject.BooleanOutput[name].UserObject = a; - else - { - Debug.Console(0, "WARNING: Cannot set action. Smart object {0} on trilist {1:x2} does not contain signal '{2}'", - SmartObject.ID, SmartObject.Device.ID, name); - } - } - - /// - /// 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 deleted file mode 100644 index 7e574242..00000000 --- a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectNumeric.cs +++ /dev/null @@ -1,41 +0,0 @@ -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 - { - /// - /// Defaults to "Misc_1". The name of the button in VTPro (Usually the text) - /// - public string Misc1SigName { get; set; } - /// - /// Defaults to "Misc_2". The name of the button in VTPro (Usually the text) - /// - public string Misc2SigName { get; set; } - - 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(Misc1SigName); } } - public BoolOutputSig Misc2 { get { return GetBoolOutputNamed(Misc2SigName); } } - - public SmartObjectNumeric(SmartObject so, bool useUserObjectHandler) : base(so, useUserObjectHandler) - { - Misc1SigName = "Misc_1"; - Misc2SigName = "Misc_2"; - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SubpageReferencList/SourceListSubpageReferenceList.cs b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SubpageReferencList/SourceListSubpageReferenceList.cs deleted file mode 100644 index e8c49b40..00000000 --- a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SubpageReferencList/SourceListSubpageReferenceList.cs +++ /dev/null @@ -1,167 +0,0 @@ - - - -//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/SmartObjects/SubpageReferencList/SubpageReferenceList.cs b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SubpageReferencList/SubpageReferenceList.cs deleted file mode 100644 index 2f8794f0..00000000 --- a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SubpageReferencList/SubpageReferenceList.cs +++ /dev/null @@ -1,263 +0,0 @@ - -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 have not been 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(2, "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, "ERROR: TriList 0x{0:X2} Cannot load smart object {1}. Verify correct SGD file is loaded", - 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/SmartObjects/SubpageReferencList/SubpageReferenceListItem.cs b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SubpageReferencList/SubpageReferenceListItem.cs deleted file mode 100644 index 30e15f74..00000000 --- a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SubpageReferencList/SubpageReferenceListItem.cs +++ /dev/null @@ -1,34 +0,0 @@ -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/Timers/CountdownTimer.cs b/Essentials Core/PepperDashEssentialsBase/Timers/CountdownTimer.cs deleted file mode 100644 index a8da97e4..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Timers/CountdownTimer.cs +++ /dev/null @@ -1,134 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Core; - -namespace PepperDash.Essentials.Core -{ - public class SecondsCountdownTimer: IKeyed - { - public event EventHandler HasStarted; - public event EventHandler HasFinished; - public event EventHandler WasCancelled; - - public string Key { get; private set; } - - public BoolFeedback IsRunningFeedback { get; private set; } - bool _IsRunning; - - public IntFeedback PercentFeedback { get; private set; } - public StringFeedback TimeRemainingFeedback { get; private set; } - - public bool CountsDown { get; set; } - public int SecondsToCount { get; set; } - - public DateTime StartTime { get; private set; } - public DateTime FinishTime { get; private set; } - - CTimer SecondTimer; - - /// - /// - /// - /// - public SecondsCountdownTimer(string key) - { - Key = key; - IsRunningFeedback = new BoolFeedback(() => _IsRunning); - - TimeRemainingFeedback = new StringFeedback(() => - { - // Need to handle up and down here. - - if (StartTime == null || FinishTime == null) - return ""; - var timeSpan = FinishTime - DateTime.Now; - return Math.Round(timeSpan.TotalSeconds).ToString(); - }); - - PercentFeedback = new IntFeedback(() => - { - if (StartTime == null || FinishTime == null) - return 0; - double percent = (FinishTime - DateTime.Now).TotalSeconds - / (FinishTime - StartTime).TotalSeconds - * 100; - return (int)percent; - }); - } - - /// - /// - /// - public void Start() - { - if (_IsRunning) - return; - StartTime = DateTime.Now; - FinishTime = StartTime + TimeSpan.FromSeconds(SecondsToCount); - - if (SecondTimer != null) - SecondTimer.Stop(); - SecondTimer = new CTimer(SecondElapsedTimerCallback, null, 0, 1000); - _IsRunning = true; - IsRunningFeedback.FireUpdate(); - - var handler = HasStarted; - if (handler != null) - handler(this, new EventArgs()); - } - - /// - /// - /// - public void Reset() - { - _IsRunning = false; - Start(); - } - - /// - /// - /// - public void Cancel() - { - StopHelper(); - - var handler = WasCancelled; - if (handler != null) - handler(this, new EventArgs()); - } - - /// - /// Called upon expiration, or calling this will force timer to finish. - /// - public void Finish() - { - StopHelper(); - - var handler = HasFinished; - if (handler != null) - handler(this, new EventArgs()); - } - - void StopHelper() - { - if (SecondTimer != null) - SecondTimer.Stop(); - _IsRunning = false; - IsRunningFeedback.FireUpdate(); - } - - void SecondElapsedTimerCallback(object o) - { - PercentFeedback.FireUpdate(); - TimeRemainingFeedback.FireUpdate(); - - if (DateTime.Now >= FinishTime) - Finish(); - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Touchpanels/Keyboards/HabaneroKeyboardController.cs b/Essentials Core/PepperDashEssentialsBase/Touchpanels/Keyboards/HabaneroKeyboardController.cs deleted file mode 100644 index 5e068c12..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Touchpanels/Keyboards/HabaneroKeyboardController.cs +++ /dev/null @@ -1,436 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro.DeviceSupport; - -namespace PepperDash.Essentials.Core.Touchpanels.Keyboards -{ - public class HabaneroKeyboardController - { - /// - /// Single-key press events, rather than using a built-up text string on the OutputFeedback - /// - public event EventHandler KeyPress; - - public BasicTriList TriList { get; private set; } - - public StringFeedback OutputFeedback { get; private set; } - - public bool IsVisible { get; private set; } - - public string DotComButtonString { get; set; } - - public string GoButtonText { get; set; } - - public string SecondaryButtonText { get; set; } - - public bool GoButtonVisible { get; set; } - - public bool SecondaryButtonVisible { get; set; } - - int ShiftMode = 0; - - StringBuilder Output; - - public Action HideAction { get; set; } - - CTimer BackspaceTimer; - - /// - /// - /// - /// - public HabaneroKeyboardController(BasicTriList trilist) - { - TriList = trilist; - Output = new StringBuilder(); - OutputFeedback = new StringFeedback(() => Output.ToString()); - DotComButtonString = ".com"; - } - - /// - /// Shows the keyboard and attaches sig handlers in the range of 2901-2969 - /// - public void Show() - { - if (IsVisible) - return; - - TriList.SetSigTrueAction(ClosePressJoin, Hide); - TriList.SetSigTrueAction(GoButtonPressJoin, () => OnKeyPress(KeyboardSpecialKey.GoButton)); - TriList.SetSigTrueAction(SecondaryButtonPressJoin, () => OnKeyPress(KeyboardSpecialKey.SecondaryButton)); - TriList.SetSigTrueAction(2921, () => Press(A(ShiftMode))); - TriList.SetSigTrueAction(2922, () => Press(B(ShiftMode))); - TriList.SetSigTrueAction(2923, () => Press(C(ShiftMode))); - TriList.SetSigTrueAction(2924, () => Press(D(ShiftMode))); - TriList.SetSigTrueAction(2925, () => Press(E(ShiftMode))); - TriList.SetSigTrueAction(2926, () => Press(F(ShiftMode))); - TriList.SetSigTrueAction(2927, () => Press(G(ShiftMode))); - TriList.SetSigTrueAction(2928, () => Press(H(ShiftMode))); - TriList.SetSigTrueAction(2929, () => Press(I(ShiftMode))); - TriList.SetSigTrueAction(2930, () => Press(J(ShiftMode))); - TriList.SetSigTrueAction(2931, () => Press(K(ShiftMode))); - TriList.SetSigTrueAction(2932, () => Press(L(ShiftMode))); - TriList.SetSigTrueAction(2933, () => Press(M(ShiftMode))); - TriList.SetSigTrueAction(2934, () => Press(N(ShiftMode))); - TriList.SetSigTrueAction(2935, () => Press(O(ShiftMode))); - TriList.SetSigTrueAction(2936, () => Press(P(ShiftMode))); - TriList.SetSigTrueAction(2937, () => Press(Q(ShiftMode))); - TriList.SetSigTrueAction(2938, () => Press(R(ShiftMode))); - TriList.SetSigTrueAction(2939, () => Press(S(ShiftMode))); - TriList.SetSigTrueAction(2940, () => Press(T(ShiftMode))); - TriList.SetSigTrueAction(2941, () => Press(U(ShiftMode))); - TriList.SetSigTrueAction(2942, () => Press(V(ShiftMode))); - TriList.SetSigTrueAction(2943, () => Press(W(ShiftMode))); - TriList.SetSigTrueAction(2944, () => Press(X(ShiftMode))); - TriList.SetSigTrueAction(2945, () => Press(Y(ShiftMode))); - TriList.SetSigTrueAction(2946, () => Press(Z(ShiftMode))); - TriList.SetSigTrueAction(2947, () => Press('.')); - TriList.SetSigTrueAction(2948, () => Press('@')); - TriList.SetSigTrueAction(2949, () => Press(' ')); - TriList.SetSigHeldAction(2950, 500, StartBackspaceRepeat, StopBackspaceRepeat, Backspace); - //TriList.SetSigTrueAction(2950, Backspace); - TriList.SetSigTrueAction(2951, Shift); - TriList.SetSigTrueAction(2952, NumShift); - TriList.SetSigTrueAction(2953, Clear); - TriList.SetSigTrueAction(2954, () => Press(DotComButtonString)); - - TriList.SetBool(GoButtonVisibleJoin, GoButtonVisible); - TriList.SetString(GoButtonTextJoin, GoButtonText); - TriList.SetBool(SecondaryButtonVisibleJoin, SecondaryButtonVisible); - TriList.SetString(SecondaryButtonTextJoin, SecondaryButtonText); - - TriList.SetBool(KeyboardVisible, true); - ShowKeys(); - IsVisible = true; - } - - /// - /// Hides the keyboard and disconnects ALL sig handlers from 2901 - 2969 - /// - public void Hide() - { - if (!IsVisible) - return; - - for (uint i = 2901; i < 2970; i++) - TriList.ClearBoolSigAction(i); - - // run attached actions - if(HideAction != null) - HideAction(); - - TriList.SetBool(KeyboardVisible, false); - IsVisible = false; - } - - /// - /// - /// - /// - public void Press(char c) - { - OnKeyPress(c.ToString()); - Output.Append(c); - OutputFeedback.FireUpdate(); - ResetShift(); - } - - /// - /// - /// - /// - public void Press(string s) - { - OnKeyPress(s); - Output.Append(s); - OutputFeedback.FireUpdate(); - ResetShift(); - } - - /// - /// - /// - public void EnableGoButton() - { - TriList.SetBool(GoButtonEnableJoin, true); - } - - /// - /// - /// - public void DisableGoButton() - { - TriList.SetBool(GoButtonEnableJoin, false); - } - - void ResetShift() - { - if (ShiftMode == 1) - { - ShiftMode = 0; - ShowKeys(); - } - else if (ShiftMode == 3) - { - ShiftMode = 2; - ShowKeys(); - } - } - - char A(int i) { return new char[] { 'a', 'A', '?', '?' }[i]; } - char B(int i) { return new char[] { 'b', 'B', ':', ':' }[i]; } - char C(int i) { return new char[] { 'c', 'C', '>', '>' }[i]; } - char D(int i) { return new char[] { 'd', 'D', '_', '_' }[i]; } - char E(int i) { return new char[] { 'e', 'E', '3', '#' }[i]; } - char F(int i) { return new char[] { 'f', 'F', '=', '=' }[i]; } - char G(int i) { return new char[] { 'g', 'G', '+', '+' }[i]; } - char H(int i) { return new char[] { 'h', 'H', '[', '[' }[i]; } - char I(int i) { return new char[] { 'i', 'I', '8', '*' }[i]; } - char J(int i) { return new char[] { 'j', 'J', ']', ']' }[i]; } - char K(int i) { return new char[] { 'k', 'K', '/', '/' }[i]; } - char L(int i) { return new char[] { 'l', 'L', '\\', '\\' }[i]; } - char M(int i) { return new char[] { 'm', 'M', '"', '"' }[i]; } - char N(int i) { return new char[] { 'n', 'N', '\'', '\'' }[i]; } - char O(int i) { return new char[] { 'o', 'O', '9', '(' }[i]; } - char P(int i) { return new char[] { 'p', 'P', '0', ')' }[i]; } - char Q(int i) { return new char[] { 'q', 'Q', '1', '!' }[i]; } - char R(int i) { return new char[] { 'r', 'R', '4', '$' }[i]; } - char S(int i) { return new char[] { 's', 'S', '-', '-' }[i]; } - char T(int i) { return new char[] { 't', 'T', '5', '%' }[i]; } - char U(int i) { return new char[] { 'u', 'U', '7', '&' }[i]; } - char V(int i) { return new char[] { 'v', 'V', ';', ';' }[i]; } - char W(int i) { return new char[] { 'w', 'W', '2', '@' }[i]; } - char X(int i) { return new char[] { 'x', 'X', '<', '<' }[i]; } - char Y(int i) { return new char[] { 'y', 'Y', '6', '^' }[i]; } - char Z(int i) { return new char[] { 'z', 'Z', ',', ',' }[i]; } - - /// - /// Does what it says - /// - void StartBackspaceRepeat() - { - if (BackspaceTimer == null) - { - BackspaceTimer = new CTimer(o => Backspace(), null, 0, 175); - } - } - - /// - /// Does what it says - /// - void StopBackspaceRepeat() - { - if (BackspaceTimer != null) - { - BackspaceTimer.Stop(); - BackspaceTimer = null; - } - } - - void Backspace() - { - OnKeyPress(KeyboardSpecialKey.Backspace); - - if (Output.Length > 0) - { - Output.Remove(Output.Length - 1, 1); - OutputFeedback.FireUpdate(); - } - } - - void Clear() - { - OnKeyPress(KeyboardSpecialKey.Clear); - - Output.Remove(0, Output.Length); - OutputFeedback.FireUpdate(); - } - - /* When in mode 0 (lowercase): - * shift button: up arrow 0 - * numShift button: 123/#$@#$ 0 - * - * - shift --> mode 1 - * - double-tap shift --> caps lock - * - numShift --> mode 2 - * - * mode 1 (uppercase) - * shift button: down arrow 1 - * numShift button: 123/##$# 0 - * - * - shift --> mode 0 - * - numShift --> mode 2 - * - * - Tapping any key will go back to mode 0 - * - * mode 2 (numbers-sym) - * Shift button: #$#$#$ 2 - * numShift: ABC 1 - * - * - shift --> mode 3 - * - double-tap shift --> caps lock - * - numShift --> mode 0 - * - * mode 3 (sym) - * Shift button: 123 3 - * numShift: ABC 1 - * - * - shift --> mode 2 - * - numShift --> mode 0 - * - * - Tapping any key will go back to mode 2 - */ - void Shift() - { - if (ShiftMode == 0) - ShiftMode = 1; - else if (ShiftMode == 1) - ShiftMode = 0; - else if (ShiftMode == 2) - ShiftMode = 3; - else - ShiftMode = 2; - - ShowKeys(); - } - - void NumShift() - { - if (ShiftMode == 0 || ShiftMode == 1) - ShiftMode = 2; - else if (ShiftMode == 2 || ShiftMode == 3) - ShiftMode = 0; - ShowKeys(); - } - - void ShowKeys() - { - TriList.SetString(2921, A(ShiftMode).ToString()); - TriList.SetString(2922, B(ShiftMode).ToString()); - TriList.SetString(2923, C(ShiftMode).ToString()); - TriList.SetString(2924, D(ShiftMode).ToString()); - TriList.SetString(2925, E(ShiftMode).ToString()); - TriList.SetString(2926, F(ShiftMode).ToString()); - TriList.SetString(2927, G(ShiftMode).ToString()); - TriList.SetString(2928, H(ShiftMode).ToString()); - TriList.SetString(2929, I(ShiftMode).ToString()); - TriList.SetString(2930, J(ShiftMode).ToString()); - TriList.SetString(2931, K(ShiftMode).ToString()); - TriList.SetString(2932, L(ShiftMode).ToString()); - TriList.SetString(2933, M(ShiftMode).ToString()); - TriList.SetString(2934, N(ShiftMode).ToString()); - TriList.SetString(2935, O(ShiftMode).ToString()); - TriList.SetString(2936, P(ShiftMode).ToString()); - TriList.SetString(2937, Q(ShiftMode).ToString()); - TriList.SetString(2938, R(ShiftMode).ToString()); - TriList.SetString(2939, S(ShiftMode).ToString()); - TriList.SetString(2940, T(ShiftMode).ToString()); - TriList.SetString(2941, U(ShiftMode).ToString()); - TriList.SetString(2942, V(ShiftMode).ToString()); - TriList.SetString(2943, W(ShiftMode).ToString()); - TriList.SetString(2944, X(ShiftMode).ToString()); - TriList.SetString(2945, Y(ShiftMode).ToString()); - TriList.SetString(2946, Z(ShiftMode).ToString()); - TriList.SetString(2954, DotComButtonString); - - TriList.SetUshort(2951, (ushort)ShiftMode); // 0 = up, 1 = down, 2 = #, 3 = 123 - TriList.SetUshort(2952, (ushort)(ShiftMode < 2 ? 0 : 1)); // 0 = #, 1 = abc - } - - /// - /// Event fire helper for text - /// - /// - void OnKeyPress(string text) - { - var handler = KeyPress; - if (handler != null) - KeyPress(this, new KeyboardControllerPressEventArgs(text)); - } - - /// - /// event helper for special keys - /// - /// - void OnKeyPress(KeyboardSpecialKey key) - { - var handler = KeyPress; - if (handler != null) - KeyPress(this, new KeyboardControllerPressEventArgs(key)); - } - - - /// - /// 2901 - /// - public const uint KeyboardVisible = 2901; - /// - /// 2902 - /// - public const uint ClosePressJoin = 2902; - /// - /// 2903 - /// - public const uint GoButtonPressJoin = 2903; - /// - /// 2903 - /// - public const uint GoButtonTextJoin = 2903; - /// - /// 2904 - /// - public const uint SecondaryButtonPressJoin = 2904; - /// - /// 2904 - /// - public const uint SecondaryButtonTextJoin = 2904; - /// - /// 2905 - /// - public const uint GoButtonVisibleJoin = 2905; - /// - /// 2906 - /// - public const uint SecondaryButtonVisibleJoin = 2906; - /// - /// 2907 - /// - public const uint GoButtonEnableJoin = 2907; - /// - /// 2910 - /// - public const uint ClearPressJoin = 2910; - /// - /// 2911 - /// - public const uint ClearVisibleJoin = 2911; - - } - - /// - /// - /// - public class KeyboardControllerPressEventArgs : EventArgs - { - public string Text { get; private set; } - public KeyboardSpecialKey SpecialKey { get; private set; } - - public KeyboardControllerPressEventArgs(string text) - { - Text = text; - } - - public KeyboardControllerPressEventArgs(KeyboardSpecialKey key) - { - SpecialKey = key; - } - } - - public enum KeyboardSpecialKey - { - None = 0, Backspace, Clear, GoButton, SecondaryButton - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Touchpanels/MOVED LargeTouchpanelControllerBase.cs b/Essentials Core/PepperDashEssentialsBase/Touchpanels/MOVED LargeTouchpanelControllerBase.cs deleted file mode 100644 index 97c937b3..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Touchpanels/MOVED LargeTouchpanelControllerBase.cs +++ /dev/null @@ -1,275 +0,0 @@ -//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 deleted file mode 100644 index 334050e0..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Touchpanels/MOVED UIControllers/DevicePageControllerBase.cs +++ /dev/null @@ -1,244 +0,0 @@ -//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 deleted file mode 100644 index 4df05c6a..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Touchpanels/ModalDialog.cs +++ /dev/null @@ -1,190 +0,0 @@ -using System; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro.DeviceSupport; -using PepperDash.Core; - -namespace PepperDash.Essentials.Core -{ - public class ModalDialog - { - /// - /// Bool press 3991 - /// - public const uint Button1Join = 3991; - /// - /// Bool press 3992 - /// - public const uint Button2Join = 3992; - /// - /// 3993 - /// - public const uint CancelButtonJoin = 3993; - /// - ///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; - /// - /// Visibility join to show "X" button 3997 - /// - public const uint CancelVisibleJoin = 3997; - /// - /// 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; } - } - - /// - /// - /// - public bool CanCancel { get; private set; } - - - BasicTriList TriList; - - Action ModalCompleteAction; - - 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)); - triList.SetSigFalseAction(Button2Join, () => OnModalComplete(2)); - triList.SetSigFalseAction(CancelButtonJoin, () => { if (CanCancel) CancelDialog(); }); - CanCancel = 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 PresentModalDialog(uint numberOfButtons, string title, string iconName, - string message, string button1Text, - string button2Text, bool showGauge, bool showCancel, Action completeAction) - { - // 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 guage - TriList.BooleanInput[TimerVisibleJoin].BoolValue = showGauge; - - CanCancel = showCancel; - TriList.BooleanInput[CancelVisibleJoin].BoolValue = showCancel; - - //Reveal and activate - TriList.BooleanInput[ModalVisibleJoin].BoolValue = true; - - return true; - } - - return false; - } - - /// - /// Hide dialog from elsewhere, fires CompleteAction - /// - public void CancelDialog() - { - OnModalComplete(0); - } - - /// - /// Hides dialog. Fires no action - /// - public void HideDialog() - { - TriList.BooleanInput[ModalVisibleJoin].BoolValue = false; - } - - // When the modal is cleared or times out, clean up the various bits - void OnModalComplete(uint buttonNum) - { - TriList.BooleanInput[ModalVisibleJoin].BoolValue = false; - - var action = ModalCompleteAction; - if (action != null) - action(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 deleted file mode 100644 index 13cfabcc..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Touchpanels/REMOVE Tsr302Controller.cs +++ /dev/null @@ -1,135 +0,0 @@ -//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 deleted file mode 100644 index 42c365d1..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Touchpanels/SmartGraphicsTouchpanelControllerBase.cs +++ /dev/null @@ -1,309 +0,0 @@ -//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 deleted file mode 100644 index cb6399cb..00000000 --- a/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs +++ /dev/null @@ -1,254 +0,0 @@ -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 -{ - /// - /// 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. This provides no protection - /// from null sigs - /// - /// 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(); }); - } - - /// - /// Sets an action to a held sig - /// - /// The sig - public static BoolOutputSig SetSigHeldAction(this BasicTriList tl, uint sigNum, uint heldMs, Action heldAction) - { - return SetSigHeldAction(tl, sigNum, heldMs, heldAction, null); - } - - /// - /// Sets an action to a held sig as well as a released-without-hold action - /// - /// - public static BoolOutputSig SetSigHeldAction(this BoolOutputSig sig, uint heldMs, Action heldAction, Action holdReleasedAction, Action releaseAction) - { - CTimer heldTimer = null; - bool wasHeld = false; - return sig.SetBoolSigAction(press => - { - if (press) - { - wasHeld = false; - // Could insert a pressed action here - heldTimer = new CTimer(o => - { - // if still held and there's an action - if (sig.BoolValue && heldAction != null) - { - wasHeld = true; - // Hold action here - heldAction(); - } - }, heldMs); - } - else if (!press && !wasHeld) // released, no hold - { - heldTimer.Stop(); - if (releaseAction != null) - releaseAction(); - } - else // !press && wasHeld // released after held - { - heldTimer.Stop(); - if (holdReleasedAction != null) - holdReleasedAction(); - } - }); - - } - - /// - /// Sets an action to a held sig as well as a released-without-hold action - /// - /// The sig - public static BoolOutputSig SetSigHeldAction(this BasicTriList tl, uint sigNum, uint heldMs, Action heldAction, Action releaseAction) - { - return tl.BooleanOutput[sigNum].SetSigHeldAction(heldMs, heldAction, null, releaseAction); - } - - /// - /// Sets an action to a held sig, an action for the release of hold, as well as a released-without-hold action - /// - /// - public static BoolOutputSig SetSigHeldAction(this BasicTriList tl, uint sigNum, uint heldMs, Action heldAction, - Action holdReleasedAction, Action releaseAction) - { - return tl.BooleanOutput[sigNum].SetSigHeldAction(heldMs, heldAction, holdReleasedAction, releaseAction); - } - - /// - /// - /// - /// - /// - /// 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.StringOutput[sigNum].SetStringSigAction(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; - } - - /// - /// Helper method to set the value of a bool Sig on TriList - /// - public static void SetBool(this BasicTriList tl, uint sigNum, bool value) - { - tl.BooleanInput[sigNum].BoolValue = value; - } - - /// - /// Sends an true-false pulse to the sig - /// - /// - /// - public static void PulseBool(this BasicTriList tl, uint sigNum) - { - tl.BooleanInput[sigNum].Pulse(); - } - - /// - /// Sends a timed pulse to the sig - /// - /// - /// - /// - public static void PulseBool(this BasicTriList tl, uint sigNum, int ms) - { - tl.BooleanInput[sigNum].Pulse(ms); - } - - /// - /// Helper method to set the value of a ushort Sig on TriList - /// - public static void SetUshort(this BasicTriList tl, uint sigNum, ushort value) - { - tl.UShortInput[sigNum].UShortValue = value; - } - - /// - /// Helper method to set the value of a string Sig on TriList - /// - public static void SetString(this BasicTriList tl, uint sigNum, string value) - { - tl.StringInput[sigNum].StringValue = value; - } - } -} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/TriListBridges/HandlerBridge.cs b/Essentials Core/PepperDashEssentialsBase/TriListBridges/HandlerBridge.cs deleted file mode 100644 index e1a69707..00000000 --- a/Essentials Core/PepperDashEssentialsBase/TriListBridges/HandlerBridge.cs +++ /dev/null @@ -1,26 +0,0 @@ -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 deleted file mode 100644 index c272a65a..00000000 --- a/Essentials Core/PepperDashEssentialsBase/UI PageManagers/BlurayPageManager.cs +++ /dev/null @@ -1,42 +0,0 @@ -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 deleted file mode 100644 index 1f261f87..00000000 --- a/Essentials Core/PepperDashEssentialsBase/UI PageManagers/PageManager.cs +++ /dev/null @@ -1,96 +0,0 @@ -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 deleted file mode 100644 index f8838aed..00000000 --- a/Essentials Core/PepperDashEssentialsBase/UI PageManagers/SetTopBoxThreePanelPageManager.cs +++ /dev/null @@ -1,192 +0,0 @@ -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 deleted file mode 100644 index cb1e1840..00000000 --- a/Essentials Core/PepperDashEssentialsBase/UI PageManagers/SetTopBoxTwoPanelPageManager.cs +++ /dev/null @@ -1,60 +0,0 @@ -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 deleted file mode 100644 index dd7d605c..00000000 --- a/Essentials Core/PepperDashEssentialsBase/UI PageManagers/SinglePageManager.cs +++ /dev/null @@ -1,31 +0,0 @@ -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 deleted file mode 100644 index 5db78fb5..00000000 --- a/Essentials Core/PepperDashEssentialsBase/VideoStatus/VideoStatusCues.cs +++ /dev/null @@ -1,20 +0,0 @@ -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 deleted file mode 100644 index 1890a606..00000000 --- a/Essentials Core/PepperDashEssentialsBase/VideoStatus/VideoStatusOutputs.cs +++ /dev/null @@ -1,148 +0,0 @@ -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/Essentials DM/Essentials_DM.sln b/Essentials DM/Essentials_DM.sln deleted file mode 100644 index fa874f80..00000000 --- a/Essentials DM/Essentials_DM.sln +++ /dev/null @@ -1,20 +0,0 @@ - -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 deleted file mode 100644 index a0c9536c..00000000 --- a/Essentials DM/Essentials_DM/Cards REMOVE/DmInputCardBase.cs +++ /dev/null @@ -1,62 +0,0 @@ -//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 deleted file mode 100644 index c554539a..00000000 --- a/Essentials DM/Essentials_DM/Cards REMOVE/DmOutputCardBase.cs +++ /dev/null @@ -1,79 +0,0 @@ -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 deleted file mode 100644 index 3e3fd309..00000000 --- a/Essentials DM/Essentials_DM/Cards REMOVE/Dmc4kCoHdSingleOutputCard.cs +++ /dev/null @@ -1,43 +0,0 @@ -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 deleted file mode 100644 index b15c4006..00000000 --- a/Essentials DM/Essentials_DM/Cards REMOVE/Dmc4kHdoSingleOutputCard.cs +++ /dev/null @@ -1,46 +0,0 @@ -//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 deleted file mode 100644 index 40f6044c..00000000 --- a/Essentials DM/Essentials_DM/Cards REMOVE/DmcC4kInputCard.cs +++ /dev/null @@ -1,76 +0,0 @@ -//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 deleted file mode 100644 index e317085c..00000000 --- a/Essentials DM/Essentials_DM/Cards REMOVE/DmcHD4kInputCard.cs +++ /dev/null @@ -1,82 +0,0 @@ -//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 deleted file mode 100644 index 4b4a927e..00000000 --- a/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput.cs +++ /dev/null @@ -1,116 +0,0 @@ -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) - { - var remainingRatio = Output.Volume.UShortValue / 65535; - Output.Volume.CreateRamp(0, (uint)(400 * remainingRatio)); - } - else - Output.Volume.StopRamp(); - } - - /// - /// - /// - public void VolumeUp(bool pressRelease) - { - if (pressRelease) - { - var remainingRatio = (65535 - Output.Volume.UShortValue) / 65535; - Output.Volume.CreateRamp(65535, 400); - } - else - Output.Volume.StopRamp(); - } - - #endregion - } -} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput.cs.orig b/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput.cs.orig deleted file mode 100644 index acaf7916..00000000 --- a/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput.cs.orig +++ /dev/null @@ -1,120 +0,0 @@ -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) -<<<<<<< HEAD - { - var remainingRatio = Output.Volume.UShortValue / 65535; - Output.Volume.CreateRamp(0, (uint)(400 * remainingRatio)); - } -======= - Output.Volume.CreateRamp(0, 400); ->>>>>>> origin/feature/fusion-nyu - else - Output.Volume.StopRamp(); - } - - /// - /// - /// - public void VolumeUp(bool pressRelease) - { - if (pressRelease) - { - var remainingRatio = (65535 - Output.Volume.UShortValue) / 65535; - Output.Volume.CreateRamp(65535, 400); - } - else - Output.Volume.StopRamp(); - } - - #endregion - } -} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput_BACKUP_14408.cs b/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput_BACKUP_14408.cs deleted file mode 100644 index acaf7916..00000000 --- a/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput_BACKUP_14408.cs +++ /dev/null @@ -1,120 +0,0 @@ -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) -<<<<<<< HEAD - { - var remainingRatio = Output.Volume.UShortValue / 65535; - Output.Volume.CreateRamp(0, (uint)(400 * remainingRatio)); - } -======= - Output.Volume.CreateRamp(0, 400); ->>>>>>> origin/feature/fusion-nyu - else - Output.Volume.StopRamp(); - } - - /// - /// - /// - public void VolumeUp(bool pressRelease) - { - if (pressRelease) - { - var remainingRatio = (65535 - Output.Volume.UShortValue) / 65535; - Output.Volume.CreateRamp(65535, 400); - } - else - Output.Volume.StopRamp(); - } - - #endregion - } -} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput_BASE_14408.cs b/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput_BASE_14408.cs deleted file mode 100644 index 3a069c39..00000000 --- a/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput_BASE_14408.cs +++ /dev/null @@ -1,111 +0,0 @@ -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/DmCardAudioOutput_LOCAL_14408.cs b/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput_LOCAL_14408.cs deleted file mode 100644 index 4b4a927e..00000000 --- a/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput_LOCAL_14408.cs +++ /dev/null @@ -1,116 +0,0 @@ -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) - { - var remainingRatio = Output.Volume.UShortValue / 65535; - Output.Volume.CreateRamp(0, (uint)(400 * remainingRatio)); - } - else - Output.Volume.StopRamp(); - } - - /// - /// - /// - public void VolumeUp(bool pressRelease) - { - if (pressRelease) - { - var remainingRatio = (65535 - Output.Volume.UShortValue) / 65535; - Output.Volume.CreateRamp(65535, 400); - } - else - Output.Volume.StopRamp(); - } - - #endregion - } -} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput_REMOTE_14408.cs b/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput_REMOTE_14408.cs deleted file mode 100644 index 6c5c0275..00000000 --- a/Essentials DM/Essentials_DM/Chassis/DmCardAudioOutput_REMOTE_14408.cs +++ /dev/null @@ -1,110 +0,0 @@ -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); - 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 deleted file mode 100644 index 79a20f66..00000000 --- a/Essentials DM/Essentials_DM/Chassis/DmChassisController.cs +++ /dev/null @@ -1,569 +0,0 @@ -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 += 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/Chassis/HdMdNxM4kEController.cs b/Essentials DM/Essentials_DM/Chassis/HdMdNxM4kEController.cs deleted file mode 100644 index 26902061..00000000 --- a/Essentials DM/Essentials_DM/Chassis/HdMdNxM4kEController.cs +++ /dev/null @@ -1,127 +0,0 @@ -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; -using PepperDash.Essentials.DM.Config; - -namespace PepperDash.Essentials.DM.Chassis -{ - public class HdMdNxM4kEController : Device, IRoutingInputsOutputs, IRouting - { - public HdMdNxM Chassis { get; private set; } - - public RoutingPortCollection InputPorts { get; private set; } - public RoutingPortCollection OutputPorts { get; private set; } - - - - - /// - /// - /// - /// - /// - /// - public HdMdNxM4kEController(string key, string name, HdMdNxM chassis, - HdMdNxM4kEPropertiesConfig props) - : base(key, name) - { - Chassis = chassis; - - // logical ports - InputPorts = new RoutingPortCollection(); - for (uint i = 1; i <= 4; i++) - { - InputPorts.Add(new RoutingInputPort("hdmiIn" + i, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, i, this)); - } - OutputPorts = new RoutingPortCollection(); - OutputPorts.Add(new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, null, this)); - - // physical settings - if (props != null && props.Inputs != null) - { - foreach (var kvp in props.Inputs) - { - // strip "hdmiIn" - var inputNum = Convert.ToUInt32(kvp.Key.Substring(6)); - - var port = chassis.HdmiInputs[inputNum].HdmiInputPort; - // set hdcp disables - if (kvp.Value.DisableHdcp) - { - Debug.Console(0, this, "Configuration disables HDCP support on {0}", kvp.Key); - port.HdcpSupportOff(); - } - else - port.HdcpSupportOn(); - } - } - } - - public override bool CustomActivate() - { - var result = Chassis.Register(); - if (result != Crestron.SimplSharpPro.eDeviceRegistrationUnRegistrationResponse.Success) - { - Debug.Console(0, this, "Device registration failed: {0}", result); - return false; - } - - return base.CustomActivate(); - } - - - - #region IRouting Members - - public void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType) - { - // Try to make switch only when necessary. The unit appears to toggle when already selected. - var current = Chassis.HdmiOutputs[1].VideoOut; - if(current != Chassis.HdmiInputs[(uint)inputSelector]) - Chassis.HdmiOutputs[1].VideoOut = Chassis.HdmiInputs[(uint)inputSelector]; - } - - #endregion - - ///////////////////////////////////////////////////// - - /// - /// - /// - /// - /// - /// - /// - /// - public static HdMdNxM4kEController GetController(string key, string name, - string type, HdMdNxM4kEPropertiesConfig properties) - { - try - { - var ipid = properties.Control.IpIdInt; - var address = properties.Control.TcpSshProperties.Address; - - type = type.ToLower(); - if (type == "hdmd4x14ke") - { - var chassis = new HdMd4x14kE(ipid, address, Global.ControlSystem); - return new HdMdNxM4kEController(key, name, chassis, properties); - } - return null; - } - catch (Exception e) - { - Debug.Console(0, "ERROR Creating device key {0}: \r{1}", key, e); - return null; - } - } - } -} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Config/DMChassisConfig.cs b/Essentials DM/Essentials_DM/Config/DMChassisConfig.cs deleted file mode 100644 index 81f28afa..00000000 --- a/Essentials DM/Essentials_DM/Config/DMChassisConfig.cs +++ /dev/null @@ -1,47 +0,0 @@ -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 deleted file mode 100644 index 6cec273a..00000000 --- a/Essentials DM/Essentials_DM/Config/DeviceFactory.cs +++ /dev/null @@ -1,63 +0,0 @@ -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); - } - - else if (typeName.Equals("hdmd4x14ke")) - { - var props = JsonConvert.DeserializeObject - (properties.ToString()); - return PepperDash.Essentials.DM.Chassis.HdMdNxM4kEController.GetController(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 deleted file mode 100644 index 702e10b5..00000000 --- a/Essentials DM/Essentials_DM/Config/DmRmcConfig.cs +++ /dev/null @@ -1,25 +0,0 @@ -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 deleted file mode 100644 index 51d074f8..00000000 --- a/Essentials DM/Essentials_DM/Config/DmTxConfig.cs +++ /dev/null @@ -1,28 +0,0 @@ -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/Config/HdMdNxM4kEPropertiesConfig.cs b/Essentials DM/Essentials_DM/Config/HdMdNxM4kEPropertiesConfig.cs deleted file mode 100644 index 06411e39..00000000 --- a/Essentials DM/Essentials_DM/Config/HdMdNxM4kEPropertiesConfig.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Newtonsoft.Json; - -using PepperDash.Core; - -namespace PepperDash.Essentials.DM.Config -{ - /// - /// Defines the properties section of HdMdNxM boxes - /// - public class HdMdNxM4kEPropertiesConfig - { - [JsonProperty("control")] - public ControlPropertiesConfig Control { get; set; } - - [JsonProperty("inputs")] - public Dictionary Inputs { get; set; } - } -} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Config/InputPropertiesConfig.cs b/Essentials DM/Essentials_DM/Config/InputPropertiesConfig.cs deleted file mode 100644 index 40f958ec..00000000 --- a/Essentials DM/Essentials_DM/Config/InputPropertiesConfig.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.DM.Config -{ - public class InputPropertiesConfig - { - public string Name { get; set; } - - public bool DisableHdcp { get; set; } - } -} \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/DmPortName.cs b/Essentials DM/Essentials_DM/DmPortName.cs deleted file mode 100644 index ae8896a5..00000000 --- a/Essentials DM/Essentials_DM/DmPortName.cs +++ /dev/null @@ -1,34 +0,0 @@ -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 deleted file mode 100644 index ecefde5c..00000000 --- a/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc100CController.cs +++ /dev/null @@ -1,70 +0,0 @@ -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 deleted file mode 100644 index 635b9929..00000000 --- a/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4KScalerCController.cs +++ /dev/null @@ -1,156 +0,0 @@ -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 deleted file mode 100644 index f0b9eed4..00000000 --- a/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcHelper.cs +++ /dev/null @@ -1,138 +0,0 @@ -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 deleted file mode 100644 index f37597e5..00000000 --- a/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcScalerCController.cs +++ /dev/null @@ -1,73 +0,0 @@ -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 deleted file mode 100644 index f2765ce4..00000000 --- a/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTx201CController.cs +++ /dev/null @@ -1,196 +0,0 @@ -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 deleted file mode 100644 index f8f51fae..00000000 --- a/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTx401CController.cs +++ /dev/null @@ -1,246 +0,0 @@ -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 deleted file mode 100644 index fddc2fbe..00000000 --- a/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTx4k302CController.cs +++ /dev/null @@ -1,237 +0,0 @@ -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 deleted file mode 100644 index 268531af..00000000 --- a/Essentials DM/Essentials_DM/Endpoints/Transmitters/DmTxHelpers.cs +++ /dev/null @@ -1,105 +0,0 @@ -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 deleted file mode 100644 index 96053804..00000000 --- a/Essentials DM/Essentials_DM/Essentials_DM.csproj +++ /dev/null @@ -1,132 +0,0 @@ - - - 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\CLZ Builds\PepperDash_Core.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll - False - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll - False - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe - False - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5} - PepperDash_Essentials_Core - - - - - - - - - rem S# Pro preparation will execute after these operations - - \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Extensions.cs b/Essentials DM/Essentials_DM/Extensions.cs deleted file mode 100644 index 1ca7d9af..00000000 --- a/Essentials DM/Essentials_DM/Extensions.cs +++ /dev/null @@ -1,27 +0,0 @@ -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 deleted file mode 100644 index acab850c..00000000 --- a/Essentials DM/Essentials_DM/IDmHdmiInputExtensions.cs +++ /dev/null @@ -1,60 +0,0 @@ -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 deleted file mode 100644 index 26b950ce..00000000 --- a/Essentials DM/Essentials_DM/MOVE IBasicVideoStatusFeedbacks.cs +++ /dev/null @@ -1,19 +0,0 @@ -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 deleted file mode 100644 index a08c789f..00000000 --- a/Essentials DM/Essentials_DM/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System.Reflection; - -[assembly: AssemblyTitle("Essentials_DM")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Essentials_DM")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyVersion("1.0.3.*")] \ No newline at end of file diff --git a/Essentials DM/Essentials_DM/Properties/ControlSystem.cfg b/Essentials DM/Essentials_DM/Properties/ControlSystem.cfg deleted file mode 100644 index e69de29b..00000000 diff --git a/Essentials DM/Essentials_DM/VideoStatusHelpers.cs b/Essentials DM/Essentials_DM/VideoStatusHelpers.cs deleted file mode 100644 index 096b1e36..00000000 --- a/Essentials DM/Essentials_DM/VideoStatusHelpers.cs +++ /dev/null @@ -1,73 +0,0 @@ -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 DM/Essentials_DM/app.config b/Essentials DM/Essentials_DM/app.config deleted file mode 100644 index 476ee3b3..00000000 --- a/Essentials DM/Essentials_DM/app.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/Essentials Devices Common/Essentials Devices Common.sln b/Essentials Devices Common/Essentials Devices Common.sln deleted file mode 100644 index 84fa1346..00000000 --- a/Essentials Devices Common/Essentials Devices Common.sln +++ /dev/null @@ -1,20 +0,0 @@ - -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 deleted file mode 100644 index d9ba06cf..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Audio/GenericAudioOut.cs +++ /dev/null @@ -1,75 +0,0 @@ -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/ClassDiagram1.cd b/Essentials Devices Common/Essentials Devices Common/ClassDiagram1.cd deleted file mode 100644 index c9b09299..00000000 --- a/Essentials Devices Common/Essentials Devices Common/ClassDiagram1.cd +++ /dev/null @@ -1,740 +0,0 @@ - - - - - - AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAA= - Audio\GenericAudioOut.cs - - - - - - - AAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAgAAAAQA= - Audio\GenericAudioOut.cs - - - - - - - AAAAAAAAAAAAAAAAAAAIIAAAAAAACABAAAAAAAAAAAA= - Crestron\Gateways\CenRfgwController.cs - - - - - - gUyjAAoIAAAAxgYAABAAgAECABAoAEAQqcCAQHIABAI= - DiscPlayer\IRDiscPlayerBase.cs - - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA= - Factory\DeviceFactory.cs - - - - - - AAgAAAAAAAACAAAAAAAAAAAAAAAgAAAAAAAAAAIAAAA= - Generic\GenericSource.cs - - - - - - - AAwAAAAAAAACAAAAAAACAAAAAQAgAAAAAAAAAAIAAAA= - PC\InRoomPc.cs - - - - - - - AAwAAAAAAAACAAAAAAACAAAAAQAgAAAAAAAAAAIAAAA= - PC\Laptop.cs - - - - - - - AUgjCAqAEAASwgYAACAAoAECABAoAEAwrcCAQHKABAI= - SetTopBox\IRSetTopBoxBase.cs - - - - - - - AAAAAAAEEAAQAAAAAAAAIAAAAAAAAAAAAAAAAACAAAA= - SetTopBox\SetTopBoxPropertiesConfig.cs - - - - - - AAggAAIAAAAARAAAAAAAgAACABAoAEAQqACAQAAABAI= - Streaming\AppleTV.cs - - - - - - - AAggAAIAAAAABAAAAAAAgAACABAoAEAQqACAQAAABAI= - Streaming\Roku.cs - - - - - - - AAACAAAEAAAAAAAAAOAAAAQAAAAAAAAAAQAAAAAAAAA= - Codec\CodecActiveCallItem.cs - - - - - - AAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Codec\CodecActiveCallItem.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAA= - Codec\eCodecCallDirection.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAA= - Codec\eCodecCallStatus.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAA= - Codec\eCodecCallType.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAA= - Codec\eMeetingPrivacy.cs - - - - - - gIAAAAAAAAAAAACCAACAAAAAAAAAAAACAAAAAABAAAA= - Codec\iCodecInfo.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAA= - Codec\iHasCallFavorites.cs - - - - - - AAAAAAAQAAAAAgAAAAAAAAAAAAAAGAAAABAAAAAAACQ= - Codec\iHasCallHistory.cs - - - - - - AAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Codec\iHasDirectory.cs - - - - - - AAAAAAAAAAAIAAAAAAAAAAAABAAAAAIAAIAAQAAAAAA= - Codec\iHasDirectory.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA= - Codec\iHasDirectory.cs - - - - - - BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIAAAAAAAAA= - Codec\iHasDirectory.cs - - - - - - AAAAAgAAAAAAAEAAAAAAAAAAAAAAAAEIAAAAAAAAAAA= - Codec\iHasDirectory.cs - - - - - - AAAAAIAAAAAAAgAAAEAAAAAAAAAIAAAAAAAAAAAAAAA= - Codec\iHasDirectory.cs - - - - - - AAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Codec\iHasDirectory.cs - - - - - - AAAAAABAAAAAEAAAAAAAgAAEAAAABAAAAAAAIQAAAAA= - Codec\iHasScheduleAwareness.cs - - - - - - AAACAAAAAAACEEgAAAAAAAgQIAAoAQABAAQAAEgAAAA= - Codec\iHasScheduleAwareness.cs - - - - - - AAAAAAAAAAAAAAAAAEAAAABAAAAIAAAAAAAAAAgAAAA= - Codec\iHasScheduleAwareness.cs - - - - - - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAQAAAAA= - Codec\iHasScheduleAwareness.cs - - - - - - AAAAAAAAAAAQAAAAAAAAAAAAAAAAAIQAAACAABAAAAA= - VideoCodec\CiscoCodec\CiscoSparkCodecPropertiesConfig.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAA= - VideoCodec\CiscoCodec\CiscoSparkCodecPropertiesConfig.cs - - - - - - hC4gIEAIUAABoQAEgBACAAAdBC1gmsGRICKGdQNBACw= - Display\AvocorVTFDisplay.cs - - - - - - - AAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAEQAAAAA= - Display\ComTcpDisplayBase.cs - - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA= - Display\DeviceFactory.cs - - - - - - ogSIAAKIAAALCAAEABAQEAgABAAAAMIAAAAAEABAACA= - Display\NecPaSeriesProjector.cs - - - - - - hLQgIShIAABFQQRUAvICDRMQESwSEQKRKACCZQNAESY= - Display\NECPSXMDisplay.cs - - - - - - - hKwwIEAIQAABoUAGgBACAAAEBGxAmYORKCCGZQJAACw= - Display\SamsungMDCDisplay.cs - - - - - - - gACAAIAAAAEAQYCigAAAAAAQAACgCAAAAAAAAAMAAAI= - DSP\BiampTesira\BiampTesiraForteDsp.cs - - - - - - RAAgJACAAAAAAYAAAkIAAAAAIAQCEACJABACRAAAAUQ= - DSP\BiampTesira\BiampTesiraForteDspLevel.cs - - - - - - - BAAAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAA= - DSP\BiampTesira\BiampTesiraFortePropertiesConfig.cs - - - - - - AAAAAAAAEAAAAIAAAAAAAAAAAAAAAAAIAAEAAAAAAEQ= - DSP\BiampTesira\BiampTesiraFortePropertiesConfig.cs - - - - - - AAAAIAAAAACAAQQAAAAAQAAAAAAAIAAAABEAAAAAAEA= - DSP\BiampTesira\TesiraForteControlPoint.cs - - - - - - AAAAAAAAAAAEAIAgAAAAAAIAAAAAAAAAAAAAAAAAAAA= - DSP\DspBase.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - DSP\DspBase.cs - - - - - - BAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAQAAAAAQ= - DSP\DspBase.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAA= - DSP\PolycomSoundStructure\SoundStructureBasics.cs - - - - - - gACAEBAAAoAABQBAASAAAAAAAAEgAAACAAACAAMAQAI= - Environment\Lutron\LutronQuantum.cs - - - - - - - AAAAAAAEAAAAAAAAgQAAAAAAAAAAAAQCAAACAAAAAAA= - Environment\Lutron\LutronQuantum.cs - - - - - - gQAABAAAAxAAIACAgAgAgCBAUQAAQAgCIAEQAACBAAA= - Microphone\MicrophonePrivacyController.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAEAAAAAgAIAAAAAAAAAA= - Microphone\MicrophonePrivacyControllerConfig.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAA= - Microphone\MicrophonePrivacyControllerConfig.cs - - - - - - AAAAAAAAAAIAAAAAAAABAABgAAAAAASEABAAAAAAAAA= - Occupancy\EssentialsGlsOccupancySensorBaseController.cs - - - - - - - AAACBAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Occupancy\EssentialsOccupancyAggregator.cs - - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg= - VideoCodec\CiscoCodec\BookingsDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - VideoCodec\CiscoCodec\CallHistoryDataClasses.cs - - - - - - EAAAABAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAA= - VideoCodec\CiscoCodec\PhonebookDataClasses.cs - - - - - - BgYAIAACAQaKBACAAwAAUSQAAWYCEACDAAiAQBBCgQU= - VideoCodec\MockVC\MockVC.cs - - - - - - - gKAAAAAAAAAAAACCAACAAAAAAAAAAAACAAAAAABBAAA= - VideoCodec\MockVC\MockVC.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAA= - VideoCodec\MockVC\MockVcPropertiesConfig.cs - - - - - - BiwgAAECAASAAECAgQEDIABAAAYiEBCpCEigQBZCAQU= - VideoCodec\VideoCodecBase.cs - - - - - - - EAiCAAQAAgEAAQQAEAAAAAAAAAEAAAAAAACAAAAAAAM= - VideoCodec\VideoCodecBase.cs - - - - - - - jhQEtAJaASb7kSCwAwtxECSABsf2n1GBJEmAVJFKWTc= - VideoCodec\CiscoCodec\CiscoSparkCodec.cs - - - - - - - AAAAAAAAEAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA= - VideoCodec\CiscoCodec\CiscoSparkCodec.cs - - - - - - AIAAAAQACAEAAAQAEAAAAAAAAAAgAAAAAAAACAACACE= - VideoCodec\CiscoCodec\CiscoSparkCodec.cs - - - - - - - AAAAQAAAACAAAAABAAAAAAAIAIAAAAAAAQAAgAAAAAA= - VideoCodec\CiscoCodec\HttpApiServer.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - VideoCodec\CiscoCodec\xConfiguration.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - VideoCodec\CiscoCodec\xEvent.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - VideoCodec\CiscoCodec\xStatus.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - VideoCodec\CiscoCodec\xStatusSparkPlus.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Codec\iCodecAudio.cs - - - - - - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAA= - Codec\iCodecInfo.cs - - - - - - AAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Codec\iHasCallFavorites.cs - - - - - - AAAAAAAAAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAA= - Codec\iHasCallHistory.cs - - - - - - AAAAAAACAAAAAAAAAAAAAAAAAAAAAAAIAEAgABAAAAA= - Codec\iHasContentSharing.cs - - - - - - AAgAAAACAAAAAACAAAAAAAAAAAICAAAAAAAAAAQCAAA= - Codec\iHasDialer.cs - - - - - - AAAAAAAAAAAAgAAAAAAAAAAAAgCAAAAABAAAEAAAAAA= - Codec\iHasDirectory.cs - - - - - - AAAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAA= - Codec\iHasScheduleAwareness.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA= - Display\InputInterfaces.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAA= - Display\InputInterfaces.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAA= - Display\InputInterfaces.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAA= - Display\InputInterfaces.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAA= - Display\InputInterfaces.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAA= - Display\InputInterfaces.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA= - Display\InputInterfaces.cs - - - - - - QAAAAACAAAAAAAAAAAAAAAAAAAAAAAAIAAEAAAAAAAQ= - DSP\DspBase.cs - - - - - - AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Occupancy\iOccupancyStatusProvider.cs - - - - - - AAAAAAAAAAAgAAAAAAAAAAAAAAAEEgAAAAAAAAAAAAA= - VideoCodec\Interfaces\IHasCodecLayouts.cs - - - - - - ABAAEAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAABAAAAI= - VideoCodec\Interfaces\IHasCodecSelfview.cs - - - - - - AAAAAAAgAAAAAAAAAAAAAIAAAEAAAAAAAAAAAAAAAAA= - Crestron\Gateways\CenRfgwController.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAAAAAAABA= - Codec\eCodecCallDirection.cs - - - - - - CAgAAABAAAAAQAACAAABAAAAAAAAAAABCAAAAiAAQBA= - Codec\eCodecCallStatus.cs - - - - - - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAoBg= - Codec\eCodecCallType.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAQBA= - Codec\eMeetingPrivacy.cs - - - - - - AAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAAEAAAAAAABA= - Codec\iHasCallHistory.cs - - - - - - BAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAIAAAAAAABg= - Codec\iHasDirectory.cs - - - - - - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAABg= - Codec\iHasDirectory.cs - - - - - - BAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAIACg= - Codec\iHasScheduleAwareness.cs - - - - - - AACAACAAABAAgIAAgAAQAAAAAAAAIAAAIAAAACAEAAg= - Environment\Lutron\LutronQuantum.cs - - - - - - AAAAAAAAAAAACAQAAAAABAAEAAAAAAAAgAAAAAAAAAA= - VideoCodec\CiscoCodec\CiscoSparkCodec.cs - - - - \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Codec/CodecActiveCallItem.cs b/Essentials Devices Common/Essentials Devices Common/Codec/CodecActiveCallItem.cs deleted file mode 100644 index 2a49bd24..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Codec/CodecActiveCallItem.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Devices.Common.Codec - -{ - public class CodecActiveCallItem - { - public string Name { get; set; } - - public string Number { get; set; } - - public eCodecCallType Type { get; set; } - - public eCodecCallStatus Status { get; set; } - - public eCodecCallDirection Direction { get; set; } - - public string Id { get; set; } - - //public object CallMetaData { get; set; } - - /// - /// Returns true when this call is any status other than - /// Unknown, Disconnected, Disconnecting - /// - public bool IsActiveCall - { - get - { - return !(Status == eCodecCallStatus.Disconnected - || Status == eCodecCallStatus.Disconnecting - || Status == eCodecCallStatus.Idle - || Status == eCodecCallStatus.Unknown); - } - } - } - - /// - /// - /// - public class CodecCallStatusItemChangeEventArgs : EventArgs - { - public CodecActiveCallItem CallItem { get; private set; } - - public CodecCallStatusItemChangeEventArgs(CodecActiveCallItem item) - { - CallItem = item; - } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Codec/CodecActiveCallItem.cs.orig b/Essentials Devices Common/Essentials Devices Common/Codec/CodecActiveCallItem.cs.orig deleted file mode 100644 index 46746037..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Codec/CodecActiveCallItem.cs.orig +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Devices.Common.Codec - -{ - public class CodecActiveCallItem - { - public string Name { get; set; } - - public string Number { get; set; } - -<<<<<<< HEAD:Essentials Devices Common/Essentials Devices Common/Codec/CodecActiveCallItem.cs - public eCodecCallType Type { get; set; } - - public eCodecCallStatus Status { get; set; } - - public string Id { get; set; } -======= - public eCodecCallType Type { get; set; } - - public eCodecCallStatus Status { get; set; } - - public string Id { get; set; } - - public object CallMetaData { get; set; } ->>>>>>> origin/feature/cisco-spark-2:Essentials Devices Common/Essentials Devices Common/VideoCodec/CodecActiveCallItem.cs - } - - public enum eCodecCallType - { - Unknown = 0, Audio, Video -<<<<<<< HEAD:Essentials Devices Common/Essentials Devices Common/Codec/CodecActiveCallItem.cs - } - - public enum eCodecCallStatus - { - Unknown = 0, Dialing, Connected, Incoming, OnHold, Disconnected -======= - } - - public enum eCodecCallStatus - { - Unknown = 0, Dialing, Connected, Incoming, OnHold, Disconnected ->>>>>>> origin/feature/cisco-spark-2:Essentials Devices Common/Essentials Devices Common/VideoCodec/CodecActiveCallItem.cs - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Codec/eCodecCallDirection.cs b/Essentials Devices Common/Essentials Devices Common/Codec/eCodecCallDirection.cs deleted file mode 100644 index e397ae09..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Codec/eCodecCallDirection.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Devices.Common.Codec - -{ - public enum eCodecCallDirection - { - Unknown = 0, Incoming, Outgoing - } - - public class CodecCallDirection - { - /// - /// Takes the Cisco call type and converts to the matching enum - /// - /// - /// - public static eCodecCallDirection ConvertToDirectionEnum(string s) - { - switch (s.ToLower()) - { - case "incoming": - { - return eCodecCallDirection.Incoming; - } - case "outgoing": - { - return eCodecCallDirection.Outgoing; - } - default: - return eCodecCallDirection.Unknown; - } - - } - - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Codec/eCodecCallStatus.cs b/Essentials Devices Common/Essentials Devices Common/Codec/eCodecCallStatus.cs deleted file mode 100644 index 48ffa977..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Codec/eCodecCallStatus.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Devices.Common.Codec -{ - public enum eCodecCallStatus - { - Unknown = 0, - Connected, - Connecting, - Dialing, - Disconnected, - Disconnecting, - EarlyMedia, - Idle, - OnHold, - Ringing, - Preserved, - RemotePreserved, - } - - - public class CodecCallStatus - { - - /// - /// Takes the Cisco call type and converts to the matching enum - /// - /// - /// - public static eCodecCallStatus ConvertToStatusEnum(string s) - { - switch (s) - { - case "Connected": - { - return eCodecCallStatus.Connected; - } - case "Connecting": - { - return eCodecCallStatus.Connecting; - } - case "Dialling": - { - return eCodecCallStatus.Dialing; - } - case "Disconnected": - { - return eCodecCallStatus.Disconnected; - } - case "Disconnecting": - { - return eCodecCallStatus.Disconnecting; - } - case "EarlyMedia": - { - return eCodecCallStatus.EarlyMedia; - } - case "Idle": - { - return eCodecCallStatus.Idle; - } - case "OnHold": - { - return eCodecCallStatus.OnHold; - } - case "Ringing": - { - return eCodecCallStatus.Ringing; - } - case "Preserved": - { - return eCodecCallStatus.Preserved; - } - case "RemotePreserved": - { - return eCodecCallStatus.RemotePreserved; - } - default: - return eCodecCallStatus.Unknown; - } - - } - - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Codec/eCodecCallType.cs b/Essentials Devices Common/Essentials Devices Common/Codec/eCodecCallType.cs deleted file mode 100644 index ab94eefa..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Codec/eCodecCallType.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Devices.Common.Codec - -{ - public enum eCodecCallType - { - Unknown = 0, - Audio, - Video, - AudioCanEscalate, - ForwardAllCall - } - - public class CodecCallType - { - - /// - /// Takes the Cisco call type and converts to the matching enum - /// - /// - /// - public static eCodecCallType ConvertToTypeEnum(string s) - { - switch (s) - { - case "Audio": - { - return eCodecCallType.Audio; - } - case "Video": - { - return eCodecCallType.Video; - } - case "AudioCanEscalate": - { - return eCodecCallType.AudioCanEscalate; - } - case "ForwardAllCall": - { - return eCodecCallType.ForwardAllCall; - } - default: - return eCodecCallType.Unknown; - } - - } - - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Codec/eMeetingPrivacy.cs b/Essentials Devices Common/Essentials Devices Common/Codec/eMeetingPrivacy.cs deleted file mode 100644 index 2381d569..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Codec/eMeetingPrivacy.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Devices.Common.Codec -{ - public enum eMeetingPrivacy - { - Unknown = 0, - Public, - Private - } - - public class CodecCallPrivacy - { - /// - /// Takes the Cisco privacy type and converts to the matching enum - /// - /// - /// - public static eMeetingPrivacy ConvertToDirectionEnum(string s) - { - switch (s.ToLower()) - { - case "public": - { - return eMeetingPrivacy.Public; - } - case "private": - { - return eMeetingPrivacy.Private; - } - default: - return eMeetingPrivacy.Unknown; - } - - } - - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Codec/iCodecAudio.cs b/Essentials Devices Common/Essentials Devices Common/Codec/iCodecAudio.cs deleted file mode 100644 index d61f7d26..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Codec/iCodecAudio.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Essentials.Core; - -namespace PepperDash.Essentials.Devices.Common.Codec -{ - /// - /// Defines minimum volume controls for a codec device with dialing capabilities - /// - public interface ICodecAudio : IBasicVolumeWithFeedback, IPrivacy - { - - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Codec/iCodecInfo.cs b/Essentials Devices Common/Essentials Devices Common/Codec/iCodecInfo.cs deleted file mode 100644 index 9a1ac600..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Codec/iCodecInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Devices.Common.Codec -{ - /// - /// Implements a common set of data about a codec - /// - public interface iCodecInfo - { - VideoCodecInfo CodecInfo { get; } - } - - /// - /// Stores general information about a codec - /// - public abstract class VideoCodecInfo - { - public abstract bool MultiSiteOptionIsEnabled { get; } - public abstract string IpAddress { get; } - public abstract string SipPhoneNumber { get; } - public abstract string E164Alias { get; } - public abstract string H323Id { get; } - public abstract string SipUri { get; } - public abstract bool AutoAnswerEnabled { get; } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Codec/iHasCallFavorites.cs b/Essentials Devices Common/Essentials Devices Common/Codec/iHasCallFavorites.cs deleted file mode 100644 index e6bcce13..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Codec/iHasCallFavorites.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Devices.Common.Codec -{ - public interface IHasCallFavorites - { - CodecCallFavorites CallFavorites { get; } - } - - /// - /// Represents favorites entries for a codec device - /// - public class CodecCallFavorites - { - public List Favorites { get; set; } - - public CodecCallFavorites() - { - Favorites = new List(); - } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Codec/iHasCallHistory.cs b/Essentials Devices Common/Essentials Devices Common/Codec/iHasCallHistory.cs deleted file mode 100644 index 51e8724b..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Codec/iHasCallHistory.cs +++ /dev/null @@ -1,144 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Core; -using PepperDash.Essentials.Devices.Common.Codec; -using PepperDash.Essentials.Devices.Common.VideoCodec; - -namespace PepperDash.Essentials.Devices.Common.Codec -{ - public interface IHasCallHistory - { - CodecCallHistory CallHistory { get; } - - void RemoveCallHistoryEntry(CodecCallHistory.CallHistoryEntry entry); - } - - public enum eCodecOccurrenceType - { - Unknown = 0, - Placed, - Received, - NoAnswer - } - - /// - /// Represents the recent call history for a codec device - /// - public class CodecCallHistory - { - public event EventHandler RecentCallsListHasChanged; - - public List RecentCalls { get; private set; } - - /// - /// Item that gets added to the list when there are no recent calls in history - /// - CallHistoryEntry ListEmptyEntry; - - public CodecCallHistory() - { - ListEmptyEntry = new CallHistoryEntry() { Name = "No Recent Calls" }; - - RecentCalls = new List(); - - RecentCalls.Add(ListEmptyEntry); - } - - void OnRecentCallsListChange() - { - var handler = RecentCallsListHasChanged; - if (handler != null) - { - handler(this, new EventArgs()); - - //if (Debug.Level == 1) - //{ - - // Debug.Console(1, "RecentCalls:\n"); - - // foreach (CodecCallHistory.CallHistoryEntry entry in RecentCalls) - // { - // Debug.Console(1, "\nName: {0}\nNumber: {1}\nStartTime: {2}\nType: {3}\n", entry.Name, entry.Number, entry.StartTime.ToString(), entry.OccurenceType); - // } - //} - } - } - - public void RemoveEntry(CallHistoryEntry entry) - { - RecentCalls.Remove(entry); - OnRecentCallsListChange(); - } - - /// - /// Generic call history entry, not device specific - /// - public class CallHistoryEntry : CodecActiveCallItem - { - public DateTime StartTime { get; set; } - public eCodecOccurrenceType OccurenceType { get; set; } - public string OccurrenceHistoryId { get; set; } - } - - /// - /// Converts a list of call history entries returned by a Cisco codec to the generic list type - /// - /// - /// - public void ConvertCiscoCallHistoryToGeneric(List entries) - { - var genericEntries = new List(); - - foreach (CiscoCallHistory.Entry entry in entries) - { - - genericEntries.Add(new CallHistoryEntry() - { - Name = entry.DisplayName.Value, - Number = entry.CallbackNumber.Value, - StartTime = entry.LastOccurrenceStartTime.Value, - OccurrenceHistoryId = entry.LastOccurrenceHistoryId.Value, - OccurenceType = ConvertToOccurenceTypeEnum(entry.OccurrenceType.Value) - }); - } - - // Check if list is empty and if so, add an item to display No Recent Calls - if(genericEntries.Count == 0) - genericEntries.Add(ListEmptyEntry); - - RecentCalls = genericEntries; - OnRecentCallsListChange(); - } - - /// - /// Takes the Cisco occurence type and converts it to the matching enum - /// - /// - /// Requirements for a device that has dialing capabilities - /// - public interface IHasDialer - { - // Add requirements for Dialer functionality - - event EventHandler CallStatusChange; - - void Dial(string number); - void EndCall(CodecActiveCallItem activeCall); - void EndAllCalls(); - void AcceptCall(CodecActiveCallItem item); - void RejectCall(CodecActiveCallItem item); - void SendDtmf(string digit); - - bool IsInCall { get; } - } - -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Codec/iHasDirectory.cs b/Essentials Devices Common/Essentials Devices Common/Codec/iHasDirectory.cs deleted file mode 100644 index 4bf04f91..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Codec/iHasDirectory.cs +++ /dev/null @@ -1,142 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Core; -using PepperDash.Essentials.Devices.Common.VideoCodec; - -namespace PepperDash.Essentials.Devices.Common.Codec -{ - public interface IHasDirectory - { - event EventHandler DirectoryResultReturned; - - CodecDirectory DirectoryRoot { get; } - - CodecPhonebookSyncState PhonebookSyncState { get; } - - void SearchDirectory(string searchString); - - void GetDirectoryFolderContents(string folderId); - } - - public class DirectoryEventArgs : EventArgs - { - public CodecDirectory Directory { get; set; } - } - - public class CodecDirectory - { - public List DirectoryResults { get; private set; } - - public string ResultsFolderId { get; set; } - - //public int Limit { get; private set; } - - public CodecDirectory() - { - DirectoryResults = new List(); - } - - public void AddFoldersToDirectory(List folders) - { - if(folders != null) - DirectoryResults.AddRange(folders); - - SortDirectory(); - } - - public void AddContactsToDirectory(List contacts) - { - if(contacts != null) - DirectoryResults.AddRange(contacts); - - SortDirectory(); - } - - /// - /// Formats the DirectoryResults list to display all folders alphabetically, then all contacts alphabetically - /// - private void SortDirectory() - { - var sortedFolders = new List(); - - sortedFolders.AddRange(DirectoryResults.Where(f => f is DirectoryFolder)); - - sortedFolders.OrderBy(f => f.Name); - - var sortedContacts = new List(); - - sortedContacts.AddRange(DirectoryResults.Where(c => c is DirectoryContact)); - - sortedFolders.OrderBy(c => c.Name); - - DirectoryResults.Clear(); - - DirectoryResults.AddRange(sortedFolders); - - DirectoryResults.AddRange(sortedContacts); - } - } - - public class DirectoryItem - { - public string Name { get; set; } - } - - public class DirectoryFolder : DirectoryItem - { - public List Contacts { get; set; } - public string FolderId { get; set; } - public string ParentFolderId { get; set; } - - public DirectoryFolder() - { - Contacts = new List(); - } - } - - public class DirectoryContact : DirectoryItem - { - public string ContactId { get; set; } - public string FolderId { get; set; } - public string Title { get; set; } - public List ContactMethods { get; set; } - - public DirectoryContact() - { - ContactMethods = new List(); - } - } - - public class ContactMethod - { - public string ContactMethodId { get; set; } - public string Number { get; set; } - public eContactMethodDevice Device { get; set; } - public eContactMethodCallType CallType { get; set; } - } - - public enum eContactMethodDevice - { - Unknown = 0, - Mobile, - Other, - Telephone, - Video - } - - public enum eContactMethodCallType - { - Unknown = 0, - Audio, - Video - } - - public class DirectorySearchResultEventArgs : EventArgs - { - public CodecDirectory Directory { get; set; } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Codec/iHasScheduleAwareness.cs b/Essentials Devices Common/Essentials Devices Common/Codec/iHasScheduleAwareness.cs deleted file mode 100644 index dc368fcd..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Codec/iHasScheduleAwareness.cs +++ /dev/null @@ -1,166 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Devices.Common.Codec -{ - public enum eMeetingEventChangeType - { - Unkown = 0, - MeetingStartWarning, - MeetingStart, - MeetingEndWarning, - MeetingEnd - } - - public interface IHasScheduleAwareness - { - CodecScheduleAwareness CodecSchedule { get; } - - void GetSchedule(); - } - - public class CodecScheduleAwareness - { - List _Meetings; - - public event EventHandler MeetingEventChange; - - public event EventHandler MeetingsListHasChanged; - - /// - /// Setter triggers MeetingsListHasChanged event - /// - public List Meetings - { - get - { - return _Meetings; - } - set - { - _Meetings = value; - - var handler = MeetingsListHasChanged; - if (handler != null) - { - handler(this, new EventArgs()); - } - } - } - - private CTimer ScheduleChecker; - - public CodecScheduleAwareness() - { - Meetings = new List(); - - ScheduleChecker = new CTimer(CheckSchedule, null, 1000, 1000); - } - - private void OnMeetingChange(eMeetingEventChangeType changeType, Meeting meeting) - { - var handler = MeetingEventChange; - if (handler != null) - { - handler(this, new MeetingEventArgs() { ChangeType = changeType, Meeting = meeting }); - } - } - - private void CheckSchedule(object o) - { - // Iterate the meeting list and check if any meeting need to do anythingk - - foreach (Meeting m in Meetings) - { - eMeetingEventChangeType changeType = eMeetingEventChangeType.Unkown; - - if (m.TimeToMeetingStart.TotalMinutes <= m.MeetingWarningMinutes.TotalMinutes) // Meeting is about to start - changeType = eMeetingEventChangeType.MeetingStartWarning; - else if (m.TimeToMeetingStart.TotalMinutes == 0) // Meeting Start - changeType = eMeetingEventChangeType.MeetingStart; - else if (m.TimeToMeetingEnd.TotalMinutes <= m.MeetingWarningMinutes.TotalMinutes) // Meeting is about to end - changeType = eMeetingEventChangeType.MeetingEndWarning; - else if (m.TimeToMeetingEnd.TotalMinutes == 0) // Meeting has ended - changeType = eMeetingEventChangeType.MeetingEnd; - - if (changeType != eMeetingEventChangeType.Unkown) - OnMeetingChange(changeType, m); - } - - - } - } - - /// - /// Generic class to represent a meeting (Cisco or Polycom OBTP or Fusion) - /// - public class Meeting - { - public TimeSpan MeetingWarningMinutes = TimeSpan.FromMinutes(5); - - public string Id { get; set; } - public string Organizer { get; set; } - public string Title { get; set; } - public string Agenda { get; set; } - public TimeSpan TimeToMeetingStart - { - get - { - return StartTime - DateTime.Now; - } - } - public TimeSpan TimeToMeetingEnd - { - get - { - return EndTime - DateTime.Now; - } - } - public DateTime StartTime { get; set; } - public DateTime EndTime { get; set; } - public TimeSpan Duration - { - get - { - return EndTime - StartTime; - } - } - public eMeetingPrivacy Privacy { get; set; } - public bool Joinable - { - get - { - return StartTime.AddMinutes(-5) <= DateTime.Now - && DateTime.Now <= EndTime; //.AddMinutes(-5); - } - } - //public string ConferenceNumberToDial { get; set; } - public string ConferencePassword { get; set; } - public bool IsOneButtonToPushMeeting { get; set; } - - public List Calls { get; private set; } - - public Meeting() - { - Calls = new List(); - } - } - - public class Call - { - public string Number { get; set; } - public string Protocol { get; set; } - public string CallRate { get; set; } - public string CallType { get; set; } - } - - public class MeetingEventArgs : EventArgs - { - public eMeetingEventChangeType ChangeType { get; set; } - public Meeting Meeting { get; set; } - } - -} diff --git a/Essentials Devices Common/Essentials Devices Common/Crestron/Gateways/CenRfgwController.cs b/Essentials Devices Common/Essentials Devices Common/Crestron/Gateways/CenRfgwController.cs deleted file mode 100644 index ee37674a..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Crestron/Gateways/CenRfgwController.cs +++ /dev/null @@ -1,115 +0,0 @@ -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 deleted file mode 100644 index 9ecabde9..00000000 --- a/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraForteDsp.cs +++ /dev/null @@ -1,375 +0,0 @@ -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? - - // Example subscription feedback responses - // ! "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; - - private CTimer SubscriptionTimer; - - CrestronQueue CommandQueue; - - bool CommandQueueInProgress = false; - - //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(100); - - 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, "\x0d\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, "SESSION get aliases\x0d\x0a"); - } - - LevelControlPoints = new Dictionary(); - - foreach (KeyValuePair block in props.LevelControlBlocks) - { - this.LevelControlPoints.Add(block.Key, new TesiraForteLevelControl(block.Key, 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) - { - Debug.Console(2, this, "Socket Status Change: {0}", e.Client.ClientStatus.ToString()); - - if (e.Client.IsConnected) - { - // Tasks on connect - } - else - { - // Cleanup items from this session - - if (SubscriptionTimer != null) - { - SubscriptionTimer.Stop(); - SubscriptionTimer = null; - } - - isSubscribed = false; - CommandQueue.Clear(); - CommandQueueInProgress = false; - } - } - - /// - /// Initiates the subscription process to the DSP - /// - void SubscribeToAttributes() - { - SendLine("SESSION set verbose true"); - - foreach (KeyValuePair level in LevelControlPoints) - { - level.Value.Subscribe(); - } - - if (!CommandQueueInProgress) - SendNextQueuedCommand(); - - ResetSubscriptionTimer(); - } - - /// - /// Resets or Sets the subscription timer - /// - void ResetSubscriptionTimer() - { - isSubscribed = true; - - if (SubscriptionTimer != null) - { - SubscriptionTimer = new CTimer(o => SubscribeToAttributes(), 30000); - SubscriptionTimer.Reset(); - - } - } - - /// - /// 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); - - Debug.Console(1, this, "RX: '{0}'", 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 == "+OK" || args.Text.IndexOf("list\":") > -1 ) // Check for a simple "+OK" only 'ack' repsonse or a list response and ignore - 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.TryToDequeue(); - //Debug.Console(1, this, "Command Dequeued. CommandQueue Size: {0}", CommandQueue.Count); - - tempCommand.ControlPoint.ParseGetMessage(tempCommand.AttributeCode, args.Text); - } - else - { - // Expected response belongs to this class - string temp = (string)CommandQueue.TryToDequeue(); - //Debug.Console(1, this, "Command Dequeued. CommandQueue Size: {0}", CommandQueue.Count); - - } - - if (CommandQueue.IsEmpty) - CommandQueueInProgress = false; - else - SendNextQueuedCommand(); - - } - - - } - else if (args.Text.IndexOf("-ERR") > -1) - { - // Error response - - switch (args.Text) - { - case "-ERR ALREADY_SUBSCRIBED": - { - ResetSubscriptionTimer(); - break; - } - default: - { - Debug.Console(0, this, "Error From DSP: '{0}'", args.Text); - break; - } - } - - } - } - 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(1, 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); - //Debug.Console(1, this, "Command (QueuedCommand) Enqueued '{0}'. CommandQueue has '{1}' Elements.", commandToEnqueue.Command, CommandQueue.Count); - - if(!CommandQueueInProgress) - SendNextQueuedCommand(); - } - - /// - /// Adds a raw string command to the queue - /// - /// - public void EnqueueCommand(string command) - { - CommandQueue.Enqueue(command); - //Debug.Console(1, this, "Command (string) Enqueued '{0}'. CommandQueue has '{1}' Elements.", command, CommandQueue.Count); - - if (!CommandQueueInProgress) - SendNextQueuedCommand(); - } - - /// - /// Sends the next queued command to the DSP - /// - void SendNextQueuedCommand() - { - //Debug.Console(2, this, "Attempting to send next queued command. CommandQueueInProgress: {0} Communication isConnected: {1}", CommandQueueInProgress, Communication.IsConnected); - - //if (CommandQueue.IsEmpty) - // CommandQueueInProgress = false; - - //Debug.Console(1, this, "CommandQueue has {0} Elements:\n", CommandQueue.Count); - - //foreach (object o in CommandQueue) - //{ - // if (o is string) - // Debug.Console(1, this, "{0}", o); - // else if(o is QueuedCommand) - // { - // var item = (QueuedCommand)o; - // Debug.Console(1, this, "{0}", item.Command); - // } - //} - - //Debug.Console(1, this, "End of CommandQueue"); - - if (Communication.IsConnected && !CommandQueue.IsEmpty) - { - CommandQueueInProgress = true; - - 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 deleted file mode 100644 index c1b6884c..00000000 --- a/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraForteDspLevel.cs +++ /dev/null @@ -1,366 +0,0 @@ -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 -{ - 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(string key, BiampTesiraForteLevelControlBlockConfig config, BiampTesiraForteDsp parent) - : base(config.InstanceTag, config.Index1, config.Index2, parent) - { - Initialize(key, 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 key, string label, bool hasMute, bool hasLevel) - { - Key = string.Format("{0}--{1}", Parent.Key, key); - - 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, 65535); - - 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 an "+OK" message - string pattern = @"\+OK ""value"":(.*)"; - - Match match = Regex.Match(message, pattern); - - if (match.Success) - { - - string value = match.Groups[1].Value; - - Debug.Console(1, this, "Response: '{0}' Value: '{1}'", attributeCode, value); - - if (message.IndexOf("\"value\":") > -1) - { - switch (attributeCode) - { - case "minLevel": - { - MinLevel = Double.Parse(value); - - Debug.Console(1, this, "MinLevel is '{0}'", MinLevel); - - break; - } - case "maxLevel": - { - MaxLevel = Double.Parse(value); - - Debug.Console(1, this, "MaxLevel is '{0}'", MaxLevel); - - 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) - { - Debug.Console(1, this, "volume: {0}", 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", string.Format("{0:0.000000}", volumeLevel)); - } - - /// - /// 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) - //{ - // Debug.Console(1, this, "Scaling (int) input '{0}' with min '{1}'/max '{2}' to output range min '{3}'/max '{4}'", input, inMin, inMax, outMin, outMax); - - // int inputRange = inMax - inMin; - - // int outputRange = outMax - outMin; - - // var output = (((input-inMin) * outputRange) / inputRange ) - outMin; - - // Debug.Console(1, this, "Scaled output '{0}'", output); - - // 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) - { - Debug.Console(1, this, "Scaling (double) input '{0}' with min '{1}'/max '{2}' to output range min '{3}'/max '{4}'",input ,inMin ,inMax ,outMin, outMax); - - double inputRange = inMax - inMin; - - if (inputRange <= 0) - { - throw new ArithmeticException(string.Format("Invalid Input Range '{0}' for Scaling. Min '{1}' Max '{2}'.", inputRange, inMin, inMax)); - } - - double outputRange = outMax - outMin; - - var output = (((input - inMin) * outputRange) / inputRange) + outMin; - - Debug.Console(1, this, "Scaled output '{0}'", output); - - 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 deleted file mode 100644 index 1b4ae8a1..00000000 --- a/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraFortePropertiesConfig.cs +++ /dev/null @@ -1,40 +0,0 @@ -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 deleted file mode 100644 index 151eb2ad..00000000 --- a/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/TesiraForteControlPoint.cs +++ /dev/null @@ -1,115 +0,0 @@ -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); - } - } - - if (command == "get") - { - // This command will generate a return value response so it needs to be queued - Parent.EnqueueCommand(new BiampTesiraForteDsp.QueuedCommand{ Command = cmd, AttributeCode = attributeCode, ControlPoint = this }); - } - else - { - // This command will generate a simple "+OK" response and doesn't need to be queued - Parent.SendLine(cmd); - } - - } - - 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 deleted file mode 100644 index 82689408..00000000 --- a/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/TesiraForteMuteControl.cs +++ /dev/null @@ -1,79 +0,0 @@ -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 deleted file mode 100644 index fd8973f0..00000000 --- a/Essentials Devices Common/Essentials Devices Common/DSP/DspBase.cs +++ /dev/null @@ -1,124 +0,0 @@ -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 deleted file mode 100644 index eb22c083..00000000 --- a/Essentials Devices Common/Essentials Devices Common/DSP/PolycomSoundStructure/SoundStructureBasics.cs +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index f4d3c241..00000000 --- a/Essentials Devices Common/Essentials Devices Common/DiscPlayer/IRDiscPlayerBase.cs +++ /dev/null @@ -1,314 +0,0 @@ -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, IUsageTracking - { - 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 - - #region IUsageTracking Members - - public UsageTracking UsageTracker { get; set; } - - #endregion - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Display/AvocorVTFDisplay.cs b/Essentials Devices Common/Essentials Devices Common/Display/AvocorVTFDisplay.cs deleted file mode 100644 index 961e9291..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Display/AvocorVTFDisplay.cs +++ /dev/null @@ -1,720 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro.CrestronThread; -using Crestron.SimplSharpPro; -using PepperDash.Core; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.Routing; - -namespace PepperDash.Essentials.Devices.Displays -{ - /// - /// - /// - public class AvocorDisplay : TwoWayDisplayBase, IBasicVolumeWithFeedback, ICommunicationMonitor, IInputDisplayPort1, - IInputHdmi1, IInputHdmi2, IInputHdmi3, IInputHdmi4, IInputVga1 - { - public IBasicCommunication Communication { get; private set; } - public CommunicationGather PortGather { get; private set; } - - public StatusMonitorBase CommunicationMonitor { get; private set; } - - public byte ID { get; private set; } - - /// - /// 0x08 - /// - const byte InputVga1Value = 0x00; - /// - /// 0x09 - /// - const byte InputHdmi1Value = 0x09; - /// - /// 0x0a - /// - const byte InputHdmi2Value = 0x0a; - /// - /// 0x0b - /// - const byte InputHdmi3Value = 0x0b; - /// - /// 0x0c - /// - const byte InputHdmi4Value = 0x0c; - /// - /// 0c0d - /// - const byte InputDisplayPort1Value = 0x0d; - /// - /// 0x0e - /// - const byte InputIpcOpsValue = 0x0e; - /// - /// 0x11 - /// - const byte InputHdmi5Value = 0x11; - /// - /// 0x12 - /// - const byte InputMediaPlayerValue = 0x12; - - - bool _PowerIsOn; - bool _IsWarmingUp; - bool _IsCoolingDown; - ushort _VolumeLevelForSig; - int _LastVolumeSent; - ushort _PreMuteVolumeLevel; - bool _IsMuted; - RoutingInputPort _CurrentInputPort; - ActionIncrementer VolumeIncrementer; - bool VolumeIsRamping; - public bool IsInStandby { get; private set; } - - protected override Func PowerIsOnFeedbackFunc { get { return () => _PowerIsOn; } } - protected override Func IsCoolingDownFeedbackFunc { get { return () => _IsCoolingDown; } } - protected override Func IsWarmingUpFeedbackFunc { get { return () => _IsWarmingUp; } } - protected override Func CurrentInputFeedbackFunc { get { return () => _CurrentInputPort.Key; } } - - /// - /// Constructor for IBasicCommunication - /// - public AvocorDisplay(string key, string name, IBasicCommunication comm, string id) - : base(key, name) - { - Communication = comm; - //Communication.BytesReceived += new EventHandler(Communication_BytesReceived); - - PortGather = new CommunicationGather(Communication, '\x08'); - PortGather.IncludeDelimiter = true; - PortGather.LineReceived += new EventHandler(PortGather_LineReceived); - - ID = id == null ? (byte)0x01 : Convert.ToByte(id, 16); // If id is null, set default value of 0x01, otherwise assign value passed in constructor - Init(); - } - - /// - /// Constructor for TCP - /// - public AvocorDisplay(string key, string name, string hostname, int port, string id) - : base(key, name) - { - Communication = new GenericTcpIpClient(key + "-tcp", hostname, port, 5000); - - PortGather = new CommunicationGather(Communication, '\x0d'); - PortGather.IncludeDelimiter = true; - PortGather.LineReceived += new EventHandler(PortGather_LineReceived); - - ID = id == null ? (byte)0x01 : Convert.ToByte(id, 16); // If id is null, set default value of 0x01, otherwise assign value passed in constructor - Init(); - } - - /// - /// Constructor for COM - /// - public AvocorDisplay(string key, string name, ComPort port, ComPort.ComPortSpec spec, string id) - : base(key, name) - { - Communication = new ComPortController(key + "-com", port, spec); - - PortGather = new CommunicationGather(Communication, '\x0d'); - PortGather.IncludeDelimiter = true; - PortGather.LineReceived += new EventHandler(PortGather_LineReceived); - - ID = id == null ? (byte)0x01 : Convert.ToByte(id, 16); // If id is null, set default value of 0x01, otherwise assign value passed in constructor - Init(); - } - - void AddRoutingInputPort(RoutingInputPort port, byte fbMatch) - { - port.FeedbackMatchObject = fbMatch; - InputPorts.Add(port); - } - - void Init() - { - WarmupTime = 10000; - CooldownTime = 8000; - - CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 30000, 120000, 300000, StatusGet); - DeviceManager.AddDevice(CommunicationMonitor); - - VolumeIncrementer = new ActionIncrementer(655, 0, 65535, 800, 80, - v => SetVolume((ushort)v), - () => _LastVolumeSent); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.HdmiIn1, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(InputHdmi1), this), InputHdmi1Value); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.HdmiIn2, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(InputHdmi2), this), InputHdmi2Value); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.HdmiIn3, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(InputHdmi3), this), InputHdmi3Value); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.HdmiIn4, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(InputHdmi4), this), InputHdmi4Value); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.HdmiIn5, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(InputHdmi5), this), InputHdmi5Value); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.DisplayPortIn1, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.DisplayPort, new Action(InputDisplayPort1), this), InputDisplayPort1Value); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.VgaIn, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Dvi, new Action(InputVga1), this), InputVga1Value); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.IpcOps, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Composite, new Action(InputIpcOps), this), InputIpcOpsValue); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.MediaPlayer, eRoutingSignalType.Video, - eRoutingPortConnectionType.Vga, new Action(InputMediaPlayer), this), InputMediaPlayerValue); - - VolumeLevelFeedback = new IntFeedback(() => { return _VolumeLevelForSig; }); - MuteFeedback = new BoolFeedback(() => _IsMuted); - } - - /// - /// - /// - /// - public override bool CustomActivate() - { - Communication.Connect(); - - var socket = Communication as ISocketStatus; - if (socket != null) - { - socket.ConnectionChange += new EventHandler(socket_ConnectionChange); - } - - CommunicationMonitor.StatusChange += (o, a) => { Debug.Console(2, this, "Communication monitor state: {0}", CommunicationMonitor.Status); }; - CommunicationMonitor.Start(); - - StatusGet(); - - return true; - } - - void socket_ConnectionChange(object sender, GenericSocketStatusChageEventArgs e) - { - if (e.Client.IsConnected) - StatusGet(); - } - - public override List Feedbacks - { - get - { - var list = base.Feedbacks; - list.AddRange(new List - { - VolumeLevelFeedback, - MuteFeedback, - CurrentInputFeedback - }); - return list; - } - } - - ///// - ///// / - ///// - ///// - //void Communication_BytesReceived(object sender, GenericCommMethodReceiveBytesArgs e) - //{ - // // This is probably not thread-safe buffering - // // Append the incoming bytes with whatever is in the buffer - // var newBytes = new byte[IncomingBuffer.Length + e.Bytes.Length]; - // IncomingBuffer.CopyTo(newBytes, 0); - // e.Bytes.CopyTo(newBytes, IncomingBuffer.Length); - - // if (Debug.Level == 2) // This check is here to prevent following string format from building unnecessarily on level 0 or 1 - // Debug.Console(2, this, "Received:{0}", ComTextHelper.GetEscapedText(newBytes)); - - // // Need to find AA FF and have - // for (int i = 0; i < newBytes.Length; i++) - // { - // if (newBytes[i] == 0xAA && newBytes[i + 1] == 0xFF) - // { - // newBytes = newBytes.Skip(i).ToArray(); // Trim off junk if there's "dirt" in the buffer - - // // parse it - // // If it's at least got the header, then process it, - // while (newBytes.Length > 4 && newBytes[0] == 0xAA && newBytes[1] == 0xFF) - // { - // var msgLen = newBytes[3]; - // // if the buffer is shorter than the header (3) + message (msgLen) + checksum (1), - // // give and save it for next time - // if (newBytes.Length < msgLen + 4) - // break; - - // // Good length, grab the message - // var message = newBytes.Skip(4).Take(msgLen).ToArray(); - - // // At this point, the ack/nak is the first byte - // if (message[0] == 0x41) - // { - // switch (message[1]) // type byte - // { - // case 0x00: // General status - // UpdatePowerFB(message[2], message[5]); // "power" can be misrepresented when the display sleeps - // UpdateInputFb(message[5]); - // UpdateVolumeFB(message[3]); - // UpdateMuteFb(message[4]); - // UpdateInputFb(message[5]); - // break; - - // case 0x11: - // UpdatePowerFB(message[2]); - // break; - - // case 0x12: - // UpdateVolumeFB(message[2]); - // break; - - // case 0x13: - // UpdateMuteFb(message[2]); - // break; - - // case 0x14: - // UpdateInputFb(message[2]); - // break; - - // default: - // break; - // } - // } - // // Skip over what we've used and save the rest for next time - // newBytes = newBytes.Skip(5 + msgLen).ToArray(); - // } - - // break; // parsing will mean we can stop looking for header in loop - // } - // } - - // // Save whatever partial message is here - // IncomingBuffer = newBytes; - //} - - void PortGather_LineReceived(object sender, GenericCommMethodReceiveTextArgs e) - { - Debug.Console(1, this, "Receivied: '{0}'", ComTextHelper.GetEscapedText(e.Text)); - - if (e.Text.IndexOf("\x50\x4F\x57") > -1) - { - // Power Status Response - - var value = e.Text.ToCharArray(); - - switch (value[6]) - { - case '\x00': - { - _PowerIsOn = false; - break; - } - case '\x01': - { - _PowerIsOn = true; - break; - } - } - - PowerIsOnFeedback.FireUpdate(); - Debug.Console(1, this, "PowerIsOn State: {0}", PowerIsOnFeedback.BoolValue); - - } - else if (e.Text.IndexOf("\x4D\x49\x4E") > -1) - { - var value = e.Text.ToCharArray(); - - var b = value[6]; - - var newInput = InputPorts.FirstOrDefault(i => i.FeedbackMatchObject.Equals(b)); - if (newInput != null && newInput != _CurrentInputPort) - { - _CurrentInputPort = newInput; - CurrentInputFeedback.FireUpdate(); - Debug.Console(1, this, "Current Input: {0}", CurrentInputFeedback.StringValue); - } - - } - else if (e.Text.IndexOf("\x56\x4F\x4C") > -1) - { - // Volume Status Response - - var value = e.Text.ToCharArray(); - - var b = value[6]; - - var newVol = (ushort)NumericalHelpers.Scale((double)b, 0, 100, 0, 65535); - if (!VolumeIsRamping) - _LastVolumeSent = newVol; - if (newVol != _VolumeLevelForSig) - { - _VolumeLevelForSig = newVol; - VolumeLevelFeedback.FireUpdate(); - - if (_VolumeLevelForSig > 0) - _IsMuted = false; - else - _IsMuted = true; - - MuteFeedback.FireUpdate(); - - Debug.Console(1, this, "Volume Level: {0}", VolumeLevelFeedback.IntValue); - } - } - - } - - /// - /// - /// - void UpdatePowerFB(byte powerByte) - { - var newVal = powerByte == 1; - if (newVal != _PowerIsOn) - { - _PowerIsOn = newVal; - PowerIsOnFeedback.FireUpdate(); - } - } - - /// - /// Updates power status from general updates where source is included. - /// Compensates for errant standby / power off hiccups by ignoring - /// power off states with input < 0x10 - /// - void UpdatePowerFB(byte powerByte, byte inputByte) - { - // This should reject errant power feedbacks when switching away from input on standby. - if (powerByte == 0x01 && inputByte < 0x10) - IsInStandby = true; - if (powerByte == 0x00 && IsInStandby) // Ignore power off if coming from standby - glitch - { - IsInStandby = false; - return; - } - - UpdatePowerFB(powerByte); - } - - /// - /// - /// - void UpdateVolumeFB(byte b) - { - var newVol = (ushort)NumericalHelpers.Scale((double)b, 0, 100, 0, 65535); - if (!VolumeIsRamping) - _LastVolumeSent = newVol; - if (newVol != _VolumeLevelForSig) - { - _VolumeLevelForSig = newVol; - VolumeLevelFeedback.FireUpdate(); - } - } - - /// - /// - /// - void UpdateMuteFb(byte b) - { - var newMute = b == 1; - if (newMute != _IsMuted) - { - _IsMuted = newMute; - MuteFeedback.FireUpdate(); - } - } - - /// - /// - /// - void UpdateInputFb(byte b) - { - var newInput = InputPorts.FirstOrDefault(i => i.FeedbackMatchObject.Equals(b)); - if (newInput != null && newInput != _CurrentInputPort) - { - _CurrentInputPort = newInput; - CurrentInputFeedback.FireUpdate(); - } - } - - /// - /// Formats an outgoing message. Replaces third byte with ID and replaces last byte with checksum - /// - /// - void SendBytes(byte[] b) - { - b[1] = ID; - - var command = b.ToString(); - - Debug.Console(1, this, "Sending: '{0}'",ComTextHelper.GetEscapedText(b)); - - Communication.SendBytes(b); - } - - - /// - /// - /// - public void StatusGet() - { - PowerGet(); - - CrestronEnvironment.Sleep(100); - - InputGet(); - - CrestronEnvironment.Sleep(100); - - VolumeGet(); - } - - /// - /// - /// - public override void PowerOn() - { - //Send(PowerOnCmd); - SendBytes(new byte[] { 0x07, ID, 0x02, 0x50, 0x4F, 0x57, 0x01, 0x08, 0x0d }); - 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 (!_IsWarmingUp && !_IsCoolingDown) // PowerIsOnFeedback.BoolValue && - { - //Send(PowerOffCmd); - SendBytes(new byte[] { 0x07, ID, 0x02, 0x50, 0x4F, 0x57, 0x00, 0x08, 0x0d }); - _IsCoolingDown = true; - _PowerIsOn = false; - PowerIsOnFeedback.FireUpdate(); - IsCoolingDownFeedback.FireUpdate(); - // Fake cool-down cycle - CooldownTimer = new CTimer(o => - { - _IsCoolingDown = false; - IsCoolingDownFeedback.FireUpdate(); - }, CooldownTime); - } - } - - public override void PowerToggle() - { - if (PowerIsOnFeedback.BoolValue && !IsWarmingUpFeedback.BoolValue) - PowerOff(); - else if (!PowerIsOnFeedback.BoolValue && !IsCoolingDownFeedback.BoolValue) - PowerOn(); - } - - public void PowerGet() - { - SendBytes(new byte[] { 0x07, ID, 0x01, 0x50, 0x4F, 0x57, 0x08, 0x0d }); - } - - public void InputHdmi1() - { - SendBytes(new byte[] { 0x07, ID, 0x02, 0x4D, 0x49, 0x4E, InputHdmi1Value, 0x08, 0x0d }); - } - - public void InputHdmi2() - { - SendBytes(new byte[] { 0x07, ID, 0x02, 0x4D, 0x49, 0x4E, InputHdmi2Value, 0x08, 0x0d }); - } - - public void InputHdmi3() - { - SendBytes(new byte[] { 0x07, ID, 0x02, 0x4D, 0x49, 0x4E, InputHdmi3Value, 0x08, 0x0d }); - } - - public void InputHdmi4() - { - SendBytes(new byte[] { 0x07, ID, 0x02, 0x4D, 0x49, 0x4E, InputHdmi4Value, 0x08, 0x0d }); - } - - public void InputHdmi5() - { - SendBytes(new byte[] { 0x07, ID, 0x02, 0x4D, 0x49, 0x4E, InputHdmi5Value, 0x08, 0x0d }); - } - - public void InputDisplayPort1() - { - SendBytes(new byte[] { 0x07, ID, 0x02, 0x4D, 0x49, 0x4E, InputDisplayPort1Value, 0x08, 0x0d }); - } - - public void InputVga1() - { - SendBytes(new byte[] { 0x07, ID, 0x02, 0x4D, 0x49, 0x4E, InputVga1Value, 0x08, 0x0d }); - } - - public void InputIpcOps() - { - SendBytes(new byte[] { 0x07, ID, 0x02, 0x4D, 0x49, 0x4E, InputIpcOpsValue, 0x08, 0x0d }); - } - - public void InputMediaPlayer() - { - SendBytes(new byte[] { 0x07, ID, 0x02, 0x4D, 0x49, 0x4E, InputMediaPlayerValue, 0x08, 0x0d }); - } - - public void InputGet() - { - SendBytes(new byte[] { 0x07, ID, 0x01, 0x4D, 0x49, 0x4E, 0x08, 0x0d }); - } - - public void VolumeGet() - { - SendBytes(new byte[] { 0x07, ID, 0x01, 0x56, 0x4F, 0x4C, 0x08, 0x0d }); - } - - - /// - /// Executes a switch, turning on display if necessary. - /// - /// - public override void ExecuteSwitch(object selector) - { - //if (!(selector is Action)) - // Debug.Console(1, this, "WARNING: ExecuteSwitch cannot handle type {0}", selector.GetType()); - - if (_PowerIsOn) - (selector as Action)(); - else // if power is off, wait until we get on FB to send it. - { - // One-time event handler to wait for power on before executing switch - EventHandler handler = null; // necessary to allow reference inside lambda to handler - handler = (o, a) => - { - if (!_IsWarmingUp) // Done warming - { - IsWarmingUpFeedback.OutputChange -= handler; - (selector as Action)(); - } - }; - IsWarmingUpFeedback.OutputChange += handler; // attach and wait for on FB - PowerOn(); - } - } - - /// - /// Scales the level to the range of the display and sends the command - /// - /// - public void SetVolume(ushort level) - { - _LastVolumeSent = level; - var scaled = (int)NumericalHelpers.Scale(level, 0, 65535, 0, 100); - // The inputs to Scale ensure that byte won't overflow - SendBytes(new byte[] { 0x07, ID, 0x02, 0x56, 0x4F, 0x4C, Convert.ToByte(scaled), 0x08, 0x0d }); - } - - #region IBasicVolumeWithFeedback Members - - public IntFeedback VolumeLevelFeedback { get; private set; } - - public BoolFeedback MuteFeedback { get; private set; } - - /// - /// - /// - public void MuteOff() - { - SetVolume(_PreMuteVolumeLevel); - } - - /// - /// - /// - public void MuteOn() - { - _PreMuteVolumeLevel = _VolumeLevelForSig; - - SetVolume(0); - } - - ///// - ///// - ///// - //public void MuteGet() - //{ - // SendBytes(new byte[] { 0x07, ID, 0x01, }); - //} - - #endregion - - #region IBasicVolumeControls Members - - /// - /// - /// - public void MuteToggle() - { - if (_IsMuted) - MuteOff(); - else - MuteOn(); - } - - /// - /// - /// - /// - public void VolumeDown(bool pressRelease) - { - if (pressRelease) - { - VolumeIncrementer.StartDown(); - VolumeIsRamping = true; - } - else - { - VolumeIsRamping = false; - VolumeIncrementer.Stop(); - } - } - - /// - /// - /// - /// - public void VolumeUp(bool pressRelease) - { - if (pressRelease) - { - VolumeIncrementer.StartUp(); - VolumeIsRamping = true; - } - else - { - VolumeIsRamping = false; - VolumeIncrementer.Stop(); - } - } - - #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 deleted file mode 100644 index da92df1f..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Display/ComTcpDisplayBase.cs +++ /dev/null @@ -1,43 +0,0 @@ -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 deleted file mode 100644 index dc778610..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Display/DeviceFactory.cs +++ /dev/null @@ -1,58 +0,0 @@ -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(); - - try - { - if (typeName == "necmpsx") - { - var comm = CommFactory.CreateCommForDevice(dc); - if (comm != null) - return new NecPSXMDisplay(dc.Key, dc.Name, comm); - } - else if(typeName == "samsungmdc") - { - var comm = CommFactory.CreateCommForDevice(dc); - if (comm != null) - return new SamsungMDC(dc.Key, dc.Name, comm, dc.Properties["id"].Value()); - } - if (typeName == "avocorvtf") - { - var comm = CommFactory.CreateCommForDevice(dc); - if (comm != null) - return new AvocorDisplay(dc.Key, dc.Name, comm, null); - } - - } - catch (Exception e) - { - Debug.Console(0, "Displays factory: Exception creating device type {0}, key {1}: \nCONFIG JSON: {2} \nERROR: {3}\n\n", - dc.Type, dc.Key, JsonConvert.SerializeObject(dc), e); - return null; - } - - return null; - } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Display/InputInterfaces.cs b/Essentials Devices Common/Essentials Devices Common/Display/InputInterfaces.cs deleted file mode 100644 index 74a7ae97..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Display/InputInterfaces.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Devices.Displays -{ - public interface IInputHdmi1 { void InputHdmi1(); } - public interface IInputHdmi2 { void InputHdmi2(); } - public interface IInputHdmi3 { void InputHdmi3(); } - public interface IInputHdmi4 { void InputHdmi4(); } - public interface IInputDisplayPort1 { void InputDisplayPort1(); } - public interface IInputDisplayPort2 { void InputDisplayPort2(); } - public interface IInputVga1 { void InputVga1(); } - -} \ 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 deleted file mode 100644 index fe526e8c..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Display/NECPSXMDisplay.cs +++ /dev/null @@ -1,356 +0,0 @@ -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; } } - protected override Func CurrentInputFeedbackFunc { get { return () => "Not Implemented"; } } - - - /// - /// 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 - SetVolume(_VolumeLevel++); - } - - public void VolumeUp(bool pressRelease) - { - //throw new NotImplementedException(); - SetVolume(_VolumeLevel--); - } - - #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 deleted file mode 100644 index 72ccd713..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Display/NecPaSeriesProjector.cs +++ /dev/null @@ -1,243 +0,0 @@ -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/Display/SamsungMDCDisplay.cs b/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs deleted file mode 100644 index 4e3ca9ed..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs +++ /dev/null @@ -1,611 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro.CrestronThread; -using Crestron.SimplSharpPro; -using PepperDash.Core; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.Routing; - -namespace PepperDash.Essentials.Devices.Displays -{ - /// - /// - /// - public class SamsungMDC : TwoWayDisplayBase, IBasicVolumeWithFeedback, ICommunicationMonitor, IInputDisplayPort1, IInputDisplayPort2, - IInputHdmi1, IInputHdmi2, IInputHdmi3, IInputHdmi4 - { - public IBasicCommunication Communication { get; private set; } - - public StatusMonitorBase CommunicationMonitor { get; private set; } - - public byte ID { get; private set; } - - bool LastCommandSentWasVolume; - - bool _PowerIsOn; - bool _IsWarmingUp; - bool _IsCoolingDown; - ushort _VolumeLevelForSig; - int _LastVolumeSent; - bool _IsMuted; - RoutingInputPort _CurrentInputPort; - byte[] IncomingBuffer = new byte[]{}; - ActionIncrementer VolumeIncrementer; - bool VolumeIsRamping; - public bool IsInStandby { get; private set; } - - protected override Func PowerIsOnFeedbackFunc { get { return () => _PowerIsOn; } } - protected override Func IsCoolingDownFeedbackFunc { get { return () => _IsCoolingDown; } } - protected override Func IsWarmingUpFeedbackFunc { get { return () => _IsWarmingUp; } } - protected override Func CurrentInputFeedbackFunc { get { return () => _CurrentInputPort.Key; } } - - /// - /// Constructor for IBasicCommunication - /// - public SamsungMDC(string key, string name, IBasicCommunication comm, string id) - : base(key, name) - { - Communication = comm; - Communication.BytesReceived += new EventHandler(Communication_BytesReceived); - - ID = id == null ? (byte)0x01 : Convert.ToByte(id, 16); // If id is null, set default value of 0x01, otherwise assign value passed in constructor - Init(); - } - - /// - /// Constructor for TCP - /// - public SamsungMDC(string key, string name, string hostname, int port, string id) - : base(key, name) - { - Communication = new GenericTcpIpClient(key + "-tcp", hostname, port, 5000); - ID = id == null ? (byte)0x01 : Convert.ToByte(id, 16); // If id is null, set default value of 0x01, otherwise assign value passed in constructor - Init(); - } - - /// - /// Constructor for COM - /// - public SamsungMDC(string key, string name, ComPort port, ComPort.ComPortSpec spec, string id) - : base(key, name) - { - Communication = new ComPortController(key + "-com", port, spec); - //Communication.TextReceived += new EventHandler(Communication_TextReceived); - - ID = id == null ? (byte)0x01 : Convert.ToByte(id, 16); // If id is null, set default value of 0x01, otherwise assign value passed in constructor - Init(); - } - - void AddRoutingInputPort(RoutingInputPort port, byte fbMatch) - { - port.FeedbackMatchObject = fbMatch; - InputPorts.Add(port); - } - - void Init() - { - WarmupTime = 10000; - CooldownTime = 8000; - - CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 2000, 120000, 300000, StatusGet); - DeviceManager.AddDevice(CommunicationMonitor); - - VolumeIncrementer = new ActionIncrementer(655, 0, 65535, 800, 80, - v => SetVolume((ushort)v), - () => _LastVolumeSent); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.HdmiIn1, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(InputHdmi1), this), 0x21); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.HdmiIn1PC, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(InputHdmi1PC), this), 0x22); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.HdmiIn2, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(InputHdmi2), this), 0x23); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.HdmiIn2PC, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(InputHdmi2PC), this), 0x24); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.HdmiIn3, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(InputHdmi3), this), 0x32); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.DisplayPortIn1, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.DisplayPort, new Action(InputDisplayPort1), this), 0x25); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.DviIn, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Dvi, new Action(InputDvi1), this), 0x18); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.CompositeIn, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Composite, new Action(InputVideo1), this), 0x08); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.RgbIn1, eRoutingSignalType.Video, - eRoutingPortConnectionType.Vga, new Action(InputRgb1), this), 0x14); - - AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.RgbIn2, eRoutingSignalType.Video, - eRoutingPortConnectionType.Rgb, new Action(new Action(InputRgb2)), this), 0x1E); - - VolumeLevelFeedback = new IntFeedback(() => { return _VolumeLevelForSig; }); - MuteFeedback = new BoolFeedback(() => _IsMuted); - - StatusGet(); - } - - /// - /// - /// - /// - 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 - { - VolumeLevelFeedback, - MuteFeedback, - CurrentInputFeedback - }); - return list; - } - } - - /// - /// / - /// - /// - void Communication_BytesReceived(object sender, GenericCommMethodReceiveBytesArgs e) - { - // This is probably not thread-safe buffering - // Append the incoming bytes with whatever is in the buffer - var newBytes = new byte[IncomingBuffer.Length + e.Bytes.Length]; - IncomingBuffer.CopyTo(newBytes, 0); - e.Bytes.CopyTo(newBytes, IncomingBuffer.Length); - - if (Debug.Level == 2) // This check is here to prevent following string format from building unnecessarily on level 0 or 1 - Debug.Console(2, this, "Received:{0}", ComTextHelper.GetEscapedText(newBytes)); - - // Need to find AA FF and have - for (int i = 0; i < newBytes.Length; i++) - { - if (newBytes[i] == 0xAA && newBytes[i + 1] == 0xFF) - { - newBytes = newBytes.Skip(i).ToArray(); // Trim off junk if there's "dirt" in the buffer - - // parse it - // If it's at least got the header, then process it, - while (newBytes.Length > 4 && newBytes[0] == 0xAA && newBytes[1] == 0xFF) - { - var msgLen = newBytes[3]; - // if the buffer is shorter than the header (3) + message (msgLen) + checksum (1), - // give and save it for next time - if (newBytes.Length < msgLen + 4) - break; - - // Good length, grab the message - var message = newBytes.Skip(4).Take(msgLen).ToArray(); - - // At this point, the ack/nak is the first byte - if (message[0] == 0x41) - { - switch (message[1]) // type byte - { - case 0x00: // General status - UpdatePowerFB(message[2], message[5]); // "power" can be misrepresented when the display sleeps - UpdateInputFb(message[5]); - UpdateVolumeFB(message[3]); - UpdateMuteFb(message[4]); - UpdateInputFb(message[5]); - break; - - case 0x11: - UpdatePowerFB(message[2]); - break; - - case 0x12: - UpdateVolumeFB(message[2]); - break; - - case 0x13: - UpdateMuteFb(message[2]); - break; - - case 0x14: - UpdateInputFb(message[2]); - break; - - default: - break; - } - } - // Skip over what we've used and save the rest for next time - newBytes = newBytes.Skip(5 + msgLen).ToArray(); - } - - break; // parsing will mean we can stop looking for header in loop - } - } - - // Save whatever partial message is here - IncomingBuffer = newBytes; - } - - /// - /// - /// - void UpdatePowerFB(byte powerByte) - { - var newVal = powerByte == 1; - if (newVal != _PowerIsOn) - { - _PowerIsOn = newVal; - PowerIsOnFeedback.FireUpdate(); - } - } - - /// - /// Updates power status from general updates where source is included. - /// Compensates for errant standby / power off hiccups by ignoring - /// power off states with input < 0x10 - /// - void UpdatePowerFB(byte powerByte, byte inputByte) - { - // This should reject errant power feedbacks when switching away from input on standby. - if (powerByte == 0x01 && inputByte < 0x10) - IsInStandby = true; - if (powerByte == 0x00 && IsInStandby) // Ignore power off if coming from standby - glitch - { - IsInStandby = false; - return; - } - - UpdatePowerFB(powerByte); - } - - /// - /// - /// - void UpdateVolumeFB(byte b) - { - var newVol = (ushort)NumericalHelpers.Scale((double)b, 0, 100, 0, 65535); - if (!VolumeIsRamping) - _LastVolumeSent = newVol; - if (newVol != _VolumeLevelForSig) - { - _VolumeLevelForSig = newVol; - VolumeLevelFeedback.FireUpdate(); - } - } - - /// - /// - /// - void UpdateMuteFb(byte b) - { - var newMute = b == 1; - if (newMute != _IsMuted) - { - _IsMuted = newMute; - MuteFeedback.FireUpdate(); - } - } - - /// - /// - /// - void UpdateInputFb(byte b) - { - var newInput = InputPorts.FirstOrDefault(i => i.FeedbackMatchObject.Equals(b)); - if (newInput != null && newInput != _CurrentInputPort) - { - _CurrentInputPort = newInput; - CurrentInputFeedback.FireUpdate(); - } - } - - /// - /// Formats an outgoing message. Replaces third byte with ID and replaces last byte with checksum - /// - /// - void SendBytes(byte[] b) - { - if (LastCommandSentWasVolume) // If the last command sent was volume - if (b[1] != 0x12) // Check if this command is volume, and if not, delay this command - CrestronEnvironment.Sleep(100); - - b[2] = ID; - // append checksum by adding all bytes, except last which should be 00 - int checksum = 0; - for (var i = 1; i < b.Length - 1; i++) // add 2nd through 2nd-to-last bytes - { - checksum += b[i]; - } - checksum = checksum & 0x000000FF; // mask off MSBs - b[b.Length - 1] = (byte)checksum; - if(Debug.Level == 2) // This check is here to prevent following string format from building unnecessarily on level 0 or 1 - Debug.Console(2, this, "Sending:{0}", ComTextHelper.GetEscapedText(b)); - - if (b[1] == 0x12) - LastCommandSentWasVolume = true; - else - LastCommandSentWasVolume = false; - - Communication.SendBytes(b); - } - - - /// - /// - /// - public void StatusGet() - { - SendBytes(new byte[] { 0xAA, 0x00, 0x00, 0x00, 0x00 }); - } - - /// - /// - /// - public override void PowerOn() - { - //Send(PowerOnCmd); - SendBytes(new byte[] { 0xAA, 0x11, 0x00, 0x01, 0x01, 0x00 }); - 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 (!_IsWarmingUp && !_IsCoolingDown) // PowerIsOnFeedback.BoolValue && - { - //Send(PowerOffCmd); - SendBytes(new byte[] { 0xAA, 0x11, 0x00, 0x01, 0x00, 0x00 }); - _IsCoolingDown = true; - _PowerIsOn = false; - PowerIsOnFeedback.FireUpdate(); - IsCoolingDownFeedback.FireUpdate(); - // Fake cool-down cycle - CooldownTimer = new CTimer(o => - { - _IsCoolingDown = false; - IsCoolingDownFeedback.FireUpdate(); - }, CooldownTime); - } - } - - public override void PowerToggle() - { - if (PowerIsOnFeedback.BoolValue && !IsWarmingUpFeedback.BoolValue) - PowerOff(); - else if (!PowerIsOnFeedback.BoolValue && !IsCoolingDownFeedback.BoolValue) - PowerOn(); - } - - public void PowerGet() - { - SendBytes(new byte[] { 0xAA, 0x11, 0x00, 0x00, 0x00 }); - } - - public void InputHdmi1() - { - SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x21, 0x00 }); - } - - public void InputHdmi1PC() - { - SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x22, 0x00 }); - } - - public void InputHdmi2() - { - SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x23, 0x00 }); - } - - public void InputHdmi2PC() - { - SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x24, 0x00 }); - } - - public void InputHdmi3() - { - SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x32, 0x00 }); - } - - public void InputHdmi4() - { - SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x34, 0x00 }); - } - - public void InputDisplayPort1() - { - SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x25, 0x00 }); - } - - public void InputDisplayPort2() - { - SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x26, 0x00 }); - } - - public void InputDvi1() - { - SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x18, 0x00 }); - } - - public void InputVideo1() - { - SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x08, 0x00 }); - } - - public void InputRgb1() - { - SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x14, 0x00 }); - } - - public void InputRgb2() - { - SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x1E, 0x00 }); - } - - public void InputGet() - { - SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x00, 0x00 }); - } - - - /// - /// Executes a switch, turning on display if necessary. - /// - /// - public override void ExecuteSwitch(object selector) - { - //if (!(selector is Action)) - // Debug.Console(1, this, "WARNING: ExecuteSwitch cannot handle type {0}", selector.GetType()); - - if (_PowerIsOn) - (selector as Action)(); - else // if power is off, wait until we get on FB to send it. - { - // One-time event handler to wait for power on before executing switch - EventHandler handler = null; // necessary to allow reference inside lambda to handler - handler = (o, a) => - { - if (!_IsWarmingUp) // Done warming - { - IsWarmingUpFeedback.OutputChange -= handler; - (selector as Action)(); - } - }; - IsWarmingUpFeedback.OutputChange += handler; // attach and wait for on FB - PowerOn(); - } - } - - /// - /// Scales the level to the range of the display and sends the command - /// - /// - public void SetVolume(ushort level) - { - _LastVolumeSent = level; - var scaled = (int)NumericalHelpers.Scale(level, 0, 65535, 0, 100); - // The inputs to Scale ensure that byte won't overflow - SendBytes(new byte[] { 0xAA, 0x12, 0x00, 0x01, Convert.ToByte(scaled), 0x00 }); - } - - #region IBasicVolumeWithFeedback Members - - public IntFeedback VolumeLevelFeedback { get; private set; } - - public BoolFeedback MuteFeedback { get; private set; } - - /// - /// - /// - public void MuteOff() - { - SendBytes(new byte[] { 0xAA, 0x13, 0x00, 0x01, 0x00, 0x00 }); - } - - /// - /// - /// - public void MuteOn() - { - SendBytes(new byte[] { 0xAA, 0x13, 0x00, 0x01, 0x01, 0x00 }); - } - - /// - /// - /// - public void MuteGet() - { - SendBytes(new byte[] { 0xAA, 0x13, 0x00, 0x00, 0x00 }); - } - - #endregion - - #region IBasicVolumeControls Members - - /// - /// - /// - public void MuteToggle() - { - if (_IsMuted) - MuteOff(); - else - MuteOn(); - } - - /// - /// - /// - /// - public void VolumeDown(bool pressRelease) - { - if (pressRelease) - { - VolumeIncrementer.StartDown(); - VolumeIsRamping = true; - } - else - { - VolumeIsRamping = false; - VolumeIncrementer.Stop(); - } - } - - /// - /// - /// - /// - public void VolumeUp(bool pressRelease) - { - if (pressRelease) - { - VolumeIncrementer.StartUp(); - VolumeIsRamping = true; - } - else - { - VolumeIsRamping = false; - VolumeIncrementer.Stop(); - } - } - - /// - /// - /// - public void VolumeGet() - { - SendBytes(new byte[] { 0xAA, 0x12, 0x00, 0x00, 0x00 }); - } - - #endregion - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Environment/Crestron Lighting/Din8sw8.cs b/Essentials Devices Common/Essentials Devices Common/Environment/Crestron Lighting/Din8sw8.cs deleted file mode 100644 index 70687b0c..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Environment/Crestron Lighting/Din8sw8.cs +++ /dev/null @@ -1,88 +0,0 @@ -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.Lighting; - -using PepperDash.Core; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.CrestronIO; - -namespace PepperDash.Essentials.Devices.Common.Environment.Lighting -{ - public class Din8sw8Controller : Device, ISwitchedOutputCollection - { - // Need to figure out some sort of interface to make these switched outputs behave like processor relays so they can be used interchangably - - public Din8Sw8 SwitchModule { get; private set; } - - /// - /// Collection of generic switched outputs - /// - public Dictionary SwitchedOutputs { get; private set; } - - public Din8sw8Controller(string key, uint cresnetId) - : base(key) - { - SwitchedOutputs = new Dictionary(); - - SwitchModule = new Din8Sw8(cresnetId, Global.ControlSystem); - - if (SwitchModule.Register() != eDeviceRegistrationUnRegistrationResponse.Success) - { - Debug.Console(2, this, "Error registering Din8sw8. Reason: {0}", SwitchModule.RegistrationFailureReason); - } - - PopulateDictionary(); - } - - public override bool CustomActivate() - { - - - return base.CustomActivate(); - } - - /// - /// Populates the generic collection with the loads from the Crestron collection - /// - void PopulateDictionary() - { - foreach (var item in SwitchModule.SwitchedLoads) - { - SwitchedOutputs.Add(item.Number, new Din8sw8Output(item)); - } - } - } - - /// - /// Wrapper class to - /// - public class Din8sw8Output : ISwitchedOutput - { - SwitchedLoadWithOverrideParameter SwitchedOutput; - - public BoolFeedback OutputIsOnFeedback { get; protected set; } - - public Din8sw8Output(SwitchedLoadWithOverrideParameter switchedOutput) - { - SwitchedOutput = switchedOutput; - - OutputIsOnFeedback = new BoolFeedback(new Func(() => SwitchedOutput.IsOn)); - } - - public void On() - { - SwitchedOutput.FullOn(); - } - - public void Off() - { - SwitchedOutput.FullOff(); - } - } - -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Environment/Lutron/LutronQuantum.cs b/Essentials Devices Common/Essentials Devices Common/Environment/Lutron/LutronQuantum.cs deleted file mode 100644 index 8d94e9eb..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Environment/Lutron/LutronQuantum.cs +++ /dev/null @@ -1,249 +0,0 @@ -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.Lighting; - -namespace PepperDash.Essentials.Devices.Common.Environment.Lutron -{ - public class LutronQuantumArea : LightingBase, ILightingMasterRaiseLower, ICommunicationMonitor - { - public IBasicCommunication Communication { get; private set; } - public CommunicationGather PortGather { get; private set; } - public StatusMonitorBase CommunicationMonitor { get; private set; } - - CTimer SubscribeAfterLogin; - - string IntegrationId; - string Username; - string Password; - - const string Delimiter = "\x0d\x0a"; - const string Set = "#"; - const string Get = "?"; - - public LutronQuantumArea(string key, string name, IBasicCommunication comm, LutronQuantumPropertiesConfig props) - : base(key, name) - { - Communication = comm; - - IntegrationId = props.IntegrationId; - - Username = props.Control.TcpSshProperties.Username; - Password = props.Control.TcpSshProperties.Password; - - LightingScenes = props.Scenes; - - var socket = comm as ISocketStatus; - if (socket != null) - { - // IP Control - socket.ConnectionChange += new EventHandler(socket_ConnectionChange); - } - else - { - // RS-232 Control - } - - Communication.TextReceived += new EventHandler(Communication_TextReceived); - - PortGather = new CommunicationGather(Communication, Delimiter); - PortGather.LineReceived += new EventHandler(PortGather_LineReceived); - - if (props.CommunicationMonitorProperties != null) - { - CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, props.CommunicationMonitorProperties); - } - else - { - CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 120000, 120000, 300000, "?ETHERNET,0\x0d\x0a"); - } - } - - public override bool CustomActivate() - { - Communication.Connect(); - CommunicationMonitor.StatusChange += (o, a) => { Debug.Console(2, this, "Communication monitor state: {0}", CommunicationMonitor.Status); }; - CommunicationMonitor.Start(); - - return true; - } - - void socket_ConnectionChange(object sender, GenericSocketStatusChageEventArgs e) - { - Debug.Console(2, this, "Socket Status Change: {0}", e.Client.ClientStatus.ToString()); - - if (e.Client.IsConnected) - { - // Tasks on connect - } - } - - /// - /// Checks for responses that do not contain the delimiter - /// - /// - /// - void Communication_TextReceived(object sender, GenericCommMethodReceiveTextArgs args) - { - Debug.Console(2, this, "Text Received: '{0}'", args.Text); - - if (args.Text.Contains("login:")) - { - // Login - SendLine(Username); - } - else if (args.Text.Contains("password:")) - { - // Login - SendLine(Password); - SubscribeAfterLogin = new CTimer(x => SubscribeToFeedback(), null, 5000); - - } - else if (args.Text.Contains("Access Granted")) - { - if (SubscribeAfterLogin != null) - { - SubscribeAfterLogin.Stop(); - } - SubscribeToFeedback(); - } - } - - /// - /// Handles all responses that contain the delimiter - /// - /// - /// - void PortGather_LineReceived(object sender, GenericCommMethodReceiveTextArgs args) - { - Debug.Console(2, this, "Line Received: '{0}'", args.Text); - - try - { - if (args.Text.Contains("~AREA")) - { - var response = args.Text.Split(','); - - var integrationId = response[1]; - - if (integrationId != IntegrationId) - { - Debug.Console(2, this, "Response is not for correct Integration ID"); - return; - } - else - { - var action = Int32.Parse(response[2]); - - switch (action) - { - case (int)eAction.Scene: - { - var scene = response[3]; - CurrentLightingScene = LightingScenes.FirstOrDefault(s => s.ID.Equals(scene)); - - OnLightingSceneChange(); - - break; - } - default: - break; - } - } - } - } - catch (Exception e) - { - Debug.Console(2, this, "Error parsing response:\n{0}", e); - } - } - - /// - /// Subscribes to feedback - /// - public void SubscribeToFeedback() - { - Debug.Console(1, "Sending Monitoring Subscriptions"); - SendLine("#MONITORING,6,1"); - SendLine("#MONITORING,8,1"); - SendLine("#MONITORING,5,2"); - } - - /// - /// Recalls the specified scene - /// - /// - public override void SelectScene(LightingScene scene) - { - Debug.Console(1, this, "Selecting Scene: '{0}'", scene.Name); - SendLine(string.Format("{0}AREA,{1},{2},{3}", Set, IntegrationId, (int)eAction.Scene, scene.ID)); - } - - /// - /// Begins raising the lights in the area - /// - public void MasterRaise() - { - SendLine(string.Format("{0}AREA,{1},{2}", Set, IntegrationId, (int)eAction.Raise)); - } - - /// - /// Begins lowering the lights in the area - /// - public void MasterLower() - { - SendLine(string.Format("{0}AREA,{1},{2}", Set, IntegrationId, (int)eAction.Lower)); - } - - /// - /// Stops the current raise/lower action - /// - public void MasterRaiseLowerStop() - { - SendLine(string.Format("{0}AREA,{1},{2}", Set, IntegrationId, (int)eAction.Stop)); - } - - /// - /// Appends the delimiter and sends the string - /// - /// - public void SendLine(string s) - { - Debug.Console(2, this, "TX: '{0}'", s); - Communication.SendText(s + Delimiter); - } - } - - public enum eAction : int - { - SetLevel = 1, - Raise = 2, - Lower = 3, - Stop = 4, - Scene = 6, - DaylightMode = 7, - OccupancyState = 8, - OccupancyMode = 9, - OccupiedLevelOrScene = 12, - UnoccupiedLevelOrScene = 13, - HyperionShaddowSensorOverrideState = 26, - HyperionBrightnessSensorOverrideStatue = 27 - } - - public class LutronQuantumPropertiesConfig - { - public CommunicationMonitorConfig CommunicationMonitorProperties { get; set; } - public ControlPropertiesConfig Control { get; set; } - - public string IntegrationId { get; set; } - public List Scenes { get; set; } - - // Moved to use existing properties in Control object - //public string Username { get; set; } - //public string Password { get; set; } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Environment/Somfy/RelayControlledShade.cs b/Essentials Devices Common/Essentials Devices Common/Environment/Somfy/RelayControlledShade.cs deleted file mode 100644 index d2d2041d..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Environment/Somfy/RelayControlledShade.cs +++ /dev/null @@ -1,113 +0,0 @@ -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.CrestronIO; -using PepperDash.Essentials.Core.Shades; - -namespace PepperDash.Essentials.Devices.Common.Environment.Somfy -{ - /// - /// Controls a single shade using three relays - /// - public class RelayControlledShade : ShadeBase, IShadesOpenCloseStop - { - RelayControlledShadeConfigProperties Config; - - ISwitchedOutput OpenRelay; - ISwitchedOutput StopOrPresetRelay; - ISwitchedOutput CloseRelay; - - int RelayPulseTime; - - public string StopOrPresetButtonLabel { get; set; } - - public RelayControlledShade(string key, string name, RelayControlledShadeConfigProperties config) - : base(key, name) - { - Config = config; - - RelayPulseTime = Config.RelayPulseTime; - - StopOrPresetButtonLabel = Config.StopOrPresetLabel; - - } - - public override bool CustomActivate() - { - //Create ISwitchedOutput objects based on props - OpenRelay = GetSwitchedOutputFromDevice(Config.Relays.Open); - StopOrPresetRelay = GetSwitchedOutputFromDevice(Config.Relays.StopOrPreset); - CloseRelay = GetSwitchedOutputFromDevice(Config.Relays.Close); - - - return base.CustomActivate(); - } - - public override void Open() - { - Debug.Console(1, this, "Opening Shade: '{0}'", this.Name); - - PulseOutput(OpenRelay, RelayPulseTime); - } - - public override void StopOrPreset() - { - Debug.Console(1, this, "Stopping or recalling preset on Shade: '{0}'", this.Name); - - PulseOutput(StopOrPresetRelay, RelayPulseTime); - } - - public override void Close() - { - Debug.Console(1, this, "Closing Shade: '{0}'", this.Name); - - PulseOutput(CloseRelay, RelayPulseTime); - } - - void PulseOutput(ISwitchedOutput output, int pulseTime) - { - output.On(); - CTimer pulseTimer = new CTimer(new CTimerCallbackFunction((o) => output.Off()), pulseTime); - } - - /// - /// Attempts to get the port on teh specified device from config - /// - /// - /// - ISwitchedOutput GetSwitchedOutputFromDevice(IOPortConfig relayConfig) - { - var portDevice = DeviceManager.GetDeviceForKey(relayConfig.PortDeviceKey); - - if (portDevice != null) - { - return (portDevice as ISwitchedOutputCollection).SwitchedOutputs[relayConfig.PortNumber]; - } - else - { - Debug.Console(1, this, "Error: Unable to get relay on port '{0}' from device with key '{1}'", relayConfig.PortNumber, relayConfig.PortDeviceKey); - return null; - } - } - - } - - public class RelayControlledShadeConfigProperties - { - public int RelayPulseTime { get; set; } - public ShadeRelaysConfig Relays { get; set; } - public string StopOrPresetLabel { get; set; } - - public class ShadeRelaysConfig - { - public IOPortConfig Open { get; set; } - public IOPortConfig StopOrPreset { get; set; } - public IOPortConfig Close { get; set; } - } - } -} \ 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 deleted file mode 100644 index e04417a4..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj +++ /dev/null @@ -1,177 +0,0 @@ - - - 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 - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.GeneralIO.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Lighting.dll - - - - False - ..\..\..\pepperdash-simplsharp-core\CLZ Builds\PepperDash_Core.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll - False - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll - False - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe - False - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5} - PepperDash_Essentials_Core - - - - - - - - - rem S# Pro preparation will execute after these operations - - \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Factory/DeviceFactory.cs b/Essentials Devices Common/Essentials Devices Common/Factory/DeviceFactory.cs deleted file mode 100644 index 2ae265cc..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Factory/DeviceFactory.cs +++ /dev/null @@ -1,332 +0,0 @@ -using System; -using System.Collections.Generic; -using Crestron.SimplSharp; -using Crestron.SimplSharp.CrestronIO; -using Crestron.SimplSharpPro; -using Crestron.SimplSharpPro.GeneralIO; - -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using PepperDash.Core; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.Config; -using PepperDash.Essentials.Core.CrestronIO; - -using PepperDash.Essentials.Devices.Common; -using PepperDash.Essentials.Devices.Common.DSP; -using PepperDash.Essentials.Devices.Common.VideoCodec; -using PepperDash.Essentials.Devices.Common.Occupancy; -using PepperDash.Essentials.Devices.Common.Environment; - - - -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 propAnon = new {}; - JsonConvert.DeserializeAnonymousType(dc.Properties.ToString(), propAnon); - - 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 == "biamptesira") - { - var comm = CommFactory.CreateCommForDevice(dc); - var props = JsonConvert.DeserializeObject( - properties.ToString()); - return new BiampTesiraForteDsp(key, name, comm, props); - } - - 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 (groupName == "discplayer") // (typeName == "irbluray") - { - if (properties["control"]["method"].Value() == "ir") - { - var irCont = IRPortHelper.GetIrOutputPortController(dc); - return new IRBlurayBase(key, name, irCont); - } - else if (properties["control"]["method"].Value() == "com") - { - Debug.Console(0, "[{0}] COM Device type not implemented YET!", key); - } - } - - else if (typeName == "genericaudiooutwithvolume") - { - var zone = dc.Properties.Value("zone"); - return new GenericAudioOutWithVolume(key, name, - dc.Properties.Value("volumeDeviceKey"), zone); - } - - else if (groupName == "genericsource") - { - return new GenericSource(key, name); - } - - else if (typeName == "inroompc") - { - return new InRoomPc(key, name); - } - - else if (typeName == "laptop") - { - return new Laptop(key, name); - } - - else if (typeName == "mockvc") - { - var props = JsonConvert.DeserializeObject(properties.ToString()); - return new VideoCodec.MockVC(key, name, props); - } - - else if (typeName.StartsWith("ciscospark")) - { - var comm = CommFactory.CreateCommForDevice(dc); - var props = JsonConvert.DeserializeObject(properties.ToString()); - return new VideoCodec.Cisco.CiscoSparkCodec(key, name, comm, props); - } - - else if (typeName == "digitalinput") - { - var props = JsonConvert.DeserializeObject(properties.ToString()); - - IDigitalInputPorts portDevice; - - if (props.PortDeviceKey == "processor") - portDevice = Global.ControlSystem as IDigitalInputPorts; - else - portDevice = DeviceManager.GetDeviceForKey(props.PortDeviceKey) as IDigitalInputPorts; - - if (portDevice == null) - Debug.Console(0, "ERROR: Unable to add digital input device with key '{0}'. Port Device does not support digital inputs", key); - else - { - var cs = (portDevice as CrestronControlSystem); - if (cs == null) - { - Debug.Console(0, "ERROR: Port device for [{0}] is not control system", props.PortDeviceKey); - return null; - } - - if (cs.SupportsVersiport) - { - Debug.Console(1, "Attempting to add Digital Input device to Versiport port '{0}'", props.PortNumber); - - if (props.PortNumber > cs.NumberOfVersiPorts) - { - Debug.Console(0, "WARNING: Cannot add Vesiport {0} on {1}. Out of range", - props.PortNumber, props.PortDeviceKey); - return null; - } - - Versiport vp = cs.VersiPorts[props.PortNumber]; - - if (!vp.Registered) - { - var regSuccess = vp.Register(); - if (regSuccess == eDeviceRegistrationUnRegistrationResponse.Success) - { - Debug.Console(1, "Successfully Created Digital Input Device on Versiport"); - return new GenericVersiportDigitalInputDevice(key, vp, props); - } - else - { - Debug.Console(0, "WARNING: Attempt to register versiport {0} on device with key '{1}' failed: {2}", - props.PortNumber, props.PortDeviceKey, regSuccess); - return null; - } - } - } - else if (cs.SupportsDigitalInput) - { - Debug.Console(1, "Attempting to add Digital Input device to Digital Input port '{0}'", props.PortNumber); - - if (props.PortNumber > cs.NumberOfDigitalInputPorts) - { - Debug.Console(0, "WARNING: Cannot register DIO port {0} on {1}. Out of range", - props.PortNumber, props.PortDeviceKey); - return null; - } - - DigitalInput digitalInput = cs.DigitalInputPorts[props.PortNumber]; - - if (!digitalInput.Registered) - { - if (digitalInput.Register() == eDeviceRegistrationUnRegistrationResponse.Success) - { - Debug.Console(1, "Successfully Created Digital Input Device on Digital Input"); - return new GenericDigitalInputDevice(key, digitalInput); - } - else - Debug.Console(0, "WARNING: Attempt to register digital input {0} on device with key '{1}' failed.", - props.PortNumber, props.PortDeviceKey); - } - } - } - } - - else if (typeName == "relayoutput") - { - var props = JsonConvert.DeserializeObject(properties.ToString()); - - IRelayPorts portDevice; - - if (props.PortDeviceKey == "processor") - portDevice = Global.ControlSystem as IRelayPorts; - else - portDevice = DeviceManager.GetDeviceForKey(props.PortDeviceKey) as IRelayPorts; - - if (portDevice == null) - Debug.Console(0, "Unable to add relay device with key '{0}'. Port Device does not support relays", key); - else - { - var cs = (portDevice as CrestronControlSystem); - - if (cs != null) - if (cs.SupportsRelay && props.PortNumber <= cs.NumberOfRelayPorts) - { - Relay relay = cs.RelayPorts[props.PortNumber]; - - if (!relay.Registered) - { - if (relay.Register() == eDeviceRegistrationUnRegistrationResponse.Success) - return new GenericRelayDevice(key, relay); - else - Debug.Console(0, "Attempt to register relay {0} on device with key '{1}' failed.", props.PortNumber, props.PortDeviceKey); - } - } - - // Future: Check if portDevice is 3-series card or other non control system that supports versiports - } - } - - else if (typeName == "microphoneprivacycontroller") - { - var props = JsonConvert.DeserializeObject(properties.ToString()); - - return new Microphones.MicrophonePrivacyController(key, props); - } - - 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 == "roku") - { - var irCont = IRPortHelper.GetIrOutputPortController(dc); - return new Roku2(key, name, irCont); - } - - else if (typeName == "glsoirccn") - { - var comm = CommFactory.GetControlPropertiesConfig(dc); - - GlsOccupancySensorBase occSensor = null; - - occSensor = new GlsOirCCn(comm.CresnetIdInt, Global.ControlSystem); - - if (occSensor != null) - return new EssentialsGlsOccupancySensorBaseController(key, name, occSensor); - else - Debug.Console(0, "ERROR: Unable to create Occupancy Sensor Device. Key: '{0}'", key); - } - - else if (typeName == "glsodtccn") - { - var comm = CommFactory.GetControlPropertiesConfig(dc); - - GlsOccupancySensorBase occSensor = null; - - occSensor = new GlsOdtCCn(comm.CresnetIdInt, Global.ControlSystem); - - if (occSensor != null) - return new EssentialsGlsOccupancySensorBaseController(key, name, occSensor); - else - Debug.Console(0, "ERROR: Unable to create Occupancy Sensor Device. Key: '{0}'", key); - } - - else if (groupName == "lighting") - { - if (typeName == "lutronqs") - { - var comm = CommFactory.CreateCommForDevice(dc); - - var props = JsonConvert.DeserializeObject(properties.ToString()); - - return new Environment.Lutron.LutronQuantumArea(key, name, comm, props); - } - else if (typeName == "din8sw8") - { - var comm = CommFactory.GetControlPropertiesConfig(dc); - - return new Environment.Lighting.Din8sw8Controller(key, comm.CresnetIdInt); - } - - } - - else if (groupName == "environment") - { - if (typeName == "shadecontroller") - { - var props = JsonConvert.DeserializeObject(properties.ToString()); - - return new Core.Shades.ShadeController(key, name, props); - } - else if (typeName == "relaycontrolledshade") - { - var props = JsonConvert.DeserializeObject(properties.ToString()); - - return new Environment.Somfy.RelayControlledShade(key, name, props); - } - - } - - - return null; - } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Generic/GenericSource.cs b/Essentials Devices Common/Essentials Devices Common/Generic/GenericSource.cs deleted file mode 100644 index 145fd41c..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Generic/GenericSource.cs +++ /dev/null @@ -1,42 +0,0 @@ -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 GenericSource : Device, IUiDisplayInfo, IRoutingOutputs, IUsageTracking - { - - public uint DisplayUiType { get { return DisplayUiConstants.TypeNoControls; } } - - public GenericSource(string key, string name) - : base(key, name) - { - - AnyOut = new RoutingOutputPort(RoutingPortNames.AnyOut, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, null, this); - OutputPorts = new RoutingPortCollection { AnyOut }; - } - - #region IRoutingOutputs Members - - public RoutingOutputPort AnyOut { get; private set; } - public RoutingPortCollection OutputPorts { get; private set; } - - #endregion - - #region IUsageTracking Members - - public UsageTracking UsageTracker { get; set; } - - #endregion - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/MIcrophone/MicrophonePrivacyController.cs b/Essentials Devices Common/Essentials Devices Common/MIcrophone/MicrophonePrivacyController.cs deleted file mode 100644 index 99050089..00000000 --- a/Essentials Devices Common/Essentials Devices Common/MIcrophone/MicrophonePrivacyController.cs +++ /dev/null @@ -1,226 +0,0 @@ -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.CrestronIO; - - -namespace PepperDash.Essentials.Devices.Common.Microphones -{ - /// - /// Used for applications where one or more microphones with momentary contact closure outputs are used to - /// toggle the privacy state of the room. Privacy state feedback is represented - /// - public class MicrophonePrivacyController : Device - { - MicrophonePrivacyControllerConfig Config; - - bool initialized; - - public bool EnableLeds - { - get - { - return _enableLeds; - } - set - { - _enableLeds = value; - - if (initialized) - { - if (value) - { - CheckPrivacyMode(); - SetLedStates(); - } - else - TurnOffAllLeds(); - } - } - } - bool _enableLeds; - - public List Inputs { get; private set; } - - public GenericRelayDevice RedLedRelay { get; private set; } - bool _redLedRelayState; - - public GenericRelayDevice GreenLedRelay { get; private set; } - bool _greenLedRelayState; - - public IPrivacy PrivacyDevice { get; private set; } - - public MicrophonePrivacyController(string key, MicrophonePrivacyControllerConfig config) : - base(key) - { - Config = config; - - Inputs = new List(); - } - - public override bool CustomActivate() - { - foreach (var i in Config.Inputs) - { - var input = DeviceManager.GetDeviceForKey(i.DeviceKey) as IDigitalInput; - - if(input != null) - AddInput(input); - } - - var greenLed = DeviceManager.GetDeviceForKey(Config.GreenLedRelay.DeviceKey) as GenericRelayDevice; - - if (greenLed != null) - GreenLedRelay = greenLed; - else - Debug.Console(0, this, "Unable to add Green LED device"); - - var redLed = DeviceManager.GetDeviceForKey(Config.RedLedRelay.DeviceKey) as GenericRelayDevice; - - if (redLed != null) - RedLedRelay = redLed; - else - Debug.Console(0, this, "Unable to add Red LED device"); - - CheckPrivacyMode(); - - initialized = true; - - return base.CustomActivate(); - } - - public void SetPrivacyDevice(IPrivacy privacyDevice) - { - PrivacyDevice = privacyDevice; - - PrivacyDevice.PrivacyModeIsOnFeedback.OutputChange += PrivacyModeIsOnFeedback_OutputChange; - } - - void PrivacyModeIsOnFeedback_OutputChange(object sender, EventArgs e) - { - Debug.Console(1, this, "Privacy mode change: {0}", sender as BoolFeedback); - CheckPrivacyMode(); - } - - void CheckPrivacyMode() - { - if (PrivacyDevice != null) - { - var privacyState = PrivacyDevice.PrivacyModeIsOnFeedback.BoolValue; - - if (privacyState) - TurnOnRedLeds(); - else - TurnOnGreenLeds(); - } - } - - void AddInput(IDigitalInput input) - { - Inputs.Add(input); - - input.InputStateFeedback.OutputChange += InputStateFeedback_OutputChange; - } - - void RemoveInput(IDigitalInput input) - { - var tempInput = Inputs.FirstOrDefault(i => i.Equals(input)); - - if (tempInput != null) - tempInput.InputStateFeedback.OutputChange -= InputStateFeedback_OutputChange; - - Inputs.Remove(input); - } - - void SetRedLedRelay(GenericRelayDevice relay) - { - RedLedRelay = relay; - } - - void SetGreenLedRelay(GenericRelayDevice relay) - { - GreenLedRelay = relay; - } - - /// - /// Check the state of the input change and handle accordingly - /// - /// - /// - void InputStateFeedback_OutputChange(object sender, EventArgs e) - { - if ((sender as BoolFeedback).BoolValue == true) - TogglePrivacyMute(); - } - - /// - /// Toggles the state of the privacy mute - /// - public void TogglePrivacyMute() - { - PrivacyDevice.PrivacyModeToggle(); - } - - void TurnOnRedLeds() - { - _greenLedRelayState = false; - _redLedRelayState = true; - SetLedStates(); - } - - void TurnOnGreenLeds() - { - _redLedRelayState = false; - _greenLedRelayState = true; - SetLedStates(); - } - - /// - /// If enabled, sets the actual state of the relays - /// - void SetLedStates() - { - if (_enableLeds) - { - SetRelayStates(); - } - else - TurnOffAllLeds(); - } - - /// - /// Turns off all LEDs - /// - void TurnOffAllLeds() - { - _redLedRelayState = false; - _greenLedRelayState = false; - - SetRelayStates(); - } - - void SetRelayStates() - { - if (RedLedRelay != null) - { - if (_redLedRelayState) - RedLedRelay.CloseRelay(); - else - RedLedRelay.OpenRelay(); - } - - if(GreenLedRelay != null) - { - if (_greenLedRelayState) - GreenLedRelay.CloseRelay(); - else - GreenLedRelay.OpenRelay(); - } - } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/MIcrophone/MicrophonePrivacyControllerConfig.cs b/Essentials Devices Common/Essentials Devices Common/MIcrophone/MicrophonePrivacyControllerConfig.cs deleted file mode 100644 index 18bfe11d..00000000 --- a/Essentials Devices Common/Essentials Devices Common/MIcrophone/MicrophonePrivacyControllerConfig.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Essentials.Core.CrestronIO; - -namespace PepperDash.Essentials.Devices.Common.Microphones -{ - public class MicrophonePrivacyControllerConfig - { - public List Inputs { get; set; } - public KeyedDevice GreenLedRelay { get; set; } - public KeyedDevice RedLedRelay { get; set; } - } - - public class KeyedDevice - { - public string DeviceKey { get; set; } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Occupancy/EssentialsGlsOccupancySensorBaseController.cs b/Essentials Devices Common/Essentials Devices Common/Occupancy/EssentialsGlsOccupancySensorBaseController.cs deleted file mode 100644 index 7d785b80..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Occupancy/EssentialsGlsOccupancySensorBaseController.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro.GeneralIO; - -using PepperDash.Core; -using PepperDash.Essentials.Core; - -namespace PepperDash.Essentials.Devices.Common.Occupancy -{ - public class EssentialsGlsOccupancySensorBaseController : CrestronGenericBaseDevice, IOccupancyStatusProvider - { - public GlsOccupancySensorBase OccSensor { get; private set; } - - public BoolFeedback RoomIsOccupiedFeedback { get; private set; } - - // Debug properties - public bool InTestMode { get; private set; } - - public bool TestRoomIsOccupiedFeedback { get; private set; } - - public Func RoomIsOccupiedFeedbackFunc - { - get - { - return () => InTestMode ? TestRoomIsOccupiedFeedback : OccSensor.OccupancyDetectedFeedback.BoolValue; - } - } - - public EssentialsGlsOccupancySensorBaseController(string key, string name, GlsOccupancySensorBase sensor) - : base(key, name, sensor) - { - OccSensor = sensor; - - RoomIsOccupiedFeedback = new BoolFeedback(RoomIsOccupiedFeedbackFunc); - - OccSensor.GlsOccupancySensorChange += new GlsOccupancySensorChangeEventHandler(sensor_GlsOccupancySensorChange); - } - - void sensor_GlsOccupancySensorChange(GlsOccupancySensorBase device, GlsOccupancySensorChangeEventArgs args) - { - RoomIsOccupiedFeedback.FireUpdate(); - } - - public void SetTestMode(bool mode) - { - InTestMode = mode; - - Debug.Console(1, this, "In Mock Mode: '{0}'", InTestMode); - } - - public void SetTestOccupiedState(bool state) - { - if (!InTestMode) - Debug.Console(1, "Mock mode not enabled"); - else - { - TestRoomIsOccupiedFeedback = state; - - RoomIsOccupiedFeedback.FireUpdate(); - } - } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Occupancy/EssentialsGlsOccupancySensorBaseController.cs.orig b/Essentials Devices Common/Essentials Devices Common/Occupancy/EssentialsGlsOccupancySensorBaseController.cs.orig deleted file mode 100644 index f65e1b37..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Occupancy/EssentialsGlsOccupancySensorBaseController.cs.orig +++ /dev/null @@ -1,87 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro.GeneralIO; - -using PepperDash.Core; -using PepperDash.Essentials.Core; - -namespace PepperDash.Essentials.Devices.Common.Occupancy -{ - public class EssentialsGlsOccupancySensorBaseController : CrestronGenericBaseDevice, IOccupancyStatusProvider - { - public GlsOccupancySensorBase OccSensor { get; private set; } - - public BoolFeedback RoomIsOccupiedFeedback { get; private set; } - -<<<<<<< HEAD - /// - /// Set by debugging functions - /// - public bool InMockMode { get; private set; } - - public bool MockRoomIsOccupiedFeedback { get; private set; } -======= - // Debug properties - public bool InTestMode { get; private set; } - - public bool TestRoomIsOccupiedFeedback { get; private set; } ->>>>>>> origin/feature/ecs-342-neil - - public Func RoomIsOccupiedFeedbackFunc - { - get - { -<<<<<<< HEAD - return () => InMockMode ? MockRoomIsOccupiedFeedback : OccSensor.OccupancyDetectedFeedback.BoolValue; -======= - return () => InTestMode ? TestRoomIsOccupiedFeedback : OccSensor.OccupancyDetectedFeedback.BoolValue; ->>>>>>> origin/feature/ecs-342-neil - } - } - - public EssentialsGlsOccupancySensorBaseController(string key, string name, GlsOccupancySensorBase sensor, GlsOccupancySensorConfigurationProperties props) - : base(key, name, sensor) - { - OccSensor = sensor; - RoomIsOccupiedFeedback = new BoolFeedback(RoomIsOccupiedFeedbackFunc); - - OccSensor.GlsOccupancySensorChange += new GlsOccupancySensorChangeEventHandler(sensor_GlsOccupancySensorChange); - } - - void sensor_GlsOccupancySensorChange(GlsOccupancySensorBase device, GlsOccupancySensorChangeEventArgs args) - { - RoomIsOccupiedFeedback.FireUpdate(); - } - - public void SetTestMode(bool mode) - { - InTestMode = mode; - - Debug.Console(1, this, "In Mock Mode: '{0}'", InTestMode); - } - - public void SetTestOccupiedState(bool state) - { - if (!InTestMode) - Debug.Console(1, "Mock mode not enabled"); - else - { - TestRoomIsOccupiedFeedback = state; - - RoomIsOccupiedFeedback.FireUpdate(); - } - } - } - - /// - /// - /// - public class GlsOccupancySensorConfigurationProperties - { - public string CresnetId { get; set; } - public string Model { get; set; } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Occupancy/EssentialsOccupancyAggregator.cs b/Essentials Devices Common/Essentials Devices Common/Occupancy/EssentialsOccupancyAggregator.cs deleted file mode 100644 index 8a7d2ca2..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Occupancy/EssentialsOccupancyAggregator.cs +++ /dev/null @@ -1,45 +0,0 @@ -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.Occupancy -{ - /// - /// Aggregates the RoomIsOccupied feedbacks of one or more IOccupancyStatusProvider objects - /// - public class EssentialsOccupancyAggregator : Device, IOccupancyStatusProvider - { - /// - /// Aggregated feedback of all linked IOccupancyStatusProvider devices - /// - public BoolFeedback RoomIsOccupiedFeedback - { - get - { - return AggregatedOccupancyStatus.Output; - } - } - - private BoolFeedbackOr AggregatedOccupancyStatus; - - public EssentialsOccupancyAggregator(string key, string name) - : base(key, name) - { - AggregatedOccupancyStatus = new BoolFeedbackOr(); - } - - /// - /// Adds an IOccupancyStatusProvider device - /// - /// - public void AddOccupancyStatusProvider(IOccupancyStatusProvider statusProvider) - { - AggregatedOccupancyStatus.AddOutputIn(statusProvider.RoomIsOccupiedFeedback); - } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Occupancy/iOccupancyStatusProvider.cs b/Essentials Devices Common/Essentials Devices Common/Occupancy/iOccupancyStatusProvider.cs deleted file mode 100644 index 37ca74d6..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Occupancy/iOccupancyStatusProvider.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Essentials.Core; - -namespace PepperDash.Essentials.Devices.Common.Occupancy -{ - public interface IOccupancyStatusProvider - { - BoolFeedback RoomIsOccupiedFeedback { get; } - } -} \ 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 deleted file mode 100644 index 70c49366..00000000 --- a/Essentials Devices Common/Essentials Devices Common/PC/InRoomPc.cs +++ /dev/null @@ -1,61 +0,0 @@ -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, IUsageTracking - { - 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 - - #region IUsageTracking Members - - public UsageTracking UsageTracker { get; set; } - - #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 deleted file mode 100644 index 5250cc58..00000000 --- a/Essentials Devices Common/Essentials Devices Common/PC/Laptop.cs +++ /dev/null @@ -1,61 +0,0 @@ -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, IUsageTracking - { - 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 - - #region IUsageTracking Members - - public UsageTracking UsageTracker { get; set; } - - #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 deleted file mode 100644 index bbee12ff..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System.Reflection; - -[assembly: AssemblyTitle("Essentials_Devices_Common")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Essentials_Devices_Common")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyVersion("1.0.3.*")] \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/Properties/ControlSystem.cfg b/Essentials Devices Common/Essentials Devices Common/Properties/ControlSystem.cfg deleted file mode 100644 index e69de29b..00000000 diff --git a/Essentials Devices Common/Essentials Devices Common/References/Cisco One Button To Push.dll b/Essentials Devices Common/Essentials Devices Common/References/Cisco One Button To Push.dll deleted file mode 100644 index a6fcd201..00000000 Binary files a/Essentials Devices Common/Essentials Devices Common/References/Cisco One Button To Push.dll and /dev/null differ diff --git a/Essentials Devices Common/Essentials Devices Common/References/Cisco SX80 Corporate Phone Book.dll b/Essentials Devices Common/Essentials Devices Common/References/Cisco SX80 Corporate Phone Book.dll deleted file mode 100644 index acd3b0e2..00000000 Binary files a/Essentials Devices Common/Essentials Devices Common/References/Cisco SX80 Corporate Phone Book.dll and /dev/null differ diff --git a/Essentials Devices Common/Essentials Devices Common/SetTopBox/IRSetTopBoxBase.cs b/Essentials Devices Common/Essentials Devices Common/SetTopBox/IRSetTopBoxBase.cs deleted file mode 100644 index 671272f5..00000000 --- a/Essentials Devices Common/Essentials Devices Common/SetTopBox/IRSetTopBoxBase.cs +++ /dev/null @@ -1,343 +0,0 @@ -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, IUsageTracking - { - 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 - - #region IUsageTracking Members - - public UsageTracking UsageTracker { get; set; } - - #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 deleted file mode 100644 index ae9a6709..00000000 --- a/Essentials Devices Common/Essentials Devices Common/SetTopBox/SetTopBoxPropertiesConfig.cs +++ /dev/null @@ -1,20 +0,0 @@ -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 : PepperDash.Essentials.Core.Config.SourceDevicePropertiesConfigBase - { - 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 deleted file mode 100644 index d8cd66b2..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Streaming/AppleTV.cs +++ /dev/null @@ -1,145 +0,0 @@ -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 deleted file mode 100644 index 2d4af003..00000000 --- a/Essentials Devices Common/Essentials Devices Common/Streaming/Roku.cs +++ /dev/null @@ -1,148 +0,0 @@ -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/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/BookingsDataClasses.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/BookingsDataClasses.cs deleted file mode 100644 index 9525aa57..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/BookingsDataClasses.cs +++ /dev/null @@ -1,379 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Core; -using PepperDash.Essentials.Devices.Common.Codec; - -namespace PepperDash.Essentials.Devices.Common.VideoCodec -{ - public class CiscoCodecBookings - { - public class TotalRows - { - public string Value { get; set; } - } - - public class ResultInfo - { - public TotalRows TotalRows { get; set; } - } - - public class LastUpdated - { - string _value; - - public DateTime Value { - get - { - DateTime _valueDateTime; - try - { - _valueDateTime = DateTime.Parse(_value); - return _valueDateTime; - } - catch - { - return new DateTime(); - } - } - set - { - _value = value.ToString(); - } - } - } - - public class Id - { - public string Value { get; set; } - } - - public class Title - { - public string Value { get; set; } - } - - public class Agenda - { - public string Value { get; set; } - } - - public class Privacy - { - public string Value { get; set; } - } - - public class FirstName - { - public string Value { get; set; } - } - - public class LastName - { - public string Value { get; set; } - } - - public class Email - { - public string Value { get; set; } - } - - public class Id2 - { - public string Value { get; set; } - } - - public class Organizer - { - public FirstName FirstName { get; set; } - public LastName LastName { get; set; } - public Email Email { get; set; } - public Id2 Id { get; set; } - - public Organizer() - { - FirstName = new FirstName(); - LastName = new LastName(); - Email = new Email(); - } - } - - public class StartTime - { - public DateTime Value { get; set; } - } - - public class StartTimeBuffer - { - public string Value { get; set; } - } - - public class EndTime - { - public DateTime Value { get; set; } - } - - public class EndTimeBuffer - { - public string Value { get; set; } - } - - public class Time - { - public StartTime StartTime { get; set; } - public StartTimeBuffer StartTimeBuffer { get; set; } - public EndTime EndTime { get; set; } - public EndTimeBuffer EndTimeBuffer { get; set; } - - public Time() - { - StartTime = new StartTime(); - EndTime = new EndTime(); - } - } - - public class MaximumMeetingExtension - { - public string Value { get; set; } - } - - public class MeetingExtensionAvailability - { - public string Value { get; set; } - } - - public class BookingStatus - { - public string Value { get; set; } - } - - public class BookingStatusMessage - { - public string Value { get; set; } - } - - public class Enabled - { - public string Value { get; set; } - } - - public class Url - { - public string Value { get; set; } - } - - public class MeetingNumber - { - public string Value { get; set; } - } - - public class Password - { - public string Value { get; set; } - } - - public class HostKey - { - public string Value { get; set; } - } - - public class DialInNumbers - { - } - - public class Webex - { - public Enabled Enabled { get; set; } - public Url Url { get; set; } - public MeetingNumber MeetingNumber { get; set; } - public Password Password { get; set; } - public HostKey HostKey { get; set; } - public DialInNumbers DialInNumbers { get; set; } - } - - public class Encryption - { - public string Value { get; set; } - } - - public class Role - { - public string Value { get; set; } - } - - public class Recording - { - public string Value { get; set; } - } - - public class Number - { - public string Value { get; set; } - } - - public class Protocol - { - public string Value { get; set; } - } - - public class CallRate - { - public string Value { get; set; } - } - - public class CallType - { - public string Value { get; set; } - } - - public class Call - { - public string id { get; set; } - public Number Number { get; set; } - public Protocol Protocol { get; set; } - public CallRate CallRate { get; set; } - public CallType CallType { get; set; } - } - - public class Calls - { - public List Call {get; set;} - } - - public class ConnectMode - { - public string Value { get; set; } - } - - public class DialInfo - { - public Calls Calls { get; set; } - public ConnectMode ConnectMode { get; set; } - - public DialInfo() - { - Calls = new Calls(); - ConnectMode = new ConnectMode(); - } - } - - public class Booking - { - public string id { get; set; } - public Id Id { get; set; } - public Title Title { get; set; } - public Agenda Agenda { get; set; } - public Privacy Privacy { get; set; } - public Organizer Organizer { get; set; } - public Time Time { get; set; } - public MaximumMeetingExtension MaximumMeetingExtension { get; set; } - public MeetingExtensionAvailability MeetingExtensionAvailability { get; set; } - public BookingStatus BookingStatus { get; set; } - public BookingStatusMessage BookingStatusMessage { get; set; } - public Webex Webex { get; set; } - public Encryption Encryption { get; set; } - public Role Role { get; set; } - public Recording Recording { get; set; } - public DialInfo DialInfo { get; set; } - - public Booking() - { - Time = new Time(); - Id = new Id(); - Organizer = new Organizer(); - Title = new Title(); - Agenda = new Agenda(); - Privacy = new Privacy(); - DialInfo = new DialInfo(); - } - } - - public class BookingsListResult - { - public string status { get; set; } - public ResultInfo ResultInfo { get; set; } - //public LastUpdated LastUpdated { get; set; } - public List Booking { get; set; } - } - - public class CommandResponse - { - public BookingsListResult BookingsListResult { get; set; } - } - - public class RootObject - { - public CommandResponse CommandResponse { get; set; } - } - - /// - /// Extracts the necessary meeting values from the Cisco bookings response ans converts them to the generic class - /// - /// - /// - public static List GetGenericMeetingsFromBookingResult(List bookings) - { - var meetings = new List(); - - if (Debug.Level > 0) - { - Debug.Console(1, "Meetings List:\n"); - } - - foreach(Booking b in bookings) - { - var meeting = new Meeting(); - - if(b.Id != null) - meeting.Id = b.Id.Value; - if(b.Organizer != null) - meeting.Organizer = string.Format("{0}, {1}", b.Organizer.LastName.Value, b.Organizer.FirstName.Value); - if(b.Title != null) - meeting.Title = b.Title.Value; - if(b.Agenda != null) - meeting.Agenda = b.Agenda.Value; - if(b.Time != null) - meeting.StartTime = b.Time.StartTime.Value; - meeting.EndTime = b.Time.EndTime.Value; - if(b.Privacy != null) - meeting.Privacy = CodecCallPrivacy.ConvertToDirectionEnum(b.Privacy.Value); - -#warning Update this ConnectMode conversion after testing onsite. Expected value is "OBTP", but in PD NYC Test scenarios, "Manual" is being returned for OBTP meetings - if (b.DialInfo.ConnectMode != null) - if (b.DialInfo.ConnectMode.Value.ToLower() == "obtp" || b.DialInfo.ConnectMode.Value.ToLower() == "manual") - meeting.IsOneButtonToPushMeeting = true; - - if (b.DialInfo.Calls.Call != null) - { - foreach (Call c in b.DialInfo.Calls.Call) - { - meeting.Calls.Add(new PepperDash.Essentials.Devices.Common.Codec.Call() - { - Number = c.Number.Value, - Protocol = c.Protocol.Value, - CallRate = c.CallRate.Value, - CallType = c.CallType.Value - }); - } - } - - - meetings.Add(meeting); - - if(Debug.Level > 0) - { - Debug.Console(1, "Title: {0}, ID: {1}, Organizer: {2}, Agenda: {3}", meeting.Title, meeting.Id, meeting.Organizer, meeting.Agenda); - Debug.Console(1, " Start Time: {0}, End Time: {1}, Duration: {2}", meeting.StartTime, meeting.EndTime, meeting.Duration); - Debug.Console(1, " Joinable: {0}\n", meeting.Joinable); - } - } - - meetings.OrderBy(m => m.StartTime); - - return meetings; - } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CallHistoryDataClasses.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CallHistoryDataClasses.cs deleted file mode 100644 index c5749b7a..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CallHistoryDataClasses.cs +++ /dev/null @@ -1,97 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Devices.Common.VideoCodec -{ - public class CiscoCallHistory - { - public class CallbackNumber - { - public string Value { get; set; } - } - - public class DisplayName - { - public string Value { get; set; } - } - - public class LastOccurrenceStartTime - { - public DateTime Value { get; set; } - } - - public class LastOccurrenceDaysAgo - { - public string Value { get; set; } - } - - public class LastOccurrenceHistoryId - { - public string Value { get; set; } - } - - public class OccurrenceType - { - public string Value { get; set; } - } - - public class IsAcknowledged - { - public string Value { get; set; } - } - - public class OccurrenceCount - { - public string Value { get; set; } - } - - public class Entry - { - public string id { get; set; } - public CallbackNumber CallbackNumber { get; set; } - public DisplayName DisplayName { get; set; } - public LastOccurrenceStartTime LastOccurrenceStartTime { get; set; } - public LastOccurrenceDaysAgo LastOccurrenceDaysAgo { get; set; } - public LastOccurrenceHistoryId LastOccurrenceHistoryId { get; set; } - public OccurrenceType OccurrenceType { get; set; } - public IsAcknowledged IsAcknowledged { get; set; } - public OccurrenceCount OccurrenceCount { get; set; } - } - - public class Offset - { - public string Value { get; set; } - } - - public class Limit - { - public string Value { get; set; } - } - - public class ResultInfo - { - public Offset Offset { get; set; } - public Limit Limit { get; set; } - } - - public class CallHistoryRecentsResult - { - public string status { get; set; } - public List Entry { get; set; } - public ResultInfo ResultInfo { get; set; } - } - - public class CommandResponse - { - public CallHistoryRecentsResult CallHistoryRecentsResult { get; set; } - } - - public class RootObject - { - public CommandResponse CommandResponse { get; set; } - } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CameraConverter.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CameraConverter.cs deleted file mode 100644 index 5e67c059..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CameraConverter.cs +++ /dev/null @@ -1,53 +0,0 @@ -//using System; -//using System.Collections.Generic; -//using System.Linq; -//using System.Text; -//using Crestron.SimplSharp; - -//namespace PepperDash.Essentials.Devices.Common.VideoCodec.CiscoCodec -//{ -// /// -// /// This helps convert the camera section differences between Spark and Spark+ -// /// One of them returns an object. One returns an array. -// /// -// public class CameraConverter : JsonConverter -// { - -// public override bool CanConvert(System.Type objectType) -// { -// return objectType == typeof(Camera) || objectType == typeof(List); -// } - -// public override object ReadJson(JsonReader reader, System.Type objectType, object existingValue, JsonSerializer serializer) -// { -// if (reader.TokenType == JsonToken.StartArray) -// { -// var l = new List(); -// reader.Read(); -// while (reader.TokenType != JsonToken.EndArray) -// { -// l.Add(reader.Value as Camera); -// reader.Read(); -// } -// return l; -// } -// else -// { -// return new List { reader.Value as Camera }; -// } -// } - -// 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 Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoCodec.cs.orig b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoCodec.cs.orig deleted file mode 100644 index 3abc8d01..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoCodec.cs.orig +++ /dev/null @@ -1,1359 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharp.Net.Https; -using Crestron.SimplSharp.CrestronXml; -using Crestron.SimplSharp.CrestronXml.Serialization; -using Newtonsoft.Json; -<<<<<<< HEAD -//using Cisco_One_Button_To_Push; -//using Cisco_SX80_Corporate_Phone_Book; -======= ->>>>>>> origin/feature/ecs-342 - -using PepperDash.Core; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.Routing; -using PepperDash.Essentials.Devices.Common.Codec; -using PepperDash.Essentials.Devices.Common.Occupancy; -using PepperDash.Essentials.Devices.Common.VideoCodec; - -namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco -{ - enum eCommandType { SessionStart, SessionEnd, Command, GetStatus, GetConfiguration }; - - public class CiscoCodec : VideoCodecBase, IHasCallHistory, IHasCallFavorites, IHasDirectory, IHasScheduleAwareness, IOccupancyStatusProvider, IHasCodecLayouts, IHasCodecSelfview - { - public event EventHandler DirectoryResultReturned; - - public IBasicCommunication Communication { get; private set; } - public CommunicationGather PortGather { get; private set; } - public CommunicationGather JsonGather { get; private set; } - - public StatusMonitorBase CommunicationMonitor { get; private set; } - - public BoolFeedback StandbyIsOnFeedback { get; private set; } - - public BoolFeedback RoomIsOccupiedFeedback { get; private set; } - - public IntFeedback PeopleCountFeedback { get; private set; } - - public BoolFeedback SpeakerTrackIsOnFeedback { get; private set; } - - public BoolFeedback SelfviewIsOnFeedback { get; private set; } - - public StringFeedback SelfviewPipPositionFeedback { get; private set; } - - public StringFeedback LocalLayoutFeedback { get; private set; } - - private CodecCommandWithLabel CurrentSelfviewPipPosition; - - private CodecCommandWithLabel CurrentLocalLayout; - - /// - /// List the available positions for the selfview PIP window - /// - public List SelfviewPipPositions = new List() - { - new CodecCommandWithLabel("CenterLeft", "Center Left"), - new CodecCommandWithLabel("CenterRight", "Center Right"), - new CodecCommandWithLabel("LowerLeft", "Lower Left"), - new CodecCommandWithLabel("LowerRight", "Lower Right"), - new CodecCommandWithLabel("UpperCenter", "Upper Center"), - new CodecCommandWithLabel("UpperLeft", "Upper Left"), - new CodecCommandWithLabel("UpperRight", "Upper Right"), - }; - - /// - /// Lists the available options for local layout - /// - public List LocalLayouts = new List() - { - new CodecCommandWithLabel("auto", "Auto"), - //new CiscoCodecLocalLayout("custom", "Custom"), // Left out for now - new CodecCommandWithLabel("equal","Equal"), - new CodecCommandWithLabel("overlay","Overlay"), - new CodecCommandWithLabel("prominent","Prominent"), - new CodecCommandWithLabel("single","Single") - }; - - private CiscoCodecConfiguration.RootObject CodecConfiguration; - - private CiscoCodecStatus.RootObject CodecStatus; - - public CodecCallHistory CallHistory { get; private set; } - - public CodecCallFavorites CallFavorites { get; private set; } - - public CodecDirectory DirectoryRoot { get; private set; } - - public CodecScheduleAwareness CodecSchedule { get; private set; } - - /// - /// Gets and returns the scaled volume of the codec - /// - protected override Func VolumeLevelFeedbackFunc - { - get - { - return () => CrestronEnvironment.ScaleWithLimits(CodecStatus.Status.Audio.Volume.IntValue, 100, 0, 65535, 0); - } - } - - protected override Func PrivacyModeIsOnFeedbackFunc - { - get - { - return () => CodecStatus.Status.Audio.Microphones.Mute.BoolValue; - } - } - - protected Func StandbyStateFeedbackFunc - { - get - { - return () => CodecStatus.Status.Standby.State.BoolValue; - } - } - - /// - /// Gets the value of the currently shared source, or returns null - /// - protected override Func SharingSourceFeedbackFunc - { -#warning verify that source feedback to room works from codec - get - { - return () => PresentationSourceKey; - } - } - - protected override Func MuteFeedbackFunc - { - get - { - return () => CodecStatus.Status.Audio.VolumeMute.BoolValue; - } - } - - protected Func RoomIsOccupiedFeedbackFunc - { - get - { - return () => CodecStatus.Status.RoomAnalytics.PeoplePresence.BoolValue; - } - } - - protected Func PeopleCountFeedbackFunc - { - get - { - return () => CodecStatus.Status.RoomAnalytics.PeopleCount.Current.IntValue; - } - } - - protected Func SpeakerTrackIsOnFeedbackFunc - { - get - { - return () => CodecStatus.Status.Cameras.SpeakerTrack.Status.BoolValue; - } - } - - protected Func SelfViewIsOnFeedbackFunc - { - get - { - return () => CodecStatus.Status.Video.Selfview.Mode.BoolValue; - } - } - - protected Func SelfviewPipPositionFeedbackFunc - { - get - { - return () => CurrentSelfviewPipPosition.Label; - } - } - - protected Func LocalLayoutFeedbackFunc - { - get - { - return () => CurrentLocalLayout.Label; - } - } - - private string CliFeedbackRegistrationExpression; - - private CodecSyncState SyncState; - - private CodecPhonebookSyncState PhonebookSyncState; - - private StringBuilder JsonMessage; - - private bool JsonFeedbackMessageIsIncoming; - - public bool CommDebuggingIsOn; - - string Delimiter = "\r\n"; - - int PresentationSource; - - string PresentationSourceKey; - - string PhonebookMode = "Local"; // Default to Local - - int PhonebookResultsLimit = 255; // Could be set later by config. - - CTimer LoginMessageReceived; - - public RoutingInputPort CodecOsdIn { get; private set; } - public RoutingInputPort HdmiIn1 { get; private set; } - public RoutingInputPort HdmiIn2 { get; private set; } - public RoutingOutputPort HdmiOut { get; private set; } - - // Constructor for IBasicCommunication - public CiscoCodec(string key, string name, IBasicCommunication comm, CiscoCodecPropertiesConfig props ) - : base(key, name) - { - StandbyIsOnFeedback = new BoolFeedback(StandbyStateFeedbackFunc); - RoomIsOccupiedFeedback = new BoolFeedback(RoomIsOccupiedFeedbackFunc); - PeopleCountFeedback = new IntFeedback(PeopleCountFeedbackFunc); - SpeakerTrackIsOnFeedback = new BoolFeedback(SpeakerTrackIsOnFeedbackFunc); - SelfviewIsOnFeedback = new BoolFeedback(SelfViewIsOnFeedbackFunc); - SelfviewPipPositionFeedback = new StringFeedback(SelfviewPipPositionFeedbackFunc); - LocalLayoutFeedback = new StringFeedback(LocalLayoutFeedbackFunc); - - Communication = comm; - - LoginMessageReceived = new CTimer(DisconnectClientAndReconnect, 5000); - - if (props.CommunicationMonitorProperties != null) - { - CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, props.CommunicationMonitorProperties); - } - else - { - CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 30000, 120000, 300000, "xStatus SystemUnit Software Version\r"); - } - - DeviceManager.AddDevice(CommunicationMonitor); - - PhonebookMode = props.PhonebookMode; - - SyncState = new CodecSyncState(key + "--Sync"); - - PhonebookSyncState = new CodecPhonebookSyncState(key + "--PhonebookSync"); - - SyncState.InitialSyncCompleted += new EventHandler(SyncState_InitialSyncCompleted); - - PortGather = new CommunicationGather(Communication, Delimiter); - PortGather.IncludeDelimiter = true; - PortGather.LineReceived += this.Port_LineReceived; - - //CodecObtp = new CiscoOneButtonToPush(); - - //PhoneBook = new Corporate_Phone_Book(); - - CodecConfiguration = new CiscoCodecConfiguration.RootObject(); - CodecStatus = new CiscoCodecStatus.RootObject(); - - CodecInfo = new CiscoCodecInfo(CodecStatus, CodecConfiguration); - - CallHistory = new CodecCallHistory(); - - if (props.Favorites != null) - { - CallFavorites = new CodecCallFavorites(); - CallFavorites.Favorites = props.Favorites; - } - - DirectoryRoot = new CodecDirectory(); - - CodecSchedule = new CodecScheduleAwareness(); - - //Set Feedback Actions - CodecStatus.Status.Audio.Volume.ValueChangedAction = VolumeLevelFeedback.FireUpdate; - CodecStatus.Status.Audio.VolumeMute.ValueChangedAction = MuteFeedback.FireUpdate; - CodecStatus.Status.Audio.Microphones.Mute.ValueChangedAction = PrivacyModeIsOnFeedback.FireUpdate; - CodecStatus.Status.Standby.State.ValueChangedAction = StandbyIsOnFeedback.FireUpdate; - CodecStatus.Status.RoomAnalytics.PeoplePresence.ValueChangedAction = RoomIsOccupiedFeedback.FireUpdate; - CodecStatus.Status.RoomAnalytics.PeopleCount.Current.ValueChangedAction = PeopleCountFeedback.FireUpdate; - CodecStatus.Status.Cameras.SpeakerTrack.Status.ValueChangedAction = SpeakerTrackIsOnFeedback.FireUpdate; - CodecStatus.Status.Video.Selfview.Mode.ValueChangedAction = SelfviewIsOnFeedback.FireUpdate; - CodecStatus.Status.Video.Selfview.PIPPosition.ValueChangedAction = ComputeSelfviewPipStatus; - CodecStatus.Status.Video.Layout.LayoutFamily.Local.ValueChangedAction = ComputeLocalLayout; - } - - /// - /// Starts the HTTP feedback server and syncronizes state of codec - /// - /// - public override bool CustomActivate() - { - CrestronConsole.AddNewConsoleCommand(SendText, "send" + Key, "", ConsoleAccessLevelEnum.AccessOperator); - CrestronConsole.AddNewConsoleCommand(SetCommDebug, "SetCodecCommDebug", "0 for Off, 1 for on", ConsoleAccessLevelEnum.AccessOperator); - CrestronConsole.AddNewConsoleCommand(GetPhonebook, "GetCodecPhonebook", "Triggers a refresh of the codec phonebook", ConsoleAccessLevelEnum.AccessOperator); - CrestronConsole.AddNewConsoleCommand(GetBookings, "GetCodecBookings", "Triggers a refresh of the booking data for today", ConsoleAccessLevelEnum.AccessOperator); - - //CommDebuggingIsOn = true; - Communication.Connect(); - var socket = Communication as ISocketStatus; - if (socket != null) - { - socket.ConnectionChange += new EventHandler(socket_ConnectionChange); - } - - CommunicationMonitor.Start(); - - CodecOsdIn = new RoutingInputPort(RoutingPortNames.CodecOsd, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, new Action(StopSharing), this); - HdmiIn1 = new RoutingInputPort(RoutingPortNames.HdmiIn1, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSource1), this); - HdmiIn2 = new RoutingInputPort(RoutingPortNames.HdmiIn2, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSource2), this); - - HdmiOut = new RoutingOutputPort(RoutingPortNames.HdmiOut, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this); - - InputPorts.Add(CodecOsdIn); - InputPorts.Add(HdmiIn1); - InputPorts.Add(HdmiIn2); - OutputPorts.Add(HdmiOut); - - - string prefix = "xFeedback register "; - - CliFeedbackRegistrationExpression = - prefix + "/Configuration" + Delimiter + - prefix + "/Status/Audio" + Delimiter + - prefix + "/Status/Call" + Delimiter + - prefix + "/Status/Conference/Presentation" + Delimiter + - prefix + "/Status/Cameras/SpeakerTrack" + Delimiter + - prefix + "/Status/RoomAnalytics" + Delimiter + - prefix + "/Status/Standby" + Delimiter + - prefix + "/Status/Video/Selfview" + Delimiter + - prefix + "/Bookings" + Delimiter + - prefix + "/Event/CallDisconnect" + Delimiter; - - return base.CustomActivate(); - } - - /// - /// Fires when initial codec sync is completed. Used to then send commands to get call history, phonebook, bookings, etc. - /// - /// - /// - void SyncState_InitialSyncCompleted(object sender, EventArgs e) - { - // Fire the ready event - SetIsReady(); - //CommDebuggingIsOn = false; - - GetCallHistory(); - - GetPhonebook(null); - - GetBookings(null); - } - - public void SetCommDebug(string s) - { - if (s == "1") - { - CommDebuggingIsOn = true; - Debug.Console(0, this, "Comm Debug Enabled."); - } - else - { - CommDebuggingIsOn = false; - Debug.Console(0, this, "Comm Debug Disabled."); - } - } - - void socket_ConnectionChange(object sender, GenericSocketStatusChageEventArgs e) - { - if (e.Client.IsConnected) - { - //LoginMessageReceived.Reset(); - } - else - { - SyncState.CodecDisconnected(); - PhonebookSyncState.CodecDisconnected(); - } - } - - void DisconnectClientAndReconnect(object o) - { - Debug.Console(0, this, "Disconnecting and Reconnecting to codec."); - - Communication.Disconnect(); - - CrestronEnvironment.Sleep(2000); - - Communication.Connect(); - } - - /// - /// Gathers responses from the codec (including the delimiter. Responses are checked to see if they contain JSON data and if so, the data is collected until a complete JSON - /// message is received before forwarding the message to be deserialized. - /// - /// - /// - void Port_LineReceived(object dev, GenericCommMethodReceiveTextArgs args) - { - if (CommDebuggingIsOn) - { - if(!JsonFeedbackMessageIsIncoming) - Debug.Console(1, this, "RX: '{0}'", args.Text); - } - - if (args.Text == "{" + Delimiter) // Check for the beginning of a new JSON message - { - JsonFeedbackMessageIsIncoming = true; - - if (CommDebuggingIsOn) - Debug.Console(1, this, "Incoming JSON message..."); - - JsonMessage = new StringBuilder(); - } - else if (args.Text == "}" + Delimiter) // Check for the end of a JSON message - { - JsonFeedbackMessageIsIncoming = false; - - JsonMessage.Append(args.Text); - - if (CommDebuggingIsOn) - Debug.Console(1, this, "Complete JSON Received:\n{0}", JsonMessage.ToString()); - - // Forward the complete message to be deserialized - DeserializeResponse(JsonMessage.ToString()); - return; - } - - if(JsonFeedbackMessageIsIncoming) - { - JsonMessage.Append(args.Text); - - //Debug.Console(1, this, "Building JSON:\n{0}", JsonMessage.ToString()); - return; - } - - if (!SyncState.InitialSyncComplete) - { - switch (args.Text.Trim().ToLower()) // remove the whitespace - { - case "*r login successful": - { - LoginMessageReceived.Stop(); - SendText("xPreferences outputmode json"); - break; - } - case "xpreferences outputmode json": - { - if (!SyncState.InitialStatusMessageWasReceived) - SendText("xStatus"); - break; - } - case "xfeedback register /event/calldisconnect": - { - SyncState.FeedbackRegistered(); - break; - } - } - } - - } - - public void SendText(string command) - { - if (CommDebuggingIsOn) - Debug.Console(1, this, "Sending: '{0}'", command); - - Communication.SendText(command + Delimiter); - } - - void DeserializeResponse(string response) - { - try - { - // Serializer settings. We want to ignore null values and mising members - JsonSerializerSettings settings = new JsonSerializerSettings(); - settings.NullValueHandling = NullValueHandling.Ignore; - settings.MissingMemberHandling = MissingMemberHandling.Ignore; - settings.ObjectCreationHandling = ObjectCreationHandling.Auto; - - if (response.IndexOf("\"Status\":{") > -1) - { - // Status Message - - // Temp object so we can inpsect for call data before simply deserializing - CiscoCodecStatus.RootObject tempCodecStatus = new CiscoCodecStatus.RootObject(); - - JsonConvert.PopulateObject(response, tempCodecStatus); - - // Check to see if this is a call status message received after the initial status message - if (tempCodecStatus.Status.Call.Count > 0) - { - // Iterate through the call objects in the response - foreach (CiscoCodecStatus.Call call in tempCodecStatus.Status.Call) - { - var tempActiveCall = ActiveCalls.FirstOrDefault(c => c.Id.Equals(call.id)); - - if (tempActiveCall != null) - { - bool changeDetected = false; - - // Update properties of ActiveCallItem - if(call.Status != null) - if (!string.IsNullOrEmpty(call.Status.Value)) - { - eCodecCallStatus newStatus = eCodecCallStatus.Unknown; - - newStatus = CodecCallStatus.ConvertToStatusEnum(call.Status.Value); - - if (newStatus != eCodecCallStatus.Unknown) - { - changeDetected = true; - SetNewCallStatusAndFireCallStatusChange(newStatus, tempActiveCall); - } - - if (newStatus == eCodecCallStatus.Connected) - GetCallHistory(); - } - if (call.CallType != null) - if (!string.IsNullOrEmpty(call.CallType.Value)) - { - tempActiveCall.Type = CodecCallType.ConvertToTypeEnum(call.CallType.Value); - changeDetected = true; - } - if (call.DisplayName != null) - if (!string.IsNullOrEmpty(call.DisplayName.Value)) - { - tempActiveCall.Name = call.DisplayName.Value; - changeDetected = true; - } - if (call.Direction != null) - { - if (!string.IsNullOrEmpty(call.Direction.Value)) - { - tempActiveCall.Direction = CodecCallDirection.ConvertToDirectionEnum(call.Direction.Value); - changeDetected = true; - } - } - - if (changeDetected) - { - ListCalls(); - } - } - else if( call.ghost == null ) // if the ghost value is present the call has ended already - { - // Create a new call item - var newCallItem = new CodecActiveCallItem() - { - Id = call.id, - Status = CodecCallStatus.ConvertToStatusEnum(call.Status.Value), - Name = call.DisplayName.Value, - Number = call.RemoteNumber.Value, - Type = CodecCallType.ConvertToTypeEnum(call.CallType.Value), - Direction = CodecCallDirection.ConvertToDirectionEnum(call.Direction.Value) - }; - - // Add it to the ActiveCalls List - ActiveCalls.Add(newCallItem); - - ListCalls(); - - SetNewCallStatusAndFireCallStatusChange(newCallItem.Status, newCallItem); - } - - } - - } - - JsonConvert.PopulateObject(response, CodecStatus); - - if (!SyncState.InitialStatusMessageWasReceived) - { - SyncState.InitialStatusMessageReceived(); - - if (!SyncState.InitialConfigurationMessageWasReceived) - SendText("xConfiguration"); - } - } - else if (response.IndexOf("\"Configuration\":{") > -1) - { - // Configuration Message - - JsonConvert.PopulateObject(response, CodecConfiguration); - - if (!SyncState.InitialConfigurationMessageWasReceived) - { - SyncState.InitialConfigurationMessageReceived(); - if (!SyncState.FeedbackWasRegistered) - { - SendText(CliFeedbackRegistrationExpression); - } - } - - } - else if (response.IndexOf("\"Event\":{") > -1) - { - // Event Message - - CiscoCodecEvents.RootObject eventReceived = new CiscoCodecEvents.RootObject(); - - JsonConvert.PopulateObject(response, eventReceived); - - EvalutateEvent(eventReceived); - } - else if (response.IndexOf("\"CommandResponse\":{") > -1) - { - // CommandResponse Message - - if (response.IndexOf("\"CallHistoryRecentsResult\":{") > -1) - { - var codecCallHistory = new CiscoCallHistory.RootObject(); - - JsonConvert.PopulateObject(response, codecCallHistory); - - CallHistory.ConvertCiscoCallHistoryToGeneric(codecCallHistory.CommandResponse.CallHistoryRecentsResult.Entry); - } - else if (response.IndexOf("\"CallHistoryDeleteEntryResult\":{") > -1) - { - GetCallHistory(); - } - else if (response.IndexOf("\"PhonebookSearchResult\":{") > -1) - { - var codecPhonebookResponse = new CiscoCodecPhonebook.RootObject(); - - JsonConvert.PopulateObject(response, codecPhonebookResponse); - - if (!PhonebookSyncState.InitialPhonebookFoldersWasReceived) - { - // Check if the phonebook has any folders - PhonebookSyncState.InitialPhonebookFoldersReceived(); - - PhonebookSyncState.SetPhonebookHasFolders(codecPhonebookResponse.CommandResponse.PhonebookSearchResult.Folder.Count > 0); - - if (PhonebookSyncState.PhonebookHasFolders) - { - DirectoryRoot.AddFoldersToDirectory(CiscoCodecPhonebook.GetRootFoldersFromSearchResult(codecPhonebookResponse.CommandResponse.PhonebookSearchResult)); - } - - // Get the number of contacts in the phonebook - GetPhonebookContacts(); - } - else if (!PhonebookSyncState.NumberOfContactsWasReceived) - { - // Store the total number of contacts in the phonebook - PhonebookSyncState.SetNumberOfContacts(Int32.Parse(codecPhonebookResponse.CommandResponse.PhonebookSearchResult.ResultInfo.TotalRows.Value)); - - DirectoryRoot.AddContactsToDirectory(CiscoCodecPhonebook.GetRootContactsFromSearchResult(codecPhonebookResponse.CommandResponse.PhonebookSearchResult)); - - PhonebookSyncState.PhonebookRootEntriesReceived(); - - PrintPhonebook(DirectoryRoot); - } - else if (PhonebookSyncState.InitialSyncComplete) - { - var directoryResults = new CodecDirectory(); - - directoryResults = CiscoCodecPhonebook.ConvertCiscoPhonebookToGeneric(codecPhonebookResponse.CommandResponse.PhonebookSearchResult); - - PrintPhonebook(directoryResults); - - // This will return the latest results to all UIs. Multiple indendent UI Directory browsing will require a different methodology - var handler = DirectoryResultReturned; - if (handler != null) - handler(this, new DirectoryEventArgs() { Directory = directoryResults }); - - // Fire some sort of callback delegate to the UI that requested the directory search results - } - } - else if (response.IndexOf("\"BookingsListResult\":{") > -1) - { - var codecBookings = new CiscoCodecBookings.RootObject(); - - JsonConvert.PopulateObject(response, codecBookings); - - CodecSchedule.Meetings = CiscoCodecBookings.GetGenericMeetingsFromBookingResult(codecBookings.CommandResponse.BookingsListResult.Booking); - - - } - - } - - } - catch (Exception ex) - { - Debug.Console(1, this, "Error Deserializing feedback from codec: {0}", ex); - } - } - - /// - /// Evaluates an event received from the codec - /// - /// - void EvalutateEvent(CiscoCodecEvents.RootObject eventReceived) - { - if (eventReceived.Event.CallDisconnect != null) - { - var tempActiveCall = ActiveCalls.FirstOrDefault(c => c.Id.Equals(eventReceived.Event.CallDisconnect.CallId.Value)); - - // Remove the call from the Active calls list - if (tempActiveCall != null) - { - ActiveCalls.Remove(tempActiveCall); - - ListCalls(); - - // Notify of the call disconnection - SetNewCallStatusAndFireCallStatusChange(eCodecCallStatus.Disconnected, tempActiveCall); - - GetCallHistory(); - } - } - } - - public override void ExecuteSwitch(object selector) - { - (selector as Action)(); - PresentationSourceKey = selector.ToString(); - } - - protected override Func IncomingCallFeedbackFunc { get { return () => false; } } - - /// - /// Gets the first CallId or returns null - /// - /// - private string GetCallId() - { - string callId = null; - - if (ActiveCalls.Count > 1) - { - foreach (CodecActiveCallItem call in ActiveCalls) ; - } - else if (ActiveCalls.Count == 1) - callId = ActiveCalls[0].Id; - - return callId; - - } - - private void GetCallHistory() - { - SendText("xCommand CallHistory Recents Limit: 20 Order: OccurrenceTime"); - } - - /// - /// Gets the bookings for today - /// - /// - public void GetBookings(string command) - { - SendText("xCommand Bookings List Days: 1 DayOffset: 0"); - } - - /// - /// Triggers a refresh of the codec phonebook - /// - /// Just to allow this method to be called from a console command - public void GetPhonebook(string command) - { - PhonebookSyncState.CodecDisconnected(); - - DirectoryRoot = new CodecDirectory(); - - GetPhonebookFolders(); - } - - private void GetPhonebookFolders() - { - // Get Phonebook Folders (determine local/corporate from config, and set results limit) - SendText(string.Format("xCommand Phonebook Search PhonebookType: {0} ContactType: Folder", PhonebookMode)); - } - - private void GetPhonebookContacts() - { - // Get Phonebook Folders (determine local/corporate from config, and set results limit) - SendText(string.Format("xCommand Phonebook Search PhonebookType: {0} ContactType: Contact", PhonebookMode)); - } - - /// - /// Searches the codec phonebook for all contacts matching the search string - /// - /// - public void SearchDirectory(string searchString) - { - SendText(string.Format("xCommand Phonebook Search SearchString: \"{0}\" PhonebookType: {1} ContactType: Contact Limit: {2}", searchString, PhonebookMode, PhonebookResultsLimit)); - } - - /// - /// // Get contents of a specific folder in the phonebook - /// - /// - public void GetDirectoryFolderContents(string folderId) - { - SendText(string.Format("xCommand Phonebook Search FolderId: {0} PhonebookType: {1} ContactType: Contact Limit: {2}", folderId, PhonebookMode, PhonebookResultsLimit)); - } - - void PrintPhonebook(CodecDirectory directory) - { - if (Debug.Level > 0) - { - Debug.Console(1, this, "Directory Results:\n"); - - foreach (DirectoryItem item in directory.DirectoryResults) - { - if (item is DirectoryFolder) - { - Debug.Console(1, this, "+ {0}", item.Name); - } - else if (item is DirectoryContact) - { - Debug.Console(1, this, "{0}", item.Name); - } - } - } - } - - public override void Dial(string s) - { - SendText(string.Format("xCommand Dial Number: \"{0}\"", s)); - } - - public void DialBookingId(string s) - { - SendText(string.Format("xCommand Dial BookingId: {0}", s)); - } - - public override void EndCall(CodecActiveCallItem activeCall) - { - SendText(string.Format("xCommand Call Disconnect CallId: {0}", activeCall.Id)); - } - - public override void EndAllCalls() - { - foreach (CodecActiveCallItem activeCall in ActiveCalls) - { - SendText(string.Format("xCommand Call Disconnect CallId: {0}", activeCall.Id)); - } - } - - public override void AcceptCall(CodecActiveCallItem item) - { - SendText("xCommand Call Accept"); - } - - public override void RejectCall(CodecActiveCallItem item) - { - SendText("xCommand Call Reject"); - } - - public override void SendDtmf(string s) - { - if (CallFavorites != null) - { - SendText(string.Format("xCommand Call DTMFSend CallId: {0} DTMFString: \"{1}\"", GetCallId(), s)); - } - } - - public void SelectPresentationSource(int source) - { - PresentationSource = source; - - StartSharing(); - } - - /// - /// Select source 1 as the presetnation source - /// - public void SelectPresentationSource1() - { - SelectPresentationSource(1); - } - - /// - /// Select source 2 as the presetnation source - /// - public void SelectPresentationSource2() - { - SelectPresentationSource(2); - } - - public override void StartSharing() - { - string sendingMode = string.Empty; - - if (IsInCall) - sendingMode = "LocalRemote"; - else - sendingMode = "LocalOnly"; - - SendText(string.Format("xCommand Presentation Start PresentationSource: {0}", PresentationSource)); - } - - public override void StopSharing() - { - SendText(string.Format("xCommand Presentation Stop PresentationSource: {0}", PresentationSource)); - } - - public override void PrivacyModeOn() - { - SendText("xCommand Audio Microphones Mute"); - } - - public override void PrivacyModeOff() - { - SendText("xCommand Audio Microphones Unmute"); - } - - public override void PrivacyModeToggle() - { - SendText("xCommand Audio Microphones ToggleMute"); - } - - public override void MuteOff() - { - SendText("xCommand Audio Volume Unmute"); - } - - public override void MuteOn() - { - SendText("xCommand Audio Volume Mute"); - } - - public override void MuteToggle() - { - SendText("xCommand Audio Volume ToggleMute"); - } - - /// - /// Increments the voluem - /// - /// - public override void VolumeUp(bool pressRelease) - { - SendText("xCommand Audio Volume Increase"); - } - - /// - /// Decrements the volume - /// - /// - public override void VolumeDown(bool pressRelease) - { - SendText("xCommand Audio Volume Decrease"); - } - - /// - /// Scales the level and sets the codec to the specified level within its range - /// - /// level from slider (0-65535 range) - public override void SetVolume(ushort level) - { - var scaledLevel = CrestronEnvironment.ScaleWithLimits(level, 65535, 0, 100, 0); - SendText(string.Format("xCommand Audio Volume Set Level: {0}", scaledLevel)); - } - - /// - /// Recalls the default volume on the codec - /// - public void VolumeSetToDefault() - { - SendText("xCommand Audio Volume SetToDefault"); - } - - /// - /// Puts the codec in standby mode - /// - public void StandbyActivate() - { - SendText("xCommand Standby Activate"); - } - - /// - /// Wakes the codec from standby - /// - public void StandbyDeactivate() - { - SendText("xCommand Standby Deactivate"); - } - - /// - /// Reboots the codec - /// - public void Reboot() - { - SendText("xCommand SystemUnit Boot Action: Restart"); - } - - /// - /// Turns on Selfview Mode - /// - public void SelfviewModeOn() - { - SendText("xCommand Video Selfview Set Mode: On"); - } - - /// - /// Turns off Selfview Mode - /// - public void SelfviewModeOff() - { - SendText("xCommand Video Selfview Set Mode: Off"); - } - - /// - /// Toggles Selfview mode on/off - /// - public void SelfviewModeToggle() - { - string mode = string.Empty; - - if (CodecStatus.Status.Video.Selfview.Mode.BoolValue) - mode = "Off"; - else - mode = "On"; - - SendText(string.Format("xCommand Video Selfview Set Mode: {0}", mode)); - } - - /// - /// Sets a specified position for the selfview PIP window - /// - /// - public void SelfviewPipPositionSet(CodecCommandWithLabel position) - { - SendText(string.Format("xCommand Video Selfview Set Mode: On PIPPosition: {0}", position.Command)); - } - - /// - /// Toggles to the next selfview PIP position - /// - public void SelfviewPipPositionToggle() - { - if (CurrentSelfviewPipPosition != null) - { - var nextPipPositionIndex = SelfviewPipPositions.IndexOf(CurrentSelfviewPipPosition) + 1; - - if (nextPipPositionIndex >= SelfviewPipPositions.Count) // Check if we need to loop back to the first item in the list - nextPipPositionIndex = 0; - - SelfviewPipPositionSet(SelfviewPipPositions[nextPipPositionIndex]); - } - } - - /// - /// Sets a specific local layout - /// - /// - public void LocalLayoutSet(CodecCommandWithLabel layout) - { - SendText(string.Format("xCommand Video Layout LayoutFamily Set Target: local LayoutFamily: {0}", layout.Command)); - } - - /// - /// Toggles to the next local layout - /// - public void LocalLayoutToggle() - { - if(CurrentLocalLayout != null) - { - var nextLocalLayoutIndex = LocalLayouts.IndexOf(CurrentLocalLayout) + 1; - - if (nextLocalLayoutIndex >= LocalLayouts.Count) // Check if we need to loop back to the first item in the list - nextLocalLayoutIndex = 0; - - LocalLayoutSet(LocalLayouts[nextLocalLayoutIndex]); - } - } - - /// - /// Calculates the current selfview PIP position - /// - void ComputeSelfviewPipStatus() - { - CurrentSelfviewPipPosition = SelfviewPipPositions.FirstOrDefault(p => p.Command.ToLower().Equals(CodecStatus.Status.Video.Selfview.PIPPosition.Value.ToLower())); - - if(CurrentSelfviewPipPosition != null) - SelfviewIsOnFeedback.FireUpdate(); - } - - /// - /// Calculates the current local Layout - /// - void ComputeLocalLayout() - { - CurrentLocalLayout = LocalLayouts.FirstOrDefault(l => l.Command.ToLower().Equals(CodecStatus.Status.Video.Layout.LayoutFamily.Local.Value.ToLower())); - - if (CurrentLocalLayout != null) - LocalLayoutFeedback.FireUpdate(); - } - - public void RemoveCallHistoryEntry(CodecCallHistory.CallHistoryEntry entry) - { - SendText(string.Format("xCommand CallHistory DeleteEntry CallHistoryId: {0} AcknowledgeConsecutiveDuplicates: True", entry.OccurrenceHistoryId)); - } - - public class CiscoCodecInfo : VideoCodecInfo - { - public CiscoCodecStatus.RootObject CodecStatus { get; private set; } - - public CiscoCodecConfiguration.RootObject CodecConfiguration { get; private set; } - - public override bool MultiSiteOptionIsEnabled - { - get - { - if (CodecStatus.Status.SystemUnit.Software.OptionKeys.MultiSite.Value.ToLower() == "true") - return true; - else - return false; - } - - } - public override string IpAddress - { - get - { - if (CodecConfiguration.Configuration.Network != null) - { - if (CodecConfiguration.Configuration.Network.Count > 0) - return CodecConfiguration.Configuration.Network[0].IPv4.Address.Value; - } - return string.Empty; - } - } - public override string PhoneNumber - { - get - { - if (CodecConfiguration.Configuration.H323.H323Alias.E164 != null) - return CodecConfiguration.Configuration.H323.H323Alias.E164.Value; - else - return string.Empty; - } - } - public override string SipUri - { - get - { - if (CodecConfiguration.Configuration.H323.H323Alias.ID != null) - return CodecConfiguration.Configuration.H323.H323Alias.ID.Value; - else - return string.Empty; - } - } - public override bool AutoAnswerEnabled - { - get - { - if (CodecConfiguration.Configuration.Conference.AutoAnswer.Mode.Value.ToLower() == "on") - return true; - else - return false; - } - } - - public CiscoCodecInfo(CiscoCodecStatus.RootObject status, CiscoCodecConfiguration.RootObject configuration) - { - CodecStatus = status; - CodecConfiguration = configuration; - } - } - } - - /// - /// Represents a codec command that might need to have a friendly label applied for UI feedback purposes - /// - public class CodecCommandWithLabel - { - public string Command { get; set; } - public string Label { get; set; } - - public CodecCommandWithLabel(string command, string label) - { - Command = command; - Label = label; - } - } - - /// - /// Tracks the initial sycnronization state of the codec when making a connection - /// - public class CodecSyncState : IKeyed - { - bool _InitialSyncComplete; - - public event EventHandler InitialSyncCompleted; - - public string Key { get; private set; } - - public bool InitialSyncComplete - { - get { return _InitialSyncComplete; } - private set - { - if (value == true) - { - var handler = InitialSyncCompleted; - if (handler != null) - handler(this, new EventArgs()); - } - _InitialSyncComplete = value; - } - } - - public bool InitialStatusMessageWasReceived { get; private set; } - - public bool InitialConfigurationMessageWasReceived { get; private set; } - - public bool FeedbackWasRegistered { get; private set; } - - public CodecSyncState(string key) - { - Key = key; - CodecDisconnected(); - } - - public void InitialStatusMessageReceived() - { - InitialStatusMessageWasReceived = true; - Debug.Console(1, this, "Initial Codec Status Message Received."); - CheckSyncStatus(); - } - - public void InitialConfigurationMessageReceived() - { - InitialConfigurationMessageWasReceived = true; - Debug.Console(1, this, "Initial Codec Configuration Message Received."); - CheckSyncStatus(); - } - - public void FeedbackRegistered() - { - FeedbackWasRegistered = true; - Debug.Console(1, this, "Initial Codec Feedback Registration Successful."); - CheckSyncStatus(); - } - - public void CodecDisconnected() - { - InitialConfigurationMessageWasReceived = false; - InitialStatusMessageWasReceived = false; - FeedbackWasRegistered = false; - InitialSyncComplete = false; - } - - void CheckSyncStatus() - { - if (InitialConfigurationMessageWasReceived && InitialStatusMessageWasReceived && FeedbackWasRegistered) - { - InitialSyncComplete = true; - Debug.Console(1, this, "Initial Codec Sync Complete!"); - } - else - InitialSyncComplete = false; - } - } - - /// - /// Used to track the status of syncronizing the phonebook values when connecting to a codec or refreshing the phonebook info - /// - public class CodecPhonebookSyncState : IKeyed - { - bool _InitialSyncComplete; - - public event EventHandler InitialSyncCompleted; - - public string Key { get; private set; } - - public bool InitialSyncComplete - { - get { return _InitialSyncComplete; } - private set - { - if (value == true) - { - var handler = InitialSyncCompleted; - if (handler != null) - handler(this, new EventArgs()); - } - _InitialSyncComplete = value; - } - } - - public bool InitialPhonebookFoldersWasReceived { get; private set; } - - public bool NumberOfContactsWasReceived { get; private set; } - - public bool PhonebookRootEntriesWasRecieved { get; private set; } - - public bool PhonebookHasFolders { get; private set; } - - public int NumberOfContacts { get; private set; } - - public CodecPhonebookSyncState(string key) - { - Key = key; - - CodecDisconnected(); - } - - public void InitialPhonebookFoldersReceived() - { - InitialPhonebookFoldersWasReceived = true; - - CheckSyncStatus(); - } - - public void PhonebookRootEntriesReceived() - { - PhonebookRootEntriesWasRecieved = true; - - CheckSyncStatus(); - } - - public void SetPhonebookHasFolders(bool value) - { - PhonebookHasFolders = value; - - Debug.Console(1, this, "Phonebook has folders: {0}", PhonebookHasFolders); - } - - public void SetNumberOfContacts(int contacts) - { - NumberOfContacts = contacts; - NumberOfContactsWasReceived = true; - - Debug.Console(1, this, "Phonebook contains {0} contacts.", NumberOfContacts); - - CheckSyncStatus(); - } - - public void CodecDisconnected() - { - InitialPhonebookFoldersWasReceived = false; - PhonebookHasFolders = false; - NumberOfContacts = 0; - NumberOfContactsWasReceived = false; - } - - void CheckSyncStatus() - { - if (InitialPhonebookFoldersWasReceived && NumberOfContactsWasReceived && PhonebookRootEntriesWasRecieved) - { - InitialSyncComplete = true; - Debug.Console(1, this, "Initial Phonebook Sync Complete!"); - } - else - InitialSyncComplete = false; - } - } - -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs deleted file mode 100644 index 4c2d55f8..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs +++ /dev/null @@ -1,1515 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using Crestron.SimplSharp; -using Crestron.SimplSharp.Net.Https; -using Crestron.SimplSharp.CrestronXml; -using Crestron.SimplSharp.CrestronXml.Serialization; -using Newtonsoft.Json; -//using Cisco_One_Button_To_Push; -//using Cisco_SX80_Corporate_Phone_Book; - -using PepperDash.Core; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.Routing; -using PepperDash.Essentials.Devices.Common.Codec; -using PepperDash.Essentials.Devices.Common.Occupancy; -using PepperDash.Essentials.Devices.Common.VideoCodec; - -namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco -{ - enum eCommandType { SessionStart, SessionEnd, Command, GetStatus, GetConfiguration }; - - public class CiscoSparkCodec : VideoCodecBase, IHasCallHistory, IHasCallFavorites, IHasDirectory, - IHasScheduleAwareness, IOccupancyStatusProvider, IHasCodecLayouts, IHasCodecSelfview, - ICommunicationMonitor, IRouting - { - public event EventHandler DirectoryResultReturned; - - public CommunicationGather PortGather { get; private set; } - public CommunicationGather JsonGather { get; private set; } - - public StatusMonitorBase CommunicationMonitor { get; private set; } - - public BoolFeedback PresentationViewMaximizedFeedback { get; private set; } - - string CurrentPresentationView; - - public BoolFeedback RoomIsOccupiedFeedback { get; private set; } - - public IntFeedback PeopleCountFeedback { get; private set; } - - public BoolFeedback SpeakerTrackIsOnFeedback { get; private set; } - - public BoolFeedback SelfviewIsOnFeedback { get; private set; } - - public StringFeedback SelfviewPipPositionFeedback { get; private set; } - - public StringFeedback LocalLayoutFeedback { get; private set; } - - public BoolFeedback LocalLayoutIsProminentFeedback { get; private set; } - - public BoolFeedback FarEndIsSharingContentFeedback { get; private set; } - - private CodecCommandWithLabel CurrentSelfviewPipPosition; - - private CodecCommandWithLabel CurrentLocalLayout; - - /// - /// List the available positions for the selfview PIP window - /// - public List SelfviewPipPositions = new List() - { - new CodecCommandWithLabel("CenterLeft", "Center Left"), - new CodecCommandWithLabel("CenterRight", "Center Right"), - new CodecCommandWithLabel("LowerLeft", "Lower Left"), - new CodecCommandWithLabel("LowerRight", "Lower Right"), - new CodecCommandWithLabel("UpperCenter", "Upper Center"), - new CodecCommandWithLabel("UpperLeft", "Upper Left"), - new CodecCommandWithLabel("UpperRight", "Upper Right"), - }; - - /// - /// Lists the available options for local layout - /// - public List LocalLayouts = new List() - { - //new CodecCommandWithLabel("auto", "Auto"), - //new CiscoCodecLocalLayout("custom", "Custom"), // Left out for now - new CodecCommandWithLabel("equal","Equal"), - new CodecCommandWithLabel("overlay","Overlay"), - new CodecCommandWithLabel("prominent","Prominent"), - new CodecCommandWithLabel("single","Single") - }; - - private CiscoCodecConfiguration.RootObject CodecConfiguration = new CiscoCodecConfiguration.RootObject(); - - private CiscoCodecStatus.RootObject CodecStatus = new CiscoCodecStatus.RootObject(); - - public CodecCallHistory CallHistory { get; private set; } - - public CodecCallFavorites CallFavorites { get; private set; } - - public CodecDirectory DirectoryRoot { get; private set; } - - public CodecScheduleAwareness CodecSchedule { get; private set; } - - /// - /// Gets and returns the scaled volume of the codec - /// - protected override Func VolumeLevelFeedbackFunc - { - get - { - return () => CrestronEnvironment.ScaleWithLimits(CodecStatus.Status.Audio.Volume.IntValue, 100, 0, 65535, 0); - } - } - - protected override Func PrivacyModeIsOnFeedbackFunc - { - get - { - return () => CodecStatus.Status.Audio.Microphones.Mute.BoolValue; - } - } - - protected override Func StandbyIsOnFeedbackFunc - { - get - { - return () => CodecStatus.Status.Standby.State.BoolValue; - } - } - - /// - /// Gets the value of the currently shared source, or returns null - /// - protected override Func SharingSourceFeedbackFunc - { - get - { - return () => PresentationSourceKey; - } - } - - protected override Func SharingContentIsOnFeedbackFunc - { - get - { - return () => CodecStatus.Status.Conference.Presentation.Mode.BoolValue; - } - } - - protected Func FarEndIsSharingContentFeedbackFunc - { - get - { - return () => CodecStatus.Status.Conference.Presentation.Mode.Value == "Receiving"; - } - } - - protected override Func MuteFeedbackFunc - { - get - { - return () => CodecStatus.Status.Audio.VolumeMute.BoolValue; - } - } - - protected Func RoomIsOccupiedFeedbackFunc - { - get - { - return () => CodecStatus.Status.RoomAnalytics.PeoplePresence.BoolValue; - } - } - - protected Func PeopleCountFeedbackFunc - { - get - { - return () => CodecStatus.Status.RoomAnalytics.PeopleCount.Current.IntValue; - } - } - - protected Func SpeakerTrackIsOnFeedbackFunc - { - get - { - return () => CodecStatus.Status.Cameras.SpeakerTrack.Status.BoolValue; - } - } - - protected Func SelfViewIsOnFeedbackFunc - { - get - { - return () => CodecStatus.Status.Video.Selfview.Mode.BoolValue; - } - } - - protected Func SelfviewPipPositionFeedbackFunc - { - get - { - return () => CurrentSelfviewPipPosition.Label; - } - } - - protected Func LocalLayoutFeedbackFunc - { - get - { - return () => CurrentLocalLayout.Label; - } - } - - protected Func LocalLayoutIsProminentFeedbackFunc - { - get - { - return () => CurrentLocalLayout.Label == "Prominent"; - } - } - - - private string CliFeedbackRegistrationExpression; - - private CodecSyncState SyncState; - - public CodecPhonebookSyncState PhonebookSyncState { get; private set; } - - private StringBuilder JsonMessage; - - private bool JsonFeedbackMessageIsIncoming; - - public bool CommDebuggingIsOn; - - string Delimiter = "\r\n"; - - /// - /// Used to track the current connector used for the presentation source - /// - int PresentationSource; - - string PresentationSourceKey; - - string PhonebookMode = "Local"; // Default to Local - - int PhonebookResultsLimit = 255; // Could be set later by config. - - CTimer LoginMessageReceived; - - // **___________________________________________________________________** - // Timers to be moved to the global system timer at a later point.... - CTimer BookingsRefreshTimer; - CTimer PhonebookRefreshTimer; - // **___________________________________________________________________** - - public RoutingInputPort CodecOsdIn { get; private set; } - public RoutingInputPort HdmiIn2 { get; private set; } - public RoutingInputPort HdmiIn3 { get; private set; } - public RoutingOutputPort HdmiOut1 { get; private set; } - public RoutingOutputPort HdmiOut2 { get; private set; } - - - // Constructor for IBasicCommunication - public CiscoSparkCodec(string key, string name, IBasicCommunication comm, CiscoSparkCodecPropertiesConfig props ) - : base(key, name) - { - RoomIsOccupiedFeedback = new BoolFeedback(RoomIsOccupiedFeedbackFunc); - PeopleCountFeedback = new IntFeedback(PeopleCountFeedbackFunc); - SpeakerTrackIsOnFeedback = new BoolFeedback(SpeakerTrackIsOnFeedbackFunc); - SelfviewIsOnFeedback = new BoolFeedback(SelfViewIsOnFeedbackFunc); - SelfviewPipPositionFeedback = new StringFeedback(SelfviewPipPositionFeedbackFunc); - LocalLayoutFeedback = new StringFeedback(LocalLayoutFeedbackFunc); - LocalLayoutIsProminentFeedback = new BoolFeedback(LocalLayoutIsProminentFeedbackFunc); - FarEndIsSharingContentFeedback = new BoolFeedback(FarEndIsSharingContentFeedbackFunc); - - PresentationViewMaximizedFeedback = new BoolFeedback(() => CurrentPresentationView == "Maximized"); - - Communication = comm; - - if (props.CommunicationMonitorProperties != null) - { - CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, props.CommunicationMonitorProperties); - } - else - { - CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 30000, 120000, 300000, "xStatus SystemUnit Software Version\r"); - } - - if (props.Sharing != null) - AutoShareContentWhileInCall = props.Sharing.AutoShareContentWhileInCall; - - ShowSelfViewByDefault = props.ShowSelfViewByDefault; - - DeviceManager.AddDevice(CommunicationMonitor); - - PhonebookMode = props.PhonebookMode; - - SyncState = new CodecSyncState(key + "--Sync"); - - PhonebookSyncState = new CodecPhonebookSyncState(key + "--PhonebookSync"); - - SyncState.InitialSyncCompleted += new EventHandler(SyncState_InitialSyncCompleted); - - PortGather = new CommunicationGather(Communication, Delimiter); - PortGather.IncludeDelimiter = true; - PortGather.LineReceived += this.Port_LineReceived; - - CodecInfo = new CiscoCodecInfo(CodecStatus, CodecConfiguration); - - CallHistory = new CodecCallHistory(); - - if (props.Favorites != null) - { - CallFavorites = new CodecCallFavorites(); - CallFavorites.Favorites = props.Favorites; - } - - DirectoryRoot = new CodecDirectory(); - - CodecSchedule = new CodecScheduleAwareness(); - - //Set Feedback Actions - CodecStatus.Status.Audio.Volume.ValueChangedAction = VolumeLevelFeedback.FireUpdate; - CodecStatus.Status.Audio.VolumeMute.ValueChangedAction = MuteFeedback.FireUpdate; - CodecStatus.Status.Audio.Microphones.Mute.ValueChangedAction = PrivacyModeIsOnFeedback.FireUpdate; - CodecStatus.Status.Standby.State.ValueChangedAction = StandbyIsOnFeedback.FireUpdate; - CodecStatus.Status.RoomAnalytics.PeoplePresence.ValueChangedAction = RoomIsOccupiedFeedback.FireUpdate; - CodecStatus.Status.RoomAnalytics.PeopleCount.Current.ValueChangedAction = PeopleCountFeedback.FireUpdate; - CodecStatus.Status.Cameras.SpeakerTrack.Status.ValueChangedAction = SpeakerTrackIsOnFeedback.FireUpdate; - CodecStatus.Status.Video.Selfview.Mode.ValueChangedAction = SelfviewIsOnFeedback.FireUpdate; - CodecStatus.Status.Video.Selfview.PIPPosition.ValueChangedAction = ComputeSelfviewPipStatus; - CodecStatus.Status.Video.Layout.LayoutFamily.Local.ValueChangedAction = ComputeLocalLayout; - CodecStatus.Status.Conference.Presentation.Mode.ValueChangedAction += SharingContentIsOnFeedback.FireUpdate; - CodecStatus.Status.Conference.Presentation.Mode.ValueChangedAction += FarEndIsSharingContentFeedback.FireUpdate; - - CodecOsdIn = new RoutingInputPort(RoutingPortNames.CodecOsd, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(StopSharing), this); - HdmiIn2 = new RoutingInputPort(RoutingPortNames.HdmiIn2, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSource1), this); - HdmiIn3 = new RoutingInputPort(RoutingPortNames.HdmiIn3, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSource2), this); - - HdmiOut1 = new RoutingOutputPort(RoutingPortNames.HdmiOut1, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, null, this); - HdmiOut2 = new RoutingOutputPort(RoutingPortNames.HdmiOut2, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, null, this); - - InputPorts.Add(CodecOsdIn); - InputPorts.Add(HdmiIn2); - InputPorts.Add(HdmiIn3); - OutputPorts.Add(HdmiOut1); - - CreateOsdSource(); - } - - - /// - /// Creates the fake OSD source, and connects it's AudioVideo output to the CodecOsdIn input - /// to enable routing - /// - void CreateOsdSource() - { - OsdSource = new DummyRoutingInputsDevice(Key + "[osd]"); - DeviceManager.AddDevice(OsdSource); - var tl = new TieLine(OsdSource.AudioVideoOutputPort, CodecOsdIn); - TieLineCollection.Default.Add(tl); - } - - /// - /// Starts the HTTP feedback server and syncronizes state of codec - /// - /// - public override bool CustomActivate() - { - CrestronConsole.AddNewConsoleCommand(SetCommDebug, "SetCodecCommDebug", "0 for Off, 1 for on", ConsoleAccessLevelEnum.AccessOperator); - CrestronConsole.AddNewConsoleCommand(GetPhonebook, "GetCodecPhonebook", "Triggers a refresh of the codec phonebook", ConsoleAccessLevelEnum.AccessOperator); - CrestronConsole.AddNewConsoleCommand(GetBookings, "GetCodecBookings", "Triggers a refresh of the booking data for today", ConsoleAccessLevelEnum.AccessOperator); - - Communication.Connect(); - LoginMessageReceived = new CTimer(DisconnectClientAndReconnect, 5000); - - var socket = Communication as ISocketStatus; - if (socket != null) - { - socket.ConnectionChange += new EventHandler(socket_ConnectionChange); - } - - CommunicationMonitor.Start(); - - string prefix = "xFeedback register "; - - CliFeedbackRegistrationExpression = - prefix + "/Configuration" + Delimiter + - prefix + "/Status/Audio" + Delimiter + - prefix + "/Status/Call" + Delimiter + - prefix + "/Status/Conference/Presentation" + Delimiter + - prefix + "/Status/Cameras/SpeakerTrack" + Delimiter + - prefix + "/Status/RoomAnalytics" + Delimiter + - prefix + "/Status/Standby" + Delimiter + - prefix + "/Status/Video/Selfview" + Delimiter + - prefix + "/Status/Video/Layout" + Delimiter + - prefix + "/Bookings" + Delimiter + - prefix + "/Event/CallDisconnect" + Delimiter + - prefix + "/Event/Bookings" + Delimiter; - - return base.CustomActivate(); - } - - /// - /// Fires when initial codec sync is completed. Used to then send commands to get call history, phonebook, bookings, etc. - /// - /// - /// - void SyncState_InitialSyncCompleted(object sender, EventArgs e) - { - // Fire the ready event - SetIsReady(); - //CommDebuggingIsOn = false; - - GetCallHistory(); - - PhonebookRefreshTimer = new CTimer(CheckCurrentHour, 3600000, 3600000); // check each hour to see if the phonebook should be downloaded - GetPhonebook(null); - - BookingsRefreshTimer = new CTimer(GetBookings, 900000, 900000); // 15 minute timer to check for new booking info - GetBookings(null); - } - - public void SetCommDebug(string s) - { - if (s == "1") - { - CommDebuggingIsOn = true; - Debug.Console(0, this, "Comm Debug Enabled."); - } - else - { - CommDebuggingIsOn = false; - Debug.Console(0, this, "Comm Debug Disabled."); - } - } - - void socket_ConnectionChange(object sender, GenericSocketStatusChageEventArgs e) - { - if (e.Client.IsConnected) - { - LoginMessageReceived.Reset(5000); - } - else - { - SyncState.CodecDisconnected(); - PhonebookSyncState.CodecDisconnected(); - - if (PhonebookRefreshTimer != null) - { - PhonebookRefreshTimer.Stop(); - PhonebookRefreshTimer = null; - } - - if (BookingsRefreshTimer != null) - { - BookingsRefreshTimer.Stop(); - BookingsRefreshTimer = null; - } - } - } - - void DisconnectClientAndReconnect(object o) - { - Debug.Console(0, this, "Disconnecting and Reconnecting to codec."); - - Communication.Disconnect(); - - CrestronEnvironment.Sleep(2000); - - Communication.Connect(); - } - - /// - /// Gathers responses from the codec (including the delimiter. Responses are checked to see if they contain JSON data and if so, the data is collected until a complete JSON - /// message is received before forwarding the message to be deserialized. - /// - /// - /// - void Port_LineReceived(object dev, GenericCommMethodReceiveTextArgs args) - { - if (CommDebuggingIsOn) - { - if(!JsonFeedbackMessageIsIncoming) - Debug.Console(1, this, "RX: '{0}'", args.Text); - } - - if (args.Text == "{" + Delimiter) // Check for the beginning of a new JSON message - { - JsonFeedbackMessageIsIncoming = true; - - if (CommDebuggingIsOn) - Debug.Console(1, this, "Incoming JSON message..."); - - JsonMessage = new StringBuilder(); - } - else if (args.Text == "}" + Delimiter) // Check for the end of a JSON message - { - JsonFeedbackMessageIsIncoming = false; - - JsonMessage.Append(args.Text); - - if (CommDebuggingIsOn) - Debug.Console(1, this, "Complete JSON Received:\n{0}", JsonMessage.ToString()); - - // Forward the complete message to be deserialized - DeserializeResponse(JsonMessage.ToString()); - return; - } - - if(JsonFeedbackMessageIsIncoming) - { - JsonMessage.Append(args.Text); - - //Debug.Console(1, this, "Building JSON:\n{0}", JsonMessage.ToString()); - return; - } - - if (!SyncState.InitialSyncComplete) - { - switch (args.Text.Trim().ToLower()) // remove the whitespace - { - case "*r login successful": - { - LoginMessageReceived.Stop(); - SendText("xPreferences outputmode json"); - break; - } - case "xpreferences outputmode json": - { - if (!SyncState.InitialStatusMessageWasReceived) - SendText("xStatus"); - break; - } - case "xfeedback register /event/calldisconnect": - { - SyncState.FeedbackRegistered(); - break; - } - } - } - - } - - public void SendText(string command) - { - if (CommDebuggingIsOn) - Debug.Console(1, this, "Sending: '{0}'", command); - - Communication.SendText(command + Delimiter); - } - - void DeserializeResponse(string response) - { - try - { - // Serializer settings. We want to ignore null values and mising members - JsonSerializerSettings settings = new JsonSerializerSettings(); - settings.NullValueHandling = NullValueHandling.Ignore; - settings.MissingMemberHandling = MissingMemberHandling.Ignore; - settings.ObjectCreationHandling = ObjectCreationHandling.Auto; - - if (response.IndexOf("\"Status\":{") > -1) - { - // Status Message - - // Temp object so we can inpsect for call data before simply deserializing - CiscoCodecStatus.RootObject tempCodecStatus = new CiscoCodecStatus.RootObject(); - - JsonConvert.PopulateObject(response, tempCodecStatus); - - // Check to see if the message contains /Status/Conference/Presentation/LocalInstance and extract source value - var conference = tempCodecStatus.Status.Conference; - - if (conference.Presentation.LocalInstance.Count > 0) - { - if (!string.IsNullOrEmpty(conference.Presentation.LocalInstance[0].ghost)) - PresentationSource = 0; - else if (conference.Presentation.LocalInstance[0].Source != null) - { - PresentationSource = conference.Presentation.LocalInstance[0].Source.IntValue; - } - } - - // Check to see if this is a call status message received after the initial status message - if (tempCodecStatus.Status.Call.Count > 0) - { - // Iterate through the call objects in the response - foreach (CiscoCodecStatus.Call call in tempCodecStatus.Status.Call) - { - var tempActiveCall = ActiveCalls.FirstOrDefault(c => c.Id.Equals(call.id)); - - if (tempActiveCall != null) - { - bool changeDetected = false; - - eCodecCallStatus newStatus = eCodecCallStatus.Unknown; - - // Update properties of ActiveCallItem - if(call.Status != null) - if (!string.IsNullOrEmpty(call.Status.Value)) - { - tempActiveCall.Status = CodecCallStatus.ConvertToStatusEnum(call.Status.Value); - - if (newStatus == eCodecCallStatus.Connected) - GetCallHistory(); - - changeDetected = true; - } - if (call.CallType != null) - if (!string.IsNullOrEmpty(call.CallType.Value)) - { - tempActiveCall.Type = CodecCallType.ConvertToTypeEnum(call.CallType.Value); - changeDetected = true; - } - if (call.DisplayName != null) - if (!string.IsNullOrEmpty(call.DisplayName.Value)) - { - tempActiveCall.Name = call.DisplayName.Value; - changeDetected = true; - } - if (call.Direction != null) - { - if (!string.IsNullOrEmpty(call.Direction.Value)) - { - tempActiveCall.Direction = CodecCallDirection.ConvertToDirectionEnum(call.Direction.Value); - changeDetected = true; - } - } - - if (changeDetected) - { - SetSelfViewMode(); - OnCallStatusChange(tempActiveCall); - ListCalls(); - } - } - else if( call.ghost == null ) // if the ghost value is present the call has ended already - { - // Create a new call item - var newCallItem = new CodecActiveCallItem() - { - Id = call.id, - Status = CodecCallStatus.ConvertToStatusEnum(call.Status.Value), - Name = call.DisplayName.Value, - Number = call.RemoteNumber.Value, - Type = CodecCallType.ConvertToTypeEnum(call.CallType.Value), - Direction = CodecCallDirection.ConvertToDirectionEnum(call.Direction.Value) - }; - - // Add it to the ActiveCalls List - ActiveCalls.Add(newCallItem); - - ListCalls(); - - SetSelfViewMode(); - OnCallStatusChange(newCallItem); - } - - } - - } - - JsonConvert.PopulateObject(response, CodecStatus); - - if (!SyncState.InitialStatusMessageWasReceived) - { - SyncState.InitialStatusMessageReceived(); - - if (!SyncState.InitialConfigurationMessageWasReceived) - SendText("xConfiguration"); - } - } - else if (response.IndexOf("\"Configuration\":{") > -1) - { - // Configuration Message - - JsonConvert.PopulateObject(response, CodecConfiguration); - - if (!SyncState.InitialConfigurationMessageWasReceived) - { - SyncState.InitialConfigurationMessageReceived(); - if (!SyncState.FeedbackWasRegistered) - { - SendText(CliFeedbackRegistrationExpression); - } - } - - } - else if (response.IndexOf("\"Event\":{") > -1) - { - if (response.IndexOf("\"CallDisconnect\":{") > -1) - { - CiscoCodecEvents.RootObject eventReceived = new CiscoCodecEvents.RootObject(); - - JsonConvert.PopulateObject(response, eventReceived); - - EvalutateDisconnectEvent(eventReceived); - } - else if (response.IndexOf("\"Bookings\":{") > -1) // The list has changed, reload it - { - GetBookings(null); - } - } - else if (response.IndexOf("\"CommandResponse\":{") > -1) - { - // CommandResponse Message - - if (response.IndexOf("\"CallHistoryRecentsResult\":{") > -1) - { - var codecCallHistory = new CiscoCallHistory.RootObject(); - - JsonConvert.PopulateObject(response, codecCallHistory); - - CallHistory.ConvertCiscoCallHistoryToGeneric(codecCallHistory.CommandResponse.CallHistoryRecentsResult.Entry); - } - else if (response.IndexOf("\"CallHistoryDeleteEntryResult\":{") > -1) - { - GetCallHistory(); - } - else if (response.IndexOf("\"PhonebookSearchResult\":{") > -1) - { - var codecPhonebookResponse = new CiscoCodecPhonebook.RootObject(); - - JsonConvert.PopulateObject(response, codecPhonebookResponse); - - if (!PhonebookSyncState.InitialPhonebookFoldersWasReceived) - { - // Check if the phonebook has any folders - PhonebookSyncState.InitialPhonebookFoldersReceived(); - - PhonebookSyncState.SetPhonebookHasFolders(codecPhonebookResponse.CommandResponse.PhonebookSearchResult.Folder.Count > 0); - - if (PhonebookSyncState.PhonebookHasFolders) - { - DirectoryRoot.AddFoldersToDirectory(CiscoCodecPhonebook.GetRootFoldersFromSearchResult(codecPhonebookResponse.CommandResponse.PhonebookSearchResult)); - } - - // Get the number of contacts in the phonebook - GetPhonebookContacts(); - } - else if (!PhonebookSyncState.NumberOfContactsWasReceived) - { - // Store the total number of contacts in the phonebook - PhonebookSyncState.SetNumberOfContacts(Int32.Parse(codecPhonebookResponse.CommandResponse.PhonebookSearchResult.ResultInfo.TotalRows.Value)); - - DirectoryRoot.AddContactsToDirectory(CiscoCodecPhonebook.GetRootContactsFromSearchResult(codecPhonebookResponse.CommandResponse.PhonebookSearchResult)); - - PhonebookSyncState.PhonebookRootEntriesReceived(); - - PrintPhonebook(DirectoryRoot); - } - else if (PhonebookSyncState.InitialSyncComplete) - { - var directoryResults = new CodecDirectory(); - - if(codecPhonebookResponse.CommandResponse.PhonebookSearchResult.ResultInfo.TotalRows.Value != "0") - directoryResults = CiscoCodecPhonebook.ConvertCiscoPhonebookToGeneric(codecPhonebookResponse.CommandResponse.PhonebookSearchResult); - - PrintPhonebook(directoryResults); - - // This will return the latest results to all UIs. Multiple indendent UI Directory browsing will require a different methodology - var handler = DirectoryResultReturned; - if (handler != null) - handler(this, new DirectoryEventArgs() { Directory = directoryResults }); - - // Fire some sort of callback delegate to the UI that requested the directory search results - } - } - else if (response.IndexOf("\"BookingsListResult\":{") > -1) - { - var codecBookings = new CiscoCodecBookings.RootObject(); - - JsonConvert.PopulateObject(response, codecBookings); - - if(codecBookings.CommandResponse.BookingsListResult.ResultInfo.TotalRows.Value != "0") - CodecSchedule.Meetings = CiscoCodecBookings.GetGenericMeetingsFromBookingResult(codecBookings.CommandResponse.BookingsListResult.Booking); - - BookingsRefreshTimer.Reset(900000, 900000); - } - - } - - } - catch (Exception ex) - { - Debug.Console(1, this, "Error Deserializing feedback from codec: {0}", ex); - } - } - - /// - /// Evaluates an event received from the codec - /// - /// - void EvalutateDisconnectEvent(CiscoCodecEvents.RootObject eventReceived) - { - if (eventReceived.Event.CallDisconnect != null) - { - var tempActiveCall = ActiveCalls.FirstOrDefault(c => c.Id.Equals(eventReceived.Event.CallDisconnect.CallId.Value)); - - // Remove the call from the Active calls list - if (tempActiveCall != null) - { - ActiveCalls.Remove(tempActiveCall); - - ListCalls(); - - SetSelfViewMode(); - // Notify of the call disconnection - SetNewCallStatusAndFireCallStatusChange(eCodecCallStatus.Disconnected, tempActiveCall); - - GetCallHistory(); - } - } - } - - /// - /// - /// - /// - public override void ExecuteSwitch(object selector) - { - (selector as Action)(); - PresentationSourceKey = selector.ToString(); - } - - /// - /// This is necessary for devices that are "routers" in the middle of the path, even though it only has one output and - /// may only have one input. - /// - public void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType) - { - ExecuteSwitch(inputSelector); - PresentationSourceKey = inputSelector.ToString(); - } - - - /// - /// Gets the first CallId or returns null - /// - /// - private string GetCallId() - { - string callId = null; - - if (ActiveCalls.Count > 1) - { - foreach (CodecActiveCallItem call in ActiveCalls) ; - } - else if (ActiveCalls.Count == 1) - callId = ActiveCalls[0].Id; - - return callId; - - } - - public void GetCallHistory() - { - SendText("xCommand CallHistory Recents Limit: 20 Order: OccurrenceTime"); - } - - /// - /// Required for IHasScheduleAwareness - /// - public void GetSchedule() - { - GetBookings(null); - } - - /// - /// Gets the bookings for today - /// - /// - public void GetBookings(object command) - { - Debug.Console(1, this, "Retrieving Booking Info from Codec. Current Time: {0}", DateTime.Now.ToLocalTime()); - - SendText("xCommand Bookings List Days: 1 DayOffset: 0"); - } - - /// - /// Checks to see if it is 2am (or within that hour) and triggers a download of the phonebook - /// - /// - public void CheckCurrentHour(object o) - { - if (DateTime.Now.Hour == 2) - { - Debug.Console(1, this, "Checking hour to see if phonebook should be downloaded. Current hour is {0}", DateTime.Now.Hour); - - GetPhonebook(null); - PhonebookRefreshTimer.Reset(3600000, 3600000); - } - } - - /// - /// Triggers a refresh of the codec phonebook - /// - /// Just to allow this method to be called from a console command - public void GetPhonebook(string command) - { - PhonebookSyncState.CodecDisconnected(); - - DirectoryRoot = new CodecDirectory(); - - GetPhonebookFolders(); - } - - private void GetPhonebookFolders() - { - // Get Phonebook Folders (determine local/corporate from config, and set results limit) - SendText(string.Format("xCommand Phonebook Search PhonebookType: {0} ContactType: Folder", PhonebookMode)); - } - - private void GetPhonebookContacts() - { - // Get Phonebook Folders (determine local/corporate from config, and set results limit) - SendText(string.Format("xCommand Phonebook Search PhonebookType: {0} ContactType: Contact Limit: {1}", PhonebookMode, PhonebookResultsLimit)); - } - - /// - /// Searches the codec phonebook for all contacts matching the search string - /// - /// - public void SearchDirectory(string searchString) - { - SendText(string.Format("xCommand Phonebook Search SearchString: \"{0}\" PhonebookType: {1} ContactType: Contact Limit: {2}", searchString, PhonebookMode, PhonebookResultsLimit)); - } - - /// - /// // Get contents of a specific folder in the phonebook - /// - /// - public void GetDirectoryFolderContents(string folderId) - { - SendText(string.Format("xCommand Phonebook Search FolderId: {0} PhonebookType: {1} ContactType: Any Limit: {2}", folderId, PhonebookMode, PhonebookResultsLimit)); - } - - void PrintPhonebook(CodecDirectory directory) - { - if (Debug.Level > 0) - { - Debug.Console(1, this, "Directory Results:\n"); - - foreach (DirectoryItem item in directory.DirectoryResults) - { - if (item is DirectoryFolder) - { - Debug.Console(1, this, "[+] {0}", item.Name); - } - else if (item is DirectoryContact) - { - Debug.Console(1, this, "{0}", item.Name); - } - } - } - } - - /// - /// Simple dial method - /// - /// - public override void Dial(string number) - { - SendText(string.Format("xCommand Dial Number: \"{0}\"", number)); - } - - /// - /// Dials a specific meeting - /// - /// - public override void Dial(Meeting meeting) - { - foreach (Call c in meeting.Calls) - { - Dial(c.Number, c.Protocol, c.CallRate, c.CallType, meeting.Id); - } - } - - /// - /// Detailed dial method - /// - /// - /// - /// - /// - /// - public void Dial(string number, string protocol, string callRate, string callType, string meetingId) - { - SendText(string.Format("xCommand Dial Number: \"{0}\" Protocol: {1} CallRate: {2} CallType: {3} BookingId: {4}", number, protocol, callRate, callType, meetingId)); - } - - public override void EndCall(CodecActiveCallItem activeCall) - { - SendText(string.Format("xCommand Call Disconnect CallId: {0}", activeCall.Id)); - } - - public override void EndAllCalls() - { - foreach (CodecActiveCallItem activeCall in ActiveCalls) - { - SendText(string.Format("xCommand Call Disconnect CallId: {0}", activeCall.Id)); - } - } - - public override void AcceptCall(CodecActiveCallItem item) - { - SendText("xCommand Call Accept"); - } - - public override void RejectCall(CodecActiveCallItem item) - { - SendText("xCommand Call Reject"); - } - - public override void SendDtmf(string s) - { - if (CallFavorites != null) - { - SendText(string.Format("xCommand Call DTMFSend CallId: {0} DTMFString: \"{1}\"", GetCallId(), s)); - } - } - - public void SelectPresentationSource(int source) - { - PresentationSource = source; - - StartSharing(); - } - - /// - /// Select source 1 as the presetnation source - /// - public void SelectPresentationSource1() - { - SelectPresentationSource(2); - } - - /// - /// Select source 2 as the presetnation source - /// - public void SelectPresentationSource2() - { - SelectPresentationSource(3); - } - - /// - /// Starts presentation sharing - /// - public override void StartSharing() - { - string sendingMode = string.Empty; - - if (IsInCall) - sendingMode = "LocalRemote"; - else - sendingMode = "LocalOnly"; - - if(PresentationSource > 0) - SendText(string.Format("xCommand Presentation Start PresentationSource: {0} SendingMode: {1}", PresentationSource, sendingMode)); - } - - /// - /// Stops sharing the current presentation - /// - public override void StopSharing() - { - PresentationSource = 0; - - SendText("xCommand Presentation Stop"); - } - - public override void PrivacyModeOn() - { - SendText("xCommand Audio Microphones Mute"); - } - - public override void PrivacyModeOff() - { - SendText("xCommand Audio Microphones Unmute"); - } - - public override void PrivacyModeToggle() - { - SendText("xCommand Audio Microphones ToggleMute"); - } - - public override void MuteOff() - { - SendText("xCommand Audio Volume Unmute"); - } - - public override void MuteOn() - { - SendText("xCommand Audio Volume Mute"); - } - - public override void MuteToggle() - { - SendText("xCommand Audio Volume ToggleMute"); - } - - /// - /// Increments the voluem - /// - /// - public override void VolumeUp(bool pressRelease) - { - SendText("xCommand Audio Volume Increase"); - } - - /// - /// Decrements the volume - /// - /// - public override void VolumeDown(bool pressRelease) - { - SendText("xCommand Audio Volume Decrease"); - } - - /// - /// Scales the level and sets the codec to the specified level within its range - /// - /// level from slider (0-65535 range) - public override void SetVolume(ushort level) - { - var scaledLevel = CrestronEnvironment.ScaleWithLimits(level, 65535, 0, 100, 0); - SendText(string.Format("xCommand Audio Volume Set Level: {0}", scaledLevel)); - } - - /// - /// Recalls the default volume on the codec - /// - public void VolumeSetToDefault() - { - SendText("xCommand Audio Volume SetToDefault"); - } - - /// - /// Puts the codec in standby mode - /// - public override void StandbyActivate() - { - SendText("xCommand Standby Activate"); - } - - /// - /// Wakes the codec from standby - /// - public override void StandbyDeactivate() - { - SendText("xCommand Standby Deactivate"); - } - - /// - /// Reboots the codec - /// - public void Reboot() - { - SendText("xCommand SystemUnit Boot Action: Restart"); - } - - /// - /// Sets SelfView Mode based on config - /// - void SetSelfViewMode() - { - if (!IsInCall) - { - SelfviewModeOff(); - } - else - { - if (ShowSelfViewByDefault) - SelfviewModeOn(); - else - SelfviewModeOff(); - } - } - - /// - /// Turns on Selfview Mode - /// - public void SelfviewModeOn() - { - SendText("xCommand Video Selfview Set Mode: On"); - } - - /// - /// Turns off Selfview Mode - /// - public void SelfviewModeOff() - { - SendText("xCommand Video Selfview Set Mode: Off"); - } - - /// - /// Toggles Selfview mode on/off - /// - public void SelfviewModeToggle() - { - string mode = string.Empty; - - if (CodecStatus.Status.Video.Selfview.Mode.BoolValue) - mode = "Off"; - else - mode = "On"; - - SendText(string.Format("xCommand Video Selfview Set Mode: {0}", mode)); - } - - /// - /// Sets a specified position for the selfview PIP window - /// - /// - public void SelfviewPipPositionSet(CodecCommandWithLabel position) - { - SendText(string.Format("xCommand Video Selfview Set Mode: On PIPPosition: {0}", position.Command)); - } - - /// - /// Toggles to the next selfview PIP position - /// - public void SelfviewPipPositionToggle() - { - if (CurrentSelfviewPipPosition != null) - { - var nextPipPositionIndex = SelfviewPipPositions.IndexOf(CurrentSelfviewPipPosition) + 1; - - if (nextPipPositionIndex >= SelfviewPipPositions.Count) // Check if we need to loop back to the first item in the list - nextPipPositionIndex = 0; - - SelfviewPipPositionSet(SelfviewPipPositions[nextPipPositionIndex]); - } - } - - /// - /// Sets a specific local layout - /// - /// - public void LocalLayoutSet(CodecCommandWithLabel layout) - { - SendText(string.Format("xCommand Video Layout LayoutFamily Set Target: local LayoutFamily: {0}", layout.Command)); - } - - /// - /// Toggles to the next local layout - /// - public void LocalLayoutToggle() - { - if(CurrentLocalLayout != null) - { - var nextLocalLayoutIndex = LocalLayouts.IndexOf(CurrentLocalLayout) + 1; - - if (nextLocalLayoutIndex >= LocalLayouts.Count) // Check if we need to loop back to the first item in the list - nextLocalLayoutIndex = 0; - - LocalLayoutSet(LocalLayouts[nextLocalLayoutIndex]); - } - } - - /// - /// Toggles between single/prominent layouts - /// - public void LocalLayoutToggleSingleProminent() - { - if (CurrentLocalLayout != null) - { - if (CurrentLocalLayout.Label != "Prominent") - LocalLayoutSet(LocalLayouts.FirstOrDefault(l => l.Label.Equals("Prominent"))); - else - LocalLayoutSet(LocalLayouts.FirstOrDefault(l => l.Label.Equals("Single"))); - } - - } - - /// - /// - /// - public void MinMaxLayoutToggle() - { - if (PresentationViewMaximizedFeedback.BoolValue) - CurrentPresentationView = "Minimized"; - else - CurrentPresentationView = "Maximized"; - - SendText(string.Format("xCommand Video PresentationView Set View: {0}", CurrentPresentationView)); - PresentationViewMaximizedFeedback.FireUpdate(); - } - - /// - /// Calculates the current selfview PIP position - /// - void ComputeSelfviewPipStatus() - { - CurrentSelfviewPipPosition = SelfviewPipPositions.FirstOrDefault(p => p.Command.ToLower().Equals(CodecStatus.Status.Video.Selfview.PIPPosition.Value.ToLower())); - - if(CurrentSelfviewPipPosition != null) - SelfviewIsOnFeedback.FireUpdate(); - } - - /// - /// Calculates the current local Layout - /// - void ComputeLocalLayout() - { - CurrentLocalLayout = LocalLayouts.FirstOrDefault(l => l.Command.ToLower().Equals(CodecStatus.Status.Video.Layout.LayoutFamily.Local.Value.ToLower())); - - if (CurrentLocalLayout != null) - LocalLayoutFeedback.FireUpdate(); - } - - public void RemoveCallHistoryEntry(CodecCallHistory.CallHistoryEntry entry) - { - SendText(string.Format("xCommand CallHistory DeleteEntry CallHistoryId: {0} AcknowledgeConsecutiveDuplicates: True", entry.OccurrenceHistoryId)); - } - - public class CiscoCodecInfo : VideoCodecInfo - { - public CiscoCodecStatus.RootObject CodecStatus { get; private set; } - - public CiscoCodecConfiguration.RootObject CodecConfiguration { get; private set; } - - public override bool MultiSiteOptionIsEnabled - { - get - { - if (CodecStatus.Status.SystemUnit.Software.OptionKeys.MultiSite.Value.ToLower() == "true") - return true; - else - return false; - } - - } - public override string IpAddress - { - get - { - if (CodecConfiguration.Configuration.Network != null) - { - if (CodecConfiguration.Configuration.Network.Count > 0) - return CodecConfiguration.Configuration.Network[0].IPv4.Address.Value; - } - return string.Empty; - } - } - public override string E164Alias - { - get - { - if (CodecConfiguration.Configuration.H323.H323Alias.E164 != null) - return CodecConfiguration.Configuration.H323.H323Alias.E164.Value; - else - return string.Empty; - } - } - public override string H323Id - { - get - { - if (CodecConfiguration.Configuration.H323.H323Alias.ID != null) - return CodecConfiguration.Configuration.H323.H323Alias.ID.Value; - else - return string.Empty; - } - } - public override string SipPhoneNumber - { - get - { - if (CodecStatus.Status.SIP.Registration.Count > 0) - { - var match = Regex.Match(CodecStatus.Status.SIP.Registration[0].URI.Value, @"(\d+)"); // extract numbers only - if (match.Success) - { - Debug.Console(1, "Extracted phone number as '{0}' from string '{1}'", match.Groups[1].Value, CodecStatus.Status.SIP.Registration[0].URI.Value); - return match.Groups[1].Value; - } - else - { - Debug.Console(1, "Unable to extract phone number from string: '{0}'", CodecStatus.Status.SIP.Registration[0].URI.Value); - return string.Empty; - } - } - else - { - Debug.Console(1, "Unable to extract phone number. No SIP Registration items found"); - return string.Empty; - } - } - } - public override string SipUri - { - get - { - if (CodecStatus.Status.SIP.AlternateURI.Primary.URI.Value != null) - return CodecStatus.Status.SIP.AlternateURI.Primary.URI.Value; - else - return string.Empty; - } - } - public override bool AutoAnswerEnabled - { - get - { - if (CodecConfiguration.Configuration.Conference.AutoAnswer.Mode.Value.ToLower() == "on") - return true; - else - return false; - } - } - - public CiscoCodecInfo(CiscoCodecStatus.RootObject status, CiscoCodecConfiguration.RootObject configuration) - { - CodecStatus = status; - CodecConfiguration = configuration; - } - } - } - - /// - /// Represents a codec command that might need to have a friendly label applied for UI feedback purposes - /// - public class CodecCommandWithLabel - { - public string Command { get; set; } - public string Label { get; set; } - - public CodecCommandWithLabel(string command, string label) - { - Command = command; - Label = label; - } - } - - /// - /// Tracks the initial sycnronization state of the codec when making a connection - /// - public class CodecSyncState : IKeyed - { - bool _InitialSyncComplete; - - public event EventHandler InitialSyncCompleted; - - public string Key { get; private set; } - - public bool InitialSyncComplete - { - get { return _InitialSyncComplete; } - private set - { - if (value == true) - { - var handler = InitialSyncCompleted; - if (handler != null) - handler(this, new EventArgs()); - } - _InitialSyncComplete = value; - } - } - - public bool InitialStatusMessageWasReceived { get; private set; } - - public bool InitialConfigurationMessageWasReceived { get; private set; } - - public bool FeedbackWasRegistered { get; private set; } - - public CodecSyncState(string key) - { - Key = key; - CodecDisconnected(); - } - - public void InitialStatusMessageReceived() - { - InitialStatusMessageWasReceived = true; - Debug.Console(1, this, "Initial Codec Status Message Received."); - CheckSyncStatus(); - } - - public void InitialConfigurationMessageReceived() - { - InitialConfigurationMessageWasReceived = true; - Debug.Console(1, this, "Initial Codec Configuration Message Received."); - CheckSyncStatus(); - } - - public void FeedbackRegistered() - { - FeedbackWasRegistered = true; - Debug.Console(1, this, "Initial Codec Feedback Registration Successful."); - CheckSyncStatus(); - } - - public void CodecDisconnected() - { - InitialConfigurationMessageWasReceived = false; - InitialStatusMessageWasReceived = false; - FeedbackWasRegistered = false; - InitialSyncComplete = false; - } - - void CheckSyncStatus() - { - if (InitialConfigurationMessageWasReceived && InitialStatusMessageWasReceived && FeedbackWasRegistered) - { - InitialSyncComplete = true; - Debug.Console(1, this, "Initial Codec Sync Complete!"); - } - else - InitialSyncComplete = false; - } - } - -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs.orig b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs.orig deleted file mode 100644 index 9ce58609..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs.orig +++ /dev/null @@ -1,1487 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using Crestron.SimplSharp; -using Crestron.SimplSharp.Net.Https; -using Crestron.SimplSharp.CrestronXml; -using Crestron.SimplSharp.CrestronXml.Serialization; -using Newtonsoft.Json; -//using Cisco_One_Button_To_Push; -//using Cisco_SX80_Corporate_Phone_Book; - -using PepperDash.Core; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.Routing; -using PepperDash.Essentials.Devices.Common.Codec; -using PepperDash.Essentials.Devices.Common.Occupancy; -using PepperDash.Essentials.Devices.Common.VideoCodec; - -namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco -{ - enum eCommandType { SessionStart, SessionEnd, Command, GetStatus, GetConfiguration }; - - public class CiscoSparkCodec : VideoCodecBase, IHasCallHistory, IHasCallFavorites, IHasDirectory, - IHasScheduleAwareness, IOccupancyStatusProvider, IHasCodecLayouts, IHasCodecSelfview, - ICommunicationMonitor, IRouting - { - public event EventHandler DirectoryResultReturned; - - public CommunicationGather PortGather { get; private set; } - public CommunicationGather JsonGather { get; private set; } - - public StatusMonitorBase CommunicationMonitor { get; private set; } - - public BoolFeedback PresentationViewMaximizedFeedback { get; private set; } - - string CurrentPresentationView; - - public BoolFeedback RoomIsOccupiedFeedback { get; private set; } - - public IntFeedback PeopleCountFeedback { get; private set; } - - public BoolFeedback SpeakerTrackIsOnFeedback { get; private set; } - - public BoolFeedback SelfviewIsOnFeedback { get; private set; } - - public StringFeedback SelfviewPipPositionFeedback { get; private set; } - - public StringFeedback LocalLayoutFeedback { get; private set; } - - private CodecCommandWithLabel CurrentSelfviewPipPosition; - - private CodecCommandWithLabel CurrentLocalLayout; - - /// - /// List the available positions for the selfview PIP window - /// - public List SelfviewPipPositions = new List() - { - new CodecCommandWithLabel("CenterLeft", "Center Left"), - new CodecCommandWithLabel("CenterRight", "Center Right"), - new CodecCommandWithLabel("LowerLeft", "Lower Left"), - new CodecCommandWithLabel("LowerRight", "Lower Right"), - new CodecCommandWithLabel("UpperCenter", "Upper Center"), - new CodecCommandWithLabel("UpperLeft", "Upper Left"), - new CodecCommandWithLabel("UpperRight", "Upper Right"), - }; - - /// - /// Lists the available options for local layout - /// - public List LocalLayouts = new List() - { - //new CodecCommandWithLabel("auto", "Auto"), - //new CiscoCodecLocalLayout("custom", "Custom"), // Left out for now - new CodecCommandWithLabel("equal","Equal"), - new CodecCommandWithLabel("overlay","Overlay"), - new CodecCommandWithLabel("prominent","Prominent"), - new CodecCommandWithLabel("single","Single") - }; - - private CiscoCodecConfiguration.RootObject CodecConfiguration = new CiscoCodecConfiguration.RootObject(); - - private CiscoCodecStatus.RootObject CodecStatus = new CiscoCodecStatus.RootObject(); - - public CodecCallHistory CallHistory { get; private set; } - - public CodecCallFavorites CallFavorites { get; private set; } - - public CodecDirectory DirectoryRoot { get; private set; } - - public CodecScheduleAwareness CodecSchedule { get; private set; } - - /// - /// Gets and returns the scaled volume of the codec - /// - protected override Func VolumeLevelFeedbackFunc - { - get - { - return () => CrestronEnvironment.ScaleWithLimits(CodecStatus.Status.Audio.Volume.IntValue, 100, 0, 65535, 0); - } - } - - protected override Func PrivacyModeIsOnFeedbackFunc - { - get - { - return () => CodecStatus.Status.Audio.Microphones.Mute.BoolValue; - } - } - - protected override Func StandbyIsOnFeedbackFunc - { - get - { - return () => CodecStatus.Status.Standby.State.BoolValue; - } - } - - /// - /// Gets the value of the currently shared source, or returns null - /// - protected override Func SharingSourceFeedbackFunc - { - get - { - return () => PresentationSourceKey; - } - } - - protected override Func SharingContentIsOnFeedbackFunc - { - get - { - return () => CodecStatus.Status.Conference.Presentation.Mode.BoolValue; - } - } - - protected override Func MuteFeedbackFunc - { - get - { - return () => CodecStatus.Status.Audio.VolumeMute.BoolValue; - } - } - - protected Func RoomIsOccupiedFeedbackFunc - { - get - { - return () => CodecStatus.Status.RoomAnalytics.PeoplePresence.BoolValue; - } - } - - protected Func PeopleCountFeedbackFunc - { - get - { - return () => CodecStatus.Status.RoomAnalytics.PeopleCount.Current.IntValue; - } - } - - protected Func SpeakerTrackIsOnFeedbackFunc - { - get - { - return () => CodecStatus.Status.Cameras.SpeakerTrack.Status.BoolValue; - } - } - - protected Func SelfViewIsOnFeedbackFunc - { - get - { - return () => CodecStatus.Status.Video.Selfview.Mode.BoolValue; - } - } - - protected Func SelfviewPipPositionFeedbackFunc - { - get - { - return () => CurrentSelfviewPipPosition.Label; - } - } - - protected Func LocalLayoutFeedbackFunc - { - get - { - return () => CurrentLocalLayout.Label; - } - } - - - private string CliFeedbackRegistrationExpression; - - private CodecSyncState SyncState; - - public CodecPhonebookSyncState PhonebookSyncState { get; private set; } - - private StringBuilder JsonMessage; - - private bool JsonFeedbackMessageIsIncoming; - - public bool CommDebuggingIsOn; - - string Delimiter = "\r\n"; - - /// - /// Used to track the current connector used for the presentation source - /// - int PresentationSource; - - string PresentationSourceKey; - - string PhonebookMode = "Local"; // Default to Local - - int PhonebookResultsLimit = 255; // Could be set later by config. - - CTimer LoginMessageReceived; - - // **___________________________________________________________________** - // Timers to be moved to the global system timer at a later point.... - CTimer BookingsRefreshTimer; - CTimer PhonebookRefreshTimer; - // **___________________________________________________________________** - - public RoutingInputPort CodecOsdIn { get; private set; } - public RoutingInputPort HdmiIn2 { get; private set; } - public RoutingInputPort HdmiIn3 { get; private set; } - public RoutingOutputPort HdmiOut1 { get; private set; } - public RoutingOutputPort HdmiOut2 { get; private set; } - - - // Constructor for IBasicCommunication - public CiscoSparkCodec(string key, string name, IBasicCommunication comm, CiscoSparkCodecPropertiesConfig props ) - : base(key, name) - { - RoomIsOccupiedFeedback = new BoolFeedback(RoomIsOccupiedFeedbackFunc); - PeopleCountFeedback = new IntFeedback(PeopleCountFeedbackFunc); - SpeakerTrackIsOnFeedback = new BoolFeedback(SpeakerTrackIsOnFeedbackFunc); - SelfviewIsOnFeedback = new BoolFeedback(SelfViewIsOnFeedbackFunc); - SelfviewPipPositionFeedback = new StringFeedback(SelfviewPipPositionFeedbackFunc); - LocalLayoutFeedback = new StringFeedback(LocalLayoutFeedbackFunc); -<<<<<<< HEAD -======= - LocalLayoutIsProminentFeedback = new BoolFeedback(LocalLayoutIsProminentFeedbackFunc); - FarEndIsSharingContentFeedback = new BoolFeedback(FarEndIsSharingContentFeedbackFunc); ->>>>>>> development - - PresentationViewMaximizedFeedback = new BoolFeedback(() => CurrentPresentationView == "Maximized"); - - Communication = comm; - - if (props.CommunicationMonitorProperties != null) - { - CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, props.CommunicationMonitorProperties); - } - else - { - CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 30000, 120000, 300000, "xStatus SystemUnit Software Version\r"); - } - - if (props.Sharing != null) - AutoShareContentWhileInCall = props.Sharing.AutoShareContentWhileInCall; - - ShowSelfViewByDefault = props.ShowSelfViewByDefault; - - DeviceManager.AddDevice(CommunicationMonitor); - - PhonebookMode = props.PhonebookMode; - - SyncState = new CodecSyncState(key + "--Sync"); - - PhonebookSyncState = new CodecPhonebookSyncState(key + "--PhonebookSync"); - - SyncState.InitialSyncCompleted += new EventHandler(SyncState_InitialSyncCompleted); - - PortGather = new CommunicationGather(Communication, Delimiter); - PortGather.IncludeDelimiter = true; - PortGather.LineReceived += this.Port_LineReceived; - - CodecInfo = new CiscoCodecInfo(CodecStatus, CodecConfiguration); - - CallHistory = new CodecCallHistory(); - - if (props.Favorites != null) - { - CallFavorites = new CodecCallFavorites(); - CallFavorites.Favorites = props.Favorites; - } - - DirectoryRoot = new CodecDirectory(); - - CodecSchedule = new CodecScheduleAwareness(); - - //Set Feedback Actions - CodecStatus.Status.Audio.Volume.ValueChangedAction = VolumeLevelFeedback.FireUpdate; - CodecStatus.Status.Audio.VolumeMute.ValueChangedAction = MuteFeedback.FireUpdate; - CodecStatus.Status.Audio.Microphones.Mute.ValueChangedAction = PrivacyModeIsOnFeedback.FireUpdate; - CodecStatus.Status.Standby.State.ValueChangedAction = StandbyIsOnFeedback.FireUpdate; - CodecStatus.Status.RoomAnalytics.PeoplePresence.ValueChangedAction = RoomIsOccupiedFeedback.FireUpdate; - CodecStatus.Status.RoomAnalytics.PeopleCount.Current.ValueChangedAction = PeopleCountFeedback.FireUpdate; - CodecStatus.Status.Cameras.SpeakerTrack.Status.ValueChangedAction = SpeakerTrackIsOnFeedback.FireUpdate; - CodecStatus.Status.Video.Selfview.Mode.ValueChangedAction = SelfviewIsOnFeedback.FireUpdate; - CodecStatus.Status.Video.Selfview.PIPPosition.ValueChangedAction = ComputeSelfviewPipStatus; - CodecStatus.Status.Video.Layout.LayoutFamily.Local.ValueChangedAction = ComputeLocalLayout; -<<<<<<< HEAD - CodecStatus.Status.Conference.Presentation.Mode.ValueChangedAction = SharingContentIsOnFeedback.FireUpdate; -======= - CodecStatus.Status.Conference.Presentation.Mode.ValueChangedAction += SharingContentIsOnFeedback.FireUpdate; - CodecStatus.Status.Conference.Presentation.Mode.ValueChangedAction += FarEndIsSharingContentFeedback.FireUpdate; ->>>>>>> development - - CodecOsdIn = new RoutingInputPort(RoutingPortNames.CodecOsd, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(StopSharing), this); - HdmiIn2 = new RoutingInputPort(RoutingPortNames.HdmiIn2, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSource1), this); - HdmiIn3 = new RoutingInputPort(RoutingPortNames.HdmiIn3, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSource2), this); - - HdmiOut1 = new RoutingOutputPort(RoutingPortNames.HdmiOut1, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, null, this); - HdmiOut2 = new RoutingOutputPort(RoutingPortNames.HdmiOut2, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, null, this); - - InputPorts.Add(CodecOsdIn); - InputPorts.Add(HdmiIn2); - InputPorts.Add(HdmiIn3); - OutputPorts.Add(HdmiOut1); - - CreateOsdSource(); - } - - - /// - /// Creates the fake OSD source, and connects it's AudioVideo output to the CodecOsdIn input - /// to enable routing - /// - void CreateOsdSource() - { - OsdSource = new DummyRoutingInputsDevice(Key + "[osd]"); - DeviceManager.AddDevice(OsdSource); - var tl = new TieLine(OsdSource.AudioVideoOutputPort, CodecOsdIn); - TieLineCollection.Default.Add(tl); - } - - /// - /// Starts the HTTP feedback server and syncronizes state of codec - /// - /// - public override bool CustomActivate() - { - CrestronConsole.AddNewConsoleCommand(SetCommDebug, "SetCodecCommDebug", "0 for Off, 1 for on", ConsoleAccessLevelEnum.AccessOperator); - CrestronConsole.AddNewConsoleCommand(GetPhonebook, "GetCodecPhonebook", "Triggers a refresh of the codec phonebook", ConsoleAccessLevelEnum.AccessOperator); - CrestronConsole.AddNewConsoleCommand(GetBookings, "GetCodecBookings", "Triggers a refresh of the booking data for today", ConsoleAccessLevelEnum.AccessOperator); - - Communication.Connect(); - LoginMessageReceived = new CTimer(DisconnectClientAndReconnect, 5000); - - var socket = Communication as ISocketStatus; - if (socket != null) - { - socket.ConnectionChange += new EventHandler(socket_ConnectionChange); - } - - CommunicationMonitor.Start(); - - string prefix = "xFeedback register "; - - CliFeedbackRegistrationExpression = - prefix + "/Configuration" + Delimiter + - prefix + "/Status/Audio" + Delimiter + - prefix + "/Status/Call" + Delimiter + - prefix + "/Status/Conference/Presentation" + Delimiter + - prefix + "/Status/Cameras/SpeakerTrack" + Delimiter + - prefix + "/Status/RoomAnalytics" + Delimiter + - prefix + "/Status/Standby" + Delimiter + - prefix + "/Status/Video/Selfview" + Delimiter + - prefix + "/Status/Video/Layout" + Delimiter + - prefix + "/Bookings" + Delimiter + - prefix + "/Event/CallDisconnect" + Delimiter + - prefix + "/Event/Bookings" + Delimiter; - - return base.CustomActivate(); - } - - /// - /// Fires when initial codec sync is completed. Used to then send commands to get call history, phonebook, bookings, etc. - /// - /// - /// - void SyncState_InitialSyncCompleted(object sender, EventArgs e) - { - // Fire the ready event - SetIsReady(); - //CommDebuggingIsOn = false; - - GetCallHistory(); - - PhonebookRefreshTimer = new CTimer(CheckCurrentHour, 3600000, 3600000); // check each hour to see if the phonebook should be downloaded - GetPhonebook(null); - - BookingsRefreshTimer = new CTimer(GetBookings, 900000, 900000); // 15 minute timer to check for new booking info - GetBookings(null); - } - - public void SetCommDebug(string s) - { - if (s == "1") - { - CommDebuggingIsOn = true; - Debug.Console(0, this, "Comm Debug Enabled."); - } - else - { - CommDebuggingIsOn = false; - Debug.Console(0, this, "Comm Debug Disabled."); - } - } - - void socket_ConnectionChange(object sender, GenericSocketStatusChageEventArgs e) - { - if (e.Client.IsConnected) - { - LoginMessageReceived.Reset(5000); - } - else - { - SyncState.CodecDisconnected(); - PhonebookSyncState.CodecDisconnected(); - - if (PhonebookRefreshTimer != null) - { - PhonebookRefreshTimer.Stop(); - PhonebookRefreshTimer = null; - } - - if (BookingsRefreshTimer != null) - { - BookingsRefreshTimer.Stop(); - BookingsRefreshTimer = null; - } - } - } - - void DisconnectClientAndReconnect(object o) - { - Debug.Console(0, this, "Disconnecting and Reconnecting to codec."); - - Communication.Disconnect(); - - CrestronEnvironment.Sleep(2000); - - Communication.Connect(); - } - - /// - /// Gathers responses from the codec (including the delimiter. Responses are checked to see if they contain JSON data and if so, the data is collected until a complete JSON - /// message is received before forwarding the message to be deserialized. - /// - /// - /// - void Port_LineReceived(object dev, GenericCommMethodReceiveTextArgs args) - { - if (CommDebuggingIsOn) - { - if(!JsonFeedbackMessageIsIncoming) - Debug.Console(1, this, "RX: '{0}'", args.Text); - } - - if (args.Text == "{" + Delimiter) // Check for the beginning of a new JSON message - { - JsonFeedbackMessageIsIncoming = true; - - if (CommDebuggingIsOn) - Debug.Console(1, this, "Incoming JSON message..."); - - JsonMessage = new StringBuilder(); - } - else if (args.Text == "}" + Delimiter) // Check for the end of a JSON message - { - JsonFeedbackMessageIsIncoming = false; - - JsonMessage.Append(args.Text); - - if (CommDebuggingIsOn) - Debug.Console(1, this, "Complete JSON Received:\n{0}", JsonMessage.ToString()); - - // Forward the complete message to be deserialized - DeserializeResponse(JsonMessage.ToString()); - return; - } - - if(JsonFeedbackMessageIsIncoming) - { - JsonMessage.Append(args.Text); - - //Debug.Console(1, this, "Building JSON:\n{0}", JsonMessage.ToString()); - return; - } - - if (!SyncState.InitialSyncComplete) - { - switch (args.Text.Trim().ToLower()) // remove the whitespace - { - case "*r login successful": - { - LoginMessageReceived.Stop(); - SendText("xPreferences outputmode json"); - break; - } - case "xpreferences outputmode json": - { - if (!SyncState.InitialStatusMessageWasReceived) - SendText("xStatus"); - break; - } - case "xfeedback register /event/calldisconnect": - { - SyncState.FeedbackRegistered(); - break; - } - } - } - - } - - public void SendText(string command) - { - if (CommDebuggingIsOn) - Debug.Console(1, this, "Sending: '{0}'", command); - - Communication.SendText(command + Delimiter); - } - - void DeserializeResponse(string response) - { - try - { - // Serializer settings. We want to ignore null values and mising members - JsonSerializerSettings settings = new JsonSerializerSettings(); - settings.NullValueHandling = NullValueHandling.Ignore; - settings.MissingMemberHandling = MissingMemberHandling.Ignore; - settings.ObjectCreationHandling = ObjectCreationHandling.Auto; - - if (response.IndexOf("\"Status\":{") > -1) - { - // Status Message - - // Temp object so we can inpsect for call data before simply deserializing - CiscoCodecStatus.RootObject tempCodecStatus = new CiscoCodecStatus.RootObject(); - - JsonConvert.PopulateObject(response, tempCodecStatus); - - // Check to see if the message contains /Status/Conference/Presentation/LocalInstance and extract source value - var conference = tempCodecStatus.Status.Conference; - - if (conference.Presentation.LocalInstance.Count > 0) - { - if (!string.IsNullOrEmpty(conference.Presentation.LocalInstance[0].ghost)) - PresentationSource = 0; - else if (conference.Presentation.LocalInstance[0].Source != null) - { - PresentationSource = conference.Presentation.LocalInstance[0].Source.IntValue; - } - } - - // Check to see if this is a call status message received after the initial status message - if (tempCodecStatus.Status.Call.Count > 0) - { - // Iterate through the call objects in the response - foreach (CiscoCodecStatus.Call call in tempCodecStatus.Status.Call) - { - var tempActiveCall = ActiveCalls.FirstOrDefault(c => c.Id.Equals(call.id)); - - if (tempActiveCall != null) - { - bool changeDetected = false; - - eCodecCallStatus newStatus = eCodecCallStatus.Unknown; - - // Update properties of ActiveCallItem - if(call.Status != null) - if (!string.IsNullOrEmpty(call.Status.Value)) - { - tempActiveCall.Status = CodecCallStatus.ConvertToStatusEnum(call.Status.Value); - - if (newStatus == eCodecCallStatus.Connected) - GetCallHistory(); - - changeDetected = true; - } - if (call.CallType != null) - if (!string.IsNullOrEmpty(call.CallType.Value)) - { - tempActiveCall.Type = CodecCallType.ConvertToTypeEnum(call.CallType.Value); - changeDetected = true; - } - if (call.DisplayName != null) - if (!string.IsNullOrEmpty(call.DisplayName.Value)) - { - tempActiveCall.Name = call.DisplayName.Value; - changeDetected = true; - } - if (call.Direction != null) - { - if (!string.IsNullOrEmpty(call.Direction.Value)) - { - tempActiveCall.Direction = CodecCallDirection.ConvertToDirectionEnum(call.Direction.Value); - changeDetected = true; - } - } - - if (changeDetected) - { - SetSelfViewMode(); - OnCallStatusChange(tempActiveCall); - ListCalls(); - } - } - else if( call.ghost == null ) // if the ghost value is present the call has ended already - { - // Create a new call item - var newCallItem = new CodecActiveCallItem() - { - Id = call.id, - Status = CodecCallStatus.ConvertToStatusEnum(call.Status.Value), - Name = call.DisplayName.Value, - Number = call.RemoteNumber.Value, - Type = CodecCallType.ConvertToTypeEnum(call.CallType.Value), - Direction = CodecCallDirection.ConvertToDirectionEnum(call.Direction.Value) - }; - - // Add it to the ActiveCalls List - ActiveCalls.Add(newCallItem); - - ListCalls(); - - SetSelfViewMode(); - OnCallStatusChange(newCallItem); - } - - } - - } - - JsonConvert.PopulateObject(response, CodecStatus); - - if (!SyncState.InitialStatusMessageWasReceived) - { - SyncState.InitialStatusMessageReceived(); - - if (!SyncState.InitialConfigurationMessageWasReceived) - SendText("xConfiguration"); - } - } - else if (response.IndexOf("\"Configuration\":{") > -1) - { - // Configuration Message - - JsonConvert.PopulateObject(response, CodecConfiguration); - - if (!SyncState.InitialConfigurationMessageWasReceived) - { - SyncState.InitialConfigurationMessageReceived(); - if (!SyncState.FeedbackWasRegistered) - { - SendText(CliFeedbackRegistrationExpression); - } - } - - } - else if (response.IndexOf("\"Event\":{") > -1) - { - if (response.IndexOf("\"CallDisconnect\":{") > -1) - { - CiscoCodecEvents.RootObject eventReceived = new CiscoCodecEvents.RootObject(); - - JsonConvert.PopulateObject(response, eventReceived); - - EvalutateDisconnectEvent(eventReceived); - } - else if (response.IndexOf("\"Bookings\":{") > -1) // The list has changed, reload it - { - GetBookings(null); - } - } - else if (response.IndexOf("\"CommandResponse\":{") > -1) - { - // CommandResponse Message - - if (response.IndexOf("\"CallHistoryRecentsResult\":{") > -1) - { - var codecCallHistory = new CiscoCallHistory.RootObject(); - - JsonConvert.PopulateObject(response, codecCallHistory); - - CallHistory.ConvertCiscoCallHistoryToGeneric(codecCallHistory.CommandResponse.CallHistoryRecentsResult.Entry); - } - else if (response.IndexOf("\"CallHistoryDeleteEntryResult\":{") > -1) - { - GetCallHistory(); - } - else if (response.IndexOf("\"PhonebookSearchResult\":{") > -1) - { - var codecPhonebookResponse = new CiscoCodecPhonebook.RootObject(); - - JsonConvert.PopulateObject(response, codecPhonebookResponse); - - if (!PhonebookSyncState.InitialPhonebookFoldersWasReceived) - { - // Check if the phonebook has any folders - PhonebookSyncState.InitialPhonebookFoldersReceived(); - - PhonebookSyncState.SetPhonebookHasFolders(codecPhonebookResponse.CommandResponse.PhonebookSearchResult.Folder.Count > 0); - - if (PhonebookSyncState.PhonebookHasFolders) - { - DirectoryRoot.AddFoldersToDirectory(CiscoCodecPhonebook.GetRootFoldersFromSearchResult(codecPhonebookResponse.CommandResponse.PhonebookSearchResult)); - } - - // Get the number of contacts in the phonebook - GetPhonebookContacts(); - } - else if (!PhonebookSyncState.NumberOfContactsWasReceived) - { - // Store the total number of contacts in the phonebook - PhonebookSyncState.SetNumberOfContacts(Int32.Parse(codecPhonebookResponse.CommandResponse.PhonebookSearchResult.ResultInfo.TotalRows.Value)); - - DirectoryRoot.AddContactsToDirectory(CiscoCodecPhonebook.GetRootContactsFromSearchResult(codecPhonebookResponse.CommandResponse.PhonebookSearchResult)); - - PhonebookSyncState.PhonebookRootEntriesReceived(); - - PrintPhonebook(DirectoryRoot); - } - else if (PhonebookSyncState.InitialSyncComplete) - { - var directoryResults = new CodecDirectory(); - - if(codecPhonebookResponse.CommandResponse.PhonebookSearchResult.ResultInfo.TotalRows.Value != "0") - directoryResults = CiscoCodecPhonebook.ConvertCiscoPhonebookToGeneric(codecPhonebookResponse.CommandResponse.PhonebookSearchResult); - - PrintPhonebook(directoryResults); - - // This will return the latest results to all UIs. Multiple indendent UI Directory browsing will require a different methodology - var handler = DirectoryResultReturned; - if (handler != null) - handler(this, new DirectoryEventArgs() { Directory = directoryResults }); - - // Fire some sort of callback delegate to the UI that requested the directory search results - } - } - else if (response.IndexOf("\"BookingsListResult\":{") > -1) - { - var codecBookings = new CiscoCodecBookings.RootObject(); - - JsonConvert.PopulateObject(response, codecBookings); - - if(codecBookings.CommandResponse.BookingsListResult.ResultInfo.TotalRows.Value != "0") - CodecSchedule.Meetings = CiscoCodecBookings.GetGenericMeetingsFromBookingResult(codecBookings.CommandResponse.BookingsListResult.Booking); - - BookingsRefreshTimer.Reset(900000, 900000); - } - - } - - } - catch (Exception ex) - { - Debug.Console(1, this, "Error Deserializing feedback from codec: {0}", ex); - } - } - - /// - /// Evaluates an event received from the codec - /// - /// - void EvalutateDisconnectEvent(CiscoCodecEvents.RootObject eventReceived) - { - if (eventReceived.Event.CallDisconnect != null) - { - var tempActiveCall = ActiveCalls.FirstOrDefault(c => c.Id.Equals(eventReceived.Event.CallDisconnect.CallId.Value)); - - // Remove the call from the Active calls list - if (tempActiveCall != null) - { - ActiveCalls.Remove(tempActiveCall); - - ListCalls(); - - SetSelfViewMode(); - // Notify of the call disconnection - SetNewCallStatusAndFireCallStatusChange(eCodecCallStatus.Disconnected, tempActiveCall); - - GetCallHistory(); - } - } - } - - /// - /// - /// - /// - public override void ExecuteSwitch(object selector) - { - (selector as Action)(); - PresentationSourceKey = selector.ToString(); - } - - /// - /// This is necessary for devices that are "routers" in the middle of the path, even though it only has one output and - /// may only have one input. - /// - public void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType) - { - ExecuteSwitch(inputSelector); - PresentationSourceKey = inputSelector.ToString(); - } - - - /// - /// Gets the first CallId or returns null - /// - /// - private string GetCallId() - { - string callId = null; - - if (ActiveCalls.Count > 1) - { - foreach (CodecActiveCallItem call in ActiveCalls) ; - } - else if (ActiveCalls.Count == 1) - callId = ActiveCalls[0].Id; - - return callId; - - } - - public void GetCallHistory() - { - SendText("xCommand CallHistory Recents Limit: 20 Order: OccurrenceTime"); - } - - /// - /// Required for IHasScheduleAwareness - /// - public void GetSchedule() - { - GetBookings(null); - } - - /// - /// Gets the bookings for today - /// - /// - public void GetBookings(object command) - { - Debug.Console(1, this, "Retrieving Booking Info from Codec. Current Time: {0}", DateTime.Now.ToLocalTime()); - - SendText("xCommand Bookings List Days: 1 DayOffset: 0"); - } - - /// - /// Checks to see if it is 2am (or within that hour) and triggers a download of the phonebook - /// - /// - public void CheckCurrentHour(object o) - { - if (DateTime.Now.Hour == 2) - { - Debug.Console(1, this, "Checking hour to see if phonebook should be downloaded. Current hour is {0}", DateTime.Now.Hour); - - GetPhonebook(null); - PhonebookRefreshTimer.Reset(3600000, 3600000); - } - } - - /// - /// Triggers a refresh of the codec phonebook - /// - /// Just to allow this method to be called from a console command - public void GetPhonebook(string command) - { - PhonebookSyncState.CodecDisconnected(); - - DirectoryRoot = new CodecDirectory(); - - GetPhonebookFolders(); - } - - private void GetPhonebookFolders() - { - // Get Phonebook Folders (determine local/corporate from config, and set results limit) - SendText(string.Format("xCommand Phonebook Search PhonebookType: {0} ContactType: Folder", PhonebookMode)); - } - - private void GetPhonebookContacts() - { - // Get Phonebook Folders (determine local/corporate from config, and set results limit) - SendText(string.Format("xCommand Phonebook Search PhonebookType: {0} ContactType: Contact Limit: {1}", PhonebookMode, PhonebookResultsLimit)); - } - - /// - /// Searches the codec phonebook for all contacts matching the search string - /// - /// - public void SearchDirectory(string searchString) - { - SendText(string.Format("xCommand Phonebook Search SearchString: \"{0}\" PhonebookType: {1} ContactType: Contact Limit: {2}", searchString, PhonebookMode, PhonebookResultsLimit)); - } - - /// - /// // Get contents of a specific folder in the phonebook - /// - /// - public void GetDirectoryFolderContents(string folderId) - { - SendText(string.Format("xCommand Phonebook Search FolderId: {0} PhonebookType: {1} ContactType: Any Limit: {2}", folderId, PhonebookMode, PhonebookResultsLimit)); - } - - void PrintPhonebook(CodecDirectory directory) - { - if (Debug.Level > 0) - { - Debug.Console(1, this, "Directory Results:\n"); - - foreach (DirectoryItem item in directory.DirectoryResults) - { - if (item is DirectoryFolder) - { - Debug.Console(1, this, "[+] {0}", item.Name); - } - else if (item is DirectoryContact) - { - Debug.Console(1, this, "{0}", item.Name); - } - } - } - } - - /// - /// Simple dial method - /// - /// - public override void Dial(string number) - { - SendText(string.Format("xCommand Dial Number: \"{0}\"", number)); - } - - /// - /// Dials a specific meeting - /// - /// - public override void Dial(Meeting meeting) - { - foreach (Call c in meeting.Calls) - { - Dial(c.Number, c.Protocol, c.CallRate, c.CallType, meeting.Id); - } - } - - /// - /// Detailed dial method - /// - /// - /// - /// - /// - /// - public void Dial(string number, string protocol, string callRate, string callType, string meetingId) - { - SendText(string.Format("xCommand Dial Number: \"{0}\" Protocol: {1} CallRate: {2} CallType: {3} BookingId: {4}", number, protocol, callRate, callType, meetingId)); - } - - public override void EndCall(CodecActiveCallItem activeCall) - { - SendText(string.Format("xCommand Call Disconnect CallId: {0}", activeCall.Id)); - } - - public override void EndAllCalls() - { - foreach (CodecActiveCallItem activeCall in ActiveCalls) - { - SendText(string.Format("xCommand Call Disconnect CallId: {0}", activeCall.Id)); - } - } - - public override void AcceptCall(CodecActiveCallItem item) - { - SendText("xCommand Call Accept"); - } - - public override void RejectCall(CodecActiveCallItem item) - { - SendText("xCommand Call Reject"); - } - - public override void SendDtmf(string s) - { - if (CallFavorites != null) - { - SendText(string.Format("xCommand Call DTMFSend CallId: {0} DTMFString: \"{1}\"", GetCallId(), s)); - } - } - - public void SelectPresentationSource(int source) - { - PresentationSource = source; - - StartSharing(); - } - - /// - /// Select source 1 as the presetnation source - /// - public void SelectPresentationSource1() - { - SelectPresentationSource(2); - } - - /// - /// Select source 2 as the presetnation source - /// - public void SelectPresentationSource2() - { - SelectPresentationSource(3); - } - - /// - /// Starts presentation sharing - /// - public override void StartSharing() - { - string sendingMode = string.Empty; - - if (IsInCall) - sendingMode = "LocalRemote"; - else - sendingMode = "LocalOnly"; - - if(PresentationSource > 0) - SendText(string.Format("xCommand Presentation Start PresentationSource: {0} SendingMode: {1}", PresentationSource, sendingMode)); - } - - /// - /// Stops sharing the current presentation - /// - public override void StopSharing() - { - PresentationSource = 0; - - SendText("xCommand Presentation Stop"); - } - - public override void PrivacyModeOn() - { - SendText("xCommand Audio Microphones Mute"); - } - - public override void PrivacyModeOff() - { - SendText("xCommand Audio Microphones Unmute"); - } - - public override void PrivacyModeToggle() - { - SendText("xCommand Audio Microphones ToggleMute"); - } - - public override void MuteOff() - { - SendText("xCommand Audio Volume Unmute"); - } - - public override void MuteOn() - { - SendText("xCommand Audio Volume Mute"); - } - - public override void MuteToggle() - { - SendText("xCommand Audio Volume ToggleMute"); - } - - /// - /// Increments the voluem - /// - /// - public override void VolumeUp(bool pressRelease) - { - SendText("xCommand Audio Volume Increase"); - } - - /// - /// Decrements the volume - /// - /// - public override void VolumeDown(bool pressRelease) - { - SendText("xCommand Audio Volume Decrease"); - } - - /// - /// Scales the level and sets the codec to the specified level within its range - /// - /// level from slider (0-65535 range) - public override void SetVolume(ushort level) - { - var scaledLevel = CrestronEnvironment.ScaleWithLimits(level, 65535, 0, 100, 0); - SendText(string.Format("xCommand Audio Volume Set Level: {0}", scaledLevel)); - } - - /// - /// Recalls the default volume on the codec - /// - public void VolumeSetToDefault() - { - SendText("xCommand Audio Volume SetToDefault"); - } - - /// - /// Puts the codec in standby mode - /// - public override void StandbyActivate() - { - SendText("xCommand Standby Activate"); - } - - /// - /// Wakes the codec from standby - /// - public override void StandbyDeactivate() - { - SendText("xCommand Standby Deactivate"); - } - - /// - /// Reboots the codec - /// - public void Reboot() - { - SendText("xCommand SystemUnit Boot Action: Restart"); - } - - /// - /// Sets SelfView Mode based on config - /// - void SetSelfViewMode() - { - if (!IsInCall) - { - SelfviewModeOff(); - } - else - { - if (ShowSelfViewByDefault) - SelfviewModeOn(); - else - SelfviewModeOff(); - } - } - - /// - /// Turns on Selfview Mode - /// - public void SelfviewModeOn() - { - SendText("xCommand Video Selfview Set Mode: On"); - } - - /// - /// Turns off Selfview Mode - /// - public void SelfviewModeOff() - { - SendText("xCommand Video Selfview Set Mode: Off"); - } - - /// - /// Toggles Selfview mode on/off - /// - public void SelfviewModeToggle() - { - string mode = string.Empty; - - if (CodecStatus.Status.Video.Selfview.Mode.BoolValue) - mode = "Off"; - else - mode = "On"; - - SendText(string.Format("xCommand Video Selfview Set Mode: {0}", mode)); - } - - /// - /// Sets a specified position for the selfview PIP window - /// - /// - public void SelfviewPipPositionSet(CodecCommandWithLabel position) - { - SendText(string.Format("xCommand Video Selfview Set Mode: On PIPPosition: {0}", position.Command)); - } - - /// - /// Toggles to the next selfview PIP position - /// - public void SelfviewPipPositionToggle() - { - if (CurrentSelfviewPipPosition != null) - { - var nextPipPositionIndex = SelfviewPipPositions.IndexOf(CurrentSelfviewPipPosition) + 1; - - if (nextPipPositionIndex >= SelfviewPipPositions.Count) // Check if we need to loop back to the first item in the list - nextPipPositionIndex = 0; - - SelfviewPipPositionSet(SelfviewPipPositions[nextPipPositionIndex]); - } - } - - /// - /// Sets a specific local layout - /// - /// - public void LocalLayoutSet(CodecCommandWithLabel layout) - { - SendText(string.Format("xCommand Video Layout LayoutFamily Set Target: local LayoutFamily: {0}", layout.Command)); - } - - /// - /// Toggles to the next local layout - /// - public void LocalLayoutToggle() - { - if(CurrentLocalLayout != null) - { - var nextLocalLayoutIndex = LocalLayouts.IndexOf(CurrentLocalLayout) + 1; - - if (nextLocalLayoutIndex >= LocalLayouts.Count) // Check if we need to loop back to the first item in the list - nextLocalLayoutIndex = 0; - - LocalLayoutSet(LocalLayouts[nextLocalLayoutIndex]); - } - } - - /// - /// - /// - public void MinMaxLayoutToggle() - { - if (PresentationViewMaximizedFeedback.BoolValue) - CurrentPresentationView = "Minimized"; - else - CurrentPresentationView = "Maximized"; - - SendText(string.Format("xCommand Video PresentationView Set View: {0}", CurrentPresentationView)); - PresentationViewMaximizedFeedback.FireUpdate(); - } - - /// - /// Calculates the current selfview PIP position - /// - void ComputeSelfviewPipStatus() - { - CurrentSelfviewPipPosition = SelfviewPipPositions.FirstOrDefault(p => p.Command.ToLower().Equals(CodecStatus.Status.Video.Selfview.PIPPosition.Value.ToLower())); - - if(CurrentSelfviewPipPosition != null) - SelfviewIsOnFeedback.FireUpdate(); - } - - /// - /// Calculates the current local Layout - /// - void ComputeLocalLayout() - { - CurrentLocalLayout = LocalLayouts.FirstOrDefault(l => l.Command.ToLower().Equals(CodecStatus.Status.Video.Layout.LayoutFamily.Local.Value.ToLower())); - - if (CurrentLocalLayout != null) - LocalLayoutFeedback.FireUpdate(); - } - - public void RemoveCallHistoryEntry(CodecCallHistory.CallHistoryEntry entry) - { - SendText(string.Format("xCommand CallHistory DeleteEntry CallHistoryId: {0} AcknowledgeConsecutiveDuplicates: True", entry.OccurrenceHistoryId)); - } - - public class CiscoCodecInfo : VideoCodecInfo - { - public CiscoCodecStatus.RootObject CodecStatus { get; private set; } - - public CiscoCodecConfiguration.RootObject CodecConfiguration { get; private set; } - - public override bool MultiSiteOptionIsEnabled - { - get - { - if (CodecStatus.Status.SystemUnit.Software.OptionKeys.MultiSite.Value.ToLower() == "true") - return true; - else - return false; - } - - } - public override string IpAddress - { - get - { - if (CodecConfiguration.Configuration.Network != null) - { - if (CodecConfiguration.Configuration.Network.Count > 0) - return CodecConfiguration.Configuration.Network[0].IPv4.Address.Value; - } - return string.Empty; - } - } - public override string E164Alias - { - get - { - if (CodecConfiguration.Configuration.H323.H323Alias.E164 != null) - return CodecConfiguration.Configuration.H323.H323Alias.E164.Value; - else - return string.Empty; - } - } - public override string H323Id - { - get - { - if (CodecConfiguration.Configuration.H323.H323Alias.ID != null) - return CodecConfiguration.Configuration.H323.H323Alias.ID.Value; - else - return string.Empty; - } - } - public override string SipPhoneNumber - { - get - { - if (CodecStatus.Status.SIP.Registration.Count > 0) - { - var match = Regex.Match(CodecStatus.Status.SIP.Registration[0].URI.Value, @"(\d+)"); // extract numbers only - if (match.Success) - { - Debug.Console(1, "Extracted phone number as '{0}' from string '{1}'", match.Groups[1].Value, CodecStatus.Status.SIP.Registration[0].URI.Value); - return match.Groups[1].Value; - } - else - { - Debug.Console(1, "Unable to extract phone number from string: '{0}'", CodecStatus.Status.SIP.Registration[0].URI.Value); - return string.Empty; - } - } - else - { - Debug.Console(1, "Unable to extract phone number. No SIP Registration items found"); - return string.Empty; - } - } - } - public override string SipUri - { - get - { - if (CodecStatus.Status.SIP.AlternateURI.Primary.URI.Value != null) - return CodecStatus.Status.SIP.AlternateURI.Primary.URI.Value; - else - return string.Empty; - } - } - public override bool AutoAnswerEnabled - { - get - { - if (CodecConfiguration.Configuration.Conference.AutoAnswer.Mode.Value.ToLower() == "on") - return true; - else - return false; - } - } - - public CiscoCodecInfo(CiscoCodecStatus.RootObject status, CiscoCodecConfiguration.RootObject configuration) - { - CodecStatus = status; - CodecConfiguration = configuration; - } - } - } - - /// - /// Represents a codec command that might need to have a friendly label applied for UI feedback purposes - /// - public class CodecCommandWithLabel - { - public string Command { get; set; } - public string Label { get; set; } - - public CodecCommandWithLabel(string command, string label) - { - Command = command; - Label = label; - } - } - - /// - /// Tracks the initial sycnronization state of the codec when making a connection - /// - public class CodecSyncState : IKeyed - { - bool _InitialSyncComplete; - - public event EventHandler InitialSyncCompleted; - - public string Key { get; private set; } - - public bool InitialSyncComplete - { - get { return _InitialSyncComplete; } - private set - { - if (value == true) - { - var handler = InitialSyncCompleted; - if (handler != null) - handler(this, new EventArgs()); - } - _InitialSyncComplete = value; - } - } - - public bool InitialStatusMessageWasReceived { get; private set; } - - public bool InitialConfigurationMessageWasReceived { get; private set; } - - public bool FeedbackWasRegistered { get; private set; } - - public CodecSyncState(string key) - { - Key = key; - CodecDisconnected(); - } - - public void InitialStatusMessageReceived() - { - InitialStatusMessageWasReceived = true; - Debug.Console(1, this, "Initial Codec Status Message Received."); - CheckSyncStatus(); - } - - public void InitialConfigurationMessageReceived() - { - InitialConfigurationMessageWasReceived = true; - Debug.Console(1, this, "Initial Codec Configuration Message Received."); - CheckSyncStatus(); - } - - public void FeedbackRegistered() - { - FeedbackWasRegistered = true; - Debug.Console(1, this, "Initial Codec Feedback Registration Successful."); - CheckSyncStatus(); - } - - public void CodecDisconnected() - { - InitialConfigurationMessageWasReceived = false; - InitialStatusMessageWasReceived = false; - FeedbackWasRegistered = false; - InitialSyncComplete = false; - } - - void CheckSyncStatus() - { - if (InitialConfigurationMessageWasReceived && InitialStatusMessageWasReceived && FeedbackWasRegistered) - { - InitialSyncComplete = true; - Debug.Console(1, this, "Initial Codec Sync Complete!"); - } - else - InitialSyncComplete = false; - } - } - -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodecPropertiesConfig.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodecPropertiesConfig.cs deleted file mode 100644 index 8763a570..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodecPropertiesConfig.cs +++ /dev/null @@ -1,33 +0,0 @@ -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.Codec -{ - public class CiscoSparkCodecPropertiesConfig - { - public CommunicationMonitorConfig CommunicationMonitorProperties { get; set; } - - public List Favorites { get; set; } - - /// - /// Valid values: "Local" or "Corporate" - /// - public string PhonebookMode { get; set; } - - public bool ShowSelfViewByDefault { get; set; } - - public SharingProperties Sharing { get; set; } - - } - - public class SharingProperties - { - public bool AutoShareContentWhileInCall { get; set; } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/HttpApiServer.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/HttpApiServer.cs deleted file mode 100644 index affe9c2f..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/HttpApiServer.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharp.Net.Http; - -using PepperDash.Core; - - -namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco -{ - public class HttpApiServer - { - public static Dictionary ExtensionContentTypes; - - public event EventHandler ApiRequest; - public Crestron.SimplSharp.Net.Http.HttpServer HttpServer { get; private set; } - - public string HtmlRoot { get; set; } - - - /// - /// SIMPL+ can only execute the default constructor. If you have variables that require initialization, please - /// use an Initialize method - /// - public HttpApiServer() - { - ExtensionContentTypes = new Dictionary - { - { ".css", "text/css" }, - { ".htm", "text/html" }, - { ".html", "text/html" }, - { ".jpg", "image/jpeg" }, - { ".jpeg", "image/jpeg" }, - { ".js", "application/javascript" }, - { ".json", "application/json" }, - { ".xml", "text/xml" }, - { ".map", "application/x-navimap" }, - { ".pdf", "application.pdf" }, - { ".png", "image/png" }, - { ".txt", "text/plain" }, - }; - HtmlRoot = @"\HTML"; - } - - - public void Start(int port) - { - // TEMP - this should be inserted by configuring class - - HttpServer = new Crestron.SimplSharp.Net.Http.HttpServer(); - HttpServer.ServerName = "Cisco API Server"; - HttpServer.KeepAlive = true; - HttpServer.Port = port; - HttpServer.OnHttpRequest += Server_Request; - HttpServer.Open(); - - CrestronEnvironment.ProgramStatusEventHandler += (a) => - { - if (a == eProgramStatusEventType.Stopping) - { - HttpServer.Close(); - Debug.Console(1, "Shutting down HTTP Server on port {0}", HttpServer.Port); - } - }; - } - - void Server_Request(object sender, OnHttpRequestArgs args) - { - if (args.Request.Header.RequestType == "OPTIONS") - { - Debug.Console(2, "Asking for OPTIONS"); - args.Response.Header.SetHeaderValue("Access-Control-Allow-Origin", "*"); - args.Response.Header.SetHeaderValue("Access-Control-Allow-Methods", "GET, POST, PATCH, PUT, DELETE, OPTIONS"); - return; - } - - string path = Uri.UnescapeDataString(args.Request.Path); - var host = args.Request.DataConnection.RemoteEndPointAddress; - //string authToken; - - Debug.Console(2, "HTTP Request: {2}: Path='{0}' ?'{1}'", path, args.Request.QueryString, host); - - // ----------------------------------- ADD AUTH HERE - if (path.StartsWith("/cisco/api")) - { - var handler = ApiRequest; - if (ApiRequest != null) - ApiRequest(this, args); - } - } - - public static string GetContentType(string extension) - { - string type; - if (ExtensionContentTypes.ContainsKey(extension)) - type = ExtensionContentTypes[extension]; - else - type = "text/plain"; - return type; - } - - } - -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/PhonebookDataClasses.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/PhonebookDataClasses.cs deleted file mode 100644 index 0bd000bd..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/PhonebookDataClasses.cs +++ /dev/null @@ -1,397 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Core; -using PepperDash.Essentials.Devices.Common.Codec; - -namespace PepperDash.Essentials.Devices.Common.VideoCodec -{ - public class CiscoCodecPhonebook - { - public class Offset - { - public string Value { get; set; } - } - - public class Limit - { - public string Value { get; set; } - } - - public class TotalRows - { - public string Value { get; set; } - } - - public class ResultInfo - { - public Offset Offset { get; set; } - public Limit Limit { get; set; } - public TotalRows TotalRows { get; set; } - } - - public class LocalId - { - public string Value { get; set; } - } - - public class FolderId - { - public string Value { get; set; } - } - - public class ParentFolderId - { - public string Value { get; set; } - } - - public class Name - { - public string Value { get; set; } - } - - public class Folder - { - public string id { get; set; } - public LocalId LocalId { get; set; } - public FolderId FolderId { get; set; } - public Name Name { get; set; } - public ParentFolderId ParentFolderId { get; set; } - } - - public class Name2 - { - public string Value { get; set; } - } - - public class ContactId - { - public string Value { get; set; } - } - - public class FolderId2 - { - public string Value { get; set; } - } - - public class Title - { - public string Value { get; set; } - } - - public class ContactMethodId - { - public string Value { get; set; } - } - - public class Number - { - public string Value { get; set; } - } - - public class Device - { - public string Value { get; set; } - } - - public class CallType - { - public string Value { get; set; } - } - - public class ContactMethod - { - public string id { get; set; } - public ContactMethodId ContactMethodId { get; set; } - public Number Number { get; set; } - public Device Device { get; set; } - public CallType CallType { get; set; } - - public ContactMethod() - { - ContactMethodId = new ContactMethodId(); - Number = new Number(); - Device = new Device(); - CallType = new CallType(); - } - } - - public class Contact - { - public string id { get; set; } - public Name2 Name { get; set; } - public ContactId ContactId { get; set; } - public FolderId2 FolderId { get; set; } - public Title Title { get; set; } - public List ContactMethod { get; set; } - - public Contact() - { - Name = new Name2(); - ContactId = new ContactId(); - FolderId = new FolderId2(); - Title = new Title(); - ContactMethod = new List(); - } - } - - public class PhonebookSearchResult - { - public string status { get; set; } - public ResultInfo ResultInfo { get; set; } - public List Folder { get; set; } - public List Contact { get; set; } - - public PhonebookSearchResult() - { - Folder = new List(); - Contact = new List(); - ResultInfo = new ResultInfo(); - } - } - - public class CommandResponse - { - public PhonebookSearchResult PhonebookSearchResult { get; set; } - } - - public class RootObject - { - public CommandResponse CommandResponse { get; set; } - - } - - - /// - /// Extracts the folders with no ParentFolder and returns them sorted alphabetically - /// - /// - /// - public static List GetRootFoldersFromSearchResult(PhonebookSearchResult result) - { - var rootFolders = new List(); - - if (result.Folder.Count == 0) - { - return null; - } - else if (result.Folder.Count > 0) - { - if (Debug.Level > 0) - Debug.Console(1, "Phonebook Folders:\n"); - - foreach (Folder f in result.Folder) - { - var folder = new DirectoryFolder(); - - folder.Name = f.Name.Value; - folder.FolderId = f.FolderId.Value; - - if (f.ParentFolderId == null) - rootFolders.Add(folder); - - if (Debug.Level > 0) - Debug.Console(1, "+ {0}", folder.Name); - } - } - - rootFolders.OrderBy(f => f.Name); - - return rootFolders; - } - - - /// - /// Extracts the contacts with no FolderId and returns them sorted alphabetically - /// - /// - /// - public static List GetRootContactsFromSearchResult(PhonebookSearchResult result) - { - var rootContacts = new List(); - - if (result.Contact.Count == 0) - { - return null; - } - else if (result.Contact.Count > 0) - { - if (Debug.Level > 0) - Debug.Console(1, "Root Contacts:\n"); - - foreach (Contact c in result.Contact) - { - var contact = new DirectoryContact(); - - if (string.IsNullOrEmpty(c.FolderId.Value)) - { - contact.Name = c.Name.Value; - contact.ContactId = c.ContactId.Value; - - if(!string.IsNullOrEmpty(c.Title.Value)) - contact.Title = c.Title.Value; - - if (Debug.Level > 0) - Debug.Console(1, "{0}\nContact Methods:", contact.Name); - - foreach (ContactMethod m in c.ContactMethod) - { - - var tempContactMethod = new PepperDash.Essentials.Devices.Common.Codec.ContactMethod(); - - eContactMethodCallType callType = eContactMethodCallType.Unknown; - if (!string.IsNullOrEmpty(m.CallType.Value)) - { - if (!string.IsNullOrEmpty(m.CallType.Value)) - { - if (m.CallType.Value.ToLower() == "audio") - callType = eContactMethodCallType.Audio; - else if (m.CallType.Value.ToLower() == "video") - callType = eContactMethodCallType.Video; - - tempContactMethod.CallType = callType; - } - } - - eContactMethodDevice device = eContactMethodDevice.Unknown; - if (!string.IsNullOrEmpty(m.Device.Value)) - { - - if (m.Device.Value.ToLower() == "mobile") - device = eContactMethodDevice.Mobile; - else if (m.Device.Value.ToLower() == "telephone") - device = eContactMethodDevice.Telephone; - else if (m.Device.Value.ToLower() == "video") - device = eContactMethodDevice.Video; - else if (m.Device.Value.ToLower() == "other") - device = eContactMethodDevice.Other; - - tempContactMethod.Device = device; - } - - if (Debug.Level > 0) - Debug.Console(1, "Number: {0}", m.Number.Value); - - tempContactMethod.Number = m.Number.Value; - tempContactMethod.ContactMethodId = m.ContactMethodId.Value; - - contact.ContactMethods.Add(tempContactMethod); - } - rootContacts.Add(contact); - } - } - } - - rootContacts.OrderBy(f => f.Name); - - return rootContacts; - } - - - /// - /// Converts data returned from a cisco codec to the generic Directory format. - /// - /// - /// - /// - public static CodecDirectory ConvertCiscoPhonebookToGeneric(PhonebookSearchResult result) - { - var directory = new Codec.CodecDirectory(); - - var folders = new List(); - - var contacts = new List(); - - try - { - if (result.Folder.Count > 0) - { - foreach (Folder f in result.Folder) - { - var folder = new DirectoryFolder(); - - folder.Name = f.Name.Value; - folder.FolderId = f.FolderId.Value; - - if (f.ParentFolderId != null) - { - folder.ParentFolderId = f.ParentFolderId.Value; - } - - folders.Add(folder); - } - - folders.OrderBy(f => f.Name); - - directory.AddFoldersToDirectory(folders); - } - - if (result.Contact.Count > 0) - { - foreach (Contact c in result.Contact) - { - var contact = new DirectoryContact(); - - contact.Name = c.Name.Value; - contact.ContactId = c.ContactId.Value; - if (!string.IsNullOrEmpty(c.Title.Value)) - contact.Title = c.Title.Value; - - if (c.FolderId != null) - { - contact.FolderId = c.FolderId.Value; - } - - foreach (ContactMethod m in c.ContactMethod) - { - eContactMethodCallType callType = eContactMethodCallType.Unknown; - if (!string.IsNullOrEmpty(m.CallType.Value)) - { - if (m.CallType.Value.ToLower() == "audio") - callType = eContactMethodCallType.Audio; - else if (m.CallType.Value.ToLower() == "video") - callType = eContactMethodCallType.Video; - } - - eContactMethodDevice device = eContactMethodDevice.Unknown; - - if (!string.IsNullOrEmpty(m.Device.Value)) - { - if (m.Device.Value.ToLower() == "mobile") - device = eContactMethodDevice.Mobile; - else if (m.Device.Value.ToLower() == "telephone") - device = eContactMethodDevice.Telephone; - else if (m.Device.Value.ToLower() == "video") - device = eContactMethodDevice.Video; - else if (m.Device.Value.ToLower() == "other") - device = eContactMethodDevice.Other; - } - - contact.ContactMethods.Add(new PepperDash.Essentials.Devices.Common.Codec.ContactMethod() - { - Number = m.Number.Value, - ContactMethodId = m.ContactMethodId.Value, - CallType = callType, - Device = device - }); - } - contacts.Add(contact); - } - - contacts.OrderBy(c => c.Name); - - directory.AddContactsToDirectory(contacts); - } - } - catch (Exception e) - { - Debug.Console(1, "Error converting Cisco Phonebook results to generic: {0}", e); - } - - return directory; - } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xConfiguration.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xConfiguration.cs deleted file mode 100644 index 60256e52..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xConfiguration.cs +++ /dev/null @@ -1,1807 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -using Crestron.SimplSharp; - -using PepperDash.Core; - -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - - -namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco -{ - /// - /// This class exists to capture serialized data sent back by a Cisco codec in JSON output mode - /// - public class CiscoCodecConfiguration - { - public class DefaultVolume - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Dereverberation - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class NoiseReduction - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class EchoControl - { - public Dereverberation Dereverberation { get; set; } - public Mode Mode { get; set; } - public NoiseReduction NoiseReduction { get; set; } - } - - public class Level - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Microphone - { - public string id { get; set; } - public EchoControl EchoControl { get; set; } - public Level Level { get; set; } - public Mode2 Mode { get; set; } - } - - public class Input - { - public List Microphone { get; set; } - } - - public class Enabled - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mute - { - public Enabled Enabled { get; set; } - } - - public class Microphones - { - public Mute Mute { get; set; } - } - - public class Mode3 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class InternalSpeaker - { - public Mode3 Mode { get; set; } - } - - public class Output - { - public InternalSpeaker InternalSpeaker { get; set; } - } - - public class RingTone - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class RingVolume - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class SoundsAndAlerts - { - public RingTone RingTone { get; set; } - public RingVolume RingVolume { get; set; } - } - - public class Audio - { - public DefaultVolume DefaultVolume { get; set; } - public Input Input { get; set; } - public Microphones Microphones { get; set; } - public Output Output { get; set; } - public SoundsAndAlerts SoundsAndAlerts { get; set; } - } - - public class DefaultMode - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Backlight - { - public DefaultMode DefaultMode { get; set; } - } - - public class DefaultLevel - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode4 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Brightness - { - public DefaultLevel DefaultLevel { get; set; } - public Mode4 Mode { get; set; } - } - - public class Mode5 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Focus - { - public Mode5 Mode { get; set; } - } - - public class Level2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode6 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Gamma - { - public Level2 Level { get; set; } - public Mode6 Mode { get; set; } - } - - public class Mirror - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Level3 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode7 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Whitebalance - { - public Level3 Level { get; set; } - public Mode7 Mode { get; set; } - } - - public class Framerate - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Camera - { - public string id { get; set; } - public Framerate Framerate { get; set; } - public Backlight Backlight { get; set; } - public Brightness Brightness { get; set; } - public Focus Focus { get; set; } - public Gamma Gamma { get; set; } - public Mirror Mirror { get; set; } - public Whitebalance Whitebalance { get; set; } - } - - public class Closeup - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode8 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class SpeakerTrack - { - public Closeup Closeup { get; set; } - public Mode8 Mode { get; set; } - } - - public class Cameras - { - //[JsonConverter(typeof(CameraConverter)), JsonProperty("Camera")] - //public List Camera { get; set; } - //[JsonProperty("SpeakerTrack")] - public SpeakerTrack SpeakerTrack { get; set; } - - public Cameras() - { - //Camera = new List(); - SpeakerTrack = new SpeakerTrack(); - } - } - - public class CameraConverter : JsonConverter - { - // this is currently not working - public override bool CanConvert(System.Type objectType) - { - return objectType == typeof(Camera) || objectType == typeof(List); // This should not be called but is required for implmentation - } - - public override object ReadJson(JsonReader reader, System.Type objectType, object existingValue, JsonSerializer serializer) - { - try - { - if (reader.TokenType == JsonToken.StartArray) - { - var l = new List(); - reader.Read(); - while (reader.TokenType != JsonToken.EndArray) - { - l.Add(reader.Value as Camera); - reader.Read(); - } - Debug.Console(1, "[xConfiguration]: Cameras converted as list"); - return l; - } - else - { - Debug.Console(1, "[xConfiguration]: Camera converted as single object and added to list"); - return new List { reader.Value as Camera }; - } - } - catch (Exception e) - { - Debug.Console(1, "[xConfiguration]: Unable to convert JSON for camera objects: {0}", e); - - return new List(); - } - } - - public override bool CanWrite - { - get - { - return false; - } - } - - public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) - { - throw new NotImplementedException("Write not implemented"); - } - } - - public class Delay - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode9 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mute2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class AutoAnswer - { - public Delay Delay { get; set; } - public Mode9 Mode { get; set; } - public Mute2 Mute { get; set; } - } - - public class Protocol - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Rate - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class DefaultCall - { - public Protocol Protocol { get; set; } - public Rate Rate { get; set; } - } - - public class DefaultTimeout - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class DoNotDisturb - { - public DefaultTimeout DefaultTimeout { get; set; } - } - - public class Mode10 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Encryption - { - public Mode10 Mode { get; set; } - } - - public class Mode11 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class FarEndControl - { - public Mode11 Mode { get; set; } - } - - public class MaxReceiveCallRate - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class MaxTotalReceiveCallRate - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class MaxTotalTransmitCallRate - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class MaxTransmitCallRate - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode12 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class MultiStream - { - public Mode12 Mode { get; set; } - } - - public class Conference - { - public AutoAnswer AutoAnswer { get; set; } - public DefaultCall DefaultCall { get; set; } - public DoNotDisturb DoNotDisturb { get; set; } - public Encryption Encryption { get; set; } - public FarEndControl FarEndControl { get; set; } - public MaxReceiveCallRate MaxReceiveCallRate { get; set; } - public MaxTotalReceiveCallRate MaxTotalReceiveCallRate { get; set; } - public MaxTotalTransmitCallRate MaxTotalTransmitCallRate { get; set; } - public MaxTransmitCallRate MaxTransmitCallRate { get; set; } - public MultiStream MultiStream { get; set; } - } - - public class LoginName - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode13 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Password - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Authentication - { - public LoginName LoginName { get; set; } - public Mode13 Mode { get; set; } - public Password Password { get; set; } - } - - public class Mode14 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class CallSetup - { - public Mode14 Mode { get; set; } - } - - public class KeySize - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Encryption2 - { - public KeySize KeySize { get; set; } - } - - public class Address - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Gatekeeper - { - public Address Address { get; set; } - } - - public class E164 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class ID - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class H323Alias - { - public E164 E164 { get; set; } - public ID ID { get; set; } - } - - public class Address2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode15 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class NAT - { - public Address2 Address { get; set; } - public Mode15 Mode { get; set; } - } - - public class H323 - { - public Authentication Authentication { get; set; } - public CallSetup CallSetup { get; set; } - public Encryption2 Encryption { get; set; } - public Gatekeeper Gatekeeper { get; set; } - public H323Alias H323Alias { get; set; } - public NAT NAT { get; set; } - } - - public class Name - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Domain - { - public Name Name { get; set; } - } - - public class Address3 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Server - { - public string id { get; set; } - public Address3 Address { get; set; } - } - - public class DNS - { - public Domain Domain { get; set; } - public List Server { get; set; } - } - - public class AnonymousIdentity - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Md5 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Peap - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Tls - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Ttls - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Eap - { - public Md5 Md5 { get; set; } - public Peap Peap { get; set; } - public Tls Tls { get; set; } - public Ttls Ttls { get; set; } - } - - public class Identity - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode16 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Password2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class TlsVerify - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class UseClientCertificate - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class IEEE8021X - { - public AnonymousIdentity AnonymousIdentity { get; set; } - public Eap Eap { get; set; } - public Identity Identity { get; set; } - public Mode16 Mode { get; set; } - public Password2 Password { get; set; } - public TlsVerify TlsVerify { get; set; } - public UseClientCertificate UseClientCertificate { get; set; } - } - - public class IPStack - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Address4 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Assignment - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Gateway - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class SubnetMask - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class IPv4 - { - public Address4 Address { get; set; } - public Assignment Assignment { get; set; } - public Gateway Gateway { get; set; } - public SubnetMask SubnetMask { get; set; } - } - - public class Address5 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Assignment2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class DHCPOptions - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Gateway2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class IPv6 - { - public Address5 Address { get; set; } - public Assignment2 Assignment { get; set; } - public DHCPOptions DHCPOptions { get; set; } - public Gateway2 Gateway { get; set; } - } - - public class MTU - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Audio2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Data - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class ICMPv6 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class NTP - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Signalling - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Video - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Diffserv - { - public Audio2 Audio { get; set; } - public Data Data { get; set; } - public ICMPv6 ICMPv6 { get; set; } - public NTP NTP { get; set; } - public Signalling Signalling { get; set; } - public Video Video { get; set; } - } - - public class Mode17 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class QoS - { - public Diffserv Diffserv { get; set; } - public Mode17 Mode { get; set; } - } - - public class Allow - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class RemoteAccess - { - public Allow Allow { get; set; } - } - - public class Speed - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode18 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class VlanId - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Voice - { - public Mode18 Mode { get; set; } - public VlanId VlanId { get; set; } - } - - public class VLAN - { - public Voice Voice { get; set; } - } - - public class Network - { - public string id { get; set; } - public DNS DNS { get; set; } - public IEEE8021X IEEE8021X { get; set; } - public IPStack IPStack { get; set; } - public IPv4 IPv4 { get; set; } - public IPv6 IPv6 { get; set; } - public MTU MTU { get; set; } - public QoS QoS { get; set; } - public RemoteAccess RemoteAccess { get; set; } - public Speed Speed { get; set; } - public VLAN VLAN { get; set; } - } - - public class Mode19 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class CDP - { - public Mode19 Mode { get; set; } - } - - public class Mode20 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class H3232 - { - public Mode20 Mode { get; set; } - } - - public class Mode21 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class HTTP - { - public Mode21 Mode { get; set; } - } - - public class MinimumTLSVersion - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Server2 - { - public MinimumTLSVersion MinimumTLSVersion { get; set; } - } - - public class StrictTransportSecurity - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class VerifyClientCertificate - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class VerifyServerCertificate - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class HTTPS - { - public Server2 Server { get; set; } - public StrictTransportSecurity StrictTransportSecurity { get; set; } - public VerifyClientCertificate VerifyClientCertificate { get; set; } - public VerifyServerCertificate VerifyServerCertificate { get; set; } - } - - public class Mode22 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Address6 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Server3 - { - public string id { get; set; } - public Address6 Address { get; set; } - } - - public class NTP2 - { - public Mode22 Mode { get; set; } - public List Server { get; set; } - } - - public class Mode23 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class SIP - { - public Mode23 Mode { get; set; } - } - - public class CommunityName - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Address7 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Host - { - public string id { get; set; } - public Address7 Address { get; set; } - } - - public class Mode24 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class SystemContact - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class SystemLocation - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class SNMP - { - public CommunityName CommunityName { get; set; } - public List Host { get; set; } - public Mode24 Mode { get; set; } - public SystemContact SystemContact { get; set; } - public SystemLocation SystemLocation { get; set; } - } - - public class Mode25 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class SSH - { - public Mode25 Mode { get; set; } - } - - public class Mode26 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class UPnP - { - public Mode26 Mode { get; set; } - } - - public class WelcomeText - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class NetworkServices - { - public CDP CDP { get; set; } - public H3232 H323 { get; set; } - public HTTP HTTP { get; set; } - public HTTPS HTTPS { get; set; } - public NTP2 NTP { get; set; } - public SIP SIP { get; set; } - public SNMP SNMP { get; set; } - public SSH SSH { get; set; } - public UPnP UPnP { get; set; } - public WelcomeText WelcomeText { get; set; } - } - - public class Cameras2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class ControlSystems - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class TouchPanels - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Profile - { - public Cameras2 Cameras { get; set; } - public ControlSystems ControlSystems { get; set; } - public TouchPanels TouchPanels { get; set; } - } - - public class Peripherals - { - public Profile Profile { get; set; } - } - - public class ID2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Type - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class URL - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Server4 - { - public string id { get; set; } - public ID2 ID { get; set; } - public Type Type { get; set; } - public URL URL { get; set; } - } - - public class Phonebook - { - public List Server { get; set; } - } - - public class Connectivity - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Address8 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class AlternateAddress - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Domain2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Path - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Protocol2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class ExternalManager - { - public Address8 Address { get; set; } - public AlternateAddress AlternateAddress { get; set; } - public Domain2 Domain { get; set; } - public Path Path { get; set; } - public Protocol2 Protocol { get; set; } - } - - public class HttpMethod - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class LoginName2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode27 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Password3 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Provisioning - { - public Connectivity Connectivity { get; set; } - public ExternalManager ExternalManager { get; set; } - public HttpMethod HttpMethod { get; set; } - public LoginName2 LoginName { get; set; } - public Mode27 Mode { get; set; } - public Password3 Password { get; set; } - } - - public class Mode28 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class CallControl - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class FromClients - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class ToClients - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class ContentShare - { - public FromClients FromClients { get; set; } - public ToClients ToClients { get; set; } - } - - public class Services - { - public CallControl CallControl { get; set; } - public ContentShare ContentShare { get; set; } - } - - public class Proximity - { - public Mode28 Mode { get; set; } - public Services Services { get; set; } - } - - public class PeopleCountOutOfCall - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class PeoplePresenceDetector - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class RoomAnalytics - { - public PeopleCountOutOfCall PeopleCountOutOfCall { get; set; } - public PeoplePresenceDetector PeoplePresenceDetector { get; set; } - } - - public class Password4 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class UserName - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Authentication2 - { - public Password4 Password { get; set; } - public UserName UserName { get; set; } - } - - public class DefaultTransport - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class DisplayName - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class DefaultCandidate - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode29 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Ice - { - public DefaultCandidate DefaultCandidate { get; set; } - public Mode29 Mode { get; set; } - } - - public class ListenPort - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Address9 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Proxy - { - public string id { get; set; } - public Address9 Address { get; set; } - } - - public class Password5 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Server5 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class UserName2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Turn - { - public Password5 Password { get; set; } - public Server5 Server { get; set; } - public UserName2 UserName { get; set; } - } - - public class URI - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class SIP2 - { - public Authentication2 Authentication { get; set; } - public DefaultTransport DefaultTransport { get; set; } - public DisplayName DisplayName { get; set; } - public Ice Ice { get; set; } - public ListenPort ListenPort { get; set; } - public List Proxy { get; set; } - public Turn Turn { get; set; } - public URI URI { get; set; } - } - - public class BaudRate - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class LoginRequired - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode30 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class SerialPort - { - public BaudRate BaudRate { get; set; } - public LoginRequired LoginRequired { get; set; } - public Mode30 Mode { get; set; } - } - - public class BootAction - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Control - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Delay2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class StandbyAction - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class WakeupAction - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Standby - { - public BootAction BootAction { get; set; } - public Control Control { get; set; } - public Delay2 Delay { get; set; } - public StandbyAction StandbyAction { get; set; } - public WakeupAction WakeupAction { get; set; } - } - - public class Name2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class SystemUnit - { - public Name2 Name { get; set; } - } - - public class DateFormat - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class TimeFormat - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Zone - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Time - { - public DateFormat DateFormat { get; set; } - public TimeFormat TimeFormat { get; set; } - public Zone Zone { get; set; } - } - - public class Type2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class ContactInfo - { - public Type2 Type { get; set; } - } - - public class Mode31 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class KeyTones - { - public Mode31 Mode { get; set; } - } - - public class Language - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Output2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class OSD - { - public Output2 Output { get; set; } - } - - public class UserInterface - { - public ContactInfo ContactInfo { get; set; } - public KeyTones KeyTones { get; set; } - public Language Language { get; set; } - public OSD OSD { get; set; } - } - - public class Filter - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Group - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Admin - { - public Filter Filter { get; set; } - public Group Group { get; set; } - } - - public class Attribute - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class BaseDN - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Encryption3 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class MinimumTLSVersion2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode32 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Address10 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Port - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Server6 - { - public Address10 Address { get; set; } - public Port Port { get; set; } - } - - public class VerifyServerCertificate2 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class LDAP - { - public Admin Admin { get; set; } - public Attribute Attribute { get; set; } - public BaseDN BaseDN { get; set; } - public Encryption3 Encryption { get; set; } - public MinimumTLSVersion2 MinimumTLSVersion { get; set; } - public Mode32 Mode { get; set; } - public Server6 Server { get; set; } - public VerifyServerCertificate2 VerifyServerCertificate { get; set; } - } - - public class UserManagement - { - public LDAP LDAP { get; set; } - } - - public class DefaultMainSource - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class CameraId - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode33 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class CameraControl - { - public CameraId CameraId { get; set; } - public Mode33 Mode { get; set; } - } - - public class InputSourceType - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Name3 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class PreferredResolution - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class PresentationSelection - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Quality - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Visibility - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Connector - { - public string id { get; set; } - public CameraControl CameraControl { get; set; } - public InputSourceType InputSourceType { get; set; } - public Name3 Name { get; set; } - public PreferredResolution PreferredResolution { get; set; } - public PresentationSelection PresentationSelection { get; set; } - public Quality Quality { get; set; } - public Visibility Visibility { get; set; } - } - - public class Input2 - { - public List Connector { get; set; } - } - - public class Monitors - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode34 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class CEC - { - public Mode34 Mode { get; set; } - } - - public class MonitorRole - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Resolution - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Connector2 - { - public string id { get; set; } - public CEC CEC { get; set; } - public MonitorRole MonitorRole { get; set; } - public Resolution Resolution { get; set; } - } - - public class Output3 - { - public List Connector { get; set; } - } - - public class DefaultSource - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Presentation - { - public DefaultSource DefaultSource { get; set; } - } - - public class FullscreenMode - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode35 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class OnMonitorRole - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class PIPPosition - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Default - { - public FullscreenMode FullscreenMode { get; set; } - public Mode35 Mode { get; set; } - public OnMonitorRole OnMonitorRole { get; set; } - public PIPPosition PIPPosition { get; set; } - } - - public class Duration - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class Mode36 - { - public string valueSpaceRef { get; set; } - public string Value { get; set; } - } - - public class OnCall - { - public Duration Duration { get; set; } - public Mode36 Mode { get; set; } - } - - public class Selfview - { - public Default Default { get; set; } - public OnCall OnCall { get; set; } - } - - public class Video2 - { - public DefaultMainSource DefaultMainSource { get; set; } - public Input2 Input { get; set; } - public Monitors Monitors { get; set; } - public Output3 Output { get; set; } - public Presentation Presentation { get; set; } - public Selfview Selfview { get; set; } - } - - public class Configuration - { - public Audio Audio { get; set; } - public Cameras Cameras { get; set; } - public Conference Conference { get; set; } - public H323 H323 { get; set; } - public List Network { get; set; } - public NetworkServices NetworkServices { get; set; } - public Peripherals Peripherals { get; set; } - public Phonebook Phonebook { get; set; } - public Provisioning Provisioning { get; set; } - public Proximity Proximity { get; set; } - public RoomAnalytics RoomAnalytics { get; set; } - public SIP2 SIP { get; set; } - public SerialPort SerialPort { get; set; } - public Standby Standby { get; set; } - public SystemUnit SystemUnit { get; set; } - public Time Time { get; set; } - public UserInterface UserInterface { get; set; } - public UserManagement UserManagement { get; set; } - public Video2 Video { get; set; } - } - - public class RootObject - { - public Configuration Configuration { get; set; } - } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xEvent.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xEvent.cs deleted file mode 100644 index 884b166c..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xEvent.cs +++ /dev/null @@ -1,141 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco -{ - /// - /// This class exists to capture serialized data sent back by a Cisco codec in JSON output mode - /// - public class CiscoCodecEvents - { - public class CauseValue - { - public string id { get; set; } - public string Value { get; set; } - } - - public class CauseType - { - public string id { get; set; } - public string Value { get; set; } - } - - public class CauseString - { - public string id { get; set; } - public string Value { get; set; } - } - - public class OrigCallDirection - { - public string id { get; set; } - public string Value { get; set; } - } - - public class RemoteURI - { - public string id { get; set; } - public string Value { get; set; } - } - - public class DisplayName - { - public string id { get; set; } - public string Value { get; set; } - } - - public class CallId - { - public string id { get; set; } - public string Value { get; set; } - } - - public class CauseCode - { - public string id { get; set; } - public string Value { get; set; } - } - - public class CauseOrigin - { - public string id { get; set; } - public string Value { get; set; } - } - - public class Protocol - { - public string id { get; set; } - public string Value { get; set; } - } - - public class Duration - { - public string id { get; set; } - public string Value { get; set; } - } - - public class CallType - { - public string id { get; set; } - public string Value { get; set; } - } - - public class CallRate - { - public string id { get; set; } - public string Value { get; set; } - } - - public class Encryption - { - public string id { get; set; } - public string Value { get; set; } - } - - public class RequestedURI - { - public string id { get; set; } - public string Value { get; set; } - } - - public class PeopleCountAverage - { - public string id { get; set; } - public string Value { get; set; } - } - - public class CallDisconnect - { - public string id { get; set; } - public CauseValue CauseValue { get; set; } - public CauseType CauseType { get; set; } - public CauseString CauseString { get; set; } - public OrigCallDirection OrigCallDirection { get; set; } - public RemoteURI RemoteURI { get; set; } - public DisplayName DisplayName { get; set; } - public CallId CallId { get; set; } - public CauseCode CauseCode { get; set; } - public CauseOrigin CauseOrigin { get; set; } - public Protocol Protocol { get; set; } - public Duration Duration { get; set; } - public CallType CallType { get; set; } - public CallRate CallRate { get; set; } - public Encryption Encryption { get; set; } - public RequestedURI RequestedURI { get; set; } - public PeopleCountAverage PeopleCountAverage { get; set; } - } - - public class Event - { - public CallDisconnect CallDisconnect { get; set; } - } - - public class RootObject - { - public Event Event { get; set; } - } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs deleted file mode 100644 index 5b7c8b82..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs +++ /dev/null @@ -1,2007 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharp.CrestronXml.Serialization; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -using PepperDash.Core; - -namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco -{ - /// - /// This class exists to capture serialized data sent back by a Cisco codec in JSON output mode - /// - public class CiscoCodecStatus - { - // Helper Classes for Proerties - public abstract class ValueProperty - { - /// - /// Triggered when Value is set - /// - public Action ValueChangedAction { get; set; } - - protected void OnValueChanged() - { - var a = ValueChangedAction; - if (a != null) - a(); - } - - } - - - public class ConnectionStatus - { - public string Value { get; set; } - } - - public class EcReferenceDelay - { - public string Value { get; set; } - } - - public class Microphone - { - public string id { get; set; } - public ConnectionStatus ConnectionStatus { get; set; } - public EcReferenceDelay EcReferenceDelay { get; set; } - } - - public class Connectors - { - public List Microphone { get; set; } - } - - public class Input - { - public Connectors Connectors { get; set; } - } - - public class Mute : ValueProperty - { - public bool BoolValue { get; private set; } - - public string Value - { - set - { - // If the incoming value is "On" it sets the BoolValue true, otherwise sets it false - BoolValue = value == "On"; - OnValueChanged(); - } - } - } - - public class Microphones - { - public Mute Mute { get; set; } - - public Microphones() - { - Mute = new Mute(); - } - } - - public class ConnectionStatus2 - { - public string Value { get; set; } - } - - public class DelayMs - { - public string Value { get; set; } - } - - public class Line - { - public string id { get; set; } - public ConnectionStatus2 ConnectionStatus { get; set; } - public DelayMs DelayMs { get; set; } - } - - public class Connectors2 - { - public List Line { get; set; } - } - - public class Output - { - public Connectors2 Connectors { get; set; } - } - - public class Volume : ValueProperty - { - string _Value; - - /// - /// Sets Value and triggers the action when set - /// - public string Value - { - get - { - return _Value; - } - set - { - _Value = value; - OnValueChanged(); - } - } - - /// - /// Converted value of _Value for use as feedback - /// - public int IntValue - { - get - { - if (!string.IsNullOrEmpty(_Value)) - return Convert.ToInt32(_Value); - else - return 0; - } - } - } - - public class VolumeMute : ValueProperty - { - public bool BoolValue { get; private set; } - - public string Value - { - set - { - // If the incoming value is "On" it sets the BoolValue true, otherwise sets it false - BoolValue = value == "On"; - OnValueChanged(); - } - } - } - - public class Audio - { - public Input Input { get; set; } - public Microphones Microphones { get; set; } // Can we have this setter fire the update on the CiscoCodec feedback? - public Output Output { get; set; } - public Volume Volume { get; set; } - public VolumeMute VolumeMute { get; set; } - - public Audio() - { - Volume = new Volume(); - VolumeMute = new VolumeMute(); - Microphones = new Microphones(); - } - } - - public class Id - { - public string Value { get; set; } - } - - public class Current - { - public Id Id { get; set; } - } - - public class Bookings - { - public Current Current { get; set; } - } - - public class Options - { - public string Value { get; set; } - } - - public class Capabilities - { - public Options Options { get; set; } - } - - public class Connected - { - public string Value { get; set; } - } - - public class Framerate - { - public string Value { get; set; } - } - - public class Flip - { - public string Value { get; set; } - } - - public class HardwareID - { - public string Value { get; set; } - } - - public class Manufacturer - { - public string Value { get; set; } - } - - public class Model - { - public string Value { get; set; } - } - - public class Pan - { - public string Value { get; set; } - } - - public class Tilt - { - public string Value { get; set; } - } - - public class Zoom - { - public string Value { get; set; } - } - - public class Position - { - public Pan Pan { get; set; } - public Tilt Tilt { get; set; } - public Zoom Zoom { get; set; } - } - - public class SoftwareID - { - public string Value { get; set; } - } - - public class Camera - { - public string id { get; set; } - public Capabilities Capabilities { get; set; } - public Connected Connected { get; set; } - public Flip Flip { get; set; } - public HardwareID HardwareID { get; set; } - public MacAddress MacAddress { get; set; } - public Manufacturer Manufacturer { get; set; } - public Model Model { get; set; } - public Position Position { get; set; } - public SerialNumber SerialNumber { get; set; } - public SoftwareID SoftwareID { get; set; } - } - - public class Availability - { - public string Value { get; set; } - } - - public class Status2 : ValueProperty - { - string _Value; - public bool BoolValue { get; private set; } - - public string Value - { - get - { - return _Value; - } - set - { - // If the incoming value is "Active" it sets the BoolValue true, otherwise sets it false - _Value = value; - BoolValue = value == "Active"; - OnValueChanged(); - } - } - } - - public class SpeakerTrack - { - public Availability Availability { get; set; } - public Status2 Status { get; set; } - - public SpeakerTrack() - { - Status = new Status2(); - } - } - - public class Cameras - { - // [JsonConverter(typeof(CameraConverter))] - public List Camera { get; set; } - public SpeakerTrack SpeakerTrack { get; set; } - - public Cameras() - { - Camera = new List(); - SpeakerTrack = new SpeakerTrack(); - } - } - - //public class CameraConverter : JsonConverter - //{ - - // public override bool CanConvert(System.Type objectType) - // { - // return true; // objectType == typeof(Camera) || objectType == typeof(List); // This should not be called but is required for implmentation - // } - - // public override object ReadJson(JsonReader reader, System.Type objectType, object existingValue, JsonSerializer serializer) - // { - // try - // { - // if (reader.TokenType == JsonToken.StartArray) - // { - // var l = new List(); - // reader.Read(); - // while (reader.TokenType != JsonToken.EndArray) - // { - // l.Add(reader.Value as Camera); - // reader.Read(); - // } - // Debug.Console(1, "[xStatus]: Cameras converted as list"); - // return l; - // } - // else - // { - // Debug.Console(1, "[xStatus]: Camera converted as single object and added to list"); - // return new List { reader.Value as Camera }; - // } - // } - // catch (Exception e) - // { - // Debug.Console(1, "[xStatus]: Unable to convert JSON for camera objects: {0}", e); - - // return new List(); - // } - // } - - // public override bool CanWrite - // { - // get - // { - // return false; - // } - // } - - // public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) - // { - // throw new NotImplementedException("Write not implemented"); - // } - //} - - - public class MaxActiveCalls - { - public string Value { get; set; } - } - - public class MaxAudioCalls - { - public string Value { get; set; } - } - - public class MaxCalls - { - public string Value { get; set; } - } - - public class MaxVideoCalls - { - public string Value { get; set; } - } - - public class Conference - { - public MaxActiveCalls MaxActiveCalls { get; set; } - public MaxAudioCalls MaxAudioCalls { get; set; } - public MaxCalls MaxCalls { get; set; } - public MaxVideoCalls MaxVideoCalls { get; set; } - } - - public class Capabilities2 - { - public Conference Conference { get; set; } - } - - public class CallId - { - public string Value { get; set; } - } - - public class ActiveSpeaker - { - public CallId CallId { get; set; } - } - - public class DoNotDisturb - { - public string Value { get; set; } - } - - public class Mode - { - public string Value { get; set; } - } - - public class Multipoint - { - public Mode Mode { get; set; } - } - - public class CallId2 - { - public string Value { get; set; } - } - - public class Mode2 : ValueProperty - { - string _Value; - - public bool BoolValue { get; private set; } - - - - public string Value - { - get - { - return _Value; - } - set - { - _Value = value; - // If the incoming value is "Sending" it sets the BoolValue true, otherwise sets it false - BoolValue = value == "Sending"; - OnValueChanged(); - } - } - } - - public class Mode3 - { - public string Value { get; set; } - } - - public class ReleaseFloorAvailability - { - public string Value { get; set; } - } - - public class RequestFloorAvailability - { - public string Value { get; set; } - } - - public class Whiteboard - { - public Mode3 Mode { get; set; } - public ReleaseFloorAvailability ReleaseFloorAvailability { get; set; } - public RequestFloorAvailability RequestFloorAvailability { get; set; } - } - - public class Source2 : ValueProperty - { - string _Value; - - /// - /// Sets Value and triggers the action when set - /// - public string Value - { - get - { - return _Value; - } - set - { - _Value = value; - OnValueChanged(); - } - } - - /// - /// Converted value of _Value for use as feedback - /// - public int IntValue - { - get - { - if (!string.IsNullOrEmpty(_Value)) - return Convert.ToInt32(_Value); - else - return 0; - } - } - } - - public class SendingMode - { - public string Value { get; set; } - } - - public class LocalInstance - { - public string id { get; set; } - public string ghost { get; set; } - public SendingMode SendingMode { get; set; } - public Source2 Source { get; set; } - - public LocalInstance() - { - Source = new Source2(); - } - } - - public class Presentation - { - public CallId2 CallId { get; set; } - public Mode2 Mode { get; set; } - public Whiteboard Whiteboard { get; set; } - public List LocalInstance { get; set; } - - public Presentation() - { - Mode = new Mode2(); - LocalInstance = new List(); - } - } - - public class CallId3 - { - public string Value { get; set; } - } - - public class Mode4 - { - public string Value { get; set; } - } - - public class SpeakerLock - { - public CallId3 CallId { get; set; } - public Mode4 Mode { get; set; } - } - - public class Conference2 - { - public ActiveSpeaker ActiveSpeaker { get; set; } - public DoNotDisturb DoNotDisturb { get; set; } - public Multipoint Multipoint { get; set; } - public Presentation Presentation { get; set; } - public SpeakerLock SpeakerLock { get; set; } - - public Conference2() - { - Presentation = new Presentation(); - } - } - - public class Description - { - public string Value { get; set; } - } - - public class Level - { - public string Value { get; set; } - } - - public class References - { - public string Value { get; set; } - } - - public class Type - { - public string Value { get; set; } - } - - public class Message - { - public string id { get; set; } - public Description Description { get; set; } - public Level Level { get; set; } - public References References { get; set; } - public Type Type { get; set; } - } - - public class Diagnostics - { - public List Message { get; set; } - } - - public class Conference3 - { - } - - public class Experimental - { - public Conference3 Conference { get; set; } - } - - public class Address - { - public string Value { get; set; } - } - - public class Port - { - public string Value { get; set; } - } - - public class Reason - { - public string Value { get; set; } - } - - public class Status3 - { - public string Value { get; set; } - } - - public class Gatekeeper - { - public Address Address { get; set; } - public Port Port { get; set; } - public Reason Reason { get; set; } - public Status3 Status { get; set; } - } - - public class Reason2 - { - public string Value { get; set; } - } - - public class Status4 - { - public string Value { get; set; } - } - - public class Mode5 - { - public Reason2 Reason { get; set; } - public Status4 Status { get; set; } - } - - public class H323 - { - public Gatekeeper Gatekeeper { get; set; } - public Mode5 Mode { get; set; } - } - - public class Expression - { - public string id { get; set; } - public string Value { get; set; } - } - - public class Format - { - public string Value { get; set; } - } - - public class URL - { - public string Value { get; set; } - } - - public class HttpFeedback - { - public string id { get; set; } - public List Expression { get; set; } - public Format Format { get; set; } - public URL URL { get; set; } - } - - public class MediaChannels - { - } - - public class Address2 - { - public string Value { get; set; } - } - - public class Capabilities3 - { - public string Value { get; set; } - } - - public class DeviceId - { - public string Value { get; set; } - } - - public class Duplex - { - public string Value { get; set; } - } - - public class Platform - { - public string Value { get; set; } - } - - public class PortID - { - public string Value { get; set; } - } - - public class PrimaryMgmtAddress - { - public string Value { get; set; } - } - - public class SysName - { - public string Value { get; set; } - } - - public class SysObjectID - { - public string Value { get; set; } - } - - public class VTPMgmtDomain - { - public string Value { get; set; } - } - - public class Version - { - public string Value { get; set; } - } - - public class VoIPApplianceVlanID - { - public string Value { get; set; } - } - - public class CDP - { - public Address2 Address { get; set; } - public Capabilities3 Capabilities { get; set; } - public DeviceId DeviceId { get; set; } - public Duplex Duplex { get; set; } - public Platform Platform { get; set; } - public PortID PortID { get; set; } - public PrimaryMgmtAddress PrimaryMgmtAddress { get; set; } - public SysName SysName { get; set; } - public SysObjectID SysObjectID { get; set; } - public VTPMgmtDomain VTPMgmtDomain { get; set; } - public Version Version { get; set; } - public VoIPApplianceVlanID VoIPApplianceVlanID { get; set; } - } - - public class Name - { - public string Value { get; set; } - } - - public class Domain - { - public Name Name { get; set; } - } - - public class Address3 - { - public string Value { get; set; } - } - - public class Server - { - public string id { get; set; } - public Address3 Address { get; set; } - } - - public class DNS - { - public Domain Domain { get; set; } - public List Server { get; set; } - } - - public class MacAddress - { - public string Value { get; set; } - } - - public class Speed - { - public string Value { get; set; } - } - - public class Ethernet - { - public MacAddress MacAddress { get; set; } - public Speed Speed { get; set; } - } - - public class Address4 - { - public string Value { get; set; } - } - - public class Gateway - { - public string Value { get; set; } - } - - public class SubnetMask - { - public string Value { get; set; } - } - - public class IPv4 - { - public Address4 Address { get; set; } - public Gateway Gateway { get; set; } - public SubnetMask SubnetMask { get; set; } - } - - public class Address5 - { - public string Value { get; set; } - } - - public class Gateway2 - { - public string Value { get; set; } - } - - public class IPv6 - { - public Address5 Address { get; set; } - public Gateway2 Gateway { get; set; } - } - - public class VlanId - { - public string Value { get; set; } - } - - public class Voice - { - public VlanId VlanId { get; set; } - } - - public class VLAN - { - public Voice Voice { get; set; } - } - - public class Network - { - public string id { get; set; } - public CDP CDP { get; set; } - public DNS DNS { get; set; } - public Ethernet Ethernet { get; set; } - public IPv4 IPv4 { get; set; } - public IPv6 IPv6 { get; set; } - public VLAN VLAN { get; set; } - } - - public class CurrentAddress - { - public string Value { get; set; } - } - - public class Address6 - { - public string Value { get; set; } - } - - public class Server2 - { - public string id { get; set; } - public Address6 Address { get; set; } - } - - public class Status5 - { - public string Value { get; set; } - } - - public class NTP - { - public CurrentAddress CurrentAddress { get; set; } - public List Server { get; set; } - public Status5 Status { get; set; } - } - - public class NetworkServices - { - public NTP NTP { get; set; } - } - - public class HardwareInfo - { - public string Value { get; set; } - } - - public class ID2 - { - public string Value { get; set; } - } - - public class Name2 - { - public string Value { get; set; } - } - - public class SoftwareInfo - { - public string Value { get; set; } - } - - public class Status6 - { - public string Value { get; set; } - } - - public class Type2 - { - public string Value { get; set; } - } - - public class UpgradeStatus - { - public string Value { get; set; } - } - - public class ConnectedDevice - { - public string id { get; set; } - public HardwareInfo HardwareInfo { get; set; } - public ID2 ID { get; set; } - public Name2 Name { get; set; } - public SoftwareInfo SoftwareInfo { get; set; } - public Status6 Status { get; set; } - public Type2 Type { get; set; } - public UpgradeStatus UpgradeStatus { get; set; } - } - - public class Peripherals - { - public List ConnectedDevice { get; set; } - } - - public class Enabled - { - public string Value { get; set; } - } - - public class LastLoggedInUserId - { - public string Value { get; set; } - } - - public class LoggedIn - { - public string Value { get; set; } - } - - public class ExtensionMobility - { - public Enabled Enabled { get; set; } - public LastLoggedInUserId LastLoggedInUserId { get; set; } - public LoggedIn LoggedIn { get; set; } - } - - public class CUCM - { - public ExtensionMobility ExtensionMobility { get; set; } - } - - public class CompletedAt - { - public string Value { get; set; } - } - - public class URL2 - { - public string Value { get; set; } - } - - public class VersionId - { - public string Value { get; set; } - } - - public class Current2 - { - public CompletedAt CompletedAt { get; set; } - public URL2 URL { get; set; } - public VersionId VersionId { get; set; } - } - - public class LastChange - { - public string Value { get; set; } - } - - public class Message2 - { - public string Value { get; set; } - } - - public class Phase - { - public string Value { get; set; } - } - - public class SessionId - { - public string Value { get; set; } - } - - public class Status7 - { - public string Value { get; set; } - } - - public class URL3 - { - public string Value { get; set; } - } - - public class VersionId2 - { - public string Value { get; set; } - } - - public class UpgradeStatus2 - { - public LastChange LastChange { get; set; } - public Message2 Message { get; set; } - public Phase Phase { get; set; } - public SessionId SessionId { get; set; } - public Status7 Status { get; set; } - public URL3 URL { get; set; } - public VersionId2 VersionId { get; set; } - } - - public class Software - { - public Current2 Current { get; set; } - public UpgradeStatus2 UpgradeStatus { get; set; } - } - - public class Status8 - { - public string Value { get; set; } - } - - public class Provisioning - { - public CUCM CUCM { get; set; } - public Software Software { get; set; } - public Status8 Status { get; set; } - } - - public class Availability2 - { - public string Value { get; set; } - } - - public class Services - { - public Availability2 Availability { get; set; } - } - - public class Proximity - { - public Services Services { get; set; } - } - - public class Current3 : ValueProperty - { - string _Value; - - /// - /// Sets Value and triggers the action when set - /// - public string Value - { - get - { - return _Value; - } - set - { - _Value = value; - OnValueChanged(); - } - } - - /// - /// Converted value of _Value for use as feedback - /// - public int IntValue - { - get - { - if (!string.IsNullOrEmpty(_Value)) - return Convert.ToInt32(_Value); - else - return 0; - } - } - } - - public class PeopleCount - { - public Current3 Current { get; set; } - - public PeopleCount() - { - Current = new Current3(); - } - } - - public class PeoplePresence : ValueProperty - { - public bool BoolValue { get; private set; } - - public string Value - { - set - { - // If the incoming value is "Yes" it sets the BoolValue true, otherwise sets it false - BoolValue = value == "Yes"; - OnValueChanged(); - } - } - } - - public class RoomAnalytics - { - public PeopleCount PeopleCount { get; set; } - public PeoplePresence PeoplePresence { get; set; } - - public RoomAnalytics() - { - PeopleCount = new PeopleCount(); - PeoplePresence = new PeoplePresence(); - } - } - - public class Primary - { - public URI URI { get; set; } - - public Primary() - { - URI = new URI(); - } - } - - public class AlternateURI - { - public Primary Primary { get; set; } - - public AlternateURI() - { - Primary = new Primary(); - } - } - - public class Authentication - { - public string Value { get; set; } - } - - public class DisplayName - { - public string Value { get; set; } - } - - public class Mode6 - { - public string Value { get; set; } - } - - public class URI - { - public string Value { get; set; } - } - - public class CallForward - { - public DisplayName DisplayName { get; set; } - public Mode6 Mode { get; set; } - public URI URI { get; set; } - } - - public class MessagesWaiting - { - public string Value { get; set; } - } - - public class URI2 - { - public string Value { get; set; } - } - - public class Mailbox - { - public MessagesWaiting MessagesWaiting { get; set; } - public URI2 URI { get; set; } - } - - public class Address7 - { - public string Value { get; set; } - } - - public class Status9 - { - public string Value { get; set; } - } - - public class Proxy - { - public string id { get; set; } - public Address7 Address { get; set; } - public Status9 Status { get; set; } - } - - public class Reason3 - { - public string Value { get; set; } - } - - public class Status10 - { - public string Value { get; set; } - } - - public class URI3 - { - public string Value { get; set; } - } - - public class Registration - { - public string id { get; set; } - public Reason3 Reason { get; set; } - public Status10 Status { get; set; } - public URI3 URI { get; set; } - - public Registration() - { - URI = new URI3(); - } - } - - public class Secure - { - public string Value { get; set; } - } - - public class Verified - { - public string Value { get; set; } - } - - public class SIP - { - public AlternateURI AlternateURI { get; set; } - public Authentication Authentication { get; set; } - public CallForward CallForward { get; set; } - public Mailbox Mailbox { get; set; } - public List Proxy { get; set; } - public List Registration { get; set; } - public Secure Secure { get; set; } - public Verified Verified { get; set; } - - public SIP() - { - AlternateURI = new AlternateURI(); - Registration = new List(); - } - } - - public class Mode7 - { - public string Value { get; set; } - } - - public class FIPS - { - public Mode7 Mode { get; set; } - } - - public class CallHistory - { - public string Value { get; set; } - } - - public class Configurations - { - public string Value { get; set; } - } - - public class DHCP - { - public string Value { get; set; } - } - - public class InternalLogging - { - public string Value { get; set; } - } - - public class LocalPhonebook - { - public string Value { get; set; } - } - - public class Persistency - { - public CallHistory CallHistory { get; set; } - public Configurations Configurations { get; set; } - public DHCP DHCP { get; set; } - public InternalLogging InternalLogging { get; set; } - public LocalPhonebook LocalPhonebook { get; set; } - } - - public class Security - { - public FIPS FIPS { get; set; } - public Persistency Persistency { get; set; } - } - - public class State : ValueProperty - { - public bool BoolValue { get; private set; } - - public string Value // Valid values are Standby/EnteringStandby/Halfwake/Off - { - set - { - // If the incoming value is "Of" it sets the BoolValue true, otherwise sets it false - BoolValue = value == "Off"; - OnValueChanged(); - } - } - } - - public class Standby - { - public State State { get; set; } - - public Standby() - { - State = new State(); - } - } - - public class CompatibilityLevel - { - public string Value { get; set; } - } - - public class SerialNumber - { - public string Value { get; set; } - } - - public class Module - { - public CompatibilityLevel CompatibilityLevel { get; set; } - public SerialNumber SerialNumber { get; set; } - } - - public class Hardware - { - public Module Module { get; set; } - } - - public class ProductId - { - public string Value { get; set; } - } - - public class ProductPlatform - { - public string Value { get; set; } - } - - public class ProductType - { - public string Value { get; set; } - } - - public class DisplayName2 - { - public string Value { get; set; } - } - - public class Name3 - { - public string Value { get; set; } - } - - public class Encryption - { - public string Value { get; set; } - } - - public class MultiSite - { - public string Value { get; set; } - } - - public class RemoteMonitoring - { - public string Value { get; set; } - } - - public class OptionKeys - { - public Encryption Encryption { get; set; } - public MultiSite MultiSite { get; set; } - public RemoteMonitoring RemoteMonitoring { get; set; } - - public OptionKeys() - { - MultiSite = new MultiSite(); - } - } - - public class ReleaseDate - { - public string Value { get; set; } - } - - public class Version2 - { - public string Value { get; set; } - } - - public class Software2 - { - public DisplayName2 DisplayName { get; set; } - public Name3 Name { get; set; } - public OptionKeys OptionKeys { get; set; } - public ReleaseDate ReleaseDate { get; set; } - public Version2 Version { get; set; } - - public Software2() - { - OptionKeys = new OptionKeys(); - } - } - - public class NumberOfActiveCalls - { - public string Value { get; set; } - } - - public class NumberOfInProgressCalls - { - public string Value { get; set; } - } - - public class NumberOfSuspendedCalls - { - public string Value { get; set; } - } - - public class State2 - { - public NumberOfActiveCalls NumberOfActiveCalls { get; set; } - public NumberOfInProgressCalls NumberOfInProgressCalls { get; set; } - public NumberOfSuspendedCalls NumberOfSuspendedCalls { get; set; } - } - - public class Uptime - { - public string Value { get; set; } - } - - public class SystemUnit - { - public Hardware Hardware { get; set; } - public ProductId ProductId { get; set; } - public ProductPlatform ProductPlatform { get; set; } - public ProductType ProductType { get; set; } - public Software2 Software { get; set; } - public State2 State { get; set; } - public Uptime Uptime { get; set; } - - public SystemUnit() - { - Software = new Software2(); - } - } - - public class SystemTime - { - public DateTime Value { get; set; } - } - - public class Time - { - public SystemTime SystemTime { get; set; } - } - - public class Number - { - public string Value { get; set; } - } - - public class ContactMethod - { - public string id { get; set; } - public Number Number { get; set; } - } - - public class Name4 - { - public string Value { get; set; } - } - - public class ContactInfo - { - public List ContactMethod { get; set; } - public Name4 Name { get; set; } - } - - public class UserInterface - { - public ContactInfo ContactInfo { get; set; } - } - - public class PIPPosition - { - public string Value { get; set; } - } - - public class ActiveSpeaker2 - { - public PIPPosition PIPPosition { get; set; } - } - - public class Connected2 - { - public string Value { get; set; } - } - - public class SignalState - { - public string Value { get; set; } - } - - public class SourceId - { - public string Value { get; set; } - } - - public class Type3 - { - public string Value { get; set; } - } - - public class Connector - { - public string id { get; set; } - public Connected2 Connected { get; set; } - public SignalState SignalState { get; set; } - public SourceId SourceId { get; set; } - public Type3 Type { get; set; } - } - - public class MainVideoSource - { - public string Value { get; set; } - } - - public class ConnectorId - { - public string Value { get; set; } - } - - public class FormatStatus - { - public string Value { get; set; } - } - - public class FormatType - { - public string Value { get; set; } - } - - public class MediaChannelId - { - public string Value { get; set; } - } - - public class Height - { - public string Value { get; set; } - } - - public class RefreshRate - { - public string Value { get; set; } - } - - public class Width - { - public string Value { get; set; } - } - - public class Resolution - { - public Height Height { get; set; } - public RefreshRate RefreshRate { get; set; } - public Width Width { get; set; } - } - - public class Source - { - public string id { get; set; } - public ConnectorId ConnectorId { get; set; } - public FormatStatus FormatStatus { get; set; } - public FormatType FormatType { get; set; } - public MediaChannelId MediaChannelId { get; set; } - public Resolution Resolution { get; set; } - } - - public class Input2 - { - public List Connector { get; set; } - public MainVideoSource MainVideoSource { get; set; } - public List Source { get; set; } - } - - public class Local : ValueProperty - { - string _Value; - - public string Value // Valid values are On/Off - { - get - { - return _Value; - } - set - { - _Value = value; - OnValueChanged(); - } - } - } - - public class LayoutFamily - { - public Local Local { get; set; } - - public LayoutFamily() - { - Local = new Local(); - } - } - - public class Layout - { - public LayoutFamily LayoutFamily { get; set; } - - public Layout() - { - LayoutFamily = new LayoutFamily(); - } - } - - public class Monitors - { - public string Value { get; set; } - } - - public class Connected3 - { - public string Value { get; set; } - } - - public class Name5 - { - public string Value { get; set; } - } - - public class PreferredFormat - { - public string Value { get; set; } - } - - public class ConnectedDevice2 - { - public Name5 Name { get; set; } - public PreferredFormat PreferredFormat { get; set; } - } - - public class MonitorRole - { - public string Value { get; set; } - } - - public class Height2 - { - public string Value { get; set; } - } - - public class RefreshRate2 - { - public string Value { get; set; } - } - - public class Width2 - { - public string Value { get; set; } - } - - public class Resolution2 - { - public Height2 Height { get; set; } - public RefreshRate2 RefreshRate { get; set; } - public Width2 Width { get; set; } - } - - public class Type4 - { - public string Value { get; set; } - } - - public class Connector2 - { - public string id { get; set; } - public Connected3 Connected { get; set; } - public ConnectedDevice2 ConnectedDevice { get; set; } - public MonitorRole MonitorRole { get; set; } - public Resolution2 Resolution { get; set; } - public Type4 Type { get; set; } - } - - public class Output2 - { - public List Connector { get; set; } - } - - public class PIPPosition2 - { - public string Value { get; set; } - } - - public class Presentation2 - { - public PIPPosition2 PIPPosition { get; set; } - } - - public class FullscreenMode - { - public string Value { get; set; } - } - - public class Mode8 : ValueProperty - { - public bool BoolValue { get; private set; } - - public string Value // Valid values are On/Off - { - set - { - // If the incoming value is "On" it sets the BoolValue true, otherwise sets it false - BoolValue = value == "On"; - OnValueChanged(); - } - } - } - - - public class OnMonitorRole - { - public string Value { get; set; } - } - - public class PIPPosition3 : ValueProperty - { - string _Value; - - public string Value - { - get - { - return _Value; - } - set - { - _Value = value; - OnValueChanged(); - } - } - } - - public class Selfview - { - public FullscreenMode FullscreenMode { get; set; } - public Mode8 Mode { get; set; } - public OnMonitorRole OnMonitorRole { get; set; } - public PIPPosition3 PIPPosition { get; set; } - - public Selfview() - { - Mode = new Mode8(); - PIPPosition = new PIPPosition3(); - } - } - - public class Video - { - public ActiveSpeaker2 ActiveSpeaker { get; set; } - public Input2 Input { get; set; } - public Layout Layout { get; set; } - public Monitors Monitors { get; set; } - public Output2 Output { get; set; } - public Presentation2 Presentation { get; set; } - public Selfview Selfview { get; set; } - - public Video() - { - Selfview = new Selfview(); - Layout = new Layout(); - } - } - - public class AnswerState - { - public string Value { get; set; } - } - - public class CallType - { - public string Value { get; set; } - } - - public class CallbackNumber - { - public string Value { get; set; } - } - - public class DeviceType - { - public string Value { get; set; } - } - - public class Direction - { - public string Value { get; set; } - } - - public class Duration - { - public string Value { get; set; } - } - - public class FacilityServiceId - { - public string Value { get; set; } - } - - public class HoldReason - { - public string Value { get; set; } - } - - public class PlacedOnHold - { - public string Value { get; set; } - } - - public class Protocol - { - public string Value { get; set; } - } - - public class ReceiveCallRate - { - public string Value { get; set; } - } - - public class RemoteNumber - { - public string Value { get; set; } - } - - public class TransmitCallRate - { - public string Value { get; set; } - } - - public class Call - { - public string id { get; set; } - public AnswerState AnswerState { get; set; } - public CallType CallType { get; set; } - public CallbackNumber CallbackNumber { get; set; } - public DeviceType DeviceType { get; set; } - public Direction Direction { get; set; } - public DisplayName DisplayName { get; set; } - public Duration Duration { get; set; } - public Encryption Encryption { get; set; } - public FacilityServiceId FacilityServiceId { get; set; } - public string ghost { get; set; } - public HoldReason HoldReason { get; set; } - public PlacedOnHold PlacedOnHold { get; set; } - public Protocol Protocol { get; set; } - public ReceiveCallRate ReceiveCallRate { get; set; } - public RemoteNumber RemoteNumber { get; set; } - public Status2 Status { get; set; } - public TransmitCallRate TransmitCallRate { get; set; } - - public Call() - { - CallType = new CallType(); - Status = new Status2(); - } - } - - public class Status - { - public Audio Audio { get; set; } - public Bookings Bookings { get; set; } - public List Call { get; set; } - public Cameras Cameras { get; set; } - public Capabilities2 Capabilities { get; set; } - public Conference2 Conference { get; set; } - public Diagnostics Diagnostics { get; set; } - public Experimental Experimental { get; set; } - public H323 H323 { get; set; } - public List HttpFeedback { get; set; } - public MediaChannels MediaChannels { get; set; } - public List Network { get; set; } - public NetworkServices NetworkServices { get; set; } - public Peripherals Peripherals { get; set; } - public Provisioning Provisioning { get; set; } - public Proximity Proximity { get; set; } - public RoomAnalytics RoomAnalytics { get; set; } - public SIP SIP { get; set; } - public Security Security { get; set; } - public Standby Standby { get; set; } - public SystemUnit SystemUnit { get; set; } - public Time Time { get; set; } - public UserInterface UserInterface { get; set; } - public Video Video { get; set; } - - public Status() - { - Audio = new Audio(); - Call = new List(); - Standby = new Standby(); - Cameras = new Cameras(); - RoomAnalytics = new RoomAnalytics(); - Conference = new Conference2(); - SystemUnit = new SystemUnit(); - Video = new Video(); - } - } - - public class RootObject - { - public Status Status { get; set; } - - public RootObject() - { - Status = new Status(); - } - } - } -} diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatusSparkPlus.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatusSparkPlus.cs deleted file mode 100644 index 014a4e60..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatusSparkPlus.cs +++ /dev/null @@ -1,1552 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Devices.Common.VideoCodec.CiscoCodec -{ - public class xStatusSparkPlus - { - public class ConnectionStatus - { - public string Value { get; set; } - } - - public class EcReferenceDelay - { - public string Value { get; set; } - } - - public class Microphone - { - public string id { get; set; } - public ConnectionStatus ConnectionStatus { get; set; } - public EcReferenceDelay EcReferenceDelay { get; set; } - } - - public class Connectors - { - public List Microphone { get; set; } - } - - public class Input - { - public Connectors Connectors { get; set; } - } - - public class Mute - { - public string Value { get; set; } - } - - public class Microphones - { - public Mute Mute { get; set; } - } - - public class ConnectionStatus2 - { - public string Value { get; set; } - } - - public class DelayMs - { - public string Value { get; set; } - } - - public class Line - { - public string id { get; set; } - public ConnectionStatus2 ConnectionStatus { get; set; } - public DelayMs DelayMs { get; set; } - } - - public class Connectors2 - { - public List Line { get; set; } - } - - public class Output - { - public Connectors2 Connectors { get; set; } - } - - public class Volume - { - public string Value { get; set; } - } - - public class VolumeMute - { - public string Value { get; set; } - } - - public class Audio - { - public Input Input { get; set; } - public Microphones Microphones { get; set; } - public Output Output { get; set; } - public Volume Volume { get; set; } - public VolumeMute VolumeMute { get; set; } - } - - public class Id - { - public string Value { get; set; } - } - - public class Current - { - public Id Id { get; set; } - } - - public class Bookings - { - public Current Current { get; set; } - } - - public class Options - { - public string Value { get; set; } - } - - public class Capabilities - { - public Options Options { get; set; } - } - - public class Connected - { - public string Value { get; set; } - } - - public class Flip - { - public string Value { get; set; } - } - - public class HardwareID - { - public string Value { get; set; } - } - - public class MacAddress - { - public string Value { get; set; } - } - - public class Manufacturer - { - public string Value { get; set; } - } - - public class Model - { - public string Value { get; set; } - } - - public class Pan - { - public string Value { get; set; } - } - - public class Tilt - { - public string Value { get; set; } - } - - public class Zoom - { - public string Value { get; set; } - } - - public class Position - { - public Pan Pan { get; set; } - public Tilt Tilt { get; set; } - public Zoom Zoom { get; set; } - } - - public class SerialNumber - { - public string Value { get; set; } - } - - public class SoftwareID - { - public string Value { get; set; } - } - - public class Camera - { - public string id { get; set; } - public Capabilities Capabilities { get; set; } - public Connected Connected { get; set; } - public Flip Flip { get; set; } - public HardwareID HardwareID { get; set; } - public MacAddress MacAddress { get; set; } - public Manufacturer Manufacturer { get; set; } - public Model Model { get; set; } - public Position Position { get; set; } - public SerialNumber SerialNumber { get; set; } - public SoftwareID SoftwareID { get; set; } - } - - public class Availability - { - public string Value { get; set; } - } - - public class Status2 - { - public string Value { get; set; } - } - - public class SpeakerTrack - { - public Availability Availability { get; set; } - public Status2 Status { get; set; } - } - - public class Cameras - { - public List Camera { get; set; } - public SpeakerTrack SpeakerTrack { get; set; } - } - - public class MaxActiveCalls - { - public string Value { get; set; } - } - - public class MaxAudioCalls - { - public string Value { get; set; } - } - - public class MaxCalls - { - public string Value { get; set; } - } - - public class MaxVideoCalls - { - public string Value { get; set; } - } - - public class Conference - { - public MaxActiveCalls MaxActiveCalls { get; set; } - public MaxAudioCalls MaxAudioCalls { get; set; } - public MaxCalls MaxCalls { get; set; } - public MaxVideoCalls MaxVideoCalls { get; set; } - } - - public class Capabilities2 - { - public Conference Conference { get; set; } - } - - public class CallId - { - public string Value { get; set; } - } - - public class ActiveSpeaker - { - public CallId CallId { get; set; } - } - - public class DoNotDisturb - { - public string Value { get; set; } - } - - public class Mode - { - public string Value { get; set; } - } - - public class Line2 - { - public string id { get; set; } - public Mode Mode { get; set; } - } - - public class Mode2 - { - public string Value { get; set; } - } - - public class Multipoint - { - public Mode2 Mode { get; set; } - } - - public class CallId2 - { - public string Value { get; set; } - } - - public class SendingMode - { - public string Value { get; set; } - } - - public class Source - { - public string Value { get; set; } - } - - public class LocalInstance - { - public string id { get; set; } - public SendingMode SendingMode { get; set; } - public Source Source { get; set; } - } - - public class Mode3 - { - public string Value { get; set; } - } - - public class Mode4 - { - public string Value { get; set; } - } - - public class ReleaseFloorAvailability - { - public string Value { get; set; } - } - - public class RequestFloorAvailability - { - public string Value { get; set; } - } - - public class Whiteboard - { - public Mode4 Mode { get; set; } - public ReleaseFloorAvailability ReleaseFloorAvailability { get; set; } - public RequestFloorAvailability RequestFloorAvailability { get; set; } - } - - public class Presentation - { - public CallId2 CallId { get; set; } - public List LocalInstance { get; set; } - public Mode3 Mode { get; set; } - public Whiteboard Whiteboard { get; set; } - } - - public class CallId3 - { - public string Value { get; set; } - } - - public class Mode5 - { - public string Value { get; set; } - } - - public class SpeakerLock - { - public CallId3 CallId { get; set; } - public Mode5 Mode { get; set; } - } - - public class Conference2 - { - public ActiveSpeaker ActiveSpeaker { get; set; } - public DoNotDisturb DoNotDisturb { get; set; } - public List Line { get; set; } - public Multipoint Multipoint { get; set; } - public Presentation Presentation { get; set; } - public SpeakerLock SpeakerLock { get; set; } - } - - public class Conference3 - { - } - - public class Experimental - { - public Conference3 Conference { get; set; } - } - - public class Address - { - public string Value { get; set; } - } - - public class Port - { - public string Value { get; set; } - } - - public class Reason - { - public string Value { get; set; } - } - - public class Status3 - { - public string Value { get; set; } - } - - public class Gatekeeper - { - public Address Address { get; set; } - public Port Port { get; set; } - public Reason Reason { get; set; } - public Status3 Status { get; set; } - } - - public class Reason2 - { - public string Value { get; set; } - } - - public class Status4 - { - public string Value { get; set; } - } - - public class Mode6 - { - public Reason2 Reason { get; set; } - public Status4 Status { get; set; } - } - - public class H323 - { - public Gatekeeper Gatekeeper { get; set; } - public Mode6 Mode { get; set; } - } - - public class Expression - { - public string id { get; set; } - public string Value { get; set; } - } - - public class Format - { - public string Value { get; set; } - } - - public class URL - { - public string Value { get; set; } - } - - public class HttpFeedback - { - public string id { get; set; } - public List Expression { get; set; } - public Format Format { get; set; } - public URL URL { get; set; } - } - - public class MediaChannels - { - } - - public class Address2 - { - public string Value { get; set; } - } - - public class Capabilities3 - { - public string Value { get; set; } - } - - public class DeviceId - { - public string Value { get; set; } - } - - public class Duplex - { - public string Value { get; set; } - } - - public class Platform - { - public string Value { get; set; } - } - - public class PortID - { - public string Value { get; set; } - } - - public class PrimaryMgmtAddress - { - public string Value { get; set; } - } - - public class SysName - { - public string Value { get; set; } - } - - public class SysObjectID - { - public string Value { get; set; } - } - - public class VTPMgmtDomain - { - public string Value { get; set; } - } - - public class Version - { - public string Value { get; set; } - } - - public class VoIPApplianceVlanID - { - public string Value { get; set; } - } - - public class CDP - { - public Address2 Address { get; set; } - public Capabilities3 Capabilities { get; set; } - public DeviceId DeviceId { get; set; } - public Duplex Duplex { get; set; } - public Platform Platform { get; set; } - public PortID PortID { get; set; } - public PrimaryMgmtAddress PrimaryMgmtAddress { get; set; } - public SysName SysName { get; set; } - public SysObjectID SysObjectID { get; set; } - public VTPMgmtDomain VTPMgmtDomain { get; set; } - public Version Version { get; set; } - public VoIPApplianceVlanID VoIPApplianceVlanID { get; set; } - } - - public class Name - { - public string Value { get; set; } - } - - public class Domain - { - public Name Name { get; set; } - } - - public class Address3 - { - public string Value { get; set; } - } - - public class Server - { - public string id { get; set; } - public Address3 Address { get; set; } - } - - public class DNS - { - public Domain Domain { get; set; } - public List Server { get; set; } - } - - public class MacAddress2 - { - public string Value { get; set; } - } - - public class Speed - { - public string Value { get; set; } - } - - public class Ethernet - { - public MacAddress2 MacAddress { get; set; } - public Speed Speed { get; set; } - } - - public class Address4 - { - public string Value { get; set; } - } - - public class Gateway - { - public string Value { get; set; } - } - - public class SubnetMask - { - public string Value { get; set; } - } - - public class IPv4 - { - public Address4 Address { get; set; } - public Gateway Gateway { get; set; } - public SubnetMask SubnetMask { get; set; } - } - - public class Address5 - { - public string Value { get; set; } - } - - public class Gateway2 - { - public string Value { get; set; } - } - - public class IPv6 - { - public Address5 Address { get; set; } - public Gateway2 Gateway { get; set; } - } - - public class VlanId - { - public string Value { get; set; } - } - - public class Voice - { - public VlanId VlanId { get; set; } - } - - public class VLAN - { - public Voice Voice { get; set; } - } - - public class Network - { - public string id { get; set; } - public CDP CDP { get; set; } - public DNS DNS { get; set; } - public Ethernet Ethernet { get; set; } - public IPv4 IPv4 { get; set; } - public IPv6 IPv6 { get; set; } - public VLAN VLAN { get; set; } - } - - public class CurrentAddress - { - public string Value { get; set; } - } - - public class Address6 - { - public string Value { get; set; } - } - - public class Server2 - { - public string id { get; set; } - public Address6 Address { get; set; } - } - - public class Status5 - { - public string Value { get; set; } - } - - public class NTP - { - public CurrentAddress CurrentAddress { get; set; } - public List Server { get; set; } - public Status5 Status { get; set; } - } - - public class NetworkServices - { - public NTP NTP { get; set; } - } - - public class HardwareInfo - { - public string Value { get; set; } - } - - public class ID2 - { - public string Value { get; set; } - } - - public class Name2 - { - public string Value { get; set; } - } - - public class SoftwareInfo - { - public string Value { get; set; } - } - - public class Status6 - { - public string Value { get; set; } - } - - public class Type - { - public string Value { get; set; } - } - - public class UpgradeStatus - { - public string Value { get; set; } - } - - public class ConnectedDevice - { - public string id { get; set; } - public HardwareInfo HardwareInfo { get; set; } - public ID2 ID { get; set; } - public Name2 Name { get; set; } - public SoftwareInfo SoftwareInfo { get; set; } - public Status6 Status { get; set; } - public Type Type { get; set; } - public UpgradeStatus UpgradeStatus { get; set; } - } - - public class Peripherals - { - public List ConnectedDevice { get; set; } - } - - public class Enabled - { - public string Value { get; set; } - } - - public class LastLoggedInUserId - { - public string Value { get; set; } - } - - public class LoggedIn - { - public string Value { get; set; } - } - - public class ExtensionMobility - { - public Enabled Enabled { get; set; } - public LastLoggedInUserId LastLoggedInUserId { get; set; } - public LoggedIn LoggedIn { get; set; } - } - - public class CUCM - { - public ExtensionMobility ExtensionMobility { get; set; } - } - - public class CompletedAt - { - public string Value { get; set; } - } - - public class URL2 - { - public string Value { get; set; } - } - - public class VersionId - { - public string Value { get; set; } - } - - public class Current2 - { - public CompletedAt CompletedAt { get; set; } - public URL2 URL { get; set; } - public VersionId VersionId { get; set; } - } - - public class LastChange - { - public string Value { get; set; } - } - - public class Message - { - public string Value { get; set; } - } - - public class Phase - { - public string Value { get; set; } - } - - public class SessionId - { - public string Value { get; set; } - } - - public class Status7 - { - public string Value { get; set; } - } - - public class URL3 - { - public string Value { get; set; } - } - - public class VersionId2 - { - public string Value { get; set; } - } - - public class UpgradeStatus2 - { - public LastChange LastChange { get; set; } - public Message Message { get; set; } - public Phase Phase { get; set; } - public SessionId SessionId { get; set; } - public Status7 Status { get; set; } - public URL3 URL { get; set; } - public VersionId2 VersionId { get; set; } - } - - public class Software - { - public Current2 Current { get; set; } - public UpgradeStatus2 UpgradeStatus { get; set; } - } - - public class Status8 - { - public string Value { get; set; } - } - - public class Provisioning - { - public CUCM CUCM { get; set; } - public Software Software { get; set; } - public Status8 Status { get; set; } - } - - public class Availability2 - { - public string Value { get; set; } - } - - public class Services - { - public Availability2 Availability { get; set; } - } - - public class Proximity - { - public Services Services { get; set; } - } - - public class Current3 - { - public string Value { get; set; } - } - - public class PeopleCount - { - public Current3 Current { get; set; } - } - - public class PeoplePresence - { - public string Value { get; set; } - } - - public class RoomAnalytics - { - public PeopleCount PeopleCount { get; set; } - public PeoplePresence PeoplePresence { get; set; } - } - - public class URI - { - public string Value { get; set; } - } - - public class Primary - { - public URI URI { get; set; } - } - - public class AlternateURI - { - public Primary Primary { get; set; } - } - - public class Authentication - { - public string Value { get; set; } - } - - public class DisplayName - { - public string Value { get; set; } - } - - public class Mode7 - { - public string Value { get; set; } - } - - public class URI2 - { - public string Value { get; set; } - } - - public class CallForward - { - public DisplayName DisplayName { get; set; } - public Mode7 Mode { get; set; } - public URI2 URI { get; set; } - } - - public class MessagesWaiting - { - public string Value { get; set; } - } - - public class URI3 - { - public string Value { get; set; } - } - - public class Mailbox - { - public MessagesWaiting MessagesWaiting { get; set; } - public URI3 URI { get; set; } - } - - public class Address7 - { - public string Value { get; set; } - } - - public class Status9 - { - public string Value { get; set; } - } - - public class Proxy - { - public string id { get; set; } - public Address7 Address { get; set; } - public Status9 Status { get; set; } - } - - public class Reason3 - { - public string Value { get; set; } - } - - public class Status10 - { - public string Value { get; set; } - } - - public class URI4 - { - public string Value { get; set; } - } - - public class Registration - { - public string id { get; set; } - public Reason3 Reason { get; set; } - public Status10 Status { get; set; } - public URI4 URI { get; set; } - } - - public class Secure - { - public string Value { get; set; } - } - - public class Verified - { - public string Value { get; set; } - } - - public class SIP - { - public AlternateURI AlternateURI { get; set; } - public Authentication Authentication { get; set; } - public CallForward CallForward { get; set; } - public Mailbox Mailbox { get; set; } - public List Proxy { get; set; } - public List Registration { get; set; } - public Secure Secure { get; set; } - public Verified Verified { get; set; } - } - - public class Mode8 - { - public string Value { get; set; } - } - - public class FIPS - { - public Mode8 Mode { get; set; } - } - - public class CallHistory - { - public string Value { get; set; } - } - - public class Configurations - { - public string Value { get; set; } - } - - public class DHCP - { - public string Value { get; set; } - } - - public class InternalLogging - { - public string Value { get; set; } - } - - public class LocalPhonebook - { - public string Value { get; set; } - } - - public class Persistency - { - public CallHistory CallHistory { get; set; } - public Configurations Configurations { get; set; } - public DHCP DHCP { get; set; } - public InternalLogging InternalLogging { get; set; } - public LocalPhonebook LocalPhonebook { get; set; } - } - - public class Security - { - public FIPS FIPS { get; set; } - public Persistency Persistency { get; set; } - } - - public class State - { - public string Value { get; set; } - } - - public class Standby - { - public State State { get; set; } - } - - public class CompatibilityLevel - { - public string Value { get; set; } - } - - public class SerialNumber2 - { - public string Value { get; set; } - } - - public class Module - { - public CompatibilityLevel CompatibilityLevel { get; set; } - public SerialNumber2 SerialNumber { get; set; } - } - - public class Hardware - { - public Module Module { get; set; } - } - - public class ProductId - { - public string Value { get; set; } - } - - public class ProductPlatform - { - public string Value { get; set; } - } - - public class ProductType - { - public string Value { get; set; } - } - - public class DisplayName2 - { - public string Value { get; set; } - } - - public class Name3 - { - public string Value { get; set; } - } - - public class Encryption - { - public string Value { get; set; } - } - - public class MultiSite - { - public string Value { get; set; } - } - - public class RemoteMonitoring - { - public string Value { get; set; } - } - - public class OptionKeys - { - public Encryption Encryption { get; set; } - public MultiSite MultiSite { get; set; } - public RemoteMonitoring RemoteMonitoring { get; set; } - } - - public class ReleaseDate - { - public string Value { get; set; } - } - - public class Version2 - { - public string Value { get; set; } - } - - public class Software2 - { - public DisplayName2 DisplayName { get; set; } - public Name3 Name { get; set; } - public OptionKeys OptionKeys { get; set; } - public ReleaseDate ReleaseDate { get; set; } - public Version2 Version { get; set; } - } - - public class NumberOfActiveCalls - { - public string Value { get; set; } - } - - public class NumberOfInProgressCalls - { - public string Value { get; set; } - } - - public class NumberOfSuspendedCalls - { - public string Value { get; set; } - } - - public class State2 - { - public NumberOfActiveCalls NumberOfActiveCalls { get; set; } - public NumberOfInProgressCalls NumberOfInProgressCalls { get; set; } - public NumberOfSuspendedCalls NumberOfSuspendedCalls { get; set; } - } - - public class Uptime - { - public string Value { get; set; } - } - - public class SystemUnit - { - public Hardware Hardware { get; set; } - public ProductId ProductId { get; set; } - public ProductPlatform ProductPlatform { get; set; } - public ProductType ProductType { get; set; } - public Software2 Software { get; set; } - public State2 State { get; set; } - public Uptime Uptime { get; set; } - } - - public class SystemTime - { - public DateTime Value { get; set; } - } - - public class Time - { - public SystemTime SystemTime { get; set; } - } - - public class Number - { - public string Value { get; set; } - } - - public class ContactMethod - { - public string id { get; set; } - public Number Number { get; set; } - } - - public class Name4 - { - public string Value { get; set; } - } - - public class ContactInfo - { - public List ContactMethod { get; set; } - public Name4 Name { get; set; } - } - - public class UserInterface - { - public ContactInfo ContactInfo { get; set; } - } - - public class PIPPosition - { - public string Value { get; set; } - } - - public class ActiveSpeaker2 - { - public PIPPosition PIPPosition { get; set; } - } - - public class Connected2 - { - public string Value { get; set; } - } - - public class DeviceType - { - public string Value { get; set; } - } - - public class Name5 - { - public string Value { get; set; } - } - - public class PowerStatus - { - public string Value { get; set; } - } - - public class VendorId - { - public string Value { get; set; } - } - - public class CEC - { - public string id { get; set; } - public DeviceType DeviceType { get; set; } - public Name5 Name { get; set; } - public PowerStatus PowerStatus { get; set; } - public VendorId VendorId { get; set; } - } - - public class ConnectedDevice2 - { - public List CEC { get; set; } - } - - public class SignalState - { - public string Value { get; set; } - } - - public class SourceId - { - public string Value { get; set; } - } - - public class Type2 - { - public string Value { get; set; } - } - - public class Connector - { - public string id { get; set; } - public Connected2 Connected { get; set; } - public ConnectedDevice2 ConnectedDevice { get; set; } - public SignalState SignalState { get; set; } - public SourceId SourceId { get; set; } - public Type2 Type { get; set; } - } - - public class MainVideoSource - { - public string Value { get; set; } - } - - public class ConnectorId - { - public string Value { get; set; } - } - - public class FormatStatus - { - public string Value { get; set; } - } - - public class FormatType - { - public string Value { get; set; } - } - - public class MediaChannelId - { - public string Value { get; set; } - } - - public class Height - { - public string Value { get; set; } - } - - public class RefreshRate - { - public string Value { get; set; } - } - - public class Width - { - public string Value { get; set; } - } - - public class Resolution - { - public Height Height { get; set; } - public RefreshRate RefreshRate { get; set; } - public Width Width { get; set; } - } - - public class Source2 - { - public string id { get; set; } - public ConnectorId ConnectorId { get; set; } - public FormatStatus FormatStatus { get; set; } - public FormatType FormatType { get; set; } - public MediaChannelId MediaChannelId { get; set; } - public Resolution Resolution { get; set; } - } - - public class Input2 - { - public List Connector { get; set; } - public MainVideoSource MainVideoSource { get; set; } - public List Source { get; set; } - } - - public class Local - { - public string Value { get; set; } - } - - public class LayoutFamily - { - public Local Local { get; set; } - } - - public class Layout - { - public LayoutFamily LayoutFamily { get; set; } - } - - public class Monitors - { - public string Value { get; set; } - } - - public class Connected3 - { - public string Value { get; set; } - } - - public class DeviceType2 - { - public string Value { get; set; } - } - - public class Name6 - { - public string Value { get; set; } - } - - public class PowerStatus2 - { - public string Value { get; set; } - } - - public class VendorId2 - { - public string Value { get; set; } - } - - public class CEC2 - { - public string id { get; set; } - public DeviceType2 DeviceType { get; set; } - public Name6 Name { get; set; } - public PowerStatus2 PowerStatus { get; set; } - public VendorId2 VendorId { get; set; } - } - - public class Name7 - { - public string Value { get; set; } - } - - public class PreferredFormat - { - public string Value { get; set; } - } - - public class ConnectedDevice3 - { - public List CEC { get; set; } - public Name7 Name { get; set; } - public PreferredFormat PreferredFormat { get; set; } - } - - public class MonitorRole - { - public string Value { get; set; } - } - - public class Height2 - { - public string Value { get; set; } - } - - public class RefreshRate2 - { - public string Value { get; set; } - } - - public class Width2 - { - public string Value { get; set; } - } - - public class Resolution2 - { - public Height2 Height { get; set; } - public RefreshRate2 RefreshRate { get; set; } - public Width2 Width { get; set; } - } - - public class Type3 - { - public string Value { get; set; } - } - - public class Connector2 - { - public string id { get; set; } - public Connected3 Connected { get; set; } - public ConnectedDevice3 ConnectedDevice { get; set; } - public MonitorRole MonitorRole { get; set; } - public Resolution2 Resolution { get; set; } - public Type3 Type { get; set; } - } - - public class Output2 - { - public List Connector { get; set; } - } - - public class PIPPosition2 - { - public string Value { get; set; } - } - - public class Presentation2 - { - public PIPPosition2 PIPPosition { get; set; } - } - - public class FullscreenMode - { - public string Value { get; set; } - } - - public class Mode9 - { - public string Value { get; set; } - } - - public class OnMonitorRole - { - public string Value { get; set; } - } - - public class PIPPosition3 - { - public string Value { get; set; } - } - - public class Selfview - { - public FullscreenMode FullscreenMode { get; set; } - public Mode9 Mode { get; set; } - public OnMonitorRole OnMonitorRole { get; set; } - public PIPPosition3 PIPPosition { get; set; } - } - - public class Video - { - public ActiveSpeaker2 ActiveSpeaker { get; set; } - public Input2 Input { get; set; } - public Layout Layout { get; set; } - public Monitors Monitors { get; set; } - public Output2 Output { get; set; } - public Presentation2 Presentation { get; set; } - public Selfview Selfview { get; set; } - } - - public class Status - { - public Audio Audio { get; set; } - public Bookings Bookings { get; set; } - public Cameras Cameras { get; set; } - public Capabilities2 Capabilities { get; set; } - public Conference2 Conference { get; set; } - public Experimental Experimental { get; set; } - public H323 H323 { get; set; } - public List HttpFeedback { get; set; } - public MediaChannels MediaChannels { get; set; } - public List Network { get; set; } - public NetworkServices NetworkServices { get; set; } - public Peripherals Peripherals { get; set; } - public Provisioning Provisioning { get; set; } - public Proximity Proximity { get; set; } - public RoomAnalytics RoomAnalytics { get; set; } - public SIP SIP { get; set; } - public Security Security { get; set; } - public Standby Standby { get; set; } - public SystemUnit SystemUnit { get; set; } - public Time Time { get; set; } - public UserInterface UserInterface { get; set; } - public Video Video { get; set; } - } - - public class RootObject - { - public Status Status { get; set; } - } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CodecActiveCallItem.cs.orig b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CodecActiveCallItem.cs.orig deleted file mode 100644 index 4b47d127..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CodecActiveCallItem.cs.orig +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Devices.Common.VideoCodec - -{ - public class CodecActiveCallItem - { - public string Name { get; set; } - - public string Number { get; set; } - -<<<<<<< HEAD - public eCodecCallType Type { get; private set; } - - public CodecActiveCallItem(string name, string number, eCodecCallType type) - { - Name = name; - Number = number; - Type = type; - } -======= - public eCodecCallType Type { get; set; } - - public eCodecCallStatus Status { get; set; } - - public string Id { get; set; } ->>>>>>> origin/feature/cisco-spark-2 - } - - public enum eCodecCallType - { - None, Audio, Video - } - - public enum eCodecCallStatus - { - Dialing, Established, Incoming - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasCodecLayouts.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasCodecLayouts.cs deleted file mode 100644 index 7a9e7eca..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasCodecLayouts.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Essentials.Core; - -namespace PepperDash.Essentials.Devices.Common.VideoCodec -{ - /// - /// Defines the required elements for layout control - /// - public interface IHasCodecLayouts - { - StringFeedback LocalLayoutFeedback { get; } - - void LocalLayoutToggle(); - void LocalLayoutToggleSingleProminent(); - void MinMaxLayoutToggle(); - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasCodecSelfview.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasCodecSelfview.cs deleted file mode 100644 index 3bc43ec2..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasCodecSelfview.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Essentials.Core; - -namespace PepperDash.Essentials.Devices.Common.VideoCodec -{ - /// - /// Defines the requred elements for selfview control - /// - public interface IHasCodecSelfview - { - BoolFeedback SelfviewIsOnFeedback { get; } - - bool ShowSelfViewByDefault { get; } - - void SelfviewModeOn(); - - void SelfviewModeOff(); - - void SelfviewModeToggle(); - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs deleted file mode 100644 index a80f0cdf..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs +++ /dev/null @@ -1,441 +0,0 @@ -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; -using PepperDash.Essentials.Devices.Common.Codec; - -namespace PepperDash.Essentials.Devices.Common.VideoCodec -{ - public class MockVC : VideoCodecBase, IRoutingSource, IHasCallHistory, IHasScheduleAwareness, IHasCallFavorites - { - public RoutingInputPort CodecOsdIn { get; private set; } - public RoutingInputPort HdmiIn1 { get; private set; } - public RoutingInputPort HdmiIn2 { get; private set; } - public RoutingOutputPort HdmiOut { get; private set; } - - public CodecCallFavorites CallFavorites { get; private set; } - - /// - /// - /// - public MockVC(string key, string name, MockVcPropertiesConfig props) - : base(key, name) - { - CodecInfo = new MockCodecInfo(); - - // Get favoritesw - if (props.Favorites != null) - { - CallFavorites = new CodecCallFavorites(); - CallFavorites.Favorites = props.Favorites; - } - - // Debug helpers - MuteFeedback.OutputChange += (o, a) => Debug.Console(1, this, "Mute={0}", _IsMuted); - PrivacyModeIsOnFeedback.OutputChange += (o, a) => Debug.Console(1, this, "Privacy={0}", _PrivacyModeIsOn); - SharingSourceFeedback.OutputChange += (o, a) => Debug.Console(1, this, "SharingSource={0}", _SharingSource); - VolumeLevelFeedback.OutputChange += (o, a) => Debug.Console(1, this, "Volume={0}", _VolumeLevel); - - CodecOsdIn = new RoutingInputPort(RoutingPortNames.CodecOsd, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 0, this); - InputPorts.Add(CodecOsdIn); - HdmiIn1 = new RoutingInputPort(RoutingPortNames.HdmiIn1, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 1, this); - InputPorts.Add(HdmiIn1); - HdmiIn2 = new RoutingInputPort(RoutingPortNames.HdmiIn2, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, 2, this); - InputPorts.Add(HdmiIn2); - HdmiOut = new RoutingOutputPort(RoutingPortNames.HdmiOut, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this); - OutputPorts.Add(HdmiOut); - - CallHistory = new CodecCallHistory(); - for (int i = 0; i < 10; i++) - { - var call = new CodecCallHistory.CallHistoryEntry(); - call.Name = "Call " + i; - call.Number = i + "@call.com"; - CallHistory.RecentCalls.Add(call); - } - // eventually fire history event here - - SetIsReady(); - } - - protected override Func MuteFeedbackFunc - { - get { return () => _IsMuted; } - } - bool _IsMuted; - - protected override Func PrivacyModeIsOnFeedbackFunc - { - get { return () => _PrivacyModeIsOn; } - } - bool _PrivacyModeIsOn; - - protected override Func SharingSourceFeedbackFunc - { - get { return () => _SharingSource; } - } - string _SharingSource; - - protected override Func SharingContentIsOnFeedbackFunc - { - get { return () => _SharingIsOn; } - } - bool _SharingIsOn; - - protected override Func VolumeLevelFeedbackFunc - { - get { return () => _VolumeLevel; } - } - int _VolumeLevel; - - protected override Func StandbyIsOnFeedbackFunc - { - get { return () => _StandbyIsOn; } - } - bool _StandbyIsOn; - - - /// - /// Dials, yo! - /// - public override void Dial(string number) - { - Debug.Console(1, this, "Dial: {0}", number); - var call = new CodecActiveCallItem() { Name = number, Number = number, Id = number, Status = eCodecCallStatus.Dialing }; - ActiveCalls.Add(call); - OnCallStatusChange(call); - //ActiveCallCountFeedback.FireUpdate(); - // Simulate 2-second ring, then connecting, then connected - new CTimer(o => - { - call.Type = eCodecCallType.Video; - SetNewCallStatusAndFireCallStatusChange(eCodecCallStatus.Connecting, call); - new CTimer(oo => SetNewCallStatusAndFireCallStatusChange(eCodecCallStatus.Connected, call), 1000); - }, 2000); - } - - public override void Dial(Meeting meeting) - { - throw new NotImplementedException(); - } - - /// - /// - /// - public override void EndCall(CodecActiveCallItem call) - { - Debug.Console(1, this, "EndCall"); - ActiveCalls.Remove(call); - SetNewCallStatusAndFireCallStatusChange(eCodecCallStatus.Disconnected, call); - //ActiveCallCountFeedback.FireUpdate(); - } - - /// - /// - /// - public override void EndAllCalls() - { - Debug.Console(1, this, "EndAllCalls"); - for(int i = ActiveCalls.Count - 1; i >= 0; i--) - { - var call = ActiveCalls[i]; - ActiveCalls.Remove(call); - SetNewCallStatusAndFireCallStatusChange(eCodecCallStatus.Disconnected, call); - } - //ActiveCallCountFeedback.FireUpdate(); - } - - /// - /// For a call from the test methods below - /// - public override void AcceptCall(CodecActiveCallItem call) - { - Debug.Console(1, this, "AcceptCall"); - SetNewCallStatusAndFireCallStatusChange(eCodecCallStatus.Connecting, call); - new CTimer(o => SetNewCallStatusAndFireCallStatusChange(eCodecCallStatus.Connected, call), 1000); - // should already be in active list - } - - /// - /// For a call from the test methods below - /// - public override void RejectCall(CodecActiveCallItem call) - { - Debug.Console(1, this, "RejectCall"); - ActiveCalls.Remove(call); - SetNewCallStatusAndFireCallStatusChange(eCodecCallStatus.Disconnected, call); - //ActiveCallCountFeedback.FireUpdate(); - } - - /// - /// Makes horrible tones go out on the wire! - /// - /// - public override void SendDtmf(string s) - { - Debug.Console(1, this, "SendDTMF: {0}", s); - } - - /// - /// - /// - public override void StartSharing() - { - _SharingIsOn = true; - SharingContentIsOnFeedback.FireUpdate(); - } - - /// - /// - /// - public override void StopSharing() - { - _SharingIsOn = false; - SharingContentIsOnFeedback.FireUpdate(); - } - - public override void StandbyActivate() - { - _StandbyIsOn = true; - } - - public override void StandbyDeactivate() - { - _StandbyIsOn = false; - } - - /// - /// Called by routing to make it happen - /// - /// - public override void ExecuteSwitch(object selector) - { - Debug.Console(1, this, "ExecuteSwitch: {0}", selector); - _SharingSource = selector.ToString(); - } - - /// - /// - /// - public override void MuteOff() - { - _IsMuted = false; - MuteFeedback.FireUpdate(); - } - - /// - /// - /// - public override void MuteOn() - { - _IsMuted = true; - MuteFeedback.FireUpdate(); - } - - /// - /// - /// - public override void MuteToggle() - { - _IsMuted = !_IsMuted; - MuteFeedback.FireUpdate(); - } - - /// - /// - /// - /// - public override void SetVolume(ushort level) - { - _VolumeLevel = level; - VolumeLevelFeedback.FireUpdate(); - } - - /// - /// - /// - /// - public override void VolumeDown(bool pressRelease) - { - } - - /// - /// - /// - /// - public override void VolumeUp(bool pressRelease) - { - } - - /// - /// - /// - public override void PrivacyModeOn() - { - Debug.Console(1, this, "PrivacyMuteOn"); - if (_PrivacyModeIsOn) - return; - _PrivacyModeIsOn = true; - PrivacyModeIsOnFeedback.FireUpdate(); - } - - /// - /// - /// - public override void PrivacyModeOff() - { - Debug.Console(1, this, "PrivacyMuteOff"); - if (!_PrivacyModeIsOn) - return; - _PrivacyModeIsOn = false; - PrivacyModeIsOnFeedback.FireUpdate(); - } - - /// - /// - /// - public override void PrivacyModeToggle() - { - _PrivacyModeIsOn = !_PrivacyModeIsOn; - Debug.Console(1, this, "PrivacyMuteToggle: {0}", _PrivacyModeIsOn); - PrivacyModeIsOnFeedback.FireUpdate(); - } - - //******************************************************** - // SIMULATION METHODS - - /// - /// - /// - /// - public void TestIncomingVideoCall(string url) - { - Debug.Console(1, this, "TestIncomingVideoCall from {0}", url); - var call = new CodecActiveCallItem() { Name = url, Id = url, Number = url, Type= eCodecCallType.Video, Direction = eCodecCallDirection.Incoming }; - ActiveCalls.Add(call); - SetNewCallStatusAndFireCallStatusChange(eCodecCallStatus.Ringing, call); - - //OnCallStatusChange(eCodecCallStatus.Unknown, eCodecCallStatus.Ringing, call); - - } - - /// - /// - /// - /// - public void TestIncomingAudioCall(string url) - { - Debug.Console(1, this, "TestIncomingAudioCall from {0}", url); - var call = new CodecActiveCallItem() { Name = url, Id = url, Number = url, Type = eCodecCallType.Audio, Direction = eCodecCallDirection.Incoming }; - ActiveCalls.Add(call); - SetNewCallStatusAndFireCallStatusChange(eCodecCallStatus.Ringing, call); - - //OnCallStatusChange(eCodecCallStatus.Unknown, eCodecCallStatus.Ringing, call); - } - - /// - /// - /// - public void TestFarEndHangup() - { - Debug.Console(1, this, "TestFarEndHangup"); - - } - - #region IHasCallHistory Members - - public CodecCallHistory CallHistory { get; private set; } - - public void RemoveCallHistoryEntry(CodecCallHistory.CallHistoryEntry entry) - { - - } - - #endregion - - #region IHasScheduleAwareness Members - - public void GetSchedule() - { - - } - - public CodecScheduleAwareness CodecSchedule - { - get { - // if the last meeting has past, generate a new list - if (_CodecSchedule == null - || _CodecSchedule.Meetings[_CodecSchedule.Meetings.Count - 1].StartTime < DateTime.Now) - { - _CodecSchedule = new CodecScheduleAwareness(); - for (int i = 0; i < 5; i++) - { - var m = new Meeting(); - m.StartTime = DateTime.Now.AddMinutes(3).AddHours(i); - m.EndTime = DateTime.Now.AddHours(i).AddMinutes(30); - m.Title = "Meeting " + i; - m.Calls[0].Number = i + "meeting@fake.com"; - _CodecSchedule.Meetings.Add(m); - } - } - return _CodecSchedule; - } - } - CodecScheduleAwareness _CodecSchedule; - - #endregion - } - - /// - /// Implementation for the mock VC - /// - public class MockCodecInfo : VideoCodecInfo - { - - public override bool MultiSiteOptionIsEnabled - { - get { return true; } - } - - public override string E164Alias - { - get { return "someE164alias"; } - } - - public override string H323Id - { - get { return "someH323Id"; } - } - - public override string IpAddress - { - get { return "xxx.xxx.xxx.xxx"; } - } - - public override string SipPhoneNumber - { - get { return "333-444-5555"; } - } - - public override string SipUri - { - get { return "mock@someurl.com"; } - } - - public override bool AutoAnswerEnabled - { - get { return _AutoAnswerEnabled; } - } - bool _AutoAnswerEnabled; - - public void SetAutoAnswer(bool value) - { - _AutoAnswerEnabled = value; - } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs.orig b/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs.orig deleted file mode 100644 index f70988dd..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs.orig +++ /dev/null @@ -1,250 +0,0 @@ -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.VideoCodec -{ - public class MockVC : VideoCodecBase - { - public MockVC(string key, string name) - : base(key, name) - { - // Debug helpers - ActiveCallCountFeedback.OutputChange += (o, a) => Debug.Console(1, this, "InCall={0}", ActiveCallCountFeedback.IntValue); - IncomingCallFeedback.OutputChange += (o, a) => Debug.Console(1, this, "IncomingCall={0}", _IncomingCall); - MuteFeedback.OutputChange += (o, a) => Debug.Console(1, this, "Mute={0}", _IsMuted); - PrivacyModeIsOnFeedback.OutputChange += (o, a) => Debug.Console(1, this, "Privacy={0}", _PrivacyModeIsOn); - SharingSourceFeedback.OutputChange += (o, a) => Debug.Console(1, this, "SharingSource={0}", _SharingSource); - VolumeLevelFeedback.OutputChange += (o, a) => Debug.Console(1, this, "Volume={0}", _VolumeLevel); - } - - protected override Func ActiveCallCountFeedbackFunc - { - get { return () => ActiveCalls.Count; } - } - - protected override Func IncomingCallFeedbackFunc - { - get { return () => _IncomingCall; } - } - bool _IncomingCall; - - protected override Func MuteFeedbackFunc - { - get { return () => _IsMuted; } - } - bool _IsMuted; - - protected override Func PrivacyModeIsOnFeedbackFunc - { - get { return () => _PrivacyModeIsOn; } - } - bool _PrivacyModeIsOn; - - protected override Func SharingSourceFeedbackFunc - { - get { return () => _SharingSource; } - } - string _SharingSource; - - protected override Func VolumeLevelFeedbackFunc - { - get { return () => _VolumeLevel; } - } - int _VolumeLevel; - - /// - /// Dials, yo! - /// - public override void Dial(string s) - { - Debug.Console(1, this, "Dial: {0}", s); - ActiveCalls.Add(new CodecActiveCallItem(s,s, eCodecCallType.Video)); - ActiveCallCountFeedback.FireUpdate(); - } - - /// - /// - /// - public override void EndCall(CodecActiveCallItem activeCall) - { - Debug.Console(1, this, "EndCall"); - ActiveCalls.RemoveAll(i => i.Name == s); - ActiveCallCountFeedback.FireUpdate(); - //_InCall = false; - //IsInCall.FireUpdate(); - } - - public override void EndAllCalls() - { - - } - - /// - /// For a call from the test methods below - /// - public override void AcceptCall() - { - Debug.Console(1, this, "AcceptCall"); - } - - /// - /// For a call from the test methods below - /// - public override void RejectCall() - { - Debug.Console(1, this, "RejectCall"); - } - - /// - /// Makes horrible tones go out on the wire! - /// - /// - public override void SendDtmf(string s) - { - Debug.Console(1, this, "SendDTMF: {0}", s); - } - - /// - /// - /// - public override void StartSharing() - { - } - - /// - /// - /// - public override void StopSharing() - { - } - - /// - /// Called by routing to make it happen - /// - /// - public override void ExecuteSwitch(object selector) - { - Debug.Console(1, this, "ExecuteSwitch"); - _SharingSource = selector.ToString(); - - } - - /// - /// - /// - public override void MuteOff() - { - _IsMuted = false; - MuteFeedback.FireUpdate(); - } - - /// - /// - /// - public override void MuteOn() - { - _IsMuted = true; - MuteFeedback.FireUpdate(); - } - - /// - /// - /// - public override void MuteToggle() - { - _IsMuted = !_IsMuted; - MuteFeedback.FireUpdate(); - } - - /// - /// - /// - /// - public override void SetVolume(ushort level) - { - _VolumeLevel = level; - VolumeLevelFeedback.FireUpdate(); - } - - /// - /// - /// - /// - public override void VolumeDown(bool pressRelease) - { - } - - /// - /// - /// - /// - public override void VolumeUp(bool pressRelease) - { - } - - /// - /// - /// - public override void PrivacyModeOn() - { - Debug.Console(1, this, "PrivacyMuteOn"); - if (_PrivacyModeIsOn) - return; - _PrivacyModeIsOn = true; - PrivacyModeIsOnFeedback.FireUpdate(); - - } - - /// - /// - /// - public override void PrivacyModeOff() - { - Debug.Console(1, this, "PrivacyMuteOff"); - if (!_PrivacyModeIsOn) - return; - _PrivacyModeIsOn = false; - PrivacyModeIsOnFeedback.FireUpdate(); - } - - /// - /// - /// - public override void PrivacyModeToggle() - { - _PrivacyModeIsOn = !_PrivacyModeIsOn; - Debug.Console(1, this, "PrivacyMuteToggle: {0}", _PrivacyModeIsOn); - PrivacyModeIsOnFeedback.FireUpdate(); - } - - //******************************************************** - // SIMULATION METHODS - - /// - /// - /// - /// - public void TestIncomingCall(string url) - { - Debug.Console(1, this, "TestIncomingCall"); - - _IncomingCall = true; - IncomingCallFeedback.FireUpdate(); - } - - /// - /// - /// - public void TestFarEndHangup() - { - Debug.Console(1, this, "TestFarEndHangup"); - - } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVcPropertiesConfig.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVcPropertiesConfig.cs deleted file mode 100644 index 2dd1c18b..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVcPropertiesConfig.cs +++ /dev/null @@ -1,17 +0,0 @@ -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.Devices.Common.Codec; - -namespace PepperDash.Essentials.Devices.Common.VideoCodec -{ - public class MockVcPropertiesConfig - { - public List Favorites { get; set; } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs deleted file mode 100644 index 14bca03f..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs +++ /dev/null @@ -1,319 +0,0 @@ -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; -using PepperDash.Essentials.Devices.Common; -using PepperDash.Essentials.Devices.Common.Codec; - -namespace PepperDash.Essentials.Devices.Common.VideoCodec -{ - public abstract class VideoCodecBase : Device, IRoutingInputsOutputs, - IUsageTracking, IHasDialer, IHasContentSharing, ICodecAudio, iCodecInfo - { - /// - /// Fires when the status of any active, dialing, or incoming call changes or is new - /// - public event EventHandler CallStatusChange; - - public event EventHandler IsReadyChange; - - public IBasicCommunication Communication { get; protected set; } - - #region IUsageTracking Members - - /// - /// This object can be added by outside users of this class to provide usage tracking - /// for various services - /// - public UsageTracking UsageTracker { get; set; } - - #endregion - - /// - /// An internal pseudo-source that is routable and connected to the osd input - /// - public DummyRoutingInputsDevice OsdSource { get; protected set; } - - public RoutingPortCollection InputPorts { get; private set; } - - public RoutingPortCollection OutputPorts { get; private set; } - - /// - /// Returns true when any call is not in state Unknown, Disconnecting, Disconnected - /// - public bool IsInCall - { - get - { - bool value; - - if (ActiveCalls != null) - value = ActiveCalls.Any(c => c.IsActiveCall); - else - value = false; - return value; - } - } - - public BoolFeedback StandbyIsOnFeedback { get; private set; } - - abstract protected Func PrivacyModeIsOnFeedbackFunc { get; } - abstract protected Func VolumeLevelFeedbackFunc { get; } - abstract protected Func MuteFeedbackFunc { get; } - abstract protected Func StandbyIsOnFeedbackFunc { get; } - - public List ActiveCalls { get; set; } - - public VideoCodecInfo CodecInfo { get; protected set; } - - public bool ShowSelfViewByDefault { get; protected set; } - - - public bool IsReady { get; protected set; } - - public VideoCodecBase(string key, string name) - : base(key, name) - { - StandbyIsOnFeedback = new BoolFeedback(StandbyIsOnFeedbackFunc); - PrivacyModeIsOnFeedback = new BoolFeedback(PrivacyModeIsOnFeedbackFunc); - VolumeLevelFeedback = new IntFeedback(VolumeLevelFeedbackFunc); - MuteFeedback = new BoolFeedback(MuteFeedbackFunc); - SharingSourceFeedback = new StringFeedback(SharingSourceFeedbackFunc); - SharingContentIsOnFeedback = new BoolFeedback(SharingContentIsOnFeedbackFunc); - - InputPorts = new RoutingPortCollection(); - OutputPorts = new RoutingPortCollection(); - - ActiveCalls = new List(); - } - - #region IHasDialer Members - - public abstract void Dial(string number); - public abstract void Dial(Meeting meeting); - public abstract void EndCall(CodecActiveCallItem call); - public abstract void EndAllCalls(); - public abstract void AcceptCall(CodecActiveCallItem call); - public abstract void RejectCall(CodecActiveCallItem call); - public abstract void SendDtmf(string s); - - #endregion - - public virtual List Feedbacks - { - get - { - return new List - { - PrivacyModeIsOnFeedback, - SharingSourceFeedback - }; - } - } - - public abstract void ExecuteSwitch(object selector); - - /// - /// Helper method to fire CallStatusChange event with old and new status - /// - protected void SetNewCallStatusAndFireCallStatusChange(eCodecCallStatus newStatus, CodecActiveCallItem call) - { - call.Status = newStatus; - - OnCallStatusChange(call); - - } - - /// - /// - /// - /// - /// - /// - protected void OnCallStatusChange(CodecActiveCallItem item) - { - var handler = CallStatusChange; - if (handler != null) - handler(this, new CodecCallStatusItemChangeEventArgs(item)); - - if (AutoShareContentWhileInCall) - StartSharing(); - - if(IsInCall && !UsageTracker.UsageTrackingStarted) - UsageTracker.StartDeviceUsage(); - else if(UsageTracker.UsageTrackingStarted && !IsInCall) - UsageTracker.EndDeviceUsage(); - } - - /// - /// Sets IsReady property and fires the event. Used for dependent classes to sync up their data. - /// - protected void SetIsReady() - { - IsReady = true; - var h = IsReadyChange; - if(h != null) - h(this, new EventArgs()); - } - - #region ICodecAudio Members - - public abstract void PrivacyModeOn(); - public abstract void PrivacyModeOff(); - public abstract void PrivacyModeToggle(); - public BoolFeedback PrivacyModeIsOnFeedback { get; private set; } - - - 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; } - - public abstract void MuteToggle(); - - public abstract void VolumeDown(bool pressRelease); - - - public abstract void VolumeUp(bool pressRelease); - - #endregion - - #region IHasSharing Members - - public abstract void StartSharing(); - public abstract void StopSharing(); - - public bool AutoShareContentWhileInCall { get; protected set; } - - public StringFeedback SharingSourceFeedback { get; private set; } - public BoolFeedback SharingContentIsOnFeedback { get; private set; } - - abstract protected Func SharingSourceFeedbackFunc { get; } - abstract protected Func SharingContentIsOnFeedbackFunc { get; } - - - #endregion - - // **** DEBUGGING THINGS **** - /// - /// - /// - public virtual void ListCalls() - { - var sb = new StringBuilder(); - foreach (var c in ActiveCalls) - sb.AppendFormat("{0} {1} -- {2} {3}\n", c.Id, c.Number, c.Name, c.Status); - Debug.Console(1, this, "\n{0}\n", sb.ToString()); - } - - public abstract void StandbyActivate(); - - public abstract void StandbyDeactivate(); - - } - - - /// - /// Used to track the status of syncronizing the phonebook values when connecting to a codec or refreshing the phonebook info - /// - public class CodecPhonebookSyncState : IKeyed - { - bool _InitialSyncComplete; - - public event EventHandler InitialSyncCompleted; - - public string Key { get; private set; } - - public bool InitialSyncComplete - { - get { return _InitialSyncComplete; } - private set - { - if (value == true) - { - var handler = InitialSyncCompleted; - if (handler != null) - handler(this, new EventArgs()); - } - _InitialSyncComplete = value; - } - } - - public bool InitialPhonebookFoldersWasReceived { get; private set; } - - public bool NumberOfContactsWasReceived { get; private set; } - - public bool PhonebookRootEntriesWasRecieved { get; private set; } - - public bool PhonebookHasFolders { get; private set; } - - public int NumberOfContacts { get; private set; } - - public CodecPhonebookSyncState(string key) - { - Key = key; - - CodecDisconnected(); - } - - public void InitialPhonebookFoldersReceived() - { - InitialPhonebookFoldersWasReceived = true; - - CheckSyncStatus(); - } - - public void PhonebookRootEntriesReceived() - { - PhonebookRootEntriesWasRecieved = true; - - CheckSyncStatus(); - } - - public void SetPhonebookHasFolders(bool value) - { - PhonebookHasFolders = value; - - Debug.Console(1, this, "Phonebook has folders: {0}", PhonebookHasFolders); - } - - public void SetNumberOfContacts(int contacts) - { - NumberOfContacts = contacts; - NumberOfContactsWasReceived = true; - - Debug.Console(1, this, "Phonebook contains {0} contacts.", NumberOfContacts); - - CheckSyncStatus(); - } - - public void CodecDisconnected() - { - InitialPhonebookFoldersWasReceived = false; - PhonebookHasFolders = false; - NumberOfContacts = 0; - NumberOfContactsWasReceived = false; - } - - void CheckSyncStatus() - { - if (InitialPhonebookFoldersWasReceived && NumberOfContactsWasReceived && PhonebookRootEntriesWasRecieved) - { - InitialSyncComplete = true; - Debug.Console(1, this, "Initial Phonebook Sync Complete!"); - } - else - InitialSyncComplete = false; - } - } -} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs.orig b/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs.orig deleted file mode 100644 index e13bb133..00000000 --- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs.orig +++ /dev/null @@ -1,152 +0,0 @@ -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.VideoCodec -{ - public abstract class VideoCodecBase : Device, IRoutingSinkWithSwitching, IUsageTracking, IHasDialer, IHasSharing, ICodecAudio - { - #region IUsageTracking Members - - /// - /// This object can be added by outside users of this class to provide usage tracking - /// for various services - /// - public UsageTracking UsageTracker { get; set; } - - #endregion - - #region IRoutingInputs Members - - public RoutingPortCollection InputPorts { get; private set; } - - #endregion - - /// - /// Returns true when ActiveCallCountFeedback is > 0 - /// - public bool IsInCall { get { return ActiveCallCountFeedback.IntValue > 0; } } - - public BoolFeedback IncomingCallFeedback { get; private set; } - - public IntFeedback ActiveCallCountFeedback { get; private set; } - - abstract protected Func ActiveCallCountFeedbackFunc { get; } - abstract protected Func IncomingCallFeedbackFunc { get; } - abstract protected Func PrivacyModeIsOnFeedbackFunc { get; } - abstract protected Func VolumeLevelFeedbackFunc { get; } - abstract protected Func MuteFeedbackFunc { get; } - abstract protected Func SharingSourceFeedbackFunc { get; } - - public List ActiveCalls { get; set; } - - public VideoCodecBase(string key, string name) - : base(key, name) - { - ActiveCallCountFeedback = new IntFeedback(ActiveCallCountFeedbackFunc); - IncomingCallFeedback = new BoolFeedback(IncomingCallFeedbackFunc); - PrivacyModeIsOnFeedback = new BoolFeedback(PrivacyModeIsOnFeedbackFunc); - VolumeLevelFeedback = new IntFeedback(VolumeLevelFeedbackFunc); - MuteFeedback = new BoolFeedback(MuteFeedbackFunc); - SharingSourceFeedback = new StringFeedback(SharingSourceFeedbackFunc); - - InputPorts = new RoutingPortCollection(); - - ActiveCallCountFeedback.OutputChange += new EventHandler(ActiveCallCountFeedback_OutputChange); - - ActiveCalls = new List(); - } - - /// - /// - /// - /// - /// - void ActiveCallCountFeedback_OutputChange(object sender, EventArgs e) - { - if (UsageTracker != null) - { - if (IsInCall) - UsageTracker.StartDeviceUsage(); - else - UsageTracker.EndDeviceUsage(); - } - } - #region IHasDialer Members - - public abstract void Dial(string s); -<<<<<<< HEAD - public abstract void EndCall(string s); -======= - public void EndCall(object activeCall) - { - - } - public abstract void EndCall(CodecActiveCallItem activeCall); - public abstract void EndAllCalls(); ->>>>>>> origin/feature/cisco-spark-2 - public abstract void AcceptCall(); - public abstract void RejectCall(); - public abstract void SendDtmf(string s); - - #endregion - - public virtual List Feedbacks - { - get - { - return new List - { - IncomingCallFeedback, - PrivacyModeIsOnFeedback, - SharingSourceFeedback - }; - } - } - - public abstract void ExecuteSwitch(object selector); - - #region ICodecAudio Members - - public abstract void PrivacyModeOn(); - public abstract void PrivacyModeOff(); - public abstract void PrivacyModeToggle(); - public BoolFeedback PrivacyModeIsOnFeedback { get; private set; } - - - 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; } - - public abstract void MuteToggle(); - - public abstract void VolumeDown(bool pressRelease); - - - public abstract void VolumeUp(bool pressRelease); - - #endregion - - #region IHasSharing Members - - public abstract void StartSharing(); - public abstract void StopSharing(); - - public StringFeedback SharingSourceFeedback { get; private set; } - - #endregion - - - } -} \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/SimplSharpData.dat b/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/SimplSharpData.dat deleted file mode 100644 index 816bfe12..00000000 Binary files a/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/SimplSharpData.dat and /dev/null differ diff --git a/Essentials/PepperDashEssentials/app.config b/Essentials/PepperDashEssentials/app.config deleted file mode 100644 index 1e79e7b5..00000000 --- a/Essentials/PepperDashEssentials/app.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow.csproj b/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow.csproj deleted file mode 100644 index 33405f12..00000000 --- a/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow.csproj +++ /dev/null @@ -1,98 +0,0 @@ - - - Release - AnyCPU - 9.0.30729 - 2.0 - {225C9CD0-1AA9-464C-A3A2-2117EE45A87E} - Library - Properties - EssentialsHuddleWorkflow - EssentialsHuddleWorkflow - {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\ - DEBUG;TRACE; - prompt - 4 - 512 - true - true - off - - - .allowedReferenceRelatedFileExtensions - none - true - bin\Release\ - prompt - 4 - 512 - true - true - off - - - - - False - ..\..\Essentials\PepperDashEssentials\bin\PepperDashEssentials.dll - - - False - ..\..\..\pepperdash-simplsharp-core\Pepperdash Core\CLZ Builds\PepperDash_Core.dll - - - False - ..\..\Essentials Core\PepperDashEssentialsBase\bin\PepperDash_Essentials_Core.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll - False - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll - False - - - 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/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/Properties/AssemblyInfo.cs b/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/Properties/AssemblyInfo.cs deleted file mode 100644 index 0c28f7e6..00000000 --- a/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.Reflection; - -[assembly: AssemblyTitle("EssentialsHuddleWorkflow")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("EssentialsHuddleWorkflow")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyVersion("1.0.0.*")] - diff --git a/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/Properties/ControlSystem.cfg b/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/Properties/ControlSystem.cfg deleted file mode 100644 index e69de29b..00000000 diff --git a/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/Room/EssentialsHuddleSpaceRoom.cs b/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/Room/EssentialsHuddleSpaceRoom.cs deleted file mode 100644 index bc6749fe..00000000 --- a/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/Room/EssentialsHuddleSpaceRoom.cs +++ /dev/null @@ -1,420 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -using PepperDash.Core; -using PepperDash.Essentials; -using PepperDash.Essentials.Core; - -namespace PepperDash.Essentials.EssentialsHuddleWorkflow -{ - public class EssentialsHuddleSpaceRoom : EssentialsRoomBase, IHasCurrentSourceInfoChange - { - public event EventHandler CurrentVolumeDeviceChange; - public event SourceInfoChangeHandler CurrentSingleSourceChange; - - protected override Func OnFeedbackFunc - { - get - { - return () => - { - var disp = DefaultDisplay as DisplayBase; - var val = CurrentSourceInfo != null - && CurrentSourceInfo.Type == eSourceListItemType.Route - && disp != null - && disp.PowerIsOnFeedback.BoolValue; - return val; - }; - } - } - /// - /// - /// - protected override Func IsWarmingFeedbackFunc - { - get - { - return () => - { - var disp = DefaultDisplay as DisplayBase; - if (disp != null) - return disp.IsWarmingUpFeedback.BoolValue; - else - return false; - }; - } - } - /// - /// - /// - protected override Func IsCoolingFeedbackFunc - { - get - { - return () => - { - var disp = DefaultDisplay as DisplayBase; - if (disp != null) - return disp.IsCoolingDownFeedback.BoolValue; - else - return false; - }; - } - } - - public EssentialsRoomPropertiesConfig Config { get; private set; } - - public IRoutingSinkWithSwitching DefaultDisplay { get; private set; } - public IRoutingSinkNoSwitching DefaultAudioDevice { get; private set; } - public IBasicVolumeControls DefaultVolumeControls { get; private set; } - - public bool ExcludeFromGlobalFunctions { get; set; } - - /// - /// The config name of the source list - /// - public string SourceListKey { get; set; } - - public string DefaultSourceItem { get; set; } - - public ushort DefaultVolume { get; set; } - - /// - /// If room is off, enables power on to last source. Default true - /// - public bool EnablePowerOnToLastSource { get; set; } - string LastSourceKey; - - /// - /// - /// - public IBasicVolumeControls CurrentVolumeControls - { - get { return _CurrentAudioDevice; } - set - { - if (value == _CurrentAudioDevice) return; - - var oldDev = _CurrentAudioDevice; - // derigister this room from the device, if it can - if (oldDev is IInUseTracking) - (oldDev as IInUseTracking).InUseTracker.RemoveUser(this, "audio"); - var handler = CurrentVolumeDeviceChange; - if (handler != null) - CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.WillChange)); - _CurrentAudioDevice = value; - if (handler != null) - CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.DidChange)); - // register this room with new device, if it can - if (_CurrentAudioDevice is IInUseTracking) - (_CurrentAudioDevice as IInUseTracking).InUseTracker.AddUser(this, "audio"); - } - } - IBasicVolumeControls _CurrentAudioDevice; - - /// - /// The SourceListItem last run - containing names and icons - /// - public SourceListItem CurrentSourceInfo - { - get { return _CurrentSourceInfo; } - private set - { - if (value == _CurrentSourceInfo) return; - - var handler = CurrentSingleSourceChange; - // remove from in-use tracker, if so equipped - if(_CurrentSourceInfo != null && _CurrentSourceInfo.SourceDevice is IInUseTracking) - (_CurrentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.RemoveUser(this, "control"); - - if (handler != null) - handler(this, _CurrentSourceInfo, ChangeType.WillChange); - - _CurrentSourceInfo = value; - - // add to in-use tracking - if (_CurrentSourceInfo != null && _CurrentSourceInfo.SourceDevice is IInUseTracking) - (_CurrentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.AddUser(this, "control"); - if (handler != null) - handler(this, _CurrentSourceInfo, ChangeType.DidChange); - } - } - SourceListItem _CurrentSourceInfo; - - public string CurrentSourceInfoKey { get; private set; } - - /// - /// - /// - /// - /// - public EssentialsHuddleSpaceRoom(string key, string name, IRoutingSinkWithSwitching defaultDisplay, - IRoutingSinkNoSwitching defaultAudio, EssentialsRoomPropertiesConfig config) - : base(key, name) - { - Config = config; - DefaultDisplay = defaultDisplay; - DefaultAudioDevice = defaultAudio; - if (defaultAudio is IBasicVolumeControls) - DefaultVolumeControls = defaultAudio as IBasicVolumeControls; - else if (defaultAudio is IHasVolumeDevice) - DefaultVolumeControls = (defaultAudio as IHasVolumeDevice).VolumeDevice; - CurrentVolumeControls = DefaultVolumeControls; - - var disp = DefaultDisplay as DisplayBase; - if (disp != null) - { - // Link power, warming, cooling to display - disp.PowerIsOnFeedback.OutputChange += (o, a) => - { - if (disp.PowerIsOnFeedback.BoolValue != OnFeedback.BoolValue) - { - if (!disp.PowerIsOnFeedback.BoolValue) - CurrentSourceInfo = null; - OnFeedback.FireUpdate(); - } - }; - - disp.IsWarmingUpFeedback.OutputChange += (o, a) => - { - IsWarmingUpFeedback.FireUpdate(); - if (!IsWarmingUpFeedback.BoolValue) - (DefaultDisplay as IBasicVolumeWithFeedback).SetVolume(DefaultVolume); - }; - disp.IsCoolingDownFeedback.OutputChange += (o, a) => - { - IsCoolingDownFeedback.FireUpdate(); - if (IsCoolingDownFeedback.BoolValue) - (DefaultDisplay as IBasicVolumeWithFeedback).SetVolume(DefaultVolume); - }; - } - - SourceListKey = "default"; - EnablePowerOnToLastSource = true; - } - - - /// - /// - /// - public override void Shutdown() - { - RunRouteAction("roomOff"); - } - - /// - /// Routes the default source item, if any - /// - public void RunDefaultRoute() - { - if (DefaultSourceItem != null) - RunRouteAction(DefaultSourceItem); - } - - /// - /// - /// - /// - public void RunRouteAction(string routeKey) - { - RunRouteAction(routeKey, null); - } - - /// - /// Gets a source from config list SourceListKey and dynamically build and executes the - /// route or commands - /// - /// - public void RunRouteAction(string routeKey, Action successCallback) - { - // Run this on a separate thread - new CTimer(o => - { - Debug.Console(1, this, "Run route action '{0}'", routeKey); - var dict = ConfigReader.ConfigObject.GetSourceListForKey(SourceListKey); - if(dict == null) - { - Debug.Console(1, this, "WARNING: Config source list '{0}' not found", SourceListKey); - return; - } - - // Try to get the list item by it's string key - if (!dict.ContainsKey(routeKey)) - { - Debug.Console(1, this, "WARNING: No item '{0}' found on config list '{1}'", - routeKey, SourceListKey); - return; - } - - var item = dict[routeKey]; - //Debug.Console(2, this, "Action {0} has {1} steps", - // item.SourceKey, item.RouteList.Count); - - // End usage timer on last source - if (!string.IsNullOrEmpty(LastSourceKey)) - { - var lastSource = dict[LastSourceKey].SourceDevice; - - try - { - if (lastSource != null && lastSource is IUsageTracking) - (lastSource as IUsageTracking).UsageTracker.EndDeviceUsage(); - } - catch (Exception e) - { - Debug.Console(1, this, "*#* EXCEPTION in end usage tracking (257):\r{0}", e); - } - } - - // Let's run it - if (routeKey.ToLower() != "roomoff") - { - LastSourceKey = routeKey; - } - else - { - CurrentSourceInfoKey = null; - } - - foreach (var route in item.RouteList) - { - // if there is a $defaultAll on route, run two separate - if (route.DestinationKey.Equals("$defaultAll", StringComparison.OrdinalIgnoreCase)) - { - // Going to assume a single-path route for now - var tempVideo = new SourceRouteListItem - { - DestinationKey = "$defaultDisplay", - SourceKey = route.SourceKey, - Type = eRoutingSignalType.Video - }; - DoRoute(tempVideo); - - //var tempAudio = new SourceRouteListItem - //{ - // DestinationKey = "$defaultAudio", - // SourceKey = route.SourceKey, - // Type = eRoutingSignalType.Audio - //}; - //DoRoute(tempAudio); - //continue; -- not sure why this was here - } - else - DoRoute(route); - } - - // Start usage timer on routed source - if (item.SourceDevice is IUsageTracking) - { - (item.SourceDevice as IUsageTracking).UsageTracker.StartDeviceUsage(); - } - - - // Set volume control on room, using default if non provided - IBasicVolumeControls volDev = null; - // Handle special cases for volume control - if (string.IsNullOrEmpty(item.VolumeControlKey) - || item.VolumeControlKey.Equals("$defaultAudio", StringComparison.OrdinalIgnoreCase)) - volDev = DefaultVolumeControls; - else if (item.VolumeControlKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase)) - volDev = DefaultDisplay as IBasicVolumeControls; - // Or a specific device, probably rarely used. - else - { - var dev = DeviceManager.GetDeviceForKey(item.VolumeControlKey); - if (dev is IBasicVolumeControls) - volDev = dev as IBasicVolumeControls; - else if (dev is IHasVolumeDevice) - volDev = (dev as IHasVolumeDevice).VolumeDevice; - } - CurrentVolumeControls = volDev; - - // store the name and UI info for routes - if (item.SourceKey == "$off") - { - CurrentSourceInfoKey = routeKey; - CurrentSourceInfo = null; - } - else if (item.SourceKey != null) - { - CurrentSourceInfoKey = routeKey; - CurrentSourceInfo = item; - } - // And finally, set the "control". This will trigger event - //CurrentControlDevice = DeviceManager.GetDeviceForKey(item.SourceKey) as Device; - - OnFeedback.FireUpdate(); - - // report back when done - if (successCallback != null) - successCallback(); - - }, 0); // end of CTimer - } - - /// - /// Will power the room on with the last-used source - /// - public void PowerOnToDefaultOrLastSource() - { - if (!EnablePowerOnToLastSource || LastSourceKey == null) - return; - RunRouteAction(LastSourceKey); - } - - /// - /// - /// - /// - /// - bool DoRoute(SourceRouteListItem route) - { - IRoutingSinkNoSwitching dest = null; - - if (route.DestinationKey.Equals("$defaultaudio", StringComparison.OrdinalIgnoreCase)) - dest = DefaultAudioDevice; - else if (route.DestinationKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase)) - dest = DefaultDisplay; - else - dest = DeviceManager.GetDeviceForKey(route.DestinationKey) as IRoutingSinkNoSwitching; - - if (dest == null) - { - Debug.Console(1, this, "Cannot route, unknown destination '{0}'", route.DestinationKey); - return false; - } - - if (route.SourceKey.Equals("$off", StringComparison.OrdinalIgnoreCase)) - { - dest.ReleaseRoute(); - if (dest is IPower) - (dest as IPower).PowerOff(); - } - else - { - var source = DeviceManager.GetDeviceForKey(route.SourceKey) as IRoutingOutputs; - if (source == null) - { - Debug.Console(1, this, "Cannot route unknown source '{0}' to {1}", route.SourceKey, route.DestinationKey); - return false; - } - dest.ReleaseAndMakeRoute(source, route.Type); - } - return true; - } - - /// - /// Runs "roomOff" action on all rooms not set to ExcludeFromGlobalFunctions - /// - public static void AllRoomsOff() - { - var allRooms = DeviceManager.AllDevices.Where(d => - d is EssentialsHuddleSpaceRoom && !(d as EssentialsHuddleSpaceRoom).ExcludeFromGlobalFunctions); - foreach (var room in allRooms) - (room as EssentialsHuddleSpaceRoom).RunRouteAction("roomOff"); - } - } -} \ No newline at end of file diff --git a/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/UI/DualDisplaySourceSRLController.cs b/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/UI/DualDisplaySourceSRLController.cs deleted file mode 100644 index c91d72f1..00000000 --- a/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/UI/DualDisplaySourceSRLController.cs +++ /dev/null @@ -1,28 +0,0 @@ -//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.Essentials.Core; - -//namespace PepperDash.Essentials -//{ -// public class DualDisplaySourceSRLController : SubpageReferenceList -// { -// public DualDisplaySourceSRLController(BasicTriListWithSmartObject triList, -// uint smartObjectId, EssentialsPresentationRoom room) -// : base(triList, smartObjectId, 3, 3, 3) -// { -// var srcList = room.s items.Values.ToList().OrderBy(s => s.Order); -// foreach (var item in srcList) -// { -// GetBoolFeedbackSig(index, 1).UserObject = new Action(routeAction); - -// } -// } -// } -//} \ No newline at end of file diff --git a/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/UI/EssentialsTouchpanelController.cs b/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/UI/EssentialsTouchpanelController.cs deleted file mode 100644 index 8ad6ab1a..00000000 --- a/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/UI/EssentialsTouchpanelController.cs +++ /dev/null @@ -1,221 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharp.CrestronIO; -using Crestron.SimplSharpPro; -using Crestron.SimplSharpPro.DeviceSupport; -using Crestron.SimplSharpPro.UI; -using PepperDash.Core; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.PageManagers; - -namespace PepperDash.Essentials -{ - public class EssentialsTouchpanelController : Device - { - public BasicTriListWithSmartObject Panel { get; private set; } - - public PanelDriverBase PanelDriver { get; private set; } - - CTimer BacklightTransitionedOnTimer; - - public EssentialsTouchpanelController(string key, string name, Tswx52ButtonVoiceControl tsw, - string projectName, string sgdPath) - : base(key, name) - { - Panel = tsw; - tsw.LoadSmartObjects(sgdPath); - tsw.SigChange += new Crestron.SimplSharpPro.DeviceSupport.SigEventHandler(Tsw_SigChange); - } - - /// - /// Config constructor - /// - public EssentialsTouchpanelController(string key, string name, string type, CrestronTouchpanelPropertiesConfig props, uint id) - : base(key, name) - { - AddPostActivationAction(() => - { - Debug.Console(0, this, "post-activation linking"); - type = type.ToLower(); - try - { - if (type == "crestronapp") - { - var app = new CrestronApp(id, Global.ControlSystem); - app.ParameterProjectName.Value = props.ProjectName; - Panel = app; - } - else if (type == "tsw560") - Panel = new Tsw560(id, Global.ControlSystem); - else if (type == "tsw752") - Panel = new Tsw752(id, Global.ControlSystem); - else if (type == "tsw1052") - Panel = new Tsw1052(id, Global.ControlSystem); - else - { - Debug.Console(0, this, "WARNING: Cannot create TSW controller with type '{0}'", type); - return; - } - } - catch (Exception e) - { - Debug.Console(0, this, "WARNING: Cannot create TSW base class. Panel will not function: {0}", e.Message); - return; - } - - // Reserved sigs - if (Panel is TswFt5ButtonSystem) - { - var tsw = Panel as TswFt5ButtonSystem; - tsw.ExtenderSystemReservedSigs.Use(); - tsw.ExtenderSystemReservedSigs.DeviceExtenderSigChange - += ExtenderSystemReservedSigs_DeviceExtenderSigChange; - } - - new CTimer(o => - { - var regSuccess = Panel.Register(); - if (regSuccess != eDeviceRegistrationUnRegistrationResponse.Success) - Debug.Console(0, this, "WARNING: Registration failed. Continuing, but panel may not function: {0}", regSuccess); - - // Give up cleanly if SGD is not present. - var sgdName = @"\NVRAM\Program" + InitialParametersClass.ApplicationNumber - + @"\sgd\" + props.SgdFile; - if (!File.Exists(sgdName)) - { - Debug.Console(0, this, "WARNING: Smart object file '{0}' not present. Exiting TSW load", sgdName); - return; - } - - Panel.LoadSmartObjects(sgdName); - Panel.SigChange += Tsw_SigChange; - - var mainDriver = new EssentialsPanelMainInterfaceDriver(Panel, props); - // Then the AV driver - - // spin up different room drivers depending on room type - var room = DeviceManager.GetDeviceForKey(props.DefaultRoomKey); - if (room is EssentialsHuddleSpaceRoom) - { - Debug.Console(0, this, "Adding huddle space driver"); - var avDriver = new EssentialsHuddlePanelAvFunctionsDriver(mainDriver, props); - avDriver.CurrentRoom = room as EssentialsHuddleSpaceRoom; - avDriver.DefaultRoomKey = props.DefaultRoomKey; - mainDriver.AvDriver = avDriver; - LoadAndShowDriver(mainDriver); // This is a little convoluted. - - if (Panel is TswFt5ButtonSystem) - { - var tsw = Panel as TswFt5ButtonSystem; - // Wire up hard keys - tsw.Power.UserObject = new Action(b => { if (!b) avDriver.PowerButtonPressed(); }); - //tsw.Home.UserObject = new Action(b => { if (!b) HomePressed(); }); - tsw.Up.UserObject = new Action(avDriver.VolumeUpPress); - tsw.Down.UserObject = new Action(avDriver.VolumeDownPress); - tsw.ButtonStateChange += new ButtonEventHandler(Tsw_ButtonStateChange); - } - } - else if (room is EssentialsPresentationRoom) - { - Debug.Console(0, this, "Adding presentation room driver"); - var avDriver = new EssentialsPresentationPanelAvFunctionsDriver(mainDriver, props); - avDriver.CurrentRoom = room as EssentialsPresentationRoom; - avDriver.DefaultRoomKey = props.DefaultRoomKey; - mainDriver.AvDriver = avDriver; - LoadAndShowDriver(mainDriver); - - if (Panel is TswFt5ButtonSystem) - { - var tsw = Panel as TswFt5ButtonSystem; - // Wire up hard keys - tsw.Power.UserObject = new Action(b => { if (!b) avDriver.PowerButtonPressed(); }); - //tsw.Home.UserObject = new Action(b => { if (!b) HomePressed(); }); - tsw.Up.UserObject = new Action(avDriver.VolumeUpPress); - tsw.Down.UserObject = new Action(avDriver.VolumeDownPress); - tsw.ButtonStateChange += new ButtonEventHandler(Tsw_ButtonStateChange); - } - } - else - { - Debug.Console(0, this, "ERROR: Cannot load AvFunctionsDriver for room '{0}'", props.DefaultRoomKey); - } - }, 0); - }); - } - - public void LoadAndShowDriver(PanelDriverBase driver) - { - PanelDriver = driver; - driver.Show(); - } - - void HomePressed() - { - if (BacklightTransitionedOnTimer == null) - PanelDriver.BackButtonPressed(); - } - - - void ExtenderSystemReservedSigs_DeviceExtenderSigChange(DeviceExtender currentDeviceExtender, SigEventArgs args) - { - // If the sig is transitioning on, mark it in case it was home button that transitioned it - var blOnSig = (Panel as TswFt5ButtonSystem).ExtenderSystemReservedSigs.BacklightOnFeedback; - if (args.Sig == blOnSig && blOnSig.BoolValue) - { - BacklightTransitionedOnTimer = new CTimer(o => - { - BacklightTransitionedOnTimer = null; - }, 200); - } - } - - public void PulseBool(uint join) - { - var act = Panel.BooleanInput[join].UserObject as Action; - if (act != null) - { - act(true); - act(false); - } - } - - public void SetBoolSig(uint join, bool value) - { - var act = Panel.BooleanInput[join].UserObject as Action; - if (act != null) - act(value); - } - - public void SetIntSig(uint join, ushort value) - { - var act = Panel.BooleanInput[join].UserObject as Action; - if (act != null) - { - act(value); - } - } - - void Tsw_SigChange(object currentDevice, Crestron.SimplSharpPro.SigEventArgs args) - { - if (Debug.Level == 2) - Debug.Console(2, this, "Sig change: {0} {1}={2}", args.Sig.Type, args.Sig.Number, args.Sig.StringValue); - 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); - } - - void Tsw_ButtonStateChange(GenericBase device, ButtonEventArgs args) - { - var uo = args.Button.UserObject; - if(uo is Action) - (uo as Action)(args.Button.State == eButtonState.Pressed); - } - } -} \ No newline at end of file diff --git a/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/UI/SubpageReferenceListActivityItem.cs b/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/UI/SubpageReferenceListActivityItem.cs deleted file mode 100644 index 4747a61a..00000000 --- a/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/UI/SubpageReferenceListActivityItem.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; -using Crestron.SimplSharpPro.UI; - -using PepperDash.Essentials.Core; - -namespace PepperDash.Essentials -{ - public class SubpageReferenceListActivityItem : SubpageReferenceListItem - { - /// - /// - /// - /// - /// - /// 0=Share, 1=Phone Call, 2=Video Call, 3=End Meeting - /// - public SubpageReferenceListActivityItem(uint index, SubpageReferenceList owner, - ushort buttonMode, Action pressAction) - : base(index, owner) - { - Owner.GetBoolFeedbackSig(Index, 1).UserObject = pressAction; - Owner.UShortInputSig(Index, 1).UShortValue = buttonMode; - } - - /// - /// Called by SRL to release all referenced objects - /// - public override void Clear() - { - Owner.BoolInputSig(Index, 1).UserObject = null; - Owner.UShortInputSig(Index, 1).UShortValue = 0; - } - } -} \ No newline at end of file diff --git a/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/UI/SubpageReferenceListSourceItem.cs b/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/UI/SubpageReferenceListSourceItem.cs deleted file mode 100644 index 73cc5e71..00000000 --- a/EssentialsHuddleWorkflow/EssentialsHuddleWorkflow/UI/SubpageReferenceListSourceItem.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; -using Crestron.SimplSharpPro.UI; - -using PepperDash.Essentials.Core; - -namespace PepperDash.Essentials -{ - public class SubpageReferenceListSourceItem : SubpageReferenceListItem - { - public SourceListItem SourceItem { get; private set; } - - public SubpageReferenceListSourceItem(uint index, SubpageReferenceList owner, - SourceListItem sourceItem, Action routeAction) - : base(index, owner) - { - SourceItem = sourceItem; - owner.GetBoolFeedbackSig(index, 1).UserObject = new Action(routeAction); - owner.StringInputSig(index, 1).StringValue = SourceItem.PreferredName; - } - - public void RegisterForSourceChange(IHasCurrentSourceInfoChange room) - { - room.CurrentSingleSourceChange -= room_CurrentSourceInfoChange; - room.CurrentSingleSourceChange += room_CurrentSourceInfoChange; - } - - void room_CurrentSourceInfoChange(EssentialsRoomBase room, SourceListItem info, ChangeType type) - { - if (type == ChangeType.WillChange && info == SourceItem) - ClearFeedback(); - else if (type == ChangeType.DidChange && info == SourceItem) - SetFeedback(); - } - - /// - /// Called by SRL to release all referenced objects - /// - public override void Clear() - { - Owner.BoolInputSig(Index, 1).UserObject = null; - Owner.StringInputSig(Index, 1).StringValue = ""; - } - - /// - /// Sets the selected feedback on the button - /// - public void SetFeedback() - { - Owner.BoolInputSig(Index, 1).BoolValue = true; - } - - /// - /// Clears the selected feedback on the button - /// - public void ClearFeedback() - { - Owner.BoolInputSig(Index, 1).BoolValue = false; - } - } -} \ No newline at end of file diff --git a/Essentials/PepperDashEssentials.sln b/PepperDashEssentials.sln similarity index 82% rename from Essentials/PepperDashEssentials.sln rename to PepperDashEssentials.sln index 54d8cf38..c1352b37 100644 --- a/Essentials/PepperDashEssentials.sln +++ b/PepperDashEssentials.sln @@ -1,21 +1,21 @@  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDashEssentials", "PepperDashEssentials\PepperDashEssentials.csproj", "{1BED5BA9-88C4-4365-9362-6F4B128071D3}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDashEssentials", ".\PepperDashEssentials\PepperDashEssentials.csproj", "{1BED5BA9-88C4-4365-9362-6F4B128071D3}" ProjectSection(ProjectDependencies) = postProject {892B761C-E479-44CE-BD74-243E9214AF13} = {892B761C-E479-44CE-BD74-243E9214AF13} {9199CE8A-0C9F-4952-8672-3EED798B284F} = {9199CE8A-0C9F-4952-8672-3EED798B284F} {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5} = {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDash_Essentials_Core", "..\Essentials Core\PepperDashEssentialsBase\PepperDash_Essentials_Core.csproj", "{A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PepperDash_Essentials_Core", ".\essentials-framework\Essentials Core\PepperDashEssentialsBase\PepperDash_Essentials_Core.csproj", "{A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Essentials Devices Common", "..\Essentials Devices Common\Essentials Devices Common\Essentials Devices Common.csproj", "{892B761C-E479-44CE-BD74-243E9214AF13}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Essentials Devices Common", ".\essentials-framework\Essentials Devices Common\Essentials Devices Common\Essentials Devices Common.csproj", "{892B761C-E479-44CE-BD74-243E9214AF13}" ProjectSection(ProjectDependencies) = postProject {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5} = {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Essentials_DM", "..\Essentials DM\Essentials_DM\Essentials_DM.csproj", "{9199CE8A-0C9F-4952-8672-3EED798B284F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Essentials_DM", ".\essentials-framework\Essentials DM\Essentials_DM\Essentials_DM.csproj", "{9199CE8A-0C9F-4952-8672-3EED798B284F}" ProjectSection(ProjectDependencies) = postProject {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5} = {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5} EndProjectSection diff --git a/Essentials/PepperDashEssentials/Audio/EssentialsVolumeLevelConfig.cs b/PepperDashEssentials/Audio/EssentialsVolumeLevelConfig.cs similarity index 100% rename from Essentials/PepperDashEssentials/Audio/EssentialsVolumeLevelConfig.cs rename to PepperDashEssentials/Audio/EssentialsVolumeLevelConfig.cs diff --git a/Essentials/PepperDashEssentials/ClassDiagram1.cd b/PepperDashEssentials/ClassDiagram1.cd similarity index 97% rename from Essentials/PepperDashEssentials/ClassDiagram1.cd rename to PepperDashEssentials/ClassDiagram1.cd index 5eacaf59..aa0f4ed0 100644 --- a/Essentials/PepperDashEssentials/ClassDiagram1.cd +++ b/PepperDashEssentials/ClassDiagram1.cd @@ -1,881 +1,881 @@ - - - - - - AAAAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAIAgA= - Audio\EssentialsVolumeLevelConfig.cs - - - - - - AAAAAAAAEAAAAAAAAAAAAAAAAIAAAAgBAAAAAAAAAAA= - Audio\EssentialsVolumeLevelConfig.cs - - - - - - AAAAAAAIAAAAAAAABAAAACAAIAAAAQAAAAAAAAAAEAA= - Config\ConfigReader.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA= - Config\DeviceFactory.cs - - - - - - AAAAAAEAAAAAQAIAAAAAAAACAAAAAAAAAAAAAAEAAAA= - Config\EssentialsConfig.cs - - - - - - AAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Config\EssentialsConfig.cs - - - - - - AAAAAAAgEAAAAAAEAAAAAAAAAAAAAAAAAAAAAEAIAIA= - Configuration ORIGINAL\ConfigTieLine.cs - - - - - - AEAAAAAAAAAAgQAAAAAAgAAAAAAAAAAAAAAgEDAADAQ= - Configuration ORIGINAL\Configuration.cs - - - - - - AAAAAAAAAAAAAAQAAAAAAAQAAACAAAAAAAAAAAAAAAA= - Configuration ORIGINAL\Configuration.cs - - - - - - AAAAAAAAAgAAAAAAAEAAAAAAAAAAAAAAAAAgAAAAAAA= - Configuration ORIGINAL\Configuration.cs - - - - - - IQAAAAAEAAAAAAADAAACABQAAAAAAAAAAAAAAAAAAAA= - Configuration ORIGINAL\Configuration.cs - - - - - - AAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAgAAAIAAA= - Configuration ORIGINAL\ConfigurationHelpers.cs - - - - - - AAAAAAAAAAAQAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA= - Configuration ORIGINAL\Factories\DmFactory.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAEDAAKAA= - Configuration ORIGINAL\Factories\FactoryHelper.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAABAAAA= - Configuration ORIGINAL\Factories\FactoryHelper.cs - - - - - - AAoAgAAIAEAACAAEAIEIBICAAAAAAABAAAAAAAAAAAA= - ControlSystem.cs - - - - - - AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA= - Devices\Amplifier.cs - - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAA= - Room\Cotija\CotijaConfig.cs - - - - - - AAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAA= - Room\Cotija\CotijaConfig.cs - - - - - - CAAABAABAgACCAKGBIAAEyBAFAAACYSAgIAAAAJkAAA= - Room\Cotija\CotijaSystemController.cs - - - - - - AAQIQAAAAAAAAgAAAAAAQAAAAAAAAAAAAAAAABAAAAA= - Room\Cotija\RoomBridges\CotijaBridgeBase.cs - - - - - - AAAIAAAAIABAAkgAABgIAAAAAAAAAEAAAAAAgBAAACA= - Room\Cotija\RoomBridges\CotijaEssentialsHuddleSpaceRoomBridge.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA= - Room\Cotija\RoomBridges\CotijaEssentialsHuddleSpaceRoomBridge.cs - - - - - - iQFBQAIAAgAAgQAEQACAMABAAABAACAQUAAQAAgCgBA= - Room\Types\EssentialsHuddleSpaceRoom.cs - - - - - - - iQFBQAIAIgQMgQAEQAigMABAAABAADIwUACQAAgCgTE= - Room\Types\EssentialsHuddleVtc1Room.cs - - - - - - - iQAEAAIACkAAAQAOQASgMAAJAABgAAAQQAAQAAgCgBA= - Room\Types\EssentialsPresentationRoom.cs - - - - - - - gQAAEAICECgCAQAEAAAUIwIyAAAAgACiAgAAAQECAgA= - Room\Types\EssentialsRoomBase.cs - - - - - - AICCIAAIGIAAAAAgCAAIAEAAAAAAAAAAAAEAIAAAAAA= - UI\CrestronTouchpanelPropertiesConfig.cs - - - - - - AAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - UI\CrestronTouchpanelPropertiesConfig.cs - - - - - - AAAIAEAAAAAAAAAAAAAAAAEAAAAACKIBAAgACAAAAAA= - UI\EssentialsTouchpanelController.cs - - - - - - AAAAQAAAACAAAAABAAAAAAAAAABAAAAAAAAAAkAAAAA= - UI\HttpLogoServer.cs - - - - - - j+jWCNqEIGzi4UTaTgyn37kpncQJK7L42VMLmMgTE5A= - UI\JoinConstants\UIBoolJoin.cs - - - - - - BAggBIABCQAAGAAQAAAACAACAAAAAAAAAAIAAAAAAAA= - UI\JoinConstants\UISmartObjectJoin.cs - - - - - - BkBgIAgAAggOQAFGAYQIABACgCEBjkSQAUEAASIABCE= - UI\JoinConstants\UIStringlJoin.cs - - - - - - AAQAAAACAAAACAEAAIAAAAAAIABAIAAAABAAAEAAAAA= - UI\JoinConstants\UIUshortJoin.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA= - UI\SubpageReferenceListActivityItem.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA= - UI\SubpageReferenceListCallStagingItem.cs - - - - - - AAAABAAAAAAAAAAAAAAAAAAAAgAAAAACAAAAAABgAAA= - UI\SubpageReferenceListSourceItem.cs - - - - - - CAAIkAAAAAAQEAAAEAACAAAAAIAEABAAAgAACAAAAAA= - UIDrivers\enums and base.cs - - - - - - ABAAAAAAAhgAAAAAEAAAAAAAAIAEAAAAAAAAAAAAAAA= - UIDrivers\Essentials\EssentialsPanelMainInterfaceDriver.cs - - - - - - gTEAIIAiCggFNCQ4EA4AWBkAKJCEqAAOS4CKMAQQJQA= - UIDrivers\Essentials\EssentialsPresentationPanelAvFunctionsDriver.cs - - - - - - gRQAIICuAghENHQpEA4IWCkBMJDEsEAEC4CAMARQIBA= - UIDrivers\EssentialsHuddle\EssentialsHuddlePanelAvFunctionsDriver.cs - - - - - - GRwAIYC+oghAeHStEDAIWCdBMADEsBAcDwCAMARYIBg= - UIDrivers\EssentialsHuddleVTC\EssentialsHuddleVtc1PanelAvFunctionsDriver.cs - - - - - - - AAAQgAIAAAAAAAAAEAAAAAQAAAAEAAAAAAAAEAAAgAA= - UIDrivers\JoinedSigInterlock.cs - - - - - - AAAAAAAAAAAAAAAAEAAAQAAABIAEAAAAAAAAAAAAAAA= - UIDrivers\Page Drivers\SingleSubpageModalAndBackDriver.cs - - - - - - AAAAAAAAAAAAAAAAEAAAAAAABAAEAAAAAAAAAAAAAAA= - UIDrivers\Page Drivers\SingleSubpageModalDriver.cs - - - - - - AAAQAAIAAAAAAAAIEAAAAAAAAAAEAAAAAAAAEAAAgAA= - UIDrivers\SigInterlock.cs - - - - - - AAAAAAAACAAACBAAAAAAAAAAAAAAAAAAAAIAAAAAAQA= - UIDrivers\SmartObjectRoomsList.cs - - - - - - AAAAQAAAAAAAAAAAABAAQAAAAAAAAAACAAEAAAAAAAA= - UIDrivers\SmartObjectRoomsList.cs - - - - - - AAAAAAABAAAAAEAAAAAAAAAAAAAAAAAAAQAAAAAAAAA= - UIDrivers\VolumeAndSourceChangeArgs.cs - - - - - - IAGigRBpCgZwAIMSBBIbIgAAImAPtEBiAAgECpJgKQo= - OTHER\Fusion\EssentialsHuddleSpaceFusionSystemControllerBase.cs - - - - - - - AAAAAACgAIQAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAA= - OTHER\Fusion\EssentialsHuddleSpaceFusionSystemControllerBase.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAAAAAAAAAA= - OTHER\Fusion\EssentialsHuddleSpaceFusionSystemControllerBase.cs - - - - - - AACAAAAAAgAAAIAAAAAAAAAgIBAQAAAAAAAAAAAAAQA= - OTHER\Fusion\EssentialsHuddleVtc1FusionController.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionEventHandlers.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAA= - OTHER\Fusion\FusionEventHandlers.cs - - - - - - AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionProcessorQueries.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAA= - OTHER\Fusion\FusionProcessorQueries.cs - - - - - - AAICAAAAAAAAAAAAAAAAAACAAAATQAAAAAAAABAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAQAQAAAAAAAAQAAAAAAQAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAQAQAAAAAAAAQAAAAAAQAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAACACAAAAQAAAAAAAAAAAAAAAAAAAACAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAACAAAgAAQAAAAAAAAAAAAAAAAAAIAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAgAAQAAAAAAAAAAAAAAAAAAIAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAACAAAAAAQAAAAAAAAAAgAAAAAAAAAAABAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AABCAAAAYEAAEBIBAIAAJAQAQKAYAAAIEAAAEAACCgg= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAgAAAAAAAAAQAAAAAAAAAAAAAAAAEAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAgAQAAIAAAAAAACAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAIAgAAQAAAAAAAAEAAAAAAA= - Room\Config\DDVC01RoomPropertiesConfig.cs - - - - - - AAAAAAAAAAAAAAAAAEAAAAQAAAAAAAAAAAAAAAAAAAA= - Room\Config\DDVC01RoomPropertiesConfig.cs - - - - - - AAAAAAAAAAAAgAAAAAAAAAAACAAAAAABAAAAAAAAABA= - Room\Config\EssentialsHuddleRoomPropertiesConfig.cs - - - - - - AAAAAAAAAAAAgAAAAAAAAAAACIAAAAABAAAAAAAAABA= - Room\Config\EssentialsHuddleVtc1PropertiesConfig.cs - - - - - - AAAAAAACAIAAAAAAAAAAABAACAAAAAABAAAAAAAAABA= - Room\Config\EssentialsPresentationPropertiesConfig.cs - - - - - - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAEAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AABAEQAAAAEoAAEEAAQAAAACAAAAAAgggAAAAQAAAgA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AAAAAAAAAAEAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAgABAAAAAIAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AAAAAAAAAAAAAAAAAAAAQAAAgAAAAAAAAAAAAAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACQAAAAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AACAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AAAAAAAAAAAAABAACAAAAAAAAAAAAAAAAAAAAAAAAAA= - Room\Config\EssentialsRoomEmergencyConfig.cs - - - - - - AAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAABQAAAAAAAAA= - Room\Config\EssentialsRoomEmergencyConfig.cs - - - - - - AUAAAAgAAAACwAYAAAAAAAEAAAAAAAAAIcAAAEAAAAA= - Room\Cotija\CotijaDdvc01DeviceBridge.cs - - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= - Room\Cotija\DeviceTypeInterfaces\IChannelExtensions.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= - Room\Cotija\DeviceTypeInterfaces\IColorExtensions.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= - Room\Cotija\DeviceTypeInterfaces\IDPadExtensions.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= - Room\Cotija\DeviceTypeInterfaces\IDvrExtensions.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= - Room\Cotija\DeviceTypeInterfaces\INumericExtensions.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= - Room\Cotija\DeviceTypeInterfaces\IPowerExtensions.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= - Room\Cotija\DeviceTypeInterfaces\ISetTopBoxControlsExtensions.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= - Room\Cotija\DeviceTypeInterfaces\ITransportExtensions.cs - - - - - - gACIAAAAAAICAFAAAACAAAEIIAAAAAQAQAAAABAAAAA= - Room\Cotija\RoomBridges\CotijaDdvc01RoomBridge.cs - - - - - - - AAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Room\Emergency\EsentialsRoomEmergencyContactClosure.cs - - - - - - - AAAAAAAAAAAAAAAASBAAAAAAAAAAAAAABAAAAAAAEAA= - Room\Emergency\EsentialsRoomEmergencyContactClosure.cs - - - - - - AAAQAAAAAiACDAAAGCAACgAIAABECBAgQAAAAQAAAAA= - UIDrivers\EssentialsHuddle\EssentialsHuddleTechPageDriver.cs - - - - - - XAASAoAiAagwAcBAGAUURWQEOHQFAKCmAABCNSSEDPA= - UIDrivers\VC\EssentialsVideoCodecUiDriver.cs - - - - - - AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Room\Types\EssentialsRoomBase.cs - - - - - - AAgAAAAAAAAACBAAACAAAAIBAAAEAAAEAgAAAAAAIAA= - UIDrivers\EssentialsHuddleVTC\EssentialsHuddleVtc1PanelAvFunctionsDriver.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA= - Room\Cotija\Interfaces.cs - - - - - - AAAAAAAAQAAAAAAACAAAAAAAAAAAAAAAAAAAAAEACAA= - Room\Types\EssentialsRoomBase.cs - - - - - - AAAAAAAAACAAAAAAAAAAAAAAAAACAAAAAAAAAAEAAAA= - Room\Types\EssentialsRoomBase.cs - - - - - - AAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAIEAAAA= - Room\Types\EssentialsRoomBase.cs - - - - - - AIAAAAAAAAAAAAAAAhBAAAAAAAAAAACYAAAAAAAAAAA= - UIDrivers\enums and base.cs - - - - - - AAAAAAAAAAAAABAAAAAAAAAAAAAAACAAAEAAAAAAAAA= - UIDrivers\enums and base.cs - - - - - - AAAAAAAEAAAAAAAAAIAAAAAAAAQAAAAQAAAAAAAAAAA= - UIDrivers\enums and base.cs - - - - - - AAAAABAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAA= - UIDrivers\enums and base.cs - - - - - - AAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - UIDrivers\enums and base.cs - - - - - - AAAAgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - UIDrivers\VolumeAndSourceChangeArgs.cs - - - - - - AAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Room\Cotija\RoomBridges\CotijaEssentialsHuddleSpaceRoomBridge.cs - - - - - - AAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAACAAAAA= - UIDrivers\VolumeAndSourceChangeArgs.cs - - - + + + + + + AAAAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAIAgA= + Audio\EssentialsVolumeLevelConfig.cs + + + + + + AAAAAAAAEAAAAAAAAAAAAAAAAIAAAAgBAAAAAAAAAAA= + Audio\EssentialsVolumeLevelConfig.cs + + + + + + AAAAAAAIAAAAAAAABAAAACAAIAAAAQAAAAAAAAAAEAA= + Config\ConfigReader.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA= + Config\DeviceFactory.cs + + + + + + AAAAAAEAAAAAQAIAAAAAAAACAAAAAAAAAAAAAAEAAAA= + Config\EssentialsConfig.cs + + + + + + AAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Config\EssentialsConfig.cs + + + + + + AAAAAAAgEAAAAAAEAAAAAAAAAAAAAAAAAAAAAEAIAIA= + Configuration ORIGINAL\ConfigTieLine.cs + + + + + + AEAAAAAAAAAAgQAAAAAAgAAAAAAAAAAAAAAgEDAADAQ= + Configuration ORIGINAL\Configuration.cs + + + + + + AAAAAAAAAAAAAAQAAAAAAAQAAACAAAAAAAAAAAAAAAA= + Configuration ORIGINAL\Configuration.cs + + + + + + AAAAAAAAAgAAAAAAAEAAAAAAAAAAAAAAAAAgAAAAAAA= + Configuration ORIGINAL\Configuration.cs + + + + + + IQAAAAAEAAAAAAADAAACABQAAAAAAAAAAAAAAAAAAAA= + Configuration ORIGINAL\Configuration.cs + + + + + + AAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAgAAAIAAA= + Configuration ORIGINAL\ConfigurationHelpers.cs + + + + + + AAAAAAAAAAAQAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA= + Configuration ORIGINAL\Factories\DmFactory.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAEDAAKAA= + Configuration ORIGINAL\Factories\FactoryHelper.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAABAAAA= + Configuration ORIGINAL\Factories\FactoryHelper.cs + + + + + + AAoAgAAIAEAACAAEAIEIBICAAAAAAABAAAAAAAAAAAA= + ControlSystem.cs + + + + + + AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA= + Devices\Amplifier.cs + + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAA= + Room\Cotija\CotijaConfig.cs + + + + + + AAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAA= + Room\Cotija\CotijaConfig.cs + + + + + + CAAABAABAgACCAKGBIAAEyBAFAAACYSAgIAAAAJkAAA= + Room\Cotija\CotijaSystemController.cs + + + + + + AAQIQAAAAAAAAgAAAAAAQAAAAAAAAAAAAAAAABAAAAA= + Room\Cotija\RoomBridges\CotijaBridgeBase.cs + + + + + + AAAIAAAAIABAAkgAABgIAAAAAAAAAEAAAAAAgBAAACA= + Room\Cotija\RoomBridges\CotijaEssentialsHuddleSpaceRoomBridge.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA= + Room\Cotija\RoomBridges\CotijaEssentialsHuddleSpaceRoomBridge.cs + + + + + + iQFBQAIAAgAAgQAEQACAMABAAABAACAQUAAQAAgCgBA= + Room\Types\EssentialsHuddleSpaceRoom.cs + + + + + + + iQFBQAIAIgQMgQAEQAigMABAAABAADIwUACQAAgCgTE= + Room\Types\EssentialsHuddleVtc1Room.cs + + + + + + + iQAEAAIACkAAAQAOQASgMAAJAABgAAAQQAAQAAgCgBA= + Room\Types\EssentialsPresentationRoom.cs + + + + + + + gQAAEAICECgCAQAEAAAUIwIyAAAAgACiAgAAAQECAgA= + Room\Types\EssentialsRoomBase.cs + + + + + + AICCIAAIGIAAAAAgCAAIAEAAAAAAAAAAAAEAIAAAAAA= + UI\CrestronTouchpanelPropertiesConfig.cs + + + + + + AAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + UI\CrestronTouchpanelPropertiesConfig.cs + + + + + + AAAIAEAAAAAAAAAAAAAAAAEAAAAACKIBAAgACAAAAAA= + UI\EssentialsTouchpanelController.cs + + + + + + AAAAQAAAACAAAAABAAAAAAAAAABAAAAAAAAAAkAAAAA= + UI\HttpLogoServer.cs + + + + + + j+jWCNqEIGzi4UTaTgyn37kpncQJK7L42VMLmMgTE5A= + UI\JoinConstants\UIBoolJoin.cs + + + + + + BAggBIABCQAAGAAQAAAACAACAAAAAAAAAAIAAAAAAAA= + UI\JoinConstants\UISmartObjectJoin.cs + + + + + + BkBgIAgAAggOQAFGAYQIABACgCEBjkSQAUEAASIABCE= + UI\JoinConstants\UIStringlJoin.cs + + + + + + AAQAAAACAAAACAEAAIAAAAAAIABAIAAAABAAAEAAAAA= + UI\JoinConstants\UIUshortJoin.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA= + UI\SubpageReferenceListActivityItem.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA= + UI\SubpageReferenceListCallStagingItem.cs + + + + + + AAAABAAAAAAAAAAAAAAAAAAAAgAAAAACAAAAAABgAAA= + UI\SubpageReferenceListSourceItem.cs + + + + + + CAAIkAAAAAAQEAAAEAACAAAAAIAEABAAAgAACAAAAAA= + UIDrivers\enums and base.cs + + + + + + ABAAAAAAAhgAAAAAEAAAAAAAAIAEAAAAAAAAAAAAAAA= + UIDrivers\Essentials\EssentialsPanelMainInterfaceDriver.cs + + + + + + gTEAIIAiCggFNCQ4EA4AWBkAKJCEqAAOS4CKMAQQJQA= + UIDrivers\Essentials\EssentialsPresentationPanelAvFunctionsDriver.cs + + + + + + gRQAIICuAghENHQpEA4IWCkBMJDEsEAEC4CAMARQIBA= + UIDrivers\EssentialsHuddle\EssentialsHuddlePanelAvFunctionsDriver.cs + + + + + + GRwAIYC+oghAeHStEDAIWCdBMADEsBAcDwCAMARYIBg= + UIDrivers\EssentialsHuddleVTC\EssentialsHuddleVtc1PanelAvFunctionsDriver.cs + + + + + + + AAAQgAIAAAAAAAAAEAAAAAQAAAAEAAAAAAAAEAAAgAA= + UIDrivers\JoinedSigInterlock.cs + + + + + + AAAAAAAAAAAAAAAAEAAAQAAABIAEAAAAAAAAAAAAAAA= + UIDrivers\Page Drivers\SingleSubpageModalAndBackDriver.cs + + + + + + AAAAAAAAAAAAAAAAEAAAAAAABAAEAAAAAAAAAAAAAAA= + UIDrivers\Page Drivers\SingleSubpageModalDriver.cs + + + + + + AAAQAAIAAAAAAAAIEAAAAAAAAAAEAAAAAAAAEAAAgAA= + UIDrivers\SigInterlock.cs + + + + + + AAAAAAAACAAACBAAAAAAAAAAAAAAAAAAAAIAAAAAAQA= + UIDrivers\SmartObjectRoomsList.cs + + + + + + AAAAQAAAAAAAAAAAABAAQAAAAAAAAAACAAEAAAAAAAA= + UIDrivers\SmartObjectRoomsList.cs + + + + + + AAAAAAABAAAAAEAAAAAAAAAAAAAAAAAAAQAAAAAAAAA= + UIDrivers\VolumeAndSourceChangeArgs.cs + + + + + + IAGigRBpCgZwAIMSBBIbIgAAImAPtEBiAAgECpJgKQo= + OTHER\Fusion\EssentialsHuddleSpaceFusionSystemControllerBase.cs + + + + + + + AAAAAACgAIQAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAA= + OTHER\Fusion\EssentialsHuddleSpaceFusionSystemControllerBase.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAAAAAAAAAA= + OTHER\Fusion\EssentialsHuddleSpaceFusionSystemControllerBase.cs + + + + + + AACAAAAAAgAAAIAAAAAAAAAgIBAQAAAAAAAAAAAAAQA= + OTHER\Fusion\EssentialsHuddleVtc1FusionController.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAA= + OTHER\Fusion\FusionEventHandlers.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAA= + OTHER\Fusion\FusionEventHandlers.cs + + + + + + AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + OTHER\Fusion\FusionProcessorQueries.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAA= + OTHER\Fusion\FusionProcessorQueries.cs + + + + + + AAICAAAAAAAAAAAAAAAAAACAAAATQAAAAAAAABAAAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAQAQAAAAAAAAQAAAAAAQAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAQAQAAAAAAAAQAAAAAAQAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAACACAAAAQAAAAAAAAAAAAAAAAAAAACAAAAAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAACAAAgAAQAAAAAAAAAAAAAAAAAAIAAAAAAAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAAAAAAgAAQAAAAAAAAAAAAAAAAAAIAAAAAAAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAACAAAAAAQAAAAAAAAAAgAAAAAAAAAAABAAAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AABCAAAAYEAAEBIBAIAAJAQAQKAYAAAIEAAAEAACCgg= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAAAAAAAgAAAAAAAAAQAAAAAAAAAAAAAAAAEAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAAAAAAAgAQAAIAAAAAAACAAAAAAAAAAAAAAAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAA= + OTHER\Fusion\FusionRviDataClasses.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAIAgAAQAAAAAAAAEAAAAAAA= + Room\Config\DDVC01RoomPropertiesConfig.cs + + + + + + AAAAAAAAAAAAAAAAAEAAAAQAAAAAAAAAAAAAAAAAAAA= + Room\Config\DDVC01RoomPropertiesConfig.cs + + + + + + AAAAAAAAAAAAgAAAAAAAAAAACAAAAAABAAAAAAAAABA= + Room\Config\EssentialsHuddleRoomPropertiesConfig.cs + + + + + + AAAAAAAAAAAAgAAAAAAAAAAACIAAAAABAAAAAAAAABA= + Room\Config\EssentialsHuddleVtc1PropertiesConfig.cs + + + + + + AAAAAAACAIAAAAAAAAAAABAACAAAAAABAAAAAAAAABA= + Room\Config\EssentialsPresentationPropertiesConfig.cs + + + + + + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAEAAAAAA= + Room\Config\EssentialsRoomConfig.cs + + + + + + AABAEQAAAAEoAAEEAAQAAAACAAAAAAgggAAAAQAAAgA= + Room\Config\EssentialsRoomConfig.cs + + + + + + AAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Room\Config\EssentialsRoomConfig.cs + + + + + + AAAAAAAAAAEAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAA= + Room\Config\EssentialsRoomConfig.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAgABAAAAAIAAAAAA= + Room\Config\EssentialsRoomConfig.cs + + + + + + AAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA= + Room\Config\EssentialsRoomConfig.cs + + + + + + AAAAAAAAAAAAAAAAAAAAQAAAgAAAAAAAAAAAAAAAAAA= + Room\Config\EssentialsRoomConfig.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACQAAAAAAAAA= + Room\Config\EssentialsRoomConfig.cs + + + + + + AACAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAA= + Room\Config\EssentialsRoomConfig.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA= + Room\Config\EssentialsRoomConfig.cs + + + + + + AAAAAAAAAAAAABAACAAAAAAAAAAAAAAAAAAAAAAAAAA= + Room\Config\EssentialsRoomEmergencyConfig.cs + + + + + + AAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAABQAAAAAAAAA= + Room\Config\EssentialsRoomEmergencyConfig.cs + + + + + + AUAAAAgAAAACwAYAAAAAAAEAAAAAAAAAIcAAAEAAAAA= + Room\Cotija\CotijaDdvc01DeviceBridge.cs + + + + + + + AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= + Room\Cotija\DeviceTypeInterfaces\IChannelExtensions.cs + + + + + + AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= + Room\Cotija\DeviceTypeInterfaces\IColorExtensions.cs + + + + + + AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= + Room\Cotija\DeviceTypeInterfaces\IDPadExtensions.cs + + + + + + AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= + Room\Cotija\DeviceTypeInterfaces\IDvrExtensions.cs + + + + + + AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= + Room\Cotija\DeviceTypeInterfaces\INumericExtensions.cs + + + + + + AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= + Room\Cotija\DeviceTypeInterfaces\IPowerExtensions.cs + + + + + + AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= + Room\Cotija\DeviceTypeInterfaces\ISetTopBoxControlsExtensions.cs + + + + + + AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= + Room\Cotija\DeviceTypeInterfaces\ITransportExtensions.cs + + + + + + gACIAAAAAAICAFAAAACAAAEIIAAAAAQAQAAAABAAAAA= + Room\Cotija\RoomBridges\CotijaDdvc01RoomBridge.cs + + + + + + + AAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Room\Emergency\EsentialsRoomEmergencyContactClosure.cs + + + + + + + AAAAAAAAAAAAAAAASBAAAAAAAAAAAAAABAAAAAAAEAA= + Room\Emergency\EsentialsRoomEmergencyContactClosure.cs + + + + + + AAAQAAAAAiACDAAAGCAACgAIAABECBAgQAAAAQAAAAA= + UIDrivers\EssentialsHuddle\EssentialsHuddleTechPageDriver.cs + + + + + + XAASAoAiAagwAcBAGAUURWQEOHQFAKCmAABCNSSEDPA= + UIDrivers\VC\EssentialsVideoCodecUiDriver.cs + + + + + + AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Room\Types\EssentialsRoomBase.cs + + + + + + AAgAAAAAAAAACBAAACAAAAIBAAAEAAAEAgAAAAAAIAA= + UIDrivers\EssentialsHuddleVTC\EssentialsHuddleVtc1PanelAvFunctionsDriver.cs + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA= + Room\Cotija\Interfaces.cs + + + + + + AAAAAAAAQAAAAAAACAAAAAAAAAAAAAAAAAAAAAEACAA= + Room\Types\EssentialsRoomBase.cs + + + + + + AAAAAAAAACAAAAAAAAAAAAAAAAACAAAAAAAAAAEAAAA= + Room\Types\EssentialsRoomBase.cs + + + + + + AAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAIEAAAA= + Room\Types\EssentialsRoomBase.cs + + + + + + AIAAAAAAAAAAAAAAAhBAAAAAAAAAAACYAAAAAAAAAAA= + UIDrivers\enums and base.cs + + + + + + AAAAAAAAAAAAABAAAAAAAAAAAAAAACAAAEAAAAAAAAA= + UIDrivers\enums and base.cs + + + + + + AAAAAAAEAAAAAAAAAIAAAAAAAAQAAAAQAAAAAAAAAAA= + UIDrivers\enums and base.cs + + + + + + AAAAABAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAA= + UIDrivers\enums and base.cs + + + + + + AAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + UIDrivers\enums and base.cs + + + + + + AAAAgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + UIDrivers\VolumeAndSourceChangeArgs.cs + + + + + + AAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + Room\Cotija\RoomBridges\CotijaEssentialsHuddleSpaceRoomBridge.cs + + + + + + AAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAACAAAAA= + UIDrivers\VolumeAndSourceChangeArgs.cs + + + \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Config/ConfigReader.cs b/PepperDashEssentials/Config/ConfigReader.cs similarity index 96% rename from Essentials/PepperDashEssentials/Config/ConfigReader.cs rename to PepperDashEssentials/Config/ConfigReader.cs index 7b76b067..5c517a13 100644 --- a/Essentials/PepperDashEssentials/Config/ConfigReader.cs +++ b/PepperDashEssentials/Config/ConfigReader.cs @@ -1,188 +1,188 @@ -using System; -using System.Linq; -using Crestron.SimplSharp; -using Crestron.SimplSharp.CrestronIO; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using PepperDash.Core; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.Config; - -namespace PepperDash.Essentials -{ - /// - /// Loads the ConfigObject from the file - /// - public class ConfigReader - { - public static EssentialsConfig ConfigObject { get; private set; } - - public static bool LoadConfig2() - { - Debug.Console(0, Debug.ErrorLogLevel.Notice, "Loading unmerged system/template portal configuration file."); - try - { - var filePath = Global.FilePathPrefix + "configurationFile.json"; - - Debug.Console(0, Debug.ErrorLogLevel.Notice, "Attempting to load config file: '{0}'", filePath); - - if (!File.Exists(filePath)) - { - Debug.Console(0, Debug.ErrorLogLevel.Error, - "ERROR: Configuration file not present. Please load file to {0} and reset program", filePath); - return false; - } - - using (StreamReader fs = new StreamReader(filePath)) - { - var doubleObj = JObject.Parse(fs.ReadToEnd()); - ConfigObject = MergeConfigs(doubleObj).ToObject(); - - // Extract SystemUrl and TemplateUrl into final config output - - if (doubleObj["system_url"] != null) - { - ConfigObject.SystemUrl = doubleObj["system_url"].Value(); - } - - if (doubleObj["template_url"] != null) - { - ConfigObject.TemplateUrl= doubleObj["template_url"].Value(); - } - } - - Debug.Console(0, Debug.ErrorLogLevel.Notice, "Successfully Loaded Merged Config"); - - return true; - } - catch (Exception e) - { - Debug.Console(0, Debug.ErrorLogLevel.Error, "ERROR: Config load failed: \r{0}", e); - return false; - } - } - - - static JObject MergeConfigs(JObject doubleConfig) - { - var system = JObject.FromObject(doubleConfig["system"]); - var template = JObject.FromObject(doubleConfig["template"]); - var merged = new JObject(); - - // Put together top-level objects - // skip any objects that don't have template objects - - if (system["info"] != null) - merged.Add("info", Merge(template["info"], system["info"])); - else - merged.Add("info", template["info"]); - - merged.Add("devices", MergeArraysOnTopLevelProperty(template["devices"] as JArray, - system["devices"] as JArray, "uid")); - - if (template["rooms"] != null) - { - if (system["rooms"] == null) - merged.Add("rooms", template["rooms"]); - else - merged.Add("rooms", MergeArraysOnTopLevelProperty(template["rooms"] as JArray, - system["rooms"] as JArray, "key")); - } - - if (template["sourceLists"] != null) - { - if (system["sourceLists"] == null) - merged.Add("sourceLists", template["sourceLists"]); - else - merged.Add("sourceLists", Merge(template["sourceLists"], system["sourceLists"])); - } - - // Template tie lines take precdence. Config tool doesn't do them at system - // level anyway... - if (template["tieLines"] != null) - merged.Add("tieLines", template["tieLines"]); - //else if (system["tieLines"] != null) - // merged.Add("tieLines", system["tieLines"]); - //else - // merged.Add("tieLines", new JArray()); - - Debug.Console(2, "MERGED CONFIG RESULT: \x0d\x0a{0}", merged); - return merged; - } - - /// - /// Merges the contents of a base and a delta array, matching the entries on a top-level property - /// given by propertyName. Returns a merge of them. Items in the delta array that do not have - /// a matched item in base array will not be merged. - /// - static JArray MergeArraysOnTopLevelProperty(JArray a1, JArray a2, string propertyName) - { - var result = new JArray(); - if (a2 == null) - result = a1; - else if (a1 != null) - { - for (int i = 0; i < a1.Count(); i++) - { - var a1Dev = a1[i]; - // Try to get a system device and if found, merge it onto template - var a2Match = a2.FirstOrDefault(t => t[propertyName].Equals(a1Dev[propertyName]));// t.Value("uid") == tmplDev.Value("uid")); - if (a2Match != null) - { - var mergedItem = Merge(a1Dev, a2Match);// Merge(JObject.FromObject(a1Dev), JObject.FromObject(a2Match)); - result.Add(mergedItem); - } - else - result.Add(a1Dev); - } - } - return result; - } - - - /// - /// Helper for using with JTokens. Converts to JObject - /// - static JObject Merge(JToken t1, JToken t2) - { - return Merge(JObject.FromObject(t1), JObject.FromObject(t2)); - } - - /// - /// Merge b ONTO a - /// - /// - /// - static JObject Merge(JObject o1, JObject o2) - { - foreach (var o2Prop in o2) - { - var o1Value = o1[o2Prop.Key]; - if (o1Value == null) - o1.Add(o2Prop.Key, o2Prop.Value); - else - { - JToken replacement = null; - if (o2Prop.Value.HasValues && o1Value.HasValues) // Drill down - replacement = Merge(JObject.FromObject(o1Value), JObject.FromObject(o2Prop.Value)); - else - replacement = o2Prop.Value; - o1[o2Prop.Key].Replace(replacement); - } - } - return o1; - } - - /// - /// Returns the group for a given device key in config - /// - /// - /// - public static string GetGroupForDeviceKey(string key) - { - var dev = ConfigObject.Devices.FirstOrDefault(d => d.Key.Equals(key, StringComparison.OrdinalIgnoreCase)); - return dev == null ? null : dev.Group; - } - - } +using System; +using System.Linq; +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronIO; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Config; + +namespace PepperDash.Essentials +{ + /// + /// Loads the ConfigObject from the file + /// + public class ConfigReader + { + public static EssentialsConfig ConfigObject { get; private set; } + + public static bool LoadConfig2() + { + Debug.Console(0, Debug.ErrorLogLevel.Notice, "Loading unmerged system/template portal configuration file."); + try + { + var filePath = Global.FilePathPrefix + "configurationFile.json"; + + Debug.Console(0, Debug.ErrorLogLevel.Notice, "Attempting to load config file: '{0}'", filePath); + + if (!File.Exists(filePath)) + { + Debug.Console(0, Debug.ErrorLogLevel.Error, + "ERROR: Configuration file not present. Please load file to {0} and reset program", filePath); + return false; + } + + using (StreamReader fs = new StreamReader(filePath)) + { + var doubleObj = JObject.Parse(fs.ReadToEnd()); + ConfigObject = MergeConfigs(doubleObj).ToObject(); + + // Extract SystemUrl and TemplateUrl into final config output + + if (doubleObj["system_url"] != null) + { + ConfigObject.SystemUrl = doubleObj["system_url"].Value(); + } + + if (doubleObj["template_url"] != null) + { + ConfigObject.TemplateUrl= doubleObj["template_url"].Value(); + } + } + + Debug.Console(0, Debug.ErrorLogLevel.Notice, "Successfully Loaded Merged Config"); + + return true; + } + catch (Exception e) + { + Debug.Console(0, Debug.ErrorLogLevel.Error, "ERROR: Config load failed: \r{0}", e); + return false; + } + } + + + static JObject MergeConfigs(JObject doubleConfig) + { + var system = JObject.FromObject(doubleConfig["system"]); + var template = JObject.FromObject(doubleConfig["template"]); + var merged = new JObject(); + + // Put together top-level objects + // skip any objects that don't have template objects + + if (system["info"] != null) + merged.Add("info", Merge(template["info"], system["info"])); + else + merged.Add("info", template["info"]); + + merged.Add("devices", MergeArraysOnTopLevelProperty(template["devices"] as JArray, + system["devices"] as JArray, "uid")); + + if (template["rooms"] != null) + { + if (system["rooms"] == null) + merged.Add("rooms", template["rooms"]); + else + merged.Add("rooms", MergeArraysOnTopLevelProperty(template["rooms"] as JArray, + system["rooms"] as JArray, "key")); + } + + if (template["sourceLists"] != null) + { + if (system["sourceLists"] == null) + merged.Add("sourceLists", template["sourceLists"]); + else + merged.Add("sourceLists", Merge(template["sourceLists"], system["sourceLists"])); + } + + // Template tie lines take precdence. Config tool doesn't do them at system + // level anyway... + if (template["tieLines"] != null) + merged.Add("tieLines", template["tieLines"]); + //else if (system["tieLines"] != null) + // merged.Add("tieLines", system["tieLines"]); + //else + // merged.Add("tieLines", new JArray()); + + Debug.Console(2, "MERGED CONFIG RESULT: \x0d\x0a{0}", merged); + return merged; + } + + /// + /// Merges the contents of a base and a delta array, matching the entries on a top-level property + /// given by propertyName. Returns a merge of them. Items in the delta array that do not have + /// a matched item in base array will not be merged. + /// + static JArray MergeArraysOnTopLevelProperty(JArray a1, JArray a2, string propertyName) + { + var result = new JArray(); + if (a2 == null) + result = a1; + else if (a1 != null) + { + for (int i = 0; i < a1.Count(); i++) + { + var a1Dev = a1[i]; + // Try to get a system device and if found, merge it onto template + var a2Match = a2.FirstOrDefault(t => t[propertyName].Equals(a1Dev[propertyName]));// t.Value("uid") == tmplDev.Value("uid")); + if (a2Match != null) + { + var mergedItem = Merge(a1Dev, a2Match);// Merge(JObject.FromObject(a1Dev), JObject.FromObject(a2Match)); + result.Add(mergedItem); + } + else + result.Add(a1Dev); + } + } + return result; + } + + + /// + /// Helper for using with JTokens. Converts to JObject + /// + static JObject Merge(JToken t1, JToken t2) + { + return Merge(JObject.FromObject(t1), JObject.FromObject(t2)); + } + + /// + /// Merge b ONTO a + /// + /// + /// + static JObject Merge(JObject o1, JObject o2) + { + foreach (var o2Prop in o2) + { + var o1Value = o1[o2Prop.Key]; + if (o1Value == null) + o1.Add(o2Prop.Key, o2Prop.Value); + else + { + JToken replacement = null; + if (o2Prop.Value.HasValues && o1Value.HasValues) // Drill down + replacement = Merge(JObject.FromObject(o1Value), JObject.FromObject(o2Prop.Value)); + else + replacement = o2Prop.Value; + o1[o2Prop.Key].Replace(replacement); + } + } + return o1; + } + + /// + /// Returns the group for a given device key in config + /// + /// + /// + public static string GetGroupForDeviceKey(string key) + { + var dev = ConfigObject.Devices.FirstOrDefault(d => d.Key.Equals(key, StringComparison.OrdinalIgnoreCase)); + return dev == null ? null : dev.Group; + } + + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Config/EssentialsConfig.cs b/PepperDashEssentials/Config/EssentialsConfig.cs similarity index 95% rename from Essentials/PepperDashEssentials/Config/EssentialsConfig.cs rename to PepperDashEssentials/Config/EssentialsConfig.cs index 75f4a12f..71c2be9f 100644 --- a/Essentials/PepperDashEssentials/Config/EssentialsConfig.cs +++ b/PepperDashEssentials/Config/EssentialsConfig.cs @@ -1,67 +1,67 @@ -using System; -using System.Collections.Generic; -using System.Text.RegularExpressions; - -using Crestron.SimplSharp.CrestronIO; -using Newtonsoft.Json; - -using PepperDash.Core; -using PepperDash.Essentials.Core.Config; -using PepperDash.Essentials.Room.Config; - -namespace PepperDash.Essentials -{ - /// - /// Loads the ConfigObject from the file - /// - public class EssentialsConfig : BasicConfig - { - [JsonProperty("system_url")] - public string SystemUrl { get; set; } - - [JsonProperty("template_url")] - public string TemplateUrl { get; set; } - - - //public CotijaConfig Cotija { get; private set; } - - [JsonProperty("systemUuid")] - public string SystemUuid - { - get - { - var result = Regex.Match(SystemUrl, @"https?:\/\/.*\/systems\/(.*)\/#.*"); - - string uuid = result.Groups[1].Value; - - return uuid; - } - } - - [JsonProperty("templateUuid")] - public string TemplateUuid - { - get - { - var result = Regex.Match(TemplateUrl, @"https?:\/\/.*\/templates\/(.*)\/#.*"); - - string uuid = result.Groups[1].Value; - - return uuid; - } - } - - [JsonProperty("rooms")] - public List Rooms { get; set; } - } - - /// - /// - /// - public class SystemTemplateConfigs - { - public EssentialsConfig System { get; set; } - - public EssentialsConfig Template { get; set; } - } +using System; +using System.Collections.Generic; +using System.Text.RegularExpressions; + +using Crestron.SimplSharp.CrestronIO; +using Newtonsoft.Json; + +using PepperDash.Core; +using PepperDash.Essentials.Core.Config; +using PepperDash.Essentials.Room.Config; + +namespace PepperDash.Essentials +{ + /// + /// Loads the ConfigObject from the file + /// + public class EssentialsConfig : BasicConfig + { + [JsonProperty("system_url")] + public string SystemUrl { get; set; } + + [JsonProperty("template_url")] + public string TemplateUrl { get; set; } + + + //public CotijaConfig Cotija { get; private set; } + + [JsonProperty("systemUuid")] + public string SystemUuid + { + get + { + var result = Regex.Match(SystemUrl, @"https?:\/\/.*\/systems\/(.*)\/#.*"); + + string uuid = result.Groups[1].Value; + + return uuid; + } + } + + [JsonProperty("templateUuid")] + public string TemplateUuid + { + get + { + var result = Regex.Match(TemplateUrl, @"https?:\/\/.*\/templates\/(.*)\/#.*"); + + string uuid = result.Groups[1].Value; + + return uuid; + } + } + + [JsonProperty("rooms")] + public List Rooms { get; set; } + } + + /// + /// + /// + public class SystemTemplateConfigs + { + public EssentialsConfig System { get; set; } + + public EssentialsConfig Template { get; set; } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Configuration Original/Builders/TPConfig.cs b/PepperDashEssentials/Configuration Original/Builders/TPConfig.cs similarity index 100% rename from Essentials/PepperDashEssentials/Configuration Original/Builders/TPConfig.cs rename to PepperDashEssentials/Configuration Original/Builders/TPConfig.cs diff --git a/Essentials/PepperDashEssentials/Configuration Original/ConfigTieLine.cs b/PepperDashEssentials/Configuration Original/ConfigTieLine.cs similarity index 100% rename from Essentials/PepperDashEssentials/Configuration Original/ConfigTieLine.cs rename to PepperDashEssentials/Configuration Original/ConfigTieLine.cs diff --git a/Essentials/PepperDashEssentials/Configuration Original/Configuration.cs b/PepperDashEssentials/Configuration Original/Configuration.cs similarity index 100% rename from Essentials/PepperDashEssentials/Configuration Original/Configuration.cs rename to PepperDashEssentials/Configuration Original/Configuration.cs diff --git a/Essentials/PepperDashEssentials/Configuration Original/ConfigurationHelpers.cs b/PepperDashEssentials/Configuration Original/ConfigurationHelpers.cs similarity index 100% rename from Essentials/PepperDashEssentials/Configuration Original/ConfigurationHelpers.cs rename to PepperDashEssentials/Configuration Original/ConfigurationHelpers.cs diff --git a/Essentials/PepperDashEssentials/Configuration Original/Factories/CommFactory.cs b/PepperDashEssentials/Configuration Original/Factories/CommFactory.cs similarity index 100% rename from Essentials/PepperDashEssentials/Configuration Original/Factories/CommFactory.cs rename to PepperDashEssentials/Configuration Original/Factories/CommFactory.cs diff --git a/Essentials/PepperDashEssentials/Configuration Original/Factories/DeviceMonitorFactory.cs b/PepperDashEssentials/Configuration Original/Factories/DeviceMonitorFactory.cs similarity index 100% rename from Essentials/PepperDashEssentials/Configuration Original/Factories/DeviceMonitorFactory.cs rename to PepperDashEssentials/Configuration Original/Factories/DeviceMonitorFactory.cs diff --git a/Essentials/PepperDashEssentials/Configuration Original/Factories/DisplayFactory.cs b/PepperDashEssentials/Configuration Original/Factories/DisplayFactory.cs similarity index 100% rename from Essentials/PepperDashEssentials/Configuration Original/Factories/DisplayFactory.cs rename to PepperDashEssentials/Configuration Original/Factories/DisplayFactory.cs diff --git a/Essentials/PepperDashEssentials/Configuration Original/Factories/DmFactory.cs b/PepperDashEssentials/Configuration Original/Factories/DmFactory.cs similarity index 100% rename from Essentials/PepperDashEssentials/Configuration Original/Factories/DmFactory.cs rename to PepperDashEssentials/Configuration Original/Factories/DmFactory.cs diff --git a/Essentials/PepperDashEssentials/Configuration Original/Factories/FactoryHelper.cs b/PepperDashEssentials/Configuration Original/Factories/FactoryHelper.cs similarity index 100% rename from Essentials/PepperDashEssentials/Configuration Original/Factories/FactoryHelper.cs rename to PepperDashEssentials/Configuration Original/Factories/FactoryHelper.cs diff --git a/Essentials/PepperDashEssentials/Configuration Original/Factories/MAYBE SetTopBoxFactory.cs b/PepperDashEssentials/Configuration Original/Factories/MAYBE SetTopBoxFactory.cs similarity index 100% rename from Essentials/PepperDashEssentials/Configuration Original/Factories/MAYBE SetTopBoxFactory.cs rename to PepperDashEssentials/Configuration Original/Factories/MAYBE SetTopBoxFactory.cs diff --git a/Essentials/PepperDashEssentials/Configuration Original/Factories/PcFactory.cs b/PepperDashEssentials/Configuration Original/Factories/PcFactory.cs similarity index 100% rename from Essentials/PepperDashEssentials/Configuration Original/Factories/PcFactory.cs rename to PepperDashEssentials/Configuration Original/Factories/PcFactory.cs diff --git a/Essentials/PepperDashEssentials/Configuration Original/Factories/REMOVE DiscPlayerFactory.cs b/PepperDashEssentials/Configuration Original/Factories/REMOVE DiscPlayerFactory.cs similarity index 100% rename from Essentials/PepperDashEssentials/Configuration Original/Factories/REMOVE DiscPlayerFactory.cs rename to PepperDashEssentials/Configuration Original/Factories/REMOVE DiscPlayerFactory.cs diff --git a/Essentials/PepperDashEssentials/Configuration Original/Factories/RemoteFactory.cs b/PepperDashEssentials/Configuration Original/Factories/RemoteFactory.cs similarity index 100% rename from Essentials/PepperDashEssentials/Configuration Original/Factories/RemoteFactory.cs rename to PepperDashEssentials/Configuration Original/Factories/RemoteFactory.cs diff --git a/Essentials/PepperDashEssentials/Configuration Original/Factories/TouchpanelFactory.cs b/PepperDashEssentials/Configuration Original/Factories/TouchpanelFactory.cs similarity index 100% rename from Essentials/PepperDashEssentials/Configuration Original/Factories/TouchpanelFactory.cs rename to PepperDashEssentials/Configuration Original/Factories/TouchpanelFactory.cs diff --git a/Essentials/PepperDashEssentials/ControlSystem.cs b/PepperDashEssentials/ControlSystem.cs similarity index 97% rename from Essentials/PepperDashEssentials/ControlSystem.cs rename to PepperDashEssentials/ControlSystem.cs index 4f854139..99db69d9 100644 --- a/Essentials/PepperDashEssentials/ControlSystem.cs +++ b/PepperDashEssentials/ControlSystem.cs @@ -1,359 +1,359 @@ -using System; -using System.Linq; -using Crestron.SimplSharp; -using Crestron.SimplSharp.CrestronIO; -using Crestron.SimplSharpPro; -using Crestron.SimplSharpPro.CrestronThread; -using PepperDash.Core; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Devices.Common; -using PepperDash.Essentials.DM; -using PepperDash.Essentials.Fusion; -using PepperDash.Essentials.Room.Cotija; - -namespace PepperDash.Essentials -{ - public class ControlSystem : CrestronControlSystem - { - HttpLogoServer LogoServer; - - public ControlSystem() - : base() - { - Thread.MaxNumberOfUserThreads = 400; - Global.ControlSystem = this; - DeviceManager.Initialize(this); - } - - /// - /// Git 'er goin' - /// - public override void InitializeSystem() - { - DeterminePlatform(); - - //CrestronConsole.AddNewConsoleCommand(s => GoWithLoad(), "go", "Loads configuration file", - // ConsoleAccessLevelEnum.AccessOperator); - - CrestronConsole.AddNewConsoleCommand(s => - { - foreach (var tl in TieLineCollection.Default) - CrestronConsole.ConsoleCommandResponse(" {0}\r", tl); - }, - "listtielines", "Prints out all tie lines", ConsoleAccessLevelEnum.AccessOperator); - - CrestronConsole.AddNewConsoleCommand(s => - { - CrestronConsole.ConsoleCommandResponse - ("Current running configuration. This is the merged system and template configuration"); - CrestronConsole.ConsoleCommandResponse(Newtonsoft.Json.JsonConvert.SerializeObject - (ConfigReader.ConfigObject, Newtonsoft.Json.Formatting.Indented)); - }, "showconfig", "Shows the current running merged config", ConsoleAccessLevelEnum.AccessOperator); - - CrestronConsole.AddNewConsoleCommand(s => - { - CrestronConsole.ConsoleCommandResponse("This system can be found at the following URLs:\r" + - "System URL: {0}\r" + - "Template URL: {1}", ConfigReader.ConfigObject.SystemUrl, ConfigReader.ConfigObject.TemplateUrl); - }, "portalinfo", "Shows portal URLS from configuration", ConsoleAccessLevelEnum.AccessOperator); - - GoWithLoad(); - } - - /// - /// Determines if the program is running on a processor (appliance) or server (XiO Edge). - /// - /// Sets Global.FilePathPrefix based on platform - /// - public void DeterminePlatform() - { - Debug.Console(0, Debug.ErrorLogLevel.Notice, "Determining Platform...."); - - string filePathPrefix; - - var dirSeparator = Global.DirectorySeparator; - - var version = Crestron.SimplSharp.Reflection.Assembly.GetExecutingAssembly().GetName().Version; - - var versionString = string.Format("{0}.{1}.{2}", version.Major, version.Minor, version.Build); - - string directoryPrefix; - - //directoryPrefix = Crestron.SimplSharp.CrestronIO.Directory.GetApplicationRootDirectory(); -#warning ^ For use with beta Include4.dat for XiO Edge - directoryPrefix = ""; - - if (CrestronEnvironment.DevicePlatform != eDevicePlatform.Server) - { - filePathPrefix = directoryPrefix + dirSeparator + "NVRAM" - + dirSeparator + string.Format("program{0}", InitialParametersClass.ApplicationNumber) + dirSeparator; - - Debug.Console(0, Debug.ErrorLogLevel.Notice, "Starting Essentials v{0} on 3-series Appliance", versionString); - } - else - { - filePathPrefix = directoryPrefix + dirSeparator + "User" + dirSeparator; - - Debug.Console(0, Debug.ErrorLogLevel.Notice, "Starting Essentials v{0} on XiO Edge Server", versionString); - } - - Global.SetFilePathPrefix(filePathPrefix); - } - - /// - /// Do it, yo - /// - public void GoWithLoad() - { - try - { - CrestronConsole.AddNewConsoleCommand(EnablePortalSync, "portalsync", "Loads Portal Sync", - ConsoleAccessLevelEnum.AccessOperator); - - //PortalSync = new PepperDashPortalSyncClient(); - Debug.Console(0, Debug.ErrorLogLevel.Notice, "Starting Essentials load from configuration"); - - var filesReady = SetupFilesystem(); - if (filesReady) - { - Debug.Console(0, Debug.ErrorLogLevel.Notice, "Folder structure verified. Loading config..."); - if (!ConfigReader.LoadConfig2()) - return; - - Load(); - Debug.Console(0, Debug.ErrorLogLevel.Notice, "Essentials load complete\r" + - "-------------------------------------------------------------"); - } - else - { - Debug.Console(0, - "------------------------------------------------\r" + - "------------------------------------------------\r" + - "------------------------------------------------\r" + - "Essentials file structure setup completed.\r" + - "Please load config, sgd and ir files and\r" + - "restart program.\r" + - "------------------------------------------------\r" + - "------------------------------------------------\r" + - "------------------------------------------------"); - } - } - catch (Exception e) - { - Debug.Console(0, "FATAL INITIALIZE ERROR. System is in an inconsistent state:\r{0}", e); - } - - } - - /// - /// Verifies filesystem is set up. IR, SGD, and program1 folders - /// - bool SetupFilesystem() - { - Debug.Console(0, "Verifying and/or creating folder structure"); - var configDir = Global.FilePathPrefix; - var configExists = Directory.Exists(configDir); - if (!configExists) - Directory.Create(configDir); - - var irDir = Global.FilePathPrefix + "ir"; - if (!Directory.Exists(irDir)) - Directory.Create(irDir); - - var sgdDir = Global.FilePathPrefix + "sgd"; - if (!Directory.Exists(sgdDir)) - Directory.Create(sgdDir); - - return configExists; - } - - public void EnablePortalSync(string s) - { - if (s.ToLower() == "enable") - { - CrestronConsole.ConsoleCommandResponse("Portal Sync features enabled"); - } - } - - public void TearDown() - { - Debug.Console(0, "Tearing down existing system"); - DeviceManager.DeactivateAll(); - - TieLineCollection.Default.Clear(); - - foreach (var key in DeviceManager.GetDevices()) - DeviceManager.RemoveDevice(key); - - Debug.Console(0, "Tear down COMPLETE"); - } - - /// - /// - /// - void Load() - { - LoadDevices(); - LoadTieLines(); - LoadRooms(); - LoadLogoServer(); - - DeviceManager.ActivateAll(); - } - - - /// - /// Reads all devices from config and adds them to DeviceManager - /// - public void LoadDevices() - { - foreach (var devConf in ConfigReader.ConfigObject.Devices) - { - - try - { - Debug.Console(0, Debug.ErrorLogLevel.Notice, "Creating device '{0}'", devConf.Key); - // Skip this to prevent unnecessary warnings - if (devConf.Key == "processor") - continue; - - // Try local factory first - var newDev = DeviceFactory.GetDevice(devConf); - - // Then associated library factories - if (newDev == null) - newDev = PepperDash.Essentials.Devices.Common.DeviceFactory.GetDevice(devConf); - if (newDev == null) - newDev = PepperDash.Essentials.DM.DeviceFactory.GetDevice(devConf); - if (newDev == null) - newDev = PepperDash.Essentials.Devices.Displays.DisplayDeviceFactory.GetDevice(devConf); - - if (newDev != null) - DeviceManager.AddDevice(newDev); - else - Debug.Console(0, Debug.ErrorLogLevel.Notice, "ERROR: Cannot load unknown device type '{0}', key '{1}'.", devConf.Type, devConf.Key); - } - catch (Exception e) - { - Debug.Console(0, Debug.ErrorLogLevel.Notice, "ERROR: Creating device {0}. Skipping device. \r{1}", devConf.Key, e); - } - } - Debug.Console(0, Debug.ErrorLogLevel.Notice, "All Devices Loaded."); - - } - - /// - /// Helper method to load tie lines. This should run after devices have loaded - /// - public void LoadTieLines() - { - // In the future, we can't necessarily just clear here because devices - // might be making their own internal sources/tie lines - - var tlc = TieLineCollection.Default; - //tlc.Clear(); - if (ConfigReader.ConfigObject.TieLines == null) - { - return; - } - - foreach (var tieLineConfig in ConfigReader.ConfigObject.TieLines) - { - var newTL = tieLineConfig.GetTieLine(); - if (newTL != null) - tlc.Add(newTL); - } - - Debug.Console(0, Debug.ErrorLogLevel.Notice, "All Tie Lines Loaded."); - - } - - /// - /// Reads all rooms from config and adds them to DeviceManager - /// - public void LoadRooms() - { - if (ConfigReader.ConfigObject.Rooms == null) - { - Debug.Console(0, Debug.ErrorLogLevel.Warning, "WARNING: Configuration contains no rooms"); - return; - } - - foreach (var roomConfig in ConfigReader.ConfigObject.Rooms) - { - var room = roomConfig.GetRoomObject(); - if (room != null) - { - if (room is EssentialsHuddleSpaceRoom) - { - DeviceManager.AddDevice(room); - - Debug.Console(0, Debug.ErrorLogLevel.Notice, "Room is EssentialsHuddleSpaceRoom, attempting to add to DeviceManager with Fusion"); - DeviceManager.AddDevice(new EssentialsHuddleSpaceFusionSystemControllerBase((EssentialsHuddleSpaceRoom)room, 0xf1)); - - - Debug.Console(0, Debug.ErrorLogLevel.Notice, "Attempting to build Cotija Bridge..."); - // Cotija bridge - var bridge = new CotijaEssentialsHuddleSpaceRoomBridge(room as EssentialsHuddleSpaceRoom); - AddBridgePostActivationHelper(bridge); // Lets things happen later when all devices are present - DeviceManager.AddDevice(bridge); - - Debug.Console(0, Debug.ErrorLogLevel.Notice, "Cotija Bridge Added..."); - } - else if (room is EssentialsHuddleVtc1Room) - { - DeviceManager.AddDevice(room); - - Debug.Console(0, Debug.ErrorLogLevel.Notice, "Room is EssentialsHuddleVtc1Room, attempting to add to DeviceManager with Fusion"); - DeviceManager.AddDevice(new EssentialsHuddleVtc1FusionController((EssentialsHuddleVtc1Room)room, 0xf1)); - } - else - { - Debug.Console(0, Debug.ErrorLogLevel.Notice, "Room is NOT EssentialsHuddleSpaceRoom, attempting to add to DeviceManager w/o Fusion"); - DeviceManager.AddDevice(room); - } - - } - else - Debug.Console(0, Debug.ErrorLogLevel.Notice, "WARNING: Cannot create room from config, key '{0}'", roomConfig.Key); - } - - Debug.Console(0, Debug.ErrorLogLevel.Notice, "All Rooms Loaded."); - - } - - /// - /// Helps add the post activation steps that link bridges to main controller - /// - /// - void AddBridgePostActivationHelper(CotijaBridgeBase bridge) - { - bridge.AddPostActivationAction(() => - { - var parent = DeviceManager.AllDevices.FirstOrDefault(d => d.Key == "appServer") as CotijaSystemController; - if (parent == null) - { - Debug.Console(0, bridge, "ERROR: Cannot connect bridge. System controller not present"); - } - Debug.Console(0, bridge, "Linking to parent controller"); - bridge.AddParent(parent); - parent.AddBridge(bridge); - }); - } - - /// - /// Fires up a logo server if not already running - /// - void LoadLogoServer() - { - try - { - LogoServer = new HttpLogoServer(8080, Global.FilePathPrefix + "html" + Global.DirectorySeparator + "logo"); - } - catch (Exception) - { - Debug.Console(0, Debug.ErrorLogLevel.Notice, "NOTICE: Logo server cannot be started. Likely already running in another program"); - } - } - } -} +using System; +using System.Linq; +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronIO; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.CrestronThread; +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Devices.Common; +using PepperDash.Essentials.DM; +using PepperDash.Essentials.Fusion; +using PepperDash.Essentials.Room.Cotija; + +namespace PepperDash.Essentials +{ + public class ControlSystem : CrestronControlSystem + { + HttpLogoServer LogoServer; + + public ControlSystem() + : base() + { + Thread.MaxNumberOfUserThreads = 400; + Global.ControlSystem = this; + DeviceManager.Initialize(this); + } + + /// + /// Git 'er goin' + /// + public override void InitializeSystem() + { + DeterminePlatform(); + + //CrestronConsole.AddNewConsoleCommand(s => GoWithLoad(), "go", "Loads configuration file", + // ConsoleAccessLevelEnum.AccessOperator); + + CrestronConsole.AddNewConsoleCommand(s => + { + foreach (var tl in TieLineCollection.Default) + CrestronConsole.ConsoleCommandResponse(" {0}\r", tl); + }, + "listtielines", "Prints out all tie lines", ConsoleAccessLevelEnum.AccessOperator); + + CrestronConsole.AddNewConsoleCommand(s => + { + CrestronConsole.ConsoleCommandResponse + ("Current running configuration. This is the merged system and template configuration"); + CrestronConsole.ConsoleCommandResponse(Newtonsoft.Json.JsonConvert.SerializeObject + (ConfigReader.ConfigObject, Newtonsoft.Json.Formatting.Indented)); + }, "showconfig", "Shows the current running merged config", ConsoleAccessLevelEnum.AccessOperator); + + CrestronConsole.AddNewConsoleCommand(s => + { + CrestronConsole.ConsoleCommandResponse("This system can be found at the following URLs:\r" + + "System URL: {0}\r" + + "Template URL: {1}", ConfigReader.ConfigObject.SystemUrl, ConfigReader.ConfigObject.TemplateUrl); + }, "portalinfo", "Shows portal URLS from configuration", ConsoleAccessLevelEnum.AccessOperator); + + GoWithLoad(); + } + + /// + /// Determines if the program is running on a processor (appliance) or server (XiO Edge). + /// + /// Sets Global.FilePathPrefix based on platform + /// + public void DeterminePlatform() + { + Debug.Console(0, Debug.ErrorLogLevel.Notice, "Determining Platform...."); + + string filePathPrefix; + + var dirSeparator = Global.DirectorySeparator; + + var version = Crestron.SimplSharp.Reflection.Assembly.GetExecutingAssembly().GetName().Version; + + var versionString = string.Format("{0}.{1}.{2}", version.Major, version.Minor, version.Build); + + string directoryPrefix; + + //directoryPrefix = Crestron.SimplSharp.CrestronIO.Directory.GetApplicationRootDirectory(); +#warning ^ For use with beta Include4.dat for XiO Edge + directoryPrefix = ""; + + if (CrestronEnvironment.DevicePlatform != eDevicePlatform.Server) + { + filePathPrefix = directoryPrefix + dirSeparator + "NVRAM" + + dirSeparator + string.Format("program{0}", InitialParametersClass.ApplicationNumber) + dirSeparator; + + Debug.Console(0, Debug.ErrorLogLevel.Notice, "Starting Essentials v{0} on 3-series Appliance", versionString); + } + else + { + filePathPrefix = directoryPrefix + dirSeparator + "User" + dirSeparator; + + Debug.Console(0, Debug.ErrorLogLevel.Notice, "Starting Essentials v{0} on XiO Edge Server", versionString); + } + + Global.SetFilePathPrefix(filePathPrefix); + } + + /// + /// Do it, yo + /// + public void GoWithLoad() + { + try + { + CrestronConsole.AddNewConsoleCommand(EnablePortalSync, "portalsync", "Loads Portal Sync", + ConsoleAccessLevelEnum.AccessOperator); + + //PortalSync = new PepperDashPortalSyncClient(); + Debug.Console(0, Debug.ErrorLogLevel.Notice, "Starting Essentials load from configuration"); + + var filesReady = SetupFilesystem(); + if (filesReady) + { + Debug.Console(0, Debug.ErrorLogLevel.Notice, "Folder structure verified. Loading config..."); + if (!ConfigReader.LoadConfig2()) + return; + + Load(); + Debug.Console(0, Debug.ErrorLogLevel.Notice, "Essentials load complete\r" + + "-------------------------------------------------------------"); + } + else + { + Debug.Console(0, + "------------------------------------------------\r" + + "------------------------------------------------\r" + + "------------------------------------------------\r" + + "Essentials file structure setup completed.\r" + + "Please load config, sgd and ir files and\r" + + "restart program.\r" + + "------------------------------------------------\r" + + "------------------------------------------------\r" + + "------------------------------------------------"); + } + } + catch (Exception e) + { + Debug.Console(0, "FATAL INITIALIZE ERROR. System is in an inconsistent state:\r{0}", e); + } + + } + + /// + /// Verifies filesystem is set up. IR, SGD, and program1 folders + /// + bool SetupFilesystem() + { + Debug.Console(0, "Verifying and/or creating folder structure"); + var configDir = Global.FilePathPrefix; + var configExists = Directory.Exists(configDir); + if (!configExists) + Directory.Create(configDir); + + var irDir = Global.FilePathPrefix + "ir"; + if (!Directory.Exists(irDir)) + Directory.Create(irDir); + + var sgdDir = Global.FilePathPrefix + "sgd"; + if (!Directory.Exists(sgdDir)) + Directory.Create(sgdDir); + + return configExists; + } + + public void EnablePortalSync(string s) + { + if (s.ToLower() == "enable") + { + CrestronConsole.ConsoleCommandResponse("Portal Sync features enabled"); + } + } + + public void TearDown() + { + Debug.Console(0, "Tearing down existing system"); + DeviceManager.DeactivateAll(); + + TieLineCollection.Default.Clear(); + + foreach (var key in DeviceManager.GetDevices()) + DeviceManager.RemoveDevice(key); + + Debug.Console(0, "Tear down COMPLETE"); + } + + /// + /// + /// + void Load() + { + LoadDevices(); + LoadTieLines(); + LoadRooms(); + LoadLogoServer(); + + DeviceManager.ActivateAll(); + } + + + /// + /// Reads all devices from config and adds them to DeviceManager + /// + public void LoadDevices() + { + foreach (var devConf in ConfigReader.ConfigObject.Devices) + { + + try + { + Debug.Console(0, Debug.ErrorLogLevel.Notice, "Creating device '{0}'", devConf.Key); + // Skip this to prevent unnecessary warnings + if (devConf.Key == "processor") + continue; + + // Try local factory first + var newDev = DeviceFactory.GetDevice(devConf); + + // Then associated library factories + if (newDev == null) + newDev = PepperDash.Essentials.Devices.Common.DeviceFactory.GetDevice(devConf); + if (newDev == null) + newDev = PepperDash.Essentials.DM.DeviceFactory.GetDevice(devConf); + if (newDev == null) + newDev = PepperDash.Essentials.Devices.Displays.DisplayDeviceFactory.GetDevice(devConf); + + if (newDev != null) + DeviceManager.AddDevice(newDev); + else + Debug.Console(0, Debug.ErrorLogLevel.Notice, "ERROR: Cannot load unknown device type '{0}', key '{1}'.", devConf.Type, devConf.Key); + } + catch (Exception e) + { + Debug.Console(0, Debug.ErrorLogLevel.Notice, "ERROR: Creating device {0}. Skipping device. \r{1}", devConf.Key, e); + } + } + Debug.Console(0, Debug.ErrorLogLevel.Notice, "All Devices Loaded."); + + } + + /// + /// Helper method to load tie lines. This should run after devices have loaded + /// + public void LoadTieLines() + { + // In the future, we can't necessarily just clear here because devices + // might be making their own internal sources/tie lines + + var tlc = TieLineCollection.Default; + //tlc.Clear(); + if (ConfigReader.ConfigObject.TieLines == null) + { + return; + } + + foreach (var tieLineConfig in ConfigReader.ConfigObject.TieLines) + { + var newTL = tieLineConfig.GetTieLine(); + if (newTL != null) + tlc.Add(newTL); + } + + Debug.Console(0, Debug.ErrorLogLevel.Notice, "All Tie Lines Loaded."); + + } + + /// + /// Reads all rooms from config and adds them to DeviceManager + /// + public void LoadRooms() + { + if (ConfigReader.ConfigObject.Rooms == null) + { + Debug.Console(0, Debug.ErrorLogLevel.Warning, "WARNING: Configuration contains no rooms"); + return; + } + + foreach (var roomConfig in ConfigReader.ConfigObject.Rooms) + { + var room = roomConfig.GetRoomObject(); + if (room != null) + { + if (room is EssentialsHuddleSpaceRoom) + { + DeviceManager.AddDevice(room); + + Debug.Console(0, Debug.ErrorLogLevel.Notice, "Room is EssentialsHuddleSpaceRoom, attempting to add to DeviceManager with Fusion"); + DeviceManager.AddDevice(new EssentialsHuddleSpaceFusionSystemControllerBase((EssentialsHuddleSpaceRoom)room, 0xf1)); + + + Debug.Console(0, Debug.ErrorLogLevel.Notice, "Attempting to build Cotija Bridge..."); + // Cotija bridge + var bridge = new CotijaEssentialsHuddleSpaceRoomBridge(room as EssentialsHuddleSpaceRoom); + AddBridgePostActivationHelper(bridge); // Lets things happen later when all devices are present + DeviceManager.AddDevice(bridge); + + Debug.Console(0, Debug.ErrorLogLevel.Notice, "Cotija Bridge Added..."); + } + else if (room is EssentialsHuddleVtc1Room) + { + DeviceManager.AddDevice(room); + + Debug.Console(0, Debug.ErrorLogLevel.Notice, "Room is EssentialsHuddleVtc1Room, attempting to add to DeviceManager with Fusion"); + DeviceManager.AddDevice(new EssentialsHuddleVtc1FusionController((EssentialsHuddleVtc1Room)room, 0xf1)); + } + else + { + Debug.Console(0, Debug.ErrorLogLevel.Notice, "Room is NOT EssentialsHuddleSpaceRoom, attempting to add to DeviceManager w/o Fusion"); + DeviceManager.AddDevice(room); + } + + } + else + Debug.Console(0, Debug.ErrorLogLevel.Notice, "WARNING: Cannot create room from config, key '{0}'", roomConfig.Key); + } + + Debug.Console(0, Debug.ErrorLogLevel.Notice, "All Rooms Loaded."); + + } + + /// + /// Helps add the post activation steps that link bridges to main controller + /// + /// + void AddBridgePostActivationHelper(CotijaBridgeBase bridge) + { + bridge.AddPostActivationAction(() => + { + var parent = DeviceManager.AllDevices.FirstOrDefault(d => d.Key == "appServer") as CotijaSystemController; + if (parent == null) + { + Debug.Console(0, bridge, "ERROR: Cannot connect bridge. System controller not present"); + } + Debug.Console(0, bridge, "Linking to parent controller"); + bridge.AddParent(parent); + parent.AddBridge(bridge); + }); + } + + /// + /// Fires up a logo server if not already running + /// + void LoadLogoServer() + { + try + { + LogoServer = new HttpLogoServer(8080, Global.FilePathPrefix + "html" + Global.DirectorySeparator + "logo"); + } + catch (Exception) + { + Debug.Console(0, Debug.ErrorLogLevel.Notice, "NOTICE: Logo server cannot be started. Likely already running in another program"); + } + } + } +} diff --git a/Essentials/PepperDashEssentials/ControlSystem.cs.orig b/PepperDashEssentials/ControlSystem.cs.orig similarity index 100% rename from Essentials/PepperDashEssentials/ControlSystem.cs.orig rename to PepperDashEssentials/ControlSystem.cs.orig diff --git a/Essentials/PepperDashEssentials/Devices/Amplifier.cs b/PepperDashEssentials/Devices/Amplifier.cs similarity index 100% rename from Essentials/PepperDashEssentials/Devices/Amplifier.cs rename to PepperDashEssentials/Devices/Amplifier.cs diff --git a/Essentials/PepperDashEssentials/Devices/DiscPlayer/OppoExtendedBdp.cs b/PepperDashEssentials/Devices/DiscPlayer/OppoExtendedBdp.cs similarity index 100% rename from Essentials/PepperDashEssentials/Devices/DiscPlayer/OppoExtendedBdp.cs rename to PepperDashEssentials/Devices/DiscPlayer/OppoExtendedBdp.cs diff --git a/Essentials/PepperDashEssentials/Devices/NUMERIC AppleTV.cs b/PepperDashEssentials/Devices/NUMERIC AppleTV.cs similarity index 100% rename from Essentials/PepperDashEssentials/Devices/NUMERIC AppleTV.cs rename to PepperDashEssentials/Devices/NUMERIC AppleTV.cs diff --git a/Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/DevicePageControllerBase.cs b/PepperDashEssentials/FOR REFERENCE UI/PageControllers/DevicePageControllerBase.cs similarity index 100% rename from Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/DevicePageControllerBase.cs rename to PepperDashEssentials/FOR REFERENCE UI/PageControllers/DevicePageControllerBase.cs diff --git a/Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/LargeTouchpanelControllerBase.cs b/PepperDashEssentials/FOR REFERENCE UI/PageControllers/LargeTouchpanelControllerBase.cs similarity index 100% rename from Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/LargeTouchpanelControllerBase.cs rename to PepperDashEssentials/FOR REFERENCE UI/PageControllers/LargeTouchpanelControllerBase.cs diff --git a/Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLaptop.cs b/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLaptop.cs similarity index 100% rename from Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLaptop.cs rename to PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLaptop.cs diff --git a/Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLargeDvd.cs b/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLargeDvd.cs similarity index 100% rename from Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLargeDvd.cs rename to PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLargeDvd.cs diff --git a/Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLargeSetTopBoxGeneric.cs b/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLargeSetTopBoxGeneric.cs similarity index 100% rename from Essentials/PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLargeSetTopBoxGeneric.cs rename to PepperDashEssentials/FOR REFERENCE UI/PageControllers/PageControllerLargeSetTopBoxGeneric.cs diff --git a/Essentials/PepperDashEssentials/FOR REFERENCE UI/Panels/REMOVE UiCue.cs b/PepperDashEssentials/FOR REFERENCE UI/Panels/REMOVE UiCue.cs similarity index 100% rename from Essentials/PepperDashEssentials/FOR REFERENCE UI/Panels/REMOVE UiCue.cs rename to PepperDashEssentials/FOR REFERENCE UI/Panels/REMOVE UiCue.cs diff --git a/Essentials/PepperDashEssentials/FOR REFERENCE UI/Panels/SmartGraphicsTouchpanelControllerBase.cs b/PepperDashEssentials/FOR REFERENCE UI/Panels/SmartGraphicsTouchpanelControllerBase.cs similarity index 100% rename from Essentials/PepperDashEssentials/FOR REFERENCE UI/Panels/SmartGraphicsTouchpanelControllerBase.cs rename to PepperDashEssentials/FOR REFERENCE UI/Panels/SmartGraphicsTouchpanelControllerBase.cs diff --git a/Essentials/PepperDashEssentials/FOR REFERENCE UI/SRL/SourceListSubpageReferenceList.cs b/PepperDashEssentials/FOR REFERENCE UI/SRL/SourceListSubpageReferenceList.cs similarity index 100% rename from Essentials/PepperDashEssentials/FOR REFERENCE UI/SRL/SourceListSubpageReferenceList.cs rename to PepperDashEssentials/FOR REFERENCE UI/SRL/SourceListSubpageReferenceList.cs diff --git a/Essentials/PepperDashEssentials/Factory/DeviceFactory.cs b/PepperDashEssentials/Factory/DeviceFactory.cs similarity index 96% rename from Essentials/PepperDashEssentials/Factory/DeviceFactory.cs rename to PepperDashEssentials/Factory/DeviceFactory.cs index f6a8f109..16afc536 100644 --- a/Essentials/PepperDashEssentials/Factory/DeviceFactory.cs +++ b/PepperDashEssentials/Factory/DeviceFactory.cs @@ -1,92 +1,92 @@ -using System; -using System.Collections.Generic; -using System.Linq; -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 -{ - 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 == "amplifier") - { - return new Amplifier(dc.Key, dc.Name); - } - else if (dc.Group.ToLower() == "touchpanel") // typeName.StartsWith("tsw")) - { - return UiDeviceFactory.GetUiDevice(dc); - } - - else if (typeName == "mockdisplay") - { - return new MockDisplay(key, name); - } - - else if (typeName == "generic") - { - return new Device(key, name); - } - - // MOVE into something else??? - else if (typeName == "basicirdisplay") - { - var ir = IRPortHelper.GetIrPort(properties); - if (ir != null) - return new BasicIrDisplay(key, name, ir.Port, ir.FileName); - } - - else if (typeName == "commmock") - { - var comm = CommFactory.CreateCommForDevice(dc); - var props = JsonConvert.DeserializeObject( - properties.ToString()); - return new ConsoleCommMockDevice(key, name, props, comm); - } - - else if (typeName == "appserver") - { - var props = JsonConvert.DeserializeObject(properties.ToString()); - return new CotijaSystemController(key, name, props); - } - - else if (typeName == "mobilecontrolbridge-ddvc01") - { - var comm = CommFactory.GetControlPropertiesConfig(dc); - - var bridge = new PepperDash.Essentials.Room.Cotija.CotijaDdvc01RoomBridge(key, name, comm.IpIdInt); - bridge.AddPreActivationAction(() => - { - var parent = DeviceManager.AllDevices.FirstOrDefault(d => d.Key == "appServer") as CotijaSystemController; - if (parent == null) - { - Debug.Console(0, bridge, "ERROR: Cannot connect bridge. System controller not present"); - } - Debug.Console(0, bridge, "Linking to parent controller"); - bridge.AddParent(parent); - parent.AddBridge(bridge); - }); - - return bridge; - } - - return null; - } - } - -} +using System; +using System.Collections.Generic; +using System.Linq; +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 +{ + 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 == "amplifier") + { + return new Amplifier(dc.Key, dc.Name); + } + else if (dc.Group.ToLower() == "touchpanel") // typeName.StartsWith("tsw")) + { + return UiDeviceFactory.GetUiDevice(dc); + } + + else if (typeName == "mockdisplay") + { + return new MockDisplay(key, name); + } + + else if (typeName == "generic") + { + return new Device(key, name); + } + + // MOVE into something else??? + else if (typeName == "basicirdisplay") + { + var ir = IRPortHelper.GetIrPort(properties); + if (ir != null) + return new BasicIrDisplay(key, name, ir.Port, ir.FileName); + } + + else if (typeName == "commmock") + { + var comm = CommFactory.CreateCommForDevice(dc); + var props = JsonConvert.DeserializeObject( + properties.ToString()); + return new ConsoleCommMockDevice(key, name, props, comm); + } + + else if (typeName == "appserver") + { + var props = JsonConvert.DeserializeObject(properties.ToString()); + return new CotijaSystemController(key, name, props); + } + + else if (typeName == "mobilecontrolbridge-ddvc01") + { + var comm = CommFactory.GetControlPropertiesConfig(dc); + + var bridge = new PepperDash.Essentials.Room.Cotija.CotijaDdvc01RoomBridge(key, name, comm.IpIdInt); + bridge.AddPreActivationAction(() => + { + var parent = DeviceManager.AllDevices.FirstOrDefault(d => d.Key == "appServer") as CotijaSystemController; + if (parent == null) + { + Debug.Console(0, bridge, "ERROR: Cannot connect bridge. System controller not present"); + } + Debug.Console(0, bridge, "Linking to parent controller"); + bridge.AddParent(parent); + parent.AddBridge(bridge); + }); + + return bridge; + } + + return null; + } + } + +} diff --git a/Essentials/PepperDashEssentials/Factory/UiDeviceFactory.cs b/PepperDashEssentials/Factory/UiDeviceFactory.cs similarity index 98% rename from Essentials/PepperDashEssentials/Factory/UiDeviceFactory.cs rename to PepperDashEssentials/Factory/UiDeviceFactory.cs index 851ca948..8638b0ab 100644 --- a/Essentials/PepperDashEssentials/Factory/UiDeviceFactory.cs +++ b/PepperDashEssentials/Factory/UiDeviceFactory.cs @@ -1,162 +1,162 @@ -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 Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using PepperDash.Core; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.Config; -using PepperDash.Essentials.Core.PageManagers; - - -namespace PepperDash.Essentials -{ - public class UiDeviceFactory - { - public static IKeyed GetUiDevice(DeviceConfig config) - { - var comm = CommFactory.GetControlPropertiesConfig(config); - - var props = JsonConvert.DeserializeObject(config.Properties.ToString()); - - EssentialsTouchpanelController panelController = new EssentialsTouchpanelController(config.Key, config.Name, config.Type, props, comm.IpIdInt); - - panelController.AddPostActivationAction(() => - { - var mainDriver = new EssentialsPanelMainInterfaceDriver(panelController.Panel, props); - // Then the sub drivers - - // spin up different room drivers depending on room type - var room = DeviceManager.GetDeviceForKey(props.DefaultRoomKey); - if (room is EssentialsHuddleSpaceRoom) - { - - // Header Driver - Debug.Console(0, panelController, "Adding header driver"); - mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, props); - - // AV Driver - Debug.Console(0, panelController, "Adding huddle space AV driver"); - var avDriver = new EssentialsHuddlePanelAvFunctionsDriver(mainDriver, props); - avDriver.CurrentRoom = room as EssentialsHuddleSpaceRoom; - avDriver.DefaultRoomKey = props.DefaultRoomKey; - mainDriver.AvDriver = avDriver; - - // Environment Driver - if (avDriver.CurrentRoom.Config.Environment != null && avDriver.CurrentRoom.Config.Environment.DeviceKeys.Count > 0) - { - Debug.Console(0, panelController, "Adding environment driver"); - mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, props); - - mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.Config.Environment); - } - - mainDriver.HeaderDriver.SetupHeaderButtons(avDriver, avDriver.CurrentRoom); - - panelController.LoadAndShowDriver(mainDriver); // This is a little convoluted. - - if (panelController.Panel is TswFt5ButtonSystem) - { - var tsw = panelController.Panel as TswFt5ButtonSystem; - // Wire up hard keys - tsw.Power.UserObject = new Action(b => { if (!b) avDriver.PowerButtonPressed(); }); - //tsw.Home.UserObject = new Action(b => { if (!b) HomePressed(); }); - if(mainDriver.EnvironmentDriver != null) - tsw.Lights.UserObject = new Action(b => - { - if (!b) - { - //mainDriver.AvDriver.PopupInterlock.ShowInterlockedWithToggle(mainDriver.EnvironmentDriver.BackgroundSubpageJoin); - mainDriver.EnvironmentDriver.Toggle(); - } - }); - tsw.Up.UserObject = new Action(avDriver.VolumeUpPress); - tsw.Down.UserObject = new Action(avDriver.VolumeDownPress); - } - } - //else if (room is EssentialsPresentationRoom) - //{ - // Debug.Console(0, panelController, "Adding presentation room driver"); - // var avDriver = new EssentialsPresentationPanelAvFunctionsDriver(mainDriver, props); - // avDriver.CurrentRoom = room as EssentialsPresentationRoom; - // avDriver.DefaultRoomKey = props.DefaultRoomKey; - // mainDriver.AvDriver = avDriver ; - // mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, props); - // panelController.LoadAndShowDriver(mainDriver); - - // if (panelController.Panel is TswFt5ButtonSystem) - // { - // var tsw = panelController.Panel as TswFt5ButtonSystem; - // // Wire up hard keys - // tsw.Power.UserObject = new Action(b => { if (!b) avDriver.PowerButtonPressed(); }); - // //tsw.Home.UserObject = new Action(b => { if (!b) HomePressed(); }); - // tsw.Up.UserObject = new Action(avDriver.VolumeUpPress); - // tsw.Down.UserObject = new Action(avDriver.VolumeDownPress); - // } - //} - else if (room is EssentialsHuddleVtc1Room) - { - Debug.Console(0, panelController, "Adding huddle space VTC AV driver"); - - // Header Driver - mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, props); - - // AV Driver - var avDriver = new EssentialsHuddleVtc1PanelAvFunctionsDriver(mainDriver, props); - - var codecDriver = new PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver(panelController.Panel, avDriver, - (room as EssentialsHuddleVtc1Room).VideoCodec, mainDriver.HeaderDriver); - avDriver.SetVideoCodecDriver(codecDriver); - avDriver.CurrentRoom = room as EssentialsHuddleVtc1Room; - avDriver.DefaultRoomKey = props.DefaultRoomKey; - mainDriver.AvDriver = avDriver; - - // Environment Driver - if (avDriver.CurrentRoom.Config.Environment != null && avDriver.CurrentRoom.Config.Environment.DeviceKeys.Count > 0) - { - Debug.Console(0, panelController, "Adding environment driver"); - mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, props); - - mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.Config.Environment); - } - - mainDriver.HeaderDriver.SetupHeaderButtons(avDriver, avDriver.CurrentRoom); - - panelController.LoadAndShowDriver(mainDriver); // This is a little convoluted. - - if (panelController.Panel is TswFt5ButtonSystem) - { - var tsw = panelController.Panel as TswFt5ButtonSystem; - // Wire up hard keys - tsw.Power.UserObject = new Action(b => { if (!b) avDriver.EndMeetingPress(); }); - //tsw.Home.UserObject = new Action(b => { if (!b) HomePressed(); }); - if (mainDriver.EnvironmentDriver != null) - tsw.Lights.UserObject = new Action(b => - { - if (!b) - { - //mainDriver.AvDriver.PopupInterlock.ShowInterlockedWithToggle(mainDriver.EnvironmentDriver.BackgroundSubpageJoin); - mainDriver.EnvironmentDriver.Toggle(); - } - }); - tsw.Up.UserObject = new Action(avDriver.VolumeUpPress); - tsw.Down.UserObject = new Action(avDriver.VolumeDownPress); - } - } - else - { - Debug.Console(0, panelController, "ERROR: Cannot load AvFunctionsDriver for room '{0}'", props.DefaultRoomKey); - } - }); - - return panelController; - } - - } +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 Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Config; +using PepperDash.Essentials.Core.PageManagers; + + +namespace PepperDash.Essentials +{ + public class UiDeviceFactory + { + public static IKeyed GetUiDevice(DeviceConfig config) + { + var comm = CommFactory.GetControlPropertiesConfig(config); + + var props = JsonConvert.DeserializeObject(config.Properties.ToString()); + + EssentialsTouchpanelController panelController = new EssentialsTouchpanelController(config.Key, config.Name, config.Type, props, comm.IpIdInt); + + panelController.AddPostActivationAction(() => + { + var mainDriver = new EssentialsPanelMainInterfaceDriver(panelController.Panel, props); + // Then the sub drivers + + // spin up different room drivers depending on room type + var room = DeviceManager.GetDeviceForKey(props.DefaultRoomKey); + if (room is EssentialsHuddleSpaceRoom) + { + + // Header Driver + Debug.Console(0, panelController, "Adding header driver"); + mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, props); + + // AV Driver + Debug.Console(0, panelController, "Adding huddle space AV driver"); + var avDriver = new EssentialsHuddlePanelAvFunctionsDriver(mainDriver, props); + avDriver.CurrentRoom = room as EssentialsHuddleSpaceRoom; + avDriver.DefaultRoomKey = props.DefaultRoomKey; + mainDriver.AvDriver = avDriver; + + // Environment Driver + if (avDriver.CurrentRoom.Config.Environment != null && avDriver.CurrentRoom.Config.Environment.DeviceKeys.Count > 0) + { + Debug.Console(0, panelController, "Adding environment driver"); + mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, props); + + mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.Config.Environment); + } + + mainDriver.HeaderDriver.SetupHeaderButtons(avDriver, avDriver.CurrentRoom); + + panelController.LoadAndShowDriver(mainDriver); // This is a little convoluted. + + if (panelController.Panel is TswFt5ButtonSystem) + { + var tsw = panelController.Panel as TswFt5ButtonSystem; + // Wire up hard keys + tsw.Power.UserObject = new Action(b => { if (!b) avDriver.PowerButtonPressed(); }); + //tsw.Home.UserObject = new Action(b => { if (!b) HomePressed(); }); + if(mainDriver.EnvironmentDriver != null) + tsw.Lights.UserObject = new Action(b => + { + if (!b) + { + //mainDriver.AvDriver.PopupInterlock.ShowInterlockedWithToggle(mainDriver.EnvironmentDriver.BackgroundSubpageJoin); + mainDriver.EnvironmentDriver.Toggle(); + } + }); + tsw.Up.UserObject = new Action(avDriver.VolumeUpPress); + tsw.Down.UserObject = new Action(avDriver.VolumeDownPress); + } + } + //else if (room is EssentialsPresentationRoom) + //{ + // Debug.Console(0, panelController, "Adding presentation room driver"); + // var avDriver = new EssentialsPresentationPanelAvFunctionsDriver(mainDriver, props); + // avDriver.CurrentRoom = room as EssentialsPresentationRoom; + // avDriver.DefaultRoomKey = props.DefaultRoomKey; + // mainDriver.AvDriver = avDriver ; + // mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, props); + // panelController.LoadAndShowDriver(mainDriver); + + // if (panelController.Panel is TswFt5ButtonSystem) + // { + // var tsw = panelController.Panel as TswFt5ButtonSystem; + // // Wire up hard keys + // tsw.Power.UserObject = new Action(b => { if (!b) avDriver.PowerButtonPressed(); }); + // //tsw.Home.UserObject = new Action(b => { if (!b) HomePressed(); }); + // tsw.Up.UserObject = new Action(avDriver.VolumeUpPress); + // tsw.Down.UserObject = new Action(avDriver.VolumeDownPress); + // } + //} + else if (room is EssentialsHuddleVtc1Room) + { + Debug.Console(0, panelController, "Adding huddle space VTC AV driver"); + + // Header Driver + mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, props); + + // AV Driver + var avDriver = new EssentialsHuddleVtc1PanelAvFunctionsDriver(mainDriver, props); + + var codecDriver = new PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver(panelController.Panel, avDriver, + (room as EssentialsHuddleVtc1Room).VideoCodec, mainDriver.HeaderDriver); + avDriver.SetVideoCodecDriver(codecDriver); + avDriver.CurrentRoom = room as EssentialsHuddleVtc1Room; + avDriver.DefaultRoomKey = props.DefaultRoomKey; + mainDriver.AvDriver = avDriver; + + // Environment Driver + if (avDriver.CurrentRoom.Config.Environment != null && avDriver.CurrentRoom.Config.Environment.DeviceKeys.Count > 0) + { + Debug.Console(0, panelController, "Adding environment driver"); + mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, props); + + mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.Config.Environment); + } + + mainDriver.HeaderDriver.SetupHeaderButtons(avDriver, avDriver.CurrentRoom); + + panelController.LoadAndShowDriver(mainDriver); // This is a little convoluted. + + if (panelController.Panel is TswFt5ButtonSystem) + { + var tsw = panelController.Panel as TswFt5ButtonSystem; + // Wire up hard keys + tsw.Power.UserObject = new Action(b => { if (!b) avDriver.EndMeetingPress(); }); + //tsw.Home.UserObject = new Action(b => { if (!b) HomePressed(); }); + if (mainDriver.EnvironmentDriver != null) + tsw.Lights.UserObject = new Action(b => + { + if (!b) + { + //mainDriver.AvDriver.PopupInterlock.ShowInterlockedWithToggle(mainDriver.EnvironmentDriver.BackgroundSubpageJoin); + mainDriver.EnvironmentDriver.Toggle(); + } + }); + tsw.Up.UserObject = new Action(avDriver.VolumeUpPress); + tsw.Down.UserObject = new Action(avDriver.VolumeDownPress); + } + } + else + { + Debug.Console(0, panelController, "ERROR: Cannot load AvFunctionsDriver for room '{0}'", props.DefaultRoomKey); + } + }); + + return panelController; + } + + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/HttpApiHandler.cs b/PepperDashEssentials/HttpApiHandler.cs similarity index 100% rename from Essentials/PepperDashEssentials/HttpApiHandler.cs rename to PepperDashEssentials/HttpApiHandler.cs diff --git a/Essentials/PepperDashEssentials/OTHER/Fusion/EssentialsHuddleSpaceFusionSystemControllerBase.cs b/PepperDashEssentials/OTHER/Fusion/EssentialsHuddleSpaceFusionSystemControllerBase.cs similarity index 97% rename from Essentials/PepperDashEssentials/OTHER/Fusion/EssentialsHuddleSpaceFusionSystemControllerBase.cs rename to PepperDashEssentials/OTHER/Fusion/EssentialsHuddleSpaceFusionSystemControllerBase.cs index bc0eae18..a463fa50 100644 --- a/Essentials/PepperDashEssentials/OTHER/Fusion/EssentialsHuddleSpaceFusionSystemControllerBase.cs +++ b/PepperDashEssentials/OTHER/Fusion/EssentialsHuddleSpaceFusionSystemControllerBase.cs @@ -1,1465 +1,1465 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -using Crestron.SimplSharp; -using Crestron.SimplSharp.CrestronIO; -using Crestron.SimplSharp.CrestronXml; -using Crestron.SimplSharp.CrestronXml.Serialization; -using Crestron.SimplSharp.CrestronXmlLinq; -using Crestron.SimplSharpPro; -using Crestron.SimplSharpPro.DeviceSupport; -using Crestron.SimplSharpPro.Fusion; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -using PepperDash.Core; -using PepperDash.Essentials; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Devices.Common; -using PepperDash.Essentials.Devices.Common.Occupancy; - - - -namespace PepperDash.Essentials.Fusion -{ - public class EssentialsHuddleSpaceFusionSystemControllerBase : Device, IOccupancyStatusProvider - { - public event EventHandler ScheduleChange; - //public event EventHandler MeetingEndWarning; - //public event EventHandler NextMeetingBeginWarning; - - protected FusionRoom FusionRoom; - protected EssentialsRoomBase Room; - Dictionary SourceToFeedbackSigs = - new Dictionary(); - - StatusMonitorCollection ErrorMessageRollUp; - - protected StringSigData CurrentRoomSourceNameSig; - - #region System Info Sigs - //StringSigData SystemName; - //StringSigData Model; - //StringSigData SerialNumber; - //StringSigData Uptime; - #endregion - - - #region Processor Info Sigs - StringSigData Ip1; - StringSigData Ip2; - StringSigData Gateway; - StringSigData Hostname; - StringSigData Domain; - StringSigData Dns1; - StringSigData Dns2; - StringSigData Mac1; - StringSigData Mac2; - StringSigData NetMask1; - StringSigData NetMask2; - StringSigData Firmware; - - StringSigData[] Program = new StringSigData[10]; - #endregion - - #region Default Display Source Sigs - - BooleanSigData[] Source = new BooleanSigData[10]; - - #endregion - - RoomSchedule CurrentSchedule; - - Event NextMeeting; - - Event CurrentMeeting; - - protected string RoomGuid - { - get - { - return GUIDs.RoomGuid; - } - - } - - uint IpId; - - FusionRoomGuids GUIDs; - - bool GuidFileExists; - - bool IsRegisteredForSchedulePushNotifications = false; - - CTimer PollTimer = null; - - CTimer PushNotificationTimer = null; - - CTimer DailyTimeRequestTimer = null; - - // Default poll time is 5 min unless overridden by config value - public long SchedulePollInterval = 300000; - - public long PushNotificationTimeout = 5000; - - protected Dictionary FusionStaticAssets; - - // For use with local occ sensor devices which will relay to Fusion the current occupancy status - protected FusionRemoteOccupancySensor FusionRemoteOccSensor; - - // For use with occ sensor attached to a scheduling panel in Fusion - protected FusionOccupancySensorAsset FusionOccSensor; - - public BoolFeedback RoomIsOccupiedFeedback { get; private set; } - - protected Func RoomIsOccupiedFeedbackFunc - { - get - { - return () => FusionRemoteOccSensor.RoomOccupied.OutputSig.BoolValue; - } - } - - //ScheduleResponseEvent NextMeeting; - - public EssentialsHuddleSpaceFusionSystemControllerBase(EssentialsRoomBase room, uint ipId) - : base(room.Key + "-fusion") - { - - try - { - - Room = room; - - IpId = ipId; - - FusionStaticAssets = new Dictionary(); - - GUIDs = new FusionRoomGuids(); - - var mac = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_MAC_ADDRESS, 0); - - var slot = Global.ControlSystem.ProgramNumber; - - string guidFilePath = Global.FilePathPrefix + string.Format(@"{0}-FusionGuids.json", InitialParametersClass.ProgramIDTag); - - GuidFileExists = File.Exists(guidFilePath); - - // Check if file exists - if (!GuidFileExists) - { - // Does not exist. Create GUIDs - GUIDs = new FusionRoomGuids(Room.Name, ipId, GUIDs.GenerateNewRoomGuid(slot, mac), FusionStaticAssets); - } - else - { - // Exists. Read GUIDs - ReadGuidFile(guidFilePath); - } - - CreateSymbolAndBasicSigs(IpId); - SetUpSources(); - SetUpCommunitcationMonitors(); - SetUpDisplay(); - SetUpError(); - ExecuteCustomSteps(); - - if (Room.RoomOccupancy != null) - { - if (Room.OccupancyStatusProviderIsRemote) - SetUpRemoteOccupancy(); - else - { - SetUpLocalOccupancy(); - } - } - - // Make it so! - FusionRVI.GenerateFileForAllFusionDevices(); - - GenerateGuidFile(guidFilePath); - } - catch (Exception e) - { - Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error Building Fusion System Controller: {0}", e); - } - } - - /// - /// Used for extension classes to execute whatever steps are necessary before generating the RVI and GUID files - /// - protected virtual void ExecuteCustomSteps() - { - - } - - /// - /// Generates the guid file in NVRAM. If the file already exists it will be overwritten. - /// - /// path for the file - void GenerateGuidFile(string filePath) - { - if (string.IsNullOrEmpty(filePath)) - { - Debug.Console(0, this, "Error writing guid file. No path specified."); - return; - } - - CCriticalSection _fileLock = new CCriticalSection(); - - try - { - if (_fileLock == null || _fileLock.Disposed) - return; - - _fileLock.Enter(); - - Debug.Console(1, this, "Writing GUIDs to file"); - - if (FusionOccSensor == null) - GUIDs = new FusionRoomGuids(Room.Name, IpId, RoomGuid, FusionStaticAssets); - else - GUIDs = new FusionRoomGuids(Room.Name, IpId, RoomGuid, FusionStaticAssets, FusionOccSensor); - - var JSON = JsonConvert.SerializeObject(GUIDs, Newtonsoft.Json.Formatting.Indented); - - using (StreamWriter sw = new StreamWriter(filePath)) - { - sw.Write(JSON); - sw.Flush(); - } - - Debug.Console(1, this, "Guids successfully written to file '{0}'", filePath); - - } - catch (Exception e) - { - Debug.Console(0, this, "Error writing guid file: {0}", e); - } - finally - { - if (_fileLock != null && !_fileLock.Disposed) - _fileLock.Leave(); - } - } - - /// - /// Reads the guid file from NVRAM - /// - /// path for te file - void ReadGuidFile(string filePath) - { - if(string.IsNullOrEmpty(filePath)) - { - Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Error reading guid file. No path specified."); - return; - } - - CCriticalSection _fileLock = new CCriticalSection(); - - try - { - if(_fileLock == null || _fileLock.Disposed) - return; - - _fileLock.Enter(); - - if(File.Exists(filePath)) - { - var JSON = File.ReadToEnd(filePath, Encoding.ASCII); - - GUIDs = JsonConvert.DeserializeObject(JSON); - - IpId = GUIDs.IpId; - - FusionStaticAssets = GUIDs.StaticAssets; - - } - - Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Fusion Guids successfully read from file: {0}", filePath); - - Debug.Console(1, this, "\nRoom Name: {0}\nIPID: {1:x}\n RoomGuid: {2}", Room.Name, IpId, RoomGuid); - - foreach (var item in FusionStaticAssets) - { - Debug.Console(1, this, "\nAsset Name: {0}\nAsset No: {1}\n Guid: {2}", item.Value.Name, item.Value.SlotNumber, item.Value.InstanceId); - } - } - catch (Exception e) - { - Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Error reading guid file: {0}", e); - } - finally - { - if(_fileLock != null && !_fileLock.Disposed) - _fileLock.Leave(); - } - - } - - protected virtual void CreateSymbolAndBasicSigs(uint ipId) - { - Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Creating Fusion Room symbol with GUID: {0}", RoomGuid); - - FusionRoom = new FusionRoom(ipId, Global.ControlSystem, Room.Name, RoomGuid); - FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.Use(); - FusionRoom.ExtenderFusionRoomDataReservedSigs.Use(); - - FusionRoom.Register(); - - FusionRoom.FusionStateChange += new FusionStateEventHandler(FusionRoom_FusionStateChange); - - FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.DeviceExtenderSigChange += new DeviceExtenderJoinChangeEventHandler(FusionRoomSchedule_DeviceExtenderSigChange); - FusionRoom.ExtenderFusionRoomDataReservedSigs.DeviceExtenderSigChange += new DeviceExtenderJoinChangeEventHandler(ExtenderFusionRoomDataReservedSigs_DeviceExtenderSigChange); - FusionRoom.OnlineStatusChange += new OnlineStatusChangeEventHandler(FusionRoom_OnlineStatusChange); - - CrestronConsole.AddNewConsoleCommand(RequestFullRoomSchedule, "FusReqRoomSchedule", "Requests schedule of the room for the next 24 hours", ConsoleAccessLevelEnum.AccessOperator); - CrestronConsole.AddNewConsoleCommand(ModifyMeetingEndTimeConsoleHelper, "FusReqRoomSchMod", "Ends or extends a meeting by the specified time", ConsoleAccessLevelEnum.AccessOperator); - CrestronConsole.AddNewConsoleCommand(CreateAsHocMeeting, "FusCreateMeeting", "Creates and Ad Hoc meeting for on hour or until the next meeting", ConsoleAccessLevelEnum.AccessOperator); - - // Room to fusion room - Room.OnFeedback.LinkInputSig(FusionRoom.SystemPowerOn.InputSig); - - // Moved to - CurrentRoomSourceNameSig = FusionRoom.CreateOffsetStringSig(84, "Display 1 - Current Source", eSigIoMask.InputSigOnly); - // Don't think we need to get current status of this as nothing should be alive yet. - (Room as EssentialsHuddleSpaceRoom).CurrentSingleSourceChange += new SourceInfoChangeHandler(Room_CurrentSourceInfoChange); - - - FusionRoom.SystemPowerOn.OutputSig.SetSigFalseAction((Room as EssentialsHuddleSpaceRoom).PowerOnToDefaultOrLastSource); - FusionRoom.SystemPowerOff.OutputSig.SetSigFalseAction(() => (Room as EssentialsHuddleSpaceRoom).RunRouteAction("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;"; - - GetProcessorEthernetValues(); - - GetSystemInfo(); - - GetProcessorInfo(); - - CrestronEnvironment.EthernetEventHandler += new EthernetEventHandler(CrestronEnvironment_EthernetEventHandler); - } - - protected void CrestronEnvironment_EthernetEventHandler(EthernetEventArgs ethernetEventArgs) - { - if (ethernetEventArgs.EthernetEventType == eEthernetEventType.LinkUp) - { - GetProcessorEthernetValues(); - } - } - - protected void GetSystemInfo() - { - //SystemName.InputSig.StringValue = Room.Name; - //Model.InputSig.StringValue = InitialParametersClass.ControllerPromptName; - //SerialNumber.InputSig.StringValue = InitialParametersClass. - - string response = string.Empty; - - var systemReboot = FusionRoom.CreateOffsetBoolSig(74, "Processor - Reboot", eSigIoMask.OutputSigOnly); - systemReboot.OutputSig.SetSigFalseAction(() => CrestronConsole.SendControlSystemCommand("reboot", ref response)); - } - - protected void GetProcessorEthernetValues() - { - Ip1 = FusionRoom.CreateOffsetStringSig(50, "Info - Processor - IP 1", eSigIoMask.InputSigOnly); - Ip2 = FusionRoom.CreateOffsetStringSig(51, "Info - Processor - IP 2", eSigIoMask.InputSigOnly); - Gateway = FusionRoom.CreateOffsetStringSig(52, "Info - Processor - Gateway", eSigIoMask.InputSigOnly); - Hostname = FusionRoom.CreateOffsetStringSig(53, "Info - Processor - Hostname", eSigIoMask.InputSigOnly); - Domain = FusionRoom.CreateOffsetStringSig(54, "Info - Processor - Domain", eSigIoMask.InputSigOnly); - Dns1 = FusionRoom.CreateOffsetStringSig(55, "Info - Processor - DNS 1", eSigIoMask.InputSigOnly); - Dns2 = FusionRoom.CreateOffsetStringSig(56, "Info - Processor - DNS 2", eSigIoMask.InputSigOnly); - Mac1 = FusionRoom.CreateOffsetStringSig(57, "Info - Processor - MAC 1", eSigIoMask.InputSigOnly); - Mac2 = FusionRoom.CreateOffsetStringSig(58, "Info - Processor - MAC 2", eSigIoMask.InputSigOnly); - NetMask1 = FusionRoom.CreateOffsetStringSig(59, "Info - Processor - Net Mask 1", eSigIoMask.InputSigOnly); - NetMask2 = FusionRoom.CreateOffsetStringSig(60, "Info - Processor - Net Mask 2", eSigIoMask.InputSigOnly); - - // Interface =0 - Ip1.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, 0); - Gateway.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_ROUTER, 0); - Hostname.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_HOSTNAME, 0); - Domain.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_DOMAIN_NAME, 0); - - var dnsServers = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_DNS_SERVER, 0).Split(','); - Dns1.InputSig.StringValue = dnsServers[0]; - if (dnsServers.Length > 1) - Dns2.InputSig.StringValue = dnsServers[1]; - - Mac1.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_MAC_ADDRESS, 0); - NetMask1.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_MASK, 0); - - // Interface 1 - - if (InitialParametersClass.NumberOfEthernetInterfaces > 1) // Only get these values if the processor has more than 1 NIC - { - Ip2.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, 1); - Mac2.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_MAC_ADDRESS, 1); - NetMask2.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_MASK, 1); - } - } - - protected void GetProcessorInfo() - { - - Firmware = FusionRoom.CreateOffsetStringSig(61, "Info - Processor - Firmware", eSigIoMask.InputSigOnly); - - if (CrestronEnvironment.DevicePlatform != eDevicePlatform.Server) - { - for (int i = 0; i < Global.ControlSystem.NumProgramsSupported; i++) - { - var join = 62 + i; - var progNum = i + 1; - Program[i] = FusionRoom.CreateOffsetStringSig((uint)join, string.Format("Info - Processor - Program {0}", progNum), eSigIoMask.InputSigOnly); - } - } - - Firmware.InputSig.StringValue = InitialParametersClass.FirmwareVersion; - - } - - void GetTouchpanelInfo() - { - // TODO Get IP and Project Name from TP - } - - protected void FusionRoom_OnlineStatusChange(GenericBase currentDevice, OnlineOfflineEventArgs args) - { - if (args.DeviceOnLine) - { - CrestronEnvironment.Sleep(200); - - // Send Push Notification Action request: - - string requestID = "InitialPushRequest"; - - - string actionRequest = - string.Format("\n{0}\n", requestID) + - "RegisterPushModel\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "\n"; - - Debug.Console(2, this, "Sending Fusion ActionRequest: \n{0}", actionRequest); - - FusionRoom.ExtenderFusionRoomDataReservedSigs.ActionQuery.StringValue = actionRequest; - - - // Request current Fusion Server Time - RequestLocalDateTime(null); - - // Setup timer to request time daily - if (DailyTimeRequestTimer != null && !DailyTimeRequestTimer.Disposed) - { - DailyTimeRequestTimer.Stop(); - DailyTimeRequestTimer.Dispose(); - } - - DailyTimeRequestTimer = new CTimer(RequestLocalDateTime, null, 86400000, 86400000); - - DailyTimeRequestTimer.Reset(86400000, 86400000); - } - - } - - /// - /// Requests the local date and time from the Fusion Server - /// - /// - public void RequestLocalDateTime(object callbackObject) - { - string timeRequestID = "TimeRequest"; - - string timeRequest = string.Format("{0}", timeRequestID); - - FusionRoom.ExtenderFusionRoomDataReservedSigs.LocalDateTimeQuery.StringValue = timeRequest; - } - - /// - /// Generates a room schedule request for this room for the next 24 hours. - /// - /// string identifying this request. Used with a corresponding ScheduleResponse value - public void RequestFullRoomSchedule(object callbackObject) - { - DateTime now = DateTime.Today; - - string currentTime = now.ToString("s"); - - string requestTest = - string.Format("FullSchedleRequest{0}{1}24", RoomGuid, currentTime); - - Debug.Console(2, this, "Sending Fusion ScheduleQuery: \n{0}", requestTest); - - FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.ScheduleQuery.StringValue = requestTest; - - if (IsRegisteredForSchedulePushNotifications) - PushNotificationTimer.Stop(); - } - - /// - /// Wrapper method to allow console commands to modify the current meeting end time - /// - /// meetingID extendTime - public void ModifyMeetingEndTimeConsoleHelper(string command) - { - string requestID; - string meetingID = null; - int extendMinutes = -1; - - requestID = "ModifyMeetingTest12345"; - - try - { - var tokens = command.Split(' '); - - meetingID = tokens[0]; - extendMinutes = Int32.Parse(tokens[1]); - - } - catch (Exception e) - { - Debug.Console(1, this, "Error parsing console command: {0}", e); - } - - ModifyMeetingEndTime(requestID, extendMinutes); - - } - - /// - /// Ends or Extends the current meeting by the specified number of minutes. - /// - /// Number of minutes to extend the meeting. A value of 0 will end the meeting. - public void ModifyMeetingEndTime(string requestID, int extendMinutes) - { - if(CurrentMeeting == null) - { - Debug.Console(1, this, "No meeting in progress. Unable to modify end time."); - return; - } - - if (extendMinutes > -1) - { - if(extendMinutes > 0) - { - var extendTime = CurrentMeeting.dtEnd - DateTime.Now; - double extendMinutesRaw = extendTime.TotalMinutes; - - extendMinutes = extendMinutes + (int)Math.Round(extendMinutesRaw); - } - - - string requestTest = string.Format( - "{0}{1}MeetingChange" - , requestID, RoomGuid, CurrentMeeting.MeetingID, extendMinutes); - - Debug.Console(1, this, "Sending MeetingChange Request: \n{0}", requestTest); - - FusionRoom.ExtenderFusionRoomDataReservedSigs.ActionQuery.StringValue = requestTest; - } - else - { - Debug.Console(1, this, "Invalid time specified"); - } - - - } - - /// - /// Creates and Ad Hoc meeting with a duration of 1 hour, or until the next meeting if in less than 1 hour. - /// - public void CreateAsHocMeeting(string command) - { - string requestID = "CreateAdHocMeeting"; - - DateTime now = DateTime.Now.AddMinutes(1); - - now.AddSeconds(-now.Second); - - // Assume 1 hour meeting if possible - DateTime dtEnd = now.AddHours(1); - - // Check if room is available for 1 hour before next meeting - if (NextMeeting != null) - { - var roomAvailable = NextMeeting.dtEnd.Subtract(dtEnd); - - if (roomAvailable.TotalMinutes < 60) - { - /// Room not available for full hour, book until next meeting starts - dtEnd = NextMeeting.dtEnd; - } - } - - string createMeetingRequest = - "" + - string.Format("{0}", requestID) + - string.Format("{0}", RoomGuid) + - "" + - string.Format("{0}", now.ToString("s")) + - string.Format("{0}", dtEnd.ToString("s")) + - "AdHoc Meeting" + - "Room User" + - "Example Message" + - "" + - ""; - - Debug.Console(2, this, "Sending CreateMeeting Request: \n{0}", createMeetingRequest); - - FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.CreateMeeting.StringValue = createMeetingRequest; - - //Debug.Console(1, this, "Sending CreateMeeting Request: \n{0}", command); - - //FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.CreateMeeting.StringValue = command; - - } - - /// - /// Event handler method for Device Extender sig changes - /// - /// - /// - protected void ExtenderFusionRoomDataReservedSigs_DeviceExtenderSigChange(DeviceExtender currentDeviceExtender, SigEventArgs args) - { - Debug.Console(2, this, "Event: {0}\n Sig: {1}\nFusionResponse:\n{2}", args.Event, args.Sig.Name, args.Sig.StringValue); - - - if (args.Sig == FusionRoom.ExtenderFusionRoomDataReservedSigs.ActionQueryResponse) - { - try - { - XmlDocument message = new XmlDocument(); - - message.LoadXml(args.Sig.StringValue); - - var actionResponse = message["ActionResponse"]; - - if (actionResponse != null) - { - var requestID = actionResponse["RequestID"]; - - if (requestID.InnerText == "InitialPushRequest") - { - if (actionResponse["ActionID"].InnerText == "RegisterPushModel") - { - var parameters = actionResponse["Parameters"]; - - foreach (XmlElement parameter in parameters) - { - if (parameter.HasAttributes) - { - var attributes = parameter.Attributes; - - if (attributes["ID"].Value == "Registered") - { - var isRegistered = Int32.Parse(attributes["Value"].Value); - - if (isRegistered == 1) - { - IsRegisteredForSchedulePushNotifications = true; - - if (PollTimer != null && !PollTimer.Disposed) - { - PollTimer.Stop(); - PollTimer.Dispose(); - } - - PushNotificationTimer = new CTimer(RequestFullRoomSchedule, null, PushNotificationTimeout, PushNotificationTimeout); - - PushNotificationTimer.Reset(PushNotificationTimeout, PushNotificationTimeout); - } - else if (isRegistered == 0) - { - IsRegisteredForSchedulePushNotifications = false; - - if (PushNotificationTimer != null && !PushNotificationTimer.Disposed) - { - PushNotificationTimer.Stop(); - PushNotificationTimer.Dispose(); - } - - PollTimer = new CTimer(RequestFullRoomSchedule, null, SchedulePollInterval, SchedulePollInterval); - - PollTimer.Reset(SchedulePollInterval, SchedulePollInterval); - } - } - } - } - } - } - } - } - catch (Exception e) - { - Debug.Console(1, this, "Error parsing ActionQueryResponse: {0}", e); - } - } - else if (args.Sig == FusionRoom.ExtenderFusionRoomDataReservedSigs.LocalDateTimeQueryResponse) - { - try - { - XmlDocument message = new XmlDocument(); - - message.LoadXml(args.Sig.StringValue); - - var localDateTimeResponse = message["LocalTimeResponse"]; - - if (localDateTimeResponse != null) - { - var localDateTime = localDateTimeResponse["LocalDateTime"]; - - if (localDateTime != null) - { - var tempLocalDateTime = localDateTime.InnerText; - - DateTime currentTime = DateTime.Parse(tempLocalDateTime); - - Debug.Console(1, this, "DateTime from Fusion Server: {0}", currentTime); - - // Parse time and date from response and insert values - CrestronEnvironment.SetTimeAndDate((ushort)currentTime.Hour, (ushort)currentTime.Minute, (ushort)currentTime.Second, (ushort)currentTime.Month, (ushort)currentTime.Day, (ushort)currentTime.Year); - - Debug.Console(1, this, "Processor time set to {0}", CrestronEnvironment.GetLocalTime()); - } - } - } - catch (Exception e) - { - Debug.Console(1, this, "Error parsing LocalDateTimeQueryResponse: {0}", e); - } - } - } - - /// - /// Event handler method for Device Extender sig changes - /// - /// - /// - protected void FusionRoomSchedule_DeviceExtenderSigChange(DeviceExtender currentDeviceExtender, SigEventArgs args) - { - Debug.Console(2, this, "Scehdule Response Event: {0}\n Sig: {1}\nFusionResponse:\n{2}", args.Event, args.Sig.Name, args.Sig.StringValue); - - - if (args.Sig == FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.ScheduleResponse) - { - try - { - ScheduleResponse scheduleResponse = new ScheduleResponse(); - - XmlDocument message = new XmlDocument(); - - message.LoadXml(args.Sig.StringValue); - - var response = message["ScheduleResponse"]; - - if (response != null) - { - // Check for push notification - if (response["RequestID"].InnerText == "RVRequest") - { - var action = response["Action"]; - - if (action.OuterXml.IndexOf("RequestSchedule") > -1) - { - PushNotificationTimer.Reset(PushNotificationTimeout, PushNotificationTimeout); - } - } - else // Not a push notification - { - CurrentSchedule = new RoomSchedule(); // Clear Current Schedule - CurrentMeeting = null; // Clear Current Meeting - NextMeeting = null; // Clear Next Meeting - - bool isNextMeeting = false; - - foreach (XmlElement element in message.FirstChild.ChildNodes) - { - if (element.Name == "RequestID") - { - scheduleResponse.RequestID = element.InnerText; - } - else if (element.Name == "RoomID") - { - scheduleResponse.RoomID = element.InnerText; - } - else if (element.Name == "RoomName") - { - scheduleResponse.RoomName = element.InnerText; - } - else if (element.Name == "Event") - { - Debug.Console(2, this, "Event Found:\n{0}", element.OuterXml); - - XmlReader reader = new XmlReader(element.OuterXml); - - Event tempEvent = new Event(); - - tempEvent = CrestronXMLSerialization.DeSerializeObject(reader); - - scheduleResponse.Events.Add(tempEvent); - - // Check is this is the current event - if (tempEvent.dtStart <= DateTime.Now && tempEvent.dtEnd >= DateTime.Now) - { - CurrentMeeting = tempEvent; // Set Current Meeting - isNextMeeting = true; // Flag that next element is next meeting - } - - if (isNextMeeting) - { - NextMeeting = tempEvent; // Set Next Meeting - isNextMeeting = false; - } - - CurrentSchedule.Meetings.Add(tempEvent); - } - - } - - PrintTodaysSchedule(); - - if (!IsRegisteredForSchedulePushNotifications) - PollTimer.Reset(SchedulePollInterval, SchedulePollInterval); - - // Fire Schedule Change Event - var handler = ScheduleChange; - - if (handler != null) - { - handler(this, new ScheduleChangeEventArgs() { Schedule = CurrentSchedule }); - } - - } - } - - - - } - catch (Exception e) - { - Debug.Console(1, this, "Error parsing ScheduleResponse: {0}", e); - } - } - else if (args.Sig == FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.CreateResponse) - { - Debug.Console(2, this, "Create Meeting Response Event: {0}\n Sig: {1}\nFusionResponse:\n{2}", args.Event, args.Sig.Name, args.Sig.StringValue); - } - - } - - /// - /// Prints today's schedule to console for debugging - /// - void PrintTodaysSchedule() - { - if (Debug.Level > 1) - { - if (CurrentSchedule.Meetings.Count > 0) - { - Debug.Console(1, this, "Today's Schedule for '{0}'\n", Room.Name); - - foreach (Event e in CurrentSchedule.Meetings) - { - Debug.Console(1, this, "Subject: {0}", e.Subject); - Debug.Console(1, this, "Organizer: {0}", e.Organizer); - Debug.Console(1, this, "MeetingID: {0}", e.MeetingID); - Debug.Console(1, this, "Start Time: {0}", e.dtStart); - Debug.Console(1, this, "End Time: {0}", e.dtEnd); - Debug.Console(1, this, "Duration: {0}\n", e.DurationInMinutes); - } - } - } - } - - protected virtual void SetUpSources() - { - // Sources - var dict = ConfigReader.ConfigObject.GetSourceListForKey((Room as EssentialsHuddleSpaceRoom).SourceListKey); - if (dict != null) - { - // NEW PROCESS: - // Make these lists and insert the fusion attributes by iterating these - var setTopBoxes = dict.Where(d => d.Value.SourceDevice is ISetTopBoxControls); - uint i = 1; - foreach (var kvp in setTopBoxes) - { - TryAddRouteActionSigs("Display 1 - Source TV " + i, 188 + i, kvp.Key, kvp.Value.SourceDevice); - i++; - if (i > 5) // We only have five spots - break; - } - - var discPlayers = dict.Where(d => d.Value.SourceDevice is IDiscPlayerControls); - i = 1; - foreach (var kvp in discPlayers) - { - TryAddRouteActionSigs("Display 1 - Source DVD " + i, 181 + i, kvp.Key, kvp.Value.SourceDevice); - i++; - if (i > 5) // We only have five spots - break; - } - - var laptops = dict.Where(d => d.Value.SourceDevice is Laptop); - i = 1; - foreach (var kvp in laptops) - { - TryAddRouteActionSigs("Display 1 - Source Laptop " + i, 166 + i, kvp.Key, kvp.Value.SourceDevice); - i++; - if (i > 10) // We only have ten spots??? - break; - } - - foreach (var kvp in dict) - { - var usageDevice = kvp.Value.SourceDevice as IUsageTracking; - - if (usageDevice != null) - { - usageDevice.UsageTracker = new UsageTracking(usageDevice as Device); - usageDevice.UsageTracker.UsageIsTracked = true; - usageDevice.UsageTracker.DeviceUsageEnded += new EventHandler(UsageTracker_DeviceUsageEnded); - } - } - - } - else - { - Debug.Console(1, this, "WARNING: Config source list '{0}' not found for room '{1}'", - (Room as EssentialsHuddleSpaceRoom).SourceListKey, Room.Key); - } - } - - /// - /// Collects usage data from source and sends to Fusion - /// - /// - /// - protected void UsageTracker_DeviceUsageEnded(object sender, DeviceUsageEventArgs e) - { - var deviceTracker = sender as UsageTracking; - - var configDevice = ConfigReader.ConfigObject.Devices.Where(d => d.Key.Equals(deviceTracker.Parent)); - - string group = ConfigReader.GetGroupForDeviceKey(deviceTracker.Parent.Key); - - string currentMeetingId = "-"; - - if (CurrentMeeting != null) - currentMeetingId = CurrentMeeting.MeetingID; - - //String Format: "USAGE||[Date YYYY-MM-DD]||[Time HH-mm-ss]||TIME||[Asset_Type]||[Asset_Name]||[Minutes_used]||[Asset_ID]||[Meeting_ID]" - // [Asset_ID] property does not appear to be used in Crestron SSI examples. They are sending "-" instead so that's what is replicated here - string deviceUsage = string.Format("USAGE||{0}||{1}||TIME||{2}||{3}||-||{4}||-||{5}||{6}||\r\n", e.UsageEndTime.ToString("yyyy-MM-dd"), e.UsageEndTime.ToString("HH:mm:ss"), - group, deviceTracker.Parent.Name, e.MinutesUsed, "-", currentMeetingId); - - Debug.Console(1, this, "Device usage for: {0} ended at {1}. In use for {2} minutes", deviceTracker.Parent.Name, e.UsageEndTime, e.MinutesUsed); - - FusionRoom.DeviceUsage.InputSig.StringValue = deviceUsage; - - Debug.Console(1, this, "Device usage string: {0}", deviceUsage); - } - - - protected void TryAddRouteActionSigs(string attrName, uint attrNum, string routeKey, Device pSrc) - { - Debug.Console(2, this, "Creating attribute '{0}' with join {1} for source {2}", - attrName, attrNum, pSrc.Key); - try - { - 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.SetSigFalseAction(() => (Room as EssentialsHuddleSpaceRoom).RunRouteAction(routeKey)); - } - catch (Exception) - { - Debug.Console(2, this, "Error creating Fusion signal {0} {1} for device '{2}'. THIS NEEDS REWORKING", attrNum, attrName, pSrc.Key); - } - } - - /// - /// - /// - void SetUpCommunitcationMonitors() - { - uint displayNum = 0; - uint touchpanelNum = 0; - uint xpanelNum = 0; - - // 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; - - string attrName = null; - uint attrNum = 1; - - //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; - //} - //uint attrNum = Convert.ToUInt32(keyNum); - - // Check for UI devices - var uiDev = dev as EssentialsTouchpanelController; - if (uiDev != null) - { - if (uiDev.Panel is Crestron.SimplSharpPro.UI.XpanelForSmartGraphics) - { - attrNum = attrNum + touchpanelNum; - - if (attrNum > 10) - continue; - attrName = "Online - XPanel " + attrNum; - attrNum += 160; - - touchpanelNum++; - } - else - { - attrNum = attrNum + xpanelNum; - - if (attrNum > 10) - continue; - attrName = "Online - Touch Panel " + attrNum; - attrNum += 150; - - xpanelNum++; - } - } - - //else - if (dev is DisplayBase) - { - attrNum = attrNum + displayNum; - if (attrNum > 10) - continue; - attrName = "Online - Display " + attrNum; - attrNum += 170; - - displayNum++; - } - //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); - } - } - } - - protected virtual void SetUpDisplay() - { - try - { - //Setup Display Usage Monitoring - - var displays = DeviceManager.AllDevices.Where(d => d is DisplayBase); - - // Consider updating this in multiple display systems - - foreach (DisplayBase display in displays) - { - display.UsageTracker = new UsageTracking(display); - display.UsageTracker.UsageIsTracked = true; - display.UsageTracker.DeviceUsageEnded += new EventHandler(UsageTracker_DeviceUsageEnded); - } - - var defaultDisplay = (Room as EssentialsHuddleSpaceRoom).DefaultDisplay as DisplayBase; - if (defaultDisplay == null) - { - Debug.Console(1, this, "Cannot link null display to Fusion because default display is null"); - return; - } - - var dispPowerOnAction = new Action(b => { if (!b) defaultDisplay.PowerOn(); }); - var dispPowerOffAction = new Action(b => { if (!b) defaultDisplay.PowerOff(); }); - - // Display to fusion room sigs - FusionRoom.DisplayPowerOn.OutputSig.UserObject = dispPowerOnAction; - FusionRoom.DisplayPowerOff.OutputSig.UserObject = dispPowerOffAction; - defaultDisplay.PowerIsOnFeedback.LinkInputSig(FusionRoom.DisplayPowerOn.InputSig); - if (defaultDisplay is IDisplayUsage) - (defaultDisplay as IDisplayUsage).LampHours.LinkInputSig(FusionRoom.DisplayUsage.InputSig); - - - - MapDisplayToRoomJoins(1, 158, defaultDisplay); - - - var deviceConfig = ConfigReader.ConfigObject.Devices.FirstOrDefault(d => d.Key.Equals(defaultDisplay.Key)); - - //Check for existing asset in GUIDs collection - - var tempAsset = new FusionAsset(); - - if (FusionStaticAssets.ContainsKey(deviceConfig.Uid)) - { - tempAsset = FusionStaticAssets[deviceConfig.Uid]; - } - else - { - // Create a new asset - tempAsset = new FusionAsset(FusionRoomGuids.GetNextAvailableAssetNumber(FusionRoom), defaultDisplay.Name, "Display", ""); - FusionStaticAssets.Add(deviceConfig.Uid, tempAsset); - } - - var dispAsset = FusionRoom.CreateStaticAsset(tempAsset.SlotNumber, tempAsset.Name, "Display", tempAsset.InstanceId); - dispAsset.PowerOn.OutputSig.UserObject = dispPowerOnAction; - dispAsset.PowerOff.OutputSig.UserObject = dispPowerOffAction; - defaultDisplay.PowerIsOnFeedback.LinkInputSig(dispAsset.PowerOn.InputSig); - // NO!! display.PowerIsOn.LinkComplementInputSig(dispAsset.PowerOff.InputSig); - // Use extension methods - dispAsset.TrySetMakeModel(defaultDisplay); - dispAsset.TryLinkAssetErrorToCommunication(defaultDisplay); - } - catch (Exception e) - { - Debug.Console(1, this, "Error setting up display in Fusion: {0}", e); - } - - } - - /// - /// Maps room attributes to a display at a specified index - /// - /// - /// a - protected virtual void MapDisplayToRoomJoins(int displayIndex, int joinOffset, DisplayBase display) - { - string displayName = string.Format("Display {0} - ", displayIndex); - - - if (display == (Room as EssentialsHuddleSpaceRoom).DefaultDisplay) - { - // Display volume - var defaultDisplayVolume = FusionRoom.CreateOffsetUshortSig(50, "Volume - Fader01", eSigIoMask.InputOutputSig); - defaultDisplayVolume.OutputSig.UserObject = new Action(b => (display as IBasicVolumeWithFeedback).SetVolume(b)); - (display as IBasicVolumeWithFeedback).VolumeLevelFeedback.LinkInputSig(defaultDisplayVolume.InputSig); - - // Power on - var defaultDisplayPowerOn = FusionRoom.CreateOffsetBoolSig((uint)joinOffset, displayName + "Power On", eSigIoMask.InputOutputSig); - defaultDisplayPowerOn.OutputSig.UserObject = new Action(b => { if (!b) display.PowerOn(); }); - display.PowerIsOnFeedback.LinkInputSig(defaultDisplayPowerOn.InputSig); - - // Power Off - var defaultDisplayPowerOff = FusionRoom.CreateOffsetBoolSig((uint)joinOffset + 1, displayName + "Power Off", eSigIoMask.InputOutputSig); - defaultDisplayPowerOn.OutputSig.UserObject = new Action(b => { if (!b) display.PowerOff(); }); ; - display.PowerIsOnFeedback.LinkInputSig(defaultDisplayPowerOn.InputSig); - - // Current Source - var defaultDisplaySourceNone = FusionRoom.CreateOffsetBoolSig((uint)joinOffset + 8, displayName + "Source None", eSigIoMask.InputOutputSig); - defaultDisplaySourceNone.OutputSig.UserObject = new Action(b => { if (!b) (Room as EssentialsHuddleSpaceRoom).RunRouteAction("roomOff"); }); ; - } - } - - void SetUpError() - { - // 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; - }; - - } - - /// - /// Sets up a local occupancy sensor, such as one attached to a Fusion Scheduling panel. The occupancy status of the room will be read from Fusion - /// - void SetUpLocalOccupancy() - { - RoomIsOccupiedFeedback = new BoolFeedback(RoomIsOccupiedFeedbackFunc); - - FusionRoom.FusionAssetStateChange += new FusionAssetStateEventHandler(FusionRoom_FusionAssetStateChange); - - // Build Occupancy Asset? - // Link sigs? - - //Room.SetRoomOccupancy(this as IOccupancyStatusProvider, 0); - - - } - - void FusionRoom_FusionAssetStateChange(FusionBase device, FusionAssetStateEventArgs args) - { - if (args.EventId == FusionAssetEventId.RoomOccupiedReceivedEventId || args.EventId == FusionAssetEventId.RoomUnoccupiedReceivedEventId) - RoomIsOccupiedFeedback.FireUpdate(); - - } - - /// - /// Sets up remote occupancy that will relay the occupancy status determined by local system devices to Fusion - /// - void SetUpRemoteOccupancy() - { - - // Need to have the room occupancy object first and somehow determine the slot number of the Occupancy asset but will not be able to use the UID from config likely. - // Consider defining an object just for Room Occupancy (either eAssetType.Occupancy Sensor (local) or eAssetType.RemoteOccupancySensor (from Fusion sched. panel)) and reserving slot 4 for that asset (statics would start at 5) - - //if (Room.OccupancyObj != null) - //{ - - var tempOccAsset = GUIDs.OccupancyAsset; - - if(tempOccAsset == null) - { - FusionOccSensor = new FusionOccupancySensorAsset(eAssetType.OccupancySensor); - tempOccAsset = FusionOccSensor; - } - - var occSensorAsset = FusionRoom.CreateOccupancySensorAsset(tempOccAsset.SlotNumber, tempOccAsset.Name, "Occupancy Sensor", tempOccAsset.InstanceId); - - occSensorAsset.RoomOccupied.AddSigToRVIFile = true; - - var occSensorShutdownMinutes = FusionRoom.CreateOffsetUshortSig(70, "Occ Shutdown - Minutes", eSigIoMask.InputOutputSig); - - // Tie to method on occupancy object - //occSensorShutdownMinutes.OutputSig.UserObject(new Action(ushort)(b => Room.OccupancyObj.SetShutdownMinutes(b)); - - - Room.RoomOccupancy.RoomIsOccupiedFeedback.LinkInputSig(occSensorAsset.RoomOccupied.InputSig); - //} - } - - /// - /// 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, @"\b(\d+)"); - if (!capture.Success) - return -1; - else return Convert.ToInt32(capture.Groups[1].Value); - } - - /// - /// Event handler for when room source changes - /// - protected void Room_CurrentSourceInfoChange(EssentialsRoomBase room, SourceListItem info, ChangeType type) - { - // Handle null. Nothing to do when switching from or to null - if (info == null || info.SourceDevice == null) - return; - - var dev = info.SourceDevice; - if (type == ChangeType.WillChange) - { - if (SourceToFeedbackSigs.ContainsKey(dev)) - SourceToFeedbackSigs[dev].BoolValue = false; - } - else - { - if (SourceToFeedbackSigs.ContainsKey(dev)) - SourceToFeedbackSigs[dev].BoolValue = true; - var name = (room == null ? "" : room.Name); - CurrentRoomSourceNameSig.InputSig.StringValue = info.SourceDevice.Name; - } - } - - protected 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) - { - Debug.Console(0, "Adding Fusion Static Asset '{0}' to slot {1} with GUID: '{2}'", name, number, instanceId); - - fr.AddAsset(eAssetType.StaticAsset, number, name, type, instanceId); - return fr.UserConfigurableAssetDetails[number].Asset as FusionStaticAsset; - } - - public static FusionOccupancySensor CreateOccupancySensorAsset(this FusionRoom fr, uint number, string name, string type, string instanceId) - { - Debug.Console(0, "Adding Fusion Occupancy Sensor Asset '{0}' to slot {1} with GUID: '{2}'", name, number, instanceId); - - fr.AddAsset(eAssetType.OccupancySensor, number, name, type, instanceId); - return fr.UserConfigurableAssetDetails[number].Asset as FusionOccupancySensor; - } - } - - //************************************************************************************************ - /// - /// 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(); - } - } - } - - +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronIO; +using Crestron.SimplSharp.CrestronXml; +using Crestron.SimplSharp.CrestronXml.Serialization; +using Crestron.SimplSharp.CrestronXmlLinq; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; +using Crestron.SimplSharpPro.Fusion; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +using PepperDash.Core; +using PepperDash.Essentials; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Devices.Common; +using PepperDash.Essentials.Devices.Common.Occupancy; + + + +namespace PepperDash.Essentials.Fusion +{ + public class EssentialsHuddleSpaceFusionSystemControllerBase : Device, IOccupancyStatusProvider + { + public event EventHandler ScheduleChange; + //public event EventHandler MeetingEndWarning; + //public event EventHandler NextMeetingBeginWarning; + + protected FusionRoom FusionRoom; + protected EssentialsRoomBase Room; + Dictionary SourceToFeedbackSigs = + new Dictionary(); + + StatusMonitorCollection ErrorMessageRollUp; + + protected StringSigData CurrentRoomSourceNameSig; + + #region System Info Sigs + //StringSigData SystemName; + //StringSigData Model; + //StringSigData SerialNumber; + //StringSigData Uptime; + #endregion + + + #region Processor Info Sigs + StringSigData Ip1; + StringSigData Ip2; + StringSigData Gateway; + StringSigData Hostname; + StringSigData Domain; + StringSigData Dns1; + StringSigData Dns2; + StringSigData Mac1; + StringSigData Mac2; + StringSigData NetMask1; + StringSigData NetMask2; + StringSigData Firmware; + + StringSigData[] Program = new StringSigData[10]; + #endregion + + #region Default Display Source Sigs + + BooleanSigData[] Source = new BooleanSigData[10]; + + #endregion + + RoomSchedule CurrentSchedule; + + Event NextMeeting; + + Event CurrentMeeting; + + protected string RoomGuid + { + get + { + return GUIDs.RoomGuid; + } + + } + + uint IpId; + + FusionRoomGuids GUIDs; + + bool GuidFileExists; + + bool IsRegisteredForSchedulePushNotifications = false; + + CTimer PollTimer = null; + + CTimer PushNotificationTimer = null; + + CTimer DailyTimeRequestTimer = null; + + // Default poll time is 5 min unless overridden by config value + public long SchedulePollInterval = 300000; + + public long PushNotificationTimeout = 5000; + + protected Dictionary FusionStaticAssets; + + // For use with local occ sensor devices which will relay to Fusion the current occupancy status + protected FusionRemoteOccupancySensor FusionRemoteOccSensor; + + // For use with occ sensor attached to a scheduling panel in Fusion + protected FusionOccupancySensorAsset FusionOccSensor; + + public BoolFeedback RoomIsOccupiedFeedback { get; private set; } + + protected Func RoomIsOccupiedFeedbackFunc + { + get + { + return () => FusionRemoteOccSensor.RoomOccupied.OutputSig.BoolValue; + } + } + + //ScheduleResponseEvent NextMeeting; + + public EssentialsHuddleSpaceFusionSystemControllerBase(EssentialsRoomBase room, uint ipId) + : base(room.Key + "-fusion") + { + + try + { + + Room = room; + + IpId = ipId; + + FusionStaticAssets = new Dictionary(); + + GUIDs = new FusionRoomGuids(); + + var mac = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_MAC_ADDRESS, 0); + + var slot = Global.ControlSystem.ProgramNumber; + + string guidFilePath = Global.FilePathPrefix + string.Format(@"{0}-FusionGuids.json", InitialParametersClass.ProgramIDTag); + + GuidFileExists = File.Exists(guidFilePath); + + // Check if file exists + if (!GuidFileExists) + { + // Does not exist. Create GUIDs + GUIDs = new FusionRoomGuids(Room.Name, ipId, GUIDs.GenerateNewRoomGuid(slot, mac), FusionStaticAssets); + } + else + { + // Exists. Read GUIDs + ReadGuidFile(guidFilePath); + } + + CreateSymbolAndBasicSigs(IpId); + SetUpSources(); + SetUpCommunitcationMonitors(); + SetUpDisplay(); + SetUpError(); + ExecuteCustomSteps(); + + if (Room.RoomOccupancy != null) + { + if (Room.OccupancyStatusProviderIsRemote) + SetUpRemoteOccupancy(); + else + { + SetUpLocalOccupancy(); + } + } + + // Make it so! + FusionRVI.GenerateFileForAllFusionDevices(); + + GenerateGuidFile(guidFilePath); + } + catch (Exception e) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Error Building Fusion System Controller: {0}", e); + } + } + + /// + /// Used for extension classes to execute whatever steps are necessary before generating the RVI and GUID files + /// + protected virtual void ExecuteCustomSteps() + { + + } + + /// + /// Generates the guid file in NVRAM. If the file already exists it will be overwritten. + /// + /// path for the file + void GenerateGuidFile(string filePath) + { + if (string.IsNullOrEmpty(filePath)) + { + Debug.Console(0, this, "Error writing guid file. No path specified."); + return; + } + + CCriticalSection _fileLock = new CCriticalSection(); + + try + { + if (_fileLock == null || _fileLock.Disposed) + return; + + _fileLock.Enter(); + + Debug.Console(1, this, "Writing GUIDs to file"); + + if (FusionOccSensor == null) + GUIDs = new FusionRoomGuids(Room.Name, IpId, RoomGuid, FusionStaticAssets); + else + GUIDs = new FusionRoomGuids(Room.Name, IpId, RoomGuid, FusionStaticAssets, FusionOccSensor); + + var JSON = JsonConvert.SerializeObject(GUIDs, Newtonsoft.Json.Formatting.Indented); + + using (StreamWriter sw = new StreamWriter(filePath)) + { + sw.Write(JSON); + sw.Flush(); + } + + Debug.Console(1, this, "Guids successfully written to file '{0}'", filePath); + + } + catch (Exception e) + { + Debug.Console(0, this, "Error writing guid file: {0}", e); + } + finally + { + if (_fileLock != null && !_fileLock.Disposed) + _fileLock.Leave(); + } + } + + /// + /// Reads the guid file from NVRAM + /// + /// path for te file + void ReadGuidFile(string filePath) + { + if(string.IsNullOrEmpty(filePath)) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Error reading guid file. No path specified."); + return; + } + + CCriticalSection _fileLock = new CCriticalSection(); + + try + { + if(_fileLock == null || _fileLock.Disposed) + return; + + _fileLock.Enter(); + + if(File.Exists(filePath)) + { + var JSON = File.ReadToEnd(filePath, Encoding.ASCII); + + GUIDs = JsonConvert.DeserializeObject(JSON); + + IpId = GUIDs.IpId; + + FusionStaticAssets = GUIDs.StaticAssets; + + } + + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Fusion Guids successfully read from file: {0}", filePath); + + Debug.Console(1, this, "\nRoom Name: {0}\nIPID: {1:x}\n RoomGuid: {2}", Room.Name, IpId, RoomGuid); + + foreach (var item in FusionStaticAssets) + { + Debug.Console(1, this, "\nAsset Name: {0}\nAsset No: {1}\n Guid: {2}", item.Value.Name, item.Value.SlotNumber, item.Value.InstanceId); + } + } + catch (Exception e) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Error reading guid file: {0}", e); + } + finally + { + if(_fileLock != null && !_fileLock.Disposed) + _fileLock.Leave(); + } + + } + + protected virtual void CreateSymbolAndBasicSigs(uint ipId) + { + Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Creating Fusion Room symbol with GUID: {0}", RoomGuid); + + FusionRoom = new FusionRoom(ipId, Global.ControlSystem, Room.Name, RoomGuid); + FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.Use(); + FusionRoom.ExtenderFusionRoomDataReservedSigs.Use(); + + FusionRoom.Register(); + + FusionRoom.FusionStateChange += new FusionStateEventHandler(FusionRoom_FusionStateChange); + + FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.DeviceExtenderSigChange += new DeviceExtenderJoinChangeEventHandler(FusionRoomSchedule_DeviceExtenderSigChange); + FusionRoom.ExtenderFusionRoomDataReservedSigs.DeviceExtenderSigChange += new DeviceExtenderJoinChangeEventHandler(ExtenderFusionRoomDataReservedSigs_DeviceExtenderSigChange); + FusionRoom.OnlineStatusChange += new OnlineStatusChangeEventHandler(FusionRoom_OnlineStatusChange); + + CrestronConsole.AddNewConsoleCommand(RequestFullRoomSchedule, "FusReqRoomSchedule", "Requests schedule of the room for the next 24 hours", ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(ModifyMeetingEndTimeConsoleHelper, "FusReqRoomSchMod", "Ends or extends a meeting by the specified time", ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(CreateAsHocMeeting, "FusCreateMeeting", "Creates and Ad Hoc meeting for on hour or until the next meeting", ConsoleAccessLevelEnum.AccessOperator); + + // Room to fusion room + Room.OnFeedback.LinkInputSig(FusionRoom.SystemPowerOn.InputSig); + + // Moved to + CurrentRoomSourceNameSig = FusionRoom.CreateOffsetStringSig(84, "Display 1 - Current Source", eSigIoMask.InputSigOnly); + // Don't think we need to get current status of this as nothing should be alive yet. + (Room as EssentialsHuddleSpaceRoom).CurrentSingleSourceChange += new SourceInfoChangeHandler(Room_CurrentSourceInfoChange); + + + FusionRoom.SystemPowerOn.OutputSig.SetSigFalseAction((Room as EssentialsHuddleSpaceRoom).PowerOnToDefaultOrLastSource); + FusionRoom.SystemPowerOff.OutputSig.SetSigFalseAction(() => (Room as EssentialsHuddleSpaceRoom).RunRouteAction("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;"; + + GetProcessorEthernetValues(); + + GetSystemInfo(); + + GetProcessorInfo(); + + CrestronEnvironment.EthernetEventHandler += new EthernetEventHandler(CrestronEnvironment_EthernetEventHandler); + } + + protected void CrestronEnvironment_EthernetEventHandler(EthernetEventArgs ethernetEventArgs) + { + if (ethernetEventArgs.EthernetEventType == eEthernetEventType.LinkUp) + { + GetProcessorEthernetValues(); + } + } + + protected void GetSystemInfo() + { + //SystemName.InputSig.StringValue = Room.Name; + //Model.InputSig.StringValue = InitialParametersClass.ControllerPromptName; + //SerialNumber.InputSig.StringValue = InitialParametersClass. + + string response = string.Empty; + + var systemReboot = FusionRoom.CreateOffsetBoolSig(74, "Processor - Reboot", eSigIoMask.OutputSigOnly); + systemReboot.OutputSig.SetSigFalseAction(() => CrestronConsole.SendControlSystemCommand("reboot", ref response)); + } + + protected void GetProcessorEthernetValues() + { + Ip1 = FusionRoom.CreateOffsetStringSig(50, "Info - Processor - IP 1", eSigIoMask.InputSigOnly); + Ip2 = FusionRoom.CreateOffsetStringSig(51, "Info - Processor - IP 2", eSigIoMask.InputSigOnly); + Gateway = FusionRoom.CreateOffsetStringSig(52, "Info - Processor - Gateway", eSigIoMask.InputSigOnly); + Hostname = FusionRoom.CreateOffsetStringSig(53, "Info - Processor - Hostname", eSigIoMask.InputSigOnly); + Domain = FusionRoom.CreateOffsetStringSig(54, "Info - Processor - Domain", eSigIoMask.InputSigOnly); + Dns1 = FusionRoom.CreateOffsetStringSig(55, "Info - Processor - DNS 1", eSigIoMask.InputSigOnly); + Dns2 = FusionRoom.CreateOffsetStringSig(56, "Info - Processor - DNS 2", eSigIoMask.InputSigOnly); + Mac1 = FusionRoom.CreateOffsetStringSig(57, "Info - Processor - MAC 1", eSigIoMask.InputSigOnly); + Mac2 = FusionRoom.CreateOffsetStringSig(58, "Info - Processor - MAC 2", eSigIoMask.InputSigOnly); + NetMask1 = FusionRoom.CreateOffsetStringSig(59, "Info - Processor - Net Mask 1", eSigIoMask.InputSigOnly); + NetMask2 = FusionRoom.CreateOffsetStringSig(60, "Info - Processor - Net Mask 2", eSigIoMask.InputSigOnly); + + // Interface =0 + Ip1.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, 0); + Gateway.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_ROUTER, 0); + Hostname.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_HOSTNAME, 0); + Domain.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_DOMAIN_NAME, 0); + + var dnsServers = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_DNS_SERVER, 0).Split(','); + Dns1.InputSig.StringValue = dnsServers[0]; + if (dnsServers.Length > 1) + Dns2.InputSig.StringValue = dnsServers[1]; + + Mac1.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_MAC_ADDRESS, 0); + NetMask1.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_MASK, 0); + + // Interface 1 + + if (InitialParametersClass.NumberOfEthernetInterfaces > 1) // Only get these values if the processor has more than 1 NIC + { + Ip2.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, 1); + Mac2.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_MAC_ADDRESS, 1); + NetMask2.InputSig.StringValue = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_MASK, 1); + } + } + + protected void GetProcessorInfo() + { + + Firmware = FusionRoom.CreateOffsetStringSig(61, "Info - Processor - Firmware", eSigIoMask.InputSigOnly); + + if (CrestronEnvironment.DevicePlatform != eDevicePlatform.Server) + { + for (int i = 0; i < Global.ControlSystem.NumProgramsSupported; i++) + { + var join = 62 + i; + var progNum = i + 1; + Program[i] = FusionRoom.CreateOffsetStringSig((uint)join, string.Format("Info - Processor - Program {0}", progNum), eSigIoMask.InputSigOnly); + } + } + + Firmware.InputSig.StringValue = InitialParametersClass.FirmwareVersion; + + } + + void GetTouchpanelInfo() + { + // TODO Get IP and Project Name from TP + } + + protected void FusionRoom_OnlineStatusChange(GenericBase currentDevice, OnlineOfflineEventArgs args) + { + if (args.DeviceOnLine) + { + CrestronEnvironment.Sleep(200); + + // Send Push Notification Action request: + + string requestID = "InitialPushRequest"; + + + string actionRequest = + string.Format("\n{0}\n", requestID) + + "RegisterPushModel\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n"; + + Debug.Console(2, this, "Sending Fusion ActionRequest: \n{0}", actionRequest); + + FusionRoom.ExtenderFusionRoomDataReservedSigs.ActionQuery.StringValue = actionRequest; + + + // Request current Fusion Server Time + RequestLocalDateTime(null); + + // Setup timer to request time daily + if (DailyTimeRequestTimer != null && !DailyTimeRequestTimer.Disposed) + { + DailyTimeRequestTimer.Stop(); + DailyTimeRequestTimer.Dispose(); + } + + DailyTimeRequestTimer = new CTimer(RequestLocalDateTime, null, 86400000, 86400000); + + DailyTimeRequestTimer.Reset(86400000, 86400000); + } + + } + + /// + /// Requests the local date and time from the Fusion Server + /// + /// + public void RequestLocalDateTime(object callbackObject) + { + string timeRequestID = "TimeRequest"; + + string timeRequest = string.Format("{0}", timeRequestID); + + FusionRoom.ExtenderFusionRoomDataReservedSigs.LocalDateTimeQuery.StringValue = timeRequest; + } + + /// + /// Generates a room schedule request for this room for the next 24 hours. + /// + /// string identifying this request. Used with a corresponding ScheduleResponse value + public void RequestFullRoomSchedule(object callbackObject) + { + DateTime now = DateTime.Today; + + string currentTime = now.ToString("s"); + + string requestTest = + string.Format("FullSchedleRequest{0}{1}24", RoomGuid, currentTime); + + Debug.Console(2, this, "Sending Fusion ScheduleQuery: \n{0}", requestTest); + + FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.ScheduleQuery.StringValue = requestTest; + + if (IsRegisteredForSchedulePushNotifications) + PushNotificationTimer.Stop(); + } + + /// + /// Wrapper method to allow console commands to modify the current meeting end time + /// + /// meetingID extendTime + public void ModifyMeetingEndTimeConsoleHelper(string command) + { + string requestID; + string meetingID = null; + int extendMinutes = -1; + + requestID = "ModifyMeetingTest12345"; + + try + { + var tokens = command.Split(' '); + + meetingID = tokens[0]; + extendMinutes = Int32.Parse(tokens[1]); + + } + catch (Exception e) + { + Debug.Console(1, this, "Error parsing console command: {0}", e); + } + + ModifyMeetingEndTime(requestID, extendMinutes); + + } + + /// + /// Ends or Extends the current meeting by the specified number of minutes. + /// + /// Number of minutes to extend the meeting. A value of 0 will end the meeting. + public void ModifyMeetingEndTime(string requestID, int extendMinutes) + { + if(CurrentMeeting == null) + { + Debug.Console(1, this, "No meeting in progress. Unable to modify end time."); + return; + } + + if (extendMinutes > -1) + { + if(extendMinutes > 0) + { + var extendTime = CurrentMeeting.dtEnd - DateTime.Now; + double extendMinutesRaw = extendTime.TotalMinutes; + + extendMinutes = extendMinutes + (int)Math.Round(extendMinutesRaw); + } + + + string requestTest = string.Format( + "{0}{1}MeetingChange" + , requestID, RoomGuid, CurrentMeeting.MeetingID, extendMinutes); + + Debug.Console(1, this, "Sending MeetingChange Request: \n{0}", requestTest); + + FusionRoom.ExtenderFusionRoomDataReservedSigs.ActionQuery.StringValue = requestTest; + } + else + { + Debug.Console(1, this, "Invalid time specified"); + } + + + } + + /// + /// Creates and Ad Hoc meeting with a duration of 1 hour, or until the next meeting if in less than 1 hour. + /// + public void CreateAsHocMeeting(string command) + { + string requestID = "CreateAdHocMeeting"; + + DateTime now = DateTime.Now.AddMinutes(1); + + now.AddSeconds(-now.Second); + + // Assume 1 hour meeting if possible + DateTime dtEnd = now.AddHours(1); + + // Check if room is available for 1 hour before next meeting + if (NextMeeting != null) + { + var roomAvailable = NextMeeting.dtEnd.Subtract(dtEnd); + + if (roomAvailable.TotalMinutes < 60) + { + /// Room not available for full hour, book until next meeting starts + dtEnd = NextMeeting.dtEnd; + } + } + + string createMeetingRequest = + "" + + string.Format("{0}", requestID) + + string.Format("{0}", RoomGuid) + + "" + + string.Format("{0}", now.ToString("s")) + + string.Format("{0}", dtEnd.ToString("s")) + + "AdHoc Meeting" + + "Room User" + + "Example Message" + + "" + + ""; + + Debug.Console(2, this, "Sending CreateMeeting Request: \n{0}", createMeetingRequest); + + FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.CreateMeeting.StringValue = createMeetingRequest; + + //Debug.Console(1, this, "Sending CreateMeeting Request: \n{0}", command); + + //FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.CreateMeeting.StringValue = command; + + } + + /// + /// Event handler method for Device Extender sig changes + /// + /// + /// + protected void ExtenderFusionRoomDataReservedSigs_DeviceExtenderSigChange(DeviceExtender currentDeviceExtender, SigEventArgs args) + { + Debug.Console(2, this, "Event: {0}\n Sig: {1}\nFusionResponse:\n{2}", args.Event, args.Sig.Name, args.Sig.StringValue); + + + if (args.Sig == FusionRoom.ExtenderFusionRoomDataReservedSigs.ActionQueryResponse) + { + try + { + XmlDocument message = new XmlDocument(); + + message.LoadXml(args.Sig.StringValue); + + var actionResponse = message["ActionResponse"]; + + if (actionResponse != null) + { + var requestID = actionResponse["RequestID"]; + + if (requestID.InnerText == "InitialPushRequest") + { + if (actionResponse["ActionID"].InnerText == "RegisterPushModel") + { + var parameters = actionResponse["Parameters"]; + + foreach (XmlElement parameter in parameters) + { + if (parameter.HasAttributes) + { + var attributes = parameter.Attributes; + + if (attributes["ID"].Value == "Registered") + { + var isRegistered = Int32.Parse(attributes["Value"].Value); + + if (isRegistered == 1) + { + IsRegisteredForSchedulePushNotifications = true; + + if (PollTimer != null && !PollTimer.Disposed) + { + PollTimer.Stop(); + PollTimer.Dispose(); + } + + PushNotificationTimer = new CTimer(RequestFullRoomSchedule, null, PushNotificationTimeout, PushNotificationTimeout); + + PushNotificationTimer.Reset(PushNotificationTimeout, PushNotificationTimeout); + } + else if (isRegistered == 0) + { + IsRegisteredForSchedulePushNotifications = false; + + if (PushNotificationTimer != null && !PushNotificationTimer.Disposed) + { + PushNotificationTimer.Stop(); + PushNotificationTimer.Dispose(); + } + + PollTimer = new CTimer(RequestFullRoomSchedule, null, SchedulePollInterval, SchedulePollInterval); + + PollTimer.Reset(SchedulePollInterval, SchedulePollInterval); + } + } + } + } + } + } + } + } + catch (Exception e) + { + Debug.Console(1, this, "Error parsing ActionQueryResponse: {0}", e); + } + } + else if (args.Sig == FusionRoom.ExtenderFusionRoomDataReservedSigs.LocalDateTimeQueryResponse) + { + try + { + XmlDocument message = new XmlDocument(); + + message.LoadXml(args.Sig.StringValue); + + var localDateTimeResponse = message["LocalTimeResponse"]; + + if (localDateTimeResponse != null) + { + var localDateTime = localDateTimeResponse["LocalDateTime"]; + + if (localDateTime != null) + { + var tempLocalDateTime = localDateTime.InnerText; + + DateTime currentTime = DateTime.Parse(tempLocalDateTime); + + Debug.Console(1, this, "DateTime from Fusion Server: {0}", currentTime); + + // Parse time and date from response and insert values + CrestronEnvironment.SetTimeAndDate((ushort)currentTime.Hour, (ushort)currentTime.Minute, (ushort)currentTime.Second, (ushort)currentTime.Month, (ushort)currentTime.Day, (ushort)currentTime.Year); + + Debug.Console(1, this, "Processor time set to {0}", CrestronEnvironment.GetLocalTime()); + } + } + } + catch (Exception e) + { + Debug.Console(1, this, "Error parsing LocalDateTimeQueryResponse: {0}", e); + } + } + } + + /// + /// Event handler method for Device Extender sig changes + /// + /// + /// + protected void FusionRoomSchedule_DeviceExtenderSigChange(DeviceExtender currentDeviceExtender, SigEventArgs args) + { + Debug.Console(2, this, "Scehdule Response Event: {0}\n Sig: {1}\nFusionResponse:\n{2}", args.Event, args.Sig.Name, args.Sig.StringValue); + + + if (args.Sig == FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.ScheduleResponse) + { + try + { + ScheduleResponse scheduleResponse = new ScheduleResponse(); + + XmlDocument message = new XmlDocument(); + + message.LoadXml(args.Sig.StringValue); + + var response = message["ScheduleResponse"]; + + if (response != null) + { + // Check for push notification + if (response["RequestID"].InnerText == "RVRequest") + { + var action = response["Action"]; + + if (action.OuterXml.IndexOf("RequestSchedule") > -1) + { + PushNotificationTimer.Reset(PushNotificationTimeout, PushNotificationTimeout); + } + } + else // Not a push notification + { + CurrentSchedule = new RoomSchedule(); // Clear Current Schedule + CurrentMeeting = null; // Clear Current Meeting + NextMeeting = null; // Clear Next Meeting + + bool isNextMeeting = false; + + foreach (XmlElement element in message.FirstChild.ChildNodes) + { + if (element.Name == "RequestID") + { + scheduleResponse.RequestID = element.InnerText; + } + else if (element.Name == "RoomID") + { + scheduleResponse.RoomID = element.InnerText; + } + else if (element.Name == "RoomName") + { + scheduleResponse.RoomName = element.InnerText; + } + else if (element.Name == "Event") + { + Debug.Console(2, this, "Event Found:\n{0}", element.OuterXml); + + XmlReader reader = new XmlReader(element.OuterXml); + + Event tempEvent = new Event(); + + tempEvent = CrestronXMLSerialization.DeSerializeObject(reader); + + scheduleResponse.Events.Add(tempEvent); + + // Check is this is the current event + if (tempEvent.dtStart <= DateTime.Now && tempEvent.dtEnd >= DateTime.Now) + { + CurrentMeeting = tempEvent; // Set Current Meeting + isNextMeeting = true; // Flag that next element is next meeting + } + + if (isNextMeeting) + { + NextMeeting = tempEvent; // Set Next Meeting + isNextMeeting = false; + } + + CurrentSchedule.Meetings.Add(tempEvent); + } + + } + + PrintTodaysSchedule(); + + if (!IsRegisteredForSchedulePushNotifications) + PollTimer.Reset(SchedulePollInterval, SchedulePollInterval); + + // Fire Schedule Change Event + var handler = ScheduleChange; + + if (handler != null) + { + handler(this, new ScheduleChangeEventArgs() { Schedule = CurrentSchedule }); + } + + } + } + + + + } + catch (Exception e) + { + Debug.Console(1, this, "Error parsing ScheduleResponse: {0}", e); + } + } + else if (args.Sig == FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.CreateResponse) + { + Debug.Console(2, this, "Create Meeting Response Event: {0}\n Sig: {1}\nFusionResponse:\n{2}", args.Event, args.Sig.Name, args.Sig.StringValue); + } + + } + + /// + /// Prints today's schedule to console for debugging + /// + void PrintTodaysSchedule() + { + if (Debug.Level > 1) + { + if (CurrentSchedule.Meetings.Count > 0) + { + Debug.Console(1, this, "Today's Schedule for '{0}'\n", Room.Name); + + foreach (Event e in CurrentSchedule.Meetings) + { + Debug.Console(1, this, "Subject: {0}", e.Subject); + Debug.Console(1, this, "Organizer: {0}", e.Organizer); + Debug.Console(1, this, "MeetingID: {0}", e.MeetingID); + Debug.Console(1, this, "Start Time: {0}", e.dtStart); + Debug.Console(1, this, "End Time: {0}", e.dtEnd); + Debug.Console(1, this, "Duration: {0}\n", e.DurationInMinutes); + } + } + } + } + + protected virtual void SetUpSources() + { + // Sources + var dict = ConfigReader.ConfigObject.GetSourceListForKey((Room as EssentialsHuddleSpaceRoom).SourceListKey); + if (dict != null) + { + // NEW PROCESS: + // Make these lists and insert the fusion attributes by iterating these + var setTopBoxes = dict.Where(d => d.Value.SourceDevice is ISetTopBoxControls); + uint i = 1; + foreach (var kvp in setTopBoxes) + { + TryAddRouteActionSigs("Display 1 - Source TV " + i, 188 + i, kvp.Key, kvp.Value.SourceDevice); + i++; + if (i > 5) // We only have five spots + break; + } + + var discPlayers = dict.Where(d => d.Value.SourceDevice is IDiscPlayerControls); + i = 1; + foreach (var kvp in discPlayers) + { + TryAddRouteActionSigs("Display 1 - Source DVD " + i, 181 + i, kvp.Key, kvp.Value.SourceDevice); + i++; + if (i > 5) // We only have five spots + break; + } + + var laptops = dict.Where(d => d.Value.SourceDevice is Laptop); + i = 1; + foreach (var kvp in laptops) + { + TryAddRouteActionSigs("Display 1 - Source Laptop " + i, 166 + i, kvp.Key, kvp.Value.SourceDevice); + i++; + if (i > 10) // We only have ten spots??? + break; + } + + foreach (var kvp in dict) + { + var usageDevice = kvp.Value.SourceDevice as IUsageTracking; + + if (usageDevice != null) + { + usageDevice.UsageTracker = new UsageTracking(usageDevice as Device); + usageDevice.UsageTracker.UsageIsTracked = true; + usageDevice.UsageTracker.DeviceUsageEnded += new EventHandler(UsageTracker_DeviceUsageEnded); + } + } + + } + else + { + Debug.Console(1, this, "WARNING: Config source list '{0}' not found for room '{1}'", + (Room as EssentialsHuddleSpaceRoom).SourceListKey, Room.Key); + } + } + + /// + /// Collects usage data from source and sends to Fusion + /// + /// + /// + protected void UsageTracker_DeviceUsageEnded(object sender, DeviceUsageEventArgs e) + { + var deviceTracker = sender as UsageTracking; + + var configDevice = ConfigReader.ConfigObject.Devices.Where(d => d.Key.Equals(deviceTracker.Parent)); + + string group = ConfigReader.GetGroupForDeviceKey(deviceTracker.Parent.Key); + + string currentMeetingId = "-"; + + if (CurrentMeeting != null) + currentMeetingId = CurrentMeeting.MeetingID; + + //String Format: "USAGE||[Date YYYY-MM-DD]||[Time HH-mm-ss]||TIME||[Asset_Type]||[Asset_Name]||[Minutes_used]||[Asset_ID]||[Meeting_ID]" + // [Asset_ID] property does not appear to be used in Crestron SSI examples. They are sending "-" instead so that's what is replicated here + string deviceUsage = string.Format("USAGE||{0}||{1}||TIME||{2}||{3}||-||{4}||-||{5}||{6}||\r\n", e.UsageEndTime.ToString("yyyy-MM-dd"), e.UsageEndTime.ToString("HH:mm:ss"), + group, deviceTracker.Parent.Name, e.MinutesUsed, "-", currentMeetingId); + + Debug.Console(1, this, "Device usage for: {0} ended at {1}. In use for {2} minutes", deviceTracker.Parent.Name, e.UsageEndTime, e.MinutesUsed); + + FusionRoom.DeviceUsage.InputSig.StringValue = deviceUsage; + + Debug.Console(1, this, "Device usage string: {0}", deviceUsage); + } + + + protected void TryAddRouteActionSigs(string attrName, uint attrNum, string routeKey, Device pSrc) + { + Debug.Console(2, this, "Creating attribute '{0}' with join {1} for source {2}", + attrName, attrNum, pSrc.Key); + try + { + 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.SetSigFalseAction(() => (Room as EssentialsHuddleSpaceRoom).RunRouteAction(routeKey)); + } + catch (Exception) + { + Debug.Console(2, this, "Error creating Fusion signal {0} {1} for device '{2}'. THIS NEEDS REWORKING", attrNum, attrName, pSrc.Key); + } + } + + /// + /// + /// + void SetUpCommunitcationMonitors() + { + uint displayNum = 0; + uint touchpanelNum = 0; + uint xpanelNum = 0; + + // 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; + + string attrName = null; + uint attrNum = 1; + + //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; + //} + //uint attrNum = Convert.ToUInt32(keyNum); + + // Check for UI devices + var uiDev = dev as EssentialsTouchpanelController; + if (uiDev != null) + { + if (uiDev.Panel is Crestron.SimplSharpPro.UI.XpanelForSmartGraphics) + { + attrNum = attrNum + touchpanelNum; + + if (attrNum > 10) + continue; + attrName = "Online - XPanel " + attrNum; + attrNum += 160; + + touchpanelNum++; + } + else + { + attrNum = attrNum + xpanelNum; + + if (attrNum > 10) + continue; + attrName = "Online - Touch Panel " + attrNum; + attrNum += 150; + + xpanelNum++; + } + } + + //else + if (dev is DisplayBase) + { + attrNum = attrNum + displayNum; + if (attrNum > 10) + continue; + attrName = "Online - Display " + attrNum; + attrNum += 170; + + displayNum++; + } + //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); + } + } + } + + protected virtual void SetUpDisplay() + { + try + { + //Setup Display Usage Monitoring + + var displays = DeviceManager.AllDevices.Where(d => d is DisplayBase); + + // Consider updating this in multiple display systems + + foreach (DisplayBase display in displays) + { + display.UsageTracker = new UsageTracking(display); + display.UsageTracker.UsageIsTracked = true; + display.UsageTracker.DeviceUsageEnded += new EventHandler(UsageTracker_DeviceUsageEnded); + } + + var defaultDisplay = (Room as EssentialsHuddleSpaceRoom).DefaultDisplay as DisplayBase; + if (defaultDisplay == null) + { + Debug.Console(1, this, "Cannot link null display to Fusion because default display is null"); + return; + } + + var dispPowerOnAction = new Action(b => { if (!b) defaultDisplay.PowerOn(); }); + var dispPowerOffAction = new Action(b => { if (!b) defaultDisplay.PowerOff(); }); + + // Display to fusion room sigs + FusionRoom.DisplayPowerOn.OutputSig.UserObject = dispPowerOnAction; + FusionRoom.DisplayPowerOff.OutputSig.UserObject = dispPowerOffAction; + defaultDisplay.PowerIsOnFeedback.LinkInputSig(FusionRoom.DisplayPowerOn.InputSig); + if (defaultDisplay is IDisplayUsage) + (defaultDisplay as IDisplayUsage).LampHours.LinkInputSig(FusionRoom.DisplayUsage.InputSig); + + + + MapDisplayToRoomJoins(1, 158, defaultDisplay); + + + var deviceConfig = ConfigReader.ConfigObject.Devices.FirstOrDefault(d => d.Key.Equals(defaultDisplay.Key)); + + //Check for existing asset in GUIDs collection + + var tempAsset = new FusionAsset(); + + if (FusionStaticAssets.ContainsKey(deviceConfig.Uid)) + { + tempAsset = FusionStaticAssets[deviceConfig.Uid]; + } + else + { + // Create a new asset + tempAsset = new FusionAsset(FusionRoomGuids.GetNextAvailableAssetNumber(FusionRoom), defaultDisplay.Name, "Display", ""); + FusionStaticAssets.Add(deviceConfig.Uid, tempAsset); + } + + var dispAsset = FusionRoom.CreateStaticAsset(tempAsset.SlotNumber, tempAsset.Name, "Display", tempAsset.InstanceId); + dispAsset.PowerOn.OutputSig.UserObject = dispPowerOnAction; + dispAsset.PowerOff.OutputSig.UserObject = dispPowerOffAction; + defaultDisplay.PowerIsOnFeedback.LinkInputSig(dispAsset.PowerOn.InputSig); + // NO!! display.PowerIsOn.LinkComplementInputSig(dispAsset.PowerOff.InputSig); + // Use extension methods + dispAsset.TrySetMakeModel(defaultDisplay); + dispAsset.TryLinkAssetErrorToCommunication(defaultDisplay); + } + catch (Exception e) + { + Debug.Console(1, this, "Error setting up display in Fusion: {0}", e); + } + + } + + /// + /// Maps room attributes to a display at a specified index + /// + /// + /// a + protected virtual void MapDisplayToRoomJoins(int displayIndex, int joinOffset, DisplayBase display) + { + string displayName = string.Format("Display {0} - ", displayIndex); + + + if (display == (Room as EssentialsHuddleSpaceRoom).DefaultDisplay) + { + // Display volume + var defaultDisplayVolume = FusionRoom.CreateOffsetUshortSig(50, "Volume - Fader01", eSigIoMask.InputOutputSig); + defaultDisplayVolume.OutputSig.UserObject = new Action(b => (display as IBasicVolumeWithFeedback).SetVolume(b)); + (display as IBasicVolumeWithFeedback).VolumeLevelFeedback.LinkInputSig(defaultDisplayVolume.InputSig); + + // Power on + var defaultDisplayPowerOn = FusionRoom.CreateOffsetBoolSig((uint)joinOffset, displayName + "Power On", eSigIoMask.InputOutputSig); + defaultDisplayPowerOn.OutputSig.UserObject = new Action(b => { if (!b) display.PowerOn(); }); + display.PowerIsOnFeedback.LinkInputSig(defaultDisplayPowerOn.InputSig); + + // Power Off + var defaultDisplayPowerOff = FusionRoom.CreateOffsetBoolSig((uint)joinOffset + 1, displayName + "Power Off", eSigIoMask.InputOutputSig); + defaultDisplayPowerOn.OutputSig.UserObject = new Action(b => { if (!b) display.PowerOff(); }); ; + display.PowerIsOnFeedback.LinkInputSig(defaultDisplayPowerOn.InputSig); + + // Current Source + var defaultDisplaySourceNone = FusionRoom.CreateOffsetBoolSig((uint)joinOffset + 8, displayName + "Source None", eSigIoMask.InputOutputSig); + defaultDisplaySourceNone.OutputSig.UserObject = new Action(b => { if (!b) (Room as EssentialsHuddleSpaceRoom).RunRouteAction("roomOff"); }); ; + } + } + + void SetUpError() + { + // 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; + }; + + } + + /// + /// Sets up a local occupancy sensor, such as one attached to a Fusion Scheduling panel. The occupancy status of the room will be read from Fusion + /// + void SetUpLocalOccupancy() + { + RoomIsOccupiedFeedback = new BoolFeedback(RoomIsOccupiedFeedbackFunc); + + FusionRoom.FusionAssetStateChange += new FusionAssetStateEventHandler(FusionRoom_FusionAssetStateChange); + + // Build Occupancy Asset? + // Link sigs? + + //Room.SetRoomOccupancy(this as IOccupancyStatusProvider, 0); + + + } + + void FusionRoom_FusionAssetStateChange(FusionBase device, FusionAssetStateEventArgs args) + { + if (args.EventId == FusionAssetEventId.RoomOccupiedReceivedEventId || args.EventId == FusionAssetEventId.RoomUnoccupiedReceivedEventId) + RoomIsOccupiedFeedback.FireUpdate(); + + } + + /// + /// Sets up remote occupancy that will relay the occupancy status determined by local system devices to Fusion + /// + void SetUpRemoteOccupancy() + { + + // Need to have the room occupancy object first and somehow determine the slot number of the Occupancy asset but will not be able to use the UID from config likely. + // Consider defining an object just for Room Occupancy (either eAssetType.Occupancy Sensor (local) or eAssetType.RemoteOccupancySensor (from Fusion sched. panel)) and reserving slot 4 for that asset (statics would start at 5) + + //if (Room.OccupancyObj != null) + //{ + + var tempOccAsset = GUIDs.OccupancyAsset; + + if(tempOccAsset == null) + { + FusionOccSensor = new FusionOccupancySensorAsset(eAssetType.OccupancySensor); + tempOccAsset = FusionOccSensor; + } + + var occSensorAsset = FusionRoom.CreateOccupancySensorAsset(tempOccAsset.SlotNumber, tempOccAsset.Name, "Occupancy Sensor", tempOccAsset.InstanceId); + + occSensorAsset.RoomOccupied.AddSigToRVIFile = true; + + var occSensorShutdownMinutes = FusionRoom.CreateOffsetUshortSig(70, "Occ Shutdown - Minutes", eSigIoMask.InputOutputSig); + + // Tie to method on occupancy object + //occSensorShutdownMinutes.OutputSig.UserObject(new Action(ushort)(b => Room.OccupancyObj.SetShutdownMinutes(b)); + + + Room.RoomOccupancy.RoomIsOccupiedFeedback.LinkInputSig(occSensorAsset.RoomOccupied.InputSig); + //} + } + + /// + /// 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, @"\b(\d+)"); + if (!capture.Success) + return -1; + else return Convert.ToInt32(capture.Groups[1].Value); + } + + /// + /// Event handler for when room source changes + /// + protected void Room_CurrentSourceInfoChange(EssentialsRoomBase room, SourceListItem info, ChangeType type) + { + // Handle null. Nothing to do when switching from or to null + if (info == null || info.SourceDevice == null) + return; + + var dev = info.SourceDevice; + if (type == ChangeType.WillChange) + { + if (SourceToFeedbackSigs.ContainsKey(dev)) + SourceToFeedbackSigs[dev].BoolValue = false; + } + else + { + if (SourceToFeedbackSigs.ContainsKey(dev)) + SourceToFeedbackSigs[dev].BoolValue = true; + var name = (room == null ? "" : room.Name); + CurrentRoomSourceNameSig.InputSig.StringValue = info.SourceDevice.Name; + } + } + + protected 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) + { + Debug.Console(0, "Adding Fusion Static Asset '{0}' to slot {1} with GUID: '{2}'", name, number, instanceId); + + fr.AddAsset(eAssetType.StaticAsset, number, name, type, instanceId); + return fr.UserConfigurableAssetDetails[number].Asset as FusionStaticAsset; + } + + public static FusionOccupancySensor CreateOccupancySensorAsset(this FusionRoom fr, uint number, string name, string type, string instanceId) + { + Debug.Console(0, "Adding Fusion Occupancy Sensor Asset '{0}' to slot {1} with GUID: '{2}'", name, number, instanceId); + + fr.AddAsset(eAssetType.OccupancySensor, number, name, type, instanceId); + return fr.UserConfigurableAssetDetails[number].Asset as FusionOccupancySensor; + } + } + + //************************************************************************************************ + /// + /// 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/PepperDashEssentials/OTHER/Fusion/EssentialsHuddleVtc1FusionController.cs b/PepperDashEssentials/OTHER/Fusion/EssentialsHuddleVtc1FusionController.cs similarity index 97% rename from Essentials/PepperDashEssentials/OTHER/Fusion/EssentialsHuddleVtc1FusionController.cs rename to PepperDashEssentials/OTHER/Fusion/EssentialsHuddleVtc1FusionController.cs index ac72c76f..214e3537 100644 --- a/Essentials/PepperDashEssentials/OTHER/Fusion/EssentialsHuddleVtc1FusionController.cs +++ b/PepperDashEssentials/OTHER/Fusion/EssentialsHuddleVtc1FusionController.cs @@ -1,354 +1,354 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -using Crestron.SimplSharp; -using Crestron.SimplSharp.CrestronIO; -using Crestron.SimplSharpPro; -using Crestron.SimplSharpPro.DeviceSupport; -using Crestron.SimplSharpPro.Fusion; - - -using PepperDash.Core; -using PepperDash.Essentials; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Devices.Common; -using PepperDash.Essentials.Devices.Common.Occupancy; - -namespace PepperDash.Essentials.Fusion -{ - public class EssentialsHuddleVtc1FusionController : EssentialsHuddleSpaceFusionSystemControllerBase - { - BooleanSigData CodecIsInCall; - - public EssentialsHuddleVtc1FusionController(EssentialsHuddleVtc1Room room, uint ipId) - : base(room, ipId) - { - - } - - /// - /// Called in base class constructor before RVI and GUID files are built - /// - protected override void ExecuteCustomSteps() - { - SetUpCodec(); - } - - /// - /// Creates a static asset for the codec and maps the joins to the main room symbol - /// - void SetUpCodec() - { - try - { - var codec = (Room as EssentialsHuddleVtc1Room).VideoCodec; - - if (codec == null) - { - Debug.Console(1, this, "Cannot link codec to Fusion because codec is null"); - return; - } - - codec.UsageTracker = new UsageTracking(codec); - codec.UsageTracker.UsageIsTracked = true; - codec.UsageTracker.DeviceUsageEnded += UsageTracker_DeviceUsageEnded; - - var codecPowerOnAction = new Action(b => { if (!b) codec.StandbyDeactivate(); }); - var codecPowerOffAction = new Action(b => { if (!b) codec.StandbyActivate(); }); - - // Map FusionRoom Attributes: - - // Codec volume - var codecVolume = FusionRoom.CreateOffsetUshortSig(50, "Volume - Fader01", eSigIoMask.InputOutputSig); - codecVolume.OutputSig.UserObject = new Action(b => (codec as IBasicVolumeWithFeedback).SetVolume(b)); - (codec as IBasicVolumeWithFeedback).VolumeLevelFeedback.LinkInputSig(codecVolume.InputSig); - - // In Call Status - CodecIsInCall = FusionRoom.CreateOffsetBoolSig(69, "Conf - VC 1 In Call", eSigIoMask.InputSigOnly); - codec.CallStatusChange += new EventHandler(codec_CallStatusChange); - - // Online status - if (codec is ICommunicationMonitor) - { - var c = codec as ICommunicationMonitor; - var codecOnline = FusionRoom.CreateOffsetBoolSig(122, "Online - VC 1", eSigIoMask.InputSigOnly); - codecOnline.InputSig.BoolValue = c.CommunicationMonitor.Status == MonitorStatus.IsOk; - c.CommunicationMonitor.StatusChange += (o, a) => - { - codecOnline.InputSig.BoolValue = a.Status == MonitorStatus.IsOk; - }; - Debug.Console(0, this, "Linking '{0}' communication monitor to Fusion '{1}'", codec.Key, "Online - VC 1"); - } - - // Codec IP Address - bool codecHasIpInfo = false; - var codecComm = codec.Communication; - - string codecIpAddress = string.Empty; - int codecIpPort = 0; - - StringSigData codecIpAddressSig; - StringSigData codecIpPortSig; - - if(codecComm is GenericSshClient) - { - codecIpAddress = (codecComm as GenericSshClient).Hostname; - codecIpPort = (codecComm as GenericSshClient).Port; - codecHasIpInfo = true; - } - else if (codecComm is GenericTcpIpClient) - { - codecIpAddress = (codecComm as GenericTcpIpClient).Hostname; - codecIpPort = (codecComm as GenericTcpIpClient).Port; - codecHasIpInfo = true; - } - - if (codecHasIpInfo) - { - codecIpAddressSig = FusionRoom.CreateOffsetStringSig(121, "IP Address - VC", eSigIoMask.InputSigOnly); - codecIpAddressSig.InputSig.StringValue = codecIpAddress; - - codecIpPortSig = FusionRoom.CreateOffsetStringSig(150, "IP Port - VC", eSigIoMask.InputSigOnly); - codecIpPortSig.InputSig.StringValue = codecIpPort.ToString(); - } - - var tempAsset = new FusionAsset(); - - var deviceConfig = ConfigReader.ConfigObject.Devices.FirstOrDefault(c => c.Key.Equals(codec.Key)); - - if (FusionStaticAssets.ContainsKey(deviceConfig.Uid)) - { - tempAsset = FusionStaticAssets[deviceConfig.Uid]; - } - else - { - // Create a new asset - tempAsset = new FusionAsset(FusionRoomGuids.GetNextAvailableAssetNumber(FusionRoom), codec.Name, "Codec", ""); - FusionStaticAssets.Add(deviceConfig.Uid, tempAsset); - } - - var codecAsset = FusionRoom.CreateStaticAsset(tempAsset.SlotNumber, tempAsset.Name, "Display", tempAsset.InstanceId); - codecAsset.PowerOn.OutputSig.UserObject = codecPowerOnAction; - codecAsset.PowerOff.OutputSig.UserObject = codecPowerOffAction; - codec.StandbyIsOnFeedback.LinkComplementInputSig(codecAsset.PowerOn.InputSig); - - // TODO: Map relevant attributes on asset symbol - - codecAsset.TrySetMakeModel(codec); - codecAsset.TryLinkAssetErrorToCommunication(codec); - } - catch (Exception e) - { - Debug.Console(1, this, "Error setting up codec in Fusion: {0}", e); - } - } - - void codec_CallStatusChange(object sender, PepperDash.Essentials.Devices.Common.Codec.CodecCallStatusItemChangeEventArgs e) - { - var codec = (Room as EssentialsHuddleVtc1Room).VideoCodec; - - CodecIsInCall.InputSig.BoolValue = codec.IsInCall; - } - - // These methods are overridden because they access the room class which is of a different type - - protected override void CreateSymbolAndBasicSigs(uint ipId) - { - Debug.Console(1, this, "Creating Fusion Room symbol with GUID: {0}", RoomGuid); - - FusionRoom = new FusionRoom(ipId, Global.ControlSystem, Room.Name, RoomGuid); - FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.Use(); - FusionRoom.ExtenderFusionRoomDataReservedSigs.Use(); - - FusionRoom.Register(); - - FusionRoom.FusionStateChange += FusionRoom_FusionStateChange; - - FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.DeviceExtenderSigChange += FusionRoomSchedule_DeviceExtenderSigChange; - FusionRoom.ExtenderFusionRoomDataReservedSigs.DeviceExtenderSigChange += ExtenderFusionRoomDataReservedSigs_DeviceExtenderSigChange; - FusionRoom.OnlineStatusChange += FusionRoom_OnlineStatusChange; - - CrestronConsole.AddNewConsoleCommand(RequestFullRoomSchedule, "FusReqRoomSchedule", "Requests schedule of the room for the next 24 hours", ConsoleAccessLevelEnum.AccessOperator); - CrestronConsole.AddNewConsoleCommand(ModifyMeetingEndTimeConsoleHelper, "FusReqRoomSchMod", "Ends or extends a meeting by the specified time", ConsoleAccessLevelEnum.AccessOperator); - CrestronConsole.AddNewConsoleCommand(CreateAsHocMeeting, "FusCreateMeeting", "Creates and Ad Hoc meeting for on hour or until the next meeting", ConsoleAccessLevelEnum.AccessOperator); - - // Room to fusion room - Room.OnFeedback.LinkInputSig(FusionRoom.SystemPowerOn.InputSig); - - // Moved to - CurrentRoomSourceNameSig = FusionRoom.CreateOffsetStringSig(84, "Display 1 - Current Source", eSigIoMask.InputSigOnly); - // Don't think we need to get current status of this as nothing should be alive yet. - (Room as EssentialsHuddleVtc1Room).CurrentSingleSourceChange += Room_CurrentSourceInfoChange; - - - FusionRoom.SystemPowerOn.OutputSig.SetSigFalseAction((Room as EssentialsHuddleVtc1Room).PowerOnToDefaultOrLastSource); - FusionRoom.SystemPowerOff.OutputSig.SetSigFalseAction(() => (Room as EssentialsHuddleVtc1Room).RunRouteAction("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;"; - - GetProcessorEthernetValues(); - - GetSystemInfo(); - - GetProcessorInfo(); - - CrestronEnvironment.EthernetEventHandler += CrestronEnvironment_EthernetEventHandler; - } - - protected override void SetUpSources() - { - // Sources - var dict = ConfigReader.ConfigObject.GetSourceListForKey((Room as EssentialsHuddleVtc1Room).SourceListKey); - if (dict != null) - { - // NEW PROCESS: - // Make these lists and insert the fusion attributes by iterating these - var setTopBoxes = dict.Where(d => d.Value.SourceDevice is ISetTopBoxControls); - uint i = 1; - foreach (var kvp in setTopBoxes) - { - TryAddRouteActionSigs("Display 1 - Source TV " + i, 188 + i, kvp.Key, kvp.Value.SourceDevice); - i++; - if (i > 5) // We only have five spots - break; - } - - var discPlayers = dict.Where(d => d.Value.SourceDevice is IDiscPlayerControls); - i = 1; - foreach (var kvp in discPlayers) - { - TryAddRouteActionSigs("Display 1 - Source DVD " + i, 181 + i, kvp.Key, kvp.Value.SourceDevice); - i++; - if (i > 5) // We only have five spots - break; - } - - var laptops = dict.Where(d => d.Value.SourceDevice is Laptop); - i = 1; - foreach (var kvp in laptops) - { - TryAddRouteActionSigs("Display 1 - Source Laptop " + i, 166 + i, kvp.Key, kvp.Value.SourceDevice); - i++; - if (i > 10) // We only have ten spots??? - break; - } - - foreach (var kvp in dict) - { - var usageDevice = kvp.Value.SourceDevice as IUsageTracking; - - if (usageDevice != null) - { - usageDevice.UsageTracker = new UsageTracking(usageDevice as Device); - usageDevice.UsageTracker.UsageIsTracked = true; - usageDevice.UsageTracker.DeviceUsageEnded += new EventHandler(UsageTracker_DeviceUsageEnded); - } - } - - } - else - { - Debug.Console(1, this, "WARNING: Config source list '{0}' not found for room '{1}'", - (Room as EssentialsHuddleVtc1Room).SourceListKey, Room.Key); - } - } - - protected override void SetUpDisplay() - { - try - { - //Setup Display Usage Monitoring - - var displays = DeviceManager.AllDevices.Where(d => d is DisplayBase); - - // Consider updating this in multiple display systems - - foreach (DisplayBase display in displays) - { - display.UsageTracker = new UsageTracking(display); - display.UsageTracker.UsageIsTracked = true; - display.UsageTracker.DeviceUsageEnded += new EventHandler(UsageTracker_DeviceUsageEnded); - } - - var defaultDisplay = (Room as EssentialsHuddleVtc1Room).DefaultDisplay as DisplayBase; - if (defaultDisplay == null) - { - Debug.Console(1, this, "Cannot link null display to Fusion because default display is null"); - return; - } - - var dispPowerOnAction = new Action(b => { if (!b) defaultDisplay.PowerOn(); }); - var dispPowerOffAction = new Action(b => { if (!b) defaultDisplay.PowerOff(); }); - - // Display to fusion room sigs - FusionRoom.DisplayPowerOn.OutputSig.UserObject = dispPowerOnAction; - FusionRoom.DisplayPowerOff.OutputSig.UserObject = dispPowerOffAction; - defaultDisplay.PowerIsOnFeedback.LinkInputSig(FusionRoom.DisplayPowerOn.InputSig); - if (defaultDisplay is IDisplayUsage) - (defaultDisplay as IDisplayUsage).LampHours.LinkInputSig(FusionRoom.DisplayUsage.InputSig); - - - - MapDisplayToRoomJoins(1, 158, defaultDisplay); - - - var deviceConfig = ConfigReader.ConfigObject.Devices.FirstOrDefault(d => d.Key.Equals(defaultDisplay.Key)); - - //Check for existing asset in GUIDs collection - - var tempAsset = new FusionAsset(); - - if (FusionStaticAssets.ContainsKey(deviceConfig.Uid)) - { - tempAsset = FusionStaticAssets[deviceConfig.Uid]; - } - else - { - // Create a new asset - tempAsset = new FusionAsset(FusionRoomGuids.GetNextAvailableAssetNumber(FusionRoom), defaultDisplay.Name, "Display", ""); - FusionStaticAssets.Add(deviceConfig.Uid, tempAsset); - } - - var dispAsset = FusionRoom.CreateStaticAsset(tempAsset.SlotNumber, tempAsset.Name, "Display", tempAsset.InstanceId); - dispAsset.PowerOn.OutputSig.UserObject = dispPowerOnAction; - dispAsset.PowerOff.OutputSig.UserObject = dispPowerOffAction; - defaultDisplay.PowerIsOnFeedback.LinkInputSig(dispAsset.PowerOn.InputSig); - // NO!! display.PowerIsOn.LinkComplementInputSig(dispAsset.PowerOff.InputSig); - // Use extension methods - dispAsset.TrySetMakeModel(defaultDisplay); - dispAsset.TryLinkAssetErrorToCommunication(defaultDisplay); - } - catch (Exception e) - { - Debug.Console(1, this, "Error setting up display in Fusion: {0}", e); - } - - } - - protected override void MapDisplayToRoomJoins(int displayIndex, int joinOffset, DisplayBase display) - { - string displayName = string.Format("Display {0} - ", displayIndex); - - - if (display == (Room as EssentialsHuddleVtc1Room).DefaultDisplay) - { - // Power on - var defaultDisplayPowerOn = FusionRoom.CreateOffsetBoolSig((uint)joinOffset, displayName + "Power On", eSigIoMask.InputOutputSig); - defaultDisplayPowerOn.OutputSig.UserObject = new Action(b => { if (!b) display.PowerOn(); }); - display.PowerIsOnFeedback.LinkInputSig(defaultDisplayPowerOn.InputSig); - - // Power Off - var defaultDisplayPowerOff = FusionRoom.CreateOffsetBoolSig((uint)joinOffset + 1, displayName + "Power Off", eSigIoMask.InputOutputSig); - defaultDisplayPowerOn.OutputSig.UserObject = new Action(b => { if (!b) display.PowerOff(); }); ; - display.PowerIsOnFeedback.LinkInputSig(defaultDisplayPowerOn.InputSig); - - // Current Source - var defaultDisplaySourceNone = FusionRoom.CreateOffsetBoolSig((uint)joinOffset + 8, displayName + "Source None", eSigIoMask.InputOutputSig); - defaultDisplaySourceNone.OutputSig.UserObject = new Action(b => { if (!b) (Room as EssentialsHuddleVtc1Room).RunRouteAction("roomOff"); }); ; - } - } - } +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronIO; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.DeviceSupport; +using Crestron.SimplSharpPro.Fusion; + + +using PepperDash.Core; +using PepperDash.Essentials; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Devices.Common; +using PepperDash.Essentials.Devices.Common.Occupancy; + +namespace PepperDash.Essentials.Fusion +{ + public class EssentialsHuddleVtc1FusionController : EssentialsHuddleSpaceFusionSystemControllerBase + { + BooleanSigData CodecIsInCall; + + public EssentialsHuddleVtc1FusionController(EssentialsHuddleVtc1Room room, uint ipId) + : base(room, ipId) + { + + } + + /// + /// Called in base class constructor before RVI and GUID files are built + /// + protected override void ExecuteCustomSteps() + { + SetUpCodec(); + } + + /// + /// Creates a static asset for the codec and maps the joins to the main room symbol + /// + void SetUpCodec() + { + try + { + var codec = (Room as EssentialsHuddleVtc1Room).VideoCodec; + + if (codec == null) + { + Debug.Console(1, this, "Cannot link codec to Fusion because codec is null"); + return; + } + + codec.UsageTracker = new UsageTracking(codec); + codec.UsageTracker.UsageIsTracked = true; + codec.UsageTracker.DeviceUsageEnded += UsageTracker_DeviceUsageEnded; + + var codecPowerOnAction = new Action(b => { if (!b) codec.StandbyDeactivate(); }); + var codecPowerOffAction = new Action(b => { if (!b) codec.StandbyActivate(); }); + + // Map FusionRoom Attributes: + + // Codec volume + var codecVolume = FusionRoom.CreateOffsetUshortSig(50, "Volume - Fader01", eSigIoMask.InputOutputSig); + codecVolume.OutputSig.UserObject = new Action(b => (codec as IBasicVolumeWithFeedback).SetVolume(b)); + (codec as IBasicVolumeWithFeedback).VolumeLevelFeedback.LinkInputSig(codecVolume.InputSig); + + // In Call Status + CodecIsInCall = FusionRoom.CreateOffsetBoolSig(69, "Conf - VC 1 In Call", eSigIoMask.InputSigOnly); + codec.CallStatusChange += new EventHandler(codec_CallStatusChange); + + // Online status + if (codec is ICommunicationMonitor) + { + var c = codec as ICommunicationMonitor; + var codecOnline = FusionRoom.CreateOffsetBoolSig(122, "Online - VC 1", eSigIoMask.InputSigOnly); + codecOnline.InputSig.BoolValue = c.CommunicationMonitor.Status == MonitorStatus.IsOk; + c.CommunicationMonitor.StatusChange += (o, a) => + { + codecOnline.InputSig.BoolValue = a.Status == MonitorStatus.IsOk; + }; + Debug.Console(0, this, "Linking '{0}' communication monitor to Fusion '{1}'", codec.Key, "Online - VC 1"); + } + + // Codec IP Address + bool codecHasIpInfo = false; + var codecComm = codec.Communication; + + string codecIpAddress = string.Empty; + int codecIpPort = 0; + + StringSigData codecIpAddressSig; + StringSigData codecIpPortSig; + + if(codecComm is GenericSshClient) + { + codecIpAddress = (codecComm as GenericSshClient).Hostname; + codecIpPort = (codecComm as GenericSshClient).Port; + codecHasIpInfo = true; + } + else if (codecComm is GenericTcpIpClient) + { + codecIpAddress = (codecComm as GenericTcpIpClient).Hostname; + codecIpPort = (codecComm as GenericTcpIpClient).Port; + codecHasIpInfo = true; + } + + if (codecHasIpInfo) + { + codecIpAddressSig = FusionRoom.CreateOffsetStringSig(121, "IP Address - VC", eSigIoMask.InputSigOnly); + codecIpAddressSig.InputSig.StringValue = codecIpAddress; + + codecIpPortSig = FusionRoom.CreateOffsetStringSig(150, "IP Port - VC", eSigIoMask.InputSigOnly); + codecIpPortSig.InputSig.StringValue = codecIpPort.ToString(); + } + + var tempAsset = new FusionAsset(); + + var deviceConfig = ConfigReader.ConfigObject.Devices.FirstOrDefault(c => c.Key.Equals(codec.Key)); + + if (FusionStaticAssets.ContainsKey(deviceConfig.Uid)) + { + tempAsset = FusionStaticAssets[deviceConfig.Uid]; + } + else + { + // Create a new asset + tempAsset = new FusionAsset(FusionRoomGuids.GetNextAvailableAssetNumber(FusionRoom), codec.Name, "Codec", ""); + FusionStaticAssets.Add(deviceConfig.Uid, tempAsset); + } + + var codecAsset = FusionRoom.CreateStaticAsset(tempAsset.SlotNumber, tempAsset.Name, "Display", tempAsset.InstanceId); + codecAsset.PowerOn.OutputSig.UserObject = codecPowerOnAction; + codecAsset.PowerOff.OutputSig.UserObject = codecPowerOffAction; + codec.StandbyIsOnFeedback.LinkComplementInputSig(codecAsset.PowerOn.InputSig); + + // TODO: Map relevant attributes on asset symbol + + codecAsset.TrySetMakeModel(codec); + codecAsset.TryLinkAssetErrorToCommunication(codec); + } + catch (Exception e) + { + Debug.Console(1, this, "Error setting up codec in Fusion: {0}", e); + } + } + + void codec_CallStatusChange(object sender, PepperDash.Essentials.Devices.Common.Codec.CodecCallStatusItemChangeEventArgs e) + { + var codec = (Room as EssentialsHuddleVtc1Room).VideoCodec; + + CodecIsInCall.InputSig.BoolValue = codec.IsInCall; + } + + // These methods are overridden because they access the room class which is of a different type + + protected override void CreateSymbolAndBasicSigs(uint ipId) + { + Debug.Console(1, this, "Creating Fusion Room symbol with GUID: {0}", RoomGuid); + + FusionRoom = new FusionRoom(ipId, Global.ControlSystem, Room.Name, RoomGuid); + FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.Use(); + FusionRoom.ExtenderFusionRoomDataReservedSigs.Use(); + + FusionRoom.Register(); + + FusionRoom.FusionStateChange += FusionRoom_FusionStateChange; + + FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.DeviceExtenderSigChange += FusionRoomSchedule_DeviceExtenderSigChange; + FusionRoom.ExtenderFusionRoomDataReservedSigs.DeviceExtenderSigChange += ExtenderFusionRoomDataReservedSigs_DeviceExtenderSigChange; + FusionRoom.OnlineStatusChange += FusionRoom_OnlineStatusChange; + + CrestronConsole.AddNewConsoleCommand(RequestFullRoomSchedule, "FusReqRoomSchedule", "Requests schedule of the room for the next 24 hours", ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(ModifyMeetingEndTimeConsoleHelper, "FusReqRoomSchMod", "Ends or extends a meeting by the specified time", ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(CreateAsHocMeeting, "FusCreateMeeting", "Creates and Ad Hoc meeting for on hour or until the next meeting", ConsoleAccessLevelEnum.AccessOperator); + + // Room to fusion room + Room.OnFeedback.LinkInputSig(FusionRoom.SystemPowerOn.InputSig); + + // Moved to + CurrentRoomSourceNameSig = FusionRoom.CreateOffsetStringSig(84, "Display 1 - Current Source", eSigIoMask.InputSigOnly); + // Don't think we need to get current status of this as nothing should be alive yet. + (Room as EssentialsHuddleVtc1Room).CurrentSingleSourceChange += Room_CurrentSourceInfoChange; + + + FusionRoom.SystemPowerOn.OutputSig.SetSigFalseAction((Room as EssentialsHuddleVtc1Room).PowerOnToDefaultOrLastSource); + FusionRoom.SystemPowerOff.OutputSig.SetSigFalseAction(() => (Room as EssentialsHuddleVtc1Room).RunRouteAction("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;"; + + GetProcessorEthernetValues(); + + GetSystemInfo(); + + GetProcessorInfo(); + + CrestronEnvironment.EthernetEventHandler += CrestronEnvironment_EthernetEventHandler; + } + + protected override void SetUpSources() + { + // Sources + var dict = ConfigReader.ConfigObject.GetSourceListForKey((Room as EssentialsHuddleVtc1Room).SourceListKey); + if (dict != null) + { + // NEW PROCESS: + // Make these lists and insert the fusion attributes by iterating these + var setTopBoxes = dict.Where(d => d.Value.SourceDevice is ISetTopBoxControls); + uint i = 1; + foreach (var kvp in setTopBoxes) + { + TryAddRouteActionSigs("Display 1 - Source TV " + i, 188 + i, kvp.Key, kvp.Value.SourceDevice); + i++; + if (i > 5) // We only have five spots + break; + } + + var discPlayers = dict.Where(d => d.Value.SourceDevice is IDiscPlayerControls); + i = 1; + foreach (var kvp in discPlayers) + { + TryAddRouteActionSigs("Display 1 - Source DVD " + i, 181 + i, kvp.Key, kvp.Value.SourceDevice); + i++; + if (i > 5) // We only have five spots + break; + } + + var laptops = dict.Where(d => d.Value.SourceDevice is Laptop); + i = 1; + foreach (var kvp in laptops) + { + TryAddRouteActionSigs("Display 1 - Source Laptop " + i, 166 + i, kvp.Key, kvp.Value.SourceDevice); + i++; + if (i > 10) // We only have ten spots??? + break; + } + + foreach (var kvp in dict) + { + var usageDevice = kvp.Value.SourceDevice as IUsageTracking; + + if (usageDevice != null) + { + usageDevice.UsageTracker = new UsageTracking(usageDevice as Device); + usageDevice.UsageTracker.UsageIsTracked = true; + usageDevice.UsageTracker.DeviceUsageEnded += new EventHandler(UsageTracker_DeviceUsageEnded); + } + } + + } + else + { + Debug.Console(1, this, "WARNING: Config source list '{0}' not found for room '{1}'", + (Room as EssentialsHuddleVtc1Room).SourceListKey, Room.Key); + } + } + + protected override void SetUpDisplay() + { + try + { + //Setup Display Usage Monitoring + + var displays = DeviceManager.AllDevices.Where(d => d is DisplayBase); + + // Consider updating this in multiple display systems + + foreach (DisplayBase display in displays) + { + display.UsageTracker = new UsageTracking(display); + display.UsageTracker.UsageIsTracked = true; + display.UsageTracker.DeviceUsageEnded += new EventHandler(UsageTracker_DeviceUsageEnded); + } + + var defaultDisplay = (Room as EssentialsHuddleVtc1Room).DefaultDisplay as DisplayBase; + if (defaultDisplay == null) + { + Debug.Console(1, this, "Cannot link null display to Fusion because default display is null"); + return; + } + + var dispPowerOnAction = new Action(b => { if (!b) defaultDisplay.PowerOn(); }); + var dispPowerOffAction = new Action(b => { if (!b) defaultDisplay.PowerOff(); }); + + // Display to fusion room sigs + FusionRoom.DisplayPowerOn.OutputSig.UserObject = dispPowerOnAction; + FusionRoom.DisplayPowerOff.OutputSig.UserObject = dispPowerOffAction; + defaultDisplay.PowerIsOnFeedback.LinkInputSig(FusionRoom.DisplayPowerOn.InputSig); + if (defaultDisplay is IDisplayUsage) + (defaultDisplay as IDisplayUsage).LampHours.LinkInputSig(FusionRoom.DisplayUsage.InputSig); + + + + MapDisplayToRoomJoins(1, 158, defaultDisplay); + + + var deviceConfig = ConfigReader.ConfigObject.Devices.FirstOrDefault(d => d.Key.Equals(defaultDisplay.Key)); + + //Check for existing asset in GUIDs collection + + var tempAsset = new FusionAsset(); + + if (FusionStaticAssets.ContainsKey(deviceConfig.Uid)) + { + tempAsset = FusionStaticAssets[deviceConfig.Uid]; + } + else + { + // Create a new asset + tempAsset = new FusionAsset(FusionRoomGuids.GetNextAvailableAssetNumber(FusionRoom), defaultDisplay.Name, "Display", ""); + FusionStaticAssets.Add(deviceConfig.Uid, tempAsset); + } + + var dispAsset = FusionRoom.CreateStaticAsset(tempAsset.SlotNumber, tempAsset.Name, "Display", tempAsset.InstanceId); + dispAsset.PowerOn.OutputSig.UserObject = dispPowerOnAction; + dispAsset.PowerOff.OutputSig.UserObject = dispPowerOffAction; + defaultDisplay.PowerIsOnFeedback.LinkInputSig(dispAsset.PowerOn.InputSig); + // NO!! display.PowerIsOn.LinkComplementInputSig(dispAsset.PowerOff.InputSig); + // Use extension methods + dispAsset.TrySetMakeModel(defaultDisplay); + dispAsset.TryLinkAssetErrorToCommunication(defaultDisplay); + } + catch (Exception e) + { + Debug.Console(1, this, "Error setting up display in Fusion: {0}", e); + } + + } + + protected override void MapDisplayToRoomJoins(int displayIndex, int joinOffset, DisplayBase display) + { + string displayName = string.Format("Display {0} - ", displayIndex); + + + if (display == (Room as EssentialsHuddleVtc1Room).DefaultDisplay) + { + // Power on + var defaultDisplayPowerOn = FusionRoom.CreateOffsetBoolSig((uint)joinOffset, displayName + "Power On", eSigIoMask.InputOutputSig); + defaultDisplayPowerOn.OutputSig.UserObject = new Action(b => { if (!b) display.PowerOn(); }); + display.PowerIsOnFeedback.LinkInputSig(defaultDisplayPowerOn.InputSig); + + // Power Off + var defaultDisplayPowerOff = FusionRoom.CreateOffsetBoolSig((uint)joinOffset + 1, displayName + "Power Off", eSigIoMask.InputOutputSig); + defaultDisplayPowerOn.OutputSig.UserObject = new Action(b => { if (!b) display.PowerOff(); }); ; + display.PowerIsOnFeedback.LinkInputSig(defaultDisplayPowerOn.InputSig); + + // Current Source + var defaultDisplaySourceNone = FusionRoom.CreateOffsetBoolSig((uint)joinOffset + 8, displayName + "Source None", eSigIoMask.InputOutputSig); + defaultDisplaySourceNone.OutputSig.UserObject = new Action(b => { if (!b) (Room as EssentialsHuddleVtc1Room).RunRouteAction("roomOff"); }); ; + } + } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/OTHER/Fusion/FusionEventHandlers.cs b/PepperDashEssentials/OTHER/Fusion/FusionEventHandlers.cs similarity index 100% rename from Essentials/PepperDashEssentials/OTHER/Fusion/FusionEventHandlers.cs rename to PepperDashEssentials/OTHER/Fusion/FusionEventHandlers.cs diff --git a/Essentials/PepperDashEssentials/OTHER/Fusion/FusionProcessorQueries.cs b/PepperDashEssentials/OTHER/Fusion/FusionProcessorQueries.cs similarity index 100% rename from Essentials/PepperDashEssentials/OTHER/Fusion/FusionProcessorQueries.cs rename to PepperDashEssentials/OTHER/Fusion/FusionProcessorQueries.cs diff --git a/Essentials/PepperDashEssentials/OTHER/Fusion/FusionRviDataClasses.cs b/PepperDashEssentials/OTHER/Fusion/FusionRviDataClasses.cs similarity index 100% rename from Essentials/PepperDashEssentials/OTHER/Fusion/FusionRviDataClasses.cs rename to PepperDashEssentials/OTHER/Fusion/FusionRviDataClasses.cs diff --git a/Essentials/PepperDashEssentials/OTHER/Fusion/FusionSystemController.cs.orig b/PepperDashEssentials/OTHER/Fusion/FusionSystemController.cs.orig similarity index 100% rename from Essentials/PepperDashEssentials/OTHER/Fusion/FusionSystemController.cs.orig rename to PepperDashEssentials/OTHER/Fusion/FusionSystemController.cs.orig diff --git a/Essentials/PepperDashEssentials/PepperDash Essentials TSW-760.sgd b/PepperDashEssentials/PepperDash Essentials TSW-760.sgd similarity index 96% rename from Essentials/PepperDashEssentials/PepperDash Essentials TSW-760.sgd rename to PepperDashEssentials/PepperDash Essentials TSW-760.sgd index 77a70e9f..e8a75d91 100644 --- a/Essentials/PepperDashEssentials/PepperDash Essentials TSW-760.sgd +++ b/PepperDashEssentials/PepperDash Essentials TSW-760.sgd @@ -1,19857 +1,19857 @@ -[ -ObjTp=FSgntr -Sgntr=SGD -RelVrs=3 -VTProeVer=6.1.05 -Schema=1 -CRCGUID=6C002F1C-3D96-4EBF-A0D9-8A124BE8F48A -] -;================================================================================ -[ -ObjTp=Hd -ProjectFile=PepperDash Essentials TSW-760.vtp -VtpGuid=D8D5F125-CB35-42E9-8AE3-4142597FD2C5 -] -;================================================================================ -[ -ObjTp=Symbol -Name=PepperDash Essentials TSW-760_[C.AC] Keypad_AC DTMF Keypad_2.ced -Hint=AC DTMF Keypad_2 (Smart Object ID=1101) -Code=1 -SGControlType=Simple Keypad -SGControlName=AC DTMF Keypad_2 -GUID=F2A259FE-82AD-4085-B5A6-22D7B034458C -SmplCName=PepperDash Essentials TSW-760_[C.AC] Keypad_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=1 -CedH=1 -SmartObjId=1101d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=1 -Tp=1 -HD=TRUE -DV=1101d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=1 -Name=PepperDash Essentials TSW-760_[C.AC] Keypad_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 TSW-760_[D.VC] Directory_Directory List.ced -Hint=Directory List (Smart Object ID=1202) -Code=2 -SGControlType=Dynamic Button List Vertical -SGControlName=Directory List -GUID=79060F3C-D3A4-4A8D-ACF0-CB2376A31702 -SmplCName=PepperDash Essentials TSW-760_[D.VC] Directory_Directory List.ced -SMWRev=4.02.20 -Expand=expand_random -HelpID=10112 -Render=8 -;Define the number of inputs, outputs and parameters -MinVariableInputs=6016 -MaxVariableInputs=6016 -MinVariableOutputs=6016 -MaxVariableOutputs=6016 -NumFixedParams=1 -MinVariableInputsList2=2012 -MaxVariableInputsList2=2012 -MinVariableOutputsList2=2012 -MaxVariableOutputsList2=2012 -MinVariableInputsList3=4014 -MaxVariableInputsList3=4014 -MinVariableOutputsList3=4014 -MaxVariableOutputsList3=4014 -InputSigType1=Digital -OutputSigType1=Digital -InputList2SigType1=Analog -OutputList2SigType1=Analog -InputList3SigType1=Serial -OutputList3SigType1=Serial - -;Define the cues, and signal types each input, output and parameter. -InputCue1=Disable Redraw -InputSigType1=Digital -InputCue2=[~UNUSED3~] -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~]Press -InputSigType11=Digital -InputCue12=Item 1 Selected -InputSigType12=Digital -InputCue13=Item 2 Selected -InputSigType13=Digital -InputCue14=Item 3 Selected -InputSigType14=Digital -InputCue15=Item 4 Selected -InputSigType15=Digital -InputCue16=Item 5 Selected -InputSigType16=Digital -InputCue17=Item 6 Selected -InputSigType17=Digital -InputCue18=Item 7 Selected -InputSigType18=Digital -InputCue19=Item 8 Selected -InputSigType19=Digital -InputCue20=Item 9 Selected -InputSigType20=Digital -InputCue21=Item 10 Selected -InputSigType21=Digital -InputCue22=Item 11 Selected -InputSigType22=Digital -InputCue23=Item 12 Selected -InputSigType23=Digital -InputCue24=Item 13 Selected -InputSigType24=Digital -InputCue25=Item 14 Selected -InputSigType25=Digital -InputCue26=Item 15 Selected -InputSigType26=Digital -InputCue27=Item 16 Selected -InputSigType27=Digital -InputCue28=Item 17 Selected -InputSigType28=Digital -InputCue29=Item 18 Selected -InputSigType29=Digital -InputCue30=Item 19 Selected -InputSigType30=Digital -InputCue31=Item 20 Selected -InputSigType31=Digital -InputCue32=Item 21 Selected -InputSigType32=Digital -InputCue33=Item 22 Selected -InputSigType33=Digital -InputCue34=Item 23 Selected -InputSigType34=Digital -InputCue35=Item 24 Selected -InputSigType35=Digital -InputCue36=Item 25 Selected -InputSigType36=Digital -InputCue37=Item 26 Selected -InputSigType37=Digital -InputCue38=Item 27 Selected -InputSigType38=Digital -InputCue39=Item 28 Selected -InputSigType39=Digital -InputCue40=Item 29 Selected -InputSigType40=Digital -InputCue41=Item 30 Selected -InputSigType41=Digital -InputCue42=Item 31 Selected -InputSigType42=Digital -InputCue43=Item 32 Selected -InputSigType43=Digital -InputCue44=Item 33 Selected -InputSigType44=Digital -InputCue45=Item 34 Selected -InputSigType45=Digital -InputCue46=Item 35 Selected -InputSigType46=Digital -InputCue47=Item 36 Selected -InputSigType47=Digital -InputCue48=Item 37 Selected -InputSigType48=Digital -InputCue49=Item 38 Selected -InputSigType49=Digital -InputCue50=Item 39 Selected -InputSigType50=Digital -InputCue51=Item 40 Selected -InputSigType51=Digital -InputCue52=Item 41 Selected -InputSigType52=Digital -InputCue53=Item 42 Selected -InputSigType53=Digital -InputCue54=Item 43 Selected -InputSigType54=Digital -InputCue55=Item 44 Selected -InputSigType55=Digital -InputCue56=Item 45 Selected -InputSigType56=Digital -InputCue57=Item 46 Selected -InputSigType57=Digital -InputCue58=Item 47 Selected -InputSigType58=Digital -InputCue59=Item 48 Selected -InputSigType59=Digital -InputCue60=Item 49 Selected -InputSigType60=Digital -InputCue61=Item 50 Selected -InputSigType61=Digital -InputCue62=Item 51 Selected -InputSigType62=Digital -InputCue63=Item 52 Selected -InputSigType63=Digital -InputCue64=Item 53 Selected -InputSigType64=Digital -InputCue65=Item 54 Selected -InputSigType65=Digital -InputCue66=Item 55 Selected -InputSigType66=Digital -InputCue67=Item 56 Selected -InputSigType67=Digital -InputCue68=Item 57 Selected -InputSigType68=Digital -InputCue69=Item 58 Selected -InputSigType69=Digital -InputCue70=Item 59 Selected -InputSigType70=Digital -InputCue71=Item 60 Selected -InputSigType71=Digital -InputCue72=Item 61 Selected -InputSigType72=Digital -InputCue73=Item 62 Selected -InputSigType73=Digital -InputCue74=Item 63 Selected -InputSigType74=Digital -InputCue75=Item 64 Selected -InputSigType75=Digital -InputCue76=Item 65 Selected -InputSigType76=Digital -InputCue77=Item 66 Selected -InputSigType77=Digital -InputCue78=Item 67 Selected -InputSigType78=Digital -InputCue79=Item 68 Selected -InputSigType79=Digital -InputCue80=Item 69 Selected -InputSigType80=Digital -InputCue81=Item 70 Selected -InputSigType81=Digital -InputCue82=Item 71 Selected -InputSigType82=Digital -InputCue83=Item 72 Selected -InputSigType83=Digital -InputCue84=Item 73 Selected -InputSigType84=Digital -InputCue85=Item 74 Selected -InputSigType85=Digital -InputCue86=Item 75 Selected -InputSigType86=Digital -InputCue87=Item 76 Selected -InputSigType87=Digital -InputCue88=Item 77 Selected -InputSigType88=Digital -InputCue89=Item 78 Selected -InputSigType89=Digital -InputCue90=Item 79 Selected -InputSigType90=Digital -InputCue91=Item 80 Selected -InputSigType91=Digital -InputCue92=Item 81 Selected -InputSigType92=Digital -InputCue93=Item 82 Selected -InputSigType93=Digital -InputCue94=Item 83 Selected -InputSigType94=Digital -InputCue95=Item 84 Selected -InputSigType95=Digital -InputCue96=Item 85 Selected -InputSigType96=Digital -InputCue97=Item 86 Selected -InputSigType97=Digital -InputCue98=Item 87 Selected -InputSigType98=Digital -InputCue99=Item 88 Selected -InputSigType99=Digital -InputCue100=Item 89 Selected -InputSigType100=Digital -InputCue101=Item 90 Selected -InputSigType101=Digital -InputCue102=Item 91 Selected -InputSigType102=Digital -InputCue103=Item 92 Selected -InputSigType103=Digital -InputCue104=Item 93 Selected -InputSigType104=Digital -InputCue105=Item 94 Selected -InputSigType105=Digital -InputCue106=Item 95 Selected -InputSigType106=Digital -InputCue107=Item 96 Selected -InputSigType107=Digital -InputCue108=Item 97 Selected -InputSigType108=Digital -InputCue109=Item 98 Selected -InputSigType109=Digital -InputCue110=Item 99 Selected -InputSigType110=Digital -InputCue111=Item 100 Selected -InputSigType111=Digital -InputCue112=Item 101 Selected -InputSigType112=Digital -InputCue113=Item 102 Selected -InputSigType113=Digital -InputCue114=Item 103 Selected -InputSigType114=Digital -InputCue115=Item 104 Selected -InputSigType115=Digital -InputCue116=Item 105 Selected -InputSigType116=Digital -InputCue117=Item 106 Selected -InputSigType117=Digital -InputCue118=Item 107 Selected -InputSigType118=Digital -InputCue119=Item 108 Selected -InputSigType119=Digital -InputCue120=Item 109 Selected -InputSigType120=Digital -InputCue121=Item 110 Selected -InputSigType121=Digital -InputCue122=Item 111 Selected -InputSigType122=Digital -InputCue123=Item 112 Selected -InputSigType123=Digital -InputCue124=Item 113 Selected -InputSigType124=Digital -InputCue125=Item 114 Selected -InputSigType125=Digital -InputCue126=Item 115 Selected -InputSigType126=Digital -InputCue127=Item 116 Selected -InputSigType127=Digital -InputCue128=Item 117 Selected -InputSigType128=Digital -InputCue129=Item 118 Selected -InputSigType129=Digital -InputCue130=Item 119 Selected -InputSigType130=Digital -InputCue131=Item 120 Selected -InputSigType131=Digital -InputCue132=Item 121 Selected -InputSigType132=Digital -InputCue133=Item 122 Selected -InputSigType133=Digital -InputCue134=Item 123 Selected -InputSigType134=Digital -InputCue135=Item 124 Selected -InputSigType135=Digital -InputCue136=Item 125 Selected -InputSigType136=Digital -InputCue137=Item 126 Selected -InputSigType137=Digital -InputCue138=Item 127 Selected -InputSigType138=Digital -InputCue139=Item 128 Selected -InputSigType139=Digital -InputCue140=Item 129 Selected -InputSigType140=Digital -InputCue141=Item 130 Selected -InputSigType141=Digital -InputCue142=Item 131 Selected -InputSigType142=Digital -InputCue143=Item 132 Selected -InputSigType143=Digital -InputCue144=Item 133 Selected -InputSigType144=Digital -InputCue145=Item 134 Selected -InputSigType145=Digital -InputCue146=Item 135 Selected -InputSigType146=Digital -InputCue147=Item 136 Selected -InputSigType147=Digital -InputCue148=Item 137 Selected -InputSigType148=Digital -InputCue149=Item 138 Selected -InputSigType149=Digital -InputCue150=Item 139 Selected -InputSigType150=Digital -InputCue151=Item 140 Selected -InputSigType151=Digital -InputCue152=Item 141 Selected -InputSigType152=Digital -InputCue153=Item 142 Selected -InputSigType153=Digital -InputCue154=Item 143 Selected -InputSigType154=Digital -InputCue155=Item 144 Selected -InputSigType155=Digital -InputCue156=Item 145 Selected -InputSigType156=Digital -InputCue157=Item 146 Selected -InputSigType157=Digital -InputCue158=Item 147 Selected -InputSigType158=Digital -InputCue159=Item 148 Selected -InputSigType159=Digital -InputCue160=Item 149 Selected -InputSigType160=Digital -InputCue161=Item 150 Selected -InputSigType161=Digital -InputCue162=Item 151 Selected -InputSigType162=Digital -InputCue163=Item 152 Selected -InputSigType163=Digital -InputCue164=Item 153 Selected -InputSigType164=Digital -InputCue165=Item 154 Selected -InputSigType165=Digital -InputCue166=Item 155 Selected -InputSigType166=Digital -InputCue167=Item 156 Selected -InputSigType167=Digital -InputCue168=Item 157 Selected -InputSigType168=Digital -InputCue169=Item 158 Selected -InputSigType169=Digital -InputCue170=Item 159 Selected -InputSigType170=Digital -InputCue171=Item 160 Selected -InputSigType171=Digital -InputCue172=Item 161 Selected -InputSigType172=Digital -InputCue173=Item 162 Selected -InputSigType173=Digital -InputCue174=Item 163 Selected -InputSigType174=Digital -InputCue175=Item 164 Selected -InputSigType175=Digital -InputCue176=Item 165 Selected -InputSigType176=Digital -InputCue177=Item 166 Selected -InputSigType177=Digital -InputCue178=Item 167 Selected -InputSigType178=Digital -InputCue179=Item 168 Selected -InputSigType179=Digital -InputCue180=Item 169 Selected -InputSigType180=Digital -InputCue181=Item 170 Selected -InputSigType181=Digital -InputCue182=Item 171 Selected -InputSigType182=Digital -InputCue183=Item 172 Selected -InputSigType183=Digital -InputCue184=Item 173 Selected -InputSigType184=Digital -InputCue185=Item 174 Selected -InputSigType185=Digital -InputCue186=Item 175 Selected -InputSigType186=Digital -InputCue187=Item 176 Selected -InputSigType187=Digital -InputCue188=Item 177 Selected -InputSigType188=Digital -InputCue189=Item 178 Selected -InputSigType189=Digital -InputCue190=Item 179 Selected -InputSigType190=Digital -InputCue191=Item 180 Selected -InputSigType191=Digital -InputCue192=Item 181 Selected -InputSigType192=Digital -InputCue193=Item 182 Selected -InputSigType193=Digital -InputCue194=Item 183 Selected -InputSigType194=Digital -InputCue195=Item 184 Selected -InputSigType195=Digital -InputCue196=Item 185 Selected -InputSigType196=Digital -InputCue197=Item 186 Selected -InputSigType197=Digital -InputCue198=Item 187 Selected -InputSigType198=Digital -InputCue199=Item 188 Selected -InputSigType199=Digital -InputCue200=Item 189 Selected -InputSigType200=Digital -InputCue201=Item 190 Selected -InputSigType201=Digital -InputCue202=Item 191 Selected -InputSigType202=Digital -InputCue203=Item 192 Selected -InputSigType203=Digital -InputCue204=Item 193 Selected -InputSigType204=Digital -InputCue205=Item 194 Selected -InputSigType205=Digital -InputCue206=Item 195 Selected -InputSigType206=Digital -InputCue207=Item 196 Selected -InputSigType207=Digital -InputCue208=Item 197 Selected -InputSigType208=Digital -InputCue209=Item 198 Selected -InputSigType209=Digital -InputCue210=Item 199 Selected -InputSigType210=Digital -InputCue211=Item 200 Selected -InputSigType211=Digital -InputCue212=Item 201 Selected -InputSigType212=Digital -InputCue213=Item 202 Selected -InputSigType213=Digital -InputCue214=Item 203 Selected -InputSigType214=Digital -InputCue215=Item 204 Selected -InputSigType215=Digital -InputCue216=Item 205 Selected -InputSigType216=Digital -InputCue217=Item 206 Selected -InputSigType217=Digital -InputCue218=Item 207 Selected -InputSigType218=Digital -InputCue219=Item 208 Selected -InputSigType219=Digital -InputCue220=Item 209 Selected -InputSigType220=Digital -InputCue221=Item 210 Selected -InputSigType221=Digital -InputCue222=Item 211 Selected -InputSigType222=Digital -InputCue223=Item 212 Selected -InputSigType223=Digital -InputCue224=Item 213 Selected -InputSigType224=Digital -InputCue225=Item 214 Selected -InputSigType225=Digital -InputCue226=Item 215 Selected -InputSigType226=Digital -InputCue227=Item 216 Selected -InputSigType227=Digital -InputCue228=Item 217 Selected -InputSigType228=Digital -InputCue229=Item 218 Selected -InputSigType229=Digital -InputCue230=Item 219 Selected -InputSigType230=Digital -InputCue231=Item 220 Selected -InputSigType231=Digital -InputCue232=Item 221 Selected -InputSigType232=Digital -InputCue233=Item 222 Selected -InputSigType233=Digital -InputCue234=Item 223 Selected -InputSigType234=Digital -InputCue235=Item 224 Selected -InputSigType235=Digital -InputCue236=Item 225 Selected -InputSigType236=Digital -InputCue237=Item 226 Selected -InputSigType237=Digital -InputCue238=Item 227 Selected -InputSigType238=Digital -InputCue239=Item 228 Selected -InputSigType239=Digital -InputCue240=Item 229 Selected -InputSigType240=Digital -InputCue241=Item 230 Selected -InputSigType241=Digital -InputCue242=Item 231 Selected -InputSigType242=Digital -InputCue243=Item 232 Selected -InputSigType243=Digital -InputCue244=Item 233 Selected -InputSigType244=Digital -InputCue245=Item 234 Selected -InputSigType245=Digital -InputCue246=Item 235 Selected -InputSigType246=Digital -InputCue247=Item 236 Selected -InputSigType247=Digital -InputCue248=Item 237 Selected -InputSigType248=Digital -InputCue249=Item 238 Selected -InputSigType249=Digital -InputCue250=Item 239 Selected -InputSigType250=Digital -InputCue251=Item 240 Selected -InputSigType251=Digital -InputCue252=Item 241 Selected -InputSigType252=Digital -InputCue253=Item 242 Selected -InputSigType253=Digital -InputCue254=Item 243 Selected -InputSigType254=Digital -InputCue255=Item 244 Selected -InputSigType255=Digital -InputCue256=Item 245 Selected -InputSigType256=Digital -InputCue257=Item 246 Selected -InputSigType257=Digital -InputCue258=Item 247 Selected -InputSigType258=Digital -InputCue259=Item 248 Selected -InputSigType259=Digital -InputCue260=Item 249 Selected -InputSigType260=Digital -InputCue261=Item 250 Selected -InputSigType261=Digital -InputCue262=Item 251 Selected -InputSigType262=Digital -InputCue263=Item 252 Selected -InputSigType263=Digital -InputCue264=Item 253 Selected -InputSigType264=Digital -InputCue265=Item 254 Selected -InputSigType265=Digital -InputCue266=Item 255 Selected -InputSigType266=Digital -InputCue267=[~UNUSED2~] -InputSigType267=Digital|Analog|Serial|String -InputCue2012=[~EndGroup~]Press -InputSigType2012=Digital -InputCue2013=[~BeginGroup~]Enable -InputSigType2013=Digital -InputCue2014=Item 1 Enabled -InputSigType2014=Digital -InputCue2015=Item 2 Enabled -InputSigType2015=Digital -InputCue2016=Item 3 Enabled -InputSigType2016=Digital -InputCue2017=Item 4 Enabled -InputSigType2017=Digital -InputCue2018=Item 5 Enabled -InputSigType2018=Digital -InputCue2019=Item 6 Enabled -InputSigType2019=Digital -InputCue2020=Item 7 Enabled -InputSigType2020=Digital -InputCue2021=Item 8 Enabled -InputSigType2021=Digital -InputCue2022=Item 9 Enabled -InputSigType2022=Digital -InputCue2023=Item 10 Enabled -InputSigType2023=Digital -InputCue2024=Item 11 Enabled -InputSigType2024=Digital -InputCue2025=Item 12 Enabled -InputSigType2025=Digital -InputCue2026=Item 13 Enabled -InputSigType2026=Digital -InputCue2027=Item 14 Enabled -InputSigType2027=Digital -InputCue2028=Item 15 Enabled -InputSigType2028=Digital -InputCue2029=Item 16 Enabled -InputSigType2029=Digital -InputCue2030=Item 17 Enabled -InputSigType2030=Digital -InputCue2031=Item 18 Enabled -InputSigType2031=Digital -InputCue2032=Item 19 Enabled -InputSigType2032=Digital -InputCue2033=Item 20 Enabled -InputSigType2033=Digital -InputCue2034=Item 21 Enabled -InputSigType2034=Digital -InputCue2035=Item 22 Enabled -InputSigType2035=Digital -InputCue2036=Item 23 Enabled -InputSigType2036=Digital -InputCue2037=Item 24 Enabled -InputSigType2037=Digital -InputCue2038=Item 25 Enabled -InputSigType2038=Digital -InputCue2039=Item 26 Enabled -InputSigType2039=Digital -InputCue2040=Item 27 Enabled -InputSigType2040=Digital -InputCue2041=Item 28 Enabled -InputSigType2041=Digital -InputCue2042=Item 29 Enabled -InputSigType2042=Digital -InputCue2043=Item 30 Enabled -InputSigType2043=Digital -InputCue2044=Item 31 Enabled -InputSigType2044=Digital -InputCue2045=Item 32 Enabled -InputSigType2045=Digital -InputCue2046=Item 33 Enabled -InputSigType2046=Digital -InputCue2047=Item 34 Enabled -InputSigType2047=Digital -InputCue2048=Item 35 Enabled -InputSigType2048=Digital -InputCue2049=Item 36 Enabled -InputSigType2049=Digital -InputCue2050=Item 37 Enabled -InputSigType2050=Digital -InputCue2051=Item 38 Enabled -InputSigType2051=Digital -InputCue2052=Item 39 Enabled -InputSigType2052=Digital -InputCue2053=Item 40 Enabled -InputSigType2053=Digital -InputCue2054=Item 41 Enabled -InputSigType2054=Digital -InputCue2055=Item 42 Enabled -InputSigType2055=Digital -InputCue2056=Item 43 Enabled -InputSigType2056=Digital -InputCue2057=Item 44 Enabled -InputSigType2057=Digital -InputCue2058=Item 45 Enabled -InputSigType2058=Digital -InputCue2059=Item 46 Enabled -InputSigType2059=Digital -InputCue2060=Item 47 Enabled -InputSigType2060=Digital -InputCue2061=Item 48 Enabled -InputSigType2061=Digital -InputCue2062=Item 49 Enabled -InputSigType2062=Digital -InputCue2063=Item 50 Enabled -InputSigType2063=Digital -InputCue2064=Item 51 Enabled -InputSigType2064=Digital -InputCue2065=Item 52 Enabled -InputSigType2065=Digital -InputCue2066=Item 53 Enabled -InputSigType2066=Digital -InputCue2067=Item 54 Enabled -InputSigType2067=Digital -InputCue2068=Item 55 Enabled -InputSigType2068=Digital -InputCue2069=Item 56 Enabled -InputSigType2069=Digital -InputCue2070=Item 57 Enabled -InputSigType2070=Digital -InputCue2071=Item 58 Enabled -InputSigType2071=Digital -InputCue2072=Item 59 Enabled -InputSigType2072=Digital -InputCue2073=Item 60 Enabled -InputSigType2073=Digital -InputCue2074=Item 61 Enabled -InputSigType2074=Digital -InputCue2075=Item 62 Enabled -InputSigType2075=Digital -InputCue2076=Item 63 Enabled -InputSigType2076=Digital -InputCue2077=Item 64 Enabled -InputSigType2077=Digital -InputCue2078=Item 65 Enabled -InputSigType2078=Digital -InputCue2079=Item 66 Enabled -InputSigType2079=Digital -InputCue2080=Item 67 Enabled -InputSigType2080=Digital -InputCue2081=Item 68 Enabled -InputSigType2081=Digital -InputCue2082=Item 69 Enabled -InputSigType2082=Digital -InputCue2083=Item 70 Enabled -InputSigType2083=Digital -InputCue2084=Item 71 Enabled -InputSigType2084=Digital -InputCue2085=Item 72 Enabled -InputSigType2085=Digital -InputCue2086=Item 73 Enabled -InputSigType2086=Digital -InputCue2087=Item 74 Enabled -InputSigType2087=Digital -InputCue2088=Item 75 Enabled -InputSigType2088=Digital -InputCue2089=Item 76 Enabled -InputSigType2089=Digital -InputCue2090=Item 77 Enabled -InputSigType2090=Digital -InputCue2091=Item 78 Enabled -InputSigType2091=Digital -InputCue2092=Item 79 Enabled -InputSigType2092=Digital -InputCue2093=Item 80 Enabled -InputSigType2093=Digital -InputCue2094=Item 81 Enabled -InputSigType2094=Digital -InputCue2095=Item 82 Enabled -InputSigType2095=Digital -InputCue2096=Item 83 Enabled -InputSigType2096=Digital -InputCue2097=Item 84 Enabled -InputSigType2097=Digital -InputCue2098=Item 85 Enabled -InputSigType2098=Digital -InputCue2099=Item 86 Enabled -InputSigType2099=Digital -InputCue2100=Item 87 Enabled -InputSigType2100=Digital -InputCue2101=Item 88 Enabled -InputSigType2101=Digital -InputCue2102=Item 89 Enabled -InputSigType2102=Digital -InputCue2103=Item 90 Enabled -InputSigType2103=Digital -InputCue2104=Item 91 Enabled -InputSigType2104=Digital -InputCue2105=Item 92 Enabled -InputSigType2105=Digital -InputCue2106=Item 93 Enabled -InputSigType2106=Digital -InputCue2107=Item 94 Enabled -InputSigType2107=Digital -InputCue2108=Item 95 Enabled -InputSigType2108=Digital -InputCue2109=Item 96 Enabled -InputSigType2109=Digital -InputCue2110=Item 97 Enabled -InputSigType2110=Digital -InputCue2111=Item 98 Enabled -InputSigType2111=Digital -InputCue2112=Item 99 Enabled -InputSigType2112=Digital -InputCue2113=Item 100 Enabled -InputSigType2113=Digital -InputCue2114=Item 101 Enabled -InputSigType2114=Digital -InputCue2115=Item 102 Enabled -InputSigType2115=Digital -InputCue2116=Item 103 Enabled -InputSigType2116=Digital -InputCue2117=Item 104 Enabled -InputSigType2117=Digital -InputCue2118=Item 105 Enabled -InputSigType2118=Digital -InputCue2119=Item 106 Enabled -InputSigType2119=Digital -InputCue2120=Item 107 Enabled -InputSigType2120=Digital -InputCue2121=Item 108 Enabled -InputSigType2121=Digital -InputCue2122=Item 109 Enabled -InputSigType2122=Digital -InputCue2123=Item 110 Enabled -InputSigType2123=Digital -InputCue2124=Item 111 Enabled -InputSigType2124=Digital -InputCue2125=Item 112 Enabled -InputSigType2125=Digital -InputCue2126=Item 113 Enabled -InputSigType2126=Digital -InputCue2127=Item 114 Enabled -InputSigType2127=Digital -InputCue2128=Item 115 Enabled -InputSigType2128=Digital -InputCue2129=Item 116 Enabled -InputSigType2129=Digital -InputCue2130=Item 117 Enabled -InputSigType2130=Digital -InputCue2131=Item 118 Enabled -InputSigType2131=Digital -InputCue2132=Item 119 Enabled -InputSigType2132=Digital -InputCue2133=Item 120 Enabled -InputSigType2133=Digital -InputCue2134=Item 121 Enabled -InputSigType2134=Digital -InputCue2135=Item 122 Enabled -InputSigType2135=Digital -InputCue2136=Item 123 Enabled -InputSigType2136=Digital -InputCue2137=Item 124 Enabled -InputSigType2137=Digital -InputCue2138=Item 125 Enabled -InputSigType2138=Digital -InputCue2139=Item 126 Enabled -InputSigType2139=Digital -InputCue2140=Item 127 Enabled -InputSigType2140=Digital -InputCue2141=Item 128 Enabled -InputSigType2141=Digital -InputCue2142=Item 129 Enabled -InputSigType2142=Digital -InputCue2143=Item 130 Enabled -InputSigType2143=Digital -InputCue2144=Item 131 Enabled -InputSigType2144=Digital -InputCue2145=Item 132 Enabled -InputSigType2145=Digital -InputCue2146=Item 133 Enabled -InputSigType2146=Digital -InputCue2147=Item 134 Enabled -InputSigType2147=Digital -InputCue2148=Item 135 Enabled -InputSigType2148=Digital -InputCue2149=Item 136 Enabled -InputSigType2149=Digital -InputCue2150=Item 137 Enabled -InputSigType2150=Digital -InputCue2151=Item 138 Enabled -InputSigType2151=Digital -InputCue2152=Item 139 Enabled -InputSigType2152=Digital -InputCue2153=Item 140 Enabled -InputSigType2153=Digital -InputCue2154=Item 141 Enabled -InputSigType2154=Digital -InputCue2155=Item 142 Enabled -InputSigType2155=Digital -InputCue2156=Item 143 Enabled -InputSigType2156=Digital -InputCue2157=Item 144 Enabled -InputSigType2157=Digital -InputCue2158=Item 145 Enabled -InputSigType2158=Digital -InputCue2159=Item 146 Enabled -InputSigType2159=Digital -InputCue2160=Item 147 Enabled -InputSigType2160=Digital -InputCue2161=Item 148 Enabled -InputSigType2161=Digital -InputCue2162=Item 149 Enabled -InputSigType2162=Digital -InputCue2163=Item 150 Enabled -InputSigType2163=Digital -InputCue2164=Item 151 Enabled -InputSigType2164=Digital -InputCue2165=Item 152 Enabled -InputSigType2165=Digital -InputCue2166=Item 153 Enabled -InputSigType2166=Digital -InputCue2167=Item 154 Enabled -InputSigType2167=Digital -InputCue2168=Item 155 Enabled -InputSigType2168=Digital -InputCue2169=Item 156 Enabled -InputSigType2169=Digital -InputCue2170=Item 157 Enabled -InputSigType2170=Digital -InputCue2171=Item 158 Enabled -InputSigType2171=Digital -InputCue2172=Item 159 Enabled -InputSigType2172=Digital -InputCue2173=Item 160 Enabled -InputSigType2173=Digital -InputCue2174=Item 161 Enabled -InputSigType2174=Digital -InputCue2175=Item 162 Enabled -InputSigType2175=Digital -InputCue2176=Item 163 Enabled -InputSigType2176=Digital -InputCue2177=Item 164 Enabled -InputSigType2177=Digital -InputCue2178=Item 165 Enabled -InputSigType2178=Digital -InputCue2179=Item 166 Enabled -InputSigType2179=Digital -InputCue2180=Item 167 Enabled -InputSigType2180=Digital -InputCue2181=Item 168 Enabled -InputSigType2181=Digital -InputCue2182=Item 169 Enabled -InputSigType2182=Digital -InputCue2183=Item 170 Enabled -InputSigType2183=Digital -InputCue2184=Item 171 Enabled -InputSigType2184=Digital -InputCue2185=Item 172 Enabled -InputSigType2185=Digital -InputCue2186=Item 173 Enabled -InputSigType2186=Digital -InputCue2187=Item 174 Enabled -InputSigType2187=Digital -InputCue2188=Item 175 Enabled -InputSigType2188=Digital -InputCue2189=Item 176 Enabled -InputSigType2189=Digital -InputCue2190=Item 177 Enabled -InputSigType2190=Digital -InputCue2191=Item 178 Enabled -InputSigType2191=Digital -InputCue2192=Item 179 Enabled -InputSigType2192=Digital -InputCue2193=Item 180 Enabled -InputSigType2193=Digital -InputCue2194=Item 181 Enabled -InputSigType2194=Digital -InputCue2195=Item 182 Enabled -InputSigType2195=Digital -InputCue2196=Item 183 Enabled -InputSigType2196=Digital -InputCue2197=Item 184 Enabled -InputSigType2197=Digital -InputCue2198=Item 185 Enabled -InputSigType2198=Digital -InputCue2199=Item 186 Enabled -InputSigType2199=Digital -InputCue2200=Item 187 Enabled -InputSigType2200=Digital -InputCue2201=Item 188 Enabled -InputSigType2201=Digital -InputCue2202=Item 189 Enabled -InputSigType2202=Digital -InputCue2203=Item 190 Enabled -InputSigType2203=Digital -InputCue2204=Item 191 Enabled -InputSigType2204=Digital -InputCue2205=Item 192 Enabled -InputSigType2205=Digital -InputCue2206=Item 193 Enabled -InputSigType2206=Digital -InputCue2207=Item 194 Enabled -InputSigType2207=Digital -InputCue2208=Item 195 Enabled -InputSigType2208=Digital -InputCue2209=Item 196 Enabled -InputSigType2209=Digital -InputCue2210=Item 197 Enabled -InputSigType2210=Digital -InputCue2211=Item 198 Enabled -InputSigType2211=Digital -InputCue2212=Item 199 Enabled -InputSigType2212=Digital -InputCue2213=Item 200 Enabled -InputSigType2213=Digital -InputCue2214=Item 201 Enabled -InputSigType2214=Digital -InputCue2215=Item 202 Enabled -InputSigType2215=Digital -InputCue2216=Item 203 Enabled -InputSigType2216=Digital -InputCue2217=Item 204 Enabled -InputSigType2217=Digital -InputCue2218=Item 205 Enabled -InputSigType2218=Digital -InputCue2219=Item 206 Enabled -InputSigType2219=Digital -InputCue2220=Item 207 Enabled -InputSigType2220=Digital -InputCue2221=Item 208 Enabled -InputSigType2221=Digital -InputCue2222=Item 209 Enabled -InputSigType2222=Digital -InputCue2223=Item 210 Enabled -InputSigType2223=Digital -InputCue2224=Item 211 Enabled -InputSigType2224=Digital -InputCue2225=Item 212 Enabled -InputSigType2225=Digital -InputCue2226=Item 213 Enabled -InputSigType2226=Digital -InputCue2227=Item 214 Enabled -InputSigType2227=Digital -InputCue2228=Item 215 Enabled -InputSigType2228=Digital -InputCue2229=Item 216 Enabled -InputSigType2229=Digital -InputCue2230=Item 217 Enabled -InputSigType2230=Digital -InputCue2231=Item 218 Enabled -InputSigType2231=Digital -InputCue2232=Item 219 Enabled -InputSigType2232=Digital -InputCue2233=Item 220 Enabled -InputSigType2233=Digital -InputCue2234=Item 221 Enabled -InputSigType2234=Digital -InputCue2235=Item 222 Enabled -InputSigType2235=Digital -InputCue2236=Item 223 Enabled -InputSigType2236=Digital -InputCue2237=Item 224 Enabled -InputSigType2237=Digital -InputCue2238=Item 225 Enabled -InputSigType2238=Digital -InputCue2239=Item 226 Enabled -InputSigType2239=Digital -InputCue2240=Item 227 Enabled -InputSigType2240=Digital -InputCue2241=Item 228 Enabled -InputSigType2241=Digital -InputCue2242=Item 229 Enabled -InputSigType2242=Digital -InputCue2243=Item 230 Enabled -InputSigType2243=Digital -InputCue2244=Item 231 Enabled -InputSigType2244=Digital -InputCue2245=Item 232 Enabled -InputSigType2245=Digital -InputCue2246=Item 233 Enabled -InputSigType2246=Digital -InputCue2247=Item 234 Enabled -InputSigType2247=Digital -InputCue2248=Item 235 Enabled -InputSigType2248=Digital -InputCue2249=Item 236 Enabled -InputSigType2249=Digital -InputCue2250=Item 237 Enabled -InputSigType2250=Digital -InputCue2251=Item 238 Enabled -InputSigType2251=Digital -InputCue2252=Item 239 Enabled -InputSigType2252=Digital -InputCue2253=Item 240 Enabled -InputSigType2253=Digital -InputCue2254=Item 241 Enabled -InputSigType2254=Digital -InputCue2255=Item 242 Enabled -InputSigType2255=Digital -InputCue2256=Item 243 Enabled -InputSigType2256=Digital -InputCue2257=Item 244 Enabled -InputSigType2257=Digital -InputCue2258=Item 245 Enabled -InputSigType2258=Digital -InputCue2259=Item 246 Enabled -InputSigType2259=Digital -InputCue2260=Item 247 Enabled -InputSigType2260=Digital -InputCue2261=Item 248 Enabled -InputSigType2261=Digital -InputCue2262=Item 249 Enabled -InputSigType2262=Digital -InputCue2263=Item 250 Enabled -InputSigType2263=Digital -InputCue2264=Item 251 Enabled -InputSigType2264=Digital -InputCue2265=Item 252 Enabled -InputSigType2265=Digital -InputCue2266=Item 253 Enabled -InputSigType2266=Digital -InputCue2267=Item 254 Enabled -InputSigType2267=Digital -InputCue2268=Item 255 Enabled -InputSigType2268=Digital -InputCue2269=[~UNUSED2~] -InputSigType2269=Digital|Analog|Serial|String -InputCue4014=[~EndGroup~]Enable -InputSigType4014=Digital -InputCue4015=[~BeginGroup~]Visible -InputSigType4015=Digital -InputCue4016=Item 1 Visible -InputSigType4016=Digital -InputCue4017=Item 2 Visible -InputSigType4017=Digital -InputCue4018=Item 3 Visible -InputSigType4018=Digital -InputCue4019=Item 4 Visible -InputSigType4019=Digital -InputCue4020=Item 5 Visible -InputSigType4020=Digital -InputCue4021=Item 6 Visible -InputSigType4021=Digital -InputCue4022=Item 7 Visible -InputSigType4022=Digital -InputCue4023=Item 8 Visible -InputSigType4023=Digital -InputCue4024=Item 9 Visible -InputSigType4024=Digital -InputCue4025=Item 10 Visible -InputSigType4025=Digital -InputCue4026=Item 11 Visible -InputSigType4026=Digital -InputCue4027=Item 12 Visible -InputSigType4027=Digital -InputCue4028=Item 13 Visible -InputSigType4028=Digital -InputCue4029=Item 14 Visible -InputSigType4029=Digital -InputCue4030=Item 15 Visible -InputSigType4030=Digital -InputCue4031=Item 16 Visible -InputSigType4031=Digital -InputCue4032=Item 17 Visible -InputSigType4032=Digital -InputCue4033=Item 18 Visible -InputSigType4033=Digital -InputCue4034=Item 19 Visible -InputSigType4034=Digital -InputCue4035=Item 20 Visible -InputSigType4035=Digital -InputCue4036=Item 21 Visible -InputSigType4036=Digital -InputCue4037=Item 22 Visible -InputSigType4037=Digital -InputCue4038=Item 23 Visible -InputSigType4038=Digital -InputCue4039=Item 24 Visible -InputSigType4039=Digital -InputCue4040=Item 25 Visible -InputSigType4040=Digital -InputCue4041=Item 26 Visible -InputSigType4041=Digital -InputCue4042=Item 27 Visible -InputSigType4042=Digital -InputCue4043=Item 28 Visible -InputSigType4043=Digital -InputCue4044=Item 29 Visible -InputSigType4044=Digital -InputCue4045=Item 30 Visible -InputSigType4045=Digital -InputCue4046=Item 31 Visible -InputSigType4046=Digital -InputCue4047=Item 32 Visible -InputSigType4047=Digital -InputCue4048=Item 33 Visible -InputSigType4048=Digital -InputCue4049=Item 34 Visible -InputSigType4049=Digital -InputCue4050=Item 35 Visible -InputSigType4050=Digital -InputCue4051=Item 36 Visible -InputSigType4051=Digital -InputCue4052=Item 37 Visible -InputSigType4052=Digital -InputCue4053=Item 38 Visible -InputSigType4053=Digital -InputCue4054=Item 39 Visible -InputSigType4054=Digital -InputCue4055=Item 40 Visible -InputSigType4055=Digital -InputCue4056=Item 41 Visible -InputSigType4056=Digital -InputCue4057=Item 42 Visible -InputSigType4057=Digital -InputCue4058=Item 43 Visible -InputSigType4058=Digital -InputCue4059=Item 44 Visible -InputSigType4059=Digital -InputCue4060=Item 45 Visible -InputSigType4060=Digital -InputCue4061=Item 46 Visible -InputSigType4061=Digital -InputCue4062=Item 47 Visible -InputSigType4062=Digital -InputCue4063=Item 48 Visible -InputSigType4063=Digital -InputCue4064=Item 49 Visible -InputSigType4064=Digital -InputCue4065=Item 50 Visible -InputSigType4065=Digital -InputCue4066=Item 51 Visible -InputSigType4066=Digital -InputCue4067=Item 52 Visible -InputSigType4067=Digital -InputCue4068=Item 53 Visible -InputSigType4068=Digital -InputCue4069=Item 54 Visible -InputSigType4069=Digital -InputCue4070=Item 55 Visible -InputSigType4070=Digital -InputCue4071=Item 56 Visible -InputSigType4071=Digital -InputCue4072=Item 57 Visible -InputSigType4072=Digital -InputCue4073=Item 58 Visible -InputSigType4073=Digital -InputCue4074=Item 59 Visible -InputSigType4074=Digital -InputCue4075=Item 60 Visible -InputSigType4075=Digital -InputCue4076=Item 61 Visible -InputSigType4076=Digital -InputCue4077=Item 62 Visible -InputSigType4077=Digital -InputCue4078=Item 63 Visible -InputSigType4078=Digital -InputCue4079=Item 64 Visible -InputSigType4079=Digital -InputCue4080=Item 65 Visible -InputSigType4080=Digital -InputCue4081=Item 66 Visible -InputSigType4081=Digital -InputCue4082=Item 67 Visible -InputSigType4082=Digital -InputCue4083=Item 68 Visible -InputSigType4083=Digital -InputCue4084=Item 69 Visible -InputSigType4084=Digital -InputCue4085=Item 70 Visible -InputSigType4085=Digital -InputCue4086=Item 71 Visible -InputSigType4086=Digital -InputCue4087=Item 72 Visible -InputSigType4087=Digital -InputCue4088=Item 73 Visible -InputSigType4088=Digital -InputCue4089=Item 74 Visible -InputSigType4089=Digital -InputCue4090=Item 75 Visible -InputSigType4090=Digital -InputCue4091=Item 76 Visible -InputSigType4091=Digital -InputCue4092=Item 77 Visible -InputSigType4092=Digital -InputCue4093=Item 78 Visible -InputSigType4093=Digital -InputCue4094=Item 79 Visible -InputSigType4094=Digital -InputCue4095=Item 80 Visible -InputSigType4095=Digital -InputCue4096=Item 81 Visible -InputSigType4096=Digital -InputCue4097=Item 82 Visible -InputSigType4097=Digital -InputCue4098=Item 83 Visible -InputSigType4098=Digital -InputCue4099=Item 84 Visible -InputSigType4099=Digital -InputCue4100=Item 85 Visible -InputSigType4100=Digital -InputCue4101=Item 86 Visible -InputSigType4101=Digital -InputCue4102=Item 87 Visible -InputSigType4102=Digital -InputCue4103=Item 88 Visible -InputSigType4103=Digital -InputCue4104=Item 89 Visible -InputSigType4104=Digital -InputCue4105=Item 90 Visible -InputSigType4105=Digital -InputCue4106=Item 91 Visible -InputSigType4106=Digital -InputCue4107=Item 92 Visible -InputSigType4107=Digital -InputCue4108=Item 93 Visible -InputSigType4108=Digital -InputCue4109=Item 94 Visible -InputSigType4109=Digital -InputCue4110=Item 95 Visible -InputSigType4110=Digital -InputCue4111=Item 96 Visible -InputSigType4111=Digital -InputCue4112=Item 97 Visible -InputSigType4112=Digital -InputCue4113=Item 98 Visible -InputSigType4113=Digital -InputCue4114=Item 99 Visible -InputSigType4114=Digital -InputCue4115=Item 100 Visible -InputSigType4115=Digital -InputCue4116=Item 101 Visible -InputSigType4116=Digital -InputCue4117=Item 102 Visible -InputSigType4117=Digital -InputCue4118=Item 103 Visible -InputSigType4118=Digital -InputCue4119=Item 104 Visible -InputSigType4119=Digital -InputCue4120=Item 105 Visible -InputSigType4120=Digital -InputCue4121=Item 106 Visible -InputSigType4121=Digital -InputCue4122=Item 107 Visible -InputSigType4122=Digital -InputCue4123=Item 108 Visible -InputSigType4123=Digital -InputCue4124=Item 109 Visible -InputSigType4124=Digital -InputCue4125=Item 110 Visible -InputSigType4125=Digital -InputCue4126=Item 111 Visible -InputSigType4126=Digital -InputCue4127=Item 112 Visible -InputSigType4127=Digital -InputCue4128=Item 113 Visible -InputSigType4128=Digital -InputCue4129=Item 114 Visible -InputSigType4129=Digital -InputCue4130=Item 115 Visible -InputSigType4130=Digital -InputCue4131=Item 116 Visible -InputSigType4131=Digital -InputCue4132=Item 117 Visible -InputSigType4132=Digital -InputCue4133=Item 118 Visible -InputSigType4133=Digital -InputCue4134=Item 119 Visible -InputSigType4134=Digital -InputCue4135=Item 120 Visible -InputSigType4135=Digital -InputCue4136=Item 121 Visible -InputSigType4136=Digital -InputCue4137=Item 122 Visible -InputSigType4137=Digital -InputCue4138=Item 123 Visible -InputSigType4138=Digital -InputCue4139=Item 124 Visible -InputSigType4139=Digital -InputCue4140=Item 125 Visible -InputSigType4140=Digital -InputCue4141=Item 126 Visible -InputSigType4141=Digital -InputCue4142=Item 127 Visible -InputSigType4142=Digital -InputCue4143=Item 128 Visible -InputSigType4143=Digital -InputCue4144=Item 129 Visible -InputSigType4144=Digital -InputCue4145=Item 130 Visible -InputSigType4145=Digital -InputCue4146=Item 131 Visible -InputSigType4146=Digital -InputCue4147=Item 132 Visible -InputSigType4147=Digital -InputCue4148=Item 133 Visible -InputSigType4148=Digital -InputCue4149=Item 134 Visible -InputSigType4149=Digital -InputCue4150=Item 135 Visible -InputSigType4150=Digital -InputCue4151=Item 136 Visible -InputSigType4151=Digital -InputCue4152=Item 137 Visible -InputSigType4152=Digital -InputCue4153=Item 138 Visible -InputSigType4153=Digital -InputCue4154=Item 139 Visible -InputSigType4154=Digital -InputCue4155=Item 140 Visible -InputSigType4155=Digital -InputCue4156=Item 141 Visible -InputSigType4156=Digital -InputCue4157=Item 142 Visible -InputSigType4157=Digital -InputCue4158=Item 143 Visible -InputSigType4158=Digital -InputCue4159=Item 144 Visible -InputSigType4159=Digital -InputCue4160=Item 145 Visible -InputSigType4160=Digital -InputCue4161=Item 146 Visible -InputSigType4161=Digital -InputCue4162=Item 147 Visible -InputSigType4162=Digital -InputCue4163=Item 148 Visible -InputSigType4163=Digital -InputCue4164=Item 149 Visible -InputSigType4164=Digital -InputCue4165=Item 150 Visible -InputSigType4165=Digital -InputCue4166=Item 151 Visible -InputSigType4166=Digital -InputCue4167=Item 152 Visible -InputSigType4167=Digital -InputCue4168=Item 153 Visible -InputSigType4168=Digital -InputCue4169=Item 154 Visible -InputSigType4169=Digital -InputCue4170=Item 155 Visible -InputSigType4170=Digital -InputCue4171=Item 156 Visible -InputSigType4171=Digital -InputCue4172=Item 157 Visible -InputSigType4172=Digital -InputCue4173=Item 158 Visible -InputSigType4173=Digital -InputCue4174=Item 159 Visible -InputSigType4174=Digital -InputCue4175=Item 160 Visible -InputSigType4175=Digital -InputCue4176=Item 161 Visible -InputSigType4176=Digital -InputCue4177=Item 162 Visible -InputSigType4177=Digital -InputCue4178=Item 163 Visible -InputSigType4178=Digital -InputCue4179=Item 164 Visible -InputSigType4179=Digital -InputCue4180=Item 165 Visible -InputSigType4180=Digital -InputCue4181=Item 166 Visible -InputSigType4181=Digital -InputCue4182=Item 167 Visible -InputSigType4182=Digital -InputCue4183=Item 168 Visible -InputSigType4183=Digital -InputCue4184=Item 169 Visible -InputSigType4184=Digital -InputCue4185=Item 170 Visible -InputSigType4185=Digital -InputCue4186=Item 171 Visible -InputSigType4186=Digital -InputCue4187=Item 172 Visible -InputSigType4187=Digital -InputCue4188=Item 173 Visible -InputSigType4188=Digital -InputCue4189=Item 174 Visible -InputSigType4189=Digital -InputCue4190=Item 175 Visible -InputSigType4190=Digital -InputCue4191=Item 176 Visible -InputSigType4191=Digital -InputCue4192=Item 177 Visible -InputSigType4192=Digital -InputCue4193=Item 178 Visible -InputSigType4193=Digital -InputCue4194=Item 179 Visible -InputSigType4194=Digital -InputCue4195=Item 180 Visible -InputSigType4195=Digital -InputCue4196=Item 181 Visible -InputSigType4196=Digital -InputCue4197=Item 182 Visible -InputSigType4197=Digital -InputCue4198=Item 183 Visible -InputSigType4198=Digital -InputCue4199=Item 184 Visible -InputSigType4199=Digital -InputCue4200=Item 185 Visible -InputSigType4200=Digital -InputCue4201=Item 186 Visible -InputSigType4201=Digital -InputCue4202=Item 187 Visible -InputSigType4202=Digital -InputCue4203=Item 188 Visible -InputSigType4203=Digital -InputCue4204=Item 189 Visible -InputSigType4204=Digital -InputCue4205=Item 190 Visible -InputSigType4205=Digital -InputCue4206=Item 191 Visible -InputSigType4206=Digital -InputCue4207=Item 192 Visible -InputSigType4207=Digital -InputCue4208=Item 193 Visible -InputSigType4208=Digital -InputCue4209=Item 194 Visible -InputSigType4209=Digital -InputCue4210=Item 195 Visible -InputSigType4210=Digital -InputCue4211=Item 196 Visible -InputSigType4211=Digital -InputCue4212=Item 197 Visible -InputSigType4212=Digital -InputCue4213=Item 198 Visible -InputSigType4213=Digital -InputCue4214=Item 199 Visible -InputSigType4214=Digital -InputCue4215=Item 200 Visible -InputSigType4215=Digital -InputCue4216=Item 201 Visible -InputSigType4216=Digital -InputCue4217=Item 202 Visible -InputSigType4217=Digital -InputCue4218=Item 203 Visible -InputSigType4218=Digital -InputCue4219=Item 204 Visible -InputSigType4219=Digital -InputCue4220=Item 205 Visible -InputSigType4220=Digital -InputCue4221=Item 206 Visible -InputSigType4221=Digital -InputCue4222=Item 207 Visible -InputSigType4222=Digital -InputCue4223=Item 208 Visible -InputSigType4223=Digital -InputCue4224=Item 209 Visible -InputSigType4224=Digital -InputCue4225=Item 210 Visible -InputSigType4225=Digital -InputCue4226=Item 211 Visible -InputSigType4226=Digital -InputCue4227=Item 212 Visible -InputSigType4227=Digital -InputCue4228=Item 213 Visible -InputSigType4228=Digital -InputCue4229=Item 214 Visible -InputSigType4229=Digital -InputCue4230=Item 215 Visible -InputSigType4230=Digital -InputCue4231=Item 216 Visible -InputSigType4231=Digital -InputCue4232=Item 217 Visible -InputSigType4232=Digital -InputCue4233=Item 218 Visible -InputSigType4233=Digital -InputCue4234=Item 219 Visible -InputSigType4234=Digital -InputCue4235=Item 220 Visible -InputSigType4235=Digital -InputCue4236=Item 221 Visible -InputSigType4236=Digital -InputCue4237=Item 222 Visible -InputSigType4237=Digital -InputCue4238=Item 223 Visible -InputSigType4238=Digital -InputCue4239=Item 224 Visible -InputSigType4239=Digital -InputCue4240=Item 225 Visible -InputSigType4240=Digital -InputCue4241=Item 226 Visible -InputSigType4241=Digital -InputCue4242=Item 227 Visible -InputSigType4242=Digital -InputCue4243=Item 228 Visible -InputSigType4243=Digital -InputCue4244=Item 229 Visible -InputSigType4244=Digital -InputCue4245=Item 230 Visible -InputSigType4245=Digital -InputCue4246=Item 231 Visible -InputSigType4246=Digital -InputCue4247=Item 232 Visible -InputSigType4247=Digital -InputCue4248=Item 233 Visible -InputSigType4248=Digital -InputCue4249=Item 234 Visible -InputSigType4249=Digital -InputCue4250=Item 235 Visible -InputSigType4250=Digital -InputCue4251=Item 236 Visible -InputSigType4251=Digital -InputCue4252=Item 237 Visible -InputSigType4252=Digital -InputCue4253=Item 238 Visible -InputSigType4253=Digital -InputCue4254=Item 239 Visible -InputSigType4254=Digital -InputCue4255=Item 240 Visible -InputSigType4255=Digital -InputCue4256=Item 241 Visible -InputSigType4256=Digital -InputCue4257=Item 242 Visible -InputSigType4257=Digital -InputCue4258=Item 243 Visible -InputSigType4258=Digital -InputCue4259=Item 244 Visible -InputSigType4259=Digital -InputCue4260=Item 245 Visible -InputSigType4260=Digital -InputCue4261=Item 246 Visible -InputSigType4261=Digital -InputCue4262=Item 247 Visible -InputSigType4262=Digital -InputCue4263=Item 248 Visible -InputSigType4263=Digital -InputCue4264=Item 249 Visible -InputSigType4264=Digital -InputCue4265=Item 250 Visible -InputSigType4265=Digital -InputCue4266=Item 251 Visible -InputSigType4266=Digital -InputCue4267=Item 252 Visible -InputSigType4267=Digital -InputCue4268=Item 253 Visible -InputSigType4268=Digital -InputCue4269=Item 254 Visible -InputSigType4269=Digital -InputCue4270=Item 255 Visible -InputSigType4270=Digital -InputCue4271=[~UNUSED2~] -InputSigType4271=Digital|Analog|Serial|String -InputCue6016=[~EndGroup~]Visible -InputSigType6016=Digital -OutputCue1=[~UNUSED3~] -OutputSigType1=Digital -OutputCue2=Is Moving -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~]Press -OutputSigType11=Digital -OutputCue12=Item 1 Pressed -OutputSigType12=Digital -OutputCue13=Item 2 Pressed -OutputSigType13=Digital -OutputCue14=Item 3 Pressed -OutputSigType14=Digital -OutputCue15=Item 4 Pressed -OutputSigType15=Digital -OutputCue16=Item 5 Pressed -OutputSigType16=Digital -OutputCue17=Item 6 Pressed -OutputSigType17=Digital -OutputCue18=Item 7 Pressed -OutputSigType18=Digital -OutputCue19=Item 8 Pressed -OutputSigType19=Digital -OutputCue20=Item 9 Pressed -OutputSigType20=Digital -OutputCue21=Item 10 Pressed -OutputSigType21=Digital -OutputCue22=Item 11 Pressed -OutputSigType22=Digital -OutputCue23=Item 12 Pressed -OutputSigType23=Digital -OutputCue24=Item 13 Pressed -OutputSigType24=Digital -OutputCue25=Item 14 Pressed -OutputSigType25=Digital -OutputCue26=Item 15 Pressed -OutputSigType26=Digital -OutputCue27=Item 16 Pressed -OutputSigType27=Digital -OutputCue28=Item 17 Pressed -OutputSigType28=Digital -OutputCue29=Item 18 Pressed -OutputSigType29=Digital -OutputCue30=Item 19 Pressed -OutputSigType30=Digital -OutputCue31=Item 20 Pressed -OutputSigType31=Digital -OutputCue32=Item 21 Pressed -OutputSigType32=Digital -OutputCue33=Item 22 Pressed -OutputSigType33=Digital -OutputCue34=Item 23 Pressed -OutputSigType34=Digital -OutputCue35=Item 24 Pressed -OutputSigType35=Digital -OutputCue36=Item 25 Pressed -OutputSigType36=Digital -OutputCue37=Item 26 Pressed -OutputSigType37=Digital -OutputCue38=Item 27 Pressed -OutputSigType38=Digital -OutputCue39=Item 28 Pressed -OutputSigType39=Digital -OutputCue40=Item 29 Pressed -OutputSigType40=Digital -OutputCue41=Item 30 Pressed -OutputSigType41=Digital -OutputCue42=Item 31 Pressed -OutputSigType42=Digital -OutputCue43=Item 32 Pressed -OutputSigType43=Digital -OutputCue44=Item 33 Pressed -OutputSigType44=Digital -OutputCue45=Item 34 Pressed -OutputSigType45=Digital -OutputCue46=Item 35 Pressed -OutputSigType46=Digital -OutputCue47=Item 36 Pressed -OutputSigType47=Digital -OutputCue48=Item 37 Pressed -OutputSigType48=Digital -OutputCue49=Item 38 Pressed -OutputSigType49=Digital -OutputCue50=Item 39 Pressed -OutputSigType50=Digital -OutputCue51=Item 40 Pressed -OutputSigType51=Digital -OutputCue52=Item 41 Pressed -OutputSigType52=Digital -OutputCue53=Item 42 Pressed -OutputSigType53=Digital -OutputCue54=Item 43 Pressed -OutputSigType54=Digital -OutputCue55=Item 44 Pressed -OutputSigType55=Digital -OutputCue56=Item 45 Pressed -OutputSigType56=Digital -OutputCue57=Item 46 Pressed -OutputSigType57=Digital -OutputCue58=Item 47 Pressed -OutputSigType58=Digital -OutputCue59=Item 48 Pressed -OutputSigType59=Digital -OutputCue60=Item 49 Pressed -OutputSigType60=Digital -OutputCue61=Item 50 Pressed -OutputSigType61=Digital -OutputCue62=Item 51 Pressed -OutputSigType62=Digital -OutputCue63=Item 52 Pressed -OutputSigType63=Digital -OutputCue64=Item 53 Pressed -OutputSigType64=Digital -OutputCue65=Item 54 Pressed -OutputSigType65=Digital -OutputCue66=Item 55 Pressed -OutputSigType66=Digital -OutputCue67=Item 56 Pressed -OutputSigType67=Digital -OutputCue68=Item 57 Pressed -OutputSigType68=Digital -OutputCue69=Item 58 Pressed -OutputSigType69=Digital -OutputCue70=Item 59 Pressed -OutputSigType70=Digital -OutputCue71=Item 60 Pressed -OutputSigType71=Digital -OutputCue72=Item 61 Pressed -OutputSigType72=Digital -OutputCue73=Item 62 Pressed -OutputSigType73=Digital -OutputCue74=Item 63 Pressed -OutputSigType74=Digital -OutputCue75=Item 64 Pressed -OutputSigType75=Digital -OutputCue76=Item 65 Pressed -OutputSigType76=Digital -OutputCue77=Item 66 Pressed -OutputSigType77=Digital -OutputCue78=Item 67 Pressed -OutputSigType78=Digital -OutputCue79=Item 68 Pressed -OutputSigType79=Digital -OutputCue80=Item 69 Pressed -OutputSigType80=Digital -OutputCue81=Item 70 Pressed -OutputSigType81=Digital -OutputCue82=Item 71 Pressed -OutputSigType82=Digital -OutputCue83=Item 72 Pressed -OutputSigType83=Digital -OutputCue84=Item 73 Pressed -OutputSigType84=Digital -OutputCue85=Item 74 Pressed -OutputSigType85=Digital -OutputCue86=Item 75 Pressed -OutputSigType86=Digital -OutputCue87=Item 76 Pressed -OutputSigType87=Digital -OutputCue88=Item 77 Pressed -OutputSigType88=Digital -OutputCue89=Item 78 Pressed -OutputSigType89=Digital -OutputCue90=Item 79 Pressed -OutputSigType90=Digital -OutputCue91=Item 80 Pressed -OutputSigType91=Digital -OutputCue92=Item 81 Pressed -OutputSigType92=Digital -OutputCue93=Item 82 Pressed -OutputSigType93=Digital -OutputCue94=Item 83 Pressed -OutputSigType94=Digital -OutputCue95=Item 84 Pressed -OutputSigType95=Digital -OutputCue96=Item 85 Pressed -OutputSigType96=Digital -OutputCue97=Item 86 Pressed -OutputSigType97=Digital -OutputCue98=Item 87 Pressed -OutputSigType98=Digital -OutputCue99=Item 88 Pressed -OutputSigType99=Digital -OutputCue100=Item 89 Pressed -OutputSigType100=Digital -OutputCue101=Item 90 Pressed -OutputSigType101=Digital -OutputCue102=Item 91 Pressed -OutputSigType102=Digital -OutputCue103=Item 92 Pressed -OutputSigType103=Digital -OutputCue104=Item 93 Pressed -OutputSigType104=Digital -OutputCue105=Item 94 Pressed -OutputSigType105=Digital -OutputCue106=Item 95 Pressed -OutputSigType106=Digital -OutputCue107=Item 96 Pressed -OutputSigType107=Digital -OutputCue108=Item 97 Pressed -OutputSigType108=Digital -OutputCue109=Item 98 Pressed -OutputSigType109=Digital -OutputCue110=Item 99 Pressed -OutputSigType110=Digital -OutputCue111=Item 100 Pressed -OutputSigType111=Digital -OutputCue112=Item 101 Pressed -OutputSigType112=Digital -OutputCue113=Item 102 Pressed -OutputSigType113=Digital -OutputCue114=Item 103 Pressed -OutputSigType114=Digital -OutputCue115=Item 104 Pressed -OutputSigType115=Digital -OutputCue116=Item 105 Pressed -OutputSigType116=Digital -OutputCue117=Item 106 Pressed -OutputSigType117=Digital -OutputCue118=Item 107 Pressed -OutputSigType118=Digital -OutputCue119=Item 108 Pressed -OutputSigType119=Digital -OutputCue120=Item 109 Pressed -OutputSigType120=Digital -OutputCue121=Item 110 Pressed -OutputSigType121=Digital -OutputCue122=Item 111 Pressed -OutputSigType122=Digital -OutputCue123=Item 112 Pressed -OutputSigType123=Digital -OutputCue124=Item 113 Pressed -OutputSigType124=Digital -OutputCue125=Item 114 Pressed -OutputSigType125=Digital -OutputCue126=Item 115 Pressed -OutputSigType126=Digital -OutputCue127=Item 116 Pressed -OutputSigType127=Digital -OutputCue128=Item 117 Pressed -OutputSigType128=Digital -OutputCue129=Item 118 Pressed -OutputSigType129=Digital -OutputCue130=Item 119 Pressed -OutputSigType130=Digital -OutputCue131=Item 120 Pressed -OutputSigType131=Digital -OutputCue132=Item 121 Pressed -OutputSigType132=Digital -OutputCue133=Item 122 Pressed -OutputSigType133=Digital -OutputCue134=Item 123 Pressed -OutputSigType134=Digital -OutputCue135=Item 124 Pressed -OutputSigType135=Digital -OutputCue136=Item 125 Pressed -OutputSigType136=Digital -OutputCue137=Item 126 Pressed -OutputSigType137=Digital -OutputCue138=Item 127 Pressed -OutputSigType138=Digital -OutputCue139=Item 128 Pressed -OutputSigType139=Digital -OutputCue140=Item 129 Pressed -OutputSigType140=Digital -OutputCue141=Item 130 Pressed -OutputSigType141=Digital -OutputCue142=Item 131 Pressed -OutputSigType142=Digital -OutputCue143=Item 132 Pressed -OutputSigType143=Digital -OutputCue144=Item 133 Pressed -OutputSigType144=Digital -OutputCue145=Item 134 Pressed -OutputSigType145=Digital -OutputCue146=Item 135 Pressed -OutputSigType146=Digital -OutputCue147=Item 136 Pressed -OutputSigType147=Digital -OutputCue148=Item 137 Pressed -OutputSigType148=Digital -OutputCue149=Item 138 Pressed -OutputSigType149=Digital -OutputCue150=Item 139 Pressed -OutputSigType150=Digital -OutputCue151=Item 140 Pressed -OutputSigType151=Digital -OutputCue152=Item 141 Pressed -OutputSigType152=Digital -OutputCue153=Item 142 Pressed -OutputSigType153=Digital -OutputCue154=Item 143 Pressed -OutputSigType154=Digital -OutputCue155=Item 144 Pressed -OutputSigType155=Digital -OutputCue156=Item 145 Pressed -OutputSigType156=Digital -OutputCue157=Item 146 Pressed -OutputSigType157=Digital -OutputCue158=Item 147 Pressed -OutputSigType158=Digital -OutputCue159=Item 148 Pressed -OutputSigType159=Digital -OutputCue160=Item 149 Pressed -OutputSigType160=Digital -OutputCue161=Item 150 Pressed -OutputSigType161=Digital -OutputCue162=Item 151 Pressed -OutputSigType162=Digital -OutputCue163=Item 152 Pressed -OutputSigType163=Digital -OutputCue164=Item 153 Pressed -OutputSigType164=Digital -OutputCue165=Item 154 Pressed -OutputSigType165=Digital -OutputCue166=Item 155 Pressed -OutputSigType166=Digital -OutputCue167=Item 156 Pressed -OutputSigType167=Digital -OutputCue168=Item 157 Pressed -OutputSigType168=Digital -OutputCue169=Item 158 Pressed -OutputSigType169=Digital -OutputCue170=Item 159 Pressed -OutputSigType170=Digital -OutputCue171=Item 160 Pressed -OutputSigType171=Digital -OutputCue172=Item 161 Pressed -OutputSigType172=Digital -OutputCue173=Item 162 Pressed -OutputSigType173=Digital -OutputCue174=Item 163 Pressed -OutputSigType174=Digital -OutputCue175=Item 164 Pressed -OutputSigType175=Digital -OutputCue176=Item 165 Pressed -OutputSigType176=Digital -OutputCue177=Item 166 Pressed -OutputSigType177=Digital -OutputCue178=Item 167 Pressed -OutputSigType178=Digital -OutputCue179=Item 168 Pressed -OutputSigType179=Digital -OutputCue180=Item 169 Pressed -OutputSigType180=Digital -OutputCue181=Item 170 Pressed -OutputSigType181=Digital -OutputCue182=Item 171 Pressed -OutputSigType182=Digital -OutputCue183=Item 172 Pressed -OutputSigType183=Digital -OutputCue184=Item 173 Pressed -OutputSigType184=Digital -OutputCue185=Item 174 Pressed -OutputSigType185=Digital -OutputCue186=Item 175 Pressed -OutputSigType186=Digital -OutputCue187=Item 176 Pressed -OutputSigType187=Digital -OutputCue188=Item 177 Pressed -OutputSigType188=Digital -OutputCue189=Item 178 Pressed -OutputSigType189=Digital -OutputCue190=Item 179 Pressed -OutputSigType190=Digital -OutputCue191=Item 180 Pressed -OutputSigType191=Digital -OutputCue192=Item 181 Pressed -OutputSigType192=Digital -OutputCue193=Item 182 Pressed -OutputSigType193=Digital -OutputCue194=Item 183 Pressed -OutputSigType194=Digital -OutputCue195=Item 184 Pressed -OutputSigType195=Digital -OutputCue196=Item 185 Pressed -OutputSigType196=Digital -OutputCue197=Item 186 Pressed -OutputSigType197=Digital -OutputCue198=Item 187 Pressed -OutputSigType198=Digital -OutputCue199=Item 188 Pressed -OutputSigType199=Digital -OutputCue200=Item 189 Pressed -OutputSigType200=Digital -OutputCue201=Item 190 Pressed -OutputSigType201=Digital -OutputCue202=Item 191 Pressed -OutputSigType202=Digital -OutputCue203=Item 192 Pressed -OutputSigType203=Digital -OutputCue204=Item 193 Pressed -OutputSigType204=Digital -OutputCue205=Item 194 Pressed -OutputSigType205=Digital -OutputCue206=Item 195 Pressed -OutputSigType206=Digital -OutputCue207=Item 196 Pressed -OutputSigType207=Digital -OutputCue208=Item 197 Pressed -OutputSigType208=Digital -OutputCue209=Item 198 Pressed -OutputSigType209=Digital -OutputCue210=Item 199 Pressed -OutputSigType210=Digital -OutputCue211=Item 200 Pressed -OutputSigType211=Digital -OutputCue212=Item 201 Pressed -OutputSigType212=Digital -OutputCue213=Item 202 Pressed -OutputSigType213=Digital -OutputCue214=Item 203 Pressed -OutputSigType214=Digital -OutputCue215=Item 204 Pressed -OutputSigType215=Digital -OutputCue216=Item 205 Pressed -OutputSigType216=Digital -OutputCue217=Item 206 Pressed -OutputSigType217=Digital -OutputCue218=Item 207 Pressed -OutputSigType218=Digital -OutputCue219=Item 208 Pressed -OutputSigType219=Digital -OutputCue220=Item 209 Pressed -OutputSigType220=Digital -OutputCue221=Item 210 Pressed -OutputSigType221=Digital -OutputCue222=Item 211 Pressed -OutputSigType222=Digital -OutputCue223=Item 212 Pressed -OutputSigType223=Digital -OutputCue224=Item 213 Pressed -OutputSigType224=Digital -OutputCue225=Item 214 Pressed -OutputSigType225=Digital -OutputCue226=Item 215 Pressed -OutputSigType226=Digital -OutputCue227=Item 216 Pressed -OutputSigType227=Digital -OutputCue228=Item 217 Pressed -OutputSigType228=Digital -OutputCue229=Item 218 Pressed -OutputSigType229=Digital -OutputCue230=Item 219 Pressed -OutputSigType230=Digital -OutputCue231=Item 220 Pressed -OutputSigType231=Digital -OutputCue232=Item 221 Pressed -OutputSigType232=Digital -OutputCue233=Item 222 Pressed -OutputSigType233=Digital -OutputCue234=Item 223 Pressed -OutputSigType234=Digital -OutputCue235=Item 224 Pressed -OutputSigType235=Digital -OutputCue236=Item 225 Pressed -OutputSigType236=Digital -OutputCue237=Item 226 Pressed -OutputSigType237=Digital -OutputCue238=Item 227 Pressed -OutputSigType238=Digital -OutputCue239=Item 228 Pressed -OutputSigType239=Digital -OutputCue240=Item 229 Pressed -OutputSigType240=Digital -OutputCue241=Item 230 Pressed -OutputSigType241=Digital -OutputCue242=Item 231 Pressed -OutputSigType242=Digital -OutputCue243=Item 232 Pressed -OutputSigType243=Digital -OutputCue244=Item 233 Pressed -OutputSigType244=Digital -OutputCue245=Item 234 Pressed -OutputSigType245=Digital -OutputCue246=Item 235 Pressed -OutputSigType246=Digital -OutputCue247=Item 236 Pressed -OutputSigType247=Digital -OutputCue248=Item 237 Pressed -OutputSigType248=Digital -OutputCue249=Item 238 Pressed -OutputSigType249=Digital -OutputCue250=Item 239 Pressed -OutputSigType250=Digital -OutputCue251=Item 240 Pressed -OutputSigType251=Digital -OutputCue252=Item 241 Pressed -OutputSigType252=Digital -OutputCue253=Item 242 Pressed -OutputSigType253=Digital -OutputCue254=Item 243 Pressed -OutputSigType254=Digital -OutputCue255=Item 244 Pressed -OutputSigType255=Digital -OutputCue256=Item 245 Pressed -OutputSigType256=Digital -OutputCue257=Item 246 Pressed -OutputSigType257=Digital -OutputCue258=Item 247 Pressed -OutputSigType258=Digital -OutputCue259=Item 248 Pressed -OutputSigType259=Digital -OutputCue260=Item 249 Pressed -OutputSigType260=Digital -OutputCue261=Item 250 Pressed -OutputSigType261=Digital -OutputCue262=Item 251 Pressed -OutputSigType262=Digital -OutputCue263=Item 252 Pressed -OutputSigType263=Digital -OutputCue264=Item 253 Pressed -OutputSigType264=Digital -OutputCue265=Item 254 Pressed -OutputSigType265=Digital -OutputCue266=Item 255 Pressed -OutputSigType266=Digital -OutputCue267=[~UNUSED2~] -OutputSigType267=Digital|Analog|Serial|String -OutputCue2012=[~EndGroup~]Press -OutputSigType2012=Digital -OutputCue2013=[~BeginGroup~]Enable -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=[~UNUSED3~] -OutputSigType2114=Digital -OutputCue2115=[~UNUSED3~] -OutputSigType2115=Digital -OutputCue2116=[~UNUSED3~] -OutputSigType2116=Digital -OutputCue2117=[~UNUSED3~] -OutputSigType2117=Digital -OutputCue2118=[~UNUSED3~] -OutputSigType2118=Digital -OutputCue2119=[~UNUSED3~] -OutputSigType2119=Digital -OutputCue2120=[~UNUSED3~] -OutputSigType2120=Digital -OutputCue2121=[~UNUSED3~] -OutputSigType2121=Digital -OutputCue2122=[~UNUSED3~] -OutputSigType2122=Digital -OutputCue2123=[~UNUSED3~] -OutputSigType2123=Digital -OutputCue2124=[~UNUSED3~] -OutputSigType2124=Digital -OutputCue2125=[~UNUSED3~] -OutputSigType2125=Digital -OutputCue2126=[~UNUSED3~] -OutputSigType2126=Digital -OutputCue2127=[~UNUSED3~] -OutputSigType2127=Digital -OutputCue2128=[~UNUSED3~] -OutputSigType2128=Digital -OutputCue2129=[~UNUSED3~] -OutputSigType2129=Digital -OutputCue2130=[~UNUSED3~] -OutputSigType2130=Digital -OutputCue2131=[~UNUSED3~] -OutputSigType2131=Digital -OutputCue2132=[~UNUSED3~] -OutputSigType2132=Digital -OutputCue2133=[~UNUSED3~] -OutputSigType2133=Digital -OutputCue2134=[~UNUSED3~] -OutputSigType2134=Digital -OutputCue2135=[~UNUSED3~] -OutputSigType2135=Digital -OutputCue2136=[~UNUSED3~] -OutputSigType2136=Digital -OutputCue2137=[~UNUSED3~] -OutputSigType2137=Digital -OutputCue2138=[~UNUSED3~] -OutputSigType2138=Digital -OutputCue2139=[~UNUSED3~] -OutputSigType2139=Digital -OutputCue2140=[~UNUSED3~] -OutputSigType2140=Digital -OutputCue2141=[~UNUSED3~] -OutputSigType2141=Digital -OutputCue2142=[~UNUSED3~] -OutputSigType2142=Digital -OutputCue2143=[~UNUSED3~] -OutputSigType2143=Digital -OutputCue2144=[~UNUSED3~] -OutputSigType2144=Digital -OutputCue2145=[~UNUSED3~] -OutputSigType2145=Digital -OutputCue2146=[~UNUSED3~] -OutputSigType2146=Digital -OutputCue2147=[~UNUSED3~] -OutputSigType2147=Digital -OutputCue2148=[~UNUSED3~] -OutputSigType2148=Digital -OutputCue2149=[~UNUSED3~] -OutputSigType2149=Digital -OutputCue2150=[~UNUSED3~] -OutputSigType2150=Digital -OutputCue2151=[~UNUSED3~] -OutputSigType2151=Digital -OutputCue2152=[~UNUSED3~] -OutputSigType2152=Digital -OutputCue2153=[~UNUSED3~] -OutputSigType2153=Digital -OutputCue2154=[~UNUSED3~] -OutputSigType2154=Digital -OutputCue2155=[~UNUSED3~] -OutputSigType2155=Digital -OutputCue2156=[~UNUSED3~] -OutputSigType2156=Digital -OutputCue2157=[~UNUSED3~] -OutputSigType2157=Digital -OutputCue2158=[~UNUSED3~] -OutputSigType2158=Digital -OutputCue2159=[~UNUSED3~] -OutputSigType2159=Digital -OutputCue2160=[~UNUSED3~] -OutputSigType2160=Digital -OutputCue2161=[~UNUSED3~] -OutputSigType2161=Digital -OutputCue2162=[~UNUSED3~] -OutputSigType2162=Digital -OutputCue2163=[~UNUSED3~] -OutputSigType2163=Digital -OutputCue2164=[~UNUSED3~] -OutputSigType2164=Digital -OutputCue2165=[~UNUSED3~] -OutputSigType2165=Digital -OutputCue2166=[~UNUSED3~] -OutputSigType2166=Digital -OutputCue2167=[~UNUSED3~] -OutputSigType2167=Digital -OutputCue2168=[~UNUSED3~] -OutputSigType2168=Digital -OutputCue2169=[~UNUSED3~] -OutputSigType2169=Digital -OutputCue2170=[~UNUSED3~] -OutputSigType2170=Digital -OutputCue2171=[~UNUSED3~] -OutputSigType2171=Digital -OutputCue2172=[~UNUSED3~] -OutputSigType2172=Digital -OutputCue2173=[~UNUSED3~] -OutputSigType2173=Digital -OutputCue2174=[~UNUSED3~] -OutputSigType2174=Digital -OutputCue2175=[~UNUSED3~] -OutputSigType2175=Digital -OutputCue2176=[~UNUSED3~] -OutputSigType2176=Digital -OutputCue2177=[~UNUSED3~] -OutputSigType2177=Digital -OutputCue2178=[~UNUSED3~] -OutputSigType2178=Digital -OutputCue2179=[~UNUSED3~] -OutputSigType2179=Digital -OutputCue2180=[~UNUSED3~] -OutputSigType2180=Digital -OutputCue2181=[~UNUSED3~] -OutputSigType2181=Digital -OutputCue2182=[~UNUSED3~] -OutputSigType2182=Digital -OutputCue2183=[~UNUSED3~] -OutputSigType2183=Digital -OutputCue2184=[~UNUSED3~] -OutputSigType2184=Digital -OutputCue2185=[~UNUSED3~] -OutputSigType2185=Digital -OutputCue2186=[~UNUSED3~] -OutputSigType2186=Digital -OutputCue2187=[~UNUSED3~] -OutputSigType2187=Digital -OutputCue2188=[~UNUSED3~] -OutputSigType2188=Digital -OutputCue2189=[~UNUSED3~] -OutputSigType2189=Digital -OutputCue2190=[~UNUSED3~] -OutputSigType2190=Digital -OutputCue2191=[~UNUSED3~] -OutputSigType2191=Digital -OutputCue2192=[~UNUSED3~] -OutputSigType2192=Digital -OutputCue2193=[~UNUSED3~] -OutputSigType2193=Digital -OutputCue2194=[~UNUSED3~] -OutputSigType2194=Digital -OutputCue2195=[~UNUSED3~] -OutputSigType2195=Digital -OutputCue2196=[~UNUSED3~] -OutputSigType2196=Digital -OutputCue2197=[~UNUSED3~] -OutputSigType2197=Digital -OutputCue2198=[~UNUSED3~] -OutputSigType2198=Digital -OutputCue2199=[~UNUSED3~] -OutputSigType2199=Digital -OutputCue2200=[~UNUSED3~] -OutputSigType2200=Digital -OutputCue2201=[~UNUSED3~] -OutputSigType2201=Digital -OutputCue2202=[~UNUSED3~] -OutputSigType2202=Digital -OutputCue2203=[~UNUSED3~] -OutputSigType2203=Digital -OutputCue2204=[~UNUSED3~] -OutputSigType2204=Digital -OutputCue2205=[~UNUSED3~] -OutputSigType2205=Digital -OutputCue2206=[~UNUSED3~] -OutputSigType2206=Digital -OutputCue2207=[~UNUSED3~] -OutputSigType2207=Digital -OutputCue2208=[~UNUSED3~] -OutputSigType2208=Digital -OutputCue2209=[~UNUSED3~] -OutputSigType2209=Digital -OutputCue2210=[~UNUSED3~] -OutputSigType2210=Digital -OutputCue2211=[~UNUSED3~] -OutputSigType2211=Digital -OutputCue2212=[~UNUSED3~] -OutputSigType2212=Digital -OutputCue2213=[~UNUSED3~] -OutputSigType2213=Digital -OutputCue2214=[~UNUSED3~] -OutputSigType2214=Digital -OutputCue2215=[~UNUSED3~] -OutputSigType2215=Digital -OutputCue2216=[~UNUSED3~] -OutputSigType2216=Digital -OutputCue2217=[~UNUSED3~] -OutputSigType2217=Digital -OutputCue2218=[~UNUSED3~] -OutputSigType2218=Digital -OutputCue2219=[~UNUSED3~] -OutputSigType2219=Digital -OutputCue2220=[~UNUSED3~] -OutputSigType2220=Digital -OutputCue2221=[~UNUSED3~] -OutputSigType2221=Digital -OutputCue2222=[~UNUSED3~] -OutputSigType2222=Digital -OutputCue2223=[~UNUSED3~] -OutputSigType2223=Digital -OutputCue2224=[~UNUSED3~] -OutputSigType2224=Digital -OutputCue2225=[~UNUSED3~] -OutputSigType2225=Digital -OutputCue2226=[~UNUSED3~] -OutputSigType2226=Digital -OutputCue2227=[~UNUSED3~] -OutputSigType2227=Digital -OutputCue2228=[~UNUSED3~] -OutputSigType2228=Digital -OutputCue2229=[~UNUSED3~] -OutputSigType2229=Digital -OutputCue2230=[~UNUSED3~] -OutputSigType2230=Digital -OutputCue2231=[~UNUSED3~] -OutputSigType2231=Digital -OutputCue2232=[~UNUSED3~] -OutputSigType2232=Digital -OutputCue2233=[~UNUSED3~] -OutputSigType2233=Digital -OutputCue2234=[~UNUSED3~] -OutputSigType2234=Digital -OutputCue2235=[~UNUSED3~] -OutputSigType2235=Digital -OutputCue2236=[~UNUSED3~] -OutputSigType2236=Digital -OutputCue2237=[~UNUSED3~] -OutputSigType2237=Digital -OutputCue2238=[~UNUSED3~] -OutputSigType2238=Digital -OutputCue2239=[~UNUSED3~] -OutputSigType2239=Digital -OutputCue2240=[~UNUSED3~] -OutputSigType2240=Digital -OutputCue2241=[~UNUSED3~] -OutputSigType2241=Digital -OutputCue2242=[~UNUSED3~] -OutputSigType2242=Digital -OutputCue2243=[~UNUSED3~] -OutputSigType2243=Digital -OutputCue2244=[~UNUSED3~] -OutputSigType2244=Digital -OutputCue2245=[~UNUSED3~] -OutputSigType2245=Digital -OutputCue2246=[~UNUSED3~] -OutputSigType2246=Digital -OutputCue2247=[~UNUSED3~] -OutputSigType2247=Digital -OutputCue2248=[~UNUSED3~] -OutputSigType2248=Digital -OutputCue2249=[~UNUSED3~] -OutputSigType2249=Digital -OutputCue2250=[~UNUSED3~] -OutputSigType2250=Digital -OutputCue2251=[~UNUSED3~] -OutputSigType2251=Digital -OutputCue2252=[~UNUSED3~] -OutputSigType2252=Digital -OutputCue2253=[~UNUSED3~] -OutputSigType2253=Digital -OutputCue2254=[~UNUSED3~] -OutputSigType2254=Digital -OutputCue2255=[~UNUSED3~] -OutputSigType2255=Digital -OutputCue2256=[~UNUSED3~] -OutputSigType2256=Digital -OutputCue2257=[~UNUSED3~] -OutputSigType2257=Digital -OutputCue2258=[~UNUSED3~] -OutputSigType2258=Digital -OutputCue2259=[~UNUSED3~] -OutputSigType2259=Digital -OutputCue2260=[~UNUSED3~] -OutputSigType2260=Digital -OutputCue2261=[~UNUSED3~] -OutputSigType2261=Digital -OutputCue2262=[~UNUSED3~] -OutputSigType2262=Digital -OutputCue2263=[~UNUSED3~] -OutputSigType2263=Digital -OutputCue2264=[~UNUSED3~] -OutputSigType2264=Digital -OutputCue2265=[~UNUSED3~] -OutputSigType2265=Digital -OutputCue2266=[~UNUSED3~] -OutputSigType2266=Digital -OutputCue2267=[~UNUSED3~] -OutputSigType2267=Digital -OutputCue2268=[~UNUSED3~] -OutputSigType2268=Digital -OutputCue2269=[~UNUSED2~] -OutputSigType2269=Digital|Analog|Serial|String -OutputCue4014=[~EndGroup~]Enable -OutputSigType4014=Digital -OutputCue4015=[~BeginGroup~]Visible -OutputSigType4015=Digital -OutputCue4016=[~UNUSED3~] -OutputSigType4016=Digital -OutputCue4017=[~UNUSED3~] -OutputSigType4017=Digital -OutputCue4018=[~UNUSED3~] -OutputSigType4018=Digital -OutputCue4019=[~UNUSED3~] -OutputSigType4019=Digital -OutputCue4020=[~UNUSED3~] -OutputSigType4020=Digital -OutputCue4021=[~UNUSED3~] -OutputSigType4021=Digital -OutputCue4022=[~UNUSED3~] -OutputSigType4022=Digital -OutputCue4023=[~UNUSED3~] -OutputSigType4023=Digital -OutputCue4024=[~UNUSED3~] -OutputSigType4024=Digital -OutputCue4025=[~UNUSED3~] -OutputSigType4025=Digital -OutputCue4026=[~UNUSED3~] -OutputSigType4026=Digital -OutputCue4027=[~UNUSED3~] -OutputSigType4027=Digital -OutputCue4028=[~UNUSED3~] -OutputSigType4028=Digital -OutputCue4029=[~UNUSED3~] -OutputSigType4029=Digital -OutputCue4030=[~UNUSED3~] -OutputSigType4030=Digital -OutputCue4031=[~UNUSED3~] -OutputSigType4031=Digital -OutputCue4032=[~UNUSED3~] -OutputSigType4032=Digital -OutputCue4033=[~UNUSED3~] -OutputSigType4033=Digital -OutputCue4034=[~UNUSED3~] -OutputSigType4034=Digital -OutputCue4035=[~UNUSED3~] -OutputSigType4035=Digital -OutputCue4036=[~UNUSED3~] -OutputSigType4036=Digital -OutputCue4037=[~UNUSED3~] -OutputSigType4037=Digital -OutputCue4038=[~UNUSED3~] -OutputSigType4038=Digital -OutputCue4039=[~UNUSED3~] -OutputSigType4039=Digital -OutputCue4040=[~UNUSED3~] -OutputSigType4040=Digital -OutputCue4041=[~UNUSED3~] -OutputSigType4041=Digital -OutputCue4042=[~UNUSED3~] -OutputSigType4042=Digital -OutputCue4043=[~UNUSED3~] -OutputSigType4043=Digital -OutputCue4044=[~UNUSED3~] -OutputSigType4044=Digital -OutputCue4045=[~UNUSED3~] -OutputSigType4045=Digital -OutputCue4046=[~UNUSED3~] -OutputSigType4046=Digital -OutputCue4047=[~UNUSED3~] -OutputSigType4047=Digital -OutputCue4048=[~UNUSED3~] -OutputSigType4048=Digital -OutputCue4049=[~UNUSED3~] -OutputSigType4049=Digital -OutputCue4050=[~UNUSED3~] -OutputSigType4050=Digital -OutputCue4051=[~UNUSED3~] -OutputSigType4051=Digital -OutputCue4052=[~UNUSED3~] -OutputSigType4052=Digital -OutputCue4053=[~UNUSED3~] -OutputSigType4053=Digital -OutputCue4054=[~UNUSED3~] -OutputSigType4054=Digital -OutputCue4055=[~UNUSED3~] -OutputSigType4055=Digital -OutputCue4056=[~UNUSED3~] -OutputSigType4056=Digital -OutputCue4057=[~UNUSED3~] -OutputSigType4057=Digital -OutputCue4058=[~UNUSED3~] -OutputSigType4058=Digital -OutputCue4059=[~UNUSED3~] -OutputSigType4059=Digital -OutputCue4060=[~UNUSED3~] -OutputSigType4060=Digital -OutputCue4061=[~UNUSED3~] -OutputSigType4061=Digital -OutputCue4062=[~UNUSED3~] -OutputSigType4062=Digital -OutputCue4063=[~UNUSED3~] -OutputSigType4063=Digital -OutputCue4064=[~UNUSED3~] -OutputSigType4064=Digital -OutputCue4065=[~UNUSED3~] -OutputSigType4065=Digital -OutputCue4066=[~UNUSED3~] -OutputSigType4066=Digital -OutputCue4067=[~UNUSED3~] -OutputSigType4067=Digital -OutputCue4068=[~UNUSED3~] -OutputSigType4068=Digital -OutputCue4069=[~UNUSED3~] -OutputSigType4069=Digital -OutputCue4070=[~UNUSED3~] -OutputSigType4070=Digital -OutputCue4071=[~UNUSED3~] -OutputSigType4071=Digital -OutputCue4072=[~UNUSED3~] -OutputSigType4072=Digital -OutputCue4073=[~UNUSED3~] -OutputSigType4073=Digital -OutputCue4074=[~UNUSED3~] -OutputSigType4074=Digital -OutputCue4075=[~UNUSED3~] -OutputSigType4075=Digital -OutputCue4076=[~UNUSED3~] -OutputSigType4076=Digital -OutputCue4077=[~UNUSED3~] -OutputSigType4077=Digital -OutputCue4078=[~UNUSED3~] -OutputSigType4078=Digital -OutputCue4079=[~UNUSED3~] -OutputSigType4079=Digital -OutputCue4080=[~UNUSED3~] -OutputSigType4080=Digital -OutputCue4081=[~UNUSED3~] -OutputSigType4081=Digital -OutputCue4082=[~UNUSED3~] -OutputSigType4082=Digital -OutputCue4083=[~UNUSED3~] -OutputSigType4083=Digital -OutputCue4084=[~UNUSED3~] -OutputSigType4084=Digital -OutputCue4085=[~UNUSED3~] -OutputSigType4085=Digital -OutputCue4086=[~UNUSED3~] -OutputSigType4086=Digital -OutputCue4087=[~UNUSED3~] -OutputSigType4087=Digital -OutputCue4088=[~UNUSED3~] -OutputSigType4088=Digital -OutputCue4089=[~UNUSED3~] -OutputSigType4089=Digital -OutputCue4090=[~UNUSED3~] -OutputSigType4090=Digital -OutputCue4091=[~UNUSED3~] -OutputSigType4091=Digital -OutputCue4092=[~UNUSED3~] -OutputSigType4092=Digital -OutputCue4093=[~UNUSED3~] -OutputSigType4093=Digital -OutputCue4094=[~UNUSED3~] -OutputSigType4094=Digital -OutputCue4095=[~UNUSED3~] -OutputSigType4095=Digital -OutputCue4096=[~UNUSED3~] -OutputSigType4096=Digital -OutputCue4097=[~UNUSED3~] -OutputSigType4097=Digital -OutputCue4098=[~UNUSED3~] -OutputSigType4098=Digital -OutputCue4099=[~UNUSED3~] -OutputSigType4099=Digital -OutputCue4100=[~UNUSED3~] -OutputSigType4100=Digital -OutputCue4101=[~UNUSED3~] -OutputSigType4101=Digital -OutputCue4102=[~UNUSED3~] -OutputSigType4102=Digital -OutputCue4103=[~UNUSED3~] -OutputSigType4103=Digital -OutputCue4104=[~UNUSED3~] -OutputSigType4104=Digital -OutputCue4105=[~UNUSED3~] -OutputSigType4105=Digital -OutputCue4106=[~UNUSED3~] -OutputSigType4106=Digital -OutputCue4107=[~UNUSED3~] -OutputSigType4107=Digital -OutputCue4108=[~UNUSED3~] -OutputSigType4108=Digital -OutputCue4109=[~UNUSED3~] -OutputSigType4109=Digital -OutputCue4110=[~UNUSED3~] -OutputSigType4110=Digital -OutputCue4111=[~UNUSED3~] -OutputSigType4111=Digital -OutputCue4112=[~UNUSED3~] -OutputSigType4112=Digital -OutputCue4113=[~UNUSED3~] -OutputSigType4113=Digital -OutputCue4114=[~UNUSED3~] -OutputSigType4114=Digital -OutputCue4115=[~UNUSED3~] -OutputSigType4115=Digital -OutputCue4116=[~UNUSED3~] -OutputSigType4116=Digital -OutputCue4117=[~UNUSED3~] -OutputSigType4117=Digital -OutputCue4118=[~UNUSED3~] -OutputSigType4118=Digital -OutputCue4119=[~UNUSED3~] -OutputSigType4119=Digital -OutputCue4120=[~UNUSED3~] -OutputSigType4120=Digital -OutputCue4121=[~UNUSED3~] -OutputSigType4121=Digital -OutputCue4122=[~UNUSED3~] -OutputSigType4122=Digital -OutputCue4123=[~UNUSED3~] -OutputSigType4123=Digital -OutputCue4124=[~UNUSED3~] -OutputSigType4124=Digital -OutputCue4125=[~UNUSED3~] -OutputSigType4125=Digital -OutputCue4126=[~UNUSED3~] -OutputSigType4126=Digital -OutputCue4127=[~UNUSED3~] -OutputSigType4127=Digital -OutputCue4128=[~UNUSED3~] -OutputSigType4128=Digital -OutputCue4129=[~UNUSED3~] -OutputSigType4129=Digital -OutputCue4130=[~UNUSED3~] -OutputSigType4130=Digital -OutputCue4131=[~UNUSED3~] -OutputSigType4131=Digital -OutputCue4132=[~UNUSED3~] -OutputSigType4132=Digital -OutputCue4133=[~UNUSED3~] -OutputSigType4133=Digital -OutputCue4134=[~UNUSED3~] -OutputSigType4134=Digital -OutputCue4135=[~UNUSED3~] -OutputSigType4135=Digital -OutputCue4136=[~UNUSED3~] -OutputSigType4136=Digital -OutputCue4137=[~UNUSED3~] -OutputSigType4137=Digital -OutputCue4138=[~UNUSED3~] -OutputSigType4138=Digital -OutputCue4139=[~UNUSED3~] -OutputSigType4139=Digital -OutputCue4140=[~UNUSED3~] -OutputSigType4140=Digital -OutputCue4141=[~UNUSED3~] -OutputSigType4141=Digital -OutputCue4142=[~UNUSED3~] -OutputSigType4142=Digital -OutputCue4143=[~UNUSED3~] -OutputSigType4143=Digital -OutputCue4144=[~UNUSED3~] -OutputSigType4144=Digital -OutputCue4145=[~UNUSED3~] -OutputSigType4145=Digital -OutputCue4146=[~UNUSED3~] -OutputSigType4146=Digital -OutputCue4147=[~UNUSED3~] -OutputSigType4147=Digital -OutputCue4148=[~UNUSED3~] -OutputSigType4148=Digital -OutputCue4149=[~UNUSED3~] -OutputSigType4149=Digital -OutputCue4150=[~UNUSED3~] -OutputSigType4150=Digital -OutputCue4151=[~UNUSED3~] -OutputSigType4151=Digital -OutputCue4152=[~UNUSED3~] -OutputSigType4152=Digital -OutputCue4153=[~UNUSED3~] -OutputSigType4153=Digital -OutputCue4154=[~UNUSED3~] -OutputSigType4154=Digital -OutputCue4155=[~UNUSED3~] -OutputSigType4155=Digital -OutputCue4156=[~UNUSED3~] -OutputSigType4156=Digital -OutputCue4157=[~UNUSED3~] -OutputSigType4157=Digital -OutputCue4158=[~UNUSED3~] -OutputSigType4158=Digital -OutputCue4159=[~UNUSED3~] -OutputSigType4159=Digital -OutputCue4160=[~UNUSED3~] -OutputSigType4160=Digital -OutputCue4161=[~UNUSED3~] -OutputSigType4161=Digital -OutputCue4162=[~UNUSED3~] -OutputSigType4162=Digital -OutputCue4163=[~UNUSED3~] -OutputSigType4163=Digital -OutputCue4164=[~UNUSED3~] -OutputSigType4164=Digital -OutputCue4165=[~UNUSED3~] -OutputSigType4165=Digital -OutputCue4166=[~UNUSED3~] -OutputSigType4166=Digital -OutputCue4167=[~UNUSED3~] -OutputSigType4167=Digital -OutputCue4168=[~UNUSED3~] -OutputSigType4168=Digital -OutputCue4169=[~UNUSED3~] -OutputSigType4169=Digital -OutputCue4170=[~UNUSED3~] -OutputSigType4170=Digital -OutputCue4171=[~UNUSED3~] -OutputSigType4171=Digital -OutputCue4172=[~UNUSED3~] -OutputSigType4172=Digital -OutputCue4173=[~UNUSED3~] -OutputSigType4173=Digital -OutputCue4174=[~UNUSED3~] -OutputSigType4174=Digital -OutputCue4175=[~UNUSED3~] -OutputSigType4175=Digital -OutputCue4176=[~UNUSED3~] -OutputSigType4176=Digital -OutputCue4177=[~UNUSED3~] -OutputSigType4177=Digital -OutputCue4178=[~UNUSED3~] -OutputSigType4178=Digital -OutputCue4179=[~UNUSED3~] -OutputSigType4179=Digital -OutputCue4180=[~UNUSED3~] -OutputSigType4180=Digital -OutputCue4181=[~UNUSED3~] -OutputSigType4181=Digital -OutputCue4182=[~UNUSED3~] -OutputSigType4182=Digital -OutputCue4183=[~UNUSED3~] -OutputSigType4183=Digital -OutputCue4184=[~UNUSED3~] -OutputSigType4184=Digital -OutputCue4185=[~UNUSED3~] -OutputSigType4185=Digital -OutputCue4186=[~UNUSED3~] -OutputSigType4186=Digital -OutputCue4187=[~UNUSED3~] -OutputSigType4187=Digital -OutputCue4188=[~UNUSED3~] -OutputSigType4188=Digital -OutputCue4189=[~UNUSED3~] -OutputSigType4189=Digital -OutputCue4190=[~UNUSED3~] -OutputSigType4190=Digital -OutputCue4191=[~UNUSED3~] -OutputSigType4191=Digital -OutputCue4192=[~UNUSED3~] -OutputSigType4192=Digital -OutputCue4193=[~UNUSED3~] -OutputSigType4193=Digital -OutputCue4194=[~UNUSED3~] -OutputSigType4194=Digital -OutputCue4195=[~UNUSED3~] -OutputSigType4195=Digital -OutputCue4196=[~UNUSED3~] -OutputSigType4196=Digital -OutputCue4197=[~UNUSED3~] -OutputSigType4197=Digital -OutputCue4198=[~UNUSED3~] -OutputSigType4198=Digital -OutputCue4199=[~UNUSED3~] -OutputSigType4199=Digital -OutputCue4200=[~UNUSED3~] -OutputSigType4200=Digital -OutputCue4201=[~UNUSED3~] -OutputSigType4201=Digital -OutputCue4202=[~UNUSED3~] -OutputSigType4202=Digital -OutputCue4203=[~UNUSED3~] -OutputSigType4203=Digital -OutputCue4204=[~UNUSED3~] -OutputSigType4204=Digital -OutputCue4205=[~UNUSED3~] -OutputSigType4205=Digital -OutputCue4206=[~UNUSED3~] -OutputSigType4206=Digital -OutputCue4207=[~UNUSED3~] -OutputSigType4207=Digital -OutputCue4208=[~UNUSED3~] -OutputSigType4208=Digital -OutputCue4209=[~UNUSED3~] -OutputSigType4209=Digital -OutputCue4210=[~UNUSED3~] -OutputSigType4210=Digital -OutputCue4211=[~UNUSED3~] -OutputSigType4211=Digital -OutputCue4212=[~UNUSED3~] -OutputSigType4212=Digital -OutputCue4213=[~UNUSED3~] -OutputSigType4213=Digital -OutputCue4214=[~UNUSED3~] -OutputSigType4214=Digital -OutputCue4215=[~UNUSED3~] -OutputSigType4215=Digital -OutputCue4216=[~UNUSED3~] -OutputSigType4216=Digital -OutputCue4217=[~UNUSED3~] -OutputSigType4217=Digital -OutputCue4218=[~UNUSED3~] -OutputSigType4218=Digital -OutputCue4219=[~UNUSED3~] -OutputSigType4219=Digital -OutputCue4220=[~UNUSED3~] -OutputSigType4220=Digital -OutputCue4221=[~UNUSED3~] -OutputSigType4221=Digital -OutputCue4222=[~UNUSED3~] -OutputSigType4222=Digital -OutputCue4223=[~UNUSED3~] -OutputSigType4223=Digital -OutputCue4224=[~UNUSED3~] -OutputSigType4224=Digital -OutputCue4225=[~UNUSED3~] -OutputSigType4225=Digital -OutputCue4226=[~UNUSED3~] -OutputSigType4226=Digital -OutputCue4227=[~UNUSED3~] -OutputSigType4227=Digital -OutputCue4228=[~UNUSED3~] -OutputSigType4228=Digital -OutputCue4229=[~UNUSED3~] -OutputSigType4229=Digital -OutputCue4230=[~UNUSED3~] -OutputSigType4230=Digital -OutputCue4231=[~UNUSED3~] -OutputSigType4231=Digital -OutputCue4232=[~UNUSED3~] -OutputSigType4232=Digital -OutputCue4233=[~UNUSED3~] -OutputSigType4233=Digital -OutputCue4234=[~UNUSED3~] -OutputSigType4234=Digital -OutputCue4235=[~UNUSED3~] -OutputSigType4235=Digital -OutputCue4236=[~UNUSED3~] -OutputSigType4236=Digital -OutputCue4237=[~UNUSED3~] -OutputSigType4237=Digital -OutputCue4238=[~UNUSED3~] -OutputSigType4238=Digital -OutputCue4239=[~UNUSED3~] -OutputSigType4239=Digital -OutputCue4240=[~UNUSED3~] -OutputSigType4240=Digital -OutputCue4241=[~UNUSED3~] -OutputSigType4241=Digital -OutputCue4242=[~UNUSED3~] -OutputSigType4242=Digital -OutputCue4243=[~UNUSED3~] -OutputSigType4243=Digital -OutputCue4244=[~UNUSED3~] -OutputSigType4244=Digital -OutputCue4245=[~UNUSED3~] -OutputSigType4245=Digital -OutputCue4246=[~UNUSED3~] -OutputSigType4246=Digital -OutputCue4247=[~UNUSED3~] -OutputSigType4247=Digital -OutputCue4248=[~UNUSED3~] -OutputSigType4248=Digital -OutputCue4249=[~UNUSED3~] -OutputSigType4249=Digital -OutputCue4250=[~UNUSED3~] -OutputSigType4250=Digital -OutputCue4251=[~UNUSED3~] -OutputSigType4251=Digital -OutputCue4252=[~UNUSED3~] -OutputSigType4252=Digital -OutputCue4253=[~UNUSED3~] -OutputSigType4253=Digital -OutputCue4254=[~UNUSED3~] -OutputSigType4254=Digital -OutputCue4255=[~UNUSED3~] -OutputSigType4255=Digital -OutputCue4256=[~UNUSED3~] -OutputSigType4256=Digital -OutputCue4257=[~UNUSED3~] -OutputSigType4257=Digital -OutputCue4258=[~UNUSED3~] -OutputSigType4258=Digital -OutputCue4259=[~UNUSED3~] -OutputSigType4259=Digital -OutputCue4260=[~UNUSED3~] -OutputSigType4260=Digital -OutputCue4261=[~UNUSED3~] -OutputSigType4261=Digital -OutputCue4262=[~UNUSED3~] -OutputSigType4262=Digital -OutputCue4263=[~UNUSED3~] -OutputSigType4263=Digital -OutputCue4264=[~UNUSED3~] -OutputSigType4264=Digital -OutputCue4265=[~UNUSED3~] -OutputSigType4265=Digital -OutputCue4266=[~UNUSED3~] -OutputSigType4266=Digital -OutputCue4267=[~UNUSED3~] -OutputSigType4267=Digital -OutputCue4268=[~UNUSED3~] -OutputSigType4268=Digital -OutputCue4269=[~UNUSED3~] -OutputSigType4269=Digital -OutputCue4270=[~UNUSED3~] -OutputSigType4270=Digital -OutputCue4271=[~UNUSED2~] -OutputSigType4271=Digital|Analog|Serial|String -OutputCue6016=[~EndGroup~]Visible -OutputSigType6016=Digital -InputList2Cue1=[~UNUSED3~] -InputList2SigType1=Analog -InputList2Cue2=[~UNUSED3~] -InputList2SigType2=Analog -InputList2Cue3=Scroll To Item -InputList2SigType3=Analog -InputList2Cue4=Set Number of Items -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~]Item Icons -InputList2SigType11=Analog -InputList2Cue12=Set Item 1 Icon Analog -InputList2SigType12=Analog -InputList2Cue13=Set Item 2 Icon Analog -InputList2SigType13=Analog -InputList2Cue14=Set Item 3 Icon Analog -InputList2SigType14=Analog -InputList2Cue15=Set Item 4 Icon Analog -InputList2SigType15=Analog -InputList2Cue16=Set Item 5 Icon Analog -InputList2SigType16=Analog -InputList2Cue17=Set Item 6 Icon Analog -InputList2SigType17=Analog -InputList2Cue18=Set Item 7 Icon Analog -InputList2SigType18=Analog -InputList2Cue19=Set Item 8 Icon Analog -InputList2SigType19=Analog -InputList2Cue20=Set Item 9 Icon Analog -InputList2SigType20=Analog -InputList2Cue21=Set Item 10 Icon Analog -InputList2SigType21=Analog -InputList2Cue22=Set Item 11 Icon Analog -InputList2SigType22=Analog -InputList2Cue23=Set Item 12 Icon Analog -InputList2SigType23=Analog -InputList2Cue24=Set Item 13 Icon Analog -InputList2SigType24=Analog -InputList2Cue25=Set Item 14 Icon Analog -InputList2SigType25=Analog -InputList2Cue26=Set Item 15 Icon Analog -InputList2SigType26=Analog -InputList2Cue27=Set Item 16 Icon Analog -InputList2SigType27=Analog -InputList2Cue28=Set Item 17 Icon Analog -InputList2SigType28=Analog -InputList2Cue29=Set Item 18 Icon Analog -InputList2SigType29=Analog -InputList2Cue30=Set Item 19 Icon Analog -InputList2SigType30=Analog -InputList2Cue31=Set Item 20 Icon Analog -InputList2SigType31=Analog -InputList2Cue32=Set Item 21 Icon Analog -InputList2SigType32=Analog -InputList2Cue33=Set Item 22 Icon Analog -InputList2SigType33=Analog -InputList2Cue34=Set Item 23 Icon Analog -InputList2SigType34=Analog -InputList2Cue35=Set Item 24 Icon Analog -InputList2SigType35=Analog -InputList2Cue36=Set Item 25 Icon Analog -InputList2SigType36=Analog -InputList2Cue37=Set Item 26 Icon Analog -InputList2SigType37=Analog -InputList2Cue38=Set Item 27 Icon Analog -InputList2SigType38=Analog -InputList2Cue39=Set Item 28 Icon Analog -InputList2SigType39=Analog -InputList2Cue40=Set Item 29 Icon Analog -InputList2SigType40=Analog -InputList2Cue41=Set Item 30 Icon Analog -InputList2SigType41=Analog -InputList2Cue42=Set Item 31 Icon Analog -InputList2SigType42=Analog -InputList2Cue43=Set Item 32 Icon Analog -InputList2SigType43=Analog -InputList2Cue44=Set Item 33 Icon Analog -InputList2SigType44=Analog -InputList2Cue45=Set Item 34 Icon Analog -InputList2SigType45=Analog -InputList2Cue46=Set Item 35 Icon Analog -InputList2SigType46=Analog -InputList2Cue47=Set Item 36 Icon Analog -InputList2SigType47=Analog -InputList2Cue48=Set Item 37 Icon Analog -InputList2SigType48=Analog -InputList2Cue49=Set Item 38 Icon Analog -InputList2SigType49=Analog -InputList2Cue50=Set Item 39 Icon Analog -InputList2SigType50=Analog -InputList2Cue51=Set Item 40 Icon Analog -InputList2SigType51=Analog -InputList2Cue52=Set Item 41 Icon Analog -InputList2SigType52=Analog -InputList2Cue53=Set Item 42 Icon Analog -InputList2SigType53=Analog -InputList2Cue54=Set Item 43 Icon Analog -InputList2SigType54=Analog -InputList2Cue55=Set Item 44 Icon Analog -InputList2SigType55=Analog -InputList2Cue56=Set Item 45 Icon Analog -InputList2SigType56=Analog -InputList2Cue57=Set Item 46 Icon Analog -InputList2SigType57=Analog -InputList2Cue58=Set Item 47 Icon Analog -InputList2SigType58=Analog -InputList2Cue59=Set Item 48 Icon Analog -InputList2SigType59=Analog -InputList2Cue60=Set Item 49 Icon Analog -InputList2SigType60=Analog -InputList2Cue61=Set Item 50 Icon Analog -InputList2SigType61=Analog -InputList2Cue62=Set Item 51 Icon Analog -InputList2SigType62=Analog -InputList2Cue63=Set Item 52 Icon Analog -InputList2SigType63=Analog -InputList2Cue64=Set Item 53 Icon Analog -InputList2SigType64=Analog -InputList2Cue65=Set Item 54 Icon Analog -InputList2SigType65=Analog -InputList2Cue66=Set Item 55 Icon Analog -InputList2SigType66=Analog -InputList2Cue67=Set Item 56 Icon Analog -InputList2SigType67=Analog -InputList2Cue68=Set Item 57 Icon Analog -InputList2SigType68=Analog -InputList2Cue69=Set Item 58 Icon Analog -InputList2SigType69=Analog -InputList2Cue70=Set Item 59 Icon Analog -InputList2SigType70=Analog -InputList2Cue71=Set Item 60 Icon Analog -InputList2SigType71=Analog -InputList2Cue72=Set Item 61 Icon Analog -InputList2SigType72=Analog -InputList2Cue73=Set Item 62 Icon Analog -InputList2SigType73=Analog -InputList2Cue74=Set Item 63 Icon Analog -InputList2SigType74=Analog -InputList2Cue75=Set Item 64 Icon Analog -InputList2SigType75=Analog -InputList2Cue76=Set Item 65 Icon Analog -InputList2SigType76=Analog -InputList2Cue77=Set Item 66 Icon Analog -InputList2SigType77=Analog -InputList2Cue78=Set Item 67 Icon Analog -InputList2SigType78=Analog -InputList2Cue79=Set Item 68 Icon Analog -InputList2SigType79=Analog -InputList2Cue80=Set Item 69 Icon Analog -InputList2SigType80=Analog -InputList2Cue81=Set Item 70 Icon Analog -InputList2SigType81=Analog -InputList2Cue82=Set Item 71 Icon Analog -InputList2SigType82=Analog -InputList2Cue83=Set Item 72 Icon Analog -InputList2SigType83=Analog -InputList2Cue84=Set Item 73 Icon Analog -InputList2SigType84=Analog -InputList2Cue85=Set Item 74 Icon Analog -InputList2SigType85=Analog -InputList2Cue86=Set Item 75 Icon Analog -InputList2SigType86=Analog -InputList2Cue87=Set Item 76 Icon Analog -InputList2SigType87=Analog -InputList2Cue88=Set Item 77 Icon Analog -InputList2SigType88=Analog -InputList2Cue89=Set Item 78 Icon Analog -InputList2SigType89=Analog -InputList2Cue90=Set Item 79 Icon Analog -InputList2SigType90=Analog -InputList2Cue91=Set Item 80 Icon Analog -InputList2SigType91=Analog -InputList2Cue92=Set Item 81 Icon Analog -InputList2SigType92=Analog -InputList2Cue93=Set Item 82 Icon Analog -InputList2SigType93=Analog -InputList2Cue94=Set Item 83 Icon Analog -InputList2SigType94=Analog -InputList2Cue95=Set Item 84 Icon Analog -InputList2SigType95=Analog -InputList2Cue96=Set Item 85 Icon Analog -InputList2SigType96=Analog -InputList2Cue97=Set Item 86 Icon Analog -InputList2SigType97=Analog -InputList2Cue98=Set Item 87 Icon Analog -InputList2SigType98=Analog -InputList2Cue99=Set Item 88 Icon Analog -InputList2SigType99=Analog -InputList2Cue100=Set Item 89 Icon Analog -InputList2SigType100=Analog -InputList2Cue101=Set Item 90 Icon Analog -InputList2SigType101=Analog -InputList2Cue102=Set Item 91 Icon Analog -InputList2SigType102=Analog -InputList2Cue103=Set Item 92 Icon Analog -InputList2SigType103=Analog -InputList2Cue104=Set Item 93 Icon Analog -InputList2SigType104=Analog -InputList2Cue105=Set Item 94 Icon Analog -InputList2SigType105=Analog -InputList2Cue106=Set Item 95 Icon Analog -InputList2SigType106=Analog -InputList2Cue107=Set Item 96 Icon Analog -InputList2SigType107=Analog -InputList2Cue108=Set Item 97 Icon Analog -InputList2SigType108=Analog -InputList2Cue109=Set Item 98 Icon Analog -InputList2SigType109=Analog -InputList2Cue110=Set Item 99 Icon Analog -InputList2SigType110=Analog -InputList2Cue111=Set Item 100 Icon Analog -InputList2SigType111=Analog -InputList2Cue112=Set Item 101 Icon Analog -InputList2SigType112=Analog -InputList2Cue113=Set Item 102 Icon Analog -InputList2SigType113=Analog -InputList2Cue114=Set Item 103 Icon Analog -InputList2SigType114=Analog -InputList2Cue115=Set Item 104 Icon Analog -InputList2SigType115=Analog -InputList2Cue116=Set Item 105 Icon Analog -InputList2SigType116=Analog -InputList2Cue117=Set Item 106 Icon Analog -InputList2SigType117=Analog -InputList2Cue118=Set Item 107 Icon Analog -InputList2SigType118=Analog -InputList2Cue119=Set Item 108 Icon Analog -InputList2SigType119=Analog -InputList2Cue120=Set Item 109 Icon Analog -InputList2SigType120=Analog -InputList2Cue121=Set Item 110 Icon Analog -InputList2SigType121=Analog -InputList2Cue122=Set Item 111 Icon Analog -InputList2SigType122=Analog -InputList2Cue123=Set Item 112 Icon Analog -InputList2SigType123=Analog -InputList2Cue124=Set Item 113 Icon Analog -InputList2SigType124=Analog -InputList2Cue125=Set Item 114 Icon Analog -InputList2SigType125=Analog -InputList2Cue126=Set Item 115 Icon Analog -InputList2SigType126=Analog -InputList2Cue127=Set Item 116 Icon Analog -InputList2SigType127=Analog -InputList2Cue128=Set Item 117 Icon Analog -InputList2SigType128=Analog -InputList2Cue129=Set Item 118 Icon Analog -InputList2SigType129=Analog -InputList2Cue130=Set Item 119 Icon Analog -InputList2SigType130=Analog -InputList2Cue131=Set Item 120 Icon Analog -InputList2SigType131=Analog -InputList2Cue132=Set Item 121 Icon Analog -InputList2SigType132=Analog -InputList2Cue133=Set Item 122 Icon Analog -InputList2SigType133=Analog -InputList2Cue134=Set Item 123 Icon Analog -InputList2SigType134=Analog -InputList2Cue135=Set Item 124 Icon Analog -InputList2SigType135=Analog -InputList2Cue136=Set Item 125 Icon Analog -InputList2SigType136=Analog -InputList2Cue137=Set Item 126 Icon Analog -InputList2SigType137=Analog -InputList2Cue138=Set Item 127 Icon Analog -InputList2SigType138=Analog -InputList2Cue139=Set Item 128 Icon Analog -InputList2SigType139=Analog -InputList2Cue140=Set Item 129 Icon Analog -InputList2SigType140=Analog -InputList2Cue141=Set Item 130 Icon Analog -InputList2SigType141=Analog -InputList2Cue142=Set Item 131 Icon Analog -InputList2SigType142=Analog -InputList2Cue143=Set Item 132 Icon Analog -InputList2SigType143=Analog -InputList2Cue144=Set Item 133 Icon Analog -InputList2SigType144=Analog -InputList2Cue145=Set Item 134 Icon Analog -InputList2SigType145=Analog -InputList2Cue146=Set Item 135 Icon Analog -InputList2SigType146=Analog -InputList2Cue147=Set Item 136 Icon Analog -InputList2SigType147=Analog -InputList2Cue148=Set Item 137 Icon Analog -InputList2SigType148=Analog -InputList2Cue149=Set Item 138 Icon Analog -InputList2SigType149=Analog -InputList2Cue150=Set Item 139 Icon Analog -InputList2SigType150=Analog -InputList2Cue151=Set Item 140 Icon Analog -InputList2SigType151=Analog -InputList2Cue152=Set Item 141 Icon Analog -InputList2SigType152=Analog -InputList2Cue153=Set Item 142 Icon Analog -InputList2SigType153=Analog -InputList2Cue154=Set Item 143 Icon Analog -InputList2SigType154=Analog -InputList2Cue155=Set Item 144 Icon Analog -InputList2SigType155=Analog -InputList2Cue156=Set Item 145 Icon Analog -InputList2SigType156=Analog -InputList2Cue157=Set Item 146 Icon Analog -InputList2SigType157=Analog -InputList2Cue158=Set Item 147 Icon Analog -InputList2SigType158=Analog -InputList2Cue159=Set Item 148 Icon Analog -InputList2SigType159=Analog -InputList2Cue160=Set Item 149 Icon Analog -InputList2SigType160=Analog -InputList2Cue161=Set Item 150 Icon Analog -InputList2SigType161=Analog -InputList2Cue162=Set Item 151 Icon Analog -InputList2SigType162=Analog -InputList2Cue163=Set Item 152 Icon Analog -InputList2SigType163=Analog -InputList2Cue164=Set Item 153 Icon Analog -InputList2SigType164=Analog -InputList2Cue165=Set Item 154 Icon Analog -InputList2SigType165=Analog -InputList2Cue166=Set Item 155 Icon Analog -InputList2SigType166=Analog -InputList2Cue167=Set Item 156 Icon Analog -InputList2SigType167=Analog -InputList2Cue168=Set Item 157 Icon Analog -InputList2SigType168=Analog -InputList2Cue169=Set Item 158 Icon Analog -InputList2SigType169=Analog -InputList2Cue170=Set Item 159 Icon Analog -InputList2SigType170=Analog -InputList2Cue171=Set Item 160 Icon Analog -InputList2SigType171=Analog -InputList2Cue172=Set Item 161 Icon Analog -InputList2SigType172=Analog -InputList2Cue173=Set Item 162 Icon Analog -InputList2SigType173=Analog -InputList2Cue174=Set Item 163 Icon Analog -InputList2SigType174=Analog -InputList2Cue175=Set Item 164 Icon Analog -InputList2SigType175=Analog -InputList2Cue176=Set Item 165 Icon Analog -InputList2SigType176=Analog -InputList2Cue177=Set Item 166 Icon Analog -InputList2SigType177=Analog -InputList2Cue178=Set Item 167 Icon Analog -InputList2SigType178=Analog -InputList2Cue179=Set Item 168 Icon Analog -InputList2SigType179=Analog -InputList2Cue180=Set Item 169 Icon Analog -InputList2SigType180=Analog -InputList2Cue181=Set Item 170 Icon Analog -InputList2SigType181=Analog -InputList2Cue182=Set Item 171 Icon Analog -InputList2SigType182=Analog -InputList2Cue183=Set Item 172 Icon Analog -InputList2SigType183=Analog -InputList2Cue184=Set Item 173 Icon Analog -InputList2SigType184=Analog -InputList2Cue185=Set Item 174 Icon Analog -InputList2SigType185=Analog -InputList2Cue186=Set Item 175 Icon Analog -InputList2SigType186=Analog -InputList2Cue187=Set Item 176 Icon Analog -InputList2SigType187=Analog -InputList2Cue188=Set Item 177 Icon Analog -InputList2SigType188=Analog -InputList2Cue189=Set Item 178 Icon Analog -InputList2SigType189=Analog -InputList2Cue190=Set Item 179 Icon Analog -InputList2SigType190=Analog -InputList2Cue191=Set Item 180 Icon Analog -InputList2SigType191=Analog -InputList2Cue192=Set Item 181 Icon Analog -InputList2SigType192=Analog -InputList2Cue193=Set Item 182 Icon Analog -InputList2SigType193=Analog -InputList2Cue194=Set Item 183 Icon Analog -InputList2SigType194=Analog -InputList2Cue195=Set Item 184 Icon Analog -InputList2SigType195=Analog -InputList2Cue196=Set Item 185 Icon Analog -InputList2SigType196=Analog -InputList2Cue197=Set Item 186 Icon Analog -InputList2SigType197=Analog -InputList2Cue198=Set Item 187 Icon Analog -InputList2SigType198=Analog -InputList2Cue199=Set Item 188 Icon Analog -InputList2SigType199=Analog -InputList2Cue200=Set Item 189 Icon Analog -InputList2SigType200=Analog -InputList2Cue201=Set Item 190 Icon Analog -InputList2SigType201=Analog -InputList2Cue202=Set Item 191 Icon Analog -InputList2SigType202=Analog -InputList2Cue203=Set Item 192 Icon Analog -InputList2SigType203=Analog -InputList2Cue204=Set Item 193 Icon Analog -InputList2SigType204=Analog -InputList2Cue205=Set Item 194 Icon Analog -InputList2SigType205=Analog -InputList2Cue206=Set Item 195 Icon Analog -InputList2SigType206=Analog -InputList2Cue207=Set Item 196 Icon Analog -InputList2SigType207=Analog -InputList2Cue208=Set Item 197 Icon Analog -InputList2SigType208=Analog -InputList2Cue209=Set Item 198 Icon Analog -InputList2SigType209=Analog -InputList2Cue210=Set Item 199 Icon Analog -InputList2SigType210=Analog -InputList2Cue211=Set Item 200 Icon Analog -InputList2SigType211=Analog -InputList2Cue212=Set Item 201 Icon Analog -InputList2SigType212=Analog -InputList2Cue213=Set Item 202 Icon Analog -InputList2SigType213=Analog -InputList2Cue214=Set Item 203 Icon Analog -InputList2SigType214=Analog -InputList2Cue215=Set Item 204 Icon Analog -InputList2SigType215=Analog -InputList2Cue216=Set Item 205 Icon Analog -InputList2SigType216=Analog -InputList2Cue217=Set Item 206 Icon Analog -InputList2SigType217=Analog -InputList2Cue218=Set Item 207 Icon Analog -InputList2SigType218=Analog -InputList2Cue219=Set Item 208 Icon Analog -InputList2SigType219=Analog -InputList2Cue220=Set Item 209 Icon Analog -InputList2SigType220=Analog -InputList2Cue221=Set Item 210 Icon Analog -InputList2SigType221=Analog -InputList2Cue222=Set Item 211 Icon Analog -InputList2SigType222=Analog -InputList2Cue223=Set Item 212 Icon Analog -InputList2SigType223=Analog -InputList2Cue224=Set Item 213 Icon Analog -InputList2SigType224=Analog -InputList2Cue225=Set Item 214 Icon Analog -InputList2SigType225=Analog -InputList2Cue226=Set Item 215 Icon Analog -InputList2SigType226=Analog -InputList2Cue227=Set Item 216 Icon Analog -InputList2SigType227=Analog -InputList2Cue228=Set Item 217 Icon Analog -InputList2SigType228=Analog -InputList2Cue229=Set Item 218 Icon Analog -InputList2SigType229=Analog -InputList2Cue230=Set Item 219 Icon Analog -InputList2SigType230=Analog -InputList2Cue231=Set Item 220 Icon Analog -InputList2SigType231=Analog -InputList2Cue232=Set Item 221 Icon Analog -InputList2SigType232=Analog -InputList2Cue233=Set Item 222 Icon Analog -InputList2SigType233=Analog -InputList2Cue234=Set Item 223 Icon Analog -InputList2SigType234=Analog -InputList2Cue235=Set Item 224 Icon Analog -InputList2SigType235=Analog -InputList2Cue236=Set Item 225 Icon Analog -InputList2SigType236=Analog -InputList2Cue237=Set Item 226 Icon Analog -InputList2SigType237=Analog -InputList2Cue238=Set Item 227 Icon Analog -InputList2SigType238=Analog -InputList2Cue239=Set Item 228 Icon Analog -InputList2SigType239=Analog -InputList2Cue240=Set Item 229 Icon Analog -InputList2SigType240=Analog -InputList2Cue241=Set Item 230 Icon Analog -InputList2SigType241=Analog -InputList2Cue242=Set Item 231 Icon Analog -InputList2SigType242=Analog -InputList2Cue243=Set Item 232 Icon Analog -InputList2SigType243=Analog -InputList2Cue244=Set Item 233 Icon Analog -InputList2SigType244=Analog -InputList2Cue245=Set Item 234 Icon Analog -InputList2SigType245=Analog -InputList2Cue246=Set Item 235 Icon Analog -InputList2SigType246=Analog -InputList2Cue247=Set Item 236 Icon Analog -InputList2SigType247=Analog -InputList2Cue248=Set Item 237 Icon Analog -InputList2SigType248=Analog -InputList2Cue249=Set Item 238 Icon Analog -InputList2SigType249=Analog -InputList2Cue250=Set Item 239 Icon Analog -InputList2SigType250=Analog -InputList2Cue251=Set Item 240 Icon Analog -InputList2SigType251=Analog -InputList2Cue252=Set Item 241 Icon Analog -InputList2SigType252=Analog -InputList2Cue253=Set Item 242 Icon Analog -InputList2SigType253=Analog -InputList2Cue254=Set Item 243 Icon Analog -InputList2SigType254=Analog -InputList2Cue255=Set Item 244 Icon Analog -InputList2SigType255=Analog -InputList2Cue256=Set Item 245 Icon Analog -InputList2SigType256=Analog -InputList2Cue257=Set Item 246 Icon Analog -InputList2SigType257=Analog -InputList2Cue258=Set Item 247 Icon Analog -InputList2SigType258=Analog -InputList2Cue259=Set Item 248 Icon Analog -InputList2SigType259=Analog -InputList2Cue260=Set Item 249 Icon Analog -InputList2SigType260=Analog -InputList2Cue261=Set Item 250 Icon Analog -InputList2SigType261=Analog -InputList2Cue262=Set Item 251 Icon Analog -InputList2SigType262=Analog -InputList2Cue263=Set Item 252 Icon Analog -InputList2SigType263=Analog -InputList2Cue264=Set Item 253 Icon Analog -InputList2SigType264=Analog -InputList2Cue265=Set Item 254 Icon Analog -InputList2SigType265=Analog -InputList2Cue266=Set Item 255 Icon Analog -InputList2SigType266=Analog -InputList2Cue267=[~UNUSED2~] -InputList2SigType267=Digital|Analog|Serial|String -InputList2Cue2012=[~EndGroup~]Item Icons -InputList2SigType2012=Analog -OutputList2Cue1=Item Clicked -OutputList2SigType1=Analog -OutputList2Cue2=Item Held -OutputList2SigType2=Analog -OutputList2Cue3=[~UNUSED3~] -OutputList2SigType3=Analog -OutputList2Cue4=[~UNUSED3~] -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~]Item Icons -OutputList2SigType11=Analog -OutputList2Cue12=[~UNUSED3~] -OutputList2SigType12=Analog -OutputList2Cue13=[~UNUSED3~] -OutputList2SigType13=Analog -OutputList2Cue14=[~UNUSED3~] -OutputList2SigType14=Analog -OutputList2Cue15=[~UNUSED3~] -OutputList2SigType15=Analog -OutputList2Cue16=[~UNUSED3~] -OutputList2SigType16=Analog -OutputList2Cue17=[~UNUSED3~] -OutputList2SigType17=Analog -OutputList2Cue18=[~UNUSED3~] -OutputList2SigType18=Analog -OutputList2Cue19=[~UNUSED3~] -OutputList2SigType19=Analog -OutputList2Cue20=[~UNUSED3~] -OutputList2SigType20=Analog -OutputList2Cue21=[~UNUSED3~] -OutputList2SigType21=Analog -OutputList2Cue22=[~UNUSED3~] -OutputList2SigType22=Analog -OutputList2Cue23=[~UNUSED3~] -OutputList2SigType23=Analog -OutputList2Cue24=[~UNUSED3~] -OutputList2SigType24=Analog -OutputList2Cue25=[~UNUSED3~] -OutputList2SigType25=Analog -OutputList2Cue26=[~UNUSED3~] -OutputList2SigType26=Analog -OutputList2Cue27=[~UNUSED3~] -OutputList2SigType27=Analog -OutputList2Cue28=[~UNUSED3~] -OutputList2SigType28=Analog -OutputList2Cue29=[~UNUSED3~] -OutputList2SigType29=Analog -OutputList2Cue30=[~UNUSED3~] -OutputList2SigType30=Analog -OutputList2Cue31=[~UNUSED3~] -OutputList2SigType31=Analog -OutputList2Cue32=[~UNUSED3~] -OutputList2SigType32=Analog -OutputList2Cue33=[~UNUSED3~] -OutputList2SigType33=Analog -OutputList2Cue34=[~UNUSED3~] -OutputList2SigType34=Analog -OutputList2Cue35=[~UNUSED3~] -OutputList2SigType35=Analog -OutputList2Cue36=[~UNUSED3~] -OutputList2SigType36=Analog -OutputList2Cue37=[~UNUSED3~] -OutputList2SigType37=Analog -OutputList2Cue38=[~UNUSED3~] -OutputList2SigType38=Analog -OutputList2Cue39=[~UNUSED3~] -OutputList2SigType39=Analog -OutputList2Cue40=[~UNUSED3~] -OutputList2SigType40=Analog -OutputList2Cue41=[~UNUSED3~] -OutputList2SigType41=Analog -OutputList2Cue42=[~UNUSED3~] -OutputList2SigType42=Analog -OutputList2Cue43=[~UNUSED3~] -OutputList2SigType43=Analog -OutputList2Cue44=[~UNUSED3~] -OutputList2SigType44=Analog -OutputList2Cue45=[~UNUSED3~] -OutputList2SigType45=Analog -OutputList2Cue46=[~UNUSED3~] -OutputList2SigType46=Analog -OutputList2Cue47=[~UNUSED3~] -OutputList2SigType47=Analog -OutputList2Cue48=[~UNUSED3~] -OutputList2SigType48=Analog -OutputList2Cue49=[~UNUSED3~] -OutputList2SigType49=Analog -OutputList2Cue50=[~UNUSED3~] -OutputList2SigType50=Analog -OutputList2Cue51=[~UNUSED3~] -OutputList2SigType51=Analog -OutputList2Cue52=[~UNUSED3~] -OutputList2SigType52=Analog -OutputList2Cue53=[~UNUSED3~] -OutputList2SigType53=Analog -OutputList2Cue54=[~UNUSED3~] -OutputList2SigType54=Analog -OutputList2Cue55=[~UNUSED3~] -OutputList2SigType55=Analog -OutputList2Cue56=[~UNUSED3~] -OutputList2SigType56=Analog -OutputList2Cue57=[~UNUSED3~] -OutputList2SigType57=Analog -OutputList2Cue58=[~UNUSED3~] -OutputList2SigType58=Analog -OutputList2Cue59=[~UNUSED3~] -OutputList2SigType59=Analog -OutputList2Cue60=[~UNUSED3~] -OutputList2SigType60=Analog -OutputList2Cue61=[~UNUSED3~] -OutputList2SigType61=Analog -OutputList2Cue62=[~UNUSED3~] -OutputList2SigType62=Analog -OutputList2Cue63=[~UNUSED3~] -OutputList2SigType63=Analog -OutputList2Cue64=[~UNUSED3~] -OutputList2SigType64=Analog -OutputList2Cue65=[~UNUSED3~] -OutputList2SigType65=Analog -OutputList2Cue66=[~UNUSED3~] -OutputList2SigType66=Analog -OutputList2Cue67=[~UNUSED3~] -OutputList2SigType67=Analog -OutputList2Cue68=[~UNUSED3~] -OutputList2SigType68=Analog -OutputList2Cue69=[~UNUSED3~] -OutputList2SigType69=Analog -OutputList2Cue70=[~UNUSED3~] -OutputList2SigType70=Analog -OutputList2Cue71=[~UNUSED3~] -OutputList2SigType71=Analog -OutputList2Cue72=[~UNUSED3~] -OutputList2SigType72=Analog -OutputList2Cue73=[~UNUSED3~] -OutputList2SigType73=Analog -OutputList2Cue74=[~UNUSED3~] -OutputList2SigType74=Analog -OutputList2Cue75=[~UNUSED3~] -OutputList2SigType75=Analog -OutputList2Cue76=[~UNUSED3~] -OutputList2SigType76=Analog -OutputList2Cue77=[~UNUSED3~] -OutputList2SigType77=Analog -OutputList2Cue78=[~UNUSED3~] -OutputList2SigType78=Analog -OutputList2Cue79=[~UNUSED3~] -OutputList2SigType79=Analog -OutputList2Cue80=[~UNUSED3~] -OutputList2SigType80=Analog -OutputList2Cue81=[~UNUSED3~] -OutputList2SigType81=Analog -OutputList2Cue82=[~UNUSED3~] -OutputList2SigType82=Analog -OutputList2Cue83=[~UNUSED3~] -OutputList2SigType83=Analog -OutputList2Cue84=[~UNUSED3~] -OutputList2SigType84=Analog -OutputList2Cue85=[~UNUSED3~] -OutputList2SigType85=Analog -OutputList2Cue86=[~UNUSED3~] -OutputList2SigType86=Analog -OutputList2Cue87=[~UNUSED3~] -OutputList2SigType87=Analog -OutputList2Cue88=[~UNUSED3~] -OutputList2SigType88=Analog -OutputList2Cue89=[~UNUSED3~] -OutputList2SigType89=Analog -OutputList2Cue90=[~UNUSED3~] -OutputList2SigType90=Analog -OutputList2Cue91=[~UNUSED3~] -OutputList2SigType91=Analog -OutputList2Cue92=[~UNUSED3~] -OutputList2SigType92=Analog -OutputList2Cue93=[~UNUSED3~] -OutputList2SigType93=Analog -OutputList2Cue94=[~UNUSED3~] -OutputList2SigType94=Analog -OutputList2Cue95=[~UNUSED3~] -OutputList2SigType95=Analog -OutputList2Cue96=[~UNUSED3~] -OutputList2SigType96=Analog -OutputList2Cue97=[~UNUSED3~] -OutputList2SigType97=Analog -OutputList2Cue98=[~UNUSED3~] -OutputList2SigType98=Analog -OutputList2Cue99=[~UNUSED3~] -OutputList2SigType99=Analog -OutputList2Cue100=[~UNUSED3~] -OutputList2SigType100=Analog -OutputList2Cue101=[~UNUSED3~] -OutputList2SigType101=Analog -OutputList2Cue102=[~UNUSED3~] -OutputList2SigType102=Analog -OutputList2Cue103=[~UNUSED3~] -OutputList2SigType103=Analog -OutputList2Cue104=[~UNUSED3~] -OutputList2SigType104=Analog -OutputList2Cue105=[~UNUSED3~] -OutputList2SigType105=Analog -OutputList2Cue106=[~UNUSED3~] -OutputList2SigType106=Analog -OutputList2Cue107=[~UNUSED3~] -OutputList2SigType107=Analog -OutputList2Cue108=[~UNUSED3~] -OutputList2SigType108=Analog -OutputList2Cue109=[~UNUSED3~] -OutputList2SigType109=Analog -OutputList2Cue110=[~UNUSED3~] -OutputList2SigType110=Analog -OutputList2Cue111=[~UNUSED3~] -OutputList2SigType111=Analog -OutputList2Cue112=[~UNUSED3~] -OutputList2SigType112=Analog -OutputList2Cue113=[~UNUSED3~] -OutputList2SigType113=Analog -OutputList2Cue114=[~UNUSED3~] -OutputList2SigType114=Analog -OutputList2Cue115=[~UNUSED3~] -OutputList2SigType115=Analog -OutputList2Cue116=[~UNUSED3~] -OutputList2SigType116=Analog -OutputList2Cue117=[~UNUSED3~] -OutputList2SigType117=Analog -OutputList2Cue118=[~UNUSED3~] -OutputList2SigType118=Analog -OutputList2Cue119=[~UNUSED3~] -OutputList2SigType119=Analog -OutputList2Cue120=[~UNUSED3~] -OutputList2SigType120=Analog -OutputList2Cue121=[~UNUSED3~] -OutputList2SigType121=Analog -OutputList2Cue122=[~UNUSED3~] -OutputList2SigType122=Analog -OutputList2Cue123=[~UNUSED3~] -OutputList2SigType123=Analog -OutputList2Cue124=[~UNUSED3~] -OutputList2SigType124=Analog -OutputList2Cue125=[~UNUSED3~] -OutputList2SigType125=Analog -OutputList2Cue126=[~UNUSED3~] -OutputList2SigType126=Analog -OutputList2Cue127=[~UNUSED3~] -OutputList2SigType127=Analog -OutputList2Cue128=[~UNUSED3~] -OutputList2SigType128=Analog -OutputList2Cue129=[~UNUSED3~] -OutputList2SigType129=Analog -OutputList2Cue130=[~UNUSED3~] -OutputList2SigType130=Analog -OutputList2Cue131=[~UNUSED3~] -OutputList2SigType131=Analog -OutputList2Cue132=[~UNUSED3~] -OutputList2SigType132=Analog -OutputList2Cue133=[~UNUSED3~] -OutputList2SigType133=Analog -OutputList2Cue134=[~UNUSED3~] -OutputList2SigType134=Analog -OutputList2Cue135=[~UNUSED3~] -OutputList2SigType135=Analog -OutputList2Cue136=[~UNUSED3~] -OutputList2SigType136=Analog -OutputList2Cue137=[~UNUSED3~] -OutputList2SigType137=Analog -OutputList2Cue138=[~UNUSED3~] -OutputList2SigType138=Analog -OutputList2Cue139=[~UNUSED3~] -OutputList2SigType139=Analog -OutputList2Cue140=[~UNUSED3~] -OutputList2SigType140=Analog -OutputList2Cue141=[~UNUSED3~] -OutputList2SigType141=Analog -OutputList2Cue142=[~UNUSED3~] -OutputList2SigType142=Analog -OutputList2Cue143=[~UNUSED3~] -OutputList2SigType143=Analog -OutputList2Cue144=[~UNUSED3~] -OutputList2SigType144=Analog -OutputList2Cue145=[~UNUSED3~] -OutputList2SigType145=Analog -OutputList2Cue146=[~UNUSED3~] -OutputList2SigType146=Analog -OutputList2Cue147=[~UNUSED3~] -OutputList2SigType147=Analog -OutputList2Cue148=[~UNUSED3~] -OutputList2SigType148=Analog -OutputList2Cue149=[~UNUSED3~] -OutputList2SigType149=Analog -OutputList2Cue150=[~UNUSED3~] -OutputList2SigType150=Analog -OutputList2Cue151=[~UNUSED3~] -OutputList2SigType151=Analog -OutputList2Cue152=[~UNUSED3~] -OutputList2SigType152=Analog -OutputList2Cue153=[~UNUSED3~] -OutputList2SigType153=Analog -OutputList2Cue154=[~UNUSED3~] -OutputList2SigType154=Analog -OutputList2Cue155=[~UNUSED3~] -OutputList2SigType155=Analog -OutputList2Cue156=[~UNUSED3~] -OutputList2SigType156=Analog -OutputList2Cue157=[~UNUSED3~] -OutputList2SigType157=Analog -OutputList2Cue158=[~UNUSED3~] -OutputList2SigType158=Analog -OutputList2Cue159=[~UNUSED3~] -OutputList2SigType159=Analog -OutputList2Cue160=[~UNUSED3~] -OutputList2SigType160=Analog -OutputList2Cue161=[~UNUSED3~] -OutputList2SigType161=Analog -OutputList2Cue162=[~UNUSED3~] -OutputList2SigType162=Analog -OutputList2Cue163=[~UNUSED3~] -OutputList2SigType163=Analog -OutputList2Cue164=[~UNUSED3~] -OutputList2SigType164=Analog -OutputList2Cue165=[~UNUSED3~] -OutputList2SigType165=Analog -OutputList2Cue166=[~UNUSED3~] -OutputList2SigType166=Analog -OutputList2Cue167=[~UNUSED3~] -OutputList2SigType167=Analog -OutputList2Cue168=[~UNUSED3~] -OutputList2SigType168=Analog -OutputList2Cue169=[~UNUSED3~] -OutputList2SigType169=Analog -OutputList2Cue170=[~UNUSED3~] -OutputList2SigType170=Analog -OutputList2Cue171=[~UNUSED3~] -OutputList2SigType171=Analog -OutputList2Cue172=[~UNUSED3~] -OutputList2SigType172=Analog -OutputList2Cue173=[~UNUSED3~] -OutputList2SigType173=Analog -OutputList2Cue174=[~UNUSED3~] -OutputList2SigType174=Analog -OutputList2Cue175=[~UNUSED3~] -OutputList2SigType175=Analog -OutputList2Cue176=[~UNUSED3~] -OutputList2SigType176=Analog -OutputList2Cue177=[~UNUSED3~] -OutputList2SigType177=Analog -OutputList2Cue178=[~UNUSED3~] -OutputList2SigType178=Analog -OutputList2Cue179=[~UNUSED3~] -OutputList2SigType179=Analog -OutputList2Cue180=[~UNUSED3~] -OutputList2SigType180=Analog -OutputList2Cue181=[~UNUSED3~] -OutputList2SigType181=Analog -OutputList2Cue182=[~UNUSED3~] -OutputList2SigType182=Analog -OutputList2Cue183=[~UNUSED3~] -OutputList2SigType183=Analog -OutputList2Cue184=[~UNUSED3~] -OutputList2SigType184=Analog -OutputList2Cue185=[~UNUSED3~] -OutputList2SigType185=Analog -OutputList2Cue186=[~UNUSED3~] -OutputList2SigType186=Analog -OutputList2Cue187=[~UNUSED3~] -OutputList2SigType187=Analog -OutputList2Cue188=[~UNUSED3~] -OutputList2SigType188=Analog -OutputList2Cue189=[~UNUSED3~] -OutputList2SigType189=Analog -OutputList2Cue190=[~UNUSED3~] -OutputList2SigType190=Analog -OutputList2Cue191=[~UNUSED3~] -OutputList2SigType191=Analog -OutputList2Cue192=[~UNUSED3~] -OutputList2SigType192=Analog -OutputList2Cue193=[~UNUSED3~] -OutputList2SigType193=Analog -OutputList2Cue194=[~UNUSED3~] -OutputList2SigType194=Analog -OutputList2Cue195=[~UNUSED3~] -OutputList2SigType195=Analog -OutputList2Cue196=[~UNUSED3~] -OutputList2SigType196=Analog -OutputList2Cue197=[~UNUSED3~] -OutputList2SigType197=Analog -OutputList2Cue198=[~UNUSED3~] -OutputList2SigType198=Analog -OutputList2Cue199=[~UNUSED3~] -OutputList2SigType199=Analog -OutputList2Cue200=[~UNUSED3~] -OutputList2SigType200=Analog -OutputList2Cue201=[~UNUSED3~] -OutputList2SigType201=Analog -OutputList2Cue202=[~UNUSED3~] -OutputList2SigType202=Analog -OutputList2Cue203=[~UNUSED3~] -OutputList2SigType203=Analog -OutputList2Cue204=[~UNUSED3~] -OutputList2SigType204=Analog -OutputList2Cue205=[~UNUSED3~] -OutputList2SigType205=Analog -OutputList2Cue206=[~UNUSED3~] -OutputList2SigType206=Analog -OutputList2Cue207=[~UNUSED3~] -OutputList2SigType207=Analog -OutputList2Cue208=[~UNUSED3~] -OutputList2SigType208=Analog -OutputList2Cue209=[~UNUSED3~] -OutputList2SigType209=Analog -OutputList2Cue210=[~UNUSED3~] -OutputList2SigType210=Analog -OutputList2Cue211=[~UNUSED3~] -OutputList2SigType211=Analog -OutputList2Cue212=[~UNUSED3~] -OutputList2SigType212=Analog -OutputList2Cue213=[~UNUSED3~] -OutputList2SigType213=Analog -OutputList2Cue214=[~UNUSED3~] -OutputList2SigType214=Analog -OutputList2Cue215=[~UNUSED3~] -OutputList2SigType215=Analog -OutputList2Cue216=[~UNUSED3~] -OutputList2SigType216=Analog -OutputList2Cue217=[~UNUSED3~] -OutputList2SigType217=Analog -OutputList2Cue218=[~UNUSED3~] -OutputList2SigType218=Analog -OutputList2Cue219=[~UNUSED3~] -OutputList2SigType219=Analog -OutputList2Cue220=[~UNUSED3~] -OutputList2SigType220=Analog -OutputList2Cue221=[~UNUSED3~] -OutputList2SigType221=Analog -OutputList2Cue222=[~UNUSED3~] -OutputList2SigType222=Analog -OutputList2Cue223=[~UNUSED3~] -OutputList2SigType223=Analog -OutputList2Cue224=[~UNUSED3~] -OutputList2SigType224=Analog -OutputList2Cue225=[~UNUSED3~] -OutputList2SigType225=Analog -OutputList2Cue226=[~UNUSED3~] -OutputList2SigType226=Analog -OutputList2Cue227=[~UNUSED3~] -OutputList2SigType227=Analog -OutputList2Cue228=[~UNUSED3~] -OutputList2SigType228=Analog -OutputList2Cue229=[~UNUSED3~] -OutputList2SigType229=Analog -OutputList2Cue230=[~UNUSED3~] -OutputList2SigType230=Analog -OutputList2Cue231=[~UNUSED3~] -OutputList2SigType231=Analog -OutputList2Cue232=[~UNUSED3~] -OutputList2SigType232=Analog -OutputList2Cue233=[~UNUSED3~] -OutputList2SigType233=Analog -OutputList2Cue234=[~UNUSED3~] -OutputList2SigType234=Analog -OutputList2Cue235=[~UNUSED3~] -OutputList2SigType235=Analog -OutputList2Cue236=[~UNUSED3~] -OutputList2SigType236=Analog -OutputList2Cue237=[~UNUSED3~] -OutputList2SigType237=Analog -OutputList2Cue238=[~UNUSED3~] -OutputList2SigType238=Analog -OutputList2Cue239=[~UNUSED3~] -OutputList2SigType239=Analog -OutputList2Cue240=[~UNUSED3~] -OutputList2SigType240=Analog -OutputList2Cue241=[~UNUSED3~] -OutputList2SigType241=Analog -OutputList2Cue242=[~UNUSED3~] -OutputList2SigType242=Analog -OutputList2Cue243=[~UNUSED3~] -OutputList2SigType243=Analog -OutputList2Cue244=[~UNUSED3~] -OutputList2SigType244=Analog -OutputList2Cue245=[~UNUSED3~] -OutputList2SigType245=Analog -OutputList2Cue246=[~UNUSED3~] -OutputList2SigType246=Analog -OutputList2Cue247=[~UNUSED3~] -OutputList2SigType247=Analog -OutputList2Cue248=[~UNUSED3~] -OutputList2SigType248=Analog -OutputList2Cue249=[~UNUSED3~] -OutputList2SigType249=Analog -OutputList2Cue250=[~UNUSED3~] -OutputList2SigType250=Analog -OutputList2Cue251=[~UNUSED3~] -OutputList2SigType251=Analog -OutputList2Cue252=[~UNUSED3~] -OutputList2SigType252=Analog -OutputList2Cue253=[~UNUSED3~] -OutputList2SigType253=Analog -OutputList2Cue254=[~UNUSED3~] -OutputList2SigType254=Analog -OutputList2Cue255=[~UNUSED3~] -OutputList2SigType255=Analog -OutputList2Cue256=[~UNUSED3~] -OutputList2SigType256=Analog -OutputList2Cue257=[~UNUSED3~] -OutputList2SigType257=Analog -OutputList2Cue258=[~UNUSED3~] -OutputList2SigType258=Analog -OutputList2Cue259=[~UNUSED3~] -OutputList2SigType259=Analog -OutputList2Cue260=[~UNUSED3~] -OutputList2SigType260=Analog -OutputList2Cue261=[~UNUSED3~] -OutputList2SigType261=Analog -OutputList2Cue262=[~UNUSED3~] -OutputList2SigType262=Analog -OutputList2Cue263=[~UNUSED3~] -OutputList2SigType263=Analog -OutputList2Cue264=[~UNUSED3~] -OutputList2SigType264=Analog -OutputList2Cue265=[~UNUSED3~] -OutputList2SigType265=Analog -OutputList2Cue266=[~UNUSED3~] -OutputList2SigType266=Analog -OutputList2Cue267=[~UNUSED2~] -OutputList2SigType267=Digital|Analog|Serial|String -OutputList2Cue2012=[~EndGroup~]Item Icons -OutputList2SigType2012=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~]Item Texts -InputList3SigType11=Serial -InputList3Cue12=Set Item 1 Text -InputList3SigType12=Serial -InputList3Cue13=Set Item 2 Text -InputList3SigType13=Serial -InputList3Cue14=Set Item 3 Text -InputList3SigType14=Serial -InputList3Cue15=Set Item 4 Text -InputList3SigType15=Serial -InputList3Cue16=Set Item 5 Text -InputList3SigType16=Serial -InputList3Cue17=Set Item 6 Text -InputList3SigType17=Serial -InputList3Cue18=Set Item 7 Text -InputList3SigType18=Serial -InputList3Cue19=Set Item 8 Text -InputList3SigType19=Serial -InputList3Cue20=Set Item 9 Text -InputList3SigType20=Serial -InputList3Cue21=Set Item 10 Text -InputList3SigType21=Serial -InputList3Cue22=Set Item 11 Text -InputList3SigType22=Serial -InputList3Cue23=Set Item 12 Text -InputList3SigType23=Serial -InputList3Cue24=Set Item 13 Text -InputList3SigType24=Serial -InputList3Cue25=Set Item 14 Text -InputList3SigType25=Serial -InputList3Cue26=Set Item 15 Text -InputList3SigType26=Serial -InputList3Cue27=Set Item 16 Text -InputList3SigType27=Serial -InputList3Cue28=Set Item 17 Text -InputList3SigType28=Serial -InputList3Cue29=Set Item 18 Text -InputList3SigType29=Serial -InputList3Cue30=Set Item 19 Text -InputList3SigType30=Serial -InputList3Cue31=Set Item 20 Text -InputList3SigType31=Serial -InputList3Cue32=Set Item 21 Text -InputList3SigType32=Serial -InputList3Cue33=Set Item 22 Text -InputList3SigType33=Serial -InputList3Cue34=Set Item 23 Text -InputList3SigType34=Serial -InputList3Cue35=Set Item 24 Text -InputList3SigType35=Serial -InputList3Cue36=Set Item 25 Text -InputList3SigType36=Serial -InputList3Cue37=Set Item 26 Text -InputList3SigType37=Serial -InputList3Cue38=Set Item 27 Text -InputList3SigType38=Serial -InputList3Cue39=Set Item 28 Text -InputList3SigType39=Serial -InputList3Cue40=Set Item 29 Text -InputList3SigType40=Serial -InputList3Cue41=Set Item 30 Text -InputList3SigType41=Serial -InputList3Cue42=Set Item 31 Text -InputList3SigType42=Serial -InputList3Cue43=Set Item 32 Text -InputList3SigType43=Serial -InputList3Cue44=Set Item 33 Text -InputList3SigType44=Serial -InputList3Cue45=Set Item 34 Text -InputList3SigType45=Serial -InputList3Cue46=Set Item 35 Text -InputList3SigType46=Serial -InputList3Cue47=Set Item 36 Text -InputList3SigType47=Serial -InputList3Cue48=Set Item 37 Text -InputList3SigType48=Serial -InputList3Cue49=Set Item 38 Text -InputList3SigType49=Serial -InputList3Cue50=Set Item 39 Text -InputList3SigType50=Serial -InputList3Cue51=Set Item 40 Text -InputList3SigType51=Serial -InputList3Cue52=Set Item 41 Text -InputList3SigType52=Serial -InputList3Cue53=Set Item 42 Text -InputList3SigType53=Serial -InputList3Cue54=Set Item 43 Text -InputList3SigType54=Serial -InputList3Cue55=Set Item 44 Text -InputList3SigType55=Serial -InputList3Cue56=Set Item 45 Text -InputList3SigType56=Serial -InputList3Cue57=Set Item 46 Text -InputList3SigType57=Serial -InputList3Cue58=Set Item 47 Text -InputList3SigType58=Serial -InputList3Cue59=Set Item 48 Text -InputList3SigType59=Serial -InputList3Cue60=Set Item 49 Text -InputList3SigType60=Serial -InputList3Cue61=Set Item 50 Text -InputList3SigType61=Serial -InputList3Cue62=Set Item 51 Text -InputList3SigType62=Serial -InputList3Cue63=Set Item 52 Text -InputList3SigType63=Serial -InputList3Cue64=Set Item 53 Text -InputList3SigType64=Serial -InputList3Cue65=Set Item 54 Text -InputList3SigType65=Serial -InputList3Cue66=Set Item 55 Text -InputList3SigType66=Serial -InputList3Cue67=Set Item 56 Text -InputList3SigType67=Serial -InputList3Cue68=Set Item 57 Text -InputList3SigType68=Serial -InputList3Cue69=Set Item 58 Text -InputList3SigType69=Serial -InputList3Cue70=Set Item 59 Text -InputList3SigType70=Serial -InputList3Cue71=Set Item 60 Text -InputList3SigType71=Serial -InputList3Cue72=Set Item 61 Text -InputList3SigType72=Serial -InputList3Cue73=Set Item 62 Text -InputList3SigType73=Serial -InputList3Cue74=Set Item 63 Text -InputList3SigType74=Serial -InputList3Cue75=Set Item 64 Text -InputList3SigType75=Serial -InputList3Cue76=Set Item 65 Text -InputList3SigType76=Serial -InputList3Cue77=Set Item 66 Text -InputList3SigType77=Serial -InputList3Cue78=Set Item 67 Text -InputList3SigType78=Serial -InputList3Cue79=Set Item 68 Text -InputList3SigType79=Serial -InputList3Cue80=Set Item 69 Text -InputList3SigType80=Serial -InputList3Cue81=Set Item 70 Text -InputList3SigType81=Serial -InputList3Cue82=Set Item 71 Text -InputList3SigType82=Serial -InputList3Cue83=Set Item 72 Text -InputList3SigType83=Serial -InputList3Cue84=Set Item 73 Text -InputList3SigType84=Serial -InputList3Cue85=Set Item 74 Text -InputList3SigType85=Serial -InputList3Cue86=Set Item 75 Text -InputList3SigType86=Serial -InputList3Cue87=Set Item 76 Text -InputList3SigType87=Serial -InputList3Cue88=Set Item 77 Text -InputList3SigType88=Serial -InputList3Cue89=Set Item 78 Text -InputList3SigType89=Serial -InputList3Cue90=Set Item 79 Text -InputList3SigType90=Serial -InputList3Cue91=Set Item 80 Text -InputList3SigType91=Serial -InputList3Cue92=Set Item 81 Text -InputList3SigType92=Serial -InputList3Cue93=Set Item 82 Text -InputList3SigType93=Serial -InputList3Cue94=Set Item 83 Text -InputList3SigType94=Serial -InputList3Cue95=Set Item 84 Text -InputList3SigType95=Serial -InputList3Cue96=Set Item 85 Text -InputList3SigType96=Serial -InputList3Cue97=Set Item 86 Text -InputList3SigType97=Serial -InputList3Cue98=Set Item 87 Text -InputList3SigType98=Serial -InputList3Cue99=Set Item 88 Text -InputList3SigType99=Serial -InputList3Cue100=Set Item 89 Text -InputList3SigType100=Serial -InputList3Cue101=Set Item 90 Text -InputList3SigType101=Serial -InputList3Cue102=Set Item 91 Text -InputList3SigType102=Serial -InputList3Cue103=Set Item 92 Text -InputList3SigType103=Serial -InputList3Cue104=Set Item 93 Text -InputList3SigType104=Serial -InputList3Cue105=Set Item 94 Text -InputList3SigType105=Serial -InputList3Cue106=Set Item 95 Text -InputList3SigType106=Serial -InputList3Cue107=Set Item 96 Text -InputList3SigType107=Serial -InputList3Cue108=Set Item 97 Text -InputList3SigType108=Serial -InputList3Cue109=Set Item 98 Text -InputList3SigType109=Serial -InputList3Cue110=Set Item 99 Text -InputList3SigType110=Serial -InputList3Cue111=Set Item 100 Text -InputList3SigType111=Serial -InputList3Cue112=Set Item 101 Text -InputList3SigType112=Serial -InputList3Cue113=Set Item 102 Text -InputList3SigType113=Serial -InputList3Cue114=Set Item 103 Text -InputList3SigType114=Serial -InputList3Cue115=Set Item 104 Text -InputList3SigType115=Serial -InputList3Cue116=Set Item 105 Text -InputList3SigType116=Serial -InputList3Cue117=Set Item 106 Text -InputList3SigType117=Serial -InputList3Cue118=Set Item 107 Text -InputList3SigType118=Serial -InputList3Cue119=Set Item 108 Text -InputList3SigType119=Serial -InputList3Cue120=Set Item 109 Text -InputList3SigType120=Serial -InputList3Cue121=Set Item 110 Text -InputList3SigType121=Serial -InputList3Cue122=Set Item 111 Text -InputList3SigType122=Serial -InputList3Cue123=Set Item 112 Text -InputList3SigType123=Serial -InputList3Cue124=Set Item 113 Text -InputList3SigType124=Serial -InputList3Cue125=Set Item 114 Text -InputList3SigType125=Serial -InputList3Cue126=Set Item 115 Text -InputList3SigType126=Serial -InputList3Cue127=Set Item 116 Text -InputList3SigType127=Serial -InputList3Cue128=Set Item 117 Text -InputList3SigType128=Serial -InputList3Cue129=Set Item 118 Text -InputList3SigType129=Serial -InputList3Cue130=Set Item 119 Text -InputList3SigType130=Serial -InputList3Cue131=Set Item 120 Text -InputList3SigType131=Serial -InputList3Cue132=Set Item 121 Text -InputList3SigType132=Serial -InputList3Cue133=Set Item 122 Text -InputList3SigType133=Serial -InputList3Cue134=Set Item 123 Text -InputList3SigType134=Serial -InputList3Cue135=Set Item 124 Text -InputList3SigType135=Serial -InputList3Cue136=Set Item 125 Text -InputList3SigType136=Serial -InputList3Cue137=Set Item 126 Text -InputList3SigType137=Serial -InputList3Cue138=Set Item 127 Text -InputList3SigType138=Serial -InputList3Cue139=Set Item 128 Text -InputList3SigType139=Serial -InputList3Cue140=Set Item 129 Text -InputList3SigType140=Serial -InputList3Cue141=Set Item 130 Text -InputList3SigType141=Serial -InputList3Cue142=Set Item 131 Text -InputList3SigType142=Serial -InputList3Cue143=Set Item 132 Text -InputList3SigType143=Serial -InputList3Cue144=Set Item 133 Text -InputList3SigType144=Serial -InputList3Cue145=Set Item 134 Text -InputList3SigType145=Serial -InputList3Cue146=Set Item 135 Text -InputList3SigType146=Serial -InputList3Cue147=Set Item 136 Text -InputList3SigType147=Serial -InputList3Cue148=Set Item 137 Text -InputList3SigType148=Serial -InputList3Cue149=Set Item 138 Text -InputList3SigType149=Serial -InputList3Cue150=Set Item 139 Text -InputList3SigType150=Serial -InputList3Cue151=Set Item 140 Text -InputList3SigType151=Serial -InputList3Cue152=Set Item 141 Text -InputList3SigType152=Serial -InputList3Cue153=Set Item 142 Text -InputList3SigType153=Serial -InputList3Cue154=Set Item 143 Text -InputList3SigType154=Serial -InputList3Cue155=Set Item 144 Text -InputList3SigType155=Serial -InputList3Cue156=Set Item 145 Text -InputList3SigType156=Serial -InputList3Cue157=Set Item 146 Text -InputList3SigType157=Serial -InputList3Cue158=Set Item 147 Text -InputList3SigType158=Serial -InputList3Cue159=Set Item 148 Text -InputList3SigType159=Serial -InputList3Cue160=Set Item 149 Text -InputList3SigType160=Serial -InputList3Cue161=Set Item 150 Text -InputList3SigType161=Serial -InputList3Cue162=Set Item 151 Text -InputList3SigType162=Serial -InputList3Cue163=Set Item 152 Text -InputList3SigType163=Serial -InputList3Cue164=Set Item 153 Text -InputList3SigType164=Serial -InputList3Cue165=Set Item 154 Text -InputList3SigType165=Serial -InputList3Cue166=Set Item 155 Text -InputList3SigType166=Serial -InputList3Cue167=Set Item 156 Text -InputList3SigType167=Serial -InputList3Cue168=Set Item 157 Text -InputList3SigType168=Serial -InputList3Cue169=Set Item 158 Text -InputList3SigType169=Serial -InputList3Cue170=Set Item 159 Text -InputList3SigType170=Serial -InputList3Cue171=Set Item 160 Text -InputList3SigType171=Serial -InputList3Cue172=Set Item 161 Text -InputList3SigType172=Serial -InputList3Cue173=Set Item 162 Text -InputList3SigType173=Serial -InputList3Cue174=Set Item 163 Text -InputList3SigType174=Serial -InputList3Cue175=Set Item 164 Text -InputList3SigType175=Serial -InputList3Cue176=Set Item 165 Text -InputList3SigType176=Serial -InputList3Cue177=Set Item 166 Text -InputList3SigType177=Serial -InputList3Cue178=Set Item 167 Text -InputList3SigType178=Serial -InputList3Cue179=Set Item 168 Text -InputList3SigType179=Serial -InputList3Cue180=Set Item 169 Text -InputList3SigType180=Serial -InputList3Cue181=Set Item 170 Text -InputList3SigType181=Serial -InputList3Cue182=Set Item 171 Text -InputList3SigType182=Serial -InputList3Cue183=Set Item 172 Text -InputList3SigType183=Serial -InputList3Cue184=Set Item 173 Text -InputList3SigType184=Serial -InputList3Cue185=Set Item 174 Text -InputList3SigType185=Serial -InputList3Cue186=Set Item 175 Text -InputList3SigType186=Serial -InputList3Cue187=Set Item 176 Text -InputList3SigType187=Serial -InputList3Cue188=Set Item 177 Text -InputList3SigType188=Serial -InputList3Cue189=Set Item 178 Text -InputList3SigType189=Serial -InputList3Cue190=Set Item 179 Text -InputList3SigType190=Serial -InputList3Cue191=Set Item 180 Text -InputList3SigType191=Serial -InputList3Cue192=Set Item 181 Text -InputList3SigType192=Serial -InputList3Cue193=Set Item 182 Text -InputList3SigType193=Serial -InputList3Cue194=Set Item 183 Text -InputList3SigType194=Serial -InputList3Cue195=Set Item 184 Text -InputList3SigType195=Serial -InputList3Cue196=Set Item 185 Text -InputList3SigType196=Serial -InputList3Cue197=Set Item 186 Text -InputList3SigType197=Serial -InputList3Cue198=Set Item 187 Text -InputList3SigType198=Serial -InputList3Cue199=Set Item 188 Text -InputList3SigType199=Serial -InputList3Cue200=Set Item 189 Text -InputList3SigType200=Serial -InputList3Cue201=Set Item 190 Text -InputList3SigType201=Serial -InputList3Cue202=Set Item 191 Text -InputList3SigType202=Serial -InputList3Cue203=Set Item 192 Text -InputList3SigType203=Serial -InputList3Cue204=Set Item 193 Text -InputList3SigType204=Serial -InputList3Cue205=Set Item 194 Text -InputList3SigType205=Serial -InputList3Cue206=Set Item 195 Text -InputList3SigType206=Serial -InputList3Cue207=Set Item 196 Text -InputList3SigType207=Serial -InputList3Cue208=Set Item 197 Text -InputList3SigType208=Serial -InputList3Cue209=Set Item 198 Text -InputList3SigType209=Serial -InputList3Cue210=Set Item 199 Text -InputList3SigType210=Serial -InputList3Cue211=Set Item 200 Text -InputList3SigType211=Serial -InputList3Cue212=Set Item 201 Text -InputList3SigType212=Serial -InputList3Cue213=Set Item 202 Text -InputList3SigType213=Serial -InputList3Cue214=Set Item 203 Text -InputList3SigType214=Serial -InputList3Cue215=Set Item 204 Text -InputList3SigType215=Serial -InputList3Cue216=Set Item 205 Text -InputList3SigType216=Serial -InputList3Cue217=Set Item 206 Text -InputList3SigType217=Serial -InputList3Cue218=Set Item 207 Text -InputList3SigType218=Serial -InputList3Cue219=Set Item 208 Text -InputList3SigType219=Serial -InputList3Cue220=Set Item 209 Text -InputList3SigType220=Serial -InputList3Cue221=Set Item 210 Text -InputList3SigType221=Serial -InputList3Cue222=Set Item 211 Text -InputList3SigType222=Serial -InputList3Cue223=Set Item 212 Text -InputList3SigType223=Serial -InputList3Cue224=Set Item 213 Text -InputList3SigType224=Serial -InputList3Cue225=Set Item 214 Text -InputList3SigType225=Serial -InputList3Cue226=Set Item 215 Text -InputList3SigType226=Serial -InputList3Cue227=Set Item 216 Text -InputList3SigType227=Serial -InputList3Cue228=Set Item 217 Text -InputList3SigType228=Serial -InputList3Cue229=Set Item 218 Text -InputList3SigType229=Serial -InputList3Cue230=Set Item 219 Text -InputList3SigType230=Serial -InputList3Cue231=Set Item 220 Text -InputList3SigType231=Serial -InputList3Cue232=Set Item 221 Text -InputList3SigType232=Serial -InputList3Cue233=Set Item 222 Text -InputList3SigType233=Serial -InputList3Cue234=Set Item 223 Text -InputList3SigType234=Serial -InputList3Cue235=Set Item 224 Text -InputList3SigType235=Serial -InputList3Cue236=Set Item 225 Text -InputList3SigType236=Serial -InputList3Cue237=Set Item 226 Text -InputList3SigType237=Serial -InputList3Cue238=Set Item 227 Text -InputList3SigType238=Serial -InputList3Cue239=Set Item 228 Text -InputList3SigType239=Serial -InputList3Cue240=Set Item 229 Text -InputList3SigType240=Serial -InputList3Cue241=Set Item 230 Text -InputList3SigType241=Serial -InputList3Cue242=Set Item 231 Text -InputList3SigType242=Serial -InputList3Cue243=Set Item 232 Text -InputList3SigType243=Serial -InputList3Cue244=Set Item 233 Text -InputList3SigType244=Serial -InputList3Cue245=Set Item 234 Text -InputList3SigType245=Serial -InputList3Cue246=Set Item 235 Text -InputList3SigType246=Serial -InputList3Cue247=Set Item 236 Text -InputList3SigType247=Serial -InputList3Cue248=Set Item 237 Text -InputList3SigType248=Serial -InputList3Cue249=Set Item 238 Text -InputList3SigType249=Serial -InputList3Cue250=Set Item 239 Text -InputList3SigType250=Serial -InputList3Cue251=Set Item 240 Text -InputList3SigType251=Serial -InputList3Cue252=Set Item 241 Text -InputList3SigType252=Serial -InputList3Cue253=Set Item 242 Text -InputList3SigType253=Serial -InputList3Cue254=Set Item 243 Text -InputList3SigType254=Serial -InputList3Cue255=Set Item 244 Text -InputList3SigType255=Serial -InputList3Cue256=Set Item 245 Text -InputList3SigType256=Serial -InputList3Cue257=Set Item 246 Text -InputList3SigType257=Serial -InputList3Cue258=Set Item 247 Text -InputList3SigType258=Serial -InputList3Cue259=Set Item 248 Text -InputList3SigType259=Serial -InputList3Cue260=Set Item 249 Text -InputList3SigType260=Serial -InputList3Cue261=Set Item 250 Text -InputList3SigType261=Serial -InputList3Cue262=Set Item 251 Text -InputList3SigType262=Serial -InputList3Cue263=Set Item 252 Text -InputList3SigType263=Serial -InputList3Cue264=Set Item 253 Text -InputList3SigType264=Serial -InputList3Cue265=Set Item 254 Text -InputList3SigType265=Serial -InputList3Cue266=Set Item 255 Text -InputList3SigType266=Serial -InputList3Cue267=[~UNUSED2~] -InputList3SigType267=Digital|Analog|Serial|String -InputList3Cue2012=[~EndGroup~]Item Texts -InputList3SigType2012=Serial -InputList3Cue2013=[~BeginGroup~]Item Icons -InputList3SigType2013=Serial -InputList3Cue2014=Set Item 1 Icon Serial -InputList3SigType2014=Serial -InputList3Cue2015=Set Item 2 Icon Serial -InputList3SigType2015=Serial -InputList3Cue2016=Set Item 3 Icon Serial -InputList3SigType2016=Serial -InputList3Cue2017=Set Item 4 Icon Serial -InputList3SigType2017=Serial -InputList3Cue2018=Set Item 5 Icon Serial -InputList3SigType2018=Serial -InputList3Cue2019=Set Item 6 Icon Serial -InputList3SigType2019=Serial -InputList3Cue2020=Set Item 7 Icon Serial -InputList3SigType2020=Serial -InputList3Cue2021=Set Item 8 Icon Serial -InputList3SigType2021=Serial -InputList3Cue2022=Set Item 9 Icon Serial -InputList3SigType2022=Serial -InputList3Cue2023=Set Item 10 Icon Serial -InputList3SigType2023=Serial -InputList3Cue2024=Set Item 11 Icon Serial -InputList3SigType2024=Serial -InputList3Cue2025=Set Item 12 Icon Serial -InputList3SigType2025=Serial -InputList3Cue2026=Set Item 13 Icon Serial -InputList3SigType2026=Serial -InputList3Cue2027=Set Item 14 Icon Serial -InputList3SigType2027=Serial -InputList3Cue2028=Set Item 15 Icon Serial -InputList3SigType2028=Serial -InputList3Cue2029=Set Item 16 Icon Serial -InputList3SigType2029=Serial -InputList3Cue2030=Set Item 17 Icon Serial -InputList3SigType2030=Serial -InputList3Cue2031=Set Item 18 Icon Serial -InputList3SigType2031=Serial -InputList3Cue2032=Set Item 19 Icon Serial -InputList3SigType2032=Serial -InputList3Cue2033=Set Item 20 Icon Serial -InputList3SigType2033=Serial -InputList3Cue2034=Set Item 21 Icon Serial -InputList3SigType2034=Serial -InputList3Cue2035=Set Item 22 Icon Serial -InputList3SigType2035=Serial -InputList3Cue2036=Set Item 23 Icon Serial -InputList3SigType2036=Serial -InputList3Cue2037=Set Item 24 Icon Serial -InputList3SigType2037=Serial -InputList3Cue2038=Set Item 25 Icon Serial -InputList3SigType2038=Serial -InputList3Cue2039=Set Item 26 Icon Serial -InputList3SigType2039=Serial -InputList3Cue2040=Set Item 27 Icon Serial -InputList3SigType2040=Serial -InputList3Cue2041=Set Item 28 Icon Serial -InputList3SigType2041=Serial -InputList3Cue2042=Set Item 29 Icon Serial -InputList3SigType2042=Serial -InputList3Cue2043=Set Item 30 Icon Serial -InputList3SigType2043=Serial -InputList3Cue2044=Set Item 31 Icon Serial -InputList3SigType2044=Serial -InputList3Cue2045=Set Item 32 Icon Serial -InputList3SigType2045=Serial -InputList3Cue2046=Set Item 33 Icon Serial -InputList3SigType2046=Serial -InputList3Cue2047=Set Item 34 Icon Serial -InputList3SigType2047=Serial -InputList3Cue2048=Set Item 35 Icon Serial -InputList3SigType2048=Serial -InputList3Cue2049=Set Item 36 Icon Serial -InputList3SigType2049=Serial -InputList3Cue2050=Set Item 37 Icon Serial -InputList3SigType2050=Serial -InputList3Cue2051=Set Item 38 Icon Serial -InputList3SigType2051=Serial -InputList3Cue2052=Set Item 39 Icon Serial -InputList3SigType2052=Serial -InputList3Cue2053=Set Item 40 Icon Serial -InputList3SigType2053=Serial -InputList3Cue2054=Set Item 41 Icon Serial -InputList3SigType2054=Serial -InputList3Cue2055=Set Item 42 Icon Serial -InputList3SigType2055=Serial -InputList3Cue2056=Set Item 43 Icon Serial -InputList3SigType2056=Serial -InputList3Cue2057=Set Item 44 Icon Serial -InputList3SigType2057=Serial -InputList3Cue2058=Set Item 45 Icon Serial -InputList3SigType2058=Serial -InputList3Cue2059=Set Item 46 Icon Serial -InputList3SigType2059=Serial -InputList3Cue2060=Set Item 47 Icon Serial -InputList3SigType2060=Serial -InputList3Cue2061=Set Item 48 Icon Serial -InputList3SigType2061=Serial -InputList3Cue2062=Set Item 49 Icon Serial -InputList3SigType2062=Serial -InputList3Cue2063=Set Item 50 Icon Serial -InputList3SigType2063=Serial -InputList3Cue2064=Set Item 51 Icon Serial -InputList3SigType2064=Serial -InputList3Cue2065=Set Item 52 Icon Serial -InputList3SigType2065=Serial -InputList3Cue2066=Set Item 53 Icon Serial -InputList3SigType2066=Serial -InputList3Cue2067=Set Item 54 Icon Serial -InputList3SigType2067=Serial -InputList3Cue2068=Set Item 55 Icon Serial -InputList3SigType2068=Serial -InputList3Cue2069=Set Item 56 Icon Serial -InputList3SigType2069=Serial -InputList3Cue2070=Set Item 57 Icon Serial -InputList3SigType2070=Serial -InputList3Cue2071=Set Item 58 Icon Serial -InputList3SigType2071=Serial -InputList3Cue2072=Set Item 59 Icon Serial -InputList3SigType2072=Serial -InputList3Cue2073=Set Item 60 Icon Serial -InputList3SigType2073=Serial -InputList3Cue2074=Set Item 61 Icon Serial -InputList3SigType2074=Serial -InputList3Cue2075=Set Item 62 Icon Serial -InputList3SigType2075=Serial -InputList3Cue2076=Set Item 63 Icon Serial -InputList3SigType2076=Serial -InputList3Cue2077=Set Item 64 Icon Serial -InputList3SigType2077=Serial -InputList3Cue2078=Set Item 65 Icon Serial -InputList3SigType2078=Serial -InputList3Cue2079=Set Item 66 Icon Serial -InputList3SigType2079=Serial -InputList3Cue2080=Set Item 67 Icon Serial -InputList3SigType2080=Serial -InputList3Cue2081=Set Item 68 Icon Serial -InputList3SigType2081=Serial -InputList3Cue2082=Set Item 69 Icon Serial -InputList3SigType2082=Serial -InputList3Cue2083=Set Item 70 Icon Serial -InputList3SigType2083=Serial -InputList3Cue2084=Set Item 71 Icon Serial -InputList3SigType2084=Serial -InputList3Cue2085=Set Item 72 Icon Serial -InputList3SigType2085=Serial -InputList3Cue2086=Set Item 73 Icon Serial -InputList3SigType2086=Serial -InputList3Cue2087=Set Item 74 Icon Serial -InputList3SigType2087=Serial -InputList3Cue2088=Set Item 75 Icon Serial -InputList3SigType2088=Serial -InputList3Cue2089=Set Item 76 Icon Serial -InputList3SigType2089=Serial -InputList3Cue2090=Set Item 77 Icon Serial -InputList3SigType2090=Serial -InputList3Cue2091=Set Item 78 Icon Serial -InputList3SigType2091=Serial -InputList3Cue2092=Set Item 79 Icon Serial -InputList3SigType2092=Serial -InputList3Cue2093=Set Item 80 Icon Serial -InputList3SigType2093=Serial -InputList3Cue2094=Set Item 81 Icon Serial -InputList3SigType2094=Serial -InputList3Cue2095=Set Item 82 Icon Serial -InputList3SigType2095=Serial -InputList3Cue2096=Set Item 83 Icon Serial -InputList3SigType2096=Serial -InputList3Cue2097=Set Item 84 Icon Serial -InputList3SigType2097=Serial -InputList3Cue2098=Set Item 85 Icon Serial -InputList3SigType2098=Serial -InputList3Cue2099=Set Item 86 Icon Serial -InputList3SigType2099=Serial -InputList3Cue2100=Set Item 87 Icon Serial -InputList3SigType2100=Serial -InputList3Cue2101=Set Item 88 Icon Serial -InputList3SigType2101=Serial -InputList3Cue2102=Set Item 89 Icon Serial -InputList3SigType2102=Serial -InputList3Cue2103=Set Item 90 Icon Serial -InputList3SigType2103=Serial -InputList3Cue2104=Set Item 91 Icon Serial -InputList3SigType2104=Serial -InputList3Cue2105=Set Item 92 Icon Serial -InputList3SigType2105=Serial -InputList3Cue2106=Set Item 93 Icon Serial -InputList3SigType2106=Serial -InputList3Cue2107=Set Item 94 Icon Serial -InputList3SigType2107=Serial -InputList3Cue2108=Set Item 95 Icon Serial -InputList3SigType2108=Serial -InputList3Cue2109=Set Item 96 Icon Serial -InputList3SigType2109=Serial -InputList3Cue2110=Set Item 97 Icon Serial -InputList3SigType2110=Serial -InputList3Cue2111=Set Item 98 Icon Serial -InputList3SigType2111=Serial -InputList3Cue2112=Set Item 99 Icon Serial -InputList3SigType2112=Serial -InputList3Cue2113=Set Item 100 Icon Serial -InputList3SigType2113=Serial -InputList3Cue2114=Set Item 101 Icon Serial -InputList3SigType2114=Serial -InputList3Cue2115=Set Item 102 Icon Serial -InputList3SigType2115=Serial -InputList3Cue2116=Set Item 103 Icon Serial -InputList3SigType2116=Serial -InputList3Cue2117=Set Item 104 Icon Serial -InputList3SigType2117=Serial -InputList3Cue2118=Set Item 105 Icon Serial -InputList3SigType2118=Serial -InputList3Cue2119=Set Item 106 Icon Serial -InputList3SigType2119=Serial -InputList3Cue2120=Set Item 107 Icon Serial -InputList3SigType2120=Serial -InputList3Cue2121=Set Item 108 Icon Serial -InputList3SigType2121=Serial -InputList3Cue2122=Set Item 109 Icon Serial -InputList3SigType2122=Serial -InputList3Cue2123=Set Item 110 Icon Serial -InputList3SigType2123=Serial -InputList3Cue2124=Set Item 111 Icon Serial -InputList3SigType2124=Serial -InputList3Cue2125=Set Item 112 Icon Serial -InputList3SigType2125=Serial -InputList3Cue2126=Set Item 113 Icon Serial -InputList3SigType2126=Serial -InputList3Cue2127=Set Item 114 Icon Serial -InputList3SigType2127=Serial -InputList3Cue2128=Set Item 115 Icon Serial -InputList3SigType2128=Serial -InputList3Cue2129=Set Item 116 Icon Serial -InputList3SigType2129=Serial -InputList3Cue2130=Set Item 117 Icon Serial -InputList3SigType2130=Serial -InputList3Cue2131=Set Item 118 Icon Serial -InputList3SigType2131=Serial -InputList3Cue2132=Set Item 119 Icon Serial -InputList3SigType2132=Serial -InputList3Cue2133=Set Item 120 Icon Serial -InputList3SigType2133=Serial -InputList3Cue2134=Set Item 121 Icon Serial -InputList3SigType2134=Serial -InputList3Cue2135=Set Item 122 Icon Serial -InputList3SigType2135=Serial -InputList3Cue2136=Set Item 123 Icon Serial -InputList3SigType2136=Serial -InputList3Cue2137=Set Item 124 Icon Serial -InputList3SigType2137=Serial -InputList3Cue2138=Set Item 125 Icon Serial -InputList3SigType2138=Serial -InputList3Cue2139=Set Item 126 Icon Serial -InputList3SigType2139=Serial -InputList3Cue2140=Set Item 127 Icon Serial -InputList3SigType2140=Serial -InputList3Cue2141=Set Item 128 Icon Serial -InputList3SigType2141=Serial -InputList3Cue2142=Set Item 129 Icon Serial -InputList3SigType2142=Serial -InputList3Cue2143=Set Item 130 Icon Serial -InputList3SigType2143=Serial -InputList3Cue2144=Set Item 131 Icon Serial -InputList3SigType2144=Serial -InputList3Cue2145=Set Item 132 Icon Serial -InputList3SigType2145=Serial -InputList3Cue2146=Set Item 133 Icon Serial -InputList3SigType2146=Serial -InputList3Cue2147=Set Item 134 Icon Serial -InputList3SigType2147=Serial -InputList3Cue2148=Set Item 135 Icon Serial -InputList3SigType2148=Serial -InputList3Cue2149=Set Item 136 Icon Serial -InputList3SigType2149=Serial -InputList3Cue2150=Set Item 137 Icon Serial -InputList3SigType2150=Serial -InputList3Cue2151=Set Item 138 Icon Serial -InputList3SigType2151=Serial -InputList3Cue2152=Set Item 139 Icon Serial -InputList3SigType2152=Serial -InputList3Cue2153=Set Item 140 Icon Serial -InputList3SigType2153=Serial -InputList3Cue2154=Set Item 141 Icon Serial -InputList3SigType2154=Serial -InputList3Cue2155=Set Item 142 Icon Serial -InputList3SigType2155=Serial -InputList3Cue2156=Set Item 143 Icon Serial -InputList3SigType2156=Serial -InputList3Cue2157=Set Item 144 Icon Serial -InputList3SigType2157=Serial -InputList3Cue2158=Set Item 145 Icon Serial -InputList3SigType2158=Serial -InputList3Cue2159=Set Item 146 Icon Serial -InputList3SigType2159=Serial -InputList3Cue2160=Set Item 147 Icon Serial -InputList3SigType2160=Serial -InputList3Cue2161=Set Item 148 Icon Serial -InputList3SigType2161=Serial -InputList3Cue2162=Set Item 149 Icon Serial -InputList3SigType2162=Serial -InputList3Cue2163=Set Item 150 Icon Serial -InputList3SigType2163=Serial -InputList3Cue2164=Set Item 151 Icon Serial -InputList3SigType2164=Serial -InputList3Cue2165=Set Item 152 Icon Serial -InputList3SigType2165=Serial -InputList3Cue2166=Set Item 153 Icon Serial -InputList3SigType2166=Serial -InputList3Cue2167=Set Item 154 Icon Serial -InputList3SigType2167=Serial -InputList3Cue2168=Set Item 155 Icon Serial -InputList3SigType2168=Serial -InputList3Cue2169=Set Item 156 Icon Serial -InputList3SigType2169=Serial -InputList3Cue2170=Set Item 157 Icon Serial -InputList3SigType2170=Serial -InputList3Cue2171=Set Item 158 Icon Serial -InputList3SigType2171=Serial -InputList3Cue2172=Set Item 159 Icon Serial -InputList3SigType2172=Serial -InputList3Cue2173=Set Item 160 Icon Serial -InputList3SigType2173=Serial -InputList3Cue2174=Set Item 161 Icon Serial -InputList3SigType2174=Serial -InputList3Cue2175=Set Item 162 Icon Serial -InputList3SigType2175=Serial -InputList3Cue2176=Set Item 163 Icon Serial -InputList3SigType2176=Serial -InputList3Cue2177=Set Item 164 Icon Serial -InputList3SigType2177=Serial -InputList3Cue2178=Set Item 165 Icon Serial -InputList3SigType2178=Serial -InputList3Cue2179=Set Item 166 Icon Serial -InputList3SigType2179=Serial -InputList3Cue2180=Set Item 167 Icon Serial -InputList3SigType2180=Serial -InputList3Cue2181=Set Item 168 Icon Serial -InputList3SigType2181=Serial -InputList3Cue2182=Set Item 169 Icon Serial -InputList3SigType2182=Serial -InputList3Cue2183=Set Item 170 Icon Serial -InputList3SigType2183=Serial -InputList3Cue2184=Set Item 171 Icon Serial -InputList3SigType2184=Serial -InputList3Cue2185=Set Item 172 Icon Serial -InputList3SigType2185=Serial -InputList3Cue2186=Set Item 173 Icon Serial -InputList3SigType2186=Serial -InputList3Cue2187=Set Item 174 Icon Serial -InputList3SigType2187=Serial -InputList3Cue2188=Set Item 175 Icon Serial -InputList3SigType2188=Serial -InputList3Cue2189=Set Item 176 Icon Serial -InputList3SigType2189=Serial -InputList3Cue2190=Set Item 177 Icon Serial -InputList3SigType2190=Serial -InputList3Cue2191=Set Item 178 Icon Serial -InputList3SigType2191=Serial -InputList3Cue2192=Set Item 179 Icon Serial -InputList3SigType2192=Serial -InputList3Cue2193=Set Item 180 Icon Serial -InputList3SigType2193=Serial -InputList3Cue2194=Set Item 181 Icon Serial -InputList3SigType2194=Serial -InputList3Cue2195=Set Item 182 Icon Serial -InputList3SigType2195=Serial -InputList3Cue2196=Set Item 183 Icon Serial -InputList3SigType2196=Serial -InputList3Cue2197=Set Item 184 Icon Serial -InputList3SigType2197=Serial -InputList3Cue2198=Set Item 185 Icon Serial -InputList3SigType2198=Serial -InputList3Cue2199=Set Item 186 Icon Serial -InputList3SigType2199=Serial -InputList3Cue2200=Set Item 187 Icon Serial -InputList3SigType2200=Serial -InputList3Cue2201=Set Item 188 Icon Serial -InputList3SigType2201=Serial -InputList3Cue2202=Set Item 189 Icon Serial -InputList3SigType2202=Serial -InputList3Cue2203=Set Item 190 Icon Serial -InputList3SigType2203=Serial -InputList3Cue2204=Set Item 191 Icon Serial -InputList3SigType2204=Serial -InputList3Cue2205=Set Item 192 Icon Serial -InputList3SigType2205=Serial -InputList3Cue2206=Set Item 193 Icon Serial -InputList3SigType2206=Serial -InputList3Cue2207=Set Item 194 Icon Serial -InputList3SigType2207=Serial -InputList3Cue2208=Set Item 195 Icon Serial -InputList3SigType2208=Serial -InputList3Cue2209=Set Item 196 Icon Serial -InputList3SigType2209=Serial -InputList3Cue2210=Set Item 197 Icon Serial -InputList3SigType2210=Serial -InputList3Cue2211=Set Item 198 Icon Serial -InputList3SigType2211=Serial -InputList3Cue2212=Set Item 199 Icon Serial -InputList3SigType2212=Serial -InputList3Cue2213=Set Item 200 Icon Serial -InputList3SigType2213=Serial -InputList3Cue2214=Set Item 201 Icon Serial -InputList3SigType2214=Serial -InputList3Cue2215=Set Item 202 Icon Serial -InputList3SigType2215=Serial -InputList3Cue2216=Set Item 203 Icon Serial -InputList3SigType2216=Serial -InputList3Cue2217=Set Item 204 Icon Serial -InputList3SigType2217=Serial -InputList3Cue2218=Set Item 205 Icon Serial -InputList3SigType2218=Serial -InputList3Cue2219=Set Item 206 Icon Serial -InputList3SigType2219=Serial -InputList3Cue2220=Set Item 207 Icon Serial -InputList3SigType2220=Serial -InputList3Cue2221=Set Item 208 Icon Serial -InputList3SigType2221=Serial -InputList3Cue2222=Set Item 209 Icon Serial -InputList3SigType2222=Serial -InputList3Cue2223=Set Item 210 Icon Serial -InputList3SigType2223=Serial -InputList3Cue2224=Set Item 211 Icon Serial -InputList3SigType2224=Serial -InputList3Cue2225=Set Item 212 Icon Serial -InputList3SigType2225=Serial -InputList3Cue2226=Set Item 213 Icon Serial -InputList3SigType2226=Serial -InputList3Cue2227=Set Item 214 Icon Serial -InputList3SigType2227=Serial -InputList3Cue2228=Set Item 215 Icon Serial -InputList3SigType2228=Serial -InputList3Cue2229=Set Item 216 Icon Serial -InputList3SigType2229=Serial -InputList3Cue2230=Set Item 217 Icon Serial -InputList3SigType2230=Serial -InputList3Cue2231=Set Item 218 Icon Serial -InputList3SigType2231=Serial -InputList3Cue2232=Set Item 219 Icon Serial -InputList3SigType2232=Serial -InputList3Cue2233=Set Item 220 Icon Serial -InputList3SigType2233=Serial -InputList3Cue2234=Set Item 221 Icon Serial -InputList3SigType2234=Serial -InputList3Cue2235=Set Item 222 Icon Serial -InputList3SigType2235=Serial -InputList3Cue2236=Set Item 223 Icon Serial -InputList3SigType2236=Serial -InputList3Cue2237=Set Item 224 Icon Serial -InputList3SigType2237=Serial -InputList3Cue2238=Set Item 225 Icon Serial -InputList3SigType2238=Serial -InputList3Cue2239=Set Item 226 Icon Serial -InputList3SigType2239=Serial -InputList3Cue2240=Set Item 227 Icon Serial -InputList3SigType2240=Serial -InputList3Cue2241=Set Item 228 Icon Serial -InputList3SigType2241=Serial -InputList3Cue2242=Set Item 229 Icon Serial -InputList3SigType2242=Serial -InputList3Cue2243=Set Item 230 Icon Serial -InputList3SigType2243=Serial -InputList3Cue2244=Set Item 231 Icon Serial -InputList3SigType2244=Serial -InputList3Cue2245=Set Item 232 Icon Serial -InputList3SigType2245=Serial -InputList3Cue2246=Set Item 233 Icon Serial -InputList3SigType2246=Serial -InputList3Cue2247=Set Item 234 Icon Serial -InputList3SigType2247=Serial -InputList3Cue2248=Set Item 235 Icon Serial -InputList3SigType2248=Serial -InputList3Cue2249=Set Item 236 Icon Serial -InputList3SigType2249=Serial -InputList3Cue2250=Set Item 237 Icon Serial -InputList3SigType2250=Serial -InputList3Cue2251=Set Item 238 Icon Serial -InputList3SigType2251=Serial -InputList3Cue2252=Set Item 239 Icon Serial -InputList3SigType2252=Serial -InputList3Cue2253=Set Item 240 Icon Serial -InputList3SigType2253=Serial -InputList3Cue2254=Set Item 241 Icon Serial -InputList3SigType2254=Serial -InputList3Cue2255=Set Item 242 Icon Serial -InputList3SigType2255=Serial -InputList3Cue2256=Set Item 243 Icon Serial -InputList3SigType2256=Serial -InputList3Cue2257=Set Item 244 Icon Serial -InputList3SigType2257=Serial -InputList3Cue2258=Set Item 245 Icon Serial -InputList3SigType2258=Serial -InputList3Cue2259=Set Item 246 Icon Serial -InputList3SigType2259=Serial -InputList3Cue2260=Set Item 247 Icon Serial -InputList3SigType2260=Serial -InputList3Cue2261=Set Item 248 Icon Serial -InputList3SigType2261=Serial -InputList3Cue2262=Set Item 249 Icon Serial -InputList3SigType2262=Serial -InputList3Cue2263=Set Item 250 Icon Serial -InputList3SigType2263=Serial -InputList3Cue2264=Set Item 251 Icon Serial -InputList3SigType2264=Serial -InputList3Cue2265=Set Item 252 Icon Serial -InputList3SigType2265=Serial -InputList3Cue2266=Set Item 253 Icon Serial -InputList3SigType2266=Serial -InputList3Cue2267=Set Item 254 Icon Serial -InputList3SigType2267=Serial -InputList3Cue2268=Set Item 255 Icon Serial -InputList3SigType2268=Serial -InputList3Cue2269=[~UNUSED2~] -InputList3SigType2269=Digital|Analog|Serial|String -InputList3Cue4014=[~EndGroup~]Item Icons -InputList3SigType4014=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~]Item Texts -OutputList3SigType11=Serial -OutputList3Cue12=[~UNUSED3~] -OutputList3SigType12=Serial -OutputList3Cue13=[~UNUSED3~] -OutputList3SigType13=Serial -OutputList3Cue14=[~UNUSED3~] -OutputList3SigType14=Serial -OutputList3Cue15=[~UNUSED3~] -OutputList3SigType15=Serial -OutputList3Cue16=[~UNUSED3~] -OutputList3SigType16=Serial -OutputList3Cue17=[~UNUSED3~] -OutputList3SigType17=Serial -OutputList3Cue18=[~UNUSED3~] -OutputList3SigType18=Serial -OutputList3Cue19=[~UNUSED3~] -OutputList3SigType19=Serial -OutputList3Cue20=[~UNUSED3~] -OutputList3SigType20=Serial -OutputList3Cue21=[~UNUSED3~] -OutputList3SigType21=Serial -OutputList3Cue22=[~UNUSED3~] -OutputList3SigType22=Serial -OutputList3Cue23=[~UNUSED3~] -OutputList3SigType23=Serial -OutputList3Cue24=[~UNUSED3~] -OutputList3SigType24=Serial -OutputList3Cue25=[~UNUSED3~] -OutputList3SigType25=Serial -OutputList3Cue26=[~UNUSED3~] -OutputList3SigType26=Serial -OutputList3Cue27=[~UNUSED3~] -OutputList3SigType27=Serial -OutputList3Cue28=[~UNUSED3~] -OutputList3SigType28=Serial -OutputList3Cue29=[~UNUSED3~] -OutputList3SigType29=Serial -OutputList3Cue30=[~UNUSED3~] -OutputList3SigType30=Serial -OutputList3Cue31=[~UNUSED3~] -OutputList3SigType31=Serial -OutputList3Cue32=[~UNUSED3~] -OutputList3SigType32=Serial -OutputList3Cue33=[~UNUSED3~] -OutputList3SigType33=Serial -OutputList3Cue34=[~UNUSED3~] -OutputList3SigType34=Serial -OutputList3Cue35=[~UNUSED3~] -OutputList3SigType35=Serial -OutputList3Cue36=[~UNUSED3~] -OutputList3SigType36=Serial -OutputList3Cue37=[~UNUSED3~] -OutputList3SigType37=Serial -OutputList3Cue38=[~UNUSED3~] -OutputList3SigType38=Serial -OutputList3Cue39=[~UNUSED3~] -OutputList3SigType39=Serial -OutputList3Cue40=[~UNUSED3~] -OutputList3SigType40=Serial -OutputList3Cue41=[~UNUSED3~] -OutputList3SigType41=Serial -OutputList3Cue42=[~UNUSED3~] -OutputList3SigType42=Serial -OutputList3Cue43=[~UNUSED3~] -OutputList3SigType43=Serial -OutputList3Cue44=[~UNUSED3~] -OutputList3SigType44=Serial -OutputList3Cue45=[~UNUSED3~] -OutputList3SigType45=Serial -OutputList3Cue46=[~UNUSED3~] -OutputList3SigType46=Serial -OutputList3Cue47=[~UNUSED3~] -OutputList3SigType47=Serial -OutputList3Cue48=[~UNUSED3~] -OutputList3SigType48=Serial -OutputList3Cue49=[~UNUSED3~] -OutputList3SigType49=Serial -OutputList3Cue50=[~UNUSED3~] -OutputList3SigType50=Serial -OutputList3Cue51=[~UNUSED3~] -OutputList3SigType51=Serial -OutputList3Cue52=[~UNUSED3~] -OutputList3SigType52=Serial -OutputList3Cue53=[~UNUSED3~] -OutputList3SigType53=Serial -OutputList3Cue54=[~UNUSED3~] -OutputList3SigType54=Serial -OutputList3Cue55=[~UNUSED3~] -OutputList3SigType55=Serial -OutputList3Cue56=[~UNUSED3~] -OutputList3SigType56=Serial -OutputList3Cue57=[~UNUSED3~] -OutputList3SigType57=Serial -OutputList3Cue58=[~UNUSED3~] -OutputList3SigType58=Serial -OutputList3Cue59=[~UNUSED3~] -OutputList3SigType59=Serial -OutputList3Cue60=[~UNUSED3~] -OutputList3SigType60=Serial -OutputList3Cue61=[~UNUSED3~] -OutputList3SigType61=Serial -OutputList3Cue62=[~UNUSED3~] -OutputList3SigType62=Serial -OutputList3Cue63=[~UNUSED3~] -OutputList3SigType63=Serial -OutputList3Cue64=[~UNUSED3~] -OutputList3SigType64=Serial -OutputList3Cue65=[~UNUSED3~] -OutputList3SigType65=Serial -OutputList3Cue66=[~UNUSED3~] -OutputList3SigType66=Serial -OutputList3Cue67=[~UNUSED3~] -OutputList3SigType67=Serial -OutputList3Cue68=[~UNUSED3~] -OutputList3SigType68=Serial -OutputList3Cue69=[~UNUSED3~] -OutputList3SigType69=Serial -OutputList3Cue70=[~UNUSED3~] -OutputList3SigType70=Serial -OutputList3Cue71=[~UNUSED3~] -OutputList3SigType71=Serial -OutputList3Cue72=[~UNUSED3~] -OutputList3SigType72=Serial -OutputList3Cue73=[~UNUSED3~] -OutputList3SigType73=Serial -OutputList3Cue74=[~UNUSED3~] -OutputList3SigType74=Serial -OutputList3Cue75=[~UNUSED3~] -OutputList3SigType75=Serial -OutputList3Cue76=[~UNUSED3~] -OutputList3SigType76=Serial -OutputList3Cue77=[~UNUSED3~] -OutputList3SigType77=Serial -OutputList3Cue78=[~UNUSED3~] -OutputList3SigType78=Serial -OutputList3Cue79=[~UNUSED3~] -OutputList3SigType79=Serial -OutputList3Cue80=[~UNUSED3~] -OutputList3SigType80=Serial -OutputList3Cue81=[~UNUSED3~] -OutputList3SigType81=Serial -OutputList3Cue82=[~UNUSED3~] -OutputList3SigType82=Serial -OutputList3Cue83=[~UNUSED3~] -OutputList3SigType83=Serial -OutputList3Cue84=[~UNUSED3~] -OutputList3SigType84=Serial -OutputList3Cue85=[~UNUSED3~] -OutputList3SigType85=Serial -OutputList3Cue86=[~UNUSED3~] -OutputList3SigType86=Serial -OutputList3Cue87=[~UNUSED3~] -OutputList3SigType87=Serial -OutputList3Cue88=[~UNUSED3~] -OutputList3SigType88=Serial -OutputList3Cue89=[~UNUSED3~] -OutputList3SigType89=Serial -OutputList3Cue90=[~UNUSED3~] -OutputList3SigType90=Serial -OutputList3Cue91=[~UNUSED3~] -OutputList3SigType91=Serial -OutputList3Cue92=[~UNUSED3~] -OutputList3SigType92=Serial -OutputList3Cue93=[~UNUSED3~] -OutputList3SigType93=Serial -OutputList3Cue94=[~UNUSED3~] -OutputList3SigType94=Serial -OutputList3Cue95=[~UNUSED3~] -OutputList3SigType95=Serial -OutputList3Cue96=[~UNUSED3~] -OutputList3SigType96=Serial -OutputList3Cue97=[~UNUSED3~] -OutputList3SigType97=Serial -OutputList3Cue98=[~UNUSED3~] -OutputList3SigType98=Serial -OutputList3Cue99=[~UNUSED3~] -OutputList3SigType99=Serial -OutputList3Cue100=[~UNUSED3~] -OutputList3SigType100=Serial -OutputList3Cue101=[~UNUSED3~] -OutputList3SigType101=Serial -OutputList3Cue102=[~UNUSED3~] -OutputList3SigType102=Serial -OutputList3Cue103=[~UNUSED3~] -OutputList3SigType103=Serial -OutputList3Cue104=[~UNUSED3~] -OutputList3SigType104=Serial -OutputList3Cue105=[~UNUSED3~] -OutputList3SigType105=Serial -OutputList3Cue106=[~UNUSED3~] -OutputList3SigType106=Serial -OutputList3Cue107=[~UNUSED3~] -OutputList3SigType107=Serial -OutputList3Cue108=[~UNUSED3~] -OutputList3SigType108=Serial -OutputList3Cue109=[~UNUSED3~] -OutputList3SigType109=Serial -OutputList3Cue110=[~UNUSED3~] -OutputList3SigType110=Serial -OutputList3Cue111=[~UNUSED3~] -OutputList3SigType111=Serial -OutputList3Cue112=[~UNUSED3~] -OutputList3SigType112=Serial -OutputList3Cue113=[~UNUSED3~] -OutputList3SigType113=Serial -OutputList3Cue114=[~UNUSED3~] -OutputList3SigType114=Serial -OutputList3Cue115=[~UNUSED3~] -OutputList3SigType115=Serial -OutputList3Cue116=[~UNUSED3~] -OutputList3SigType116=Serial -OutputList3Cue117=[~UNUSED3~] -OutputList3SigType117=Serial -OutputList3Cue118=[~UNUSED3~] -OutputList3SigType118=Serial -OutputList3Cue119=[~UNUSED3~] -OutputList3SigType119=Serial -OutputList3Cue120=[~UNUSED3~] -OutputList3SigType120=Serial -OutputList3Cue121=[~UNUSED3~] -OutputList3SigType121=Serial -OutputList3Cue122=[~UNUSED3~] -OutputList3SigType122=Serial -OutputList3Cue123=[~UNUSED3~] -OutputList3SigType123=Serial -OutputList3Cue124=[~UNUSED3~] -OutputList3SigType124=Serial -OutputList3Cue125=[~UNUSED3~] -OutputList3SigType125=Serial -OutputList3Cue126=[~UNUSED3~] -OutputList3SigType126=Serial -OutputList3Cue127=[~UNUSED3~] -OutputList3SigType127=Serial -OutputList3Cue128=[~UNUSED3~] -OutputList3SigType128=Serial -OutputList3Cue129=[~UNUSED3~] -OutputList3SigType129=Serial -OutputList3Cue130=[~UNUSED3~] -OutputList3SigType130=Serial -OutputList3Cue131=[~UNUSED3~] -OutputList3SigType131=Serial -OutputList3Cue132=[~UNUSED3~] -OutputList3SigType132=Serial -OutputList3Cue133=[~UNUSED3~] -OutputList3SigType133=Serial -OutputList3Cue134=[~UNUSED3~] -OutputList3SigType134=Serial -OutputList3Cue135=[~UNUSED3~] -OutputList3SigType135=Serial -OutputList3Cue136=[~UNUSED3~] -OutputList3SigType136=Serial -OutputList3Cue137=[~UNUSED3~] -OutputList3SigType137=Serial -OutputList3Cue138=[~UNUSED3~] -OutputList3SigType138=Serial -OutputList3Cue139=[~UNUSED3~] -OutputList3SigType139=Serial -OutputList3Cue140=[~UNUSED3~] -OutputList3SigType140=Serial -OutputList3Cue141=[~UNUSED3~] -OutputList3SigType141=Serial -OutputList3Cue142=[~UNUSED3~] -OutputList3SigType142=Serial -OutputList3Cue143=[~UNUSED3~] -OutputList3SigType143=Serial -OutputList3Cue144=[~UNUSED3~] -OutputList3SigType144=Serial -OutputList3Cue145=[~UNUSED3~] -OutputList3SigType145=Serial -OutputList3Cue146=[~UNUSED3~] -OutputList3SigType146=Serial -OutputList3Cue147=[~UNUSED3~] -OutputList3SigType147=Serial -OutputList3Cue148=[~UNUSED3~] -OutputList3SigType148=Serial -OutputList3Cue149=[~UNUSED3~] -OutputList3SigType149=Serial -OutputList3Cue150=[~UNUSED3~] -OutputList3SigType150=Serial -OutputList3Cue151=[~UNUSED3~] -OutputList3SigType151=Serial -OutputList3Cue152=[~UNUSED3~] -OutputList3SigType152=Serial -OutputList3Cue153=[~UNUSED3~] -OutputList3SigType153=Serial -OutputList3Cue154=[~UNUSED3~] -OutputList3SigType154=Serial -OutputList3Cue155=[~UNUSED3~] -OutputList3SigType155=Serial -OutputList3Cue156=[~UNUSED3~] -OutputList3SigType156=Serial -OutputList3Cue157=[~UNUSED3~] -OutputList3SigType157=Serial -OutputList3Cue158=[~UNUSED3~] -OutputList3SigType158=Serial -OutputList3Cue159=[~UNUSED3~] -OutputList3SigType159=Serial -OutputList3Cue160=[~UNUSED3~] -OutputList3SigType160=Serial -OutputList3Cue161=[~UNUSED3~] -OutputList3SigType161=Serial -OutputList3Cue162=[~UNUSED3~] -OutputList3SigType162=Serial -OutputList3Cue163=[~UNUSED3~] -OutputList3SigType163=Serial -OutputList3Cue164=[~UNUSED3~] -OutputList3SigType164=Serial -OutputList3Cue165=[~UNUSED3~] -OutputList3SigType165=Serial -OutputList3Cue166=[~UNUSED3~] -OutputList3SigType166=Serial -OutputList3Cue167=[~UNUSED3~] -OutputList3SigType167=Serial -OutputList3Cue168=[~UNUSED3~] -OutputList3SigType168=Serial -OutputList3Cue169=[~UNUSED3~] -OutputList3SigType169=Serial -OutputList3Cue170=[~UNUSED3~] -OutputList3SigType170=Serial -OutputList3Cue171=[~UNUSED3~] -OutputList3SigType171=Serial -OutputList3Cue172=[~UNUSED3~] -OutputList3SigType172=Serial -OutputList3Cue173=[~UNUSED3~] -OutputList3SigType173=Serial -OutputList3Cue174=[~UNUSED3~] -OutputList3SigType174=Serial -OutputList3Cue175=[~UNUSED3~] -OutputList3SigType175=Serial -OutputList3Cue176=[~UNUSED3~] -OutputList3SigType176=Serial -OutputList3Cue177=[~UNUSED3~] -OutputList3SigType177=Serial -OutputList3Cue178=[~UNUSED3~] -OutputList3SigType178=Serial -OutputList3Cue179=[~UNUSED3~] -OutputList3SigType179=Serial -OutputList3Cue180=[~UNUSED3~] -OutputList3SigType180=Serial -OutputList3Cue181=[~UNUSED3~] -OutputList3SigType181=Serial -OutputList3Cue182=[~UNUSED3~] -OutputList3SigType182=Serial -OutputList3Cue183=[~UNUSED3~] -OutputList3SigType183=Serial -OutputList3Cue184=[~UNUSED3~] -OutputList3SigType184=Serial -OutputList3Cue185=[~UNUSED3~] -OutputList3SigType185=Serial -OutputList3Cue186=[~UNUSED3~] -OutputList3SigType186=Serial -OutputList3Cue187=[~UNUSED3~] -OutputList3SigType187=Serial -OutputList3Cue188=[~UNUSED3~] -OutputList3SigType188=Serial -OutputList3Cue189=[~UNUSED3~] -OutputList3SigType189=Serial -OutputList3Cue190=[~UNUSED3~] -OutputList3SigType190=Serial -OutputList3Cue191=[~UNUSED3~] -OutputList3SigType191=Serial -OutputList3Cue192=[~UNUSED3~] -OutputList3SigType192=Serial -OutputList3Cue193=[~UNUSED3~] -OutputList3SigType193=Serial -OutputList3Cue194=[~UNUSED3~] -OutputList3SigType194=Serial -OutputList3Cue195=[~UNUSED3~] -OutputList3SigType195=Serial -OutputList3Cue196=[~UNUSED3~] -OutputList3SigType196=Serial -OutputList3Cue197=[~UNUSED3~] -OutputList3SigType197=Serial -OutputList3Cue198=[~UNUSED3~] -OutputList3SigType198=Serial -OutputList3Cue199=[~UNUSED3~] -OutputList3SigType199=Serial -OutputList3Cue200=[~UNUSED3~] -OutputList3SigType200=Serial -OutputList3Cue201=[~UNUSED3~] -OutputList3SigType201=Serial -OutputList3Cue202=[~UNUSED3~] -OutputList3SigType202=Serial -OutputList3Cue203=[~UNUSED3~] -OutputList3SigType203=Serial -OutputList3Cue204=[~UNUSED3~] -OutputList3SigType204=Serial -OutputList3Cue205=[~UNUSED3~] -OutputList3SigType205=Serial -OutputList3Cue206=[~UNUSED3~] -OutputList3SigType206=Serial -OutputList3Cue207=[~UNUSED3~] -OutputList3SigType207=Serial -OutputList3Cue208=[~UNUSED3~] -OutputList3SigType208=Serial -OutputList3Cue209=[~UNUSED3~] -OutputList3SigType209=Serial -OutputList3Cue210=[~UNUSED3~] -OutputList3SigType210=Serial -OutputList3Cue211=[~UNUSED3~] -OutputList3SigType211=Serial -OutputList3Cue212=[~UNUSED3~] -OutputList3SigType212=Serial -OutputList3Cue213=[~UNUSED3~] -OutputList3SigType213=Serial -OutputList3Cue214=[~UNUSED3~] -OutputList3SigType214=Serial -OutputList3Cue215=[~UNUSED3~] -OutputList3SigType215=Serial -OutputList3Cue216=[~UNUSED3~] -OutputList3SigType216=Serial -OutputList3Cue217=[~UNUSED3~] -OutputList3SigType217=Serial -OutputList3Cue218=[~UNUSED3~] -OutputList3SigType218=Serial -OutputList3Cue219=[~UNUSED3~] -OutputList3SigType219=Serial -OutputList3Cue220=[~UNUSED3~] -OutputList3SigType220=Serial -OutputList3Cue221=[~UNUSED3~] -OutputList3SigType221=Serial -OutputList3Cue222=[~UNUSED3~] -OutputList3SigType222=Serial -OutputList3Cue223=[~UNUSED3~] -OutputList3SigType223=Serial -OutputList3Cue224=[~UNUSED3~] -OutputList3SigType224=Serial -OutputList3Cue225=[~UNUSED3~] -OutputList3SigType225=Serial -OutputList3Cue226=[~UNUSED3~] -OutputList3SigType226=Serial -OutputList3Cue227=[~UNUSED3~] -OutputList3SigType227=Serial -OutputList3Cue228=[~UNUSED3~] -OutputList3SigType228=Serial -OutputList3Cue229=[~UNUSED3~] -OutputList3SigType229=Serial -OutputList3Cue230=[~UNUSED3~] -OutputList3SigType230=Serial -OutputList3Cue231=[~UNUSED3~] -OutputList3SigType231=Serial -OutputList3Cue232=[~UNUSED3~] -OutputList3SigType232=Serial -OutputList3Cue233=[~UNUSED3~] -OutputList3SigType233=Serial -OutputList3Cue234=[~UNUSED3~] -OutputList3SigType234=Serial -OutputList3Cue235=[~UNUSED3~] -OutputList3SigType235=Serial -OutputList3Cue236=[~UNUSED3~] -OutputList3SigType236=Serial -OutputList3Cue237=[~UNUSED3~] -OutputList3SigType237=Serial -OutputList3Cue238=[~UNUSED3~] -OutputList3SigType238=Serial -OutputList3Cue239=[~UNUSED3~] -OutputList3SigType239=Serial -OutputList3Cue240=[~UNUSED3~] -OutputList3SigType240=Serial -OutputList3Cue241=[~UNUSED3~] -OutputList3SigType241=Serial -OutputList3Cue242=[~UNUSED3~] -OutputList3SigType242=Serial -OutputList3Cue243=[~UNUSED3~] -OutputList3SigType243=Serial -OutputList3Cue244=[~UNUSED3~] -OutputList3SigType244=Serial -OutputList3Cue245=[~UNUSED3~] -OutputList3SigType245=Serial -OutputList3Cue246=[~UNUSED3~] -OutputList3SigType246=Serial -OutputList3Cue247=[~UNUSED3~] -OutputList3SigType247=Serial -OutputList3Cue248=[~UNUSED3~] -OutputList3SigType248=Serial -OutputList3Cue249=[~UNUSED3~] -OutputList3SigType249=Serial -OutputList3Cue250=[~UNUSED3~] -OutputList3SigType250=Serial -OutputList3Cue251=[~UNUSED3~] -OutputList3SigType251=Serial -OutputList3Cue252=[~UNUSED3~] -OutputList3SigType252=Serial -OutputList3Cue253=[~UNUSED3~] -OutputList3SigType253=Serial -OutputList3Cue254=[~UNUSED3~] -OutputList3SigType254=Serial -OutputList3Cue255=[~UNUSED3~] -OutputList3SigType255=Serial -OutputList3Cue256=[~UNUSED3~] -OutputList3SigType256=Serial -OutputList3Cue257=[~UNUSED3~] -OutputList3SigType257=Serial -OutputList3Cue258=[~UNUSED3~] -OutputList3SigType258=Serial -OutputList3Cue259=[~UNUSED3~] -OutputList3SigType259=Serial -OutputList3Cue260=[~UNUSED3~] -OutputList3SigType260=Serial -OutputList3Cue261=[~UNUSED3~] -OutputList3SigType261=Serial -OutputList3Cue262=[~UNUSED3~] -OutputList3SigType262=Serial -OutputList3Cue263=[~UNUSED3~] -OutputList3SigType263=Serial -OutputList3Cue264=[~UNUSED3~] -OutputList3SigType264=Serial -OutputList3Cue265=[~UNUSED3~] -OutputList3SigType265=Serial -OutputList3Cue266=[~UNUSED3~] -OutputList3SigType266=Serial -OutputList3Cue267=[~UNUSED2~] -OutputList3SigType267=Digital|Analog|Serial|String -OutputList3Cue2012=[~EndGroup~]Item Texts -OutputList3SigType2012=Serial -OutputList3Cue2013=[~BeginGroup~]Item Icons -OutputList3SigType2013=Serial -OutputList3Cue2014=[~UNUSED3~] -OutputList3SigType2014=Serial -OutputList3Cue2015=[~UNUSED3~] -OutputList3SigType2015=Serial -OutputList3Cue2016=[~UNUSED3~] -OutputList3SigType2016=Serial -OutputList3Cue2017=[~UNUSED3~] -OutputList3SigType2017=Serial -OutputList3Cue2018=[~UNUSED3~] -OutputList3SigType2018=Serial -OutputList3Cue2019=[~UNUSED3~] -OutputList3SigType2019=Serial -OutputList3Cue2020=[~UNUSED3~] -OutputList3SigType2020=Serial -OutputList3Cue2021=[~UNUSED3~] -OutputList3SigType2021=Serial -OutputList3Cue2022=[~UNUSED3~] -OutputList3SigType2022=Serial -OutputList3Cue2023=[~UNUSED3~] -OutputList3SigType2023=Serial -OutputList3Cue2024=[~UNUSED3~] -OutputList3SigType2024=Serial -OutputList3Cue2025=[~UNUSED3~] -OutputList3SigType2025=Serial -OutputList3Cue2026=[~UNUSED3~] -OutputList3SigType2026=Serial -OutputList3Cue2027=[~UNUSED3~] -OutputList3SigType2027=Serial -OutputList3Cue2028=[~UNUSED3~] -OutputList3SigType2028=Serial -OutputList3Cue2029=[~UNUSED3~] -OutputList3SigType2029=Serial -OutputList3Cue2030=[~UNUSED3~] -OutputList3SigType2030=Serial -OutputList3Cue2031=[~UNUSED3~] -OutputList3SigType2031=Serial -OutputList3Cue2032=[~UNUSED3~] -OutputList3SigType2032=Serial -OutputList3Cue2033=[~UNUSED3~] -OutputList3SigType2033=Serial -OutputList3Cue2034=[~UNUSED3~] -OutputList3SigType2034=Serial -OutputList3Cue2035=[~UNUSED3~] -OutputList3SigType2035=Serial -OutputList3Cue2036=[~UNUSED3~] -OutputList3SigType2036=Serial -OutputList3Cue2037=[~UNUSED3~] -OutputList3SigType2037=Serial -OutputList3Cue2038=[~UNUSED3~] -OutputList3SigType2038=Serial -OutputList3Cue2039=[~UNUSED3~] -OutputList3SigType2039=Serial -OutputList3Cue2040=[~UNUSED3~] -OutputList3SigType2040=Serial -OutputList3Cue2041=[~UNUSED3~] -OutputList3SigType2041=Serial -OutputList3Cue2042=[~UNUSED3~] -OutputList3SigType2042=Serial -OutputList3Cue2043=[~UNUSED3~] -OutputList3SigType2043=Serial -OutputList3Cue2044=[~UNUSED3~] -OutputList3SigType2044=Serial -OutputList3Cue2045=[~UNUSED3~] -OutputList3SigType2045=Serial -OutputList3Cue2046=[~UNUSED3~] -OutputList3SigType2046=Serial -OutputList3Cue2047=[~UNUSED3~] -OutputList3SigType2047=Serial -OutputList3Cue2048=[~UNUSED3~] -OutputList3SigType2048=Serial -OutputList3Cue2049=[~UNUSED3~] -OutputList3SigType2049=Serial -OutputList3Cue2050=[~UNUSED3~] -OutputList3SigType2050=Serial -OutputList3Cue2051=[~UNUSED3~] -OutputList3SigType2051=Serial -OutputList3Cue2052=[~UNUSED3~] -OutputList3SigType2052=Serial -OutputList3Cue2053=[~UNUSED3~] -OutputList3SigType2053=Serial -OutputList3Cue2054=[~UNUSED3~] -OutputList3SigType2054=Serial -OutputList3Cue2055=[~UNUSED3~] -OutputList3SigType2055=Serial -OutputList3Cue2056=[~UNUSED3~] -OutputList3SigType2056=Serial -OutputList3Cue2057=[~UNUSED3~] -OutputList3SigType2057=Serial -OutputList3Cue2058=[~UNUSED3~] -OutputList3SigType2058=Serial -OutputList3Cue2059=[~UNUSED3~] -OutputList3SigType2059=Serial -OutputList3Cue2060=[~UNUSED3~] -OutputList3SigType2060=Serial -OutputList3Cue2061=[~UNUSED3~] -OutputList3SigType2061=Serial -OutputList3Cue2062=[~UNUSED3~] -OutputList3SigType2062=Serial -OutputList3Cue2063=[~UNUSED3~] -OutputList3SigType2063=Serial -OutputList3Cue2064=[~UNUSED3~] -OutputList3SigType2064=Serial -OutputList3Cue2065=[~UNUSED3~] -OutputList3SigType2065=Serial -OutputList3Cue2066=[~UNUSED3~] -OutputList3SigType2066=Serial -OutputList3Cue2067=[~UNUSED3~] -OutputList3SigType2067=Serial -OutputList3Cue2068=[~UNUSED3~] -OutputList3SigType2068=Serial -OutputList3Cue2069=[~UNUSED3~] -OutputList3SigType2069=Serial -OutputList3Cue2070=[~UNUSED3~] -OutputList3SigType2070=Serial -OutputList3Cue2071=[~UNUSED3~] -OutputList3SigType2071=Serial -OutputList3Cue2072=[~UNUSED3~] -OutputList3SigType2072=Serial -OutputList3Cue2073=[~UNUSED3~] -OutputList3SigType2073=Serial -OutputList3Cue2074=[~UNUSED3~] -OutputList3SigType2074=Serial -OutputList3Cue2075=[~UNUSED3~] -OutputList3SigType2075=Serial -OutputList3Cue2076=[~UNUSED3~] -OutputList3SigType2076=Serial -OutputList3Cue2077=[~UNUSED3~] -OutputList3SigType2077=Serial -OutputList3Cue2078=[~UNUSED3~] -OutputList3SigType2078=Serial -OutputList3Cue2079=[~UNUSED3~] -OutputList3SigType2079=Serial -OutputList3Cue2080=[~UNUSED3~] -OutputList3SigType2080=Serial -OutputList3Cue2081=[~UNUSED3~] -OutputList3SigType2081=Serial -OutputList3Cue2082=[~UNUSED3~] -OutputList3SigType2082=Serial -OutputList3Cue2083=[~UNUSED3~] -OutputList3SigType2083=Serial -OutputList3Cue2084=[~UNUSED3~] -OutputList3SigType2084=Serial -OutputList3Cue2085=[~UNUSED3~] -OutputList3SigType2085=Serial -OutputList3Cue2086=[~UNUSED3~] -OutputList3SigType2086=Serial -OutputList3Cue2087=[~UNUSED3~] -OutputList3SigType2087=Serial -OutputList3Cue2088=[~UNUSED3~] -OutputList3SigType2088=Serial -OutputList3Cue2089=[~UNUSED3~] -OutputList3SigType2089=Serial -OutputList3Cue2090=[~UNUSED3~] -OutputList3SigType2090=Serial -OutputList3Cue2091=[~UNUSED3~] -OutputList3SigType2091=Serial -OutputList3Cue2092=[~UNUSED3~] -OutputList3SigType2092=Serial -OutputList3Cue2093=[~UNUSED3~] -OutputList3SigType2093=Serial -OutputList3Cue2094=[~UNUSED3~] -OutputList3SigType2094=Serial -OutputList3Cue2095=[~UNUSED3~] -OutputList3SigType2095=Serial -OutputList3Cue2096=[~UNUSED3~] -OutputList3SigType2096=Serial -OutputList3Cue2097=[~UNUSED3~] -OutputList3SigType2097=Serial -OutputList3Cue2098=[~UNUSED3~] -OutputList3SigType2098=Serial -OutputList3Cue2099=[~UNUSED3~] -OutputList3SigType2099=Serial -OutputList3Cue2100=[~UNUSED3~] -OutputList3SigType2100=Serial -OutputList3Cue2101=[~UNUSED3~] -OutputList3SigType2101=Serial -OutputList3Cue2102=[~UNUSED3~] -OutputList3SigType2102=Serial -OutputList3Cue2103=[~UNUSED3~] -OutputList3SigType2103=Serial -OutputList3Cue2104=[~UNUSED3~] -OutputList3SigType2104=Serial -OutputList3Cue2105=[~UNUSED3~] -OutputList3SigType2105=Serial -OutputList3Cue2106=[~UNUSED3~] -OutputList3SigType2106=Serial -OutputList3Cue2107=[~UNUSED3~] -OutputList3SigType2107=Serial -OutputList3Cue2108=[~UNUSED3~] -OutputList3SigType2108=Serial -OutputList3Cue2109=[~UNUSED3~] -OutputList3SigType2109=Serial -OutputList3Cue2110=[~UNUSED3~] -OutputList3SigType2110=Serial -OutputList3Cue2111=[~UNUSED3~] -OutputList3SigType2111=Serial -OutputList3Cue2112=[~UNUSED3~] -OutputList3SigType2112=Serial -OutputList3Cue2113=[~UNUSED3~] -OutputList3SigType2113=Serial -OutputList3Cue2114=[~UNUSED3~] -OutputList3SigType2114=Serial -OutputList3Cue2115=[~UNUSED3~] -OutputList3SigType2115=Serial -OutputList3Cue2116=[~UNUSED3~] -OutputList3SigType2116=Serial -OutputList3Cue2117=[~UNUSED3~] -OutputList3SigType2117=Serial -OutputList3Cue2118=[~UNUSED3~] -OutputList3SigType2118=Serial -OutputList3Cue2119=[~UNUSED3~] -OutputList3SigType2119=Serial -OutputList3Cue2120=[~UNUSED3~] -OutputList3SigType2120=Serial -OutputList3Cue2121=[~UNUSED3~] -OutputList3SigType2121=Serial -OutputList3Cue2122=[~UNUSED3~] -OutputList3SigType2122=Serial -OutputList3Cue2123=[~UNUSED3~] -OutputList3SigType2123=Serial -OutputList3Cue2124=[~UNUSED3~] -OutputList3SigType2124=Serial -OutputList3Cue2125=[~UNUSED3~] -OutputList3SigType2125=Serial -OutputList3Cue2126=[~UNUSED3~] -OutputList3SigType2126=Serial -OutputList3Cue2127=[~UNUSED3~] -OutputList3SigType2127=Serial -OutputList3Cue2128=[~UNUSED3~] -OutputList3SigType2128=Serial -OutputList3Cue2129=[~UNUSED3~] -OutputList3SigType2129=Serial -OutputList3Cue2130=[~UNUSED3~] -OutputList3SigType2130=Serial -OutputList3Cue2131=[~UNUSED3~] -OutputList3SigType2131=Serial -OutputList3Cue2132=[~UNUSED3~] -OutputList3SigType2132=Serial -OutputList3Cue2133=[~UNUSED3~] -OutputList3SigType2133=Serial -OutputList3Cue2134=[~UNUSED3~] -OutputList3SigType2134=Serial -OutputList3Cue2135=[~UNUSED3~] -OutputList3SigType2135=Serial -OutputList3Cue2136=[~UNUSED3~] -OutputList3SigType2136=Serial -OutputList3Cue2137=[~UNUSED3~] -OutputList3SigType2137=Serial -OutputList3Cue2138=[~UNUSED3~] -OutputList3SigType2138=Serial -OutputList3Cue2139=[~UNUSED3~] -OutputList3SigType2139=Serial -OutputList3Cue2140=[~UNUSED3~] -OutputList3SigType2140=Serial -OutputList3Cue2141=[~UNUSED3~] -OutputList3SigType2141=Serial -OutputList3Cue2142=[~UNUSED3~] -OutputList3SigType2142=Serial -OutputList3Cue2143=[~UNUSED3~] -OutputList3SigType2143=Serial -OutputList3Cue2144=[~UNUSED3~] -OutputList3SigType2144=Serial -OutputList3Cue2145=[~UNUSED3~] -OutputList3SigType2145=Serial -OutputList3Cue2146=[~UNUSED3~] -OutputList3SigType2146=Serial -OutputList3Cue2147=[~UNUSED3~] -OutputList3SigType2147=Serial -OutputList3Cue2148=[~UNUSED3~] -OutputList3SigType2148=Serial -OutputList3Cue2149=[~UNUSED3~] -OutputList3SigType2149=Serial -OutputList3Cue2150=[~UNUSED3~] -OutputList3SigType2150=Serial -OutputList3Cue2151=[~UNUSED3~] -OutputList3SigType2151=Serial -OutputList3Cue2152=[~UNUSED3~] -OutputList3SigType2152=Serial -OutputList3Cue2153=[~UNUSED3~] -OutputList3SigType2153=Serial -OutputList3Cue2154=[~UNUSED3~] -OutputList3SigType2154=Serial -OutputList3Cue2155=[~UNUSED3~] -OutputList3SigType2155=Serial -OutputList3Cue2156=[~UNUSED3~] -OutputList3SigType2156=Serial -OutputList3Cue2157=[~UNUSED3~] -OutputList3SigType2157=Serial -OutputList3Cue2158=[~UNUSED3~] -OutputList3SigType2158=Serial -OutputList3Cue2159=[~UNUSED3~] -OutputList3SigType2159=Serial -OutputList3Cue2160=[~UNUSED3~] -OutputList3SigType2160=Serial -OutputList3Cue2161=[~UNUSED3~] -OutputList3SigType2161=Serial -OutputList3Cue2162=[~UNUSED3~] -OutputList3SigType2162=Serial -OutputList3Cue2163=[~UNUSED3~] -OutputList3SigType2163=Serial -OutputList3Cue2164=[~UNUSED3~] -OutputList3SigType2164=Serial -OutputList3Cue2165=[~UNUSED3~] -OutputList3SigType2165=Serial -OutputList3Cue2166=[~UNUSED3~] -OutputList3SigType2166=Serial -OutputList3Cue2167=[~UNUSED3~] -OutputList3SigType2167=Serial -OutputList3Cue2168=[~UNUSED3~] -OutputList3SigType2168=Serial -OutputList3Cue2169=[~UNUSED3~] -OutputList3SigType2169=Serial -OutputList3Cue2170=[~UNUSED3~] -OutputList3SigType2170=Serial -OutputList3Cue2171=[~UNUSED3~] -OutputList3SigType2171=Serial -OutputList3Cue2172=[~UNUSED3~] -OutputList3SigType2172=Serial -OutputList3Cue2173=[~UNUSED3~] -OutputList3SigType2173=Serial -OutputList3Cue2174=[~UNUSED3~] -OutputList3SigType2174=Serial -OutputList3Cue2175=[~UNUSED3~] -OutputList3SigType2175=Serial -OutputList3Cue2176=[~UNUSED3~] -OutputList3SigType2176=Serial -OutputList3Cue2177=[~UNUSED3~] -OutputList3SigType2177=Serial -OutputList3Cue2178=[~UNUSED3~] -OutputList3SigType2178=Serial -OutputList3Cue2179=[~UNUSED3~] -OutputList3SigType2179=Serial -OutputList3Cue2180=[~UNUSED3~] -OutputList3SigType2180=Serial -OutputList3Cue2181=[~UNUSED3~] -OutputList3SigType2181=Serial -OutputList3Cue2182=[~UNUSED3~] -OutputList3SigType2182=Serial -OutputList3Cue2183=[~UNUSED3~] -OutputList3SigType2183=Serial -OutputList3Cue2184=[~UNUSED3~] -OutputList3SigType2184=Serial -OutputList3Cue2185=[~UNUSED3~] -OutputList3SigType2185=Serial -OutputList3Cue2186=[~UNUSED3~] -OutputList3SigType2186=Serial -OutputList3Cue2187=[~UNUSED3~] -OutputList3SigType2187=Serial -OutputList3Cue2188=[~UNUSED3~] -OutputList3SigType2188=Serial -OutputList3Cue2189=[~UNUSED3~] -OutputList3SigType2189=Serial -OutputList3Cue2190=[~UNUSED3~] -OutputList3SigType2190=Serial -OutputList3Cue2191=[~UNUSED3~] -OutputList3SigType2191=Serial -OutputList3Cue2192=[~UNUSED3~] -OutputList3SigType2192=Serial -OutputList3Cue2193=[~UNUSED3~] -OutputList3SigType2193=Serial -OutputList3Cue2194=[~UNUSED3~] -OutputList3SigType2194=Serial -OutputList3Cue2195=[~UNUSED3~] -OutputList3SigType2195=Serial -OutputList3Cue2196=[~UNUSED3~] -OutputList3SigType2196=Serial -OutputList3Cue2197=[~UNUSED3~] -OutputList3SigType2197=Serial -OutputList3Cue2198=[~UNUSED3~] -OutputList3SigType2198=Serial -OutputList3Cue2199=[~UNUSED3~] -OutputList3SigType2199=Serial -OutputList3Cue2200=[~UNUSED3~] -OutputList3SigType2200=Serial -OutputList3Cue2201=[~UNUSED3~] -OutputList3SigType2201=Serial -OutputList3Cue2202=[~UNUSED3~] -OutputList3SigType2202=Serial -OutputList3Cue2203=[~UNUSED3~] -OutputList3SigType2203=Serial -OutputList3Cue2204=[~UNUSED3~] -OutputList3SigType2204=Serial -OutputList3Cue2205=[~UNUSED3~] -OutputList3SigType2205=Serial -OutputList3Cue2206=[~UNUSED3~] -OutputList3SigType2206=Serial -OutputList3Cue2207=[~UNUSED3~] -OutputList3SigType2207=Serial -OutputList3Cue2208=[~UNUSED3~] -OutputList3SigType2208=Serial -OutputList3Cue2209=[~UNUSED3~] -OutputList3SigType2209=Serial -OutputList3Cue2210=[~UNUSED3~] -OutputList3SigType2210=Serial -OutputList3Cue2211=[~UNUSED3~] -OutputList3SigType2211=Serial -OutputList3Cue2212=[~UNUSED3~] -OutputList3SigType2212=Serial -OutputList3Cue2213=[~UNUSED3~] -OutputList3SigType2213=Serial -OutputList3Cue2214=[~UNUSED3~] -OutputList3SigType2214=Serial -OutputList3Cue2215=[~UNUSED3~] -OutputList3SigType2215=Serial -OutputList3Cue2216=[~UNUSED3~] -OutputList3SigType2216=Serial -OutputList3Cue2217=[~UNUSED3~] -OutputList3SigType2217=Serial -OutputList3Cue2218=[~UNUSED3~] -OutputList3SigType2218=Serial -OutputList3Cue2219=[~UNUSED3~] -OutputList3SigType2219=Serial -OutputList3Cue2220=[~UNUSED3~] -OutputList3SigType2220=Serial -OutputList3Cue2221=[~UNUSED3~] -OutputList3SigType2221=Serial -OutputList3Cue2222=[~UNUSED3~] -OutputList3SigType2222=Serial -OutputList3Cue2223=[~UNUSED3~] -OutputList3SigType2223=Serial -OutputList3Cue2224=[~UNUSED3~] -OutputList3SigType2224=Serial -OutputList3Cue2225=[~UNUSED3~] -OutputList3SigType2225=Serial -OutputList3Cue2226=[~UNUSED3~] -OutputList3SigType2226=Serial -OutputList3Cue2227=[~UNUSED3~] -OutputList3SigType2227=Serial -OutputList3Cue2228=[~UNUSED3~] -OutputList3SigType2228=Serial -OutputList3Cue2229=[~UNUSED3~] -OutputList3SigType2229=Serial -OutputList3Cue2230=[~UNUSED3~] -OutputList3SigType2230=Serial -OutputList3Cue2231=[~UNUSED3~] -OutputList3SigType2231=Serial -OutputList3Cue2232=[~UNUSED3~] -OutputList3SigType2232=Serial -OutputList3Cue2233=[~UNUSED3~] -OutputList3SigType2233=Serial -OutputList3Cue2234=[~UNUSED3~] -OutputList3SigType2234=Serial -OutputList3Cue2235=[~UNUSED3~] -OutputList3SigType2235=Serial -OutputList3Cue2236=[~UNUSED3~] -OutputList3SigType2236=Serial -OutputList3Cue2237=[~UNUSED3~] -OutputList3SigType2237=Serial -OutputList3Cue2238=[~UNUSED3~] -OutputList3SigType2238=Serial -OutputList3Cue2239=[~UNUSED3~] -OutputList3SigType2239=Serial -OutputList3Cue2240=[~UNUSED3~] -OutputList3SigType2240=Serial -OutputList3Cue2241=[~UNUSED3~] -OutputList3SigType2241=Serial -OutputList3Cue2242=[~UNUSED3~] -OutputList3SigType2242=Serial -OutputList3Cue2243=[~UNUSED3~] -OutputList3SigType2243=Serial -OutputList3Cue2244=[~UNUSED3~] -OutputList3SigType2244=Serial -OutputList3Cue2245=[~UNUSED3~] -OutputList3SigType2245=Serial -OutputList3Cue2246=[~UNUSED3~] -OutputList3SigType2246=Serial -OutputList3Cue2247=[~UNUSED3~] -OutputList3SigType2247=Serial -OutputList3Cue2248=[~UNUSED3~] -OutputList3SigType2248=Serial -OutputList3Cue2249=[~UNUSED3~] -OutputList3SigType2249=Serial -OutputList3Cue2250=[~UNUSED3~] -OutputList3SigType2250=Serial -OutputList3Cue2251=[~UNUSED3~] -OutputList3SigType2251=Serial -OutputList3Cue2252=[~UNUSED3~] -OutputList3SigType2252=Serial -OutputList3Cue2253=[~UNUSED3~] -OutputList3SigType2253=Serial -OutputList3Cue2254=[~UNUSED3~] -OutputList3SigType2254=Serial -OutputList3Cue2255=[~UNUSED3~] -OutputList3SigType2255=Serial -OutputList3Cue2256=[~UNUSED3~] -OutputList3SigType2256=Serial -OutputList3Cue2257=[~UNUSED3~] -OutputList3SigType2257=Serial -OutputList3Cue2258=[~UNUSED3~] -OutputList3SigType2258=Serial -OutputList3Cue2259=[~UNUSED3~] -OutputList3SigType2259=Serial -OutputList3Cue2260=[~UNUSED3~] -OutputList3SigType2260=Serial -OutputList3Cue2261=[~UNUSED3~] -OutputList3SigType2261=Serial -OutputList3Cue2262=[~UNUSED3~] -OutputList3SigType2262=Serial -OutputList3Cue2263=[~UNUSED3~] -OutputList3SigType2263=Serial -OutputList3Cue2264=[~UNUSED3~] -OutputList3SigType2264=Serial -OutputList3Cue2265=[~UNUSED3~] -OutputList3SigType2265=Serial -OutputList3Cue2266=[~UNUSED3~] -OutputList3SigType2266=Serial -OutputList3Cue2267=[~UNUSED3~] -OutputList3SigType2267=Serial -OutputList3Cue2268=[~UNUSED3~] -OutputList3SigType2268=Serial -OutputList3Cue2269=[~UNUSED2~] -OutputList3SigType2269=Digital|Analog|Serial|String -OutputList3Cue4014=[~EndGroup~]Item Icons -OutputList3SigType4014=Serial -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=2 -CedH=2 -SmartObjId=1202d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=2 -Tp=1 -HD=TRUE -DV=1202d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=2 -Name=PepperDash Essentials TSW-760_[D.VC] Directory_Directory List.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 TSW-760_[D.VC] Keypad with favorites_VC DTMF Keypad.ced -Hint=VC DTMF Keypad (Smart Object ID=1201) -Code=3 -SGControlType=Simple Keypad -SGControlName=VC DTMF Keypad -GUID=B4D53525-26EF-4326-8234-1D53F6E9BF04 -SmplCName=PepperDash Essentials TSW-760_[D.VC] Keypad with favorites_VC 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=3 -CedH=3 -SmartObjId=1201d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=3 -Tp=1 -HD=TRUE -DV=1201d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=3 -Name=PepperDash Essentials TSW-760_[D.VC] Keypad with favorites_VC 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 TSW-760_[Z.Dialogs] PIN_PIN Keypad.ced -Hint=PIN Keypad (Smart Object ID=3903) -Code=4 -SGControlType=Simple Keypad -SGControlName=PIN Keypad -GUID=D85E5DFB-DE45-45FE-93C5-2FA177B68BFB -SmplCName=PepperDash Essentials TSW-760_[Z.Dialogs] PIN_PIN 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=4 -CedH=4 -SmartObjId=3903d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=4 -Tp=1 -HD=TRUE -DV=3903d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=4 -Name=PepperDash Essentials TSW-760_[Z.Dialogs] PIN_PIN 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 TSW-760_[E.Technician Controls] Sys Status_Subpage Reference List Vertical_3.ced -Hint=Subpage Reference List Vertical_3 (Smart Object ID=3902) -Code=5 -SGControlType=Subpage Reference List Vertical -SGControlName=Subpage Reference List Vertical_3 -GUID=3490D547-0B98-444B-A284-D6C1BAB2FDCE -SmplCName=PepperDash Essentials TSW-760_[E.Technician Controls] Sys Status_Subpage Reference List Vertical_3.ced -SMWRev=4.02.20 -Expand=expand_random -HelpID=10125 -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=5 -CedH=5 -SmartObjId=3902d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=5 -Tp=1 -HD=TRUE -DV=3902d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=5 -Name=PepperDash Essentials TSW-760_[E.Technician Controls] Sys Status_Subpage Reference List Vertical_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 TSW-760_[E.Technician Controls] Display Controls_Subpage Reference List Vertical_4.ced -Hint=Subpage Reference List Vertical_4 (Smart Object ID=3904) -Code=6 -SGControlType=Subpage Reference List Vertical -SGControlName=Subpage Reference List Vertical_4 -GUID=AC10DF35-3FD4-4F62-9708-0A06AE7A5A14 -SmplCName=PepperDash Essentials TSW-760_[E.Technician Controls] Display Controls_Subpage Reference List Vertical_4.ced -SMWRev=4.02.20 -Expand=expand_random -HelpID=10125 -Render=8 -;Define the number of inputs, outputs and parameters -MinVariableInputs=4116 -MaxVariableInputs=4116 -MinVariableOutputs=4116 -MaxVariableOutputs=4116 -NumFixedParams=1 -MinVariableInputsList2=42 -MaxVariableInputsList2=42 -MinVariableOutputsList2=42 -MaxVariableOutputsList2=42 -MinVariableInputsList3=42 -MaxVariableInputsList3=42 -MinVariableOutputsList3=42 -MaxVariableOutputsList3=42 -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=[~UNUSED2~] -InputSigType22=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=[~UNUSED2~] -InputSigType2024=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=[~EndGroup~]fb -InputSigType4116=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=[~UNUSED2~] -OutputSigType22=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=[~UNUSED2~] -OutputSigType2024=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=[~EndGroup~]Press -OutputSigType4116=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=[~EndGroup~]an_fb -InputList2SigType42=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=[~EndGroup~]an_act -OutputList2SigType42=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=[~EndGroup~]text-o -InputList3SigType42=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=[~EndGroup~]text-i -OutputList3SigType42=Serial -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=6 -CedH=6 -SmartObjId=3904d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=6 -Tp=1 -HD=TRUE -DV=3904d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=6 -Name=PepperDash Essentials TSW-760_[E.Technician Controls] Display Controls_Subpage Reference List Vertical_4.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 TSW-760_[B.AV] Staging_Subpage Reference List Horizontal_3.ced -Hint=Subpage Reference List Horizontal_3 (Smart Object ID=3200) -Code=7 -SGControlType=Subpage Reference List Horizontal -SGControlName=Subpage Reference List Horizontal_3 -GUID=D638D437-6722-43E1-B435-EF13DCE5ECF0 -SmplCName=PepperDash Essentials TSW-760_[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=7 -CedH=7 -SmartObjId=3200d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=7 -Tp=1 -HD=TRUE -DV=3200d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=7 -Name=PepperDash Essentials TSW-760_[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 TSW-760_[B.AV] Source Ctrl-CATV-Basic_Channel Preset List Basic.ced -Hint=Channel Preset List Basic (Smart Object ID=1806) -Code=8 -SGControlType=Subpage Reference List Vertical -SGControlName=Channel Preset List Basic -GUID=46C43CE4-6BB9-4B76-A13E-B4279202F998 -SmplCName=PepperDash Essentials TSW-760_[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=8 -CedH=8 -SmartObjId=1806d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=8 -Tp=1 -HD=TRUE -DV=1806d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=8 -Name=PepperDash Essentials TSW-760_[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 TSW-760_[A.Global] Activity Footer SRL_Modes Bottom Bar SRL.ced -Hint=Modes Bottom Bar SRL (Smart Object ID=15022) -Code=9 -SGControlType=Subpage Reference List Horizontal -SGControlName=Modes Bottom Bar SRL -GUID=812FF0C4-486D-4ABC-90FA-405F19104323 -SmplCName=PepperDash Essentials TSW-760_[A.Global] Activity 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=9 -CedH=9 -SmartObjId=15022d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=9 -Tp=1 -HD=TRUE -DV=15022d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=9 -Name=PepperDash Essentials TSW-760_[A.Global] Activity 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 TSW-760_[B.AV] Object - Presets_CATV Icon List Vertical.ced -Hint=CATV Icon List Vertical (Smart Object ID=10012) -Code=10 -SGControlType=Subpage Reference List Vertical -SGControlName=CATV Icon List Vertical -GUID=B34C4DC0-DD10-4C49-AEBA-F968934EFDC6 -SmplCName=PepperDash Essentials TSW-760_[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=10 -CedH=10 -SmartObjId=10012d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=10 -Tp=1 -HD=TRUE -DV=10012d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=10 -Name=PepperDash Essentials TSW-760_[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 TSW-760_[B.AV] Object - DPad STB_STB DPad.ced -Hint=STB DPad (Smart Object ID=10011) -Code=11 -SGControlType=DPad -SGControlName=STB DPad -GUID=F2340FAD-85E9-4E49-B46E-15E9B096F58B -SmplCName=PepperDash Essentials TSW-760_[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=11 -CedH=11 -SmartObjId=10011d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=11 -Tp=1 -HD=TRUE -DV=10011d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=11 -Name=PepperDash Essentials TSW-760_[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 TSW-760_[B.AV] Object - Tab SetTopBox_Tab Button Horizontal.ced -Hint=Tab Button Horizontal (Smart Object ID=10081) -Code=12 -SGControlType=Horizontal Tab Button -SGControlName=Tab Button Horizontal -GUID=198C97B0-9D0C-46C2-9557-27EA33C0BE9F -SmplCName=PepperDash Essentials TSW-760_[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=12 -CedH=12 -SmartObjId=10081d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=12 -Tp=1 -HD=TRUE -DV=10081d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=12 -Name=PepperDash Essentials TSW-760_[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 TSW-760_[B.AV] Object - Dpad DVD_DVD DPad.ced -Hint=DVD DPad (Smart Object ID=10411) -Code=13 -SGControlType=DPad -SGControlName=DVD DPad -GUID=D49BCF22-C770-4146-93E6-00867D885E1E -SmplCName=PepperDash Essentials TSW-760_[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=13 -CedH=13 -SmartObjId=10411d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=13 -Tp=1 -HD=TRUE -DV=10411d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=13 -Name=PepperDash Essentials TSW-760_[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 TSW-760_[B.AV] Source-Set Top Box Backer_CATV Keypad.ced -Hint=CATV Keypad (Smart Object ID=10014) -Code=14 -SGControlType=Simple Keypad -SGControlName=CATV Keypad -GUID=5E33D4F4-5C5F-430C-879A-AE82529B3943 -SmplCName=PepperDash Essentials TSW-760_[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=14 -CedH=14 -SmartObjId=10014d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=14 -Tp=1 -HD=TRUE -DV=10014d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=14 -Name=PepperDash Essentials TSW-760_[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 -] -;================================================================================ -[ -ObjTp=Symbol -Name=PepperDash Essentials TSW-760_[B.AV] Source-Set Top Box Backer_CATV Icon List Vertical.ced -Hint=CATV Icon List Vertical (Smart Object ID=3333) -Code=15 -SGControlType=Subpage Reference List Vertical -SGControlName=CATV Icon List Vertical -GUID=D6A79678-BAD2-4F6D-8104-A941FBA9432F -SmplCName=PepperDash Essentials TSW-760_[B.AV] Source-Set Top Box Backer_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=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=15 -CedH=15 -SmartObjId=3333d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=15 -Tp=1 -HD=TRUE -DV=3333d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=15 -Name=PepperDash Essentials TSW-760_[B.AV] Source-Set Top Box Backer_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 TSW-760_[Z.Dialogs] Call List_Subpage Reference List Vertical_2.ced -Hint=Subpage Reference List Vertical_2 (Smart Object ID=1001) -Code=16 -SGControlType=Subpage Reference List Vertical -SGControlName=Subpage Reference List Vertical_2 -GUID=5F63F5C2-A987-4957-9243-C28805CE297E -SmplCName=PepperDash Essentials TSW-760_[Z.Dialogs] Call List_Subpage Reference List Vertical_2.ced -SMWRev=4.02.20 -Expand=expand_random -HelpID=10125 -Render=8 -;Define the number of inputs, outputs and parameters -MinVariableInputs=4036 -MaxVariableInputs=4036 -MinVariableOutputs=4036 -MaxVariableOutputs=4036 -NumFixedParams=1 -MinVariableInputsList2=32 -MaxVariableInputsList2=32 -MinVariableOutputsList2=32 -MaxVariableOutputsList2=32 -MinVariableInputsList3=32 -MaxVariableInputsList3=32 -MinVariableOutputsList3=32 -MaxVariableOutputsList3=32 -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=[~UNUSED2~] -InputSigType16=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=[~UNUSED2~] -InputSigType2018=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=[~EndGroup~]fb -InputSigType4036=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=[~UNUSED2~] -OutputSigType16=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=[~UNUSED2~] -OutputSigType2018=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=[~EndGroup~]Press -OutputSigType4036=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=[~EndGroup~]an_fb -InputList2SigType32=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=[~EndGroup~]an_act -OutputList2SigType32=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=[~EndGroup~]text-o -InputList3SigType32=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=[~EndGroup~]text-i -OutputList3SigType32=Serial -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=16 -CedH=16 -SmartObjId=1001d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=16 -Tp=1 -HD=TRUE -DV=1001d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=16 -Name=PepperDash Essentials TSW-760_[Z.Dialogs] Call List_Subpage Reference List Vertical_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 TSW-760_[E.Technician Controls] Menu_Dynamic Button List Vertical.ced -Hint=Dynamic Button List Vertical (Smart Object ID=3901) -Code=17 -SGControlType=Dynamic Button List Vertical -SGControlName=Dynamic Button List Vertical -GUID=15B95903-FB30-472E-9D10-82A9C3A9D7C7 -SmplCName=PepperDash Essentials TSW-760_[E.Technician Controls] Menu_Dynamic Button List Vertical.ced -SMWRev=4.02.20 -Expand=expand_random -HelpID=10112 -Render=8 -;Define the number of inputs, outputs and parameters -MinVariableInputs=6016 -MaxVariableInputs=6016 -MinVariableOutputs=6016 -MaxVariableOutputs=6016 -NumFixedParams=1 -MinVariableInputsList2=2012 -MaxVariableInputsList2=2012 -MinVariableOutputsList2=2012 -MaxVariableOutputsList2=2012 -MinVariableInputsList3=4014 -MaxVariableInputsList3=4014 -MinVariableOutputsList3=4014 -MaxVariableOutputsList3=4014 -InputSigType1=Digital -OutputSigType1=Digital -InputList2SigType1=Analog -OutputList2SigType1=Analog -InputList3SigType1=Serial -OutputList3SigType1=Serial - -;Define the cues, and signal types each input, output and parameter. -InputCue1=Disable Redraw -InputSigType1=Digital -InputCue2=[~UNUSED3~] -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~]Press -InputSigType11=Digital -InputCue12=Item 1 Selected -InputSigType12=Digital -InputCue13=Item 2 Selected -InputSigType13=Digital -InputCue14=Item 3 Selected -InputSigType14=Digital -InputCue15=Item 4 Selected -InputSigType15=Digital -InputCue16=Item 5 Selected -InputSigType16=Digital -InputCue17=Item 6 Selected -InputSigType17=Digital -InputCue18=Item 7 Selected -InputSigType18=Digital -InputCue19=Item 8 Selected -InputSigType19=Digital -InputCue20=Item 9 Selected -InputSigType20=Digital -InputCue21=Item 10 Selected -InputSigType21=Digital -InputCue22=[~UNUSED2~] -InputSigType22=Digital|Analog|Serial|String -InputCue2012=[~EndGroup~]Press -InputSigType2012=Digital -InputCue2013=[~BeginGroup~]Enable -InputSigType2013=Digital -InputCue2014=Item 1 Enabled -InputSigType2014=Digital -InputCue2015=Item 2 Enabled -InputSigType2015=Digital -InputCue2016=Item 3 Enabled -InputSigType2016=Digital -InputCue2017=Item 4 Enabled -InputSigType2017=Digital -InputCue2018=Item 5 Enabled -InputSigType2018=Digital -InputCue2019=Item 6 Enabled -InputSigType2019=Digital -InputCue2020=Item 7 Enabled -InputSigType2020=Digital -InputCue2021=Item 8 Enabled -InputSigType2021=Digital -InputCue2022=Item 9 Enabled -InputSigType2022=Digital -InputCue2023=Item 10 Enabled -InputSigType2023=Digital -InputCue2024=[~UNUSED2~] -InputSigType2024=Digital|Analog|Serial|String -InputCue4014=[~EndGroup~]Enable -InputSigType4014=Digital -InputCue4015=[~BeginGroup~]Visible -InputSigType4015=Digital -InputCue4016=Item 1 Visible -InputSigType4016=Digital -InputCue4017=Item 2 Visible -InputSigType4017=Digital -InputCue4018=Item 3 Visible -InputSigType4018=Digital -InputCue4019=Item 4 Visible -InputSigType4019=Digital -InputCue4020=Item 5 Visible -InputSigType4020=Digital -InputCue4021=Item 6 Visible -InputSigType4021=Digital -InputCue4022=Item 7 Visible -InputSigType4022=Digital -InputCue4023=Item 8 Visible -InputSigType4023=Digital -InputCue4024=Item 9 Visible -InputSigType4024=Digital -InputCue4025=Item 10 Visible -InputSigType4025=Digital -InputCue4026=[~UNUSED2~] -InputSigType4026=Digital|Analog|Serial|String -InputCue6016=[~EndGroup~]Visible -InputSigType6016=Digital -OutputCue1=[~UNUSED3~] -OutputSigType1=Digital -OutputCue2=Is Moving -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~]Press -OutputSigType11=Digital -OutputCue12=Item 1 Pressed -OutputSigType12=Digital -OutputCue13=Item 2 Pressed -OutputSigType13=Digital -OutputCue14=Item 3 Pressed -OutputSigType14=Digital -OutputCue15=Item 4 Pressed -OutputSigType15=Digital -OutputCue16=Item 5 Pressed -OutputSigType16=Digital -OutputCue17=Item 6 Pressed -OutputSigType17=Digital -OutputCue18=Item 7 Pressed -OutputSigType18=Digital -OutputCue19=Item 8 Pressed -OutputSigType19=Digital -OutputCue20=Item 9 Pressed -OutputSigType20=Digital -OutputCue21=Item 10 Pressed -OutputSigType21=Digital -OutputCue22=[~UNUSED2~] -OutputSigType22=Digital|Analog|Serial|String -OutputCue2012=[~EndGroup~]Press -OutputSigType2012=Digital -OutputCue2013=[~BeginGroup~]Enable -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=[~UNUSED2~] -OutputSigType2024=Digital|Analog|Serial|String -OutputCue4014=[~EndGroup~]Enable -OutputSigType4014=Digital -OutputCue4015=[~BeginGroup~]Visible -OutputSigType4015=Digital -OutputCue4016=[~UNUSED3~] -OutputSigType4016=Digital -OutputCue4017=[~UNUSED3~] -OutputSigType4017=Digital -OutputCue4018=[~UNUSED3~] -OutputSigType4018=Digital -OutputCue4019=[~UNUSED3~] -OutputSigType4019=Digital -OutputCue4020=[~UNUSED3~] -OutputSigType4020=Digital -OutputCue4021=[~UNUSED3~] -OutputSigType4021=Digital -OutputCue4022=[~UNUSED3~] -OutputSigType4022=Digital -OutputCue4023=[~UNUSED3~] -OutputSigType4023=Digital -OutputCue4024=[~UNUSED3~] -OutputSigType4024=Digital -OutputCue4025=[~UNUSED3~] -OutputSigType4025=Digital -OutputCue4026=[~UNUSED2~] -OutputSigType4026=Digital|Analog|Serial|String -OutputCue6016=[~EndGroup~]Visible -OutputSigType6016=Digital -InputList2Cue1=[~UNUSED3~] -InputList2SigType1=Analog -InputList2Cue2=[~UNUSED3~] -InputList2SigType2=Analog -InputList2Cue3=Scroll To Item -InputList2SigType3=Analog -InputList2Cue4=Set Number of Items -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~]Item Icons -InputList2SigType11=Analog -InputList2Cue12=Set Item 1 Icon Analog -InputList2SigType12=Analog -InputList2Cue13=Set Item 2 Icon Analog -InputList2SigType13=Analog -InputList2Cue14=Set Item 3 Icon Analog -InputList2SigType14=Analog -InputList2Cue15=Set Item 4 Icon Analog -InputList2SigType15=Analog -InputList2Cue16=Set Item 5 Icon Analog -InputList2SigType16=Analog -InputList2Cue17=Set Item 6 Icon Analog -InputList2SigType17=Analog -InputList2Cue18=Set Item 7 Icon Analog -InputList2SigType18=Analog -InputList2Cue19=Set Item 8 Icon Analog -InputList2SigType19=Analog -InputList2Cue20=Set Item 9 Icon Analog -InputList2SigType20=Analog -InputList2Cue21=Set Item 10 Icon Analog -InputList2SigType21=Analog -InputList2Cue22=[~UNUSED2~] -InputList2SigType22=Digital|Analog|Serial|String -InputList2Cue2012=[~EndGroup~]Item Icons -InputList2SigType2012=Analog -OutputList2Cue1=Item Clicked -OutputList2SigType1=Analog -OutputList2Cue2=Item Held -OutputList2SigType2=Analog -OutputList2Cue3=[~UNUSED3~] -OutputList2SigType3=Analog -OutputList2Cue4=[~UNUSED3~] -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~]Item Icons -OutputList2SigType11=Analog -OutputList2Cue12=[~UNUSED3~] -OutputList2SigType12=Analog -OutputList2Cue13=[~UNUSED3~] -OutputList2SigType13=Analog -OutputList2Cue14=[~UNUSED3~] -OutputList2SigType14=Analog -OutputList2Cue15=[~UNUSED3~] -OutputList2SigType15=Analog -OutputList2Cue16=[~UNUSED3~] -OutputList2SigType16=Analog -OutputList2Cue17=[~UNUSED3~] -OutputList2SigType17=Analog -OutputList2Cue18=[~UNUSED3~] -OutputList2SigType18=Analog -OutputList2Cue19=[~UNUSED3~] -OutputList2SigType19=Analog -OutputList2Cue20=[~UNUSED3~] -OutputList2SigType20=Analog -OutputList2Cue21=[~UNUSED3~] -OutputList2SigType21=Analog -OutputList2Cue22=[~UNUSED2~] -OutputList2SigType22=Digital|Analog|Serial|String -OutputList2Cue2012=[~EndGroup~]Item Icons -OutputList2SigType2012=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~]Item Texts -InputList3SigType11=Serial -InputList3Cue12=Set Item 1 Text -InputList3SigType12=Serial -InputList3Cue13=Set Item 2 Text -InputList3SigType13=Serial -InputList3Cue14=Set Item 3 Text -InputList3SigType14=Serial -InputList3Cue15=Set Item 4 Text -InputList3SigType15=Serial -InputList3Cue16=Set Item 5 Text -InputList3SigType16=Serial -InputList3Cue17=Set Item 6 Text -InputList3SigType17=Serial -InputList3Cue18=Set Item 7 Text -InputList3SigType18=Serial -InputList3Cue19=Set Item 8 Text -InputList3SigType19=Serial -InputList3Cue20=Set Item 9 Text -InputList3SigType20=Serial -InputList3Cue21=Set Item 10 Text -InputList3SigType21=Serial -InputList3Cue22=[~UNUSED2~] -InputList3SigType22=Digital|Analog|Serial|String -InputList3Cue2012=[~EndGroup~]Item Texts -InputList3SigType2012=Serial -InputList3Cue2013=[~BeginGroup~]Item Icons -InputList3SigType2013=Serial -InputList3Cue2014=Set Item 1 Icon Serial -InputList3SigType2014=Serial -InputList3Cue2015=Set Item 2 Icon Serial -InputList3SigType2015=Serial -InputList3Cue2016=Set Item 3 Icon Serial -InputList3SigType2016=Serial -InputList3Cue2017=Set Item 4 Icon Serial -InputList3SigType2017=Serial -InputList3Cue2018=Set Item 5 Icon Serial -InputList3SigType2018=Serial -InputList3Cue2019=Set Item 6 Icon Serial -InputList3SigType2019=Serial -InputList3Cue2020=Set Item 7 Icon Serial -InputList3SigType2020=Serial -InputList3Cue2021=Set Item 8 Icon Serial -InputList3SigType2021=Serial -InputList3Cue2022=Set Item 9 Icon Serial -InputList3SigType2022=Serial -InputList3Cue2023=Set Item 10 Icon Serial -InputList3SigType2023=Serial -InputList3Cue2024=[~UNUSED2~] -InputList3SigType2024=Digital|Analog|Serial|String -InputList3Cue4014=[~EndGroup~]Item Icons -InputList3SigType4014=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~]Item Texts -OutputList3SigType11=Serial -OutputList3Cue12=[~UNUSED3~] -OutputList3SigType12=Serial -OutputList3Cue13=[~UNUSED3~] -OutputList3SigType13=Serial -OutputList3Cue14=[~UNUSED3~] -OutputList3SigType14=Serial -OutputList3Cue15=[~UNUSED3~] -OutputList3SigType15=Serial -OutputList3Cue16=[~UNUSED3~] -OutputList3SigType16=Serial -OutputList3Cue17=[~UNUSED3~] -OutputList3SigType17=Serial -OutputList3Cue18=[~UNUSED3~] -OutputList3SigType18=Serial -OutputList3Cue19=[~UNUSED3~] -OutputList3SigType19=Serial -OutputList3Cue20=[~UNUSED3~] -OutputList3SigType20=Serial -OutputList3Cue21=[~UNUSED3~] -OutputList3SigType21=Serial -OutputList3Cue22=[~UNUSED2~] -OutputList3SigType22=Digital|Analog|Serial|String -OutputList3Cue2012=[~EndGroup~]Item Texts -OutputList3SigType2012=Serial -OutputList3Cue2013=[~BeginGroup~]Item Icons -OutputList3SigType2013=Serial -OutputList3Cue2014=[~UNUSED3~] -OutputList3SigType2014=Serial -OutputList3Cue2015=[~UNUSED3~] -OutputList3SigType2015=Serial -OutputList3Cue2016=[~UNUSED3~] -OutputList3SigType2016=Serial -OutputList3Cue2017=[~UNUSED3~] -OutputList3SigType2017=Serial -OutputList3Cue2018=[~UNUSED3~] -OutputList3SigType2018=Serial -OutputList3Cue2019=[~UNUSED3~] -OutputList3SigType2019=Serial -OutputList3Cue2020=[~UNUSED3~] -OutputList3SigType2020=Serial -OutputList3Cue2021=[~UNUSED3~] -OutputList3SigType2021=Serial -OutputList3Cue2022=[~UNUSED3~] -OutputList3SigType2022=Serial -OutputList3Cue2023=[~UNUSED3~] -OutputList3SigType2023=Serial -OutputList3Cue2024=[~UNUSED2~] -OutputList3SigType2024=Digital|Analog|Serial|String -OutputList3Cue4014=[~EndGroup~]Item Icons -OutputList3SigType4014=Serial -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=17 -CedH=17 -SmartObjId=3901d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=17 -Tp=1 -HD=TRUE -DV=3901d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=17 -Name=PepperDash Essentials TSW-760_[E.Technician Controls] Menu_Dynamic Button 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 TSW-760_[Z.Dialogs] Schedule List_Subpage Reference List Vertical.ced -Hint=Subpage Reference List Vertical (Smart Object ID=15023) -Code=18 -SGControlType=Subpage Reference List Vertical -SGControlName=Subpage Reference List Vertical -GUID=EC6E6B35-F033-4F14-9465-FEEBE20455CC -SmplCName=PepperDash Essentials TSW-760_[Z.Dialogs] Schedule List_Subpage Reference List Vertical.ced -SMWRev=4.02.20 -Expand=expand_random -HelpID=10125 -Render=8 -;Define the number of inputs, outputs and parameters -MinVariableInputs=4052 -MaxVariableInputs=4052 -MinVariableOutputs=4052 -MaxVariableOutputs=4052 -NumFixedParams=1 -MinVariableInputsList2=48 -MaxVariableInputsList2=48 -MinVariableOutputsList2=48 -MaxVariableOutputsList2=48 -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=[~UNUSED2~] -InputSigType24=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=[~UNUSED2~] -InputSigType2026=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=[~EndGroup~]fb -InputSigType4052=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=[~UNUSED2~] -OutputSigType24=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=[~UNUSED2~] -OutputSigType2026=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=[~EndGroup~]Press -OutputSigType4052=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=[~EndGroup~]an_fb -InputList2SigType48=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=[~EndGroup~]an_act -OutputList2SigType48=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=18 -CedH=18 -SmartObjId=15023d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=18 -Tp=1 -HD=TRUE -DV=15023d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=18 -Name=PepperDash Essentials TSW-760_[Z.Dialogs] Schedule List_Subpage Reference 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 TSW-760_[D.VC] Recents_Dynamic Button List Vertical_2.ced -Hint=Dynamic Button List Vertical_2 (Smart Object ID=1203) -Code=19 -SGControlType=Dynamic Button List Vertical -SGControlName=Dynamic Button List Vertical_2 -GUID=2C4B55E4-42AC-486D-BC6E-C7DD7D24C974 -SmplCName=PepperDash Essentials TSW-760_[D.VC] Recents_Dynamic Button List Vertical_2.ced -SMWRev=4.02.20 -Expand=expand_random -HelpID=10112 -Render=8 -;Define the number of inputs, outputs and parameters -MinVariableInputs=6016 -MaxVariableInputs=6016 -MinVariableOutputs=6016 -MaxVariableOutputs=6016 -NumFixedParams=1 -MinVariableInputsList2=2012 -MaxVariableInputsList2=2012 -MinVariableOutputsList2=2012 -MaxVariableOutputsList2=2012 -MinVariableInputsList3=4014 -MaxVariableInputsList3=4014 -MinVariableOutputsList3=4014 -MaxVariableOutputsList3=4014 -InputSigType1=Digital -OutputSigType1=Digital -InputList2SigType1=Analog -OutputList2SigType1=Analog -InputList3SigType1=Serial -OutputList3SigType1=Serial - -;Define the cues, and signal types each input, output and parameter. -InputCue1=Disable Redraw -InputSigType1=Digital -InputCue2=[~UNUSED3~] -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~]Press -InputSigType11=Digital -InputCue12=Item 1 Selected -InputSigType12=Digital -InputCue13=Item 2 Selected -InputSigType13=Digital -InputCue14=Item 3 Selected -InputSigType14=Digital -InputCue15=Item 4 Selected -InputSigType15=Digital -InputCue16=Item 5 Selected -InputSigType16=Digital -InputCue17=Item 6 Selected -InputSigType17=Digital -InputCue18=Item 7 Selected -InputSigType18=Digital -InputCue19=Item 8 Selected -InputSigType19=Digital -InputCue20=Item 9 Selected -InputSigType20=Digital -InputCue21=Item 10 Selected -InputSigType21=Digital -InputCue22=Item 11 Selected -InputSigType22=Digital -InputCue23=Item 12 Selected -InputSigType23=Digital -InputCue24=Item 13 Selected -InputSigType24=Digital -InputCue25=Item 14 Selected -InputSigType25=Digital -InputCue26=Item 15 Selected -InputSigType26=Digital -InputCue27=Item 16 Selected -InputSigType27=Digital -InputCue28=Item 17 Selected -InputSigType28=Digital -InputCue29=Item 18 Selected -InputSigType29=Digital -InputCue30=Item 19 Selected -InputSigType30=Digital -InputCue31=Item 20 Selected -InputSigType31=Digital -InputCue32=Item 21 Selected -InputSigType32=Digital -InputCue33=Item 22 Selected -InputSigType33=Digital -InputCue34=Item 23 Selected -InputSigType34=Digital -InputCue35=Item 24 Selected -InputSigType35=Digital -InputCue36=Item 25 Selected -InputSigType36=Digital -InputCue37=Item 26 Selected -InputSigType37=Digital -InputCue38=Item 27 Selected -InputSigType38=Digital -InputCue39=Item 28 Selected -InputSigType39=Digital -InputCue40=Item 29 Selected -InputSigType40=Digital -InputCue41=Item 30 Selected -InputSigType41=Digital -InputCue42=[~UNUSED2~] -InputSigType42=Digital|Analog|Serial|String -InputCue2012=[~EndGroup~]Press -InputSigType2012=Digital -InputCue2013=[~BeginGroup~]Enable -InputSigType2013=Digital -InputCue2014=Item 1 Enabled -InputSigType2014=Digital -InputCue2015=Item 2 Enabled -InputSigType2015=Digital -InputCue2016=Item 3 Enabled -InputSigType2016=Digital -InputCue2017=Item 4 Enabled -InputSigType2017=Digital -InputCue2018=Item 5 Enabled -InputSigType2018=Digital -InputCue2019=Item 6 Enabled -InputSigType2019=Digital -InputCue2020=Item 7 Enabled -InputSigType2020=Digital -InputCue2021=Item 8 Enabled -InputSigType2021=Digital -InputCue2022=Item 9 Enabled -InputSigType2022=Digital -InputCue2023=Item 10 Enabled -InputSigType2023=Digital -InputCue2024=Item 11 Enabled -InputSigType2024=Digital -InputCue2025=Item 12 Enabled -InputSigType2025=Digital -InputCue2026=Item 13 Enabled -InputSigType2026=Digital -InputCue2027=Item 14 Enabled -InputSigType2027=Digital -InputCue2028=Item 15 Enabled -InputSigType2028=Digital -InputCue2029=Item 16 Enabled -InputSigType2029=Digital -InputCue2030=Item 17 Enabled -InputSigType2030=Digital -InputCue2031=Item 18 Enabled -InputSigType2031=Digital -InputCue2032=Item 19 Enabled -InputSigType2032=Digital -InputCue2033=Item 20 Enabled -InputSigType2033=Digital -InputCue2034=Item 21 Enabled -InputSigType2034=Digital -InputCue2035=Item 22 Enabled -InputSigType2035=Digital -InputCue2036=Item 23 Enabled -InputSigType2036=Digital -InputCue2037=Item 24 Enabled -InputSigType2037=Digital -InputCue2038=Item 25 Enabled -InputSigType2038=Digital -InputCue2039=Item 26 Enabled -InputSigType2039=Digital -InputCue2040=Item 27 Enabled -InputSigType2040=Digital -InputCue2041=Item 28 Enabled -InputSigType2041=Digital -InputCue2042=Item 29 Enabled -InputSigType2042=Digital -InputCue2043=Item 30 Enabled -InputSigType2043=Digital -InputCue2044=[~UNUSED2~] -InputSigType2044=Digital|Analog|Serial|String -InputCue4014=[~EndGroup~]Enable -InputSigType4014=Digital -InputCue4015=[~BeginGroup~]Visible -InputSigType4015=Digital -InputCue4016=Item 1 Visible -InputSigType4016=Digital -InputCue4017=Item 2 Visible -InputSigType4017=Digital -InputCue4018=Item 3 Visible -InputSigType4018=Digital -InputCue4019=Item 4 Visible -InputSigType4019=Digital -InputCue4020=Item 5 Visible -InputSigType4020=Digital -InputCue4021=Item 6 Visible -InputSigType4021=Digital -InputCue4022=Item 7 Visible -InputSigType4022=Digital -InputCue4023=Item 8 Visible -InputSigType4023=Digital -InputCue4024=Item 9 Visible -InputSigType4024=Digital -InputCue4025=Item 10 Visible -InputSigType4025=Digital -InputCue4026=Item 11 Visible -InputSigType4026=Digital -InputCue4027=Item 12 Visible -InputSigType4027=Digital -InputCue4028=Item 13 Visible -InputSigType4028=Digital -InputCue4029=Item 14 Visible -InputSigType4029=Digital -InputCue4030=Item 15 Visible -InputSigType4030=Digital -InputCue4031=Item 16 Visible -InputSigType4031=Digital -InputCue4032=Item 17 Visible -InputSigType4032=Digital -InputCue4033=Item 18 Visible -InputSigType4033=Digital -InputCue4034=Item 19 Visible -InputSigType4034=Digital -InputCue4035=Item 20 Visible -InputSigType4035=Digital -InputCue4036=Item 21 Visible -InputSigType4036=Digital -InputCue4037=Item 22 Visible -InputSigType4037=Digital -InputCue4038=Item 23 Visible -InputSigType4038=Digital -InputCue4039=Item 24 Visible -InputSigType4039=Digital -InputCue4040=Item 25 Visible -InputSigType4040=Digital -InputCue4041=Item 26 Visible -InputSigType4041=Digital -InputCue4042=Item 27 Visible -InputSigType4042=Digital -InputCue4043=Item 28 Visible -InputSigType4043=Digital -InputCue4044=Item 29 Visible -InputSigType4044=Digital -InputCue4045=Item 30 Visible -InputSigType4045=Digital -InputCue4046=[~UNUSED2~] -InputSigType4046=Digital|Analog|Serial|String -InputCue6016=[~EndGroup~]Visible -InputSigType6016=Digital -OutputCue1=[~UNUSED3~] -OutputSigType1=Digital -OutputCue2=Is Moving -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~]Press -OutputSigType11=Digital -OutputCue12=Item 1 Pressed -OutputSigType12=Digital -OutputCue13=Item 2 Pressed -OutputSigType13=Digital -OutputCue14=Item 3 Pressed -OutputSigType14=Digital -OutputCue15=Item 4 Pressed -OutputSigType15=Digital -OutputCue16=Item 5 Pressed -OutputSigType16=Digital -OutputCue17=Item 6 Pressed -OutputSigType17=Digital -OutputCue18=Item 7 Pressed -OutputSigType18=Digital -OutputCue19=Item 8 Pressed -OutputSigType19=Digital -OutputCue20=Item 9 Pressed -OutputSigType20=Digital -OutputCue21=Item 10 Pressed -OutputSigType21=Digital -OutputCue22=Item 11 Pressed -OutputSigType22=Digital -OutputCue23=Item 12 Pressed -OutputSigType23=Digital -OutputCue24=Item 13 Pressed -OutputSigType24=Digital -OutputCue25=Item 14 Pressed -OutputSigType25=Digital -OutputCue26=Item 15 Pressed -OutputSigType26=Digital -OutputCue27=Item 16 Pressed -OutputSigType27=Digital -OutputCue28=Item 17 Pressed -OutputSigType28=Digital -OutputCue29=Item 18 Pressed -OutputSigType29=Digital -OutputCue30=Item 19 Pressed -OutputSigType30=Digital -OutputCue31=Item 20 Pressed -OutputSigType31=Digital -OutputCue32=Item 21 Pressed -OutputSigType32=Digital -OutputCue33=Item 22 Pressed -OutputSigType33=Digital -OutputCue34=Item 23 Pressed -OutputSigType34=Digital -OutputCue35=Item 24 Pressed -OutputSigType35=Digital -OutputCue36=Item 25 Pressed -OutputSigType36=Digital -OutputCue37=Item 26 Pressed -OutputSigType37=Digital -OutputCue38=Item 27 Pressed -OutputSigType38=Digital -OutputCue39=Item 28 Pressed -OutputSigType39=Digital -OutputCue40=Item 29 Pressed -OutputSigType40=Digital -OutputCue41=Item 30 Pressed -OutputSigType41=Digital -OutputCue42=[~UNUSED2~] -OutputSigType42=Digital|Analog|Serial|String -OutputCue2012=[~EndGroup~]Press -OutputSigType2012=Digital -OutputCue2013=[~BeginGroup~]Enable -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~]Enable -OutputSigType4014=Digital -OutputCue4015=[~BeginGroup~]Visible -OutputSigType4015=Digital -OutputCue4016=[~UNUSED3~] -OutputSigType4016=Digital -OutputCue4017=[~UNUSED3~] -OutputSigType4017=Digital -OutputCue4018=[~UNUSED3~] -OutputSigType4018=Digital -OutputCue4019=[~UNUSED3~] -OutputSigType4019=Digital -OutputCue4020=[~UNUSED3~] -OutputSigType4020=Digital -OutputCue4021=[~UNUSED3~] -OutputSigType4021=Digital -OutputCue4022=[~UNUSED3~] -OutputSigType4022=Digital -OutputCue4023=[~UNUSED3~] -OutputSigType4023=Digital -OutputCue4024=[~UNUSED3~] -OutputSigType4024=Digital -OutputCue4025=[~UNUSED3~] -OutputSigType4025=Digital -OutputCue4026=[~UNUSED3~] -OutputSigType4026=Digital -OutputCue4027=[~UNUSED3~] -OutputSigType4027=Digital -OutputCue4028=[~UNUSED3~] -OutputSigType4028=Digital -OutputCue4029=[~UNUSED3~] -OutputSigType4029=Digital -OutputCue4030=[~UNUSED3~] -OutputSigType4030=Digital -OutputCue4031=[~UNUSED3~] -OutputSigType4031=Digital -OutputCue4032=[~UNUSED3~] -OutputSigType4032=Digital -OutputCue4033=[~UNUSED3~] -OutputSigType4033=Digital -OutputCue4034=[~UNUSED3~] -OutputSigType4034=Digital -OutputCue4035=[~UNUSED3~] -OutputSigType4035=Digital -OutputCue4036=[~UNUSED3~] -OutputSigType4036=Digital -OutputCue4037=[~UNUSED3~] -OutputSigType4037=Digital -OutputCue4038=[~UNUSED3~] -OutputSigType4038=Digital -OutputCue4039=[~UNUSED3~] -OutputSigType4039=Digital -OutputCue4040=[~UNUSED3~] -OutputSigType4040=Digital -OutputCue4041=[~UNUSED3~] -OutputSigType4041=Digital -OutputCue4042=[~UNUSED3~] -OutputSigType4042=Digital -OutputCue4043=[~UNUSED3~] -OutputSigType4043=Digital -OutputCue4044=[~UNUSED3~] -OutputSigType4044=Digital -OutputCue4045=[~UNUSED3~] -OutputSigType4045=Digital -OutputCue4046=[~UNUSED2~] -OutputSigType4046=Digital|Analog|Serial|String -OutputCue6016=[~EndGroup~]Visible -OutputSigType6016=Digital -InputList2Cue1=[~UNUSED3~] -InputList2SigType1=Analog -InputList2Cue2=[~UNUSED3~] -InputList2SigType2=Analog -InputList2Cue3=Scroll To Item -InputList2SigType3=Analog -InputList2Cue4=Set Number of Items -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~]Item Icons -InputList2SigType11=Analog -InputList2Cue12=Set Item 1 Icon Analog -InputList2SigType12=Analog -InputList2Cue13=Set Item 2 Icon Analog -InputList2SigType13=Analog -InputList2Cue14=Set Item 3 Icon Analog -InputList2SigType14=Analog -InputList2Cue15=Set Item 4 Icon Analog -InputList2SigType15=Analog -InputList2Cue16=Set Item 5 Icon Analog -InputList2SigType16=Analog -InputList2Cue17=Set Item 6 Icon Analog -InputList2SigType17=Analog -InputList2Cue18=Set Item 7 Icon Analog -InputList2SigType18=Analog -InputList2Cue19=Set Item 8 Icon Analog -InputList2SigType19=Analog -InputList2Cue20=Set Item 9 Icon Analog -InputList2SigType20=Analog -InputList2Cue21=Set Item 10 Icon Analog -InputList2SigType21=Analog -InputList2Cue22=Set Item 11 Icon Analog -InputList2SigType22=Analog -InputList2Cue23=Set Item 12 Icon Analog -InputList2SigType23=Analog -InputList2Cue24=Set Item 13 Icon Analog -InputList2SigType24=Analog -InputList2Cue25=Set Item 14 Icon Analog -InputList2SigType25=Analog -InputList2Cue26=Set Item 15 Icon Analog -InputList2SigType26=Analog -InputList2Cue27=Set Item 16 Icon Analog -InputList2SigType27=Analog -InputList2Cue28=Set Item 17 Icon Analog -InputList2SigType28=Analog -InputList2Cue29=Set Item 18 Icon Analog -InputList2SigType29=Analog -InputList2Cue30=Set Item 19 Icon Analog -InputList2SigType30=Analog -InputList2Cue31=Set Item 20 Icon Analog -InputList2SigType31=Analog -InputList2Cue32=Set Item 21 Icon Analog -InputList2SigType32=Analog -InputList2Cue33=Set Item 22 Icon Analog -InputList2SigType33=Analog -InputList2Cue34=Set Item 23 Icon Analog -InputList2SigType34=Analog -InputList2Cue35=Set Item 24 Icon Analog -InputList2SigType35=Analog -InputList2Cue36=Set Item 25 Icon Analog -InputList2SigType36=Analog -InputList2Cue37=Set Item 26 Icon Analog -InputList2SigType37=Analog -InputList2Cue38=Set Item 27 Icon Analog -InputList2SigType38=Analog -InputList2Cue39=Set Item 28 Icon Analog -InputList2SigType39=Analog -InputList2Cue40=Set Item 29 Icon Analog -InputList2SigType40=Analog -InputList2Cue41=Set Item 30 Icon Analog -InputList2SigType41=Analog -InputList2Cue42=[~UNUSED2~] -InputList2SigType42=Digital|Analog|Serial|String -InputList2Cue2012=[~EndGroup~]Item Icons -InputList2SigType2012=Analog -OutputList2Cue1=Item Clicked -OutputList2SigType1=Analog -OutputList2Cue2=Item Held -OutputList2SigType2=Analog -OutputList2Cue3=[~UNUSED3~] -OutputList2SigType3=Analog -OutputList2Cue4=[~UNUSED3~] -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~]Item Icons -OutputList2SigType11=Analog -OutputList2Cue12=[~UNUSED3~] -OutputList2SigType12=Analog -OutputList2Cue13=[~UNUSED3~] -OutputList2SigType13=Analog -OutputList2Cue14=[~UNUSED3~] -OutputList2SigType14=Analog -OutputList2Cue15=[~UNUSED3~] -OutputList2SigType15=Analog -OutputList2Cue16=[~UNUSED3~] -OutputList2SigType16=Analog -OutputList2Cue17=[~UNUSED3~] -OutputList2SigType17=Analog -OutputList2Cue18=[~UNUSED3~] -OutputList2SigType18=Analog -OutputList2Cue19=[~UNUSED3~] -OutputList2SigType19=Analog -OutputList2Cue20=[~UNUSED3~] -OutputList2SigType20=Analog -OutputList2Cue21=[~UNUSED3~] -OutputList2SigType21=Analog -OutputList2Cue22=[~UNUSED3~] -OutputList2SigType22=Analog -OutputList2Cue23=[~UNUSED3~] -OutputList2SigType23=Analog -OutputList2Cue24=[~UNUSED3~] -OutputList2SigType24=Analog -OutputList2Cue25=[~UNUSED3~] -OutputList2SigType25=Analog -OutputList2Cue26=[~UNUSED3~] -OutputList2SigType26=Analog -OutputList2Cue27=[~UNUSED3~] -OutputList2SigType27=Analog -OutputList2Cue28=[~UNUSED3~] -OutputList2SigType28=Analog -OutputList2Cue29=[~UNUSED3~] -OutputList2SigType29=Analog -OutputList2Cue30=[~UNUSED3~] -OutputList2SigType30=Analog -OutputList2Cue31=[~UNUSED3~] -OutputList2SigType31=Analog -OutputList2Cue32=[~UNUSED3~] -OutputList2SigType32=Analog -OutputList2Cue33=[~UNUSED3~] -OutputList2SigType33=Analog -OutputList2Cue34=[~UNUSED3~] -OutputList2SigType34=Analog -OutputList2Cue35=[~UNUSED3~] -OutputList2SigType35=Analog -OutputList2Cue36=[~UNUSED3~] -OutputList2SigType36=Analog -OutputList2Cue37=[~UNUSED3~] -OutputList2SigType37=Analog -OutputList2Cue38=[~UNUSED3~] -OutputList2SigType38=Analog -OutputList2Cue39=[~UNUSED3~] -OutputList2SigType39=Analog -OutputList2Cue40=[~UNUSED3~] -OutputList2SigType40=Analog -OutputList2Cue41=[~UNUSED3~] -OutputList2SigType41=Analog -OutputList2Cue42=[~UNUSED2~] -OutputList2SigType42=Digital|Analog|Serial|String -OutputList2Cue2012=[~EndGroup~]Item Icons -OutputList2SigType2012=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~]Item Texts -InputList3SigType11=Serial -InputList3Cue12=Set Item 1 Text -InputList3SigType12=Serial -InputList3Cue13=Set Item 2 Text -InputList3SigType13=Serial -InputList3Cue14=Set Item 3 Text -InputList3SigType14=Serial -InputList3Cue15=Set Item 4 Text -InputList3SigType15=Serial -InputList3Cue16=Set Item 5 Text -InputList3SigType16=Serial -InputList3Cue17=Set Item 6 Text -InputList3SigType17=Serial -InputList3Cue18=Set Item 7 Text -InputList3SigType18=Serial -InputList3Cue19=Set Item 8 Text -InputList3SigType19=Serial -InputList3Cue20=Set Item 9 Text -InputList3SigType20=Serial -InputList3Cue21=Set Item 10 Text -InputList3SigType21=Serial -InputList3Cue22=Set Item 11 Text -InputList3SigType22=Serial -InputList3Cue23=Set Item 12 Text -InputList3SigType23=Serial -InputList3Cue24=Set Item 13 Text -InputList3SigType24=Serial -InputList3Cue25=Set Item 14 Text -InputList3SigType25=Serial -InputList3Cue26=Set Item 15 Text -InputList3SigType26=Serial -InputList3Cue27=Set Item 16 Text -InputList3SigType27=Serial -InputList3Cue28=Set Item 17 Text -InputList3SigType28=Serial -InputList3Cue29=Set Item 18 Text -InputList3SigType29=Serial -InputList3Cue30=Set Item 19 Text -InputList3SigType30=Serial -InputList3Cue31=Set Item 20 Text -InputList3SigType31=Serial -InputList3Cue32=Set Item 21 Text -InputList3SigType32=Serial -InputList3Cue33=Set Item 22 Text -InputList3SigType33=Serial -InputList3Cue34=Set Item 23 Text -InputList3SigType34=Serial -InputList3Cue35=Set Item 24 Text -InputList3SigType35=Serial -InputList3Cue36=Set Item 25 Text -InputList3SigType36=Serial -InputList3Cue37=Set Item 26 Text -InputList3SigType37=Serial -InputList3Cue38=Set Item 27 Text -InputList3SigType38=Serial -InputList3Cue39=Set Item 28 Text -InputList3SigType39=Serial -InputList3Cue40=Set Item 29 Text -InputList3SigType40=Serial -InputList3Cue41=Set Item 30 Text -InputList3SigType41=Serial -InputList3Cue42=[~UNUSED2~] -InputList3SigType42=Digital|Analog|Serial|String -InputList3Cue2012=[~EndGroup~]Item Texts -InputList3SigType2012=Serial -InputList3Cue2013=[~BeginGroup~]Item Icons -InputList3SigType2013=Serial -InputList3Cue2014=Set Item 1 Icon Serial -InputList3SigType2014=Serial -InputList3Cue2015=Set Item 2 Icon Serial -InputList3SigType2015=Serial -InputList3Cue2016=Set Item 3 Icon Serial -InputList3SigType2016=Serial -InputList3Cue2017=Set Item 4 Icon Serial -InputList3SigType2017=Serial -InputList3Cue2018=Set Item 5 Icon Serial -InputList3SigType2018=Serial -InputList3Cue2019=Set Item 6 Icon Serial -InputList3SigType2019=Serial -InputList3Cue2020=Set Item 7 Icon Serial -InputList3SigType2020=Serial -InputList3Cue2021=Set Item 8 Icon Serial -InputList3SigType2021=Serial -InputList3Cue2022=Set Item 9 Icon Serial -InputList3SigType2022=Serial -InputList3Cue2023=Set Item 10 Icon Serial -InputList3SigType2023=Serial -InputList3Cue2024=Set Item 11 Icon Serial -InputList3SigType2024=Serial -InputList3Cue2025=Set Item 12 Icon Serial -InputList3SigType2025=Serial -InputList3Cue2026=Set Item 13 Icon Serial -InputList3SigType2026=Serial -InputList3Cue2027=Set Item 14 Icon Serial -InputList3SigType2027=Serial -InputList3Cue2028=Set Item 15 Icon Serial -InputList3SigType2028=Serial -InputList3Cue2029=Set Item 16 Icon Serial -InputList3SigType2029=Serial -InputList3Cue2030=Set Item 17 Icon Serial -InputList3SigType2030=Serial -InputList3Cue2031=Set Item 18 Icon Serial -InputList3SigType2031=Serial -InputList3Cue2032=Set Item 19 Icon Serial -InputList3SigType2032=Serial -InputList3Cue2033=Set Item 20 Icon Serial -InputList3SigType2033=Serial -InputList3Cue2034=Set Item 21 Icon Serial -InputList3SigType2034=Serial -InputList3Cue2035=Set Item 22 Icon Serial -InputList3SigType2035=Serial -InputList3Cue2036=Set Item 23 Icon Serial -InputList3SigType2036=Serial -InputList3Cue2037=Set Item 24 Icon Serial -InputList3SigType2037=Serial -InputList3Cue2038=Set Item 25 Icon Serial -InputList3SigType2038=Serial -InputList3Cue2039=Set Item 26 Icon Serial -InputList3SigType2039=Serial -InputList3Cue2040=Set Item 27 Icon Serial -InputList3SigType2040=Serial -InputList3Cue2041=Set Item 28 Icon Serial -InputList3SigType2041=Serial -InputList3Cue2042=Set Item 29 Icon Serial -InputList3SigType2042=Serial -InputList3Cue2043=Set Item 30 Icon Serial -InputList3SigType2043=Serial -InputList3Cue2044=[~UNUSED2~] -InputList3SigType2044=Digital|Analog|Serial|String -InputList3Cue4014=[~EndGroup~]Item Icons -InputList3SigType4014=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~]Item Texts -OutputList3SigType11=Serial -OutputList3Cue12=[~UNUSED3~] -OutputList3SigType12=Serial -OutputList3Cue13=[~UNUSED3~] -OutputList3SigType13=Serial -OutputList3Cue14=[~UNUSED3~] -OutputList3SigType14=Serial -OutputList3Cue15=[~UNUSED3~] -OutputList3SigType15=Serial -OutputList3Cue16=[~UNUSED3~] -OutputList3SigType16=Serial -OutputList3Cue17=[~UNUSED3~] -OutputList3SigType17=Serial -OutputList3Cue18=[~UNUSED3~] -OutputList3SigType18=Serial -OutputList3Cue19=[~UNUSED3~] -OutputList3SigType19=Serial -OutputList3Cue20=[~UNUSED3~] -OutputList3SigType20=Serial -OutputList3Cue21=[~UNUSED3~] -OutputList3SigType21=Serial -OutputList3Cue22=[~UNUSED3~] -OutputList3SigType22=Serial -OutputList3Cue23=[~UNUSED3~] -OutputList3SigType23=Serial -OutputList3Cue24=[~UNUSED3~] -OutputList3SigType24=Serial -OutputList3Cue25=[~UNUSED3~] -OutputList3SigType25=Serial -OutputList3Cue26=[~UNUSED3~] -OutputList3SigType26=Serial -OutputList3Cue27=[~UNUSED3~] -OutputList3SigType27=Serial -OutputList3Cue28=[~UNUSED3~] -OutputList3SigType28=Serial -OutputList3Cue29=[~UNUSED3~] -OutputList3SigType29=Serial -OutputList3Cue30=[~UNUSED3~] -OutputList3SigType30=Serial -OutputList3Cue31=[~UNUSED3~] -OutputList3SigType31=Serial -OutputList3Cue32=[~UNUSED3~] -OutputList3SigType32=Serial -OutputList3Cue33=[~UNUSED3~] -OutputList3SigType33=Serial -OutputList3Cue34=[~UNUSED3~] -OutputList3SigType34=Serial -OutputList3Cue35=[~UNUSED3~] -OutputList3SigType35=Serial -OutputList3Cue36=[~UNUSED3~] -OutputList3SigType36=Serial -OutputList3Cue37=[~UNUSED3~] -OutputList3SigType37=Serial -OutputList3Cue38=[~UNUSED3~] -OutputList3SigType38=Serial -OutputList3Cue39=[~UNUSED3~] -OutputList3SigType39=Serial -OutputList3Cue40=[~UNUSED3~] -OutputList3SigType40=Serial -OutputList3Cue41=[~UNUSED3~] -OutputList3SigType41=Serial -OutputList3Cue42=[~UNUSED2~] -OutputList3SigType42=Digital|Analog|Serial|String -OutputList3Cue2012=[~EndGroup~]Item Texts -OutputList3SigType2012=Serial -OutputList3Cue2013=[~BeginGroup~]Item Icons -OutputList3SigType2013=Serial -OutputList3Cue2014=[~UNUSED3~] -OutputList3SigType2014=Serial -OutputList3Cue2015=[~UNUSED3~] -OutputList3SigType2015=Serial -OutputList3Cue2016=[~UNUSED3~] -OutputList3SigType2016=Serial -OutputList3Cue2017=[~UNUSED3~] -OutputList3SigType2017=Serial -OutputList3Cue2018=[~UNUSED3~] -OutputList3SigType2018=Serial -OutputList3Cue2019=[~UNUSED3~] -OutputList3SigType2019=Serial -OutputList3Cue2020=[~UNUSED3~] -OutputList3SigType2020=Serial -OutputList3Cue2021=[~UNUSED3~] -OutputList3SigType2021=Serial -OutputList3Cue2022=[~UNUSED3~] -OutputList3SigType2022=Serial -OutputList3Cue2023=[~UNUSED3~] -OutputList3SigType2023=Serial -OutputList3Cue2024=[~UNUSED3~] -OutputList3SigType2024=Serial -OutputList3Cue2025=[~UNUSED3~] -OutputList3SigType2025=Serial -OutputList3Cue2026=[~UNUSED3~] -OutputList3SigType2026=Serial -OutputList3Cue2027=[~UNUSED3~] -OutputList3SigType2027=Serial -OutputList3Cue2028=[~UNUSED3~] -OutputList3SigType2028=Serial -OutputList3Cue2029=[~UNUSED3~] -OutputList3SigType2029=Serial -OutputList3Cue2030=[~UNUSED3~] -OutputList3SigType2030=Serial -OutputList3Cue2031=[~UNUSED3~] -OutputList3SigType2031=Serial -OutputList3Cue2032=[~UNUSED3~] -OutputList3SigType2032=Serial -OutputList3Cue2033=[~UNUSED3~] -OutputList3SigType2033=Serial -OutputList3Cue2034=[~UNUSED3~] -OutputList3SigType2034=Serial -OutputList3Cue2035=[~UNUSED3~] -OutputList3SigType2035=Serial -OutputList3Cue2036=[~UNUSED3~] -OutputList3SigType2036=Serial -OutputList3Cue2037=[~UNUSED3~] -OutputList3SigType2037=Serial -OutputList3Cue2038=[~UNUSED3~] -OutputList3SigType2038=Serial -OutputList3Cue2039=[~UNUSED3~] -OutputList3SigType2039=Serial -OutputList3Cue2040=[~UNUSED3~] -OutputList3SigType2040=Serial -OutputList3Cue2041=[~UNUSED3~] -OutputList3SigType2041=Serial -OutputList3Cue2042=[~UNUSED3~] -OutputList3SigType2042=Serial -OutputList3Cue2043=[~UNUSED3~] -OutputList3SigType2043=Serial -OutputList3Cue2044=[~UNUSED2~] -OutputList3SigType2044=Digital|Analog|Serial|String -OutputList3Cue4014=[~EndGroup~]Item Icons -OutputList3SigType4014=Serial -ParamCue1=SmartObjectId -ParamSigType1=Constant -MPp=1 -Pp1=19 -CedH=19 -SmartObjId=1203d -] -; Parameter Properties for Smart Object ID -[ -ObjTp=Dp -H=19 -Tp=1 -HD=TRUE -DV=1203d -NF=1 -DNF=1 -EncFmt=0 -DVLF=1 -Sgn=0 -] -; Smart Objects Definition section -[ -ObjTp=CED -H=19 -Name=PepperDash Essentials TSW-760_[D.VC] Recents_Dynamic Button List Vertical_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=FSgntr +Sgntr=SGD +RelVrs=3 +VTProeVer=6.1.05 +Schema=1 +CRCGUID=6C002F1C-3D96-4EBF-A0D9-8A124BE8F48A +] +;================================================================================ +[ +ObjTp=Hd +ProjectFile=PepperDash Essentials TSW-760.vtp +VtpGuid=D8D5F125-CB35-42E9-8AE3-4142597FD2C5 +] +;================================================================================ +[ +ObjTp=Symbol +Name=PepperDash Essentials TSW-760_[C.AC] Keypad_AC DTMF Keypad_2.ced +Hint=AC DTMF Keypad_2 (Smart Object ID=1101) +Code=1 +SGControlType=Simple Keypad +SGControlName=AC DTMF Keypad_2 +GUID=F2A259FE-82AD-4085-B5A6-22D7B034458C +SmplCName=PepperDash Essentials TSW-760_[C.AC] Keypad_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=1 +CedH=1 +SmartObjId=1101d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=1 +Tp=1 +HD=TRUE +DV=1101d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=1 +Name=PepperDash Essentials TSW-760_[C.AC] Keypad_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 TSW-760_[D.VC] Directory_Directory List.ced +Hint=Directory List (Smart Object ID=1202) +Code=2 +SGControlType=Dynamic Button List Vertical +SGControlName=Directory List +GUID=79060F3C-D3A4-4A8D-ACF0-CB2376A31702 +SmplCName=PepperDash Essentials TSW-760_[D.VC] Directory_Directory List.ced +SMWRev=4.02.20 +Expand=expand_random +HelpID=10112 +Render=8 +;Define the number of inputs, outputs and parameters +MinVariableInputs=6016 +MaxVariableInputs=6016 +MinVariableOutputs=6016 +MaxVariableOutputs=6016 +NumFixedParams=1 +MinVariableInputsList2=2012 +MaxVariableInputsList2=2012 +MinVariableOutputsList2=2012 +MaxVariableOutputsList2=2012 +MinVariableInputsList3=4014 +MaxVariableInputsList3=4014 +MinVariableOutputsList3=4014 +MaxVariableOutputsList3=4014 +InputSigType1=Digital +OutputSigType1=Digital +InputList2SigType1=Analog +OutputList2SigType1=Analog +InputList3SigType1=Serial +OutputList3SigType1=Serial + +;Define the cues, and signal types each input, output and parameter. +InputCue1=Disable Redraw +InputSigType1=Digital +InputCue2=[~UNUSED3~] +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~]Press +InputSigType11=Digital +InputCue12=Item 1 Selected +InputSigType12=Digital +InputCue13=Item 2 Selected +InputSigType13=Digital +InputCue14=Item 3 Selected +InputSigType14=Digital +InputCue15=Item 4 Selected +InputSigType15=Digital +InputCue16=Item 5 Selected +InputSigType16=Digital +InputCue17=Item 6 Selected +InputSigType17=Digital +InputCue18=Item 7 Selected +InputSigType18=Digital +InputCue19=Item 8 Selected +InputSigType19=Digital +InputCue20=Item 9 Selected +InputSigType20=Digital +InputCue21=Item 10 Selected +InputSigType21=Digital +InputCue22=Item 11 Selected +InputSigType22=Digital +InputCue23=Item 12 Selected +InputSigType23=Digital +InputCue24=Item 13 Selected +InputSigType24=Digital +InputCue25=Item 14 Selected +InputSigType25=Digital +InputCue26=Item 15 Selected +InputSigType26=Digital +InputCue27=Item 16 Selected +InputSigType27=Digital +InputCue28=Item 17 Selected +InputSigType28=Digital +InputCue29=Item 18 Selected +InputSigType29=Digital +InputCue30=Item 19 Selected +InputSigType30=Digital +InputCue31=Item 20 Selected +InputSigType31=Digital +InputCue32=Item 21 Selected +InputSigType32=Digital +InputCue33=Item 22 Selected +InputSigType33=Digital +InputCue34=Item 23 Selected +InputSigType34=Digital +InputCue35=Item 24 Selected +InputSigType35=Digital +InputCue36=Item 25 Selected +InputSigType36=Digital +InputCue37=Item 26 Selected +InputSigType37=Digital +InputCue38=Item 27 Selected +InputSigType38=Digital +InputCue39=Item 28 Selected +InputSigType39=Digital +InputCue40=Item 29 Selected +InputSigType40=Digital +InputCue41=Item 30 Selected +InputSigType41=Digital +InputCue42=Item 31 Selected +InputSigType42=Digital +InputCue43=Item 32 Selected +InputSigType43=Digital +InputCue44=Item 33 Selected +InputSigType44=Digital +InputCue45=Item 34 Selected +InputSigType45=Digital +InputCue46=Item 35 Selected +InputSigType46=Digital +InputCue47=Item 36 Selected +InputSigType47=Digital +InputCue48=Item 37 Selected +InputSigType48=Digital +InputCue49=Item 38 Selected +InputSigType49=Digital +InputCue50=Item 39 Selected +InputSigType50=Digital +InputCue51=Item 40 Selected +InputSigType51=Digital +InputCue52=Item 41 Selected +InputSigType52=Digital +InputCue53=Item 42 Selected +InputSigType53=Digital +InputCue54=Item 43 Selected +InputSigType54=Digital +InputCue55=Item 44 Selected +InputSigType55=Digital +InputCue56=Item 45 Selected +InputSigType56=Digital +InputCue57=Item 46 Selected +InputSigType57=Digital +InputCue58=Item 47 Selected +InputSigType58=Digital +InputCue59=Item 48 Selected +InputSigType59=Digital +InputCue60=Item 49 Selected +InputSigType60=Digital +InputCue61=Item 50 Selected +InputSigType61=Digital +InputCue62=Item 51 Selected +InputSigType62=Digital +InputCue63=Item 52 Selected +InputSigType63=Digital +InputCue64=Item 53 Selected +InputSigType64=Digital +InputCue65=Item 54 Selected +InputSigType65=Digital +InputCue66=Item 55 Selected +InputSigType66=Digital +InputCue67=Item 56 Selected +InputSigType67=Digital +InputCue68=Item 57 Selected +InputSigType68=Digital +InputCue69=Item 58 Selected +InputSigType69=Digital +InputCue70=Item 59 Selected +InputSigType70=Digital +InputCue71=Item 60 Selected +InputSigType71=Digital +InputCue72=Item 61 Selected +InputSigType72=Digital +InputCue73=Item 62 Selected +InputSigType73=Digital +InputCue74=Item 63 Selected +InputSigType74=Digital +InputCue75=Item 64 Selected +InputSigType75=Digital +InputCue76=Item 65 Selected +InputSigType76=Digital +InputCue77=Item 66 Selected +InputSigType77=Digital +InputCue78=Item 67 Selected +InputSigType78=Digital +InputCue79=Item 68 Selected +InputSigType79=Digital +InputCue80=Item 69 Selected +InputSigType80=Digital +InputCue81=Item 70 Selected +InputSigType81=Digital +InputCue82=Item 71 Selected +InputSigType82=Digital +InputCue83=Item 72 Selected +InputSigType83=Digital +InputCue84=Item 73 Selected +InputSigType84=Digital +InputCue85=Item 74 Selected +InputSigType85=Digital +InputCue86=Item 75 Selected +InputSigType86=Digital +InputCue87=Item 76 Selected +InputSigType87=Digital +InputCue88=Item 77 Selected +InputSigType88=Digital +InputCue89=Item 78 Selected +InputSigType89=Digital +InputCue90=Item 79 Selected +InputSigType90=Digital +InputCue91=Item 80 Selected +InputSigType91=Digital +InputCue92=Item 81 Selected +InputSigType92=Digital +InputCue93=Item 82 Selected +InputSigType93=Digital +InputCue94=Item 83 Selected +InputSigType94=Digital +InputCue95=Item 84 Selected +InputSigType95=Digital +InputCue96=Item 85 Selected +InputSigType96=Digital +InputCue97=Item 86 Selected +InputSigType97=Digital +InputCue98=Item 87 Selected +InputSigType98=Digital +InputCue99=Item 88 Selected +InputSigType99=Digital +InputCue100=Item 89 Selected +InputSigType100=Digital +InputCue101=Item 90 Selected +InputSigType101=Digital +InputCue102=Item 91 Selected +InputSigType102=Digital +InputCue103=Item 92 Selected +InputSigType103=Digital +InputCue104=Item 93 Selected +InputSigType104=Digital +InputCue105=Item 94 Selected +InputSigType105=Digital +InputCue106=Item 95 Selected +InputSigType106=Digital +InputCue107=Item 96 Selected +InputSigType107=Digital +InputCue108=Item 97 Selected +InputSigType108=Digital +InputCue109=Item 98 Selected +InputSigType109=Digital +InputCue110=Item 99 Selected +InputSigType110=Digital +InputCue111=Item 100 Selected +InputSigType111=Digital +InputCue112=Item 101 Selected +InputSigType112=Digital +InputCue113=Item 102 Selected +InputSigType113=Digital +InputCue114=Item 103 Selected +InputSigType114=Digital +InputCue115=Item 104 Selected +InputSigType115=Digital +InputCue116=Item 105 Selected +InputSigType116=Digital +InputCue117=Item 106 Selected +InputSigType117=Digital +InputCue118=Item 107 Selected +InputSigType118=Digital +InputCue119=Item 108 Selected +InputSigType119=Digital +InputCue120=Item 109 Selected +InputSigType120=Digital +InputCue121=Item 110 Selected +InputSigType121=Digital +InputCue122=Item 111 Selected +InputSigType122=Digital +InputCue123=Item 112 Selected +InputSigType123=Digital +InputCue124=Item 113 Selected +InputSigType124=Digital +InputCue125=Item 114 Selected +InputSigType125=Digital +InputCue126=Item 115 Selected +InputSigType126=Digital +InputCue127=Item 116 Selected +InputSigType127=Digital +InputCue128=Item 117 Selected +InputSigType128=Digital +InputCue129=Item 118 Selected +InputSigType129=Digital +InputCue130=Item 119 Selected +InputSigType130=Digital +InputCue131=Item 120 Selected +InputSigType131=Digital +InputCue132=Item 121 Selected +InputSigType132=Digital +InputCue133=Item 122 Selected +InputSigType133=Digital +InputCue134=Item 123 Selected +InputSigType134=Digital +InputCue135=Item 124 Selected +InputSigType135=Digital +InputCue136=Item 125 Selected +InputSigType136=Digital +InputCue137=Item 126 Selected +InputSigType137=Digital +InputCue138=Item 127 Selected +InputSigType138=Digital +InputCue139=Item 128 Selected +InputSigType139=Digital +InputCue140=Item 129 Selected +InputSigType140=Digital +InputCue141=Item 130 Selected +InputSigType141=Digital +InputCue142=Item 131 Selected +InputSigType142=Digital +InputCue143=Item 132 Selected +InputSigType143=Digital +InputCue144=Item 133 Selected +InputSigType144=Digital +InputCue145=Item 134 Selected +InputSigType145=Digital +InputCue146=Item 135 Selected +InputSigType146=Digital +InputCue147=Item 136 Selected +InputSigType147=Digital +InputCue148=Item 137 Selected +InputSigType148=Digital +InputCue149=Item 138 Selected +InputSigType149=Digital +InputCue150=Item 139 Selected +InputSigType150=Digital +InputCue151=Item 140 Selected +InputSigType151=Digital +InputCue152=Item 141 Selected +InputSigType152=Digital +InputCue153=Item 142 Selected +InputSigType153=Digital +InputCue154=Item 143 Selected +InputSigType154=Digital +InputCue155=Item 144 Selected +InputSigType155=Digital +InputCue156=Item 145 Selected +InputSigType156=Digital +InputCue157=Item 146 Selected +InputSigType157=Digital +InputCue158=Item 147 Selected +InputSigType158=Digital +InputCue159=Item 148 Selected +InputSigType159=Digital +InputCue160=Item 149 Selected +InputSigType160=Digital +InputCue161=Item 150 Selected +InputSigType161=Digital +InputCue162=Item 151 Selected +InputSigType162=Digital +InputCue163=Item 152 Selected +InputSigType163=Digital +InputCue164=Item 153 Selected +InputSigType164=Digital +InputCue165=Item 154 Selected +InputSigType165=Digital +InputCue166=Item 155 Selected +InputSigType166=Digital +InputCue167=Item 156 Selected +InputSigType167=Digital +InputCue168=Item 157 Selected +InputSigType168=Digital +InputCue169=Item 158 Selected +InputSigType169=Digital +InputCue170=Item 159 Selected +InputSigType170=Digital +InputCue171=Item 160 Selected +InputSigType171=Digital +InputCue172=Item 161 Selected +InputSigType172=Digital +InputCue173=Item 162 Selected +InputSigType173=Digital +InputCue174=Item 163 Selected +InputSigType174=Digital +InputCue175=Item 164 Selected +InputSigType175=Digital +InputCue176=Item 165 Selected +InputSigType176=Digital +InputCue177=Item 166 Selected +InputSigType177=Digital +InputCue178=Item 167 Selected +InputSigType178=Digital +InputCue179=Item 168 Selected +InputSigType179=Digital +InputCue180=Item 169 Selected +InputSigType180=Digital +InputCue181=Item 170 Selected +InputSigType181=Digital +InputCue182=Item 171 Selected +InputSigType182=Digital +InputCue183=Item 172 Selected +InputSigType183=Digital +InputCue184=Item 173 Selected +InputSigType184=Digital +InputCue185=Item 174 Selected +InputSigType185=Digital +InputCue186=Item 175 Selected +InputSigType186=Digital +InputCue187=Item 176 Selected +InputSigType187=Digital +InputCue188=Item 177 Selected +InputSigType188=Digital +InputCue189=Item 178 Selected +InputSigType189=Digital +InputCue190=Item 179 Selected +InputSigType190=Digital +InputCue191=Item 180 Selected +InputSigType191=Digital +InputCue192=Item 181 Selected +InputSigType192=Digital +InputCue193=Item 182 Selected +InputSigType193=Digital +InputCue194=Item 183 Selected +InputSigType194=Digital +InputCue195=Item 184 Selected +InputSigType195=Digital +InputCue196=Item 185 Selected +InputSigType196=Digital +InputCue197=Item 186 Selected +InputSigType197=Digital +InputCue198=Item 187 Selected +InputSigType198=Digital +InputCue199=Item 188 Selected +InputSigType199=Digital +InputCue200=Item 189 Selected +InputSigType200=Digital +InputCue201=Item 190 Selected +InputSigType201=Digital +InputCue202=Item 191 Selected +InputSigType202=Digital +InputCue203=Item 192 Selected +InputSigType203=Digital +InputCue204=Item 193 Selected +InputSigType204=Digital +InputCue205=Item 194 Selected +InputSigType205=Digital +InputCue206=Item 195 Selected +InputSigType206=Digital +InputCue207=Item 196 Selected +InputSigType207=Digital +InputCue208=Item 197 Selected +InputSigType208=Digital +InputCue209=Item 198 Selected +InputSigType209=Digital +InputCue210=Item 199 Selected +InputSigType210=Digital +InputCue211=Item 200 Selected +InputSigType211=Digital +InputCue212=Item 201 Selected +InputSigType212=Digital +InputCue213=Item 202 Selected +InputSigType213=Digital +InputCue214=Item 203 Selected +InputSigType214=Digital +InputCue215=Item 204 Selected +InputSigType215=Digital +InputCue216=Item 205 Selected +InputSigType216=Digital +InputCue217=Item 206 Selected +InputSigType217=Digital +InputCue218=Item 207 Selected +InputSigType218=Digital +InputCue219=Item 208 Selected +InputSigType219=Digital +InputCue220=Item 209 Selected +InputSigType220=Digital +InputCue221=Item 210 Selected +InputSigType221=Digital +InputCue222=Item 211 Selected +InputSigType222=Digital +InputCue223=Item 212 Selected +InputSigType223=Digital +InputCue224=Item 213 Selected +InputSigType224=Digital +InputCue225=Item 214 Selected +InputSigType225=Digital +InputCue226=Item 215 Selected +InputSigType226=Digital +InputCue227=Item 216 Selected +InputSigType227=Digital +InputCue228=Item 217 Selected +InputSigType228=Digital +InputCue229=Item 218 Selected +InputSigType229=Digital +InputCue230=Item 219 Selected +InputSigType230=Digital +InputCue231=Item 220 Selected +InputSigType231=Digital +InputCue232=Item 221 Selected +InputSigType232=Digital +InputCue233=Item 222 Selected +InputSigType233=Digital +InputCue234=Item 223 Selected +InputSigType234=Digital +InputCue235=Item 224 Selected +InputSigType235=Digital +InputCue236=Item 225 Selected +InputSigType236=Digital +InputCue237=Item 226 Selected +InputSigType237=Digital +InputCue238=Item 227 Selected +InputSigType238=Digital +InputCue239=Item 228 Selected +InputSigType239=Digital +InputCue240=Item 229 Selected +InputSigType240=Digital +InputCue241=Item 230 Selected +InputSigType241=Digital +InputCue242=Item 231 Selected +InputSigType242=Digital +InputCue243=Item 232 Selected +InputSigType243=Digital +InputCue244=Item 233 Selected +InputSigType244=Digital +InputCue245=Item 234 Selected +InputSigType245=Digital +InputCue246=Item 235 Selected +InputSigType246=Digital +InputCue247=Item 236 Selected +InputSigType247=Digital +InputCue248=Item 237 Selected +InputSigType248=Digital +InputCue249=Item 238 Selected +InputSigType249=Digital +InputCue250=Item 239 Selected +InputSigType250=Digital +InputCue251=Item 240 Selected +InputSigType251=Digital +InputCue252=Item 241 Selected +InputSigType252=Digital +InputCue253=Item 242 Selected +InputSigType253=Digital +InputCue254=Item 243 Selected +InputSigType254=Digital +InputCue255=Item 244 Selected +InputSigType255=Digital +InputCue256=Item 245 Selected +InputSigType256=Digital +InputCue257=Item 246 Selected +InputSigType257=Digital +InputCue258=Item 247 Selected +InputSigType258=Digital +InputCue259=Item 248 Selected +InputSigType259=Digital +InputCue260=Item 249 Selected +InputSigType260=Digital +InputCue261=Item 250 Selected +InputSigType261=Digital +InputCue262=Item 251 Selected +InputSigType262=Digital +InputCue263=Item 252 Selected +InputSigType263=Digital +InputCue264=Item 253 Selected +InputSigType264=Digital +InputCue265=Item 254 Selected +InputSigType265=Digital +InputCue266=Item 255 Selected +InputSigType266=Digital +InputCue267=[~UNUSED2~] +InputSigType267=Digital|Analog|Serial|String +InputCue2012=[~EndGroup~]Press +InputSigType2012=Digital +InputCue2013=[~BeginGroup~]Enable +InputSigType2013=Digital +InputCue2014=Item 1 Enabled +InputSigType2014=Digital +InputCue2015=Item 2 Enabled +InputSigType2015=Digital +InputCue2016=Item 3 Enabled +InputSigType2016=Digital +InputCue2017=Item 4 Enabled +InputSigType2017=Digital +InputCue2018=Item 5 Enabled +InputSigType2018=Digital +InputCue2019=Item 6 Enabled +InputSigType2019=Digital +InputCue2020=Item 7 Enabled +InputSigType2020=Digital +InputCue2021=Item 8 Enabled +InputSigType2021=Digital +InputCue2022=Item 9 Enabled +InputSigType2022=Digital +InputCue2023=Item 10 Enabled +InputSigType2023=Digital +InputCue2024=Item 11 Enabled +InputSigType2024=Digital +InputCue2025=Item 12 Enabled +InputSigType2025=Digital +InputCue2026=Item 13 Enabled +InputSigType2026=Digital +InputCue2027=Item 14 Enabled +InputSigType2027=Digital +InputCue2028=Item 15 Enabled +InputSigType2028=Digital +InputCue2029=Item 16 Enabled +InputSigType2029=Digital +InputCue2030=Item 17 Enabled +InputSigType2030=Digital +InputCue2031=Item 18 Enabled +InputSigType2031=Digital +InputCue2032=Item 19 Enabled +InputSigType2032=Digital +InputCue2033=Item 20 Enabled +InputSigType2033=Digital +InputCue2034=Item 21 Enabled +InputSigType2034=Digital +InputCue2035=Item 22 Enabled +InputSigType2035=Digital +InputCue2036=Item 23 Enabled +InputSigType2036=Digital +InputCue2037=Item 24 Enabled +InputSigType2037=Digital +InputCue2038=Item 25 Enabled +InputSigType2038=Digital +InputCue2039=Item 26 Enabled +InputSigType2039=Digital +InputCue2040=Item 27 Enabled +InputSigType2040=Digital +InputCue2041=Item 28 Enabled +InputSigType2041=Digital +InputCue2042=Item 29 Enabled +InputSigType2042=Digital +InputCue2043=Item 30 Enabled +InputSigType2043=Digital +InputCue2044=Item 31 Enabled +InputSigType2044=Digital +InputCue2045=Item 32 Enabled +InputSigType2045=Digital +InputCue2046=Item 33 Enabled +InputSigType2046=Digital +InputCue2047=Item 34 Enabled +InputSigType2047=Digital +InputCue2048=Item 35 Enabled +InputSigType2048=Digital +InputCue2049=Item 36 Enabled +InputSigType2049=Digital +InputCue2050=Item 37 Enabled +InputSigType2050=Digital +InputCue2051=Item 38 Enabled +InputSigType2051=Digital +InputCue2052=Item 39 Enabled +InputSigType2052=Digital +InputCue2053=Item 40 Enabled +InputSigType2053=Digital +InputCue2054=Item 41 Enabled +InputSigType2054=Digital +InputCue2055=Item 42 Enabled +InputSigType2055=Digital +InputCue2056=Item 43 Enabled +InputSigType2056=Digital +InputCue2057=Item 44 Enabled +InputSigType2057=Digital +InputCue2058=Item 45 Enabled +InputSigType2058=Digital +InputCue2059=Item 46 Enabled +InputSigType2059=Digital +InputCue2060=Item 47 Enabled +InputSigType2060=Digital +InputCue2061=Item 48 Enabled +InputSigType2061=Digital +InputCue2062=Item 49 Enabled +InputSigType2062=Digital +InputCue2063=Item 50 Enabled +InputSigType2063=Digital +InputCue2064=Item 51 Enabled +InputSigType2064=Digital +InputCue2065=Item 52 Enabled +InputSigType2065=Digital +InputCue2066=Item 53 Enabled +InputSigType2066=Digital +InputCue2067=Item 54 Enabled +InputSigType2067=Digital +InputCue2068=Item 55 Enabled +InputSigType2068=Digital +InputCue2069=Item 56 Enabled +InputSigType2069=Digital +InputCue2070=Item 57 Enabled +InputSigType2070=Digital +InputCue2071=Item 58 Enabled +InputSigType2071=Digital +InputCue2072=Item 59 Enabled +InputSigType2072=Digital +InputCue2073=Item 60 Enabled +InputSigType2073=Digital +InputCue2074=Item 61 Enabled +InputSigType2074=Digital +InputCue2075=Item 62 Enabled +InputSigType2075=Digital +InputCue2076=Item 63 Enabled +InputSigType2076=Digital +InputCue2077=Item 64 Enabled +InputSigType2077=Digital +InputCue2078=Item 65 Enabled +InputSigType2078=Digital +InputCue2079=Item 66 Enabled +InputSigType2079=Digital +InputCue2080=Item 67 Enabled +InputSigType2080=Digital +InputCue2081=Item 68 Enabled +InputSigType2081=Digital +InputCue2082=Item 69 Enabled +InputSigType2082=Digital +InputCue2083=Item 70 Enabled +InputSigType2083=Digital +InputCue2084=Item 71 Enabled +InputSigType2084=Digital +InputCue2085=Item 72 Enabled +InputSigType2085=Digital +InputCue2086=Item 73 Enabled +InputSigType2086=Digital +InputCue2087=Item 74 Enabled +InputSigType2087=Digital +InputCue2088=Item 75 Enabled +InputSigType2088=Digital +InputCue2089=Item 76 Enabled +InputSigType2089=Digital +InputCue2090=Item 77 Enabled +InputSigType2090=Digital +InputCue2091=Item 78 Enabled +InputSigType2091=Digital +InputCue2092=Item 79 Enabled +InputSigType2092=Digital +InputCue2093=Item 80 Enabled +InputSigType2093=Digital +InputCue2094=Item 81 Enabled +InputSigType2094=Digital +InputCue2095=Item 82 Enabled +InputSigType2095=Digital +InputCue2096=Item 83 Enabled +InputSigType2096=Digital +InputCue2097=Item 84 Enabled +InputSigType2097=Digital +InputCue2098=Item 85 Enabled +InputSigType2098=Digital +InputCue2099=Item 86 Enabled +InputSigType2099=Digital +InputCue2100=Item 87 Enabled +InputSigType2100=Digital +InputCue2101=Item 88 Enabled +InputSigType2101=Digital +InputCue2102=Item 89 Enabled +InputSigType2102=Digital +InputCue2103=Item 90 Enabled +InputSigType2103=Digital +InputCue2104=Item 91 Enabled +InputSigType2104=Digital +InputCue2105=Item 92 Enabled +InputSigType2105=Digital +InputCue2106=Item 93 Enabled +InputSigType2106=Digital +InputCue2107=Item 94 Enabled +InputSigType2107=Digital +InputCue2108=Item 95 Enabled +InputSigType2108=Digital +InputCue2109=Item 96 Enabled +InputSigType2109=Digital +InputCue2110=Item 97 Enabled +InputSigType2110=Digital +InputCue2111=Item 98 Enabled +InputSigType2111=Digital +InputCue2112=Item 99 Enabled +InputSigType2112=Digital +InputCue2113=Item 100 Enabled +InputSigType2113=Digital +InputCue2114=Item 101 Enabled +InputSigType2114=Digital +InputCue2115=Item 102 Enabled +InputSigType2115=Digital +InputCue2116=Item 103 Enabled +InputSigType2116=Digital +InputCue2117=Item 104 Enabled +InputSigType2117=Digital +InputCue2118=Item 105 Enabled +InputSigType2118=Digital +InputCue2119=Item 106 Enabled +InputSigType2119=Digital +InputCue2120=Item 107 Enabled +InputSigType2120=Digital +InputCue2121=Item 108 Enabled +InputSigType2121=Digital +InputCue2122=Item 109 Enabled +InputSigType2122=Digital +InputCue2123=Item 110 Enabled +InputSigType2123=Digital +InputCue2124=Item 111 Enabled +InputSigType2124=Digital +InputCue2125=Item 112 Enabled +InputSigType2125=Digital +InputCue2126=Item 113 Enabled +InputSigType2126=Digital +InputCue2127=Item 114 Enabled +InputSigType2127=Digital +InputCue2128=Item 115 Enabled +InputSigType2128=Digital +InputCue2129=Item 116 Enabled +InputSigType2129=Digital +InputCue2130=Item 117 Enabled +InputSigType2130=Digital +InputCue2131=Item 118 Enabled +InputSigType2131=Digital +InputCue2132=Item 119 Enabled +InputSigType2132=Digital +InputCue2133=Item 120 Enabled +InputSigType2133=Digital +InputCue2134=Item 121 Enabled +InputSigType2134=Digital +InputCue2135=Item 122 Enabled +InputSigType2135=Digital +InputCue2136=Item 123 Enabled +InputSigType2136=Digital +InputCue2137=Item 124 Enabled +InputSigType2137=Digital +InputCue2138=Item 125 Enabled +InputSigType2138=Digital +InputCue2139=Item 126 Enabled +InputSigType2139=Digital +InputCue2140=Item 127 Enabled +InputSigType2140=Digital +InputCue2141=Item 128 Enabled +InputSigType2141=Digital +InputCue2142=Item 129 Enabled +InputSigType2142=Digital +InputCue2143=Item 130 Enabled +InputSigType2143=Digital +InputCue2144=Item 131 Enabled +InputSigType2144=Digital +InputCue2145=Item 132 Enabled +InputSigType2145=Digital +InputCue2146=Item 133 Enabled +InputSigType2146=Digital +InputCue2147=Item 134 Enabled +InputSigType2147=Digital +InputCue2148=Item 135 Enabled +InputSigType2148=Digital +InputCue2149=Item 136 Enabled +InputSigType2149=Digital +InputCue2150=Item 137 Enabled +InputSigType2150=Digital +InputCue2151=Item 138 Enabled +InputSigType2151=Digital +InputCue2152=Item 139 Enabled +InputSigType2152=Digital +InputCue2153=Item 140 Enabled +InputSigType2153=Digital +InputCue2154=Item 141 Enabled +InputSigType2154=Digital +InputCue2155=Item 142 Enabled +InputSigType2155=Digital +InputCue2156=Item 143 Enabled +InputSigType2156=Digital +InputCue2157=Item 144 Enabled +InputSigType2157=Digital +InputCue2158=Item 145 Enabled +InputSigType2158=Digital +InputCue2159=Item 146 Enabled +InputSigType2159=Digital +InputCue2160=Item 147 Enabled +InputSigType2160=Digital +InputCue2161=Item 148 Enabled +InputSigType2161=Digital +InputCue2162=Item 149 Enabled +InputSigType2162=Digital +InputCue2163=Item 150 Enabled +InputSigType2163=Digital +InputCue2164=Item 151 Enabled +InputSigType2164=Digital +InputCue2165=Item 152 Enabled +InputSigType2165=Digital +InputCue2166=Item 153 Enabled +InputSigType2166=Digital +InputCue2167=Item 154 Enabled +InputSigType2167=Digital +InputCue2168=Item 155 Enabled +InputSigType2168=Digital +InputCue2169=Item 156 Enabled +InputSigType2169=Digital +InputCue2170=Item 157 Enabled +InputSigType2170=Digital +InputCue2171=Item 158 Enabled +InputSigType2171=Digital +InputCue2172=Item 159 Enabled +InputSigType2172=Digital +InputCue2173=Item 160 Enabled +InputSigType2173=Digital +InputCue2174=Item 161 Enabled +InputSigType2174=Digital +InputCue2175=Item 162 Enabled +InputSigType2175=Digital +InputCue2176=Item 163 Enabled +InputSigType2176=Digital +InputCue2177=Item 164 Enabled +InputSigType2177=Digital +InputCue2178=Item 165 Enabled +InputSigType2178=Digital +InputCue2179=Item 166 Enabled +InputSigType2179=Digital +InputCue2180=Item 167 Enabled +InputSigType2180=Digital +InputCue2181=Item 168 Enabled +InputSigType2181=Digital +InputCue2182=Item 169 Enabled +InputSigType2182=Digital +InputCue2183=Item 170 Enabled +InputSigType2183=Digital +InputCue2184=Item 171 Enabled +InputSigType2184=Digital +InputCue2185=Item 172 Enabled +InputSigType2185=Digital +InputCue2186=Item 173 Enabled +InputSigType2186=Digital +InputCue2187=Item 174 Enabled +InputSigType2187=Digital +InputCue2188=Item 175 Enabled +InputSigType2188=Digital +InputCue2189=Item 176 Enabled +InputSigType2189=Digital +InputCue2190=Item 177 Enabled +InputSigType2190=Digital +InputCue2191=Item 178 Enabled +InputSigType2191=Digital +InputCue2192=Item 179 Enabled +InputSigType2192=Digital +InputCue2193=Item 180 Enabled +InputSigType2193=Digital +InputCue2194=Item 181 Enabled +InputSigType2194=Digital +InputCue2195=Item 182 Enabled +InputSigType2195=Digital +InputCue2196=Item 183 Enabled +InputSigType2196=Digital +InputCue2197=Item 184 Enabled +InputSigType2197=Digital +InputCue2198=Item 185 Enabled +InputSigType2198=Digital +InputCue2199=Item 186 Enabled +InputSigType2199=Digital +InputCue2200=Item 187 Enabled +InputSigType2200=Digital +InputCue2201=Item 188 Enabled +InputSigType2201=Digital +InputCue2202=Item 189 Enabled +InputSigType2202=Digital +InputCue2203=Item 190 Enabled +InputSigType2203=Digital +InputCue2204=Item 191 Enabled +InputSigType2204=Digital +InputCue2205=Item 192 Enabled +InputSigType2205=Digital +InputCue2206=Item 193 Enabled +InputSigType2206=Digital +InputCue2207=Item 194 Enabled +InputSigType2207=Digital +InputCue2208=Item 195 Enabled +InputSigType2208=Digital +InputCue2209=Item 196 Enabled +InputSigType2209=Digital +InputCue2210=Item 197 Enabled +InputSigType2210=Digital +InputCue2211=Item 198 Enabled +InputSigType2211=Digital +InputCue2212=Item 199 Enabled +InputSigType2212=Digital +InputCue2213=Item 200 Enabled +InputSigType2213=Digital +InputCue2214=Item 201 Enabled +InputSigType2214=Digital +InputCue2215=Item 202 Enabled +InputSigType2215=Digital +InputCue2216=Item 203 Enabled +InputSigType2216=Digital +InputCue2217=Item 204 Enabled +InputSigType2217=Digital +InputCue2218=Item 205 Enabled +InputSigType2218=Digital +InputCue2219=Item 206 Enabled +InputSigType2219=Digital +InputCue2220=Item 207 Enabled +InputSigType2220=Digital +InputCue2221=Item 208 Enabled +InputSigType2221=Digital +InputCue2222=Item 209 Enabled +InputSigType2222=Digital +InputCue2223=Item 210 Enabled +InputSigType2223=Digital +InputCue2224=Item 211 Enabled +InputSigType2224=Digital +InputCue2225=Item 212 Enabled +InputSigType2225=Digital +InputCue2226=Item 213 Enabled +InputSigType2226=Digital +InputCue2227=Item 214 Enabled +InputSigType2227=Digital +InputCue2228=Item 215 Enabled +InputSigType2228=Digital +InputCue2229=Item 216 Enabled +InputSigType2229=Digital +InputCue2230=Item 217 Enabled +InputSigType2230=Digital +InputCue2231=Item 218 Enabled +InputSigType2231=Digital +InputCue2232=Item 219 Enabled +InputSigType2232=Digital +InputCue2233=Item 220 Enabled +InputSigType2233=Digital +InputCue2234=Item 221 Enabled +InputSigType2234=Digital +InputCue2235=Item 222 Enabled +InputSigType2235=Digital +InputCue2236=Item 223 Enabled +InputSigType2236=Digital +InputCue2237=Item 224 Enabled +InputSigType2237=Digital +InputCue2238=Item 225 Enabled +InputSigType2238=Digital +InputCue2239=Item 226 Enabled +InputSigType2239=Digital +InputCue2240=Item 227 Enabled +InputSigType2240=Digital +InputCue2241=Item 228 Enabled +InputSigType2241=Digital +InputCue2242=Item 229 Enabled +InputSigType2242=Digital +InputCue2243=Item 230 Enabled +InputSigType2243=Digital +InputCue2244=Item 231 Enabled +InputSigType2244=Digital +InputCue2245=Item 232 Enabled +InputSigType2245=Digital +InputCue2246=Item 233 Enabled +InputSigType2246=Digital +InputCue2247=Item 234 Enabled +InputSigType2247=Digital +InputCue2248=Item 235 Enabled +InputSigType2248=Digital +InputCue2249=Item 236 Enabled +InputSigType2249=Digital +InputCue2250=Item 237 Enabled +InputSigType2250=Digital +InputCue2251=Item 238 Enabled +InputSigType2251=Digital +InputCue2252=Item 239 Enabled +InputSigType2252=Digital +InputCue2253=Item 240 Enabled +InputSigType2253=Digital +InputCue2254=Item 241 Enabled +InputSigType2254=Digital +InputCue2255=Item 242 Enabled +InputSigType2255=Digital +InputCue2256=Item 243 Enabled +InputSigType2256=Digital +InputCue2257=Item 244 Enabled +InputSigType2257=Digital +InputCue2258=Item 245 Enabled +InputSigType2258=Digital +InputCue2259=Item 246 Enabled +InputSigType2259=Digital +InputCue2260=Item 247 Enabled +InputSigType2260=Digital +InputCue2261=Item 248 Enabled +InputSigType2261=Digital +InputCue2262=Item 249 Enabled +InputSigType2262=Digital +InputCue2263=Item 250 Enabled +InputSigType2263=Digital +InputCue2264=Item 251 Enabled +InputSigType2264=Digital +InputCue2265=Item 252 Enabled +InputSigType2265=Digital +InputCue2266=Item 253 Enabled +InputSigType2266=Digital +InputCue2267=Item 254 Enabled +InputSigType2267=Digital +InputCue2268=Item 255 Enabled +InputSigType2268=Digital +InputCue2269=[~UNUSED2~] +InputSigType2269=Digital|Analog|Serial|String +InputCue4014=[~EndGroup~]Enable +InputSigType4014=Digital +InputCue4015=[~BeginGroup~]Visible +InputSigType4015=Digital +InputCue4016=Item 1 Visible +InputSigType4016=Digital +InputCue4017=Item 2 Visible +InputSigType4017=Digital +InputCue4018=Item 3 Visible +InputSigType4018=Digital +InputCue4019=Item 4 Visible +InputSigType4019=Digital +InputCue4020=Item 5 Visible +InputSigType4020=Digital +InputCue4021=Item 6 Visible +InputSigType4021=Digital +InputCue4022=Item 7 Visible +InputSigType4022=Digital +InputCue4023=Item 8 Visible +InputSigType4023=Digital +InputCue4024=Item 9 Visible +InputSigType4024=Digital +InputCue4025=Item 10 Visible +InputSigType4025=Digital +InputCue4026=Item 11 Visible +InputSigType4026=Digital +InputCue4027=Item 12 Visible +InputSigType4027=Digital +InputCue4028=Item 13 Visible +InputSigType4028=Digital +InputCue4029=Item 14 Visible +InputSigType4029=Digital +InputCue4030=Item 15 Visible +InputSigType4030=Digital +InputCue4031=Item 16 Visible +InputSigType4031=Digital +InputCue4032=Item 17 Visible +InputSigType4032=Digital +InputCue4033=Item 18 Visible +InputSigType4033=Digital +InputCue4034=Item 19 Visible +InputSigType4034=Digital +InputCue4035=Item 20 Visible +InputSigType4035=Digital +InputCue4036=Item 21 Visible +InputSigType4036=Digital +InputCue4037=Item 22 Visible +InputSigType4037=Digital +InputCue4038=Item 23 Visible +InputSigType4038=Digital +InputCue4039=Item 24 Visible +InputSigType4039=Digital +InputCue4040=Item 25 Visible +InputSigType4040=Digital +InputCue4041=Item 26 Visible +InputSigType4041=Digital +InputCue4042=Item 27 Visible +InputSigType4042=Digital +InputCue4043=Item 28 Visible +InputSigType4043=Digital +InputCue4044=Item 29 Visible +InputSigType4044=Digital +InputCue4045=Item 30 Visible +InputSigType4045=Digital +InputCue4046=Item 31 Visible +InputSigType4046=Digital +InputCue4047=Item 32 Visible +InputSigType4047=Digital +InputCue4048=Item 33 Visible +InputSigType4048=Digital +InputCue4049=Item 34 Visible +InputSigType4049=Digital +InputCue4050=Item 35 Visible +InputSigType4050=Digital +InputCue4051=Item 36 Visible +InputSigType4051=Digital +InputCue4052=Item 37 Visible +InputSigType4052=Digital +InputCue4053=Item 38 Visible +InputSigType4053=Digital +InputCue4054=Item 39 Visible +InputSigType4054=Digital +InputCue4055=Item 40 Visible +InputSigType4055=Digital +InputCue4056=Item 41 Visible +InputSigType4056=Digital +InputCue4057=Item 42 Visible +InputSigType4057=Digital +InputCue4058=Item 43 Visible +InputSigType4058=Digital +InputCue4059=Item 44 Visible +InputSigType4059=Digital +InputCue4060=Item 45 Visible +InputSigType4060=Digital +InputCue4061=Item 46 Visible +InputSigType4061=Digital +InputCue4062=Item 47 Visible +InputSigType4062=Digital +InputCue4063=Item 48 Visible +InputSigType4063=Digital +InputCue4064=Item 49 Visible +InputSigType4064=Digital +InputCue4065=Item 50 Visible +InputSigType4065=Digital +InputCue4066=Item 51 Visible +InputSigType4066=Digital +InputCue4067=Item 52 Visible +InputSigType4067=Digital +InputCue4068=Item 53 Visible +InputSigType4068=Digital +InputCue4069=Item 54 Visible +InputSigType4069=Digital +InputCue4070=Item 55 Visible +InputSigType4070=Digital +InputCue4071=Item 56 Visible +InputSigType4071=Digital +InputCue4072=Item 57 Visible +InputSigType4072=Digital +InputCue4073=Item 58 Visible +InputSigType4073=Digital +InputCue4074=Item 59 Visible +InputSigType4074=Digital +InputCue4075=Item 60 Visible +InputSigType4075=Digital +InputCue4076=Item 61 Visible +InputSigType4076=Digital +InputCue4077=Item 62 Visible +InputSigType4077=Digital +InputCue4078=Item 63 Visible +InputSigType4078=Digital +InputCue4079=Item 64 Visible +InputSigType4079=Digital +InputCue4080=Item 65 Visible +InputSigType4080=Digital +InputCue4081=Item 66 Visible +InputSigType4081=Digital +InputCue4082=Item 67 Visible +InputSigType4082=Digital +InputCue4083=Item 68 Visible +InputSigType4083=Digital +InputCue4084=Item 69 Visible +InputSigType4084=Digital +InputCue4085=Item 70 Visible +InputSigType4085=Digital +InputCue4086=Item 71 Visible +InputSigType4086=Digital +InputCue4087=Item 72 Visible +InputSigType4087=Digital +InputCue4088=Item 73 Visible +InputSigType4088=Digital +InputCue4089=Item 74 Visible +InputSigType4089=Digital +InputCue4090=Item 75 Visible +InputSigType4090=Digital +InputCue4091=Item 76 Visible +InputSigType4091=Digital +InputCue4092=Item 77 Visible +InputSigType4092=Digital +InputCue4093=Item 78 Visible +InputSigType4093=Digital +InputCue4094=Item 79 Visible +InputSigType4094=Digital +InputCue4095=Item 80 Visible +InputSigType4095=Digital +InputCue4096=Item 81 Visible +InputSigType4096=Digital +InputCue4097=Item 82 Visible +InputSigType4097=Digital +InputCue4098=Item 83 Visible +InputSigType4098=Digital +InputCue4099=Item 84 Visible +InputSigType4099=Digital +InputCue4100=Item 85 Visible +InputSigType4100=Digital +InputCue4101=Item 86 Visible +InputSigType4101=Digital +InputCue4102=Item 87 Visible +InputSigType4102=Digital +InputCue4103=Item 88 Visible +InputSigType4103=Digital +InputCue4104=Item 89 Visible +InputSigType4104=Digital +InputCue4105=Item 90 Visible +InputSigType4105=Digital +InputCue4106=Item 91 Visible +InputSigType4106=Digital +InputCue4107=Item 92 Visible +InputSigType4107=Digital +InputCue4108=Item 93 Visible +InputSigType4108=Digital +InputCue4109=Item 94 Visible +InputSigType4109=Digital +InputCue4110=Item 95 Visible +InputSigType4110=Digital +InputCue4111=Item 96 Visible +InputSigType4111=Digital +InputCue4112=Item 97 Visible +InputSigType4112=Digital +InputCue4113=Item 98 Visible +InputSigType4113=Digital +InputCue4114=Item 99 Visible +InputSigType4114=Digital +InputCue4115=Item 100 Visible +InputSigType4115=Digital +InputCue4116=Item 101 Visible +InputSigType4116=Digital +InputCue4117=Item 102 Visible +InputSigType4117=Digital +InputCue4118=Item 103 Visible +InputSigType4118=Digital +InputCue4119=Item 104 Visible +InputSigType4119=Digital +InputCue4120=Item 105 Visible +InputSigType4120=Digital +InputCue4121=Item 106 Visible +InputSigType4121=Digital +InputCue4122=Item 107 Visible +InputSigType4122=Digital +InputCue4123=Item 108 Visible +InputSigType4123=Digital +InputCue4124=Item 109 Visible +InputSigType4124=Digital +InputCue4125=Item 110 Visible +InputSigType4125=Digital +InputCue4126=Item 111 Visible +InputSigType4126=Digital +InputCue4127=Item 112 Visible +InputSigType4127=Digital +InputCue4128=Item 113 Visible +InputSigType4128=Digital +InputCue4129=Item 114 Visible +InputSigType4129=Digital +InputCue4130=Item 115 Visible +InputSigType4130=Digital +InputCue4131=Item 116 Visible +InputSigType4131=Digital +InputCue4132=Item 117 Visible +InputSigType4132=Digital +InputCue4133=Item 118 Visible +InputSigType4133=Digital +InputCue4134=Item 119 Visible +InputSigType4134=Digital +InputCue4135=Item 120 Visible +InputSigType4135=Digital +InputCue4136=Item 121 Visible +InputSigType4136=Digital +InputCue4137=Item 122 Visible +InputSigType4137=Digital +InputCue4138=Item 123 Visible +InputSigType4138=Digital +InputCue4139=Item 124 Visible +InputSigType4139=Digital +InputCue4140=Item 125 Visible +InputSigType4140=Digital +InputCue4141=Item 126 Visible +InputSigType4141=Digital +InputCue4142=Item 127 Visible +InputSigType4142=Digital +InputCue4143=Item 128 Visible +InputSigType4143=Digital +InputCue4144=Item 129 Visible +InputSigType4144=Digital +InputCue4145=Item 130 Visible +InputSigType4145=Digital +InputCue4146=Item 131 Visible +InputSigType4146=Digital +InputCue4147=Item 132 Visible +InputSigType4147=Digital +InputCue4148=Item 133 Visible +InputSigType4148=Digital +InputCue4149=Item 134 Visible +InputSigType4149=Digital +InputCue4150=Item 135 Visible +InputSigType4150=Digital +InputCue4151=Item 136 Visible +InputSigType4151=Digital +InputCue4152=Item 137 Visible +InputSigType4152=Digital +InputCue4153=Item 138 Visible +InputSigType4153=Digital +InputCue4154=Item 139 Visible +InputSigType4154=Digital +InputCue4155=Item 140 Visible +InputSigType4155=Digital +InputCue4156=Item 141 Visible +InputSigType4156=Digital +InputCue4157=Item 142 Visible +InputSigType4157=Digital +InputCue4158=Item 143 Visible +InputSigType4158=Digital +InputCue4159=Item 144 Visible +InputSigType4159=Digital +InputCue4160=Item 145 Visible +InputSigType4160=Digital +InputCue4161=Item 146 Visible +InputSigType4161=Digital +InputCue4162=Item 147 Visible +InputSigType4162=Digital +InputCue4163=Item 148 Visible +InputSigType4163=Digital +InputCue4164=Item 149 Visible +InputSigType4164=Digital +InputCue4165=Item 150 Visible +InputSigType4165=Digital +InputCue4166=Item 151 Visible +InputSigType4166=Digital +InputCue4167=Item 152 Visible +InputSigType4167=Digital +InputCue4168=Item 153 Visible +InputSigType4168=Digital +InputCue4169=Item 154 Visible +InputSigType4169=Digital +InputCue4170=Item 155 Visible +InputSigType4170=Digital +InputCue4171=Item 156 Visible +InputSigType4171=Digital +InputCue4172=Item 157 Visible +InputSigType4172=Digital +InputCue4173=Item 158 Visible +InputSigType4173=Digital +InputCue4174=Item 159 Visible +InputSigType4174=Digital +InputCue4175=Item 160 Visible +InputSigType4175=Digital +InputCue4176=Item 161 Visible +InputSigType4176=Digital +InputCue4177=Item 162 Visible +InputSigType4177=Digital +InputCue4178=Item 163 Visible +InputSigType4178=Digital +InputCue4179=Item 164 Visible +InputSigType4179=Digital +InputCue4180=Item 165 Visible +InputSigType4180=Digital +InputCue4181=Item 166 Visible +InputSigType4181=Digital +InputCue4182=Item 167 Visible +InputSigType4182=Digital +InputCue4183=Item 168 Visible +InputSigType4183=Digital +InputCue4184=Item 169 Visible +InputSigType4184=Digital +InputCue4185=Item 170 Visible +InputSigType4185=Digital +InputCue4186=Item 171 Visible +InputSigType4186=Digital +InputCue4187=Item 172 Visible +InputSigType4187=Digital +InputCue4188=Item 173 Visible +InputSigType4188=Digital +InputCue4189=Item 174 Visible +InputSigType4189=Digital +InputCue4190=Item 175 Visible +InputSigType4190=Digital +InputCue4191=Item 176 Visible +InputSigType4191=Digital +InputCue4192=Item 177 Visible +InputSigType4192=Digital +InputCue4193=Item 178 Visible +InputSigType4193=Digital +InputCue4194=Item 179 Visible +InputSigType4194=Digital +InputCue4195=Item 180 Visible +InputSigType4195=Digital +InputCue4196=Item 181 Visible +InputSigType4196=Digital +InputCue4197=Item 182 Visible +InputSigType4197=Digital +InputCue4198=Item 183 Visible +InputSigType4198=Digital +InputCue4199=Item 184 Visible +InputSigType4199=Digital +InputCue4200=Item 185 Visible +InputSigType4200=Digital +InputCue4201=Item 186 Visible +InputSigType4201=Digital +InputCue4202=Item 187 Visible +InputSigType4202=Digital +InputCue4203=Item 188 Visible +InputSigType4203=Digital +InputCue4204=Item 189 Visible +InputSigType4204=Digital +InputCue4205=Item 190 Visible +InputSigType4205=Digital +InputCue4206=Item 191 Visible +InputSigType4206=Digital +InputCue4207=Item 192 Visible +InputSigType4207=Digital +InputCue4208=Item 193 Visible +InputSigType4208=Digital +InputCue4209=Item 194 Visible +InputSigType4209=Digital +InputCue4210=Item 195 Visible +InputSigType4210=Digital +InputCue4211=Item 196 Visible +InputSigType4211=Digital +InputCue4212=Item 197 Visible +InputSigType4212=Digital +InputCue4213=Item 198 Visible +InputSigType4213=Digital +InputCue4214=Item 199 Visible +InputSigType4214=Digital +InputCue4215=Item 200 Visible +InputSigType4215=Digital +InputCue4216=Item 201 Visible +InputSigType4216=Digital +InputCue4217=Item 202 Visible +InputSigType4217=Digital +InputCue4218=Item 203 Visible +InputSigType4218=Digital +InputCue4219=Item 204 Visible +InputSigType4219=Digital +InputCue4220=Item 205 Visible +InputSigType4220=Digital +InputCue4221=Item 206 Visible +InputSigType4221=Digital +InputCue4222=Item 207 Visible +InputSigType4222=Digital +InputCue4223=Item 208 Visible +InputSigType4223=Digital +InputCue4224=Item 209 Visible +InputSigType4224=Digital +InputCue4225=Item 210 Visible +InputSigType4225=Digital +InputCue4226=Item 211 Visible +InputSigType4226=Digital +InputCue4227=Item 212 Visible +InputSigType4227=Digital +InputCue4228=Item 213 Visible +InputSigType4228=Digital +InputCue4229=Item 214 Visible +InputSigType4229=Digital +InputCue4230=Item 215 Visible +InputSigType4230=Digital +InputCue4231=Item 216 Visible +InputSigType4231=Digital +InputCue4232=Item 217 Visible +InputSigType4232=Digital +InputCue4233=Item 218 Visible +InputSigType4233=Digital +InputCue4234=Item 219 Visible +InputSigType4234=Digital +InputCue4235=Item 220 Visible +InputSigType4235=Digital +InputCue4236=Item 221 Visible +InputSigType4236=Digital +InputCue4237=Item 222 Visible +InputSigType4237=Digital +InputCue4238=Item 223 Visible +InputSigType4238=Digital +InputCue4239=Item 224 Visible +InputSigType4239=Digital +InputCue4240=Item 225 Visible +InputSigType4240=Digital +InputCue4241=Item 226 Visible +InputSigType4241=Digital +InputCue4242=Item 227 Visible +InputSigType4242=Digital +InputCue4243=Item 228 Visible +InputSigType4243=Digital +InputCue4244=Item 229 Visible +InputSigType4244=Digital +InputCue4245=Item 230 Visible +InputSigType4245=Digital +InputCue4246=Item 231 Visible +InputSigType4246=Digital +InputCue4247=Item 232 Visible +InputSigType4247=Digital +InputCue4248=Item 233 Visible +InputSigType4248=Digital +InputCue4249=Item 234 Visible +InputSigType4249=Digital +InputCue4250=Item 235 Visible +InputSigType4250=Digital +InputCue4251=Item 236 Visible +InputSigType4251=Digital +InputCue4252=Item 237 Visible +InputSigType4252=Digital +InputCue4253=Item 238 Visible +InputSigType4253=Digital +InputCue4254=Item 239 Visible +InputSigType4254=Digital +InputCue4255=Item 240 Visible +InputSigType4255=Digital +InputCue4256=Item 241 Visible +InputSigType4256=Digital +InputCue4257=Item 242 Visible +InputSigType4257=Digital +InputCue4258=Item 243 Visible +InputSigType4258=Digital +InputCue4259=Item 244 Visible +InputSigType4259=Digital +InputCue4260=Item 245 Visible +InputSigType4260=Digital +InputCue4261=Item 246 Visible +InputSigType4261=Digital +InputCue4262=Item 247 Visible +InputSigType4262=Digital +InputCue4263=Item 248 Visible +InputSigType4263=Digital +InputCue4264=Item 249 Visible +InputSigType4264=Digital +InputCue4265=Item 250 Visible +InputSigType4265=Digital +InputCue4266=Item 251 Visible +InputSigType4266=Digital +InputCue4267=Item 252 Visible +InputSigType4267=Digital +InputCue4268=Item 253 Visible +InputSigType4268=Digital +InputCue4269=Item 254 Visible +InputSigType4269=Digital +InputCue4270=Item 255 Visible +InputSigType4270=Digital +InputCue4271=[~UNUSED2~] +InputSigType4271=Digital|Analog|Serial|String +InputCue6016=[~EndGroup~]Visible +InputSigType6016=Digital +OutputCue1=[~UNUSED3~] +OutputSigType1=Digital +OutputCue2=Is Moving +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~]Press +OutputSigType11=Digital +OutputCue12=Item 1 Pressed +OutputSigType12=Digital +OutputCue13=Item 2 Pressed +OutputSigType13=Digital +OutputCue14=Item 3 Pressed +OutputSigType14=Digital +OutputCue15=Item 4 Pressed +OutputSigType15=Digital +OutputCue16=Item 5 Pressed +OutputSigType16=Digital +OutputCue17=Item 6 Pressed +OutputSigType17=Digital +OutputCue18=Item 7 Pressed +OutputSigType18=Digital +OutputCue19=Item 8 Pressed +OutputSigType19=Digital +OutputCue20=Item 9 Pressed +OutputSigType20=Digital +OutputCue21=Item 10 Pressed +OutputSigType21=Digital +OutputCue22=Item 11 Pressed +OutputSigType22=Digital +OutputCue23=Item 12 Pressed +OutputSigType23=Digital +OutputCue24=Item 13 Pressed +OutputSigType24=Digital +OutputCue25=Item 14 Pressed +OutputSigType25=Digital +OutputCue26=Item 15 Pressed +OutputSigType26=Digital +OutputCue27=Item 16 Pressed +OutputSigType27=Digital +OutputCue28=Item 17 Pressed +OutputSigType28=Digital +OutputCue29=Item 18 Pressed +OutputSigType29=Digital +OutputCue30=Item 19 Pressed +OutputSigType30=Digital +OutputCue31=Item 20 Pressed +OutputSigType31=Digital +OutputCue32=Item 21 Pressed +OutputSigType32=Digital +OutputCue33=Item 22 Pressed +OutputSigType33=Digital +OutputCue34=Item 23 Pressed +OutputSigType34=Digital +OutputCue35=Item 24 Pressed +OutputSigType35=Digital +OutputCue36=Item 25 Pressed +OutputSigType36=Digital +OutputCue37=Item 26 Pressed +OutputSigType37=Digital +OutputCue38=Item 27 Pressed +OutputSigType38=Digital +OutputCue39=Item 28 Pressed +OutputSigType39=Digital +OutputCue40=Item 29 Pressed +OutputSigType40=Digital +OutputCue41=Item 30 Pressed +OutputSigType41=Digital +OutputCue42=Item 31 Pressed +OutputSigType42=Digital +OutputCue43=Item 32 Pressed +OutputSigType43=Digital +OutputCue44=Item 33 Pressed +OutputSigType44=Digital +OutputCue45=Item 34 Pressed +OutputSigType45=Digital +OutputCue46=Item 35 Pressed +OutputSigType46=Digital +OutputCue47=Item 36 Pressed +OutputSigType47=Digital +OutputCue48=Item 37 Pressed +OutputSigType48=Digital +OutputCue49=Item 38 Pressed +OutputSigType49=Digital +OutputCue50=Item 39 Pressed +OutputSigType50=Digital +OutputCue51=Item 40 Pressed +OutputSigType51=Digital +OutputCue52=Item 41 Pressed +OutputSigType52=Digital +OutputCue53=Item 42 Pressed +OutputSigType53=Digital +OutputCue54=Item 43 Pressed +OutputSigType54=Digital +OutputCue55=Item 44 Pressed +OutputSigType55=Digital +OutputCue56=Item 45 Pressed +OutputSigType56=Digital +OutputCue57=Item 46 Pressed +OutputSigType57=Digital +OutputCue58=Item 47 Pressed +OutputSigType58=Digital +OutputCue59=Item 48 Pressed +OutputSigType59=Digital +OutputCue60=Item 49 Pressed +OutputSigType60=Digital +OutputCue61=Item 50 Pressed +OutputSigType61=Digital +OutputCue62=Item 51 Pressed +OutputSigType62=Digital +OutputCue63=Item 52 Pressed +OutputSigType63=Digital +OutputCue64=Item 53 Pressed +OutputSigType64=Digital +OutputCue65=Item 54 Pressed +OutputSigType65=Digital +OutputCue66=Item 55 Pressed +OutputSigType66=Digital +OutputCue67=Item 56 Pressed +OutputSigType67=Digital +OutputCue68=Item 57 Pressed +OutputSigType68=Digital +OutputCue69=Item 58 Pressed +OutputSigType69=Digital +OutputCue70=Item 59 Pressed +OutputSigType70=Digital +OutputCue71=Item 60 Pressed +OutputSigType71=Digital +OutputCue72=Item 61 Pressed +OutputSigType72=Digital +OutputCue73=Item 62 Pressed +OutputSigType73=Digital +OutputCue74=Item 63 Pressed +OutputSigType74=Digital +OutputCue75=Item 64 Pressed +OutputSigType75=Digital +OutputCue76=Item 65 Pressed +OutputSigType76=Digital +OutputCue77=Item 66 Pressed +OutputSigType77=Digital +OutputCue78=Item 67 Pressed +OutputSigType78=Digital +OutputCue79=Item 68 Pressed +OutputSigType79=Digital +OutputCue80=Item 69 Pressed +OutputSigType80=Digital +OutputCue81=Item 70 Pressed +OutputSigType81=Digital +OutputCue82=Item 71 Pressed +OutputSigType82=Digital +OutputCue83=Item 72 Pressed +OutputSigType83=Digital +OutputCue84=Item 73 Pressed +OutputSigType84=Digital +OutputCue85=Item 74 Pressed +OutputSigType85=Digital +OutputCue86=Item 75 Pressed +OutputSigType86=Digital +OutputCue87=Item 76 Pressed +OutputSigType87=Digital +OutputCue88=Item 77 Pressed +OutputSigType88=Digital +OutputCue89=Item 78 Pressed +OutputSigType89=Digital +OutputCue90=Item 79 Pressed +OutputSigType90=Digital +OutputCue91=Item 80 Pressed +OutputSigType91=Digital +OutputCue92=Item 81 Pressed +OutputSigType92=Digital +OutputCue93=Item 82 Pressed +OutputSigType93=Digital +OutputCue94=Item 83 Pressed +OutputSigType94=Digital +OutputCue95=Item 84 Pressed +OutputSigType95=Digital +OutputCue96=Item 85 Pressed +OutputSigType96=Digital +OutputCue97=Item 86 Pressed +OutputSigType97=Digital +OutputCue98=Item 87 Pressed +OutputSigType98=Digital +OutputCue99=Item 88 Pressed +OutputSigType99=Digital +OutputCue100=Item 89 Pressed +OutputSigType100=Digital +OutputCue101=Item 90 Pressed +OutputSigType101=Digital +OutputCue102=Item 91 Pressed +OutputSigType102=Digital +OutputCue103=Item 92 Pressed +OutputSigType103=Digital +OutputCue104=Item 93 Pressed +OutputSigType104=Digital +OutputCue105=Item 94 Pressed +OutputSigType105=Digital +OutputCue106=Item 95 Pressed +OutputSigType106=Digital +OutputCue107=Item 96 Pressed +OutputSigType107=Digital +OutputCue108=Item 97 Pressed +OutputSigType108=Digital +OutputCue109=Item 98 Pressed +OutputSigType109=Digital +OutputCue110=Item 99 Pressed +OutputSigType110=Digital +OutputCue111=Item 100 Pressed +OutputSigType111=Digital +OutputCue112=Item 101 Pressed +OutputSigType112=Digital +OutputCue113=Item 102 Pressed +OutputSigType113=Digital +OutputCue114=Item 103 Pressed +OutputSigType114=Digital +OutputCue115=Item 104 Pressed +OutputSigType115=Digital +OutputCue116=Item 105 Pressed +OutputSigType116=Digital +OutputCue117=Item 106 Pressed +OutputSigType117=Digital +OutputCue118=Item 107 Pressed +OutputSigType118=Digital +OutputCue119=Item 108 Pressed +OutputSigType119=Digital +OutputCue120=Item 109 Pressed +OutputSigType120=Digital +OutputCue121=Item 110 Pressed +OutputSigType121=Digital +OutputCue122=Item 111 Pressed +OutputSigType122=Digital +OutputCue123=Item 112 Pressed +OutputSigType123=Digital +OutputCue124=Item 113 Pressed +OutputSigType124=Digital +OutputCue125=Item 114 Pressed +OutputSigType125=Digital +OutputCue126=Item 115 Pressed +OutputSigType126=Digital +OutputCue127=Item 116 Pressed +OutputSigType127=Digital +OutputCue128=Item 117 Pressed +OutputSigType128=Digital +OutputCue129=Item 118 Pressed +OutputSigType129=Digital +OutputCue130=Item 119 Pressed +OutputSigType130=Digital +OutputCue131=Item 120 Pressed +OutputSigType131=Digital +OutputCue132=Item 121 Pressed +OutputSigType132=Digital +OutputCue133=Item 122 Pressed +OutputSigType133=Digital +OutputCue134=Item 123 Pressed +OutputSigType134=Digital +OutputCue135=Item 124 Pressed +OutputSigType135=Digital +OutputCue136=Item 125 Pressed +OutputSigType136=Digital +OutputCue137=Item 126 Pressed +OutputSigType137=Digital +OutputCue138=Item 127 Pressed +OutputSigType138=Digital +OutputCue139=Item 128 Pressed +OutputSigType139=Digital +OutputCue140=Item 129 Pressed +OutputSigType140=Digital +OutputCue141=Item 130 Pressed +OutputSigType141=Digital +OutputCue142=Item 131 Pressed +OutputSigType142=Digital +OutputCue143=Item 132 Pressed +OutputSigType143=Digital +OutputCue144=Item 133 Pressed +OutputSigType144=Digital +OutputCue145=Item 134 Pressed +OutputSigType145=Digital +OutputCue146=Item 135 Pressed +OutputSigType146=Digital +OutputCue147=Item 136 Pressed +OutputSigType147=Digital +OutputCue148=Item 137 Pressed +OutputSigType148=Digital +OutputCue149=Item 138 Pressed +OutputSigType149=Digital +OutputCue150=Item 139 Pressed +OutputSigType150=Digital +OutputCue151=Item 140 Pressed +OutputSigType151=Digital +OutputCue152=Item 141 Pressed +OutputSigType152=Digital +OutputCue153=Item 142 Pressed +OutputSigType153=Digital +OutputCue154=Item 143 Pressed +OutputSigType154=Digital +OutputCue155=Item 144 Pressed +OutputSigType155=Digital +OutputCue156=Item 145 Pressed +OutputSigType156=Digital +OutputCue157=Item 146 Pressed +OutputSigType157=Digital +OutputCue158=Item 147 Pressed +OutputSigType158=Digital +OutputCue159=Item 148 Pressed +OutputSigType159=Digital +OutputCue160=Item 149 Pressed +OutputSigType160=Digital +OutputCue161=Item 150 Pressed +OutputSigType161=Digital +OutputCue162=Item 151 Pressed +OutputSigType162=Digital +OutputCue163=Item 152 Pressed +OutputSigType163=Digital +OutputCue164=Item 153 Pressed +OutputSigType164=Digital +OutputCue165=Item 154 Pressed +OutputSigType165=Digital +OutputCue166=Item 155 Pressed +OutputSigType166=Digital +OutputCue167=Item 156 Pressed +OutputSigType167=Digital +OutputCue168=Item 157 Pressed +OutputSigType168=Digital +OutputCue169=Item 158 Pressed +OutputSigType169=Digital +OutputCue170=Item 159 Pressed +OutputSigType170=Digital +OutputCue171=Item 160 Pressed +OutputSigType171=Digital +OutputCue172=Item 161 Pressed +OutputSigType172=Digital +OutputCue173=Item 162 Pressed +OutputSigType173=Digital +OutputCue174=Item 163 Pressed +OutputSigType174=Digital +OutputCue175=Item 164 Pressed +OutputSigType175=Digital +OutputCue176=Item 165 Pressed +OutputSigType176=Digital +OutputCue177=Item 166 Pressed +OutputSigType177=Digital +OutputCue178=Item 167 Pressed +OutputSigType178=Digital +OutputCue179=Item 168 Pressed +OutputSigType179=Digital +OutputCue180=Item 169 Pressed +OutputSigType180=Digital +OutputCue181=Item 170 Pressed +OutputSigType181=Digital +OutputCue182=Item 171 Pressed +OutputSigType182=Digital +OutputCue183=Item 172 Pressed +OutputSigType183=Digital +OutputCue184=Item 173 Pressed +OutputSigType184=Digital +OutputCue185=Item 174 Pressed +OutputSigType185=Digital +OutputCue186=Item 175 Pressed +OutputSigType186=Digital +OutputCue187=Item 176 Pressed +OutputSigType187=Digital +OutputCue188=Item 177 Pressed +OutputSigType188=Digital +OutputCue189=Item 178 Pressed +OutputSigType189=Digital +OutputCue190=Item 179 Pressed +OutputSigType190=Digital +OutputCue191=Item 180 Pressed +OutputSigType191=Digital +OutputCue192=Item 181 Pressed +OutputSigType192=Digital +OutputCue193=Item 182 Pressed +OutputSigType193=Digital +OutputCue194=Item 183 Pressed +OutputSigType194=Digital +OutputCue195=Item 184 Pressed +OutputSigType195=Digital +OutputCue196=Item 185 Pressed +OutputSigType196=Digital +OutputCue197=Item 186 Pressed +OutputSigType197=Digital +OutputCue198=Item 187 Pressed +OutputSigType198=Digital +OutputCue199=Item 188 Pressed +OutputSigType199=Digital +OutputCue200=Item 189 Pressed +OutputSigType200=Digital +OutputCue201=Item 190 Pressed +OutputSigType201=Digital +OutputCue202=Item 191 Pressed +OutputSigType202=Digital +OutputCue203=Item 192 Pressed +OutputSigType203=Digital +OutputCue204=Item 193 Pressed +OutputSigType204=Digital +OutputCue205=Item 194 Pressed +OutputSigType205=Digital +OutputCue206=Item 195 Pressed +OutputSigType206=Digital +OutputCue207=Item 196 Pressed +OutputSigType207=Digital +OutputCue208=Item 197 Pressed +OutputSigType208=Digital +OutputCue209=Item 198 Pressed +OutputSigType209=Digital +OutputCue210=Item 199 Pressed +OutputSigType210=Digital +OutputCue211=Item 200 Pressed +OutputSigType211=Digital +OutputCue212=Item 201 Pressed +OutputSigType212=Digital +OutputCue213=Item 202 Pressed +OutputSigType213=Digital +OutputCue214=Item 203 Pressed +OutputSigType214=Digital +OutputCue215=Item 204 Pressed +OutputSigType215=Digital +OutputCue216=Item 205 Pressed +OutputSigType216=Digital +OutputCue217=Item 206 Pressed +OutputSigType217=Digital +OutputCue218=Item 207 Pressed +OutputSigType218=Digital +OutputCue219=Item 208 Pressed +OutputSigType219=Digital +OutputCue220=Item 209 Pressed +OutputSigType220=Digital +OutputCue221=Item 210 Pressed +OutputSigType221=Digital +OutputCue222=Item 211 Pressed +OutputSigType222=Digital +OutputCue223=Item 212 Pressed +OutputSigType223=Digital +OutputCue224=Item 213 Pressed +OutputSigType224=Digital +OutputCue225=Item 214 Pressed +OutputSigType225=Digital +OutputCue226=Item 215 Pressed +OutputSigType226=Digital +OutputCue227=Item 216 Pressed +OutputSigType227=Digital +OutputCue228=Item 217 Pressed +OutputSigType228=Digital +OutputCue229=Item 218 Pressed +OutputSigType229=Digital +OutputCue230=Item 219 Pressed +OutputSigType230=Digital +OutputCue231=Item 220 Pressed +OutputSigType231=Digital +OutputCue232=Item 221 Pressed +OutputSigType232=Digital +OutputCue233=Item 222 Pressed +OutputSigType233=Digital +OutputCue234=Item 223 Pressed +OutputSigType234=Digital +OutputCue235=Item 224 Pressed +OutputSigType235=Digital +OutputCue236=Item 225 Pressed +OutputSigType236=Digital +OutputCue237=Item 226 Pressed +OutputSigType237=Digital +OutputCue238=Item 227 Pressed +OutputSigType238=Digital +OutputCue239=Item 228 Pressed +OutputSigType239=Digital +OutputCue240=Item 229 Pressed +OutputSigType240=Digital +OutputCue241=Item 230 Pressed +OutputSigType241=Digital +OutputCue242=Item 231 Pressed +OutputSigType242=Digital +OutputCue243=Item 232 Pressed +OutputSigType243=Digital +OutputCue244=Item 233 Pressed +OutputSigType244=Digital +OutputCue245=Item 234 Pressed +OutputSigType245=Digital +OutputCue246=Item 235 Pressed +OutputSigType246=Digital +OutputCue247=Item 236 Pressed +OutputSigType247=Digital +OutputCue248=Item 237 Pressed +OutputSigType248=Digital +OutputCue249=Item 238 Pressed +OutputSigType249=Digital +OutputCue250=Item 239 Pressed +OutputSigType250=Digital +OutputCue251=Item 240 Pressed +OutputSigType251=Digital +OutputCue252=Item 241 Pressed +OutputSigType252=Digital +OutputCue253=Item 242 Pressed +OutputSigType253=Digital +OutputCue254=Item 243 Pressed +OutputSigType254=Digital +OutputCue255=Item 244 Pressed +OutputSigType255=Digital +OutputCue256=Item 245 Pressed +OutputSigType256=Digital +OutputCue257=Item 246 Pressed +OutputSigType257=Digital +OutputCue258=Item 247 Pressed +OutputSigType258=Digital +OutputCue259=Item 248 Pressed +OutputSigType259=Digital +OutputCue260=Item 249 Pressed +OutputSigType260=Digital +OutputCue261=Item 250 Pressed +OutputSigType261=Digital +OutputCue262=Item 251 Pressed +OutputSigType262=Digital +OutputCue263=Item 252 Pressed +OutputSigType263=Digital +OutputCue264=Item 253 Pressed +OutputSigType264=Digital +OutputCue265=Item 254 Pressed +OutputSigType265=Digital +OutputCue266=Item 255 Pressed +OutputSigType266=Digital +OutputCue267=[~UNUSED2~] +OutputSigType267=Digital|Analog|Serial|String +OutputCue2012=[~EndGroup~]Press +OutputSigType2012=Digital +OutputCue2013=[~BeginGroup~]Enable +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=[~UNUSED3~] +OutputSigType2114=Digital +OutputCue2115=[~UNUSED3~] +OutputSigType2115=Digital +OutputCue2116=[~UNUSED3~] +OutputSigType2116=Digital +OutputCue2117=[~UNUSED3~] +OutputSigType2117=Digital +OutputCue2118=[~UNUSED3~] +OutputSigType2118=Digital +OutputCue2119=[~UNUSED3~] +OutputSigType2119=Digital +OutputCue2120=[~UNUSED3~] +OutputSigType2120=Digital +OutputCue2121=[~UNUSED3~] +OutputSigType2121=Digital +OutputCue2122=[~UNUSED3~] +OutputSigType2122=Digital +OutputCue2123=[~UNUSED3~] +OutputSigType2123=Digital +OutputCue2124=[~UNUSED3~] +OutputSigType2124=Digital +OutputCue2125=[~UNUSED3~] +OutputSigType2125=Digital +OutputCue2126=[~UNUSED3~] +OutputSigType2126=Digital +OutputCue2127=[~UNUSED3~] +OutputSigType2127=Digital +OutputCue2128=[~UNUSED3~] +OutputSigType2128=Digital +OutputCue2129=[~UNUSED3~] +OutputSigType2129=Digital +OutputCue2130=[~UNUSED3~] +OutputSigType2130=Digital +OutputCue2131=[~UNUSED3~] +OutputSigType2131=Digital +OutputCue2132=[~UNUSED3~] +OutputSigType2132=Digital +OutputCue2133=[~UNUSED3~] +OutputSigType2133=Digital +OutputCue2134=[~UNUSED3~] +OutputSigType2134=Digital +OutputCue2135=[~UNUSED3~] +OutputSigType2135=Digital +OutputCue2136=[~UNUSED3~] +OutputSigType2136=Digital +OutputCue2137=[~UNUSED3~] +OutputSigType2137=Digital +OutputCue2138=[~UNUSED3~] +OutputSigType2138=Digital +OutputCue2139=[~UNUSED3~] +OutputSigType2139=Digital +OutputCue2140=[~UNUSED3~] +OutputSigType2140=Digital +OutputCue2141=[~UNUSED3~] +OutputSigType2141=Digital +OutputCue2142=[~UNUSED3~] +OutputSigType2142=Digital +OutputCue2143=[~UNUSED3~] +OutputSigType2143=Digital +OutputCue2144=[~UNUSED3~] +OutputSigType2144=Digital +OutputCue2145=[~UNUSED3~] +OutputSigType2145=Digital +OutputCue2146=[~UNUSED3~] +OutputSigType2146=Digital +OutputCue2147=[~UNUSED3~] +OutputSigType2147=Digital +OutputCue2148=[~UNUSED3~] +OutputSigType2148=Digital +OutputCue2149=[~UNUSED3~] +OutputSigType2149=Digital +OutputCue2150=[~UNUSED3~] +OutputSigType2150=Digital +OutputCue2151=[~UNUSED3~] +OutputSigType2151=Digital +OutputCue2152=[~UNUSED3~] +OutputSigType2152=Digital +OutputCue2153=[~UNUSED3~] +OutputSigType2153=Digital +OutputCue2154=[~UNUSED3~] +OutputSigType2154=Digital +OutputCue2155=[~UNUSED3~] +OutputSigType2155=Digital +OutputCue2156=[~UNUSED3~] +OutputSigType2156=Digital +OutputCue2157=[~UNUSED3~] +OutputSigType2157=Digital +OutputCue2158=[~UNUSED3~] +OutputSigType2158=Digital +OutputCue2159=[~UNUSED3~] +OutputSigType2159=Digital +OutputCue2160=[~UNUSED3~] +OutputSigType2160=Digital +OutputCue2161=[~UNUSED3~] +OutputSigType2161=Digital +OutputCue2162=[~UNUSED3~] +OutputSigType2162=Digital +OutputCue2163=[~UNUSED3~] +OutputSigType2163=Digital +OutputCue2164=[~UNUSED3~] +OutputSigType2164=Digital +OutputCue2165=[~UNUSED3~] +OutputSigType2165=Digital +OutputCue2166=[~UNUSED3~] +OutputSigType2166=Digital +OutputCue2167=[~UNUSED3~] +OutputSigType2167=Digital +OutputCue2168=[~UNUSED3~] +OutputSigType2168=Digital +OutputCue2169=[~UNUSED3~] +OutputSigType2169=Digital +OutputCue2170=[~UNUSED3~] +OutputSigType2170=Digital +OutputCue2171=[~UNUSED3~] +OutputSigType2171=Digital +OutputCue2172=[~UNUSED3~] +OutputSigType2172=Digital +OutputCue2173=[~UNUSED3~] +OutputSigType2173=Digital +OutputCue2174=[~UNUSED3~] +OutputSigType2174=Digital +OutputCue2175=[~UNUSED3~] +OutputSigType2175=Digital +OutputCue2176=[~UNUSED3~] +OutputSigType2176=Digital +OutputCue2177=[~UNUSED3~] +OutputSigType2177=Digital +OutputCue2178=[~UNUSED3~] +OutputSigType2178=Digital +OutputCue2179=[~UNUSED3~] +OutputSigType2179=Digital +OutputCue2180=[~UNUSED3~] +OutputSigType2180=Digital +OutputCue2181=[~UNUSED3~] +OutputSigType2181=Digital +OutputCue2182=[~UNUSED3~] +OutputSigType2182=Digital +OutputCue2183=[~UNUSED3~] +OutputSigType2183=Digital +OutputCue2184=[~UNUSED3~] +OutputSigType2184=Digital +OutputCue2185=[~UNUSED3~] +OutputSigType2185=Digital +OutputCue2186=[~UNUSED3~] +OutputSigType2186=Digital +OutputCue2187=[~UNUSED3~] +OutputSigType2187=Digital +OutputCue2188=[~UNUSED3~] +OutputSigType2188=Digital +OutputCue2189=[~UNUSED3~] +OutputSigType2189=Digital +OutputCue2190=[~UNUSED3~] +OutputSigType2190=Digital +OutputCue2191=[~UNUSED3~] +OutputSigType2191=Digital +OutputCue2192=[~UNUSED3~] +OutputSigType2192=Digital +OutputCue2193=[~UNUSED3~] +OutputSigType2193=Digital +OutputCue2194=[~UNUSED3~] +OutputSigType2194=Digital +OutputCue2195=[~UNUSED3~] +OutputSigType2195=Digital +OutputCue2196=[~UNUSED3~] +OutputSigType2196=Digital +OutputCue2197=[~UNUSED3~] +OutputSigType2197=Digital +OutputCue2198=[~UNUSED3~] +OutputSigType2198=Digital +OutputCue2199=[~UNUSED3~] +OutputSigType2199=Digital +OutputCue2200=[~UNUSED3~] +OutputSigType2200=Digital +OutputCue2201=[~UNUSED3~] +OutputSigType2201=Digital +OutputCue2202=[~UNUSED3~] +OutputSigType2202=Digital +OutputCue2203=[~UNUSED3~] +OutputSigType2203=Digital +OutputCue2204=[~UNUSED3~] +OutputSigType2204=Digital +OutputCue2205=[~UNUSED3~] +OutputSigType2205=Digital +OutputCue2206=[~UNUSED3~] +OutputSigType2206=Digital +OutputCue2207=[~UNUSED3~] +OutputSigType2207=Digital +OutputCue2208=[~UNUSED3~] +OutputSigType2208=Digital +OutputCue2209=[~UNUSED3~] +OutputSigType2209=Digital +OutputCue2210=[~UNUSED3~] +OutputSigType2210=Digital +OutputCue2211=[~UNUSED3~] +OutputSigType2211=Digital +OutputCue2212=[~UNUSED3~] +OutputSigType2212=Digital +OutputCue2213=[~UNUSED3~] +OutputSigType2213=Digital +OutputCue2214=[~UNUSED3~] +OutputSigType2214=Digital +OutputCue2215=[~UNUSED3~] +OutputSigType2215=Digital +OutputCue2216=[~UNUSED3~] +OutputSigType2216=Digital +OutputCue2217=[~UNUSED3~] +OutputSigType2217=Digital +OutputCue2218=[~UNUSED3~] +OutputSigType2218=Digital +OutputCue2219=[~UNUSED3~] +OutputSigType2219=Digital +OutputCue2220=[~UNUSED3~] +OutputSigType2220=Digital +OutputCue2221=[~UNUSED3~] +OutputSigType2221=Digital +OutputCue2222=[~UNUSED3~] +OutputSigType2222=Digital +OutputCue2223=[~UNUSED3~] +OutputSigType2223=Digital +OutputCue2224=[~UNUSED3~] +OutputSigType2224=Digital +OutputCue2225=[~UNUSED3~] +OutputSigType2225=Digital +OutputCue2226=[~UNUSED3~] +OutputSigType2226=Digital +OutputCue2227=[~UNUSED3~] +OutputSigType2227=Digital +OutputCue2228=[~UNUSED3~] +OutputSigType2228=Digital +OutputCue2229=[~UNUSED3~] +OutputSigType2229=Digital +OutputCue2230=[~UNUSED3~] +OutputSigType2230=Digital +OutputCue2231=[~UNUSED3~] +OutputSigType2231=Digital +OutputCue2232=[~UNUSED3~] +OutputSigType2232=Digital +OutputCue2233=[~UNUSED3~] +OutputSigType2233=Digital +OutputCue2234=[~UNUSED3~] +OutputSigType2234=Digital +OutputCue2235=[~UNUSED3~] +OutputSigType2235=Digital +OutputCue2236=[~UNUSED3~] +OutputSigType2236=Digital +OutputCue2237=[~UNUSED3~] +OutputSigType2237=Digital +OutputCue2238=[~UNUSED3~] +OutputSigType2238=Digital +OutputCue2239=[~UNUSED3~] +OutputSigType2239=Digital +OutputCue2240=[~UNUSED3~] +OutputSigType2240=Digital +OutputCue2241=[~UNUSED3~] +OutputSigType2241=Digital +OutputCue2242=[~UNUSED3~] +OutputSigType2242=Digital +OutputCue2243=[~UNUSED3~] +OutputSigType2243=Digital +OutputCue2244=[~UNUSED3~] +OutputSigType2244=Digital +OutputCue2245=[~UNUSED3~] +OutputSigType2245=Digital +OutputCue2246=[~UNUSED3~] +OutputSigType2246=Digital +OutputCue2247=[~UNUSED3~] +OutputSigType2247=Digital +OutputCue2248=[~UNUSED3~] +OutputSigType2248=Digital +OutputCue2249=[~UNUSED3~] +OutputSigType2249=Digital +OutputCue2250=[~UNUSED3~] +OutputSigType2250=Digital +OutputCue2251=[~UNUSED3~] +OutputSigType2251=Digital +OutputCue2252=[~UNUSED3~] +OutputSigType2252=Digital +OutputCue2253=[~UNUSED3~] +OutputSigType2253=Digital +OutputCue2254=[~UNUSED3~] +OutputSigType2254=Digital +OutputCue2255=[~UNUSED3~] +OutputSigType2255=Digital +OutputCue2256=[~UNUSED3~] +OutputSigType2256=Digital +OutputCue2257=[~UNUSED3~] +OutputSigType2257=Digital +OutputCue2258=[~UNUSED3~] +OutputSigType2258=Digital +OutputCue2259=[~UNUSED3~] +OutputSigType2259=Digital +OutputCue2260=[~UNUSED3~] +OutputSigType2260=Digital +OutputCue2261=[~UNUSED3~] +OutputSigType2261=Digital +OutputCue2262=[~UNUSED3~] +OutputSigType2262=Digital +OutputCue2263=[~UNUSED3~] +OutputSigType2263=Digital +OutputCue2264=[~UNUSED3~] +OutputSigType2264=Digital +OutputCue2265=[~UNUSED3~] +OutputSigType2265=Digital +OutputCue2266=[~UNUSED3~] +OutputSigType2266=Digital +OutputCue2267=[~UNUSED3~] +OutputSigType2267=Digital +OutputCue2268=[~UNUSED3~] +OutputSigType2268=Digital +OutputCue2269=[~UNUSED2~] +OutputSigType2269=Digital|Analog|Serial|String +OutputCue4014=[~EndGroup~]Enable +OutputSigType4014=Digital +OutputCue4015=[~BeginGroup~]Visible +OutputSigType4015=Digital +OutputCue4016=[~UNUSED3~] +OutputSigType4016=Digital +OutputCue4017=[~UNUSED3~] +OutputSigType4017=Digital +OutputCue4018=[~UNUSED3~] +OutputSigType4018=Digital +OutputCue4019=[~UNUSED3~] +OutputSigType4019=Digital +OutputCue4020=[~UNUSED3~] +OutputSigType4020=Digital +OutputCue4021=[~UNUSED3~] +OutputSigType4021=Digital +OutputCue4022=[~UNUSED3~] +OutputSigType4022=Digital +OutputCue4023=[~UNUSED3~] +OutputSigType4023=Digital +OutputCue4024=[~UNUSED3~] +OutputSigType4024=Digital +OutputCue4025=[~UNUSED3~] +OutputSigType4025=Digital +OutputCue4026=[~UNUSED3~] +OutputSigType4026=Digital +OutputCue4027=[~UNUSED3~] +OutputSigType4027=Digital +OutputCue4028=[~UNUSED3~] +OutputSigType4028=Digital +OutputCue4029=[~UNUSED3~] +OutputSigType4029=Digital +OutputCue4030=[~UNUSED3~] +OutputSigType4030=Digital +OutputCue4031=[~UNUSED3~] +OutputSigType4031=Digital +OutputCue4032=[~UNUSED3~] +OutputSigType4032=Digital +OutputCue4033=[~UNUSED3~] +OutputSigType4033=Digital +OutputCue4034=[~UNUSED3~] +OutputSigType4034=Digital +OutputCue4035=[~UNUSED3~] +OutputSigType4035=Digital +OutputCue4036=[~UNUSED3~] +OutputSigType4036=Digital +OutputCue4037=[~UNUSED3~] +OutputSigType4037=Digital +OutputCue4038=[~UNUSED3~] +OutputSigType4038=Digital +OutputCue4039=[~UNUSED3~] +OutputSigType4039=Digital +OutputCue4040=[~UNUSED3~] +OutputSigType4040=Digital +OutputCue4041=[~UNUSED3~] +OutputSigType4041=Digital +OutputCue4042=[~UNUSED3~] +OutputSigType4042=Digital +OutputCue4043=[~UNUSED3~] +OutputSigType4043=Digital +OutputCue4044=[~UNUSED3~] +OutputSigType4044=Digital +OutputCue4045=[~UNUSED3~] +OutputSigType4045=Digital +OutputCue4046=[~UNUSED3~] +OutputSigType4046=Digital +OutputCue4047=[~UNUSED3~] +OutputSigType4047=Digital +OutputCue4048=[~UNUSED3~] +OutputSigType4048=Digital +OutputCue4049=[~UNUSED3~] +OutputSigType4049=Digital +OutputCue4050=[~UNUSED3~] +OutputSigType4050=Digital +OutputCue4051=[~UNUSED3~] +OutputSigType4051=Digital +OutputCue4052=[~UNUSED3~] +OutputSigType4052=Digital +OutputCue4053=[~UNUSED3~] +OutputSigType4053=Digital +OutputCue4054=[~UNUSED3~] +OutputSigType4054=Digital +OutputCue4055=[~UNUSED3~] +OutputSigType4055=Digital +OutputCue4056=[~UNUSED3~] +OutputSigType4056=Digital +OutputCue4057=[~UNUSED3~] +OutputSigType4057=Digital +OutputCue4058=[~UNUSED3~] +OutputSigType4058=Digital +OutputCue4059=[~UNUSED3~] +OutputSigType4059=Digital +OutputCue4060=[~UNUSED3~] +OutputSigType4060=Digital +OutputCue4061=[~UNUSED3~] +OutputSigType4061=Digital +OutputCue4062=[~UNUSED3~] +OutputSigType4062=Digital +OutputCue4063=[~UNUSED3~] +OutputSigType4063=Digital +OutputCue4064=[~UNUSED3~] +OutputSigType4064=Digital +OutputCue4065=[~UNUSED3~] +OutputSigType4065=Digital +OutputCue4066=[~UNUSED3~] +OutputSigType4066=Digital +OutputCue4067=[~UNUSED3~] +OutputSigType4067=Digital +OutputCue4068=[~UNUSED3~] +OutputSigType4068=Digital +OutputCue4069=[~UNUSED3~] +OutputSigType4069=Digital +OutputCue4070=[~UNUSED3~] +OutputSigType4070=Digital +OutputCue4071=[~UNUSED3~] +OutputSigType4071=Digital +OutputCue4072=[~UNUSED3~] +OutputSigType4072=Digital +OutputCue4073=[~UNUSED3~] +OutputSigType4073=Digital +OutputCue4074=[~UNUSED3~] +OutputSigType4074=Digital +OutputCue4075=[~UNUSED3~] +OutputSigType4075=Digital +OutputCue4076=[~UNUSED3~] +OutputSigType4076=Digital +OutputCue4077=[~UNUSED3~] +OutputSigType4077=Digital +OutputCue4078=[~UNUSED3~] +OutputSigType4078=Digital +OutputCue4079=[~UNUSED3~] +OutputSigType4079=Digital +OutputCue4080=[~UNUSED3~] +OutputSigType4080=Digital +OutputCue4081=[~UNUSED3~] +OutputSigType4081=Digital +OutputCue4082=[~UNUSED3~] +OutputSigType4082=Digital +OutputCue4083=[~UNUSED3~] +OutputSigType4083=Digital +OutputCue4084=[~UNUSED3~] +OutputSigType4084=Digital +OutputCue4085=[~UNUSED3~] +OutputSigType4085=Digital +OutputCue4086=[~UNUSED3~] +OutputSigType4086=Digital +OutputCue4087=[~UNUSED3~] +OutputSigType4087=Digital +OutputCue4088=[~UNUSED3~] +OutputSigType4088=Digital +OutputCue4089=[~UNUSED3~] +OutputSigType4089=Digital +OutputCue4090=[~UNUSED3~] +OutputSigType4090=Digital +OutputCue4091=[~UNUSED3~] +OutputSigType4091=Digital +OutputCue4092=[~UNUSED3~] +OutputSigType4092=Digital +OutputCue4093=[~UNUSED3~] +OutputSigType4093=Digital +OutputCue4094=[~UNUSED3~] +OutputSigType4094=Digital +OutputCue4095=[~UNUSED3~] +OutputSigType4095=Digital +OutputCue4096=[~UNUSED3~] +OutputSigType4096=Digital +OutputCue4097=[~UNUSED3~] +OutputSigType4097=Digital +OutputCue4098=[~UNUSED3~] +OutputSigType4098=Digital +OutputCue4099=[~UNUSED3~] +OutputSigType4099=Digital +OutputCue4100=[~UNUSED3~] +OutputSigType4100=Digital +OutputCue4101=[~UNUSED3~] +OutputSigType4101=Digital +OutputCue4102=[~UNUSED3~] +OutputSigType4102=Digital +OutputCue4103=[~UNUSED3~] +OutputSigType4103=Digital +OutputCue4104=[~UNUSED3~] +OutputSigType4104=Digital +OutputCue4105=[~UNUSED3~] +OutputSigType4105=Digital +OutputCue4106=[~UNUSED3~] +OutputSigType4106=Digital +OutputCue4107=[~UNUSED3~] +OutputSigType4107=Digital +OutputCue4108=[~UNUSED3~] +OutputSigType4108=Digital +OutputCue4109=[~UNUSED3~] +OutputSigType4109=Digital +OutputCue4110=[~UNUSED3~] +OutputSigType4110=Digital +OutputCue4111=[~UNUSED3~] +OutputSigType4111=Digital +OutputCue4112=[~UNUSED3~] +OutputSigType4112=Digital +OutputCue4113=[~UNUSED3~] +OutputSigType4113=Digital +OutputCue4114=[~UNUSED3~] +OutputSigType4114=Digital +OutputCue4115=[~UNUSED3~] +OutputSigType4115=Digital +OutputCue4116=[~UNUSED3~] +OutputSigType4116=Digital +OutputCue4117=[~UNUSED3~] +OutputSigType4117=Digital +OutputCue4118=[~UNUSED3~] +OutputSigType4118=Digital +OutputCue4119=[~UNUSED3~] +OutputSigType4119=Digital +OutputCue4120=[~UNUSED3~] +OutputSigType4120=Digital +OutputCue4121=[~UNUSED3~] +OutputSigType4121=Digital +OutputCue4122=[~UNUSED3~] +OutputSigType4122=Digital +OutputCue4123=[~UNUSED3~] +OutputSigType4123=Digital +OutputCue4124=[~UNUSED3~] +OutputSigType4124=Digital +OutputCue4125=[~UNUSED3~] +OutputSigType4125=Digital +OutputCue4126=[~UNUSED3~] +OutputSigType4126=Digital +OutputCue4127=[~UNUSED3~] +OutputSigType4127=Digital +OutputCue4128=[~UNUSED3~] +OutputSigType4128=Digital +OutputCue4129=[~UNUSED3~] +OutputSigType4129=Digital +OutputCue4130=[~UNUSED3~] +OutputSigType4130=Digital +OutputCue4131=[~UNUSED3~] +OutputSigType4131=Digital +OutputCue4132=[~UNUSED3~] +OutputSigType4132=Digital +OutputCue4133=[~UNUSED3~] +OutputSigType4133=Digital +OutputCue4134=[~UNUSED3~] +OutputSigType4134=Digital +OutputCue4135=[~UNUSED3~] +OutputSigType4135=Digital +OutputCue4136=[~UNUSED3~] +OutputSigType4136=Digital +OutputCue4137=[~UNUSED3~] +OutputSigType4137=Digital +OutputCue4138=[~UNUSED3~] +OutputSigType4138=Digital +OutputCue4139=[~UNUSED3~] +OutputSigType4139=Digital +OutputCue4140=[~UNUSED3~] +OutputSigType4140=Digital +OutputCue4141=[~UNUSED3~] +OutputSigType4141=Digital +OutputCue4142=[~UNUSED3~] +OutputSigType4142=Digital +OutputCue4143=[~UNUSED3~] +OutputSigType4143=Digital +OutputCue4144=[~UNUSED3~] +OutputSigType4144=Digital +OutputCue4145=[~UNUSED3~] +OutputSigType4145=Digital +OutputCue4146=[~UNUSED3~] +OutputSigType4146=Digital +OutputCue4147=[~UNUSED3~] +OutputSigType4147=Digital +OutputCue4148=[~UNUSED3~] +OutputSigType4148=Digital +OutputCue4149=[~UNUSED3~] +OutputSigType4149=Digital +OutputCue4150=[~UNUSED3~] +OutputSigType4150=Digital +OutputCue4151=[~UNUSED3~] +OutputSigType4151=Digital +OutputCue4152=[~UNUSED3~] +OutputSigType4152=Digital +OutputCue4153=[~UNUSED3~] +OutputSigType4153=Digital +OutputCue4154=[~UNUSED3~] +OutputSigType4154=Digital +OutputCue4155=[~UNUSED3~] +OutputSigType4155=Digital +OutputCue4156=[~UNUSED3~] +OutputSigType4156=Digital +OutputCue4157=[~UNUSED3~] +OutputSigType4157=Digital +OutputCue4158=[~UNUSED3~] +OutputSigType4158=Digital +OutputCue4159=[~UNUSED3~] +OutputSigType4159=Digital +OutputCue4160=[~UNUSED3~] +OutputSigType4160=Digital +OutputCue4161=[~UNUSED3~] +OutputSigType4161=Digital +OutputCue4162=[~UNUSED3~] +OutputSigType4162=Digital +OutputCue4163=[~UNUSED3~] +OutputSigType4163=Digital +OutputCue4164=[~UNUSED3~] +OutputSigType4164=Digital +OutputCue4165=[~UNUSED3~] +OutputSigType4165=Digital +OutputCue4166=[~UNUSED3~] +OutputSigType4166=Digital +OutputCue4167=[~UNUSED3~] +OutputSigType4167=Digital +OutputCue4168=[~UNUSED3~] +OutputSigType4168=Digital +OutputCue4169=[~UNUSED3~] +OutputSigType4169=Digital +OutputCue4170=[~UNUSED3~] +OutputSigType4170=Digital +OutputCue4171=[~UNUSED3~] +OutputSigType4171=Digital +OutputCue4172=[~UNUSED3~] +OutputSigType4172=Digital +OutputCue4173=[~UNUSED3~] +OutputSigType4173=Digital +OutputCue4174=[~UNUSED3~] +OutputSigType4174=Digital +OutputCue4175=[~UNUSED3~] +OutputSigType4175=Digital +OutputCue4176=[~UNUSED3~] +OutputSigType4176=Digital +OutputCue4177=[~UNUSED3~] +OutputSigType4177=Digital +OutputCue4178=[~UNUSED3~] +OutputSigType4178=Digital +OutputCue4179=[~UNUSED3~] +OutputSigType4179=Digital +OutputCue4180=[~UNUSED3~] +OutputSigType4180=Digital +OutputCue4181=[~UNUSED3~] +OutputSigType4181=Digital +OutputCue4182=[~UNUSED3~] +OutputSigType4182=Digital +OutputCue4183=[~UNUSED3~] +OutputSigType4183=Digital +OutputCue4184=[~UNUSED3~] +OutputSigType4184=Digital +OutputCue4185=[~UNUSED3~] +OutputSigType4185=Digital +OutputCue4186=[~UNUSED3~] +OutputSigType4186=Digital +OutputCue4187=[~UNUSED3~] +OutputSigType4187=Digital +OutputCue4188=[~UNUSED3~] +OutputSigType4188=Digital +OutputCue4189=[~UNUSED3~] +OutputSigType4189=Digital +OutputCue4190=[~UNUSED3~] +OutputSigType4190=Digital +OutputCue4191=[~UNUSED3~] +OutputSigType4191=Digital +OutputCue4192=[~UNUSED3~] +OutputSigType4192=Digital +OutputCue4193=[~UNUSED3~] +OutputSigType4193=Digital +OutputCue4194=[~UNUSED3~] +OutputSigType4194=Digital +OutputCue4195=[~UNUSED3~] +OutputSigType4195=Digital +OutputCue4196=[~UNUSED3~] +OutputSigType4196=Digital +OutputCue4197=[~UNUSED3~] +OutputSigType4197=Digital +OutputCue4198=[~UNUSED3~] +OutputSigType4198=Digital +OutputCue4199=[~UNUSED3~] +OutputSigType4199=Digital +OutputCue4200=[~UNUSED3~] +OutputSigType4200=Digital +OutputCue4201=[~UNUSED3~] +OutputSigType4201=Digital +OutputCue4202=[~UNUSED3~] +OutputSigType4202=Digital +OutputCue4203=[~UNUSED3~] +OutputSigType4203=Digital +OutputCue4204=[~UNUSED3~] +OutputSigType4204=Digital +OutputCue4205=[~UNUSED3~] +OutputSigType4205=Digital +OutputCue4206=[~UNUSED3~] +OutputSigType4206=Digital +OutputCue4207=[~UNUSED3~] +OutputSigType4207=Digital +OutputCue4208=[~UNUSED3~] +OutputSigType4208=Digital +OutputCue4209=[~UNUSED3~] +OutputSigType4209=Digital +OutputCue4210=[~UNUSED3~] +OutputSigType4210=Digital +OutputCue4211=[~UNUSED3~] +OutputSigType4211=Digital +OutputCue4212=[~UNUSED3~] +OutputSigType4212=Digital +OutputCue4213=[~UNUSED3~] +OutputSigType4213=Digital +OutputCue4214=[~UNUSED3~] +OutputSigType4214=Digital +OutputCue4215=[~UNUSED3~] +OutputSigType4215=Digital +OutputCue4216=[~UNUSED3~] +OutputSigType4216=Digital +OutputCue4217=[~UNUSED3~] +OutputSigType4217=Digital +OutputCue4218=[~UNUSED3~] +OutputSigType4218=Digital +OutputCue4219=[~UNUSED3~] +OutputSigType4219=Digital +OutputCue4220=[~UNUSED3~] +OutputSigType4220=Digital +OutputCue4221=[~UNUSED3~] +OutputSigType4221=Digital +OutputCue4222=[~UNUSED3~] +OutputSigType4222=Digital +OutputCue4223=[~UNUSED3~] +OutputSigType4223=Digital +OutputCue4224=[~UNUSED3~] +OutputSigType4224=Digital +OutputCue4225=[~UNUSED3~] +OutputSigType4225=Digital +OutputCue4226=[~UNUSED3~] +OutputSigType4226=Digital +OutputCue4227=[~UNUSED3~] +OutputSigType4227=Digital +OutputCue4228=[~UNUSED3~] +OutputSigType4228=Digital +OutputCue4229=[~UNUSED3~] +OutputSigType4229=Digital +OutputCue4230=[~UNUSED3~] +OutputSigType4230=Digital +OutputCue4231=[~UNUSED3~] +OutputSigType4231=Digital +OutputCue4232=[~UNUSED3~] +OutputSigType4232=Digital +OutputCue4233=[~UNUSED3~] +OutputSigType4233=Digital +OutputCue4234=[~UNUSED3~] +OutputSigType4234=Digital +OutputCue4235=[~UNUSED3~] +OutputSigType4235=Digital +OutputCue4236=[~UNUSED3~] +OutputSigType4236=Digital +OutputCue4237=[~UNUSED3~] +OutputSigType4237=Digital +OutputCue4238=[~UNUSED3~] +OutputSigType4238=Digital +OutputCue4239=[~UNUSED3~] +OutputSigType4239=Digital +OutputCue4240=[~UNUSED3~] +OutputSigType4240=Digital +OutputCue4241=[~UNUSED3~] +OutputSigType4241=Digital +OutputCue4242=[~UNUSED3~] +OutputSigType4242=Digital +OutputCue4243=[~UNUSED3~] +OutputSigType4243=Digital +OutputCue4244=[~UNUSED3~] +OutputSigType4244=Digital +OutputCue4245=[~UNUSED3~] +OutputSigType4245=Digital +OutputCue4246=[~UNUSED3~] +OutputSigType4246=Digital +OutputCue4247=[~UNUSED3~] +OutputSigType4247=Digital +OutputCue4248=[~UNUSED3~] +OutputSigType4248=Digital +OutputCue4249=[~UNUSED3~] +OutputSigType4249=Digital +OutputCue4250=[~UNUSED3~] +OutputSigType4250=Digital +OutputCue4251=[~UNUSED3~] +OutputSigType4251=Digital +OutputCue4252=[~UNUSED3~] +OutputSigType4252=Digital +OutputCue4253=[~UNUSED3~] +OutputSigType4253=Digital +OutputCue4254=[~UNUSED3~] +OutputSigType4254=Digital +OutputCue4255=[~UNUSED3~] +OutputSigType4255=Digital +OutputCue4256=[~UNUSED3~] +OutputSigType4256=Digital +OutputCue4257=[~UNUSED3~] +OutputSigType4257=Digital +OutputCue4258=[~UNUSED3~] +OutputSigType4258=Digital +OutputCue4259=[~UNUSED3~] +OutputSigType4259=Digital +OutputCue4260=[~UNUSED3~] +OutputSigType4260=Digital +OutputCue4261=[~UNUSED3~] +OutputSigType4261=Digital +OutputCue4262=[~UNUSED3~] +OutputSigType4262=Digital +OutputCue4263=[~UNUSED3~] +OutputSigType4263=Digital +OutputCue4264=[~UNUSED3~] +OutputSigType4264=Digital +OutputCue4265=[~UNUSED3~] +OutputSigType4265=Digital +OutputCue4266=[~UNUSED3~] +OutputSigType4266=Digital +OutputCue4267=[~UNUSED3~] +OutputSigType4267=Digital +OutputCue4268=[~UNUSED3~] +OutputSigType4268=Digital +OutputCue4269=[~UNUSED3~] +OutputSigType4269=Digital +OutputCue4270=[~UNUSED3~] +OutputSigType4270=Digital +OutputCue4271=[~UNUSED2~] +OutputSigType4271=Digital|Analog|Serial|String +OutputCue6016=[~EndGroup~]Visible +OutputSigType6016=Digital +InputList2Cue1=[~UNUSED3~] +InputList2SigType1=Analog +InputList2Cue2=[~UNUSED3~] +InputList2SigType2=Analog +InputList2Cue3=Scroll To Item +InputList2SigType3=Analog +InputList2Cue4=Set Number of Items +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~]Item Icons +InputList2SigType11=Analog +InputList2Cue12=Set Item 1 Icon Analog +InputList2SigType12=Analog +InputList2Cue13=Set Item 2 Icon Analog +InputList2SigType13=Analog +InputList2Cue14=Set Item 3 Icon Analog +InputList2SigType14=Analog +InputList2Cue15=Set Item 4 Icon Analog +InputList2SigType15=Analog +InputList2Cue16=Set Item 5 Icon Analog +InputList2SigType16=Analog +InputList2Cue17=Set Item 6 Icon Analog +InputList2SigType17=Analog +InputList2Cue18=Set Item 7 Icon Analog +InputList2SigType18=Analog +InputList2Cue19=Set Item 8 Icon Analog +InputList2SigType19=Analog +InputList2Cue20=Set Item 9 Icon Analog +InputList2SigType20=Analog +InputList2Cue21=Set Item 10 Icon Analog +InputList2SigType21=Analog +InputList2Cue22=Set Item 11 Icon Analog +InputList2SigType22=Analog +InputList2Cue23=Set Item 12 Icon Analog +InputList2SigType23=Analog +InputList2Cue24=Set Item 13 Icon Analog +InputList2SigType24=Analog +InputList2Cue25=Set Item 14 Icon Analog +InputList2SigType25=Analog +InputList2Cue26=Set Item 15 Icon Analog +InputList2SigType26=Analog +InputList2Cue27=Set Item 16 Icon Analog +InputList2SigType27=Analog +InputList2Cue28=Set Item 17 Icon Analog +InputList2SigType28=Analog +InputList2Cue29=Set Item 18 Icon Analog +InputList2SigType29=Analog +InputList2Cue30=Set Item 19 Icon Analog +InputList2SigType30=Analog +InputList2Cue31=Set Item 20 Icon Analog +InputList2SigType31=Analog +InputList2Cue32=Set Item 21 Icon Analog +InputList2SigType32=Analog +InputList2Cue33=Set Item 22 Icon Analog +InputList2SigType33=Analog +InputList2Cue34=Set Item 23 Icon Analog +InputList2SigType34=Analog +InputList2Cue35=Set Item 24 Icon Analog +InputList2SigType35=Analog +InputList2Cue36=Set Item 25 Icon Analog +InputList2SigType36=Analog +InputList2Cue37=Set Item 26 Icon Analog +InputList2SigType37=Analog +InputList2Cue38=Set Item 27 Icon Analog +InputList2SigType38=Analog +InputList2Cue39=Set Item 28 Icon Analog +InputList2SigType39=Analog +InputList2Cue40=Set Item 29 Icon Analog +InputList2SigType40=Analog +InputList2Cue41=Set Item 30 Icon Analog +InputList2SigType41=Analog +InputList2Cue42=Set Item 31 Icon Analog +InputList2SigType42=Analog +InputList2Cue43=Set Item 32 Icon Analog +InputList2SigType43=Analog +InputList2Cue44=Set Item 33 Icon Analog +InputList2SigType44=Analog +InputList2Cue45=Set Item 34 Icon Analog +InputList2SigType45=Analog +InputList2Cue46=Set Item 35 Icon Analog +InputList2SigType46=Analog +InputList2Cue47=Set Item 36 Icon Analog +InputList2SigType47=Analog +InputList2Cue48=Set Item 37 Icon Analog +InputList2SigType48=Analog +InputList2Cue49=Set Item 38 Icon Analog +InputList2SigType49=Analog +InputList2Cue50=Set Item 39 Icon Analog +InputList2SigType50=Analog +InputList2Cue51=Set Item 40 Icon Analog +InputList2SigType51=Analog +InputList2Cue52=Set Item 41 Icon Analog +InputList2SigType52=Analog +InputList2Cue53=Set Item 42 Icon Analog +InputList2SigType53=Analog +InputList2Cue54=Set Item 43 Icon Analog +InputList2SigType54=Analog +InputList2Cue55=Set Item 44 Icon Analog +InputList2SigType55=Analog +InputList2Cue56=Set Item 45 Icon Analog +InputList2SigType56=Analog +InputList2Cue57=Set Item 46 Icon Analog +InputList2SigType57=Analog +InputList2Cue58=Set Item 47 Icon Analog +InputList2SigType58=Analog +InputList2Cue59=Set Item 48 Icon Analog +InputList2SigType59=Analog +InputList2Cue60=Set Item 49 Icon Analog +InputList2SigType60=Analog +InputList2Cue61=Set Item 50 Icon Analog +InputList2SigType61=Analog +InputList2Cue62=Set Item 51 Icon Analog +InputList2SigType62=Analog +InputList2Cue63=Set Item 52 Icon Analog +InputList2SigType63=Analog +InputList2Cue64=Set Item 53 Icon Analog +InputList2SigType64=Analog +InputList2Cue65=Set Item 54 Icon Analog +InputList2SigType65=Analog +InputList2Cue66=Set Item 55 Icon Analog +InputList2SigType66=Analog +InputList2Cue67=Set Item 56 Icon Analog +InputList2SigType67=Analog +InputList2Cue68=Set Item 57 Icon Analog +InputList2SigType68=Analog +InputList2Cue69=Set Item 58 Icon Analog +InputList2SigType69=Analog +InputList2Cue70=Set Item 59 Icon Analog +InputList2SigType70=Analog +InputList2Cue71=Set Item 60 Icon Analog +InputList2SigType71=Analog +InputList2Cue72=Set Item 61 Icon Analog +InputList2SigType72=Analog +InputList2Cue73=Set Item 62 Icon Analog +InputList2SigType73=Analog +InputList2Cue74=Set Item 63 Icon Analog +InputList2SigType74=Analog +InputList2Cue75=Set Item 64 Icon Analog +InputList2SigType75=Analog +InputList2Cue76=Set Item 65 Icon Analog +InputList2SigType76=Analog +InputList2Cue77=Set Item 66 Icon Analog +InputList2SigType77=Analog +InputList2Cue78=Set Item 67 Icon Analog +InputList2SigType78=Analog +InputList2Cue79=Set Item 68 Icon Analog +InputList2SigType79=Analog +InputList2Cue80=Set Item 69 Icon Analog +InputList2SigType80=Analog +InputList2Cue81=Set Item 70 Icon Analog +InputList2SigType81=Analog +InputList2Cue82=Set Item 71 Icon Analog +InputList2SigType82=Analog +InputList2Cue83=Set Item 72 Icon Analog +InputList2SigType83=Analog +InputList2Cue84=Set Item 73 Icon Analog +InputList2SigType84=Analog +InputList2Cue85=Set Item 74 Icon Analog +InputList2SigType85=Analog +InputList2Cue86=Set Item 75 Icon Analog +InputList2SigType86=Analog +InputList2Cue87=Set Item 76 Icon Analog +InputList2SigType87=Analog +InputList2Cue88=Set Item 77 Icon Analog +InputList2SigType88=Analog +InputList2Cue89=Set Item 78 Icon Analog +InputList2SigType89=Analog +InputList2Cue90=Set Item 79 Icon Analog +InputList2SigType90=Analog +InputList2Cue91=Set Item 80 Icon Analog +InputList2SigType91=Analog +InputList2Cue92=Set Item 81 Icon Analog +InputList2SigType92=Analog +InputList2Cue93=Set Item 82 Icon Analog +InputList2SigType93=Analog +InputList2Cue94=Set Item 83 Icon Analog +InputList2SigType94=Analog +InputList2Cue95=Set Item 84 Icon Analog +InputList2SigType95=Analog +InputList2Cue96=Set Item 85 Icon Analog +InputList2SigType96=Analog +InputList2Cue97=Set Item 86 Icon Analog +InputList2SigType97=Analog +InputList2Cue98=Set Item 87 Icon Analog +InputList2SigType98=Analog +InputList2Cue99=Set Item 88 Icon Analog +InputList2SigType99=Analog +InputList2Cue100=Set Item 89 Icon Analog +InputList2SigType100=Analog +InputList2Cue101=Set Item 90 Icon Analog +InputList2SigType101=Analog +InputList2Cue102=Set Item 91 Icon Analog +InputList2SigType102=Analog +InputList2Cue103=Set Item 92 Icon Analog +InputList2SigType103=Analog +InputList2Cue104=Set Item 93 Icon Analog +InputList2SigType104=Analog +InputList2Cue105=Set Item 94 Icon Analog +InputList2SigType105=Analog +InputList2Cue106=Set Item 95 Icon Analog +InputList2SigType106=Analog +InputList2Cue107=Set Item 96 Icon Analog +InputList2SigType107=Analog +InputList2Cue108=Set Item 97 Icon Analog +InputList2SigType108=Analog +InputList2Cue109=Set Item 98 Icon Analog +InputList2SigType109=Analog +InputList2Cue110=Set Item 99 Icon Analog +InputList2SigType110=Analog +InputList2Cue111=Set Item 100 Icon Analog +InputList2SigType111=Analog +InputList2Cue112=Set Item 101 Icon Analog +InputList2SigType112=Analog +InputList2Cue113=Set Item 102 Icon Analog +InputList2SigType113=Analog +InputList2Cue114=Set Item 103 Icon Analog +InputList2SigType114=Analog +InputList2Cue115=Set Item 104 Icon Analog +InputList2SigType115=Analog +InputList2Cue116=Set Item 105 Icon Analog +InputList2SigType116=Analog +InputList2Cue117=Set Item 106 Icon Analog +InputList2SigType117=Analog +InputList2Cue118=Set Item 107 Icon Analog +InputList2SigType118=Analog +InputList2Cue119=Set Item 108 Icon Analog +InputList2SigType119=Analog +InputList2Cue120=Set Item 109 Icon Analog +InputList2SigType120=Analog +InputList2Cue121=Set Item 110 Icon Analog +InputList2SigType121=Analog +InputList2Cue122=Set Item 111 Icon Analog +InputList2SigType122=Analog +InputList2Cue123=Set Item 112 Icon Analog +InputList2SigType123=Analog +InputList2Cue124=Set Item 113 Icon Analog +InputList2SigType124=Analog +InputList2Cue125=Set Item 114 Icon Analog +InputList2SigType125=Analog +InputList2Cue126=Set Item 115 Icon Analog +InputList2SigType126=Analog +InputList2Cue127=Set Item 116 Icon Analog +InputList2SigType127=Analog +InputList2Cue128=Set Item 117 Icon Analog +InputList2SigType128=Analog +InputList2Cue129=Set Item 118 Icon Analog +InputList2SigType129=Analog +InputList2Cue130=Set Item 119 Icon Analog +InputList2SigType130=Analog +InputList2Cue131=Set Item 120 Icon Analog +InputList2SigType131=Analog +InputList2Cue132=Set Item 121 Icon Analog +InputList2SigType132=Analog +InputList2Cue133=Set Item 122 Icon Analog +InputList2SigType133=Analog +InputList2Cue134=Set Item 123 Icon Analog +InputList2SigType134=Analog +InputList2Cue135=Set Item 124 Icon Analog +InputList2SigType135=Analog +InputList2Cue136=Set Item 125 Icon Analog +InputList2SigType136=Analog +InputList2Cue137=Set Item 126 Icon Analog +InputList2SigType137=Analog +InputList2Cue138=Set Item 127 Icon Analog +InputList2SigType138=Analog +InputList2Cue139=Set Item 128 Icon Analog +InputList2SigType139=Analog +InputList2Cue140=Set Item 129 Icon Analog +InputList2SigType140=Analog +InputList2Cue141=Set Item 130 Icon Analog +InputList2SigType141=Analog +InputList2Cue142=Set Item 131 Icon Analog +InputList2SigType142=Analog +InputList2Cue143=Set Item 132 Icon Analog +InputList2SigType143=Analog +InputList2Cue144=Set Item 133 Icon Analog +InputList2SigType144=Analog +InputList2Cue145=Set Item 134 Icon Analog +InputList2SigType145=Analog +InputList2Cue146=Set Item 135 Icon Analog +InputList2SigType146=Analog +InputList2Cue147=Set Item 136 Icon Analog +InputList2SigType147=Analog +InputList2Cue148=Set Item 137 Icon Analog +InputList2SigType148=Analog +InputList2Cue149=Set Item 138 Icon Analog +InputList2SigType149=Analog +InputList2Cue150=Set Item 139 Icon Analog +InputList2SigType150=Analog +InputList2Cue151=Set Item 140 Icon Analog +InputList2SigType151=Analog +InputList2Cue152=Set Item 141 Icon Analog +InputList2SigType152=Analog +InputList2Cue153=Set Item 142 Icon Analog +InputList2SigType153=Analog +InputList2Cue154=Set Item 143 Icon Analog +InputList2SigType154=Analog +InputList2Cue155=Set Item 144 Icon Analog +InputList2SigType155=Analog +InputList2Cue156=Set Item 145 Icon Analog +InputList2SigType156=Analog +InputList2Cue157=Set Item 146 Icon Analog +InputList2SigType157=Analog +InputList2Cue158=Set Item 147 Icon Analog +InputList2SigType158=Analog +InputList2Cue159=Set Item 148 Icon Analog +InputList2SigType159=Analog +InputList2Cue160=Set Item 149 Icon Analog +InputList2SigType160=Analog +InputList2Cue161=Set Item 150 Icon Analog +InputList2SigType161=Analog +InputList2Cue162=Set Item 151 Icon Analog +InputList2SigType162=Analog +InputList2Cue163=Set Item 152 Icon Analog +InputList2SigType163=Analog +InputList2Cue164=Set Item 153 Icon Analog +InputList2SigType164=Analog +InputList2Cue165=Set Item 154 Icon Analog +InputList2SigType165=Analog +InputList2Cue166=Set Item 155 Icon Analog +InputList2SigType166=Analog +InputList2Cue167=Set Item 156 Icon Analog +InputList2SigType167=Analog +InputList2Cue168=Set Item 157 Icon Analog +InputList2SigType168=Analog +InputList2Cue169=Set Item 158 Icon Analog +InputList2SigType169=Analog +InputList2Cue170=Set Item 159 Icon Analog +InputList2SigType170=Analog +InputList2Cue171=Set Item 160 Icon Analog +InputList2SigType171=Analog +InputList2Cue172=Set Item 161 Icon Analog +InputList2SigType172=Analog +InputList2Cue173=Set Item 162 Icon Analog +InputList2SigType173=Analog +InputList2Cue174=Set Item 163 Icon Analog +InputList2SigType174=Analog +InputList2Cue175=Set Item 164 Icon Analog +InputList2SigType175=Analog +InputList2Cue176=Set Item 165 Icon Analog +InputList2SigType176=Analog +InputList2Cue177=Set Item 166 Icon Analog +InputList2SigType177=Analog +InputList2Cue178=Set Item 167 Icon Analog +InputList2SigType178=Analog +InputList2Cue179=Set Item 168 Icon Analog +InputList2SigType179=Analog +InputList2Cue180=Set Item 169 Icon Analog +InputList2SigType180=Analog +InputList2Cue181=Set Item 170 Icon Analog +InputList2SigType181=Analog +InputList2Cue182=Set Item 171 Icon Analog +InputList2SigType182=Analog +InputList2Cue183=Set Item 172 Icon Analog +InputList2SigType183=Analog +InputList2Cue184=Set Item 173 Icon Analog +InputList2SigType184=Analog +InputList2Cue185=Set Item 174 Icon Analog +InputList2SigType185=Analog +InputList2Cue186=Set Item 175 Icon Analog +InputList2SigType186=Analog +InputList2Cue187=Set Item 176 Icon Analog +InputList2SigType187=Analog +InputList2Cue188=Set Item 177 Icon Analog +InputList2SigType188=Analog +InputList2Cue189=Set Item 178 Icon Analog +InputList2SigType189=Analog +InputList2Cue190=Set Item 179 Icon Analog +InputList2SigType190=Analog +InputList2Cue191=Set Item 180 Icon Analog +InputList2SigType191=Analog +InputList2Cue192=Set Item 181 Icon Analog +InputList2SigType192=Analog +InputList2Cue193=Set Item 182 Icon Analog +InputList2SigType193=Analog +InputList2Cue194=Set Item 183 Icon Analog +InputList2SigType194=Analog +InputList2Cue195=Set Item 184 Icon Analog +InputList2SigType195=Analog +InputList2Cue196=Set Item 185 Icon Analog +InputList2SigType196=Analog +InputList2Cue197=Set Item 186 Icon Analog +InputList2SigType197=Analog +InputList2Cue198=Set Item 187 Icon Analog +InputList2SigType198=Analog +InputList2Cue199=Set Item 188 Icon Analog +InputList2SigType199=Analog +InputList2Cue200=Set Item 189 Icon Analog +InputList2SigType200=Analog +InputList2Cue201=Set Item 190 Icon Analog +InputList2SigType201=Analog +InputList2Cue202=Set Item 191 Icon Analog +InputList2SigType202=Analog +InputList2Cue203=Set Item 192 Icon Analog +InputList2SigType203=Analog +InputList2Cue204=Set Item 193 Icon Analog +InputList2SigType204=Analog +InputList2Cue205=Set Item 194 Icon Analog +InputList2SigType205=Analog +InputList2Cue206=Set Item 195 Icon Analog +InputList2SigType206=Analog +InputList2Cue207=Set Item 196 Icon Analog +InputList2SigType207=Analog +InputList2Cue208=Set Item 197 Icon Analog +InputList2SigType208=Analog +InputList2Cue209=Set Item 198 Icon Analog +InputList2SigType209=Analog +InputList2Cue210=Set Item 199 Icon Analog +InputList2SigType210=Analog +InputList2Cue211=Set Item 200 Icon Analog +InputList2SigType211=Analog +InputList2Cue212=Set Item 201 Icon Analog +InputList2SigType212=Analog +InputList2Cue213=Set Item 202 Icon Analog +InputList2SigType213=Analog +InputList2Cue214=Set Item 203 Icon Analog +InputList2SigType214=Analog +InputList2Cue215=Set Item 204 Icon Analog +InputList2SigType215=Analog +InputList2Cue216=Set Item 205 Icon Analog +InputList2SigType216=Analog +InputList2Cue217=Set Item 206 Icon Analog +InputList2SigType217=Analog +InputList2Cue218=Set Item 207 Icon Analog +InputList2SigType218=Analog +InputList2Cue219=Set Item 208 Icon Analog +InputList2SigType219=Analog +InputList2Cue220=Set Item 209 Icon Analog +InputList2SigType220=Analog +InputList2Cue221=Set Item 210 Icon Analog +InputList2SigType221=Analog +InputList2Cue222=Set Item 211 Icon Analog +InputList2SigType222=Analog +InputList2Cue223=Set Item 212 Icon Analog +InputList2SigType223=Analog +InputList2Cue224=Set Item 213 Icon Analog +InputList2SigType224=Analog +InputList2Cue225=Set Item 214 Icon Analog +InputList2SigType225=Analog +InputList2Cue226=Set Item 215 Icon Analog +InputList2SigType226=Analog +InputList2Cue227=Set Item 216 Icon Analog +InputList2SigType227=Analog +InputList2Cue228=Set Item 217 Icon Analog +InputList2SigType228=Analog +InputList2Cue229=Set Item 218 Icon Analog +InputList2SigType229=Analog +InputList2Cue230=Set Item 219 Icon Analog +InputList2SigType230=Analog +InputList2Cue231=Set Item 220 Icon Analog +InputList2SigType231=Analog +InputList2Cue232=Set Item 221 Icon Analog +InputList2SigType232=Analog +InputList2Cue233=Set Item 222 Icon Analog +InputList2SigType233=Analog +InputList2Cue234=Set Item 223 Icon Analog +InputList2SigType234=Analog +InputList2Cue235=Set Item 224 Icon Analog +InputList2SigType235=Analog +InputList2Cue236=Set Item 225 Icon Analog +InputList2SigType236=Analog +InputList2Cue237=Set Item 226 Icon Analog +InputList2SigType237=Analog +InputList2Cue238=Set Item 227 Icon Analog +InputList2SigType238=Analog +InputList2Cue239=Set Item 228 Icon Analog +InputList2SigType239=Analog +InputList2Cue240=Set Item 229 Icon Analog +InputList2SigType240=Analog +InputList2Cue241=Set Item 230 Icon Analog +InputList2SigType241=Analog +InputList2Cue242=Set Item 231 Icon Analog +InputList2SigType242=Analog +InputList2Cue243=Set Item 232 Icon Analog +InputList2SigType243=Analog +InputList2Cue244=Set Item 233 Icon Analog +InputList2SigType244=Analog +InputList2Cue245=Set Item 234 Icon Analog +InputList2SigType245=Analog +InputList2Cue246=Set Item 235 Icon Analog +InputList2SigType246=Analog +InputList2Cue247=Set Item 236 Icon Analog +InputList2SigType247=Analog +InputList2Cue248=Set Item 237 Icon Analog +InputList2SigType248=Analog +InputList2Cue249=Set Item 238 Icon Analog +InputList2SigType249=Analog +InputList2Cue250=Set Item 239 Icon Analog +InputList2SigType250=Analog +InputList2Cue251=Set Item 240 Icon Analog +InputList2SigType251=Analog +InputList2Cue252=Set Item 241 Icon Analog +InputList2SigType252=Analog +InputList2Cue253=Set Item 242 Icon Analog +InputList2SigType253=Analog +InputList2Cue254=Set Item 243 Icon Analog +InputList2SigType254=Analog +InputList2Cue255=Set Item 244 Icon Analog +InputList2SigType255=Analog +InputList2Cue256=Set Item 245 Icon Analog +InputList2SigType256=Analog +InputList2Cue257=Set Item 246 Icon Analog +InputList2SigType257=Analog +InputList2Cue258=Set Item 247 Icon Analog +InputList2SigType258=Analog +InputList2Cue259=Set Item 248 Icon Analog +InputList2SigType259=Analog +InputList2Cue260=Set Item 249 Icon Analog +InputList2SigType260=Analog +InputList2Cue261=Set Item 250 Icon Analog +InputList2SigType261=Analog +InputList2Cue262=Set Item 251 Icon Analog +InputList2SigType262=Analog +InputList2Cue263=Set Item 252 Icon Analog +InputList2SigType263=Analog +InputList2Cue264=Set Item 253 Icon Analog +InputList2SigType264=Analog +InputList2Cue265=Set Item 254 Icon Analog +InputList2SigType265=Analog +InputList2Cue266=Set Item 255 Icon Analog +InputList2SigType266=Analog +InputList2Cue267=[~UNUSED2~] +InputList2SigType267=Digital|Analog|Serial|String +InputList2Cue2012=[~EndGroup~]Item Icons +InputList2SigType2012=Analog +OutputList2Cue1=Item Clicked +OutputList2SigType1=Analog +OutputList2Cue2=Item Held +OutputList2SigType2=Analog +OutputList2Cue3=[~UNUSED3~] +OutputList2SigType3=Analog +OutputList2Cue4=[~UNUSED3~] +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~]Item Icons +OutputList2SigType11=Analog +OutputList2Cue12=[~UNUSED3~] +OutputList2SigType12=Analog +OutputList2Cue13=[~UNUSED3~] +OutputList2SigType13=Analog +OutputList2Cue14=[~UNUSED3~] +OutputList2SigType14=Analog +OutputList2Cue15=[~UNUSED3~] +OutputList2SigType15=Analog +OutputList2Cue16=[~UNUSED3~] +OutputList2SigType16=Analog +OutputList2Cue17=[~UNUSED3~] +OutputList2SigType17=Analog +OutputList2Cue18=[~UNUSED3~] +OutputList2SigType18=Analog +OutputList2Cue19=[~UNUSED3~] +OutputList2SigType19=Analog +OutputList2Cue20=[~UNUSED3~] +OutputList2SigType20=Analog +OutputList2Cue21=[~UNUSED3~] +OutputList2SigType21=Analog +OutputList2Cue22=[~UNUSED3~] +OutputList2SigType22=Analog +OutputList2Cue23=[~UNUSED3~] +OutputList2SigType23=Analog +OutputList2Cue24=[~UNUSED3~] +OutputList2SigType24=Analog +OutputList2Cue25=[~UNUSED3~] +OutputList2SigType25=Analog +OutputList2Cue26=[~UNUSED3~] +OutputList2SigType26=Analog +OutputList2Cue27=[~UNUSED3~] +OutputList2SigType27=Analog +OutputList2Cue28=[~UNUSED3~] +OutputList2SigType28=Analog +OutputList2Cue29=[~UNUSED3~] +OutputList2SigType29=Analog +OutputList2Cue30=[~UNUSED3~] +OutputList2SigType30=Analog +OutputList2Cue31=[~UNUSED3~] +OutputList2SigType31=Analog +OutputList2Cue32=[~UNUSED3~] +OutputList2SigType32=Analog +OutputList2Cue33=[~UNUSED3~] +OutputList2SigType33=Analog +OutputList2Cue34=[~UNUSED3~] +OutputList2SigType34=Analog +OutputList2Cue35=[~UNUSED3~] +OutputList2SigType35=Analog +OutputList2Cue36=[~UNUSED3~] +OutputList2SigType36=Analog +OutputList2Cue37=[~UNUSED3~] +OutputList2SigType37=Analog +OutputList2Cue38=[~UNUSED3~] +OutputList2SigType38=Analog +OutputList2Cue39=[~UNUSED3~] +OutputList2SigType39=Analog +OutputList2Cue40=[~UNUSED3~] +OutputList2SigType40=Analog +OutputList2Cue41=[~UNUSED3~] +OutputList2SigType41=Analog +OutputList2Cue42=[~UNUSED3~] +OutputList2SigType42=Analog +OutputList2Cue43=[~UNUSED3~] +OutputList2SigType43=Analog +OutputList2Cue44=[~UNUSED3~] +OutputList2SigType44=Analog +OutputList2Cue45=[~UNUSED3~] +OutputList2SigType45=Analog +OutputList2Cue46=[~UNUSED3~] +OutputList2SigType46=Analog +OutputList2Cue47=[~UNUSED3~] +OutputList2SigType47=Analog +OutputList2Cue48=[~UNUSED3~] +OutputList2SigType48=Analog +OutputList2Cue49=[~UNUSED3~] +OutputList2SigType49=Analog +OutputList2Cue50=[~UNUSED3~] +OutputList2SigType50=Analog +OutputList2Cue51=[~UNUSED3~] +OutputList2SigType51=Analog +OutputList2Cue52=[~UNUSED3~] +OutputList2SigType52=Analog +OutputList2Cue53=[~UNUSED3~] +OutputList2SigType53=Analog +OutputList2Cue54=[~UNUSED3~] +OutputList2SigType54=Analog +OutputList2Cue55=[~UNUSED3~] +OutputList2SigType55=Analog +OutputList2Cue56=[~UNUSED3~] +OutputList2SigType56=Analog +OutputList2Cue57=[~UNUSED3~] +OutputList2SigType57=Analog +OutputList2Cue58=[~UNUSED3~] +OutputList2SigType58=Analog +OutputList2Cue59=[~UNUSED3~] +OutputList2SigType59=Analog +OutputList2Cue60=[~UNUSED3~] +OutputList2SigType60=Analog +OutputList2Cue61=[~UNUSED3~] +OutputList2SigType61=Analog +OutputList2Cue62=[~UNUSED3~] +OutputList2SigType62=Analog +OutputList2Cue63=[~UNUSED3~] +OutputList2SigType63=Analog +OutputList2Cue64=[~UNUSED3~] +OutputList2SigType64=Analog +OutputList2Cue65=[~UNUSED3~] +OutputList2SigType65=Analog +OutputList2Cue66=[~UNUSED3~] +OutputList2SigType66=Analog +OutputList2Cue67=[~UNUSED3~] +OutputList2SigType67=Analog +OutputList2Cue68=[~UNUSED3~] +OutputList2SigType68=Analog +OutputList2Cue69=[~UNUSED3~] +OutputList2SigType69=Analog +OutputList2Cue70=[~UNUSED3~] +OutputList2SigType70=Analog +OutputList2Cue71=[~UNUSED3~] +OutputList2SigType71=Analog +OutputList2Cue72=[~UNUSED3~] +OutputList2SigType72=Analog +OutputList2Cue73=[~UNUSED3~] +OutputList2SigType73=Analog +OutputList2Cue74=[~UNUSED3~] +OutputList2SigType74=Analog +OutputList2Cue75=[~UNUSED3~] +OutputList2SigType75=Analog +OutputList2Cue76=[~UNUSED3~] +OutputList2SigType76=Analog +OutputList2Cue77=[~UNUSED3~] +OutputList2SigType77=Analog +OutputList2Cue78=[~UNUSED3~] +OutputList2SigType78=Analog +OutputList2Cue79=[~UNUSED3~] +OutputList2SigType79=Analog +OutputList2Cue80=[~UNUSED3~] +OutputList2SigType80=Analog +OutputList2Cue81=[~UNUSED3~] +OutputList2SigType81=Analog +OutputList2Cue82=[~UNUSED3~] +OutputList2SigType82=Analog +OutputList2Cue83=[~UNUSED3~] +OutputList2SigType83=Analog +OutputList2Cue84=[~UNUSED3~] +OutputList2SigType84=Analog +OutputList2Cue85=[~UNUSED3~] +OutputList2SigType85=Analog +OutputList2Cue86=[~UNUSED3~] +OutputList2SigType86=Analog +OutputList2Cue87=[~UNUSED3~] +OutputList2SigType87=Analog +OutputList2Cue88=[~UNUSED3~] +OutputList2SigType88=Analog +OutputList2Cue89=[~UNUSED3~] +OutputList2SigType89=Analog +OutputList2Cue90=[~UNUSED3~] +OutputList2SigType90=Analog +OutputList2Cue91=[~UNUSED3~] +OutputList2SigType91=Analog +OutputList2Cue92=[~UNUSED3~] +OutputList2SigType92=Analog +OutputList2Cue93=[~UNUSED3~] +OutputList2SigType93=Analog +OutputList2Cue94=[~UNUSED3~] +OutputList2SigType94=Analog +OutputList2Cue95=[~UNUSED3~] +OutputList2SigType95=Analog +OutputList2Cue96=[~UNUSED3~] +OutputList2SigType96=Analog +OutputList2Cue97=[~UNUSED3~] +OutputList2SigType97=Analog +OutputList2Cue98=[~UNUSED3~] +OutputList2SigType98=Analog +OutputList2Cue99=[~UNUSED3~] +OutputList2SigType99=Analog +OutputList2Cue100=[~UNUSED3~] +OutputList2SigType100=Analog +OutputList2Cue101=[~UNUSED3~] +OutputList2SigType101=Analog +OutputList2Cue102=[~UNUSED3~] +OutputList2SigType102=Analog +OutputList2Cue103=[~UNUSED3~] +OutputList2SigType103=Analog +OutputList2Cue104=[~UNUSED3~] +OutputList2SigType104=Analog +OutputList2Cue105=[~UNUSED3~] +OutputList2SigType105=Analog +OutputList2Cue106=[~UNUSED3~] +OutputList2SigType106=Analog +OutputList2Cue107=[~UNUSED3~] +OutputList2SigType107=Analog +OutputList2Cue108=[~UNUSED3~] +OutputList2SigType108=Analog +OutputList2Cue109=[~UNUSED3~] +OutputList2SigType109=Analog +OutputList2Cue110=[~UNUSED3~] +OutputList2SigType110=Analog +OutputList2Cue111=[~UNUSED3~] +OutputList2SigType111=Analog +OutputList2Cue112=[~UNUSED3~] +OutputList2SigType112=Analog +OutputList2Cue113=[~UNUSED3~] +OutputList2SigType113=Analog +OutputList2Cue114=[~UNUSED3~] +OutputList2SigType114=Analog +OutputList2Cue115=[~UNUSED3~] +OutputList2SigType115=Analog +OutputList2Cue116=[~UNUSED3~] +OutputList2SigType116=Analog +OutputList2Cue117=[~UNUSED3~] +OutputList2SigType117=Analog +OutputList2Cue118=[~UNUSED3~] +OutputList2SigType118=Analog +OutputList2Cue119=[~UNUSED3~] +OutputList2SigType119=Analog +OutputList2Cue120=[~UNUSED3~] +OutputList2SigType120=Analog +OutputList2Cue121=[~UNUSED3~] +OutputList2SigType121=Analog +OutputList2Cue122=[~UNUSED3~] +OutputList2SigType122=Analog +OutputList2Cue123=[~UNUSED3~] +OutputList2SigType123=Analog +OutputList2Cue124=[~UNUSED3~] +OutputList2SigType124=Analog +OutputList2Cue125=[~UNUSED3~] +OutputList2SigType125=Analog +OutputList2Cue126=[~UNUSED3~] +OutputList2SigType126=Analog +OutputList2Cue127=[~UNUSED3~] +OutputList2SigType127=Analog +OutputList2Cue128=[~UNUSED3~] +OutputList2SigType128=Analog +OutputList2Cue129=[~UNUSED3~] +OutputList2SigType129=Analog +OutputList2Cue130=[~UNUSED3~] +OutputList2SigType130=Analog +OutputList2Cue131=[~UNUSED3~] +OutputList2SigType131=Analog +OutputList2Cue132=[~UNUSED3~] +OutputList2SigType132=Analog +OutputList2Cue133=[~UNUSED3~] +OutputList2SigType133=Analog +OutputList2Cue134=[~UNUSED3~] +OutputList2SigType134=Analog +OutputList2Cue135=[~UNUSED3~] +OutputList2SigType135=Analog +OutputList2Cue136=[~UNUSED3~] +OutputList2SigType136=Analog +OutputList2Cue137=[~UNUSED3~] +OutputList2SigType137=Analog +OutputList2Cue138=[~UNUSED3~] +OutputList2SigType138=Analog +OutputList2Cue139=[~UNUSED3~] +OutputList2SigType139=Analog +OutputList2Cue140=[~UNUSED3~] +OutputList2SigType140=Analog +OutputList2Cue141=[~UNUSED3~] +OutputList2SigType141=Analog +OutputList2Cue142=[~UNUSED3~] +OutputList2SigType142=Analog +OutputList2Cue143=[~UNUSED3~] +OutputList2SigType143=Analog +OutputList2Cue144=[~UNUSED3~] +OutputList2SigType144=Analog +OutputList2Cue145=[~UNUSED3~] +OutputList2SigType145=Analog +OutputList2Cue146=[~UNUSED3~] +OutputList2SigType146=Analog +OutputList2Cue147=[~UNUSED3~] +OutputList2SigType147=Analog +OutputList2Cue148=[~UNUSED3~] +OutputList2SigType148=Analog +OutputList2Cue149=[~UNUSED3~] +OutputList2SigType149=Analog +OutputList2Cue150=[~UNUSED3~] +OutputList2SigType150=Analog +OutputList2Cue151=[~UNUSED3~] +OutputList2SigType151=Analog +OutputList2Cue152=[~UNUSED3~] +OutputList2SigType152=Analog +OutputList2Cue153=[~UNUSED3~] +OutputList2SigType153=Analog +OutputList2Cue154=[~UNUSED3~] +OutputList2SigType154=Analog +OutputList2Cue155=[~UNUSED3~] +OutputList2SigType155=Analog +OutputList2Cue156=[~UNUSED3~] +OutputList2SigType156=Analog +OutputList2Cue157=[~UNUSED3~] +OutputList2SigType157=Analog +OutputList2Cue158=[~UNUSED3~] +OutputList2SigType158=Analog +OutputList2Cue159=[~UNUSED3~] +OutputList2SigType159=Analog +OutputList2Cue160=[~UNUSED3~] +OutputList2SigType160=Analog +OutputList2Cue161=[~UNUSED3~] +OutputList2SigType161=Analog +OutputList2Cue162=[~UNUSED3~] +OutputList2SigType162=Analog +OutputList2Cue163=[~UNUSED3~] +OutputList2SigType163=Analog +OutputList2Cue164=[~UNUSED3~] +OutputList2SigType164=Analog +OutputList2Cue165=[~UNUSED3~] +OutputList2SigType165=Analog +OutputList2Cue166=[~UNUSED3~] +OutputList2SigType166=Analog +OutputList2Cue167=[~UNUSED3~] +OutputList2SigType167=Analog +OutputList2Cue168=[~UNUSED3~] +OutputList2SigType168=Analog +OutputList2Cue169=[~UNUSED3~] +OutputList2SigType169=Analog +OutputList2Cue170=[~UNUSED3~] +OutputList2SigType170=Analog +OutputList2Cue171=[~UNUSED3~] +OutputList2SigType171=Analog +OutputList2Cue172=[~UNUSED3~] +OutputList2SigType172=Analog +OutputList2Cue173=[~UNUSED3~] +OutputList2SigType173=Analog +OutputList2Cue174=[~UNUSED3~] +OutputList2SigType174=Analog +OutputList2Cue175=[~UNUSED3~] +OutputList2SigType175=Analog +OutputList2Cue176=[~UNUSED3~] +OutputList2SigType176=Analog +OutputList2Cue177=[~UNUSED3~] +OutputList2SigType177=Analog +OutputList2Cue178=[~UNUSED3~] +OutputList2SigType178=Analog +OutputList2Cue179=[~UNUSED3~] +OutputList2SigType179=Analog +OutputList2Cue180=[~UNUSED3~] +OutputList2SigType180=Analog +OutputList2Cue181=[~UNUSED3~] +OutputList2SigType181=Analog +OutputList2Cue182=[~UNUSED3~] +OutputList2SigType182=Analog +OutputList2Cue183=[~UNUSED3~] +OutputList2SigType183=Analog +OutputList2Cue184=[~UNUSED3~] +OutputList2SigType184=Analog +OutputList2Cue185=[~UNUSED3~] +OutputList2SigType185=Analog +OutputList2Cue186=[~UNUSED3~] +OutputList2SigType186=Analog +OutputList2Cue187=[~UNUSED3~] +OutputList2SigType187=Analog +OutputList2Cue188=[~UNUSED3~] +OutputList2SigType188=Analog +OutputList2Cue189=[~UNUSED3~] +OutputList2SigType189=Analog +OutputList2Cue190=[~UNUSED3~] +OutputList2SigType190=Analog +OutputList2Cue191=[~UNUSED3~] +OutputList2SigType191=Analog +OutputList2Cue192=[~UNUSED3~] +OutputList2SigType192=Analog +OutputList2Cue193=[~UNUSED3~] +OutputList2SigType193=Analog +OutputList2Cue194=[~UNUSED3~] +OutputList2SigType194=Analog +OutputList2Cue195=[~UNUSED3~] +OutputList2SigType195=Analog +OutputList2Cue196=[~UNUSED3~] +OutputList2SigType196=Analog +OutputList2Cue197=[~UNUSED3~] +OutputList2SigType197=Analog +OutputList2Cue198=[~UNUSED3~] +OutputList2SigType198=Analog +OutputList2Cue199=[~UNUSED3~] +OutputList2SigType199=Analog +OutputList2Cue200=[~UNUSED3~] +OutputList2SigType200=Analog +OutputList2Cue201=[~UNUSED3~] +OutputList2SigType201=Analog +OutputList2Cue202=[~UNUSED3~] +OutputList2SigType202=Analog +OutputList2Cue203=[~UNUSED3~] +OutputList2SigType203=Analog +OutputList2Cue204=[~UNUSED3~] +OutputList2SigType204=Analog +OutputList2Cue205=[~UNUSED3~] +OutputList2SigType205=Analog +OutputList2Cue206=[~UNUSED3~] +OutputList2SigType206=Analog +OutputList2Cue207=[~UNUSED3~] +OutputList2SigType207=Analog +OutputList2Cue208=[~UNUSED3~] +OutputList2SigType208=Analog +OutputList2Cue209=[~UNUSED3~] +OutputList2SigType209=Analog +OutputList2Cue210=[~UNUSED3~] +OutputList2SigType210=Analog +OutputList2Cue211=[~UNUSED3~] +OutputList2SigType211=Analog +OutputList2Cue212=[~UNUSED3~] +OutputList2SigType212=Analog +OutputList2Cue213=[~UNUSED3~] +OutputList2SigType213=Analog +OutputList2Cue214=[~UNUSED3~] +OutputList2SigType214=Analog +OutputList2Cue215=[~UNUSED3~] +OutputList2SigType215=Analog +OutputList2Cue216=[~UNUSED3~] +OutputList2SigType216=Analog +OutputList2Cue217=[~UNUSED3~] +OutputList2SigType217=Analog +OutputList2Cue218=[~UNUSED3~] +OutputList2SigType218=Analog +OutputList2Cue219=[~UNUSED3~] +OutputList2SigType219=Analog +OutputList2Cue220=[~UNUSED3~] +OutputList2SigType220=Analog +OutputList2Cue221=[~UNUSED3~] +OutputList2SigType221=Analog +OutputList2Cue222=[~UNUSED3~] +OutputList2SigType222=Analog +OutputList2Cue223=[~UNUSED3~] +OutputList2SigType223=Analog +OutputList2Cue224=[~UNUSED3~] +OutputList2SigType224=Analog +OutputList2Cue225=[~UNUSED3~] +OutputList2SigType225=Analog +OutputList2Cue226=[~UNUSED3~] +OutputList2SigType226=Analog +OutputList2Cue227=[~UNUSED3~] +OutputList2SigType227=Analog +OutputList2Cue228=[~UNUSED3~] +OutputList2SigType228=Analog +OutputList2Cue229=[~UNUSED3~] +OutputList2SigType229=Analog +OutputList2Cue230=[~UNUSED3~] +OutputList2SigType230=Analog +OutputList2Cue231=[~UNUSED3~] +OutputList2SigType231=Analog +OutputList2Cue232=[~UNUSED3~] +OutputList2SigType232=Analog +OutputList2Cue233=[~UNUSED3~] +OutputList2SigType233=Analog +OutputList2Cue234=[~UNUSED3~] +OutputList2SigType234=Analog +OutputList2Cue235=[~UNUSED3~] +OutputList2SigType235=Analog +OutputList2Cue236=[~UNUSED3~] +OutputList2SigType236=Analog +OutputList2Cue237=[~UNUSED3~] +OutputList2SigType237=Analog +OutputList2Cue238=[~UNUSED3~] +OutputList2SigType238=Analog +OutputList2Cue239=[~UNUSED3~] +OutputList2SigType239=Analog +OutputList2Cue240=[~UNUSED3~] +OutputList2SigType240=Analog +OutputList2Cue241=[~UNUSED3~] +OutputList2SigType241=Analog +OutputList2Cue242=[~UNUSED3~] +OutputList2SigType242=Analog +OutputList2Cue243=[~UNUSED3~] +OutputList2SigType243=Analog +OutputList2Cue244=[~UNUSED3~] +OutputList2SigType244=Analog +OutputList2Cue245=[~UNUSED3~] +OutputList2SigType245=Analog +OutputList2Cue246=[~UNUSED3~] +OutputList2SigType246=Analog +OutputList2Cue247=[~UNUSED3~] +OutputList2SigType247=Analog +OutputList2Cue248=[~UNUSED3~] +OutputList2SigType248=Analog +OutputList2Cue249=[~UNUSED3~] +OutputList2SigType249=Analog +OutputList2Cue250=[~UNUSED3~] +OutputList2SigType250=Analog +OutputList2Cue251=[~UNUSED3~] +OutputList2SigType251=Analog +OutputList2Cue252=[~UNUSED3~] +OutputList2SigType252=Analog +OutputList2Cue253=[~UNUSED3~] +OutputList2SigType253=Analog +OutputList2Cue254=[~UNUSED3~] +OutputList2SigType254=Analog +OutputList2Cue255=[~UNUSED3~] +OutputList2SigType255=Analog +OutputList2Cue256=[~UNUSED3~] +OutputList2SigType256=Analog +OutputList2Cue257=[~UNUSED3~] +OutputList2SigType257=Analog +OutputList2Cue258=[~UNUSED3~] +OutputList2SigType258=Analog +OutputList2Cue259=[~UNUSED3~] +OutputList2SigType259=Analog +OutputList2Cue260=[~UNUSED3~] +OutputList2SigType260=Analog +OutputList2Cue261=[~UNUSED3~] +OutputList2SigType261=Analog +OutputList2Cue262=[~UNUSED3~] +OutputList2SigType262=Analog +OutputList2Cue263=[~UNUSED3~] +OutputList2SigType263=Analog +OutputList2Cue264=[~UNUSED3~] +OutputList2SigType264=Analog +OutputList2Cue265=[~UNUSED3~] +OutputList2SigType265=Analog +OutputList2Cue266=[~UNUSED3~] +OutputList2SigType266=Analog +OutputList2Cue267=[~UNUSED2~] +OutputList2SigType267=Digital|Analog|Serial|String +OutputList2Cue2012=[~EndGroup~]Item Icons +OutputList2SigType2012=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~]Item Texts +InputList3SigType11=Serial +InputList3Cue12=Set Item 1 Text +InputList3SigType12=Serial +InputList3Cue13=Set Item 2 Text +InputList3SigType13=Serial +InputList3Cue14=Set Item 3 Text +InputList3SigType14=Serial +InputList3Cue15=Set Item 4 Text +InputList3SigType15=Serial +InputList3Cue16=Set Item 5 Text +InputList3SigType16=Serial +InputList3Cue17=Set Item 6 Text +InputList3SigType17=Serial +InputList3Cue18=Set Item 7 Text +InputList3SigType18=Serial +InputList3Cue19=Set Item 8 Text +InputList3SigType19=Serial +InputList3Cue20=Set Item 9 Text +InputList3SigType20=Serial +InputList3Cue21=Set Item 10 Text +InputList3SigType21=Serial +InputList3Cue22=Set Item 11 Text +InputList3SigType22=Serial +InputList3Cue23=Set Item 12 Text +InputList3SigType23=Serial +InputList3Cue24=Set Item 13 Text +InputList3SigType24=Serial +InputList3Cue25=Set Item 14 Text +InputList3SigType25=Serial +InputList3Cue26=Set Item 15 Text +InputList3SigType26=Serial +InputList3Cue27=Set Item 16 Text +InputList3SigType27=Serial +InputList3Cue28=Set Item 17 Text +InputList3SigType28=Serial +InputList3Cue29=Set Item 18 Text +InputList3SigType29=Serial +InputList3Cue30=Set Item 19 Text +InputList3SigType30=Serial +InputList3Cue31=Set Item 20 Text +InputList3SigType31=Serial +InputList3Cue32=Set Item 21 Text +InputList3SigType32=Serial +InputList3Cue33=Set Item 22 Text +InputList3SigType33=Serial +InputList3Cue34=Set Item 23 Text +InputList3SigType34=Serial +InputList3Cue35=Set Item 24 Text +InputList3SigType35=Serial +InputList3Cue36=Set Item 25 Text +InputList3SigType36=Serial +InputList3Cue37=Set Item 26 Text +InputList3SigType37=Serial +InputList3Cue38=Set Item 27 Text +InputList3SigType38=Serial +InputList3Cue39=Set Item 28 Text +InputList3SigType39=Serial +InputList3Cue40=Set Item 29 Text +InputList3SigType40=Serial +InputList3Cue41=Set Item 30 Text +InputList3SigType41=Serial +InputList3Cue42=Set Item 31 Text +InputList3SigType42=Serial +InputList3Cue43=Set Item 32 Text +InputList3SigType43=Serial +InputList3Cue44=Set Item 33 Text +InputList3SigType44=Serial +InputList3Cue45=Set Item 34 Text +InputList3SigType45=Serial +InputList3Cue46=Set Item 35 Text +InputList3SigType46=Serial +InputList3Cue47=Set Item 36 Text +InputList3SigType47=Serial +InputList3Cue48=Set Item 37 Text +InputList3SigType48=Serial +InputList3Cue49=Set Item 38 Text +InputList3SigType49=Serial +InputList3Cue50=Set Item 39 Text +InputList3SigType50=Serial +InputList3Cue51=Set Item 40 Text +InputList3SigType51=Serial +InputList3Cue52=Set Item 41 Text +InputList3SigType52=Serial +InputList3Cue53=Set Item 42 Text +InputList3SigType53=Serial +InputList3Cue54=Set Item 43 Text +InputList3SigType54=Serial +InputList3Cue55=Set Item 44 Text +InputList3SigType55=Serial +InputList3Cue56=Set Item 45 Text +InputList3SigType56=Serial +InputList3Cue57=Set Item 46 Text +InputList3SigType57=Serial +InputList3Cue58=Set Item 47 Text +InputList3SigType58=Serial +InputList3Cue59=Set Item 48 Text +InputList3SigType59=Serial +InputList3Cue60=Set Item 49 Text +InputList3SigType60=Serial +InputList3Cue61=Set Item 50 Text +InputList3SigType61=Serial +InputList3Cue62=Set Item 51 Text +InputList3SigType62=Serial +InputList3Cue63=Set Item 52 Text +InputList3SigType63=Serial +InputList3Cue64=Set Item 53 Text +InputList3SigType64=Serial +InputList3Cue65=Set Item 54 Text +InputList3SigType65=Serial +InputList3Cue66=Set Item 55 Text +InputList3SigType66=Serial +InputList3Cue67=Set Item 56 Text +InputList3SigType67=Serial +InputList3Cue68=Set Item 57 Text +InputList3SigType68=Serial +InputList3Cue69=Set Item 58 Text +InputList3SigType69=Serial +InputList3Cue70=Set Item 59 Text +InputList3SigType70=Serial +InputList3Cue71=Set Item 60 Text +InputList3SigType71=Serial +InputList3Cue72=Set Item 61 Text +InputList3SigType72=Serial +InputList3Cue73=Set Item 62 Text +InputList3SigType73=Serial +InputList3Cue74=Set Item 63 Text +InputList3SigType74=Serial +InputList3Cue75=Set Item 64 Text +InputList3SigType75=Serial +InputList3Cue76=Set Item 65 Text +InputList3SigType76=Serial +InputList3Cue77=Set Item 66 Text +InputList3SigType77=Serial +InputList3Cue78=Set Item 67 Text +InputList3SigType78=Serial +InputList3Cue79=Set Item 68 Text +InputList3SigType79=Serial +InputList3Cue80=Set Item 69 Text +InputList3SigType80=Serial +InputList3Cue81=Set Item 70 Text +InputList3SigType81=Serial +InputList3Cue82=Set Item 71 Text +InputList3SigType82=Serial +InputList3Cue83=Set Item 72 Text +InputList3SigType83=Serial +InputList3Cue84=Set Item 73 Text +InputList3SigType84=Serial +InputList3Cue85=Set Item 74 Text +InputList3SigType85=Serial +InputList3Cue86=Set Item 75 Text +InputList3SigType86=Serial +InputList3Cue87=Set Item 76 Text +InputList3SigType87=Serial +InputList3Cue88=Set Item 77 Text +InputList3SigType88=Serial +InputList3Cue89=Set Item 78 Text +InputList3SigType89=Serial +InputList3Cue90=Set Item 79 Text +InputList3SigType90=Serial +InputList3Cue91=Set Item 80 Text +InputList3SigType91=Serial +InputList3Cue92=Set Item 81 Text +InputList3SigType92=Serial +InputList3Cue93=Set Item 82 Text +InputList3SigType93=Serial +InputList3Cue94=Set Item 83 Text +InputList3SigType94=Serial +InputList3Cue95=Set Item 84 Text +InputList3SigType95=Serial +InputList3Cue96=Set Item 85 Text +InputList3SigType96=Serial +InputList3Cue97=Set Item 86 Text +InputList3SigType97=Serial +InputList3Cue98=Set Item 87 Text +InputList3SigType98=Serial +InputList3Cue99=Set Item 88 Text +InputList3SigType99=Serial +InputList3Cue100=Set Item 89 Text +InputList3SigType100=Serial +InputList3Cue101=Set Item 90 Text +InputList3SigType101=Serial +InputList3Cue102=Set Item 91 Text +InputList3SigType102=Serial +InputList3Cue103=Set Item 92 Text +InputList3SigType103=Serial +InputList3Cue104=Set Item 93 Text +InputList3SigType104=Serial +InputList3Cue105=Set Item 94 Text +InputList3SigType105=Serial +InputList3Cue106=Set Item 95 Text +InputList3SigType106=Serial +InputList3Cue107=Set Item 96 Text +InputList3SigType107=Serial +InputList3Cue108=Set Item 97 Text +InputList3SigType108=Serial +InputList3Cue109=Set Item 98 Text +InputList3SigType109=Serial +InputList3Cue110=Set Item 99 Text +InputList3SigType110=Serial +InputList3Cue111=Set Item 100 Text +InputList3SigType111=Serial +InputList3Cue112=Set Item 101 Text +InputList3SigType112=Serial +InputList3Cue113=Set Item 102 Text +InputList3SigType113=Serial +InputList3Cue114=Set Item 103 Text +InputList3SigType114=Serial +InputList3Cue115=Set Item 104 Text +InputList3SigType115=Serial +InputList3Cue116=Set Item 105 Text +InputList3SigType116=Serial +InputList3Cue117=Set Item 106 Text +InputList3SigType117=Serial +InputList3Cue118=Set Item 107 Text +InputList3SigType118=Serial +InputList3Cue119=Set Item 108 Text +InputList3SigType119=Serial +InputList3Cue120=Set Item 109 Text +InputList3SigType120=Serial +InputList3Cue121=Set Item 110 Text +InputList3SigType121=Serial +InputList3Cue122=Set Item 111 Text +InputList3SigType122=Serial +InputList3Cue123=Set Item 112 Text +InputList3SigType123=Serial +InputList3Cue124=Set Item 113 Text +InputList3SigType124=Serial +InputList3Cue125=Set Item 114 Text +InputList3SigType125=Serial +InputList3Cue126=Set Item 115 Text +InputList3SigType126=Serial +InputList3Cue127=Set Item 116 Text +InputList3SigType127=Serial +InputList3Cue128=Set Item 117 Text +InputList3SigType128=Serial +InputList3Cue129=Set Item 118 Text +InputList3SigType129=Serial +InputList3Cue130=Set Item 119 Text +InputList3SigType130=Serial +InputList3Cue131=Set Item 120 Text +InputList3SigType131=Serial +InputList3Cue132=Set Item 121 Text +InputList3SigType132=Serial +InputList3Cue133=Set Item 122 Text +InputList3SigType133=Serial +InputList3Cue134=Set Item 123 Text +InputList3SigType134=Serial +InputList3Cue135=Set Item 124 Text +InputList3SigType135=Serial +InputList3Cue136=Set Item 125 Text +InputList3SigType136=Serial +InputList3Cue137=Set Item 126 Text +InputList3SigType137=Serial +InputList3Cue138=Set Item 127 Text +InputList3SigType138=Serial +InputList3Cue139=Set Item 128 Text +InputList3SigType139=Serial +InputList3Cue140=Set Item 129 Text +InputList3SigType140=Serial +InputList3Cue141=Set Item 130 Text +InputList3SigType141=Serial +InputList3Cue142=Set Item 131 Text +InputList3SigType142=Serial +InputList3Cue143=Set Item 132 Text +InputList3SigType143=Serial +InputList3Cue144=Set Item 133 Text +InputList3SigType144=Serial +InputList3Cue145=Set Item 134 Text +InputList3SigType145=Serial +InputList3Cue146=Set Item 135 Text +InputList3SigType146=Serial +InputList3Cue147=Set Item 136 Text +InputList3SigType147=Serial +InputList3Cue148=Set Item 137 Text +InputList3SigType148=Serial +InputList3Cue149=Set Item 138 Text +InputList3SigType149=Serial +InputList3Cue150=Set Item 139 Text +InputList3SigType150=Serial +InputList3Cue151=Set Item 140 Text +InputList3SigType151=Serial +InputList3Cue152=Set Item 141 Text +InputList3SigType152=Serial +InputList3Cue153=Set Item 142 Text +InputList3SigType153=Serial +InputList3Cue154=Set Item 143 Text +InputList3SigType154=Serial +InputList3Cue155=Set Item 144 Text +InputList3SigType155=Serial +InputList3Cue156=Set Item 145 Text +InputList3SigType156=Serial +InputList3Cue157=Set Item 146 Text +InputList3SigType157=Serial +InputList3Cue158=Set Item 147 Text +InputList3SigType158=Serial +InputList3Cue159=Set Item 148 Text +InputList3SigType159=Serial +InputList3Cue160=Set Item 149 Text +InputList3SigType160=Serial +InputList3Cue161=Set Item 150 Text +InputList3SigType161=Serial +InputList3Cue162=Set Item 151 Text +InputList3SigType162=Serial +InputList3Cue163=Set Item 152 Text +InputList3SigType163=Serial +InputList3Cue164=Set Item 153 Text +InputList3SigType164=Serial +InputList3Cue165=Set Item 154 Text +InputList3SigType165=Serial +InputList3Cue166=Set Item 155 Text +InputList3SigType166=Serial +InputList3Cue167=Set Item 156 Text +InputList3SigType167=Serial +InputList3Cue168=Set Item 157 Text +InputList3SigType168=Serial +InputList3Cue169=Set Item 158 Text +InputList3SigType169=Serial +InputList3Cue170=Set Item 159 Text +InputList3SigType170=Serial +InputList3Cue171=Set Item 160 Text +InputList3SigType171=Serial +InputList3Cue172=Set Item 161 Text +InputList3SigType172=Serial +InputList3Cue173=Set Item 162 Text +InputList3SigType173=Serial +InputList3Cue174=Set Item 163 Text +InputList3SigType174=Serial +InputList3Cue175=Set Item 164 Text +InputList3SigType175=Serial +InputList3Cue176=Set Item 165 Text +InputList3SigType176=Serial +InputList3Cue177=Set Item 166 Text +InputList3SigType177=Serial +InputList3Cue178=Set Item 167 Text +InputList3SigType178=Serial +InputList3Cue179=Set Item 168 Text +InputList3SigType179=Serial +InputList3Cue180=Set Item 169 Text +InputList3SigType180=Serial +InputList3Cue181=Set Item 170 Text +InputList3SigType181=Serial +InputList3Cue182=Set Item 171 Text +InputList3SigType182=Serial +InputList3Cue183=Set Item 172 Text +InputList3SigType183=Serial +InputList3Cue184=Set Item 173 Text +InputList3SigType184=Serial +InputList3Cue185=Set Item 174 Text +InputList3SigType185=Serial +InputList3Cue186=Set Item 175 Text +InputList3SigType186=Serial +InputList3Cue187=Set Item 176 Text +InputList3SigType187=Serial +InputList3Cue188=Set Item 177 Text +InputList3SigType188=Serial +InputList3Cue189=Set Item 178 Text +InputList3SigType189=Serial +InputList3Cue190=Set Item 179 Text +InputList3SigType190=Serial +InputList3Cue191=Set Item 180 Text +InputList3SigType191=Serial +InputList3Cue192=Set Item 181 Text +InputList3SigType192=Serial +InputList3Cue193=Set Item 182 Text +InputList3SigType193=Serial +InputList3Cue194=Set Item 183 Text +InputList3SigType194=Serial +InputList3Cue195=Set Item 184 Text +InputList3SigType195=Serial +InputList3Cue196=Set Item 185 Text +InputList3SigType196=Serial +InputList3Cue197=Set Item 186 Text +InputList3SigType197=Serial +InputList3Cue198=Set Item 187 Text +InputList3SigType198=Serial +InputList3Cue199=Set Item 188 Text +InputList3SigType199=Serial +InputList3Cue200=Set Item 189 Text +InputList3SigType200=Serial +InputList3Cue201=Set Item 190 Text +InputList3SigType201=Serial +InputList3Cue202=Set Item 191 Text +InputList3SigType202=Serial +InputList3Cue203=Set Item 192 Text +InputList3SigType203=Serial +InputList3Cue204=Set Item 193 Text +InputList3SigType204=Serial +InputList3Cue205=Set Item 194 Text +InputList3SigType205=Serial +InputList3Cue206=Set Item 195 Text +InputList3SigType206=Serial +InputList3Cue207=Set Item 196 Text +InputList3SigType207=Serial +InputList3Cue208=Set Item 197 Text +InputList3SigType208=Serial +InputList3Cue209=Set Item 198 Text +InputList3SigType209=Serial +InputList3Cue210=Set Item 199 Text +InputList3SigType210=Serial +InputList3Cue211=Set Item 200 Text +InputList3SigType211=Serial +InputList3Cue212=Set Item 201 Text +InputList3SigType212=Serial +InputList3Cue213=Set Item 202 Text +InputList3SigType213=Serial +InputList3Cue214=Set Item 203 Text +InputList3SigType214=Serial +InputList3Cue215=Set Item 204 Text +InputList3SigType215=Serial +InputList3Cue216=Set Item 205 Text +InputList3SigType216=Serial +InputList3Cue217=Set Item 206 Text +InputList3SigType217=Serial +InputList3Cue218=Set Item 207 Text +InputList3SigType218=Serial +InputList3Cue219=Set Item 208 Text +InputList3SigType219=Serial +InputList3Cue220=Set Item 209 Text +InputList3SigType220=Serial +InputList3Cue221=Set Item 210 Text +InputList3SigType221=Serial +InputList3Cue222=Set Item 211 Text +InputList3SigType222=Serial +InputList3Cue223=Set Item 212 Text +InputList3SigType223=Serial +InputList3Cue224=Set Item 213 Text +InputList3SigType224=Serial +InputList3Cue225=Set Item 214 Text +InputList3SigType225=Serial +InputList3Cue226=Set Item 215 Text +InputList3SigType226=Serial +InputList3Cue227=Set Item 216 Text +InputList3SigType227=Serial +InputList3Cue228=Set Item 217 Text +InputList3SigType228=Serial +InputList3Cue229=Set Item 218 Text +InputList3SigType229=Serial +InputList3Cue230=Set Item 219 Text +InputList3SigType230=Serial +InputList3Cue231=Set Item 220 Text +InputList3SigType231=Serial +InputList3Cue232=Set Item 221 Text +InputList3SigType232=Serial +InputList3Cue233=Set Item 222 Text +InputList3SigType233=Serial +InputList3Cue234=Set Item 223 Text +InputList3SigType234=Serial +InputList3Cue235=Set Item 224 Text +InputList3SigType235=Serial +InputList3Cue236=Set Item 225 Text +InputList3SigType236=Serial +InputList3Cue237=Set Item 226 Text +InputList3SigType237=Serial +InputList3Cue238=Set Item 227 Text +InputList3SigType238=Serial +InputList3Cue239=Set Item 228 Text +InputList3SigType239=Serial +InputList3Cue240=Set Item 229 Text +InputList3SigType240=Serial +InputList3Cue241=Set Item 230 Text +InputList3SigType241=Serial +InputList3Cue242=Set Item 231 Text +InputList3SigType242=Serial +InputList3Cue243=Set Item 232 Text +InputList3SigType243=Serial +InputList3Cue244=Set Item 233 Text +InputList3SigType244=Serial +InputList3Cue245=Set Item 234 Text +InputList3SigType245=Serial +InputList3Cue246=Set Item 235 Text +InputList3SigType246=Serial +InputList3Cue247=Set Item 236 Text +InputList3SigType247=Serial +InputList3Cue248=Set Item 237 Text +InputList3SigType248=Serial +InputList3Cue249=Set Item 238 Text +InputList3SigType249=Serial +InputList3Cue250=Set Item 239 Text +InputList3SigType250=Serial +InputList3Cue251=Set Item 240 Text +InputList3SigType251=Serial +InputList3Cue252=Set Item 241 Text +InputList3SigType252=Serial +InputList3Cue253=Set Item 242 Text +InputList3SigType253=Serial +InputList3Cue254=Set Item 243 Text +InputList3SigType254=Serial +InputList3Cue255=Set Item 244 Text +InputList3SigType255=Serial +InputList3Cue256=Set Item 245 Text +InputList3SigType256=Serial +InputList3Cue257=Set Item 246 Text +InputList3SigType257=Serial +InputList3Cue258=Set Item 247 Text +InputList3SigType258=Serial +InputList3Cue259=Set Item 248 Text +InputList3SigType259=Serial +InputList3Cue260=Set Item 249 Text +InputList3SigType260=Serial +InputList3Cue261=Set Item 250 Text +InputList3SigType261=Serial +InputList3Cue262=Set Item 251 Text +InputList3SigType262=Serial +InputList3Cue263=Set Item 252 Text +InputList3SigType263=Serial +InputList3Cue264=Set Item 253 Text +InputList3SigType264=Serial +InputList3Cue265=Set Item 254 Text +InputList3SigType265=Serial +InputList3Cue266=Set Item 255 Text +InputList3SigType266=Serial +InputList3Cue267=[~UNUSED2~] +InputList3SigType267=Digital|Analog|Serial|String +InputList3Cue2012=[~EndGroup~]Item Texts +InputList3SigType2012=Serial +InputList3Cue2013=[~BeginGroup~]Item Icons +InputList3SigType2013=Serial +InputList3Cue2014=Set Item 1 Icon Serial +InputList3SigType2014=Serial +InputList3Cue2015=Set Item 2 Icon Serial +InputList3SigType2015=Serial +InputList3Cue2016=Set Item 3 Icon Serial +InputList3SigType2016=Serial +InputList3Cue2017=Set Item 4 Icon Serial +InputList3SigType2017=Serial +InputList3Cue2018=Set Item 5 Icon Serial +InputList3SigType2018=Serial +InputList3Cue2019=Set Item 6 Icon Serial +InputList3SigType2019=Serial +InputList3Cue2020=Set Item 7 Icon Serial +InputList3SigType2020=Serial +InputList3Cue2021=Set Item 8 Icon Serial +InputList3SigType2021=Serial +InputList3Cue2022=Set Item 9 Icon Serial +InputList3SigType2022=Serial +InputList3Cue2023=Set Item 10 Icon Serial +InputList3SigType2023=Serial +InputList3Cue2024=Set Item 11 Icon Serial +InputList3SigType2024=Serial +InputList3Cue2025=Set Item 12 Icon Serial +InputList3SigType2025=Serial +InputList3Cue2026=Set Item 13 Icon Serial +InputList3SigType2026=Serial +InputList3Cue2027=Set Item 14 Icon Serial +InputList3SigType2027=Serial +InputList3Cue2028=Set Item 15 Icon Serial +InputList3SigType2028=Serial +InputList3Cue2029=Set Item 16 Icon Serial +InputList3SigType2029=Serial +InputList3Cue2030=Set Item 17 Icon Serial +InputList3SigType2030=Serial +InputList3Cue2031=Set Item 18 Icon Serial +InputList3SigType2031=Serial +InputList3Cue2032=Set Item 19 Icon Serial +InputList3SigType2032=Serial +InputList3Cue2033=Set Item 20 Icon Serial +InputList3SigType2033=Serial +InputList3Cue2034=Set Item 21 Icon Serial +InputList3SigType2034=Serial +InputList3Cue2035=Set Item 22 Icon Serial +InputList3SigType2035=Serial +InputList3Cue2036=Set Item 23 Icon Serial +InputList3SigType2036=Serial +InputList3Cue2037=Set Item 24 Icon Serial +InputList3SigType2037=Serial +InputList3Cue2038=Set Item 25 Icon Serial +InputList3SigType2038=Serial +InputList3Cue2039=Set Item 26 Icon Serial +InputList3SigType2039=Serial +InputList3Cue2040=Set Item 27 Icon Serial +InputList3SigType2040=Serial +InputList3Cue2041=Set Item 28 Icon Serial +InputList3SigType2041=Serial +InputList3Cue2042=Set Item 29 Icon Serial +InputList3SigType2042=Serial +InputList3Cue2043=Set Item 30 Icon Serial +InputList3SigType2043=Serial +InputList3Cue2044=Set Item 31 Icon Serial +InputList3SigType2044=Serial +InputList3Cue2045=Set Item 32 Icon Serial +InputList3SigType2045=Serial +InputList3Cue2046=Set Item 33 Icon Serial +InputList3SigType2046=Serial +InputList3Cue2047=Set Item 34 Icon Serial +InputList3SigType2047=Serial +InputList3Cue2048=Set Item 35 Icon Serial +InputList3SigType2048=Serial +InputList3Cue2049=Set Item 36 Icon Serial +InputList3SigType2049=Serial +InputList3Cue2050=Set Item 37 Icon Serial +InputList3SigType2050=Serial +InputList3Cue2051=Set Item 38 Icon Serial +InputList3SigType2051=Serial +InputList3Cue2052=Set Item 39 Icon Serial +InputList3SigType2052=Serial +InputList3Cue2053=Set Item 40 Icon Serial +InputList3SigType2053=Serial +InputList3Cue2054=Set Item 41 Icon Serial +InputList3SigType2054=Serial +InputList3Cue2055=Set Item 42 Icon Serial +InputList3SigType2055=Serial +InputList3Cue2056=Set Item 43 Icon Serial +InputList3SigType2056=Serial +InputList3Cue2057=Set Item 44 Icon Serial +InputList3SigType2057=Serial +InputList3Cue2058=Set Item 45 Icon Serial +InputList3SigType2058=Serial +InputList3Cue2059=Set Item 46 Icon Serial +InputList3SigType2059=Serial +InputList3Cue2060=Set Item 47 Icon Serial +InputList3SigType2060=Serial +InputList3Cue2061=Set Item 48 Icon Serial +InputList3SigType2061=Serial +InputList3Cue2062=Set Item 49 Icon Serial +InputList3SigType2062=Serial +InputList3Cue2063=Set Item 50 Icon Serial +InputList3SigType2063=Serial +InputList3Cue2064=Set Item 51 Icon Serial +InputList3SigType2064=Serial +InputList3Cue2065=Set Item 52 Icon Serial +InputList3SigType2065=Serial +InputList3Cue2066=Set Item 53 Icon Serial +InputList3SigType2066=Serial +InputList3Cue2067=Set Item 54 Icon Serial +InputList3SigType2067=Serial +InputList3Cue2068=Set Item 55 Icon Serial +InputList3SigType2068=Serial +InputList3Cue2069=Set Item 56 Icon Serial +InputList3SigType2069=Serial +InputList3Cue2070=Set Item 57 Icon Serial +InputList3SigType2070=Serial +InputList3Cue2071=Set Item 58 Icon Serial +InputList3SigType2071=Serial +InputList3Cue2072=Set Item 59 Icon Serial +InputList3SigType2072=Serial +InputList3Cue2073=Set Item 60 Icon Serial +InputList3SigType2073=Serial +InputList3Cue2074=Set Item 61 Icon Serial +InputList3SigType2074=Serial +InputList3Cue2075=Set Item 62 Icon Serial +InputList3SigType2075=Serial +InputList3Cue2076=Set Item 63 Icon Serial +InputList3SigType2076=Serial +InputList3Cue2077=Set Item 64 Icon Serial +InputList3SigType2077=Serial +InputList3Cue2078=Set Item 65 Icon Serial +InputList3SigType2078=Serial +InputList3Cue2079=Set Item 66 Icon Serial +InputList3SigType2079=Serial +InputList3Cue2080=Set Item 67 Icon Serial +InputList3SigType2080=Serial +InputList3Cue2081=Set Item 68 Icon Serial +InputList3SigType2081=Serial +InputList3Cue2082=Set Item 69 Icon Serial +InputList3SigType2082=Serial +InputList3Cue2083=Set Item 70 Icon Serial +InputList3SigType2083=Serial +InputList3Cue2084=Set Item 71 Icon Serial +InputList3SigType2084=Serial +InputList3Cue2085=Set Item 72 Icon Serial +InputList3SigType2085=Serial +InputList3Cue2086=Set Item 73 Icon Serial +InputList3SigType2086=Serial +InputList3Cue2087=Set Item 74 Icon Serial +InputList3SigType2087=Serial +InputList3Cue2088=Set Item 75 Icon Serial +InputList3SigType2088=Serial +InputList3Cue2089=Set Item 76 Icon Serial +InputList3SigType2089=Serial +InputList3Cue2090=Set Item 77 Icon Serial +InputList3SigType2090=Serial +InputList3Cue2091=Set Item 78 Icon Serial +InputList3SigType2091=Serial +InputList3Cue2092=Set Item 79 Icon Serial +InputList3SigType2092=Serial +InputList3Cue2093=Set Item 80 Icon Serial +InputList3SigType2093=Serial +InputList3Cue2094=Set Item 81 Icon Serial +InputList3SigType2094=Serial +InputList3Cue2095=Set Item 82 Icon Serial +InputList3SigType2095=Serial +InputList3Cue2096=Set Item 83 Icon Serial +InputList3SigType2096=Serial +InputList3Cue2097=Set Item 84 Icon Serial +InputList3SigType2097=Serial +InputList3Cue2098=Set Item 85 Icon Serial +InputList3SigType2098=Serial +InputList3Cue2099=Set Item 86 Icon Serial +InputList3SigType2099=Serial +InputList3Cue2100=Set Item 87 Icon Serial +InputList3SigType2100=Serial +InputList3Cue2101=Set Item 88 Icon Serial +InputList3SigType2101=Serial +InputList3Cue2102=Set Item 89 Icon Serial +InputList3SigType2102=Serial +InputList3Cue2103=Set Item 90 Icon Serial +InputList3SigType2103=Serial +InputList3Cue2104=Set Item 91 Icon Serial +InputList3SigType2104=Serial +InputList3Cue2105=Set Item 92 Icon Serial +InputList3SigType2105=Serial +InputList3Cue2106=Set Item 93 Icon Serial +InputList3SigType2106=Serial +InputList3Cue2107=Set Item 94 Icon Serial +InputList3SigType2107=Serial +InputList3Cue2108=Set Item 95 Icon Serial +InputList3SigType2108=Serial +InputList3Cue2109=Set Item 96 Icon Serial +InputList3SigType2109=Serial +InputList3Cue2110=Set Item 97 Icon Serial +InputList3SigType2110=Serial +InputList3Cue2111=Set Item 98 Icon Serial +InputList3SigType2111=Serial +InputList3Cue2112=Set Item 99 Icon Serial +InputList3SigType2112=Serial +InputList3Cue2113=Set Item 100 Icon Serial +InputList3SigType2113=Serial +InputList3Cue2114=Set Item 101 Icon Serial +InputList3SigType2114=Serial +InputList3Cue2115=Set Item 102 Icon Serial +InputList3SigType2115=Serial +InputList3Cue2116=Set Item 103 Icon Serial +InputList3SigType2116=Serial +InputList3Cue2117=Set Item 104 Icon Serial +InputList3SigType2117=Serial +InputList3Cue2118=Set Item 105 Icon Serial +InputList3SigType2118=Serial +InputList3Cue2119=Set Item 106 Icon Serial +InputList3SigType2119=Serial +InputList3Cue2120=Set Item 107 Icon Serial +InputList3SigType2120=Serial +InputList3Cue2121=Set Item 108 Icon Serial +InputList3SigType2121=Serial +InputList3Cue2122=Set Item 109 Icon Serial +InputList3SigType2122=Serial +InputList3Cue2123=Set Item 110 Icon Serial +InputList3SigType2123=Serial +InputList3Cue2124=Set Item 111 Icon Serial +InputList3SigType2124=Serial +InputList3Cue2125=Set Item 112 Icon Serial +InputList3SigType2125=Serial +InputList3Cue2126=Set Item 113 Icon Serial +InputList3SigType2126=Serial +InputList3Cue2127=Set Item 114 Icon Serial +InputList3SigType2127=Serial +InputList3Cue2128=Set Item 115 Icon Serial +InputList3SigType2128=Serial +InputList3Cue2129=Set Item 116 Icon Serial +InputList3SigType2129=Serial +InputList3Cue2130=Set Item 117 Icon Serial +InputList3SigType2130=Serial +InputList3Cue2131=Set Item 118 Icon Serial +InputList3SigType2131=Serial +InputList3Cue2132=Set Item 119 Icon Serial +InputList3SigType2132=Serial +InputList3Cue2133=Set Item 120 Icon Serial +InputList3SigType2133=Serial +InputList3Cue2134=Set Item 121 Icon Serial +InputList3SigType2134=Serial +InputList3Cue2135=Set Item 122 Icon Serial +InputList3SigType2135=Serial +InputList3Cue2136=Set Item 123 Icon Serial +InputList3SigType2136=Serial +InputList3Cue2137=Set Item 124 Icon Serial +InputList3SigType2137=Serial +InputList3Cue2138=Set Item 125 Icon Serial +InputList3SigType2138=Serial +InputList3Cue2139=Set Item 126 Icon Serial +InputList3SigType2139=Serial +InputList3Cue2140=Set Item 127 Icon Serial +InputList3SigType2140=Serial +InputList3Cue2141=Set Item 128 Icon Serial +InputList3SigType2141=Serial +InputList3Cue2142=Set Item 129 Icon Serial +InputList3SigType2142=Serial +InputList3Cue2143=Set Item 130 Icon Serial +InputList3SigType2143=Serial +InputList3Cue2144=Set Item 131 Icon Serial +InputList3SigType2144=Serial +InputList3Cue2145=Set Item 132 Icon Serial +InputList3SigType2145=Serial +InputList3Cue2146=Set Item 133 Icon Serial +InputList3SigType2146=Serial +InputList3Cue2147=Set Item 134 Icon Serial +InputList3SigType2147=Serial +InputList3Cue2148=Set Item 135 Icon Serial +InputList3SigType2148=Serial +InputList3Cue2149=Set Item 136 Icon Serial +InputList3SigType2149=Serial +InputList3Cue2150=Set Item 137 Icon Serial +InputList3SigType2150=Serial +InputList3Cue2151=Set Item 138 Icon Serial +InputList3SigType2151=Serial +InputList3Cue2152=Set Item 139 Icon Serial +InputList3SigType2152=Serial +InputList3Cue2153=Set Item 140 Icon Serial +InputList3SigType2153=Serial +InputList3Cue2154=Set Item 141 Icon Serial +InputList3SigType2154=Serial +InputList3Cue2155=Set Item 142 Icon Serial +InputList3SigType2155=Serial +InputList3Cue2156=Set Item 143 Icon Serial +InputList3SigType2156=Serial +InputList3Cue2157=Set Item 144 Icon Serial +InputList3SigType2157=Serial +InputList3Cue2158=Set Item 145 Icon Serial +InputList3SigType2158=Serial +InputList3Cue2159=Set Item 146 Icon Serial +InputList3SigType2159=Serial +InputList3Cue2160=Set Item 147 Icon Serial +InputList3SigType2160=Serial +InputList3Cue2161=Set Item 148 Icon Serial +InputList3SigType2161=Serial +InputList3Cue2162=Set Item 149 Icon Serial +InputList3SigType2162=Serial +InputList3Cue2163=Set Item 150 Icon Serial +InputList3SigType2163=Serial +InputList3Cue2164=Set Item 151 Icon Serial +InputList3SigType2164=Serial +InputList3Cue2165=Set Item 152 Icon Serial +InputList3SigType2165=Serial +InputList3Cue2166=Set Item 153 Icon Serial +InputList3SigType2166=Serial +InputList3Cue2167=Set Item 154 Icon Serial +InputList3SigType2167=Serial +InputList3Cue2168=Set Item 155 Icon Serial +InputList3SigType2168=Serial +InputList3Cue2169=Set Item 156 Icon Serial +InputList3SigType2169=Serial +InputList3Cue2170=Set Item 157 Icon Serial +InputList3SigType2170=Serial +InputList3Cue2171=Set Item 158 Icon Serial +InputList3SigType2171=Serial +InputList3Cue2172=Set Item 159 Icon Serial +InputList3SigType2172=Serial +InputList3Cue2173=Set Item 160 Icon Serial +InputList3SigType2173=Serial +InputList3Cue2174=Set Item 161 Icon Serial +InputList3SigType2174=Serial +InputList3Cue2175=Set Item 162 Icon Serial +InputList3SigType2175=Serial +InputList3Cue2176=Set Item 163 Icon Serial +InputList3SigType2176=Serial +InputList3Cue2177=Set Item 164 Icon Serial +InputList3SigType2177=Serial +InputList3Cue2178=Set Item 165 Icon Serial +InputList3SigType2178=Serial +InputList3Cue2179=Set Item 166 Icon Serial +InputList3SigType2179=Serial +InputList3Cue2180=Set Item 167 Icon Serial +InputList3SigType2180=Serial +InputList3Cue2181=Set Item 168 Icon Serial +InputList3SigType2181=Serial +InputList3Cue2182=Set Item 169 Icon Serial +InputList3SigType2182=Serial +InputList3Cue2183=Set Item 170 Icon Serial +InputList3SigType2183=Serial +InputList3Cue2184=Set Item 171 Icon Serial +InputList3SigType2184=Serial +InputList3Cue2185=Set Item 172 Icon Serial +InputList3SigType2185=Serial +InputList3Cue2186=Set Item 173 Icon Serial +InputList3SigType2186=Serial +InputList3Cue2187=Set Item 174 Icon Serial +InputList3SigType2187=Serial +InputList3Cue2188=Set Item 175 Icon Serial +InputList3SigType2188=Serial +InputList3Cue2189=Set Item 176 Icon Serial +InputList3SigType2189=Serial +InputList3Cue2190=Set Item 177 Icon Serial +InputList3SigType2190=Serial +InputList3Cue2191=Set Item 178 Icon Serial +InputList3SigType2191=Serial +InputList3Cue2192=Set Item 179 Icon Serial +InputList3SigType2192=Serial +InputList3Cue2193=Set Item 180 Icon Serial +InputList3SigType2193=Serial +InputList3Cue2194=Set Item 181 Icon Serial +InputList3SigType2194=Serial +InputList3Cue2195=Set Item 182 Icon Serial +InputList3SigType2195=Serial +InputList3Cue2196=Set Item 183 Icon Serial +InputList3SigType2196=Serial +InputList3Cue2197=Set Item 184 Icon Serial +InputList3SigType2197=Serial +InputList3Cue2198=Set Item 185 Icon Serial +InputList3SigType2198=Serial +InputList3Cue2199=Set Item 186 Icon Serial +InputList3SigType2199=Serial +InputList3Cue2200=Set Item 187 Icon Serial +InputList3SigType2200=Serial +InputList3Cue2201=Set Item 188 Icon Serial +InputList3SigType2201=Serial +InputList3Cue2202=Set Item 189 Icon Serial +InputList3SigType2202=Serial +InputList3Cue2203=Set Item 190 Icon Serial +InputList3SigType2203=Serial +InputList3Cue2204=Set Item 191 Icon Serial +InputList3SigType2204=Serial +InputList3Cue2205=Set Item 192 Icon Serial +InputList3SigType2205=Serial +InputList3Cue2206=Set Item 193 Icon Serial +InputList3SigType2206=Serial +InputList3Cue2207=Set Item 194 Icon Serial +InputList3SigType2207=Serial +InputList3Cue2208=Set Item 195 Icon Serial +InputList3SigType2208=Serial +InputList3Cue2209=Set Item 196 Icon Serial +InputList3SigType2209=Serial +InputList3Cue2210=Set Item 197 Icon Serial +InputList3SigType2210=Serial +InputList3Cue2211=Set Item 198 Icon Serial +InputList3SigType2211=Serial +InputList3Cue2212=Set Item 199 Icon Serial +InputList3SigType2212=Serial +InputList3Cue2213=Set Item 200 Icon Serial +InputList3SigType2213=Serial +InputList3Cue2214=Set Item 201 Icon Serial +InputList3SigType2214=Serial +InputList3Cue2215=Set Item 202 Icon Serial +InputList3SigType2215=Serial +InputList3Cue2216=Set Item 203 Icon Serial +InputList3SigType2216=Serial +InputList3Cue2217=Set Item 204 Icon Serial +InputList3SigType2217=Serial +InputList3Cue2218=Set Item 205 Icon Serial +InputList3SigType2218=Serial +InputList3Cue2219=Set Item 206 Icon Serial +InputList3SigType2219=Serial +InputList3Cue2220=Set Item 207 Icon Serial +InputList3SigType2220=Serial +InputList3Cue2221=Set Item 208 Icon Serial +InputList3SigType2221=Serial +InputList3Cue2222=Set Item 209 Icon Serial +InputList3SigType2222=Serial +InputList3Cue2223=Set Item 210 Icon Serial +InputList3SigType2223=Serial +InputList3Cue2224=Set Item 211 Icon Serial +InputList3SigType2224=Serial +InputList3Cue2225=Set Item 212 Icon Serial +InputList3SigType2225=Serial +InputList3Cue2226=Set Item 213 Icon Serial +InputList3SigType2226=Serial +InputList3Cue2227=Set Item 214 Icon Serial +InputList3SigType2227=Serial +InputList3Cue2228=Set Item 215 Icon Serial +InputList3SigType2228=Serial +InputList3Cue2229=Set Item 216 Icon Serial +InputList3SigType2229=Serial +InputList3Cue2230=Set Item 217 Icon Serial +InputList3SigType2230=Serial +InputList3Cue2231=Set Item 218 Icon Serial +InputList3SigType2231=Serial +InputList3Cue2232=Set Item 219 Icon Serial +InputList3SigType2232=Serial +InputList3Cue2233=Set Item 220 Icon Serial +InputList3SigType2233=Serial +InputList3Cue2234=Set Item 221 Icon Serial +InputList3SigType2234=Serial +InputList3Cue2235=Set Item 222 Icon Serial +InputList3SigType2235=Serial +InputList3Cue2236=Set Item 223 Icon Serial +InputList3SigType2236=Serial +InputList3Cue2237=Set Item 224 Icon Serial +InputList3SigType2237=Serial +InputList3Cue2238=Set Item 225 Icon Serial +InputList3SigType2238=Serial +InputList3Cue2239=Set Item 226 Icon Serial +InputList3SigType2239=Serial +InputList3Cue2240=Set Item 227 Icon Serial +InputList3SigType2240=Serial +InputList3Cue2241=Set Item 228 Icon Serial +InputList3SigType2241=Serial +InputList3Cue2242=Set Item 229 Icon Serial +InputList3SigType2242=Serial +InputList3Cue2243=Set Item 230 Icon Serial +InputList3SigType2243=Serial +InputList3Cue2244=Set Item 231 Icon Serial +InputList3SigType2244=Serial +InputList3Cue2245=Set Item 232 Icon Serial +InputList3SigType2245=Serial +InputList3Cue2246=Set Item 233 Icon Serial +InputList3SigType2246=Serial +InputList3Cue2247=Set Item 234 Icon Serial +InputList3SigType2247=Serial +InputList3Cue2248=Set Item 235 Icon Serial +InputList3SigType2248=Serial +InputList3Cue2249=Set Item 236 Icon Serial +InputList3SigType2249=Serial +InputList3Cue2250=Set Item 237 Icon Serial +InputList3SigType2250=Serial +InputList3Cue2251=Set Item 238 Icon Serial +InputList3SigType2251=Serial +InputList3Cue2252=Set Item 239 Icon Serial +InputList3SigType2252=Serial +InputList3Cue2253=Set Item 240 Icon Serial +InputList3SigType2253=Serial +InputList3Cue2254=Set Item 241 Icon Serial +InputList3SigType2254=Serial +InputList3Cue2255=Set Item 242 Icon Serial +InputList3SigType2255=Serial +InputList3Cue2256=Set Item 243 Icon Serial +InputList3SigType2256=Serial +InputList3Cue2257=Set Item 244 Icon Serial +InputList3SigType2257=Serial +InputList3Cue2258=Set Item 245 Icon Serial +InputList3SigType2258=Serial +InputList3Cue2259=Set Item 246 Icon Serial +InputList3SigType2259=Serial +InputList3Cue2260=Set Item 247 Icon Serial +InputList3SigType2260=Serial +InputList3Cue2261=Set Item 248 Icon Serial +InputList3SigType2261=Serial +InputList3Cue2262=Set Item 249 Icon Serial +InputList3SigType2262=Serial +InputList3Cue2263=Set Item 250 Icon Serial +InputList3SigType2263=Serial +InputList3Cue2264=Set Item 251 Icon Serial +InputList3SigType2264=Serial +InputList3Cue2265=Set Item 252 Icon Serial +InputList3SigType2265=Serial +InputList3Cue2266=Set Item 253 Icon Serial +InputList3SigType2266=Serial +InputList3Cue2267=Set Item 254 Icon Serial +InputList3SigType2267=Serial +InputList3Cue2268=Set Item 255 Icon Serial +InputList3SigType2268=Serial +InputList3Cue2269=[~UNUSED2~] +InputList3SigType2269=Digital|Analog|Serial|String +InputList3Cue4014=[~EndGroup~]Item Icons +InputList3SigType4014=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~]Item Texts +OutputList3SigType11=Serial +OutputList3Cue12=[~UNUSED3~] +OutputList3SigType12=Serial +OutputList3Cue13=[~UNUSED3~] +OutputList3SigType13=Serial +OutputList3Cue14=[~UNUSED3~] +OutputList3SigType14=Serial +OutputList3Cue15=[~UNUSED3~] +OutputList3SigType15=Serial +OutputList3Cue16=[~UNUSED3~] +OutputList3SigType16=Serial +OutputList3Cue17=[~UNUSED3~] +OutputList3SigType17=Serial +OutputList3Cue18=[~UNUSED3~] +OutputList3SigType18=Serial +OutputList3Cue19=[~UNUSED3~] +OutputList3SigType19=Serial +OutputList3Cue20=[~UNUSED3~] +OutputList3SigType20=Serial +OutputList3Cue21=[~UNUSED3~] +OutputList3SigType21=Serial +OutputList3Cue22=[~UNUSED3~] +OutputList3SigType22=Serial +OutputList3Cue23=[~UNUSED3~] +OutputList3SigType23=Serial +OutputList3Cue24=[~UNUSED3~] +OutputList3SigType24=Serial +OutputList3Cue25=[~UNUSED3~] +OutputList3SigType25=Serial +OutputList3Cue26=[~UNUSED3~] +OutputList3SigType26=Serial +OutputList3Cue27=[~UNUSED3~] +OutputList3SigType27=Serial +OutputList3Cue28=[~UNUSED3~] +OutputList3SigType28=Serial +OutputList3Cue29=[~UNUSED3~] +OutputList3SigType29=Serial +OutputList3Cue30=[~UNUSED3~] +OutputList3SigType30=Serial +OutputList3Cue31=[~UNUSED3~] +OutputList3SigType31=Serial +OutputList3Cue32=[~UNUSED3~] +OutputList3SigType32=Serial +OutputList3Cue33=[~UNUSED3~] +OutputList3SigType33=Serial +OutputList3Cue34=[~UNUSED3~] +OutputList3SigType34=Serial +OutputList3Cue35=[~UNUSED3~] +OutputList3SigType35=Serial +OutputList3Cue36=[~UNUSED3~] +OutputList3SigType36=Serial +OutputList3Cue37=[~UNUSED3~] +OutputList3SigType37=Serial +OutputList3Cue38=[~UNUSED3~] +OutputList3SigType38=Serial +OutputList3Cue39=[~UNUSED3~] +OutputList3SigType39=Serial +OutputList3Cue40=[~UNUSED3~] +OutputList3SigType40=Serial +OutputList3Cue41=[~UNUSED3~] +OutputList3SigType41=Serial +OutputList3Cue42=[~UNUSED3~] +OutputList3SigType42=Serial +OutputList3Cue43=[~UNUSED3~] +OutputList3SigType43=Serial +OutputList3Cue44=[~UNUSED3~] +OutputList3SigType44=Serial +OutputList3Cue45=[~UNUSED3~] +OutputList3SigType45=Serial +OutputList3Cue46=[~UNUSED3~] +OutputList3SigType46=Serial +OutputList3Cue47=[~UNUSED3~] +OutputList3SigType47=Serial +OutputList3Cue48=[~UNUSED3~] +OutputList3SigType48=Serial +OutputList3Cue49=[~UNUSED3~] +OutputList3SigType49=Serial +OutputList3Cue50=[~UNUSED3~] +OutputList3SigType50=Serial +OutputList3Cue51=[~UNUSED3~] +OutputList3SigType51=Serial +OutputList3Cue52=[~UNUSED3~] +OutputList3SigType52=Serial +OutputList3Cue53=[~UNUSED3~] +OutputList3SigType53=Serial +OutputList3Cue54=[~UNUSED3~] +OutputList3SigType54=Serial +OutputList3Cue55=[~UNUSED3~] +OutputList3SigType55=Serial +OutputList3Cue56=[~UNUSED3~] +OutputList3SigType56=Serial +OutputList3Cue57=[~UNUSED3~] +OutputList3SigType57=Serial +OutputList3Cue58=[~UNUSED3~] +OutputList3SigType58=Serial +OutputList3Cue59=[~UNUSED3~] +OutputList3SigType59=Serial +OutputList3Cue60=[~UNUSED3~] +OutputList3SigType60=Serial +OutputList3Cue61=[~UNUSED3~] +OutputList3SigType61=Serial +OutputList3Cue62=[~UNUSED3~] +OutputList3SigType62=Serial +OutputList3Cue63=[~UNUSED3~] +OutputList3SigType63=Serial +OutputList3Cue64=[~UNUSED3~] +OutputList3SigType64=Serial +OutputList3Cue65=[~UNUSED3~] +OutputList3SigType65=Serial +OutputList3Cue66=[~UNUSED3~] +OutputList3SigType66=Serial +OutputList3Cue67=[~UNUSED3~] +OutputList3SigType67=Serial +OutputList3Cue68=[~UNUSED3~] +OutputList3SigType68=Serial +OutputList3Cue69=[~UNUSED3~] +OutputList3SigType69=Serial +OutputList3Cue70=[~UNUSED3~] +OutputList3SigType70=Serial +OutputList3Cue71=[~UNUSED3~] +OutputList3SigType71=Serial +OutputList3Cue72=[~UNUSED3~] +OutputList3SigType72=Serial +OutputList3Cue73=[~UNUSED3~] +OutputList3SigType73=Serial +OutputList3Cue74=[~UNUSED3~] +OutputList3SigType74=Serial +OutputList3Cue75=[~UNUSED3~] +OutputList3SigType75=Serial +OutputList3Cue76=[~UNUSED3~] +OutputList3SigType76=Serial +OutputList3Cue77=[~UNUSED3~] +OutputList3SigType77=Serial +OutputList3Cue78=[~UNUSED3~] +OutputList3SigType78=Serial +OutputList3Cue79=[~UNUSED3~] +OutputList3SigType79=Serial +OutputList3Cue80=[~UNUSED3~] +OutputList3SigType80=Serial +OutputList3Cue81=[~UNUSED3~] +OutputList3SigType81=Serial +OutputList3Cue82=[~UNUSED3~] +OutputList3SigType82=Serial +OutputList3Cue83=[~UNUSED3~] +OutputList3SigType83=Serial +OutputList3Cue84=[~UNUSED3~] +OutputList3SigType84=Serial +OutputList3Cue85=[~UNUSED3~] +OutputList3SigType85=Serial +OutputList3Cue86=[~UNUSED3~] +OutputList3SigType86=Serial +OutputList3Cue87=[~UNUSED3~] +OutputList3SigType87=Serial +OutputList3Cue88=[~UNUSED3~] +OutputList3SigType88=Serial +OutputList3Cue89=[~UNUSED3~] +OutputList3SigType89=Serial +OutputList3Cue90=[~UNUSED3~] +OutputList3SigType90=Serial +OutputList3Cue91=[~UNUSED3~] +OutputList3SigType91=Serial +OutputList3Cue92=[~UNUSED3~] +OutputList3SigType92=Serial +OutputList3Cue93=[~UNUSED3~] +OutputList3SigType93=Serial +OutputList3Cue94=[~UNUSED3~] +OutputList3SigType94=Serial +OutputList3Cue95=[~UNUSED3~] +OutputList3SigType95=Serial +OutputList3Cue96=[~UNUSED3~] +OutputList3SigType96=Serial +OutputList3Cue97=[~UNUSED3~] +OutputList3SigType97=Serial +OutputList3Cue98=[~UNUSED3~] +OutputList3SigType98=Serial +OutputList3Cue99=[~UNUSED3~] +OutputList3SigType99=Serial +OutputList3Cue100=[~UNUSED3~] +OutputList3SigType100=Serial +OutputList3Cue101=[~UNUSED3~] +OutputList3SigType101=Serial +OutputList3Cue102=[~UNUSED3~] +OutputList3SigType102=Serial +OutputList3Cue103=[~UNUSED3~] +OutputList3SigType103=Serial +OutputList3Cue104=[~UNUSED3~] +OutputList3SigType104=Serial +OutputList3Cue105=[~UNUSED3~] +OutputList3SigType105=Serial +OutputList3Cue106=[~UNUSED3~] +OutputList3SigType106=Serial +OutputList3Cue107=[~UNUSED3~] +OutputList3SigType107=Serial +OutputList3Cue108=[~UNUSED3~] +OutputList3SigType108=Serial +OutputList3Cue109=[~UNUSED3~] +OutputList3SigType109=Serial +OutputList3Cue110=[~UNUSED3~] +OutputList3SigType110=Serial +OutputList3Cue111=[~UNUSED3~] +OutputList3SigType111=Serial +OutputList3Cue112=[~UNUSED3~] +OutputList3SigType112=Serial +OutputList3Cue113=[~UNUSED3~] +OutputList3SigType113=Serial +OutputList3Cue114=[~UNUSED3~] +OutputList3SigType114=Serial +OutputList3Cue115=[~UNUSED3~] +OutputList3SigType115=Serial +OutputList3Cue116=[~UNUSED3~] +OutputList3SigType116=Serial +OutputList3Cue117=[~UNUSED3~] +OutputList3SigType117=Serial +OutputList3Cue118=[~UNUSED3~] +OutputList3SigType118=Serial +OutputList3Cue119=[~UNUSED3~] +OutputList3SigType119=Serial +OutputList3Cue120=[~UNUSED3~] +OutputList3SigType120=Serial +OutputList3Cue121=[~UNUSED3~] +OutputList3SigType121=Serial +OutputList3Cue122=[~UNUSED3~] +OutputList3SigType122=Serial +OutputList3Cue123=[~UNUSED3~] +OutputList3SigType123=Serial +OutputList3Cue124=[~UNUSED3~] +OutputList3SigType124=Serial +OutputList3Cue125=[~UNUSED3~] +OutputList3SigType125=Serial +OutputList3Cue126=[~UNUSED3~] +OutputList3SigType126=Serial +OutputList3Cue127=[~UNUSED3~] +OutputList3SigType127=Serial +OutputList3Cue128=[~UNUSED3~] +OutputList3SigType128=Serial +OutputList3Cue129=[~UNUSED3~] +OutputList3SigType129=Serial +OutputList3Cue130=[~UNUSED3~] +OutputList3SigType130=Serial +OutputList3Cue131=[~UNUSED3~] +OutputList3SigType131=Serial +OutputList3Cue132=[~UNUSED3~] +OutputList3SigType132=Serial +OutputList3Cue133=[~UNUSED3~] +OutputList3SigType133=Serial +OutputList3Cue134=[~UNUSED3~] +OutputList3SigType134=Serial +OutputList3Cue135=[~UNUSED3~] +OutputList3SigType135=Serial +OutputList3Cue136=[~UNUSED3~] +OutputList3SigType136=Serial +OutputList3Cue137=[~UNUSED3~] +OutputList3SigType137=Serial +OutputList3Cue138=[~UNUSED3~] +OutputList3SigType138=Serial +OutputList3Cue139=[~UNUSED3~] +OutputList3SigType139=Serial +OutputList3Cue140=[~UNUSED3~] +OutputList3SigType140=Serial +OutputList3Cue141=[~UNUSED3~] +OutputList3SigType141=Serial +OutputList3Cue142=[~UNUSED3~] +OutputList3SigType142=Serial +OutputList3Cue143=[~UNUSED3~] +OutputList3SigType143=Serial +OutputList3Cue144=[~UNUSED3~] +OutputList3SigType144=Serial +OutputList3Cue145=[~UNUSED3~] +OutputList3SigType145=Serial +OutputList3Cue146=[~UNUSED3~] +OutputList3SigType146=Serial +OutputList3Cue147=[~UNUSED3~] +OutputList3SigType147=Serial +OutputList3Cue148=[~UNUSED3~] +OutputList3SigType148=Serial +OutputList3Cue149=[~UNUSED3~] +OutputList3SigType149=Serial +OutputList3Cue150=[~UNUSED3~] +OutputList3SigType150=Serial +OutputList3Cue151=[~UNUSED3~] +OutputList3SigType151=Serial +OutputList3Cue152=[~UNUSED3~] +OutputList3SigType152=Serial +OutputList3Cue153=[~UNUSED3~] +OutputList3SigType153=Serial +OutputList3Cue154=[~UNUSED3~] +OutputList3SigType154=Serial +OutputList3Cue155=[~UNUSED3~] +OutputList3SigType155=Serial +OutputList3Cue156=[~UNUSED3~] +OutputList3SigType156=Serial +OutputList3Cue157=[~UNUSED3~] +OutputList3SigType157=Serial +OutputList3Cue158=[~UNUSED3~] +OutputList3SigType158=Serial +OutputList3Cue159=[~UNUSED3~] +OutputList3SigType159=Serial +OutputList3Cue160=[~UNUSED3~] +OutputList3SigType160=Serial +OutputList3Cue161=[~UNUSED3~] +OutputList3SigType161=Serial +OutputList3Cue162=[~UNUSED3~] +OutputList3SigType162=Serial +OutputList3Cue163=[~UNUSED3~] +OutputList3SigType163=Serial +OutputList3Cue164=[~UNUSED3~] +OutputList3SigType164=Serial +OutputList3Cue165=[~UNUSED3~] +OutputList3SigType165=Serial +OutputList3Cue166=[~UNUSED3~] +OutputList3SigType166=Serial +OutputList3Cue167=[~UNUSED3~] +OutputList3SigType167=Serial +OutputList3Cue168=[~UNUSED3~] +OutputList3SigType168=Serial +OutputList3Cue169=[~UNUSED3~] +OutputList3SigType169=Serial +OutputList3Cue170=[~UNUSED3~] +OutputList3SigType170=Serial +OutputList3Cue171=[~UNUSED3~] +OutputList3SigType171=Serial +OutputList3Cue172=[~UNUSED3~] +OutputList3SigType172=Serial +OutputList3Cue173=[~UNUSED3~] +OutputList3SigType173=Serial +OutputList3Cue174=[~UNUSED3~] +OutputList3SigType174=Serial +OutputList3Cue175=[~UNUSED3~] +OutputList3SigType175=Serial +OutputList3Cue176=[~UNUSED3~] +OutputList3SigType176=Serial +OutputList3Cue177=[~UNUSED3~] +OutputList3SigType177=Serial +OutputList3Cue178=[~UNUSED3~] +OutputList3SigType178=Serial +OutputList3Cue179=[~UNUSED3~] +OutputList3SigType179=Serial +OutputList3Cue180=[~UNUSED3~] +OutputList3SigType180=Serial +OutputList3Cue181=[~UNUSED3~] +OutputList3SigType181=Serial +OutputList3Cue182=[~UNUSED3~] +OutputList3SigType182=Serial +OutputList3Cue183=[~UNUSED3~] +OutputList3SigType183=Serial +OutputList3Cue184=[~UNUSED3~] +OutputList3SigType184=Serial +OutputList3Cue185=[~UNUSED3~] +OutputList3SigType185=Serial +OutputList3Cue186=[~UNUSED3~] +OutputList3SigType186=Serial +OutputList3Cue187=[~UNUSED3~] +OutputList3SigType187=Serial +OutputList3Cue188=[~UNUSED3~] +OutputList3SigType188=Serial +OutputList3Cue189=[~UNUSED3~] +OutputList3SigType189=Serial +OutputList3Cue190=[~UNUSED3~] +OutputList3SigType190=Serial +OutputList3Cue191=[~UNUSED3~] +OutputList3SigType191=Serial +OutputList3Cue192=[~UNUSED3~] +OutputList3SigType192=Serial +OutputList3Cue193=[~UNUSED3~] +OutputList3SigType193=Serial +OutputList3Cue194=[~UNUSED3~] +OutputList3SigType194=Serial +OutputList3Cue195=[~UNUSED3~] +OutputList3SigType195=Serial +OutputList3Cue196=[~UNUSED3~] +OutputList3SigType196=Serial +OutputList3Cue197=[~UNUSED3~] +OutputList3SigType197=Serial +OutputList3Cue198=[~UNUSED3~] +OutputList3SigType198=Serial +OutputList3Cue199=[~UNUSED3~] +OutputList3SigType199=Serial +OutputList3Cue200=[~UNUSED3~] +OutputList3SigType200=Serial +OutputList3Cue201=[~UNUSED3~] +OutputList3SigType201=Serial +OutputList3Cue202=[~UNUSED3~] +OutputList3SigType202=Serial +OutputList3Cue203=[~UNUSED3~] +OutputList3SigType203=Serial +OutputList3Cue204=[~UNUSED3~] +OutputList3SigType204=Serial +OutputList3Cue205=[~UNUSED3~] +OutputList3SigType205=Serial +OutputList3Cue206=[~UNUSED3~] +OutputList3SigType206=Serial +OutputList3Cue207=[~UNUSED3~] +OutputList3SigType207=Serial +OutputList3Cue208=[~UNUSED3~] +OutputList3SigType208=Serial +OutputList3Cue209=[~UNUSED3~] +OutputList3SigType209=Serial +OutputList3Cue210=[~UNUSED3~] +OutputList3SigType210=Serial +OutputList3Cue211=[~UNUSED3~] +OutputList3SigType211=Serial +OutputList3Cue212=[~UNUSED3~] +OutputList3SigType212=Serial +OutputList3Cue213=[~UNUSED3~] +OutputList3SigType213=Serial +OutputList3Cue214=[~UNUSED3~] +OutputList3SigType214=Serial +OutputList3Cue215=[~UNUSED3~] +OutputList3SigType215=Serial +OutputList3Cue216=[~UNUSED3~] +OutputList3SigType216=Serial +OutputList3Cue217=[~UNUSED3~] +OutputList3SigType217=Serial +OutputList3Cue218=[~UNUSED3~] +OutputList3SigType218=Serial +OutputList3Cue219=[~UNUSED3~] +OutputList3SigType219=Serial +OutputList3Cue220=[~UNUSED3~] +OutputList3SigType220=Serial +OutputList3Cue221=[~UNUSED3~] +OutputList3SigType221=Serial +OutputList3Cue222=[~UNUSED3~] +OutputList3SigType222=Serial +OutputList3Cue223=[~UNUSED3~] +OutputList3SigType223=Serial +OutputList3Cue224=[~UNUSED3~] +OutputList3SigType224=Serial +OutputList3Cue225=[~UNUSED3~] +OutputList3SigType225=Serial +OutputList3Cue226=[~UNUSED3~] +OutputList3SigType226=Serial +OutputList3Cue227=[~UNUSED3~] +OutputList3SigType227=Serial +OutputList3Cue228=[~UNUSED3~] +OutputList3SigType228=Serial +OutputList3Cue229=[~UNUSED3~] +OutputList3SigType229=Serial +OutputList3Cue230=[~UNUSED3~] +OutputList3SigType230=Serial +OutputList3Cue231=[~UNUSED3~] +OutputList3SigType231=Serial +OutputList3Cue232=[~UNUSED3~] +OutputList3SigType232=Serial +OutputList3Cue233=[~UNUSED3~] +OutputList3SigType233=Serial +OutputList3Cue234=[~UNUSED3~] +OutputList3SigType234=Serial +OutputList3Cue235=[~UNUSED3~] +OutputList3SigType235=Serial +OutputList3Cue236=[~UNUSED3~] +OutputList3SigType236=Serial +OutputList3Cue237=[~UNUSED3~] +OutputList3SigType237=Serial +OutputList3Cue238=[~UNUSED3~] +OutputList3SigType238=Serial +OutputList3Cue239=[~UNUSED3~] +OutputList3SigType239=Serial +OutputList3Cue240=[~UNUSED3~] +OutputList3SigType240=Serial +OutputList3Cue241=[~UNUSED3~] +OutputList3SigType241=Serial +OutputList3Cue242=[~UNUSED3~] +OutputList3SigType242=Serial +OutputList3Cue243=[~UNUSED3~] +OutputList3SigType243=Serial +OutputList3Cue244=[~UNUSED3~] +OutputList3SigType244=Serial +OutputList3Cue245=[~UNUSED3~] +OutputList3SigType245=Serial +OutputList3Cue246=[~UNUSED3~] +OutputList3SigType246=Serial +OutputList3Cue247=[~UNUSED3~] +OutputList3SigType247=Serial +OutputList3Cue248=[~UNUSED3~] +OutputList3SigType248=Serial +OutputList3Cue249=[~UNUSED3~] +OutputList3SigType249=Serial +OutputList3Cue250=[~UNUSED3~] +OutputList3SigType250=Serial +OutputList3Cue251=[~UNUSED3~] +OutputList3SigType251=Serial +OutputList3Cue252=[~UNUSED3~] +OutputList3SigType252=Serial +OutputList3Cue253=[~UNUSED3~] +OutputList3SigType253=Serial +OutputList3Cue254=[~UNUSED3~] +OutputList3SigType254=Serial +OutputList3Cue255=[~UNUSED3~] +OutputList3SigType255=Serial +OutputList3Cue256=[~UNUSED3~] +OutputList3SigType256=Serial +OutputList3Cue257=[~UNUSED3~] +OutputList3SigType257=Serial +OutputList3Cue258=[~UNUSED3~] +OutputList3SigType258=Serial +OutputList3Cue259=[~UNUSED3~] +OutputList3SigType259=Serial +OutputList3Cue260=[~UNUSED3~] +OutputList3SigType260=Serial +OutputList3Cue261=[~UNUSED3~] +OutputList3SigType261=Serial +OutputList3Cue262=[~UNUSED3~] +OutputList3SigType262=Serial +OutputList3Cue263=[~UNUSED3~] +OutputList3SigType263=Serial +OutputList3Cue264=[~UNUSED3~] +OutputList3SigType264=Serial +OutputList3Cue265=[~UNUSED3~] +OutputList3SigType265=Serial +OutputList3Cue266=[~UNUSED3~] +OutputList3SigType266=Serial +OutputList3Cue267=[~UNUSED2~] +OutputList3SigType267=Digital|Analog|Serial|String +OutputList3Cue2012=[~EndGroup~]Item Texts +OutputList3SigType2012=Serial +OutputList3Cue2013=[~BeginGroup~]Item Icons +OutputList3SigType2013=Serial +OutputList3Cue2014=[~UNUSED3~] +OutputList3SigType2014=Serial +OutputList3Cue2015=[~UNUSED3~] +OutputList3SigType2015=Serial +OutputList3Cue2016=[~UNUSED3~] +OutputList3SigType2016=Serial +OutputList3Cue2017=[~UNUSED3~] +OutputList3SigType2017=Serial +OutputList3Cue2018=[~UNUSED3~] +OutputList3SigType2018=Serial +OutputList3Cue2019=[~UNUSED3~] +OutputList3SigType2019=Serial +OutputList3Cue2020=[~UNUSED3~] +OutputList3SigType2020=Serial +OutputList3Cue2021=[~UNUSED3~] +OutputList3SigType2021=Serial +OutputList3Cue2022=[~UNUSED3~] +OutputList3SigType2022=Serial +OutputList3Cue2023=[~UNUSED3~] +OutputList3SigType2023=Serial +OutputList3Cue2024=[~UNUSED3~] +OutputList3SigType2024=Serial +OutputList3Cue2025=[~UNUSED3~] +OutputList3SigType2025=Serial +OutputList3Cue2026=[~UNUSED3~] +OutputList3SigType2026=Serial +OutputList3Cue2027=[~UNUSED3~] +OutputList3SigType2027=Serial +OutputList3Cue2028=[~UNUSED3~] +OutputList3SigType2028=Serial +OutputList3Cue2029=[~UNUSED3~] +OutputList3SigType2029=Serial +OutputList3Cue2030=[~UNUSED3~] +OutputList3SigType2030=Serial +OutputList3Cue2031=[~UNUSED3~] +OutputList3SigType2031=Serial +OutputList3Cue2032=[~UNUSED3~] +OutputList3SigType2032=Serial +OutputList3Cue2033=[~UNUSED3~] +OutputList3SigType2033=Serial +OutputList3Cue2034=[~UNUSED3~] +OutputList3SigType2034=Serial +OutputList3Cue2035=[~UNUSED3~] +OutputList3SigType2035=Serial +OutputList3Cue2036=[~UNUSED3~] +OutputList3SigType2036=Serial +OutputList3Cue2037=[~UNUSED3~] +OutputList3SigType2037=Serial +OutputList3Cue2038=[~UNUSED3~] +OutputList3SigType2038=Serial +OutputList3Cue2039=[~UNUSED3~] +OutputList3SigType2039=Serial +OutputList3Cue2040=[~UNUSED3~] +OutputList3SigType2040=Serial +OutputList3Cue2041=[~UNUSED3~] +OutputList3SigType2041=Serial +OutputList3Cue2042=[~UNUSED3~] +OutputList3SigType2042=Serial +OutputList3Cue2043=[~UNUSED3~] +OutputList3SigType2043=Serial +OutputList3Cue2044=[~UNUSED3~] +OutputList3SigType2044=Serial +OutputList3Cue2045=[~UNUSED3~] +OutputList3SigType2045=Serial +OutputList3Cue2046=[~UNUSED3~] +OutputList3SigType2046=Serial +OutputList3Cue2047=[~UNUSED3~] +OutputList3SigType2047=Serial +OutputList3Cue2048=[~UNUSED3~] +OutputList3SigType2048=Serial +OutputList3Cue2049=[~UNUSED3~] +OutputList3SigType2049=Serial +OutputList3Cue2050=[~UNUSED3~] +OutputList3SigType2050=Serial +OutputList3Cue2051=[~UNUSED3~] +OutputList3SigType2051=Serial +OutputList3Cue2052=[~UNUSED3~] +OutputList3SigType2052=Serial +OutputList3Cue2053=[~UNUSED3~] +OutputList3SigType2053=Serial +OutputList3Cue2054=[~UNUSED3~] +OutputList3SigType2054=Serial +OutputList3Cue2055=[~UNUSED3~] +OutputList3SigType2055=Serial +OutputList3Cue2056=[~UNUSED3~] +OutputList3SigType2056=Serial +OutputList3Cue2057=[~UNUSED3~] +OutputList3SigType2057=Serial +OutputList3Cue2058=[~UNUSED3~] +OutputList3SigType2058=Serial +OutputList3Cue2059=[~UNUSED3~] +OutputList3SigType2059=Serial +OutputList3Cue2060=[~UNUSED3~] +OutputList3SigType2060=Serial +OutputList3Cue2061=[~UNUSED3~] +OutputList3SigType2061=Serial +OutputList3Cue2062=[~UNUSED3~] +OutputList3SigType2062=Serial +OutputList3Cue2063=[~UNUSED3~] +OutputList3SigType2063=Serial +OutputList3Cue2064=[~UNUSED3~] +OutputList3SigType2064=Serial +OutputList3Cue2065=[~UNUSED3~] +OutputList3SigType2065=Serial +OutputList3Cue2066=[~UNUSED3~] +OutputList3SigType2066=Serial +OutputList3Cue2067=[~UNUSED3~] +OutputList3SigType2067=Serial +OutputList3Cue2068=[~UNUSED3~] +OutputList3SigType2068=Serial +OutputList3Cue2069=[~UNUSED3~] +OutputList3SigType2069=Serial +OutputList3Cue2070=[~UNUSED3~] +OutputList3SigType2070=Serial +OutputList3Cue2071=[~UNUSED3~] +OutputList3SigType2071=Serial +OutputList3Cue2072=[~UNUSED3~] +OutputList3SigType2072=Serial +OutputList3Cue2073=[~UNUSED3~] +OutputList3SigType2073=Serial +OutputList3Cue2074=[~UNUSED3~] +OutputList3SigType2074=Serial +OutputList3Cue2075=[~UNUSED3~] +OutputList3SigType2075=Serial +OutputList3Cue2076=[~UNUSED3~] +OutputList3SigType2076=Serial +OutputList3Cue2077=[~UNUSED3~] +OutputList3SigType2077=Serial +OutputList3Cue2078=[~UNUSED3~] +OutputList3SigType2078=Serial +OutputList3Cue2079=[~UNUSED3~] +OutputList3SigType2079=Serial +OutputList3Cue2080=[~UNUSED3~] +OutputList3SigType2080=Serial +OutputList3Cue2081=[~UNUSED3~] +OutputList3SigType2081=Serial +OutputList3Cue2082=[~UNUSED3~] +OutputList3SigType2082=Serial +OutputList3Cue2083=[~UNUSED3~] +OutputList3SigType2083=Serial +OutputList3Cue2084=[~UNUSED3~] +OutputList3SigType2084=Serial +OutputList3Cue2085=[~UNUSED3~] +OutputList3SigType2085=Serial +OutputList3Cue2086=[~UNUSED3~] +OutputList3SigType2086=Serial +OutputList3Cue2087=[~UNUSED3~] +OutputList3SigType2087=Serial +OutputList3Cue2088=[~UNUSED3~] +OutputList3SigType2088=Serial +OutputList3Cue2089=[~UNUSED3~] +OutputList3SigType2089=Serial +OutputList3Cue2090=[~UNUSED3~] +OutputList3SigType2090=Serial +OutputList3Cue2091=[~UNUSED3~] +OutputList3SigType2091=Serial +OutputList3Cue2092=[~UNUSED3~] +OutputList3SigType2092=Serial +OutputList3Cue2093=[~UNUSED3~] +OutputList3SigType2093=Serial +OutputList3Cue2094=[~UNUSED3~] +OutputList3SigType2094=Serial +OutputList3Cue2095=[~UNUSED3~] +OutputList3SigType2095=Serial +OutputList3Cue2096=[~UNUSED3~] +OutputList3SigType2096=Serial +OutputList3Cue2097=[~UNUSED3~] +OutputList3SigType2097=Serial +OutputList3Cue2098=[~UNUSED3~] +OutputList3SigType2098=Serial +OutputList3Cue2099=[~UNUSED3~] +OutputList3SigType2099=Serial +OutputList3Cue2100=[~UNUSED3~] +OutputList3SigType2100=Serial +OutputList3Cue2101=[~UNUSED3~] +OutputList3SigType2101=Serial +OutputList3Cue2102=[~UNUSED3~] +OutputList3SigType2102=Serial +OutputList3Cue2103=[~UNUSED3~] +OutputList3SigType2103=Serial +OutputList3Cue2104=[~UNUSED3~] +OutputList3SigType2104=Serial +OutputList3Cue2105=[~UNUSED3~] +OutputList3SigType2105=Serial +OutputList3Cue2106=[~UNUSED3~] +OutputList3SigType2106=Serial +OutputList3Cue2107=[~UNUSED3~] +OutputList3SigType2107=Serial +OutputList3Cue2108=[~UNUSED3~] +OutputList3SigType2108=Serial +OutputList3Cue2109=[~UNUSED3~] +OutputList3SigType2109=Serial +OutputList3Cue2110=[~UNUSED3~] +OutputList3SigType2110=Serial +OutputList3Cue2111=[~UNUSED3~] +OutputList3SigType2111=Serial +OutputList3Cue2112=[~UNUSED3~] +OutputList3SigType2112=Serial +OutputList3Cue2113=[~UNUSED3~] +OutputList3SigType2113=Serial +OutputList3Cue2114=[~UNUSED3~] +OutputList3SigType2114=Serial +OutputList3Cue2115=[~UNUSED3~] +OutputList3SigType2115=Serial +OutputList3Cue2116=[~UNUSED3~] +OutputList3SigType2116=Serial +OutputList3Cue2117=[~UNUSED3~] +OutputList3SigType2117=Serial +OutputList3Cue2118=[~UNUSED3~] +OutputList3SigType2118=Serial +OutputList3Cue2119=[~UNUSED3~] +OutputList3SigType2119=Serial +OutputList3Cue2120=[~UNUSED3~] +OutputList3SigType2120=Serial +OutputList3Cue2121=[~UNUSED3~] +OutputList3SigType2121=Serial +OutputList3Cue2122=[~UNUSED3~] +OutputList3SigType2122=Serial +OutputList3Cue2123=[~UNUSED3~] +OutputList3SigType2123=Serial +OutputList3Cue2124=[~UNUSED3~] +OutputList3SigType2124=Serial +OutputList3Cue2125=[~UNUSED3~] +OutputList3SigType2125=Serial +OutputList3Cue2126=[~UNUSED3~] +OutputList3SigType2126=Serial +OutputList3Cue2127=[~UNUSED3~] +OutputList3SigType2127=Serial +OutputList3Cue2128=[~UNUSED3~] +OutputList3SigType2128=Serial +OutputList3Cue2129=[~UNUSED3~] +OutputList3SigType2129=Serial +OutputList3Cue2130=[~UNUSED3~] +OutputList3SigType2130=Serial +OutputList3Cue2131=[~UNUSED3~] +OutputList3SigType2131=Serial +OutputList3Cue2132=[~UNUSED3~] +OutputList3SigType2132=Serial +OutputList3Cue2133=[~UNUSED3~] +OutputList3SigType2133=Serial +OutputList3Cue2134=[~UNUSED3~] +OutputList3SigType2134=Serial +OutputList3Cue2135=[~UNUSED3~] +OutputList3SigType2135=Serial +OutputList3Cue2136=[~UNUSED3~] +OutputList3SigType2136=Serial +OutputList3Cue2137=[~UNUSED3~] +OutputList3SigType2137=Serial +OutputList3Cue2138=[~UNUSED3~] +OutputList3SigType2138=Serial +OutputList3Cue2139=[~UNUSED3~] +OutputList3SigType2139=Serial +OutputList3Cue2140=[~UNUSED3~] +OutputList3SigType2140=Serial +OutputList3Cue2141=[~UNUSED3~] +OutputList3SigType2141=Serial +OutputList3Cue2142=[~UNUSED3~] +OutputList3SigType2142=Serial +OutputList3Cue2143=[~UNUSED3~] +OutputList3SigType2143=Serial +OutputList3Cue2144=[~UNUSED3~] +OutputList3SigType2144=Serial +OutputList3Cue2145=[~UNUSED3~] +OutputList3SigType2145=Serial +OutputList3Cue2146=[~UNUSED3~] +OutputList3SigType2146=Serial +OutputList3Cue2147=[~UNUSED3~] +OutputList3SigType2147=Serial +OutputList3Cue2148=[~UNUSED3~] +OutputList3SigType2148=Serial +OutputList3Cue2149=[~UNUSED3~] +OutputList3SigType2149=Serial +OutputList3Cue2150=[~UNUSED3~] +OutputList3SigType2150=Serial +OutputList3Cue2151=[~UNUSED3~] +OutputList3SigType2151=Serial +OutputList3Cue2152=[~UNUSED3~] +OutputList3SigType2152=Serial +OutputList3Cue2153=[~UNUSED3~] +OutputList3SigType2153=Serial +OutputList3Cue2154=[~UNUSED3~] +OutputList3SigType2154=Serial +OutputList3Cue2155=[~UNUSED3~] +OutputList3SigType2155=Serial +OutputList3Cue2156=[~UNUSED3~] +OutputList3SigType2156=Serial +OutputList3Cue2157=[~UNUSED3~] +OutputList3SigType2157=Serial +OutputList3Cue2158=[~UNUSED3~] +OutputList3SigType2158=Serial +OutputList3Cue2159=[~UNUSED3~] +OutputList3SigType2159=Serial +OutputList3Cue2160=[~UNUSED3~] +OutputList3SigType2160=Serial +OutputList3Cue2161=[~UNUSED3~] +OutputList3SigType2161=Serial +OutputList3Cue2162=[~UNUSED3~] +OutputList3SigType2162=Serial +OutputList3Cue2163=[~UNUSED3~] +OutputList3SigType2163=Serial +OutputList3Cue2164=[~UNUSED3~] +OutputList3SigType2164=Serial +OutputList3Cue2165=[~UNUSED3~] +OutputList3SigType2165=Serial +OutputList3Cue2166=[~UNUSED3~] +OutputList3SigType2166=Serial +OutputList3Cue2167=[~UNUSED3~] +OutputList3SigType2167=Serial +OutputList3Cue2168=[~UNUSED3~] +OutputList3SigType2168=Serial +OutputList3Cue2169=[~UNUSED3~] +OutputList3SigType2169=Serial +OutputList3Cue2170=[~UNUSED3~] +OutputList3SigType2170=Serial +OutputList3Cue2171=[~UNUSED3~] +OutputList3SigType2171=Serial +OutputList3Cue2172=[~UNUSED3~] +OutputList3SigType2172=Serial +OutputList3Cue2173=[~UNUSED3~] +OutputList3SigType2173=Serial +OutputList3Cue2174=[~UNUSED3~] +OutputList3SigType2174=Serial +OutputList3Cue2175=[~UNUSED3~] +OutputList3SigType2175=Serial +OutputList3Cue2176=[~UNUSED3~] +OutputList3SigType2176=Serial +OutputList3Cue2177=[~UNUSED3~] +OutputList3SigType2177=Serial +OutputList3Cue2178=[~UNUSED3~] +OutputList3SigType2178=Serial +OutputList3Cue2179=[~UNUSED3~] +OutputList3SigType2179=Serial +OutputList3Cue2180=[~UNUSED3~] +OutputList3SigType2180=Serial +OutputList3Cue2181=[~UNUSED3~] +OutputList3SigType2181=Serial +OutputList3Cue2182=[~UNUSED3~] +OutputList3SigType2182=Serial +OutputList3Cue2183=[~UNUSED3~] +OutputList3SigType2183=Serial +OutputList3Cue2184=[~UNUSED3~] +OutputList3SigType2184=Serial +OutputList3Cue2185=[~UNUSED3~] +OutputList3SigType2185=Serial +OutputList3Cue2186=[~UNUSED3~] +OutputList3SigType2186=Serial +OutputList3Cue2187=[~UNUSED3~] +OutputList3SigType2187=Serial +OutputList3Cue2188=[~UNUSED3~] +OutputList3SigType2188=Serial +OutputList3Cue2189=[~UNUSED3~] +OutputList3SigType2189=Serial +OutputList3Cue2190=[~UNUSED3~] +OutputList3SigType2190=Serial +OutputList3Cue2191=[~UNUSED3~] +OutputList3SigType2191=Serial +OutputList3Cue2192=[~UNUSED3~] +OutputList3SigType2192=Serial +OutputList3Cue2193=[~UNUSED3~] +OutputList3SigType2193=Serial +OutputList3Cue2194=[~UNUSED3~] +OutputList3SigType2194=Serial +OutputList3Cue2195=[~UNUSED3~] +OutputList3SigType2195=Serial +OutputList3Cue2196=[~UNUSED3~] +OutputList3SigType2196=Serial +OutputList3Cue2197=[~UNUSED3~] +OutputList3SigType2197=Serial +OutputList3Cue2198=[~UNUSED3~] +OutputList3SigType2198=Serial +OutputList3Cue2199=[~UNUSED3~] +OutputList3SigType2199=Serial +OutputList3Cue2200=[~UNUSED3~] +OutputList3SigType2200=Serial +OutputList3Cue2201=[~UNUSED3~] +OutputList3SigType2201=Serial +OutputList3Cue2202=[~UNUSED3~] +OutputList3SigType2202=Serial +OutputList3Cue2203=[~UNUSED3~] +OutputList3SigType2203=Serial +OutputList3Cue2204=[~UNUSED3~] +OutputList3SigType2204=Serial +OutputList3Cue2205=[~UNUSED3~] +OutputList3SigType2205=Serial +OutputList3Cue2206=[~UNUSED3~] +OutputList3SigType2206=Serial +OutputList3Cue2207=[~UNUSED3~] +OutputList3SigType2207=Serial +OutputList3Cue2208=[~UNUSED3~] +OutputList3SigType2208=Serial +OutputList3Cue2209=[~UNUSED3~] +OutputList3SigType2209=Serial +OutputList3Cue2210=[~UNUSED3~] +OutputList3SigType2210=Serial +OutputList3Cue2211=[~UNUSED3~] +OutputList3SigType2211=Serial +OutputList3Cue2212=[~UNUSED3~] +OutputList3SigType2212=Serial +OutputList3Cue2213=[~UNUSED3~] +OutputList3SigType2213=Serial +OutputList3Cue2214=[~UNUSED3~] +OutputList3SigType2214=Serial +OutputList3Cue2215=[~UNUSED3~] +OutputList3SigType2215=Serial +OutputList3Cue2216=[~UNUSED3~] +OutputList3SigType2216=Serial +OutputList3Cue2217=[~UNUSED3~] +OutputList3SigType2217=Serial +OutputList3Cue2218=[~UNUSED3~] +OutputList3SigType2218=Serial +OutputList3Cue2219=[~UNUSED3~] +OutputList3SigType2219=Serial +OutputList3Cue2220=[~UNUSED3~] +OutputList3SigType2220=Serial +OutputList3Cue2221=[~UNUSED3~] +OutputList3SigType2221=Serial +OutputList3Cue2222=[~UNUSED3~] +OutputList3SigType2222=Serial +OutputList3Cue2223=[~UNUSED3~] +OutputList3SigType2223=Serial +OutputList3Cue2224=[~UNUSED3~] +OutputList3SigType2224=Serial +OutputList3Cue2225=[~UNUSED3~] +OutputList3SigType2225=Serial +OutputList3Cue2226=[~UNUSED3~] +OutputList3SigType2226=Serial +OutputList3Cue2227=[~UNUSED3~] +OutputList3SigType2227=Serial +OutputList3Cue2228=[~UNUSED3~] +OutputList3SigType2228=Serial +OutputList3Cue2229=[~UNUSED3~] +OutputList3SigType2229=Serial +OutputList3Cue2230=[~UNUSED3~] +OutputList3SigType2230=Serial +OutputList3Cue2231=[~UNUSED3~] +OutputList3SigType2231=Serial +OutputList3Cue2232=[~UNUSED3~] +OutputList3SigType2232=Serial +OutputList3Cue2233=[~UNUSED3~] +OutputList3SigType2233=Serial +OutputList3Cue2234=[~UNUSED3~] +OutputList3SigType2234=Serial +OutputList3Cue2235=[~UNUSED3~] +OutputList3SigType2235=Serial +OutputList3Cue2236=[~UNUSED3~] +OutputList3SigType2236=Serial +OutputList3Cue2237=[~UNUSED3~] +OutputList3SigType2237=Serial +OutputList3Cue2238=[~UNUSED3~] +OutputList3SigType2238=Serial +OutputList3Cue2239=[~UNUSED3~] +OutputList3SigType2239=Serial +OutputList3Cue2240=[~UNUSED3~] +OutputList3SigType2240=Serial +OutputList3Cue2241=[~UNUSED3~] +OutputList3SigType2241=Serial +OutputList3Cue2242=[~UNUSED3~] +OutputList3SigType2242=Serial +OutputList3Cue2243=[~UNUSED3~] +OutputList3SigType2243=Serial +OutputList3Cue2244=[~UNUSED3~] +OutputList3SigType2244=Serial +OutputList3Cue2245=[~UNUSED3~] +OutputList3SigType2245=Serial +OutputList3Cue2246=[~UNUSED3~] +OutputList3SigType2246=Serial +OutputList3Cue2247=[~UNUSED3~] +OutputList3SigType2247=Serial +OutputList3Cue2248=[~UNUSED3~] +OutputList3SigType2248=Serial +OutputList3Cue2249=[~UNUSED3~] +OutputList3SigType2249=Serial +OutputList3Cue2250=[~UNUSED3~] +OutputList3SigType2250=Serial +OutputList3Cue2251=[~UNUSED3~] +OutputList3SigType2251=Serial +OutputList3Cue2252=[~UNUSED3~] +OutputList3SigType2252=Serial +OutputList3Cue2253=[~UNUSED3~] +OutputList3SigType2253=Serial +OutputList3Cue2254=[~UNUSED3~] +OutputList3SigType2254=Serial +OutputList3Cue2255=[~UNUSED3~] +OutputList3SigType2255=Serial +OutputList3Cue2256=[~UNUSED3~] +OutputList3SigType2256=Serial +OutputList3Cue2257=[~UNUSED3~] +OutputList3SigType2257=Serial +OutputList3Cue2258=[~UNUSED3~] +OutputList3SigType2258=Serial +OutputList3Cue2259=[~UNUSED3~] +OutputList3SigType2259=Serial +OutputList3Cue2260=[~UNUSED3~] +OutputList3SigType2260=Serial +OutputList3Cue2261=[~UNUSED3~] +OutputList3SigType2261=Serial +OutputList3Cue2262=[~UNUSED3~] +OutputList3SigType2262=Serial +OutputList3Cue2263=[~UNUSED3~] +OutputList3SigType2263=Serial +OutputList3Cue2264=[~UNUSED3~] +OutputList3SigType2264=Serial +OutputList3Cue2265=[~UNUSED3~] +OutputList3SigType2265=Serial +OutputList3Cue2266=[~UNUSED3~] +OutputList3SigType2266=Serial +OutputList3Cue2267=[~UNUSED3~] +OutputList3SigType2267=Serial +OutputList3Cue2268=[~UNUSED3~] +OutputList3SigType2268=Serial +OutputList3Cue2269=[~UNUSED2~] +OutputList3SigType2269=Digital|Analog|Serial|String +OutputList3Cue4014=[~EndGroup~]Item Icons +OutputList3SigType4014=Serial +ParamCue1=SmartObjectId +ParamSigType1=Constant +MPp=1 +Pp1=2 +CedH=2 +SmartObjId=1202d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=2 +Tp=1 +HD=TRUE +DV=1202d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=2 +Name=PepperDash Essentials TSW-760_[D.VC] Directory_Directory List.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 TSW-760_[D.VC] Keypad with favorites_VC DTMF Keypad.ced +Hint=VC DTMF Keypad (Smart Object ID=1201) +Code=3 +SGControlType=Simple Keypad +SGControlName=VC DTMF Keypad +GUID=B4D53525-26EF-4326-8234-1D53F6E9BF04 +SmplCName=PepperDash Essentials TSW-760_[D.VC] Keypad with favorites_VC 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=3 +CedH=3 +SmartObjId=1201d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=3 +Tp=1 +HD=TRUE +DV=1201d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=3 +Name=PepperDash Essentials TSW-760_[D.VC] Keypad with favorites_VC 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 TSW-760_[Z.Dialogs] PIN_PIN Keypad.ced +Hint=PIN Keypad (Smart Object ID=3903) +Code=4 +SGControlType=Simple Keypad +SGControlName=PIN Keypad +GUID=D85E5DFB-DE45-45FE-93C5-2FA177B68BFB +SmplCName=PepperDash Essentials TSW-760_[Z.Dialogs] PIN_PIN 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=4 +CedH=4 +SmartObjId=3903d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=4 +Tp=1 +HD=TRUE +DV=3903d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=4 +Name=PepperDash Essentials TSW-760_[Z.Dialogs] PIN_PIN 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 TSW-760_[E.Technician Controls] Sys Status_Subpage Reference List Vertical_3.ced +Hint=Subpage Reference List Vertical_3 (Smart Object ID=3902) +Code=5 +SGControlType=Subpage Reference List Vertical +SGControlName=Subpage Reference List Vertical_3 +GUID=3490D547-0B98-444B-A284-D6C1BAB2FDCE +SmplCName=PepperDash Essentials TSW-760_[E.Technician Controls] Sys Status_Subpage Reference List Vertical_3.ced +SMWRev=4.02.20 +Expand=expand_random +HelpID=10125 +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=5 +CedH=5 +SmartObjId=3902d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=5 +Tp=1 +HD=TRUE +DV=3902d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=5 +Name=PepperDash Essentials TSW-760_[E.Technician Controls] Sys Status_Subpage Reference List Vertical_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 TSW-760_[E.Technician Controls] Display Controls_Subpage Reference List Vertical_4.ced +Hint=Subpage Reference List Vertical_4 (Smart Object ID=3904) +Code=6 +SGControlType=Subpage Reference List Vertical +SGControlName=Subpage Reference List Vertical_4 +GUID=AC10DF35-3FD4-4F62-9708-0A06AE7A5A14 +SmplCName=PepperDash Essentials TSW-760_[E.Technician Controls] Display Controls_Subpage Reference List Vertical_4.ced +SMWRev=4.02.20 +Expand=expand_random +HelpID=10125 +Render=8 +;Define the number of inputs, outputs and parameters +MinVariableInputs=4116 +MaxVariableInputs=4116 +MinVariableOutputs=4116 +MaxVariableOutputs=4116 +NumFixedParams=1 +MinVariableInputsList2=42 +MaxVariableInputsList2=42 +MinVariableOutputsList2=42 +MaxVariableOutputsList2=42 +MinVariableInputsList3=42 +MaxVariableInputsList3=42 +MinVariableOutputsList3=42 +MaxVariableOutputsList3=42 +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=[~UNUSED2~] +InputSigType22=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=[~UNUSED2~] +InputSigType2024=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=[~EndGroup~]fb +InputSigType4116=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=[~UNUSED2~] +OutputSigType22=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=[~UNUSED2~] +OutputSigType2024=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=[~EndGroup~]Press +OutputSigType4116=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=[~EndGroup~]an_fb +InputList2SigType42=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=[~EndGroup~]an_act +OutputList2SigType42=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=[~EndGroup~]text-o +InputList3SigType42=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=[~EndGroup~]text-i +OutputList3SigType42=Serial +ParamCue1=SmartObjectId +ParamSigType1=Constant +MPp=1 +Pp1=6 +CedH=6 +SmartObjId=3904d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=6 +Tp=1 +HD=TRUE +DV=3904d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=6 +Name=PepperDash Essentials TSW-760_[E.Technician Controls] Display Controls_Subpage Reference List Vertical_4.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 TSW-760_[B.AV] Staging_Subpage Reference List Horizontal_3.ced +Hint=Subpage Reference List Horizontal_3 (Smart Object ID=3200) +Code=7 +SGControlType=Subpage Reference List Horizontal +SGControlName=Subpage Reference List Horizontal_3 +GUID=D638D437-6722-43E1-B435-EF13DCE5ECF0 +SmplCName=PepperDash Essentials TSW-760_[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=7 +CedH=7 +SmartObjId=3200d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=7 +Tp=1 +HD=TRUE +DV=3200d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=7 +Name=PepperDash Essentials TSW-760_[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 TSW-760_[B.AV] Source Ctrl-CATV-Basic_Channel Preset List Basic.ced +Hint=Channel Preset List Basic (Smart Object ID=1806) +Code=8 +SGControlType=Subpage Reference List Vertical +SGControlName=Channel Preset List Basic +GUID=46C43CE4-6BB9-4B76-A13E-B4279202F998 +SmplCName=PepperDash Essentials TSW-760_[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=8 +CedH=8 +SmartObjId=1806d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=8 +Tp=1 +HD=TRUE +DV=1806d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=8 +Name=PepperDash Essentials TSW-760_[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 TSW-760_[A.Global] Activity Footer SRL_Modes Bottom Bar SRL.ced +Hint=Modes Bottom Bar SRL (Smart Object ID=15022) +Code=9 +SGControlType=Subpage Reference List Horizontal +SGControlName=Modes Bottom Bar SRL +GUID=812FF0C4-486D-4ABC-90FA-405F19104323 +SmplCName=PepperDash Essentials TSW-760_[A.Global] Activity 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=9 +CedH=9 +SmartObjId=15022d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=9 +Tp=1 +HD=TRUE +DV=15022d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=9 +Name=PepperDash Essentials TSW-760_[A.Global] Activity 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 TSW-760_[B.AV] Object - Presets_CATV Icon List Vertical.ced +Hint=CATV Icon List Vertical (Smart Object ID=10012) +Code=10 +SGControlType=Subpage Reference List Vertical +SGControlName=CATV Icon List Vertical +GUID=B34C4DC0-DD10-4C49-AEBA-F968934EFDC6 +SmplCName=PepperDash Essentials TSW-760_[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=10 +CedH=10 +SmartObjId=10012d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=10 +Tp=1 +HD=TRUE +DV=10012d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=10 +Name=PepperDash Essentials TSW-760_[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 TSW-760_[B.AV] Object - DPad STB_STB DPad.ced +Hint=STB DPad (Smart Object ID=10011) +Code=11 +SGControlType=DPad +SGControlName=STB DPad +GUID=F2340FAD-85E9-4E49-B46E-15E9B096F58B +SmplCName=PepperDash Essentials TSW-760_[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=11 +CedH=11 +SmartObjId=10011d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=11 +Tp=1 +HD=TRUE +DV=10011d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=11 +Name=PepperDash Essentials TSW-760_[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 TSW-760_[B.AV] Object - Tab SetTopBox_Tab Button Horizontal.ced +Hint=Tab Button Horizontal (Smart Object ID=10081) +Code=12 +SGControlType=Horizontal Tab Button +SGControlName=Tab Button Horizontal +GUID=198C97B0-9D0C-46C2-9557-27EA33C0BE9F +SmplCName=PepperDash Essentials TSW-760_[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=12 +CedH=12 +SmartObjId=10081d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=12 +Tp=1 +HD=TRUE +DV=10081d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=12 +Name=PepperDash Essentials TSW-760_[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 TSW-760_[B.AV] Object - Dpad DVD_DVD DPad.ced +Hint=DVD DPad (Smart Object ID=10411) +Code=13 +SGControlType=DPad +SGControlName=DVD DPad +GUID=D49BCF22-C770-4146-93E6-00867D885E1E +SmplCName=PepperDash Essentials TSW-760_[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=13 +CedH=13 +SmartObjId=10411d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=13 +Tp=1 +HD=TRUE +DV=10411d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=13 +Name=PepperDash Essentials TSW-760_[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 TSW-760_[B.AV] Source-Set Top Box Backer_CATV Keypad.ced +Hint=CATV Keypad (Smart Object ID=10014) +Code=14 +SGControlType=Simple Keypad +SGControlName=CATV Keypad +GUID=5E33D4F4-5C5F-430C-879A-AE82529B3943 +SmplCName=PepperDash Essentials TSW-760_[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=14 +CedH=14 +SmartObjId=10014d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=14 +Tp=1 +HD=TRUE +DV=10014d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=14 +Name=PepperDash Essentials TSW-760_[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 +] +;================================================================================ +[ +ObjTp=Symbol +Name=PepperDash Essentials TSW-760_[B.AV] Source-Set Top Box Backer_CATV Icon List Vertical.ced +Hint=CATV Icon List Vertical (Smart Object ID=3333) +Code=15 +SGControlType=Subpage Reference List Vertical +SGControlName=CATV Icon List Vertical +GUID=D6A79678-BAD2-4F6D-8104-A941FBA9432F +SmplCName=PepperDash Essentials TSW-760_[B.AV] Source-Set Top Box Backer_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=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=15 +CedH=15 +SmartObjId=3333d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=15 +Tp=1 +HD=TRUE +DV=3333d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=15 +Name=PepperDash Essentials TSW-760_[B.AV] Source-Set Top Box Backer_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 TSW-760_[Z.Dialogs] Call List_Subpage Reference List Vertical_2.ced +Hint=Subpage Reference List Vertical_2 (Smart Object ID=1001) +Code=16 +SGControlType=Subpage Reference List Vertical +SGControlName=Subpage Reference List Vertical_2 +GUID=5F63F5C2-A987-4957-9243-C28805CE297E +SmplCName=PepperDash Essentials TSW-760_[Z.Dialogs] Call List_Subpage Reference List Vertical_2.ced +SMWRev=4.02.20 +Expand=expand_random +HelpID=10125 +Render=8 +;Define the number of inputs, outputs and parameters +MinVariableInputs=4036 +MaxVariableInputs=4036 +MinVariableOutputs=4036 +MaxVariableOutputs=4036 +NumFixedParams=1 +MinVariableInputsList2=32 +MaxVariableInputsList2=32 +MinVariableOutputsList2=32 +MaxVariableOutputsList2=32 +MinVariableInputsList3=32 +MaxVariableInputsList3=32 +MinVariableOutputsList3=32 +MaxVariableOutputsList3=32 +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=[~UNUSED2~] +InputSigType16=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=[~UNUSED2~] +InputSigType2018=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=[~EndGroup~]fb +InputSigType4036=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=[~UNUSED2~] +OutputSigType16=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=[~UNUSED2~] +OutputSigType2018=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=[~EndGroup~]Press +OutputSigType4036=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=[~EndGroup~]an_fb +InputList2SigType32=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=[~EndGroup~]an_act +OutputList2SigType32=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=[~EndGroup~]text-o +InputList3SigType32=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=[~EndGroup~]text-i +OutputList3SigType32=Serial +ParamCue1=SmartObjectId +ParamSigType1=Constant +MPp=1 +Pp1=16 +CedH=16 +SmartObjId=1001d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=16 +Tp=1 +HD=TRUE +DV=1001d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=16 +Name=PepperDash Essentials TSW-760_[Z.Dialogs] Call List_Subpage Reference List Vertical_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 TSW-760_[E.Technician Controls] Menu_Dynamic Button List Vertical.ced +Hint=Dynamic Button List Vertical (Smart Object ID=3901) +Code=17 +SGControlType=Dynamic Button List Vertical +SGControlName=Dynamic Button List Vertical +GUID=15B95903-FB30-472E-9D10-82A9C3A9D7C7 +SmplCName=PepperDash Essentials TSW-760_[E.Technician Controls] Menu_Dynamic Button List Vertical.ced +SMWRev=4.02.20 +Expand=expand_random +HelpID=10112 +Render=8 +;Define the number of inputs, outputs and parameters +MinVariableInputs=6016 +MaxVariableInputs=6016 +MinVariableOutputs=6016 +MaxVariableOutputs=6016 +NumFixedParams=1 +MinVariableInputsList2=2012 +MaxVariableInputsList2=2012 +MinVariableOutputsList2=2012 +MaxVariableOutputsList2=2012 +MinVariableInputsList3=4014 +MaxVariableInputsList3=4014 +MinVariableOutputsList3=4014 +MaxVariableOutputsList3=4014 +InputSigType1=Digital +OutputSigType1=Digital +InputList2SigType1=Analog +OutputList2SigType1=Analog +InputList3SigType1=Serial +OutputList3SigType1=Serial + +;Define the cues, and signal types each input, output and parameter. +InputCue1=Disable Redraw +InputSigType1=Digital +InputCue2=[~UNUSED3~] +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~]Press +InputSigType11=Digital +InputCue12=Item 1 Selected +InputSigType12=Digital +InputCue13=Item 2 Selected +InputSigType13=Digital +InputCue14=Item 3 Selected +InputSigType14=Digital +InputCue15=Item 4 Selected +InputSigType15=Digital +InputCue16=Item 5 Selected +InputSigType16=Digital +InputCue17=Item 6 Selected +InputSigType17=Digital +InputCue18=Item 7 Selected +InputSigType18=Digital +InputCue19=Item 8 Selected +InputSigType19=Digital +InputCue20=Item 9 Selected +InputSigType20=Digital +InputCue21=Item 10 Selected +InputSigType21=Digital +InputCue22=[~UNUSED2~] +InputSigType22=Digital|Analog|Serial|String +InputCue2012=[~EndGroup~]Press +InputSigType2012=Digital +InputCue2013=[~BeginGroup~]Enable +InputSigType2013=Digital +InputCue2014=Item 1 Enabled +InputSigType2014=Digital +InputCue2015=Item 2 Enabled +InputSigType2015=Digital +InputCue2016=Item 3 Enabled +InputSigType2016=Digital +InputCue2017=Item 4 Enabled +InputSigType2017=Digital +InputCue2018=Item 5 Enabled +InputSigType2018=Digital +InputCue2019=Item 6 Enabled +InputSigType2019=Digital +InputCue2020=Item 7 Enabled +InputSigType2020=Digital +InputCue2021=Item 8 Enabled +InputSigType2021=Digital +InputCue2022=Item 9 Enabled +InputSigType2022=Digital +InputCue2023=Item 10 Enabled +InputSigType2023=Digital +InputCue2024=[~UNUSED2~] +InputSigType2024=Digital|Analog|Serial|String +InputCue4014=[~EndGroup~]Enable +InputSigType4014=Digital +InputCue4015=[~BeginGroup~]Visible +InputSigType4015=Digital +InputCue4016=Item 1 Visible +InputSigType4016=Digital +InputCue4017=Item 2 Visible +InputSigType4017=Digital +InputCue4018=Item 3 Visible +InputSigType4018=Digital +InputCue4019=Item 4 Visible +InputSigType4019=Digital +InputCue4020=Item 5 Visible +InputSigType4020=Digital +InputCue4021=Item 6 Visible +InputSigType4021=Digital +InputCue4022=Item 7 Visible +InputSigType4022=Digital +InputCue4023=Item 8 Visible +InputSigType4023=Digital +InputCue4024=Item 9 Visible +InputSigType4024=Digital +InputCue4025=Item 10 Visible +InputSigType4025=Digital +InputCue4026=[~UNUSED2~] +InputSigType4026=Digital|Analog|Serial|String +InputCue6016=[~EndGroup~]Visible +InputSigType6016=Digital +OutputCue1=[~UNUSED3~] +OutputSigType1=Digital +OutputCue2=Is Moving +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~]Press +OutputSigType11=Digital +OutputCue12=Item 1 Pressed +OutputSigType12=Digital +OutputCue13=Item 2 Pressed +OutputSigType13=Digital +OutputCue14=Item 3 Pressed +OutputSigType14=Digital +OutputCue15=Item 4 Pressed +OutputSigType15=Digital +OutputCue16=Item 5 Pressed +OutputSigType16=Digital +OutputCue17=Item 6 Pressed +OutputSigType17=Digital +OutputCue18=Item 7 Pressed +OutputSigType18=Digital +OutputCue19=Item 8 Pressed +OutputSigType19=Digital +OutputCue20=Item 9 Pressed +OutputSigType20=Digital +OutputCue21=Item 10 Pressed +OutputSigType21=Digital +OutputCue22=[~UNUSED2~] +OutputSigType22=Digital|Analog|Serial|String +OutputCue2012=[~EndGroup~]Press +OutputSigType2012=Digital +OutputCue2013=[~BeginGroup~]Enable +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=[~UNUSED2~] +OutputSigType2024=Digital|Analog|Serial|String +OutputCue4014=[~EndGroup~]Enable +OutputSigType4014=Digital +OutputCue4015=[~BeginGroup~]Visible +OutputSigType4015=Digital +OutputCue4016=[~UNUSED3~] +OutputSigType4016=Digital +OutputCue4017=[~UNUSED3~] +OutputSigType4017=Digital +OutputCue4018=[~UNUSED3~] +OutputSigType4018=Digital +OutputCue4019=[~UNUSED3~] +OutputSigType4019=Digital +OutputCue4020=[~UNUSED3~] +OutputSigType4020=Digital +OutputCue4021=[~UNUSED3~] +OutputSigType4021=Digital +OutputCue4022=[~UNUSED3~] +OutputSigType4022=Digital +OutputCue4023=[~UNUSED3~] +OutputSigType4023=Digital +OutputCue4024=[~UNUSED3~] +OutputSigType4024=Digital +OutputCue4025=[~UNUSED3~] +OutputSigType4025=Digital +OutputCue4026=[~UNUSED2~] +OutputSigType4026=Digital|Analog|Serial|String +OutputCue6016=[~EndGroup~]Visible +OutputSigType6016=Digital +InputList2Cue1=[~UNUSED3~] +InputList2SigType1=Analog +InputList2Cue2=[~UNUSED3~] +InputList2SigType2=Analog +InputList2Cue3=Scroll To Item +InputList2SigType3=Analog +InputList2Cue4=Set Number of Items +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~]Item Icons +InputList2SigType11=Analog +InputList2Cue12=Set Item 1 Icon Analog +InputList2SigType12=Analog +InputList2Cue13=Set Item 2 Icon Analog +InputList2SigType13=Analog +InputList2Cue14=Set Item 3 Icon Analog +InputList2SigType14=Analog +InputList2Cue15=Set Item 4 Icon Analog +InputList2SigType15=Analog +InputList2Cue16=Set Item 5 Icon Analog +InputList2SigType16=Analog +InputList2Cue17=Set Item 6 Icon Analog +InputList2SigType17=Analog +InputList2Cue18=Set Item 7 Icon Analog +InputList2SigType18=Analog +InputList2Cue19=Set Item 8 Icon Analog +InputList2SigType19=Analog +InputList2Cue20=Set Item 9 Icon Analog +InputList2SigType20=Analog +InputList2Cue21=Set Item 10 Icon Analog +InputList2SigType21=Analog +InputList2Cue22=[~UNUSED2~] +InputList2SigType22=Digital|Analog|Serial|String +InputList2Cue2012=[~EndGroup~]Item Icons +InputList2SigType2012=Analog +OutputList2Cue1=Item Clicked +OutputList2SigType1=Analog +OutputList2Cue2=Item Held +OutputList2SigType2=Analog +OutputList2Cue3=[~UNUSED3~] +OutputList2SigType3=Analog +OutputList2Cue4=[~UNUSED3~] +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~]Item Icons +OutputList2SigType11=Analog +OutputList2Cue12=[~UNUSED3~] +OutputList2SigType12=Analog +OutputList2Cue13=[~UNUSED3~] +OutputList2SigType13=Analog +OutputList2Cue14=[~UNUSED3~] +OutputList2SigType14=Analog +OutputList2Cue15=[~UNUSED3~] +OutputList2SigType15=Analog +OutputList2Cue16=[~UNUSED3~] +OutputList2SigType16=Analog +OutputList2Cue17=[~UNUSED3~] +OutputList2SigType17=Analog +OutputList2Cue18=[~UNUSED3~] +OutputList2SigType18=Analog +OutputList2Cue19=[~UNUSED3~] +OutputList2SigType19=Analog +OutputList2Cue20=[~UNUSED3~] +OutputList2SigType20=Analog +OutputList2Cue21=[~UNUSED3~] +OutputList2SigType21=Analog +OutputList2Cue22=[~UNUSED2~] +OutputList2SigType22=Digital|Analog|Serial|String +OutputList2Cue2012=[~EndGroup~]Item Icons +OutputList2SigType2012=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~]Item Texts +InputList3SigType11=Serial +InputList3Cue12=Set Item 1 Text +InputList3SigType12=Serial +InputList3Cue13=Set Item 2 Text +InputList3SigType13=Serial +InputList3Cue14=Set Item 3 Text +InputList3SigType14=Serial +InputList3Cue15=Set Item 4 Text +InputList3SigType15=Serial +InputList3Cue16=Set Item 5 Text +InputList3SigType16=Serial +InputList3Cue17=Set Item 6 Text +InputList3SigType17=Serial +InputList3Cue18=Set Item 7 Text +InputList3SigType18=Serial +InputList3Cue19=Set Item 8 Text +InputList3SigType19=Serial +InputList3Cue20=Set Item 9 Text +InputList3SigType20=Serial +InputList3Cue21=Set Item 10 Text +InputList3SigType21=Serial +InputList3Cue22=[~UNUSED2~] +InputList3SigType22=Digital|Analog|Serial|String +InputList3Cue2012=[~EndGroup~]Item Texts +InputList3SigType2012=Serial +InputList3Cue2013=[~BeginGroup~]Item Icons +InputList3SigType2013=Serial +InputList3Cue2014=Set Item 1 Icon Serial +InputList3SigType2014=Serial +InputList3Cue2015=Set Item 2 Icon Serial +InputList3SigType2015=Serial +InputList3Cue2016=Set Item 3 Icon Serial +InputList3SigType2016=Serial +InputList3Cue2017=Set Item 4 Icon Serial +InputList3SigType2017=Serial +InputList3Cue2018=Set Item 5 Icon Serial +InputList3SigType2018=Serial +InputList3Cue2019=Set Item 6 Icon Serial +InputList3SigType2019=Serial +InputList3Cue2020=Set Item 7 Icon Serial +InputList3SigType2020=Serial +InputList3Cue2021=Set Item 8 Icon Serial +InputList3SigType2021=Serial +InputList3Cue2022=Set Item 9 Icon Serial +InputList3SigType2022=Serial +InputList3Cue2023=Set Item 10 Icon Serial +InputList3SigType2023=Serial +InputList3Cue2024=[~UNUSED2~] +InputList3SigType2024=Digital|Analog|Serial|String +InputList3Cue4014=[~EndGroup~]Item Icons +InputList3SigType4014=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~]Item Texts +OutputList3SigType11=Serial +OutputList3Cue12=[~UNUSED3~] +OutputList3SigType12=Serial +OutputList3Cue13=[~UNUSED3~] +OutputList3SigType13=Serial +OutputList3Cue14=[~UNUSED3~] +OutputList3SigType14=Serial +OutputList3Cue15=[~UNUSED3~] +OutputList3SigType15=Serial +OutputList3Cue16=[~UNUSED3~] +OutputList3SigType16=Serial +OutputList3Cue17=[~UNUSED3~] +OutputList3SigType17=Serial +OutputList3Cue18=[~UNUSED3~] +OutputList3SigType18=Serial +OutputList3Cue19=[~UNUSED3~] +OutputList3SigType19=Serial +OutputList3Cue20=[~UNUSED3~] +OutputList3SigType20=Serial +OutputList3Cue21=[~UNUSED3~] +OutputList3SigType21=Serial +OutputList3Cue22=[~UNUSED2~] +OutputList3SigType22=Digital|Analog|Serial|String +OutputList3Cue2012=[~EndGroup~]Item Texts +OutputList3SigType2012=Serial +OutputList3Cue2013=[~BeginGroup~]Item Icons +OutputList3SigType2013=Serial +OutputList3Cue2014=[~UNUSED3~] +OutputList3SigType2014=Serial +OutputList3Cue2015=[~UNUSED3~] +OutputList3SigType2015=Serial +OutputList3Cue2016=[~UNUSED3~] +OutputList3SigType2016=Serial +OutputList3Cue2017=[~UNUSED3~] +OutputList3SigType2017=Serial +OutputList3Cue2018=[~UNUSED3~] +OutputList3SigType2018=Serial +OutputList3Cue2019=[~UNUSED3~] +OutputList3SigType2019=Serial +OutputList3Cue2020=[~UNUSED3~] +OutputList3SigType2020=Serial +OutputList3Cue2021=[~UNUSED3~] +OutputList3SigType2021=Serial +OutputList3Cue2022=[~UNUSED3~] +OutputList3SigType2022=Serial +OutputList3Cue2023=[~UNUSED3~] +OutputList3SigType2023=Serial +OutputList3Cue2024=[~UNUSED2~] +OutputList3SigType2024=Digital|Analog|Serial|String +OutputList3Cue4014=[~EndGroup~]Item Icons +OutputList3SigType4014=Serial +ParamCue1=SmartObjectId +ParamSigType1=Constant +MPp=1 +Pp1=17 +CedH=17 +SmartObjId=3901d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=17 +Tp=1 +HD=TRUE +DV=3901d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=17 +Name=PepperDash Essentials TSW-760_[E.Technician Controls] Menu_Dynamic Button 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 TSW-760_[Z.Dialogs] Schedule List_Subpage Reference List Vertical.ced +Hint=Subpage Reference List Vertical (Smart Object ID=15023) +Code=18 +SGControlType=Subpage Reference List Vertical +SGControlName=Subpage Reference List Vertical +GUID=EC6E6B35-F033-4F14-9465-FEEBE20455CC +SmplCName=PepperDash Essentials TSW-760_[Z.Dialogs] Schedule List_Subpage Reference List Vertical.ced +SMWRev=4.02.20 +Expand=expand_random +HelpID=10125 +Render=8 +;Define the number of inputs, outputs and parameters +MinVariableInputs=4052 +MaxVariableInputs=4052 +MinVariableOutputs=4052 +MaxVariableOutputs=4052 +NumFixedParams=1 +MinVariableInputsList2=48 +MaxVariableInputsList2=48 +MinVariableOutputsList2=48 +MaxVariableOutputsList2=48 +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=[~UNUSED2~] +InputSigType24=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=[~UNUSED2~] +InputSigType2026=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=[~EndGroup~]fb +InputSigType4052=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=[~UNUSED2~] +OutputSigType24=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=[~UNUSED2~] +OutputSigType2026=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=[~EndGroup~]Press +OutputSigType4052=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=[~EndGroup~]an_fb +InputList2SigType48=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=[~EndGroup~]an_act +OutputList2SigType48=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=18 +CedH=18 +SmartObjId=15023d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=18 +Tp=1 +HD=TRUE +DV=15023d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=18 +Name=PepperDash Essentials TSW-760_[Z.Dialogs] Schedule List_Subpage Reference 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 TSW-760_[D.VC] Recents_Dynamic Button List Vertical_2.ced +Hint=Dynamic Button List Vertical_2 (Smart Object ID=1203) +Code=19 +SGControlType=Dynamic Button List Vertical +SGControlName=Dynamic Button List Vertical_2 +GUID=2C4B55E4-42AC-486D-BC6E-C7DD7D24C974 +SmplCName=PepperDash Essentials TSW-760_[D.VC] Recents_Dynamic Button List Vertical_2.ced +SMWRev=4.02.20 +Expand=expand_random +HelpID=10112 +Render=8 +;Define the number of inputs, outputs and parameters +MinVariableInputs=6016 +MaxVariableInputs=6016 +MinVariableOutputs=6016 +MaxVariableOutputs=6016 +NumFixedParams=1 +MinVariableInputsList2=2012 +MaxVariableInputsList2=2012 +MinVariableOutputsList2=2012 +MaxVariableOutputsList2=2012 +MinVariableInputsList3=4014 +MaxVariableInputsList3=4014 +MinVariableOutputsList3=4014 +MaxVariableOutputsList3=4014 +InputSigType1=Digital +OutputSigType1=Digital +InputList2SigType1=Analog +OutputList2SigType1=Analog +InputList3SigType1=Serial +OutputList3SigType1=Serial + +;Define the cues, and signal types each input, output and parameter. +InputCue1=Disable Redraw +InputSigType1=Digital +InputCue2=[~UNUSED3~] +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~]Press +InputSigType11=Digital +InputCue12=Item 1 Selected +InputSigType12=Digital +InputCue13=Item 2 Selected +InputSigType13=Digital +InputCue14=Item 3 Selected +InputSigType14=Digital +InputCue15=Item 4 Selected +InputSigType15=Digital +InputCue16=Item 5 Selected +InputSigType16=Digital +InputCue17=Item 6 Selected +InputSigType17=Digital +InputCue18=Item 7 Selected +InputSigType18=Digital +InputCue19=Item 8 Selected +InputSigType19=Digital +InputCue20=Item 9 Selected +InputSigType20=Digital +InputCue21=Item 10 Selected +InputSigType21=Digital +InputCue22=Item 11 Selected +InputSigType22=Digital +InputCue23=Item 12 Selected +InputSigType23=Digital +InputCue24=Item 13 Selected +InputSigType24=Digital +InputCue25=Item 14 Selected +InputSigType25=Digital +InputCue26=Item 15 Selected +InputSigType26=Digital +InputCue27=Item 16 Selected +InputSigType27=Digital +InputCue28=Item 17 Selected +InputSigType28=Digital +InputCue29=Item 18 Selected +InputSigType29=Digital +InputCue30=Item 19 Selected +InputSigType30=Digital +InputCue31=Item 20 Selected +InputSigType31=Digital +InputCue32=Item 21 Selected +InputSigType32=Digital +InputCue33=Item 22 Selected +InputSigType33=Digital +InputCue34=Item 23 Selected +InputSigType34=Digital +InputCue35=Item 24 Selected +InputSigType35=Digital +InputCue36=Item 25 Selected +InputSigType36=Digital +InputCue37=Item 26 Selected +InputSigType37=Digital +InputCue38=Item 27 Selected +InputSigType38=Digital +InputCue39=Item 28 Selected +InputSigType39=Digital +InputCue40=Item 29 Selected +InputSigType40=Digital +InputCue41=Item 30 Selected +InputSigType41=Digital +InputCue42=[~UNUSED2~] +InputSigType42=Digital|Analog|Serial|String +InputCue2012=[~EndGroup~]Press +InputSigType2012=Digital +InputCue2013=[~BeginGroup~]Enable +InputSigType2013=Digital +InputCue2014=Item 1 Enabled +InputSigType2014=Digital +InputCue2015=Item 2 Enabled +InputSigType2015=Digital +InputCue2016=Item 3 Enabled +InputSigType2016=Digital +InputCue2017=Item 4 Enabled +InputSigType2017=Digital +InputCue2018=Item 5 Enabled +InputSigType2018=Digital +InputCue2019=Item 6 Enabled +InputSigType2019=Digital +InputCue2020=Item 7 Enabled +InputSigType2020=Digital +InputCue2021=Item 8 Enabled +InputSigType2021=Digital +InputCue2022=Item 9 Enabled +InputSigType2022=Digital +InputCue2023=Item 10 Enabled +InputSigType2023=Digital +InputCue2024=Item 11 Enabled +InputSigType2024=Digital +InputCue2025=Item 12 Enabled +InputSigType2025=Digital +InputCue2026=Item 13 Enabled +InputSigType2026=Digital +InputCue2027=Item 14 Enabled +InputSigType2027=Digital +InputCue2028=Item 15 Enabled +InputSigType2028=Digital +InputCue2029=Item 16 Enabled +InputSigType2029=Digital +InputCue2030=Item 17 Enabled +InputSigType2030=Digital +InputCue2031=Item 18 Enabled +InputSigType2031=Digital +InputCue2032=Item 19 Enabled +InputSigType2032=Digital +InputCue2033=Item 20 Enabled +InputSigType2033=Digital +InputCue2034=Item 21 Enabled +InputSigType2034=Digital +InputCue2035=Item 22 Enabled +InputSigType2035=Digital +InputCue2036=Item 23 Enabled +InputSigType2036=Digital +InputCue2037=Item 24 Enabled +InputSigType2037=Digital +InputCue2038=Item 25 Enabled +InputSigType2038=Digital +InputCue2039=Item 26 Enabled +InputSigType2039=Digital +InputCue2040=Item 27 Enabled +InputSigType2040=Digital +InputCue2041=Item 28 Enabled +InputSigType2041=Digital +InputCue2042=Item 29 Enabled +InputSigType2042=Digital +InputCue2043=Item 30 Enabled +InputSigType2043=Digital +InputCue2044=[~UNUSED2~] +InputSigType2044=Digital|Analog|Serial|String +InputCue4014=[~EndGroup~]Enable +InputSigType4014=Digital +InputCue4015=[~BeginGroup~]Visible +InputSigType4015=Digital +InputCue4016=Item 1 Visible +InputSigType4016=Digital +InputCue4017=Item 2 Visible +InputSigType4017=Digital +InputCue4018=Item 3 Visible +InputSigType4018=Digital +InputCue4019=Item 4 Visible +InputSigType4019=Digital +InputCue4020=Item 5 Visible +InputSigType4020=Digital +InputCue4021=Item 6 Visible +InputSigType4021=Digital +InputCue4022=Item 7 Visible +InputSigType4022=Digital +InputCue4023=Item 8 Visible +InputSigType4023=Digital +InputCue4024=Item 9 Visible +InputSigType4024=Digital +InputCue4025=Item 10 Visible +InputSigType4025=Digital +InputCue4026=Item 11 Visible +InputSigType4026=Digital +InputCue4027=Item 12 Visible +InputSigType4027=Digital +InputCue4028=Item 13 Visible +InputSigType4028=Digital +InputCue4029=Item 14 Visible +InputSigType4029=Digital +InputCue4030=Item 15 Visible +InputSigType4030=Digital +InputCue4031=Item 16 Visible +InputSigType4031=Digital +InputCue4032=Item 17 Visible +InputSigType4032=Digital +InputCue4033=Item 18 Visible +InputSigType4033=Digital +InputCue4034=Item 19 Visible +InputSigType4034=Digital +InputCue4035=Item 20 Visible +InputSigType4035=Digital +InputCue4036=Item 21 Visible +InputSigType4036=Digital +InputCue4037=Item 22 Visible +InputSigType4037=Digital +InputCue4038=Item 23 Visible +InputSigType4038=Digital +InputCue4039=Item 24 Visible +InputSigType4039=Digital +InputCue4040=Item 25 Visible +InputSigType4040=Digital +InputCue4041=Item 26 Visible +InputSigType4041=Digital +InputCue4042=Item 27 Visible +InputSigType4042=Digital +InputCue4043=Item 28 Visible +InputSigType4043=Digital +InputCue4044=Item 29 Visible +InputSigType4044=Digital +InputCue4045=Item 30 Visible +InputSigType4045=Digital +InputCue4046=[~UNUSED2~] +InputSigType4046=Digital|Analog|Serial|String +InputCue6016=[~EndGroup~]Visible +InputSigType6016=Digital +OutputCue1=[~UNUSED3~] +OutputSigType1=Digital +OutputCue2=Is Moving +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~]Press +OutputSigType11=Digital +OutputCue12=Item 1 Pressed +OutputSigType12=Digital +OutputCue13=Item 2 Pressed +OutputSigType13=Digital +OutputCue14=Item 3 Pressed +OutputSigType14=Digital +OutputCue15=Item 4 Pressed +OutputSigType15=Digital +OutputCue16=Item 5 Pressed +OutputSigType16=Digital +OutputCue17=Item 6 Pressed +OutputSigType17=Digital +OutputCue18=Item 7 Pressed +OutputSigType18=Digital +OutputCue19=Item 8 Pressed +OutputSigType19=Digital +OutputCue20=Item 9 Pressed +OutputSigType20=Digital +OutputCue21=Item 10 Pressed +OutputSigType21=Digital +OutputCue22=Item 11 Pressed +OutputSigType22=Digital +OutputCue23=Item 12 Pressed +OutputSigType23=Digital +OutputCue24=Item 13 Pressed +OutputSigType24=Digital +OutputCue25=Item 14 Pressed +OutputSigType25=Digital +OutputCue26=Item 15 Pressed +OutputSigType26=Digital +OutputCue27=Item 16 Pressed +OutputSigType27=Digital +OutputCue28=Item 17 Pressed +OutputSigType28=Digital +OutputCue29=Item 18 Pressed +OutputSigType29=Digital +OutputCue30=Item 19 Pressed +OutputSigType30=Digital +OutputCue31=Item 20 Pressed +OutputSigType31=Digital +OutputCue32=Item 21 Pressed +OutputSigType32=Digital +OutputCue33=Item 22 Pressed +OutputSigType33=Digital +OutputCue34=Item 23 Pressed +OutputSigType34=Digital +OutputCue35=Item 24 Pressed +OutputSigType35=Digital +OutputCue36=Item 25 Pressed +OutputSigType36=Digital +OutputCue37=Item 26 Pressed +OutputSigType37=Digital +OutputCue38=Item 27 Pressed +OutputSigType38=Digital +OutputCue39=Item 28 Pressed +OutputSigType39=Digital +OutputCue40=Item 29 Pressed +OutputSigType40=Digital +OutputCue41=Item 30 Pressed +OutputSigType41=Digital +OutputCue42=[~UNUSED2~] +OutputSigType42=Digital|Analog|Serial|String +OutputCue2012=[~EndGroup~]Press +OutputSigType2012=Digital +OutputCue2013=[~BeginGroup~]Enable +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~]Enable +OutputSigType4014=Digital +OutputCue4015=[~BeginGroup~]Visible +OutputSigType4015=Digital +OutputCue4016=[~UNUSED3~] +OutputSigType4016=Digital +OutputCue4017=[~UNUSED3~] +OutputSigType4017=Digital +OutputCue4018=[~UNUSED3~] +OutputSigType4018=Digital +OutputCue4019=[~UNUSED3~] +OutputSigType4019=Digital +OutputCue4020=[~UNUSED3~] +OutputSigType4020=Digital +OutputCue4021=[~UNUSED3~] +OutputSigType4021=Digital +OutputCue4022=[~UNUSED3~] +OutputSigType4022=Digital +OutputCue4023=[~UNUSED3~] +OutputSigType4023=Digital +OutputCue4024=[~UNUSED3~] +OutputSigType4024=Digital +OutputCue4025=[~UNUSED3~] +OutputSigType4025=Digital +OutputCue4026=[~UNUSED3~] +OutputSigType4026=Digital +OutputCue4027=[~UNUSED3~] +OutputSigType4027=Digital +OutputCue4028=[~UNUSED3~] +OutputSigType4028=Digital +OutputCue4029=[~UNUSED3~] +OutputSigType4029=Digital +OutputCue4030=[~UNUSED3~] +OutputSigType4030=Digital +OutputCue4031=[~UNUSED3~] +OutputSigType4031=Digital +OutputCue4032=[~UNUSED3~] +OutputSigType4032=Digital +OutputCue4033=[~UNUSED3~] +OutputSigType4033=Digital +OutputCue4034=[~UNUSED3~] +OutputSigType4034=Digital +OutputCue4035=[~UNUSED3~] +OutputSigType4035=Digital +OutputCue4036=[~UNUSED3~] +OutputSigType4036=Digital +OutputCue4037=[~UNUSED3~] +OutputSigType4037=Digital +OutputCue4038=[~UNUSED3~] +OutputSigType4038=Digital +OutputCue4039=[~UNUSED3~] +OutputSigType4039=Digital +OutputCue4040=[~UNUSED3~] +OutputSigType4040=Digital +OutputCue4041=[~UNUSED3~] +OutputSigType4041=Digital +OutputCue4042=[~UNUSED3~] +OutputSigType4042=Digital +OutputCue4043=[~UNUSED3~] +OutputSigType4043=Digital +OutputCue4044=[~UNUSED3~] +OutputSigType4044=Digital +OutputCue4045=[~UNUSED3~] +OutputSigType4045=Digital +OutputCue4046=[~UNUSED2~] +OutputSigType4046=Digital|Analog|Serial|String +OutputCue6016=[~EndGroup~]Visible +OutputSigType6016=Digital +InputList2Cue1=[~UNUSED3~] +InputList2SigType1=Analog +InputList2Cue2=[~UNUSED3~] +InputList2SigType2=Analog +InputList2Cue3=Scroll To Item +InputList2SigType3=Analog +InputList2Cue4=Set Number of Items +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~]Item Icons +InputList2SigType11=Analog +InputList2Cue12=Set Item 1 Icon Analog +InputList2SigType12=Analog +InputList2Cue13=Set Item 2 Icon Analog +InputList2SigType13=Analog +InputList2Cue14=Set Item 3 Icon Analog +InputList2SigType14=Analog +InputList2Cue15=Set Item 4 Icon Analog +InputList2SigType15=Analog +InputList2Cue16=Set Item 5 Icon Analog +InputList2SigType16=Analog +InputList2Cue17=Set Item 6 Icon Analog +InputList2SigType17=Analog +InputList2Cue18=Set Item 7 Icon Analog +InputList2SigType18=Analog +InputList2Cue19=Set Item 8 Icon Analog +InputList2SigType19=Analog +InputList2Cue20=Set Item 9 Icon Analog +InputList2SigType20=Analog +InputList2Cue21=Set Item 10 Icon Analog +InputList2SigType21=Analog +InputList2Cue22=Set Item 11 Icon Analog +InputList2SigType22=Analog +InputList2Cue23=Set Item 12 Icon Analog +InputList2SigType23=Analog +InputList2Cue24=Set Item 13 Icon Analog +InputList2SigType24=Analog +InputList2Cue25=Set Item 14 Icon Analog +InputList2SigType25=Analog +InputList2Cue26=Set Item 15 Icon Analog +InputList2SigType26=Analog +InputList2Cue27=Set Item 16 Icon Analog +InputList2SigType27=Analog +InputList2Cue28=Set Item 17 Icon Analog +InputList2SigType28=Analog +InputList2Cue29=Set Item 18 Icon Analog +InputList2SigType29=Analog +InputList2Cue30=Set Item 19 Icon Analog +InputList2SigType30=Analog +InputList2Cue31=Set Item 20 Icon Analog +InputList2SigType31=Analog +InputList2Cue32=Set Item 21 Icon Analog +InputList2SigType32=Analog +InputList2Cue33=Set Item 22 Icon Analog +InputList2SigType33=Analog +InputList2Cue34=Set Item 23 Icon Analog +InputList2SigType34=Analog +InputList2Cue35=Set Item 24 Icon Analog +InputList2SigType35=Analog +InputList2Cue36=Set Item 25 Icon Analog +InputList2SigType36=Analog +InputList2Cue37=Set Item 26 Icon Analog +InputList2SigType37=Analog +InputList2Cue38=Set Item 27 Icon Analog +InputList2SigType38=Analog +InputList2Cue39=Set Item 28 Icon Analog +InputList2SigType39=Analog +InputList2Cue40=Set Item 29 Icon Analog +InputList2SigType40=Analog +InputList2Cue41=Set Item 30 Icon Analog +InputList2SigType41=Analog +InputList2Cue42=[~UNUSED2~] +InputList2SigType42=Digital|Analog|Serial|String +InputList2Cue2012=[~EndGroup~]Item Icons +InputList2SigType2012=Analog +OutputList2Cue1=Item Clicked +OutputList2SigType1=Analog +OutputList2Cue2=Item Held +OutputList2SigType2=Analog +OutputList2Cue3=[~UNUSED3~] +OutputList2SigType3=Analog +OutputList2Cue4=[~UNUSED3~] +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~]Item Icons +OutputList2SigType11=Analog +OutputList2Cue12=[~UNUSED3~] +OutputList2SigType12=Analog +OutputList2Cue13=[~UNUSED3~] +OutputList2SigType13=Analog +OutputList2Cue14=[~UNUSED3~] +OutputList2SigType14=Analog +OutputList2Cue15=[~UNUSED3~] +OutputList2SigType15=Analog +OutputList2Cue16=[~UNUSED3~] +OutputList2SigType16=Analog +OutputList2Cue17=[~UNUSED3~] +OutputList2SigType17=Analog +OutputList2Cue18=[~UNUSED3~] +OutputList2SigType18=Analog +OutputList2Cue19=[~UNUSED3~] +OutputList2SigType19=Analog +OutputList2Cue20=[~UNUSED3~] +OutputList2SigType20=Analog +OutputList2Cue21=[~UNUSED3~] +OutputList2SigType21=Analog +OutputList2Cue22=[~UNUSED3~] +OutputList2SigType22=Analog +OutputList2Cue23=[~UNUSED3~] +OutputList2SigType23=Analog +OutputList2Cue24=[~UNUSED3~] +OutputList2SigType24=Analog +OutputList2Cue25=[~UNUSED3~] +OutputList2SigType25=Analog +OutputList2Cue26=[~UNUSED3~] +OutputList2SigType26=Analog +OutputList2Cue27=[~UNUSED3~] +OutputList2SigType27=Analog +OutputList2Cue28=[~UNUSED3~] +OutputList2SigType28=Analog +OutputList2Cue29=[~UNUSED3~] +OutputList2SigType29=Analog +OutputList2Cue30=[~UNUSED3~] +OutputList2SigType30=Analog +OutputList2Cue31=[~UNUSED3~] +OutputList2SigType31=Analog +OutputList2Cue32=[~UNUSED3~] +OutputList2SigType32=Analog +OutputList2Cue33=[~UNUSED3~] +OutputList2SigType33=Analog +OutputList2Cue34=[~UNUSED3~] +OutputList2SigType34=Analog +OutputList2Cue35=[~UNUSED3~] +OutputList2SigType35=Analog +OutputList2Cue36=[~UNUSED3~] +OutputList2SigType36=Analog +OutputList2Cue37=[~UNUSED3~] +OutputList2SigType37=Analog +OutputList2Cue38=[~UNUSED3~] +OutputList2SigType38=Analog +OutputList2Cue39=[~UNUSED3~] +OutputList2SigType39=Analog +OutputList2Cue40=[~UNUSED3~] +OutputList2SigType40=Analog +OutputList2Cue41=[~UNUSED3~] +OutputList2SigType41=Analog +OutputList2Cue42=[~UNUSED2~] +OutputList2SigType42=Digital|Analog|Serial|String +OutputList2Cue2012=[~EndGroup~]Item Icons +OutputList2SigType2012=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~]Item Texts +InputList3SigType11=Serial +InputList3Cue12=Set Item 1 Text +InputList3SigType12=Serial +InputList3Cue13=Set Item 2 Text +InputList3SigType13=Serial +InputList3Cue14=Set Item 3 Text +InputList3SigType14=Serial +InputList3Cue15=Set Item 4 Text +InputList3SigType15=Serial +InputList3Cue16=Set Item 5 Text +InputList3SigType16=Serial +InputList3Cue17=Set Item 6 Text +InputList3SigType17=Serial +InputList3Cue18=Set Item 7 Text +InputList3SigType18=Serial +InputList3Cue19=Set Item 8 Text +InputList3SigType19=Serial +InputList3Cue20=Set Item 9 Text +InputList3SigType20=Serial +InputList3Cue21=Set Item 10 Text +InputList3SigType21=Serial +InputList3Cue22=Set Item 11 Text +InputList3SigType22=Serial +InputList3Cue23=Set Item 12 Text +InputList3SigType23=Serial +InputList3Cue24=Set Item 13 Text +InputList3SigType24=Serial +InputList3Cue25=Set Item 14 Text +InputList3SigType25=Serial +InputList3Cue26=Set Item 15 Text +InputList3SigType26=Serial +InputList3Cue27=Set Item 16 Text +InputList3SigType27=Serial +InputList3Cue28=Set Item 17 Text +InputList3SigType28=Serial +InputList3Cue29=Set Item 18 Text +InputList3SigType29=Serial +InputList3Cue30=Set Item 19 Text +InputList3SigType30=Serial +InputList3Cue31=Set Item 20 Text +InputList3SigType31=Serial +InputList3Cue32=Set Item 21 Text +InputList3SigType32=Serial +InputList3Cue33=Set Item 22 Text +InputList3SigType33=Serial +InputList3Cue34=Set Item 23 Text +InputList3SigType34=Serial +InputList3Cue35=Set Item 24 Text +InputList3SigType35=Serial +InputList3Cue36=Set Item 25 Text +InputList3SigType36=Serial +InputList3Cue37=Set Item 26 Text +InputList3SigType37=Serial +InputList3Cue38=Set Item 27 Text +InputList3SigType38=Serial +InputList3Cue39=Set Item 28 Text +InputList3SigType39=Serial +InputList3Cue40=Set Item 29 Text +InputList3SigType40=Serial +InputList3Cue41=Set Item 30 Text +InputList3SigType41=Serial +InputList3Cue42=[~UNUSED2~] +InputList3SigType42=Digital|Analog|Serial|String +InputList3Cue2012=[~EndGroup~]Item Texts +InputList3SigType2012=Serial +InputList3Cue2013=[~BeginGroup~]Item Icons +InputList3SigType2013=Serial +InputList3Cue2014=Set Item 1 Icon Serial +InputList3SigType2014=Serial +InputList3Cue2015=Set Item 2 Icon Serial +InputList3SigType2015=Serial +InputList3Cue2016=Set Item 3 Icon Serial +InputList3SigType2016=Serial +InputList3Cue2017=Set Item 4 Icon Serial +InputList3SigType2017=Serial +InputList3Cue2018=Set Item 5 Icon Serial +InputList3SigType2018=Serial +InputList3Cue2019=Set Item 6 Icon Serial +InputList3SigType2019=Serial +InputList3Cue2020=Set Item 7 Icon Serial +InputList3SigType2020=Serial +InputList3Cue2021=Set Item 8 Icon Serial +InputList3SigType2021=Serial +InputList3Cue2022=Set Item 9 Icon Serial +InputList3SigType2022=Serial +InputList3Cue2023=Set Item 10 Icon Serial +InputList3SigType2023=Serial +InputList3Cue2024=Set Item 11 Icon Serial +InputList3SigType2024=Serial +InputList3Cue2025=Set Item 12 Icon Serial +InputList3SigType2025=Serial +InputList3Cue2026=Set Item 13 Icon Serial +InputList3SigType2026=Serial +InputList3Cue2027=Set Item 14 Icon Serial +InputList3SigType2027=Serial +InputList3Cue2028=Set Item 15 Icon Serial +InputList3SigType2028=Serial +InputList3Cue2029=Set Item 16 Icon Serial +InputList3SigType2029=Serial +InputList3Cue2030=Set Item 17 Icon Serial +InputList3SigType2030=Serial +InputList3Cue2031=Set Item 18 Icon Serial +InputList3SigType2031=Serial +InputList3Cue2032=Set Item 19 Icon Serial +InputList3SigType2032=Serial +InputList3Cue2033=Set Item 20 Icon Serial +InputList3SigType2033=Serial +InputList3Cue2034=Set Item 21 Icon Serial +InputList3SigType2034=Serial +InputList3Cue2035=Set Item 22 Icon Serial +InputList3SigType2035=Serial +InputList3Cue2036=Set Item 23 Icon Serial +InputList3SigType2036=Serial +InputList3Cue2037=Set Item 24 Icon Serial +InputList3SigType2037=Serial +InputList3Cue2038=Set Item 25 Icon Serial +InputList3SigType2038=Serial +InputList3Cue2039=Set Item 26 Icon Serial +InputList3SigType2039=Serial +InputList3Cue2040=Set Item 27 Icon Serial +InputList3SigType2040=Serial +InputList3Cue2041=Set Item 28 Icon Serial +InputList3SigType2041=Serial +InputList3Cue2042=Set Item 29 Icon Serial +InputList3SigType2042=Serial +InputList3Cue2043=Set Item 30 Icon Serial +InputList3SigType2043=Serial +InputList3Cue2044=[~UNUSED2~] +InputList3SigType2044=Digital|Analog|Serial|String +InputList3Cue4014=[~EndGroup~]Item Icons +InputList3SigType4014=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~]Item Texts +OutputList3SigType11=Serial +OutputList3Cue12=[~UNUSED3~] +OutputList3SigType12=Serial +OutputList3Cue13=[~UNUSED3~] +OutputList3SigType13=Serial +OutputList3Cue14=[~UNUSED3~] +OutputList3SigType14=Serial +OutputList3Cue15=[~UNUSED3~] +OutputList3SigType15=Serial +OutputList3Cue16=[~UNUSED3~] +OutputList3SigType16=Serial +OutputList3Cue17=[~UNUSED3~] +OutputList3SigType17=Serial +OutputList3Cue18=[~UNUSED3~] +OutputList3SigType18=Serial +OutputList3Cue19=[~UNUSED3~] +OutputList3SigType19=Serial +OutputList3Cue20=[~UNUSED3~] +OutputList3SigType20=Serial +OutputList3Cue21=[~UNUSED3~] +OutputList3SigType21=Serial +OutputList3Cue22=[~UNUSED3~] +OutputList3SigType22=Serial +OutputList3Cue23=[~UNUSED3~] +OutputList3SigType23=Serial +OutputList3Cue24=[~UNUSED3~] +OutputList3SigType24=Serial +OutputList3Cue25=[~UNUSED3~] +OutputList3SigType25=Serial +OutputList3Cue26=[~UNUSED3~] +OutputList3SigType26=Serial +OutputList3Cue27=[~UNUSED3~] +OutputList3SigType27=Serial +OutputList3Cue28=[~UNUSED3~] +OutputList3SigType28=Serial +OutputList3Cue29=[~UNUSED3~] +OutputList3SigType29=Serial +OutputList3Cue30=[~UNUSED3~] +OutputList3SigType30=Serial +OutputList3Cue31=[~UNUSED3~] +OutputList3SigType31=Serial +OutputList3Cue32=[~UNUSED3~] +OutputList3SigType32=Serial +OutputList3Cue33=[~UNUSED3~] +OutputList3SigType33=Serial +OutputList3Cue34=[~UNUSED3~] +OutputList3SigType34=Serial +OutputList3Cue35=[~UNUSED3~] +OutputList3SigType35=Serial +OutputList3Cue36=[~UNUSED3~] +OutputList3SigType36=Serial +OutputList3Cue37=[~UNUSED3~] +OutputList3SigType37=Serial +OutputList3Cue38=[~UNUSED3~] +OutputList3SigType38=Serial +OutputList3Cue39=[~UNUSED3~] +OutputList3SigType39=Serial +OutputList3Cue40=[~UNUSED3~] +OutputList3SigType40=Serial +OutputList3Cue41=[~UNUSED3~] +OutputList3SigType41=Serial +OutputList3Cue42=[~UNUSED2~] +OutputList3SigType42=Digital|Analog|Serial|String +OutputList3Cue2012=[~EndGroup~]Item Texts +OutputList3SigType2012=Serial +OutputList3Cue2013=[~BeginGroup~]Item Icons +OutputList3SigType2013=Serial +OutputList3Cue2014=[~UNUSED3~] +OutputList3SigType2014=Serial +OutputList3Cue2015=[~UNUSED3~] +OutputList3SigType2015=Serial +OutputList3Cue2016=[~UNUSED3~] +OutputList3SigType2016=Serial +OutputList3Cue2017=[~UNUSED3~] +OutputList3SigType2017=Serial +OutputList3Cue2018=[~UNUSED3~] +OutputList3SigType2018=Serial +OutputList3Cue2019=[~UNUSED3~] +OutputList3SigType2019=Serial +OutputList3Cue2020=[~UNUSED3~] +OutputList3SigType2020=Serial +OutputList3Cue2021=[~UNUSED3~] +OutputList3SigType2021=Serial +OutputList3Cue2022=[~UNUSED3~] +OutputList3SigType2022=Serial +OutputList3Cue2023=[~UNUSED3~] +OutputList3SigType2023=Serial +OutputList3Cue2024=[~UNUSED3~] +OutputList3SigType2024=Serial +OutputList3Cue2025=[~UNUSED3~] +OutputList3SigType2025=Serial +OutputList3Cue2026=[~UNUSED3~] +OutputList3SigType2026=Serial +OutputList3Cue2027=[~UNUSED3~] +OutputList3SigType2027=Serial +OutputList3Cue2028=[~UNUSED3~] +OutputList3SigType2028=Serial +OutputList3Cue2029=[~UNUSED3~] +OutputList3SigType2029=Serial +OutputList3Cue2030=[~UNUSED3~] +OutputList3SigType2030=Serial +OutputList3Cue2031=[~UNUSED3~] +OutputList3SigType2031=Serial +OutputList3Cue2032=[~UNUSED3~] +OutputList3SigType2032=Serial +OutputList3Cue2033=[~UNUSED3~] +OutputList3SigType2033=Serial +OutputList3Cue2034=[~UNUSED3~] +OutputList3SigType2034=Serial +OutputList3Cue2035=[~UNUSED3~] +OutputList3SigType2035=Serial +OutputList3Cue2036=[~UNUSED3~] +OutputList3SigType2036=Serial +OutputList3Cue2037=[~UNUSED3~] +OutputList3SigType2037=Serial +OutputList3Cue2038=[~UNUSED3~] +OutputList3SigType2038=Serial +OutputList3Cue2039=[~UNUSED3~] +OutputList3SigType2039=Serial +OutputList3Cue2040=[~UNUSED3~] +OutputList3SigType2040=Serial +OutputList3Cue2041=[~UNUSED3~] +OutputList3SigType2041=Serial +OutputList3Cue2042=[~UNUSED3~] +OutputList3SigType2042=Serial +OutputList3Cue2043=[~UNUSED3~] +OutputList3SigType2043=Serial +OutputList3Cue2044=[~UNUSED2~] +OutputList3SigType2044=Digital|Analog|Serial|String +OutputList3Cue4014=[~EndGroup~]Item Icons +OutputList3SigType4014=Serial +ParamCue1=SmartObjectId +ParamSigType1=Constant +MPp=1 +Pp1=19 +CedH=19 +SmartObjId=1203d +] +; Parameter Properties for Smart Object ID +[ +ObjTp=Dp +H=19 +Tp=1 +HD=TRUE +DV=1203d +NF=1 +DNF=1 +EncFmt=0 +DVLF=1 +Sgn=0 +] +; Smart Objects Definition section +[ +ObjTp=CED +H=19 +Name=PepperDash Essentials TSW-760_[D.VC] Recents_Dynamic Button List Vertical_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 +] diff --git a/Essentials/PepperDashEssentials/PepperDash Essentials iPad.sgd b/PepperDashEssentials/PepperDash Essentials iPad.sgd similarity index 100% rename from Essentials/PepperDashEssentials/PepperDash Essentials iPad.sgd rename to PepperDashEssentials/PepperDash Essentials iPad.sgd diff --git a/Essentials/PepperDashEssentials/PepperDashEssentials.csproj b/PepperDashEssentials/PepperDashEssentials.csproj similarity index 95% rename from Essentials/PepperDashEssentials/PepperDashEssentials.csproj rename to PepperDashEssentials/PepperDashEssentials.csproj index c3bd3819..ef7284cf 100644 --- a/Essentials/PepperDashEssentials/PepperDashEssentials.csproj +++ b/PepperDashEssentials/PepperDashEssentials.csproj @@ -1,227 +1,227 @@ - - - Release - AnyCPU - 9.0.30729 - 2.0 - {1BED5BA9-88C4-4365-9362-6F4B128071D3} - Library - Properties - PepperDash.Essentials - PepperDashEssentials - {0B4745B0-194B-4BB6-8E21-E9057CA92230};{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.Fusion.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Remotes.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll - - - - False - ..\..\..\pepperdash-simplsharp-core\CLZ Builds\PepperDash_Core.dll - - - False - ..\..\Essentials DM\Essentials_DM\bin\PepperDash_Essentials_DM.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe - - - False - ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5} - PepperDash_Essentials_Core - - - {892B761C-E479-44CE-BD74-243E9214AF13} - Essentials Devices Common - - - - - - - - - rem S# Pro preparation will execute after these operations - + + + Release + AnyCPU + 9.0.30729 + 2.0 + {1BED5BA9-88C4-4365-9362-6F4B128071D3} + Library + Properties + PepperDash.Essentials + PepperDashEssentials + {0B4745B0-194B-4BB6-8E21-E9057CA92230};{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.Fusion.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Remotes.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll + + + + False + ..\essentials-framework\references\PepperDash_Core.dll + + + False + ..\essentials-framework\Essentials DM\Essentials_DM\bin\PepperDash_Essentials_DM.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe + + + False + ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5} + PepperDash_Essentials_Core + + + {892B761C-E479-44CE-BD74-243E9214AF13} + Essentials Devices Common + + + + + + + + + rem S# Pro preparation will execute after these operations + \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Properties/AssemblyInfo.cs b/PepperDashEssentials/Properties/AssemblyInfo.cs similarity index 100% rename from Essentials/PepperDashEssentials/Properties/AssemblyInfo.cs rename to PepperDashEssentials/Properties/AssemblyInfo.cs diff --git a/Essentials/PepperDashEssentials/Properties/AssemblyInfo.cs.orig b/PepperDashEssentials/Properties/AssemblyInfo.cs.orig similarity index 100% rename from Essentials/PepperDashEssentials/Properties/AssemblyInfo.cs.orig rename to PepperDashEssentials/Properties/AssemblyInfo.cs.orig diff --git a/Essentials/PepperDashEssentials/Properties/ControlSystem.cfg b/PepperDashEssentials/Properties/ControlSystem.cfg similarity index 97% rename from Essentials/PepperDashEssentials/Properties/ControlSystem.cfg rename to PepperDashEssentials/Properties/ControlSystem.cfg index cf4be97b..4772f8fd 100644 --- a/Essentials/PepperDashEssentials/Properties/ControlSystem.cfg +++ b/PepperDashEssentials/Properties/ControlSystem.cfg @@ -1,7 +1,7 @@ - - - Test RMC3 -
auto 192.168.1.40
- Program01 - Internal Flash + + + Test RMC3 +
auto 192.168.1.40
+ Program01 + Internal Flash
\ No newline at end of file diff --git a/Essentials/PepperDashEssentials/REMOVE EssentialsApp.cs b/PepperDashEssentials/REMOVE EssentialsApp.cs similarity index 100% rename from Essentials/PepperDashEssentials/REMOVE EssentialsApp.cs rename to PepperDashEssentials/REMOVE EssentialsApp.cs diff --git a/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.DM.dll b/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.DM.dll similarity index 100% rename from Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.DM.dll rename to PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.DM.dll diff --git a/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.DeviceSupport.dll b/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.DeviceSupport.dll similarity index 100% rename from Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.DeviceSupport.dll rename to PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.DeviceSupport.dll diff --git a/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.EthernetCommunications.dll b/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.EthernetCommunications.dll similarity index 100% rename from Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.EthernetCommunications.dll rename to PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.EthernetCommunications.dll diff --git a/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.UI.dll b/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.UI.dll similarity index 100% rename from Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.UI.dll rename to PepperDashEssentials/References/PepperDashEssentialsBase.cplz/Crestron.SimplSharpPro.UI.dll diff --git a/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.config b/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.config similarity index 100% rename from Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.config rename to PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.config diff --git a/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.cplz b/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.cplz similarity index 100% rename from Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.cplz rename to PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.cplz diff --git a/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.dll b/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.dll similarity index 100% rename from Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.dll rename to PepperDashEssentials/References/PepperDashEssentialsBase.cplz/PepperDashEssentialsBase.dll diff --git a/Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/SimplSharpData.dat b/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/SimplSharpData.dat similarity index 100% rename from Essentials Core/PepperDashEssentialsBase/References/SSMonoIOLibrary.clz/SimplSharpData.dat rename to PepperDashEssentials/References/PepperDashEssentialsBase.cplz/SimplSharpData.dat diff --git a/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/manifest.info b/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/manifest.info similarity index 100% rename from Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/manifest.info rename to PepperDashEssentials/References/PepperDashEssentialsBase.cplz/manifest.info diff --git a/Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/manifest.ser b/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/manifest.ser similarity index 100% rename from Essentials/PepperDashEssentials/References/PepperDashEssentialsBase.cplz/manifest.ser rename to PepperDashEssentials/References/PepperDashEssentialsBase.cplz/manifest.ser diff --git a/Essentials/PepperDashEssentials/Room/Config/DDVC01RoomPropertiesConfig.cs b/PepperDashEssentials/Room/Config/DDVC01RoomPropertiesConfig.cs similarity index 100% rename from Essentials/PepperDashEssentials/Room/Config/DDVC01RoomPropertiesConfig.cs rename to PepperDashEssentials/Room/Config/DDVC01RoomPropertiesConfig.cs diff --git a/Essentials/PepperDashEssentials/Room/Config/EssentialsHuddleRoomPropertiesConfig.cs b/PepperDashEssentials/Room/Config/EssentialsHuddleRoomPropertiesConfig.cs similarity index 100% rename from Essentials/PepperDashEssentials/Room/Config/EssentialsHuddleRoomPropertiesConfig.cs rename to PepperDashEssentials/Room/Config/EssentialsHuddleRoomPropertiesConfig.cs diff --git a/Essentials/PepperDashEssentials/Room/Config/EssentialsHuddleVtc1PropertiesConfig.cs b/PepperDashEssentials/Room/Config/EssentialsHuddleVtc1PropertiesConfig.cs similarity index 100% rename from Essentials/PepperDashEssentials/Room/Config/EssentialsHuddleVtc1PropertiesConfig.cs rename to PepperDashEssentials/Room/Config/EssentialsHuddleVtc1PropertiesConfig.cs diff --git a/Essentials/PepperDashEssentials/Room/Config/EssentialsPresentationPropertiesConfig.cs b/PepperDashEssentials/Room/Config/EssentialsPresentationPropertiesConfig.cs similarity index 100% rename from Essentials/PepperDashEssentials/Room/Config/EssentialsPresentationPropertiesConfig.cs rename to PepperDashEssentials/Room/Config/EssentialsPresentationPropertiesConfig.cs diff --git a/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs b/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs similarity index 97% rename from Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs rename to PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs index 47647e68..246bb42b 100644 --- a/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs +++ b/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs @@ -1,334 +1,334 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -using Crestron.SimplSharp; -using Newtonsoft.Json; - -using PepperDash.Core; -using PepperDash.Essentials; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.Config; - -namespace PepperDash.Essentials.Room.Config -{ - public class EssentialsRoomConfig : DeviceConfig - { - /// - /// Returns a room object from this config data - /// - /// - public Device GetRoomObject() - { - var typeName = Type.ToLower(); - if (typeName == "huddle") - { - var props = JsonConvert.DeserializeObject - (this.Properties.ToString()); - var disp = DeviceManager.GetDeviceForKey(props.DefaultDisplayKey) as IRoutingSinkWithSwitching; - var audio = DeviceManager.GetDeviceForKey(props.DefaultAudioKey) as IRoutingSinkNoSwitching; - var huddle = new EssentialsHuddleSpaceRoom(Key, Name, disp, audio, props); - - if (props.Occupancy != null) - huddle.SetRoomOccupancy(DeviceManager.GetDeviceForKey(props.Occupancy.DeviceKey) as - PepperDash.Essentials.Devices.Common.Occupancy.IOccupancyStatusProvider, props.Occupancy.TimoutMinutes); - huddle.LogoUrl = props.Logo.GetUrl(); - huddle.SourceListKey = props.SourceListKey; - huddle.DefaultSourceItem = props.DefaultSourceItem; - huddle.DefaultVolume = (ushort)(props.Volumes.Master.Level * 65535 / 100); - return huddle; - } - else if (typeName == "presentation") - { - var props = JsonConvert.DeserializeObject - (this.Properties.ToString()); - var displaysDict = new Dictionary(); - uint i = 1; - foreach (var dispKey in props.DisplayKeys) // read in the ordered displays list - { - var disp = DeviceManager.GetDeviceForKey(dispKey) as IRoutingSinkWithSwitching; - displaysDict.Add(i++, disp); - } - - // Get the master volume control - IBasicVolumeWithFeedback masterVolumeControlDev = props.Volumes.Master.GetDevice(); - - - var presRoom = new EssentialsPresentationRoom(Key, Name, displaysDict, masterVolumeControlDev, props); - return presRoom; - } - else if (typeName == "huddlevtc1") - { - var props = JsonConvert.DeserializeObject - (this.Properties.ToString()); - var disp = DeviceManager.GetDeviceForKey(props.DefaultDisplayKey) as IRoutingSinkWithSwitching; - - var codec = DeviceManager.GetDeviceForKey(props.VideoCodecKey) as - PepperDash.Essentials.Devices.Common.VideoCodec.VideoCodecBase; - - var rm = new EssentialsHuddleVtc1Room(Key, Name, disp, codec, codec, props); - // Add Occupancy object from config - - if (props.Occupancy != null) - rm.SetRoomOccupancy(DeviceManager.GetDeviceForKey(props.Occupancy.DeviceKey) as - PepperDash.Essentials.Devices.Common.Occupancy.IOccupancyStatusProvider, props.Occupancy.TimoutMinutes); - rm.LogoUrl = props.Logo.GetUrl(); - rm.SourceListKey = props.SourceListKey; - rm.DefaultSourceItem = props.DefaultSourceItem; - rm.DefaultVolume = (ushort)(props.Volumes.Master.Level * 65535 / 100); - - rm.MicrophonePrivacy = GetMicrophonePrivacy(props, rm); // Get Microphone Privacy object, if any - - rm.Emergency = GetEmergency(props, rm); // Get emergency object, if any - - return rm; - } - else if (typeName == "ddvc01Bridge") - { - return new Device(Key, Name); // placeholder device that does nothing. - } - - return null; - } - - /// - /// Gets and operating, standalone emergegncy object that can be plugged into a room. - /// Returns null if there is no emergency defined - /// - EssentialsRoomEmergencyBase GetEmergency(EssentialsRoomPropertiesConfig props, EssentialsRoomBase room) - { - // This emergency - var emergency = props.Emergency; - if (emergency != null) - { - //switch on emergency type here. Right now only contact and shutdown - var e = new EssentialsRoomEmergencyContactClosure(room.Key + "-emergency", props.Emergency, room); - DeviceManager.AddDevice(e); - } - return null; - } - - /// - /// - /// - /// - /// - /// - PepperDash.Essentials.Devices.Common.Microphones.MicrophonePrivacyController GetMicrophonePrivacy( - EssentialsRoomPropertiesConfig props, EssentialsHuddleVtc1Room room) - { - var microphonePrivacy = props.MicrophonePrivacy; - if (microphonePrivacy == null) - { - Debug.Console(0, "ERROR: Cannot create microphone privacy with null properties"); - return null; - } - // Get the MicrophonePrivacy device from the device manager - var mP = (DeviceManager.GetDeviceForKey(props.MicrophonePrivacy.DeviceKey) as - PepperDash.Essentials.Devices.Common.Microphones.MicrophonePrivacyController); - // Set this room as the IPrivacy device - if (mP == null) - { - Debug.Console(0, "ERROR: Selected device {0} is not MicrophonePrivacyController", props.MicrophonePrivacy.DeviceKey); - return null; - } - mP.SetPrivacyDevice(room); - - var behaviour = props.MicrophonePrivacy.Behaviour.ToLower(); - - if (behaviour == null) - { - Debug.Console(0, "WARNING: No behaviour defined for MicrophonePrivacyController"); - return null; - } - if (behaviour == "trackroomstate") - { - // Tie LED enable to room power state - room.OnFeedback.OutputChange += (o, a) => - { - if (room.OnFeedback.BoolValue) - mP.EnableLeds = true; - else - mP.EnableLeds = false; - }; - - mP.EnableLeds = room.OnFeedback.BoolValue; - } - else if (behaviour == "trackcallstate") - { - // Tie LED enable to room power state - room.InCallFeedback.OutputChange += (o, a) => - { - if (room.InCallFeedback.BoolValue) - mP.EnableLeds = true; - else - mP.EnableLeds = false; - }; - - mP.EnableLeds = room.InCallFeedback.BoolValue; - } - - return mP; - } - - } - - /// - /// - /// - public class EssentialsRoomPropertiesConfig - { - [JsonProperty("addresses")] - public EssentialsRoomAddressPropertiesConfig Addresses { get; set; } - - [JsonProperty("description")] - public string Description { get; set; } - - [JsonProperty("emergency")] - public EssentialsRoomEmergencyConfig Emergency { get; set; } - - [JsonProperty("help")] - public EssentialsHelpPropertiesConfig Help { get; set; } - - [JsonProperty("helpMessage")] - public string HelpMessage { get; set; } - - [JsonProperty("environment")] - public EssentialsEnvironmentPropertiesConfig Environment { get; set; } - - [JsonProperty("logo")] - public EssentialsLogoPropertiesConfig Logo { get; set; } - - [JsonProperty("microphonePrivacy")] - public EssentialsRoomMicrophonePrivacyConfig MicrophonePrivacy { get; set; } - - [JsonProperty("occupancy")] - public EssentialsRoomOccSensorConfig Occupancy { get; set; } - - [JsonProperty("oneButtonMeeting")] - public EssentialsOneButtonMeetingPropertiesConfig OneButtonMeeting { get; set; } - - [JsonProperty("shutdownVacancySeconds")] - public int ShutdownVacancySeconds { get; set; } - - [JsonProperty("shutdownPromptSeconds")] - public int ShutdownPromptSeconds { get; set; } - - [JsonProperty("tech")] - public EssentialsRoomTechConfig Tech { get; set; } - - [JsonProperty("volumes")] - public EssentialsRoomVolumesConfig Volumes { get; set; } - - [JsonProperty("zeroVolumeWhenSwtichingVolumeDevices")] - public bool ZeroVolumeWhenSwtichingVolumeDevices { get; set; } - } - - public class EssentialsEnvironmentPropertiesConfig - { - public bool Enabled { get; set; } - - [JsonProperty("deviceKeys")] - public List DeviceKeys { get; set; } - - public EssentialsEnvironmentPropertiesConfig() - { - DeviceKeys = new List(); - } - - } - - public class EssentialsRoomMicrophonePrivacyConfig - { - [JsonProperty("deviceKey")] - public string DeviceKey { get; set; } - - [JsonProperty("behaviour")] - public string Behaviour { get; set; } - } - - /// - /// Properties for the help text box - /// - public class EssentialsHelpPropertiesConfig - { - [JsonProperty("message")] - public string Message { get; set; } - - [JsonProperty("showCallButton")] - public bool ShowCallButton { get; set; } - - /// - /// Defaults to "Call Help Desk" - /// - [JsonProperty("callButtonText")] - public string CallButtonText { get; set; } - - public EssentialsHelpPropertiesConfig() - { - CallButtonText = "Call Help Desk"; - } - } - - /// - /// - /// - public class EssentialsOneButtonMeetingPropertiesConfig - { - [JsonProperty("enable")] - public bool Enable { get; set; } - } - - public class EssentialsRoomAddressPropertiesConfig - { - [JsonProperty("phoneNumber")] - public string PhoneNumber { get; set; } - - [JsonProperty("sipAddress")] - public string SipAddress { get; set; } - } - - - /// - /// Properties for the room's logo on panels - /// - public class EssentialsLogoPropertiesConfig - { - [JsonProperty("type")] - public string Type { get; set; } - - [JsonProperty("url")] - public string Url { get; set; } - /// - /// Gets either the custom URL, a local-to-processor URL, or null if it's a default logo - /// - public string GetUrl() - { - if (Type == "url") - return Url; - if (Type == "system") - return string.Format("http://{0}:8080/logo.png", - CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, 0)); - return null; - } - } - - /// - /// Represents occupancy sensor(s) setup for a room - /// - public class EssentialsRoomOccSensorConfig - { - [JsonProperty("deviceKey")] - public string DeviceKey { get; set; } - - [JsonProperty("timoutMinutes")] - public int TimoutMinutes { get; set; } - } - - public class EssentialsRoomTechConfig - { - [JsonProperty("password")] - public string Password { get; set; } - } +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using Crestron.SimplSharp; +using Newtonsoft.Json; + +using PepperDash.Core; +using PepperDash.Essentials; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Config; + +namespace PepperDash.Essentials.Room.Config +{ + public class EssentialsRoomConfig : DeviceConfig + { + /// + /// Returns a room object from this config data + /// + /// + public Device GetRoomObject() + { + var typeName = Type.ToLower(); + if (typeName == "huddle") + { + var props = JsonConvert.DeserializeObject + (this.Properties.ToString()); + var disp = DeviceManager.GetDeviceForKey(props.DefaultDisplayKey) as IRoutingSinkWithSwitching; + var audio = DeviceManager.GetDeviceForKey(props.DefaultAudioKey) as IRoutingSinkNoSwitching; + var huddle = new EssentialsHuddleSpaceRoom(Key, Name, disp, audio, props); + + if (props.Occupancy != null) + huddle.SetRoomOccupancy(DeviceManager.GetDeviceForKey(props.Occupancy.DeviceKey) as + PepperDash.Essentials.Devices.Common.Occupancy.IOccupancyStatusProvider, props.Occupancy.TimoutMinutes); + huddle.LogoUrl = props.Logo.GetUrl(); + huddle.SourceListKey = props.SourceListKey; + huddle.DefaultSourceItem = props.DefaultSourceItem; + huddle.DefaultVolume = (ushort)(props.Volumes.Master.Level * 65535 / 100); + return huddle; + } + else if (typeName == "presentation") + { + var props = JsonConvert.DeserializeObject + (this.Properties.ToString()); + var displaysDict = new Dictionary(); + uint i = 1; + foreach (var dispKey in props.DisplayKeys) // read in the ordered displays list + { + var disp = DeviceManager.GetDeviceForKey(dispKey) as IRoutingSinkWithSwitching; + displaysDict.Add(i++, disp); + } + + // Get the master volume control + IBasicVolumeWithFeedback masterVolumeControlDev = props.Volumes.Master.GetDevice(); + + + var presRoom = new EssentialsPresentationRoom(Key, Name, displaysDict, masterVolumeControlDev, props); + return presRoom; + } + else if (typeName == "huddlevtc1") + { + var props = JsonConvert.DeserializeObject + (this.Properties.ToString()); + var disp = DeviceManager.GetDeviceForKey(props.DefaultDisplayKey) as IRoutingSinkWithSwitching; + + var codec = DeviceManager.GetDeviceForKey(props.VideoCodecKey) as + PepperDash.Essentials.Devices.Common.VideoCodec.VideoCodecBase; + + var rm = new EssentialsHuddleVtc1Room(Key, Name, disp, codec, codec, props); + // Add Occupancy object from config + + if (props.Occupancy != null) + rm.SetRoomOccupancy(DeviceManager.GetDeviceForKey(props.Occupancy.DeviceKey) as + PepperDash.Essentials.Devices.Common.Occupancy.IOccupancyStatusProvider, props.Occupancy.TimoutMinutes); + rm.LogoUrl = props.Logo.GetUrl(); + rm.SourceListKey = props.SourceListKey; + rm.DefaultSourceItem = props.DefaultSourceItem; + rm.DefaultVolume = (ushort)(props.Volumes.Master.Level * 65535 / 100); + + rm.MicrophonePrivacy = GetMicrophonePrivacy(props, rm); // Get Microphone Privacy object, if any + + rm.Emergency = GetEmergency(props, rm); // Get emergency object, if any + + return rm; + } + else if (typeName == "ddvc01Bridge") + { + return new Device(Key, Name); // placeholder device that does nothing. + } + + return null; + } + + /// + /// Gets and operating, standalone emergegncy object that can be plugged into a room. + /// Returns null if there is no emergency defined + /// + EssentialsRoomEmergencyBase GetEmergency(EssentialsRoomPropertiesConfig props, EssentialsRoomBase room) + { + // This emergency + var emergency = props.Emergency; + if (emergency != null) + { + //switch on emergency type here. Right now only contact and shutdown + var e = new EssentialsRoomEmergencyContactClosure(room.Key + "-emergency", props.Emergency, room); + DeviceManager.AddDevice(e); + } + return null; + } + + /// + /// + /// + /// + /// + /// + PepperDash.Essentials.Devices.Common.Microphones.MicrophonePrivacyController GetMicrophonePrivacy( + EssentialsRoomPropertiesConfig props, EssentialsHuddleVtc1Room room) + { + var microphonePrivacy = props.MicrophonePrivacy; + if (microphonePrivacy == null) + { + Debug.Console(0, "ERROR: Cannot create microphone privacy with null properties"); + return null; + } + // Get the MicrophonePrivacy device from the device manager + var mP = (DeviceManager.GetDeviceForKey(props.MicrophonePrivacy.DeviceKey) as + PepperDash.Essentials.Devices.Common.Microphones.MicrophonePrivacyController); + // Set this room as the IPrivacy device + if (mP == null) + { + Debug.Console(0, "ERROR: Selected device {0} is not MicrophonePrivacyController", props.MicrophonePrivacy.DeviceKey); + return null; + } + mP.SetPrivacyDevice(room); + + var behaviour = props.MicrophonePrivacy.Behaviour.ToLower(); + + if (behaviour == null) + { + Debug.Console(0, "WARNING: No behaviour defined for MicrophonePrivacyController"); + return null; + } + if (behaviour == "trackroomstate") + { + // Tie LED enable to room power state + room.OnFeedback.OutputChange += (o, a) => + { + if (room.OnFeedback.BoolValue) + mP.EnableLeds = true; + else + mP.EnableLeds = false; + }; + + mP.EnableLeds = room.OnFeedback.BoolValue; + } + else if (behaviour == "trackcallstate") + { + // Tie LED enable to room power state + room.InCallFeedback.OutputChange += (o, a) => + { + if (room.InCallFeedback.BoolValue) + mP.EnableLeds = true; + else + mP.EnableLeds = false; + }; + + mP.EnableLeds = room.InCallFeedback.BoolValue; + } + + return mP; + } + + } + + /// + /// + /// + public class EssentialsRoomPropertiesConfig + { + [JsonProperty("addresses")] + public EssentialsRoomAddressPropertiesConfig Addresses { get; set; } + + [JsonProperty("description")] + public string Description { get; set; } + + [JsonProperty("emergency")] + public EssentialsRoomEmergencyConfig Emergency { get; set; } + + [JsonProperty("help")] + public EssentialsHelpPropertiesConfig Help { get; set; } + + [JsonProperty("helpMessage")] + public string HelpMessage { get; set; } + + [JsonProperty("environment")] + public EssentialsEnvironmentPropertiesConfig Environment { get; set; } + + [JsonProperty("logo")] + public EssentialsLogoPropertiesConfig Logo { get; set; } + + [JsonProperty("microphonePrivacy")] + public EssentialsRoomMicrophonePrivacyConfig MicrophonePrivacy { get; set; } + + [JsonProperty("occupancy")] + public EssentialsRoomOccSensorConfig Occupancy { get; set; } + + [JsonProperty("oneButtonMeeting")] + public EssentialsOneButtonMeetingPropertiesConfig OneButtonMeeting { get; set; } + + [JsonProperty("shutdownVacancySeconds")] + public int ShutdownVacancySeconds { get; set; } + + [JsonProperty("shutdownPromptSeconds")] + public int ShutdownPromptSeconds { get; set; } + + [JsonProperty("tech")] + public EssentialsRoomTechConfig Tech { get; set; } + + [JsonProperty("volumes")] + public EssentialsRoomVolumesConfig Volumes { get; set; } + + [JsonProperty("zeroVolumeWhenSwtichingVolumeDevices")] + public bool ZeroVolumeWhenSwtichingVolumeDevices { get; set; } + } + + public class EssentialsEnvironmentPropertiesConfig + { + public bool Enabled { get; set; } + + [JsonProperty("deviceKeys")] + public List DeviceKeys { get; set; } + + public EssentialsEnvironmentPropertiesConfig() + { + DeviceKeys = new List(); + } + + } + + public class EssentialsRoomMicrophonePrivacyConfig + { + [JsonProperty("deviceKey")] + public string DeviceKey { get; set; } + + [JsonProperty("behaviour")] + public string Behaviour { get; set; } + } + + /// + /// Properties for the help text box + /// + public class EssentialsHelpPropertiesConfig + { + [JsonProperty("message")] + public string Message { get; set; } + + [JsonProperty("showCallButton")] + public bool ShowCallButton { get; set; } + + /// + /// Defaults to "Call Help Desk" + /// + [JsonProperty("callButtonText")] + public string CallButtonText { get; set; } + + public EssentialsHelpPropertiesConfig() + { + CallButtonText = "Call Help Desk"; + } + } + + /// + /// + /// + public class EssentialsOneButtonMeetingPropertiesConfig + { + [JsonProperty("enable")] + public bool Enable { get; set; } + } + + public class EssentialsRoomAddressPropertiesConfig + { + [JsonProperty("phoneNumber")] + public string PhoneNumber { get; set; } + + [JsonProperty("sipAddress")] + public string SipAddress { get; set; } + } + + + /// + /// Properties for the room's logo on panels + /// + public class EssentialsLogoPropertiesConfig + { + [JsonProperty("type")] + public string Type { get; set; } + + [JsonProperty("url")] + public string Url { get; set; } + /// + /// Gets either the custom URL, a local-to-processor URL, or null if it's a default logo + /// + public string GetUrl() + { + if (Type == "url") + return Url; + if (Type == "system") + return string.Format("http://{0}:8080/logo.png", + CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, 0)); + return null; + } + } + + /// + /// Represents occupancy sensor(s) setup for a room + /// + public class EssentialsRoomOccSensorConfig + { + [JsonProperty("deviceKey")] + public string DeviceKey { get; set; } + + [JsonProperty("timoutMinutes")] + public int TimoutMinutes { get; set; } + } + + public class EssentialsRoomTechConfig + { + [JsonProperty("password")] + public string Password { get; set; } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomEmergencyConfig.cs b/PepperDashEssentials/Room/Config/EssentialsRoomEmergencyConfig.cs similarity index 100% rename from Essentials/PepperDashEssentials/Room/Config/EssentialsRoomEmergencyConfig.cs rename to PepperDashEssentials/Room/Config/EssentialsRoomEmergencyConfig.cs diff --git a/Essentials/PepperDashEssentials/Room/Cotija/CotijaConfig.cs b/PepperDashEssentials/Room/Cotija/CotijaConfig.cs similarity index 95% rename from Essentials/PepperDashEssentials/Room/Cotija/CotijaConfig.cs rename to PepperDashEssentials/Room/Cotija/CotijaConfig.cs index 4564ad6d..22196956 100644 --- a/Essentials/PepperDashEssentials/Room/Cotija/CotijaConfig.cs +++ b/PepperDashEssentials/Room/Cotija/CotijaConfig.cs @@ -1,33 +1,33 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using PepperDash.Essentials.Core.Config; - -using Newtonsoft.Json; - -namespace PepperDash.Essentials -{ - - /// - /// - /// - public class CotijaConfig - { - [JsonProperty("serverUrl")] - public string ServerUrl { get; set; } - - [JsonProperty("clientAppUrl")] - public string ClientAppUrl { get; set; } - } - - /// - /// - /// - public class CotijaDdvc01RoomBridgePropertiesConfig - { - [JsonProperty("eiscId")] - public string EiscId { get; set; } - } +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using PepperDash.Essentials.Core.Config; + +using Newtonsoft.Json; + +namespace PepperDash.Essentials +{ + + /// + /// + /// + public class CotijaConfig + { + [JsonProperty("serverUrl")] + public string ServerUrl { get; set; } + + [JsonProperty("clientAppUrl")] + public string ClientAppUrl { get; set; } + } + + /// + /// + /// + public class CotijaDdvc01RoomBridgePropertiesConfig + { + [JsonProperty("eiscId")] + public string EiscId { get; set; } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Room/Cotija/CotijaDdvc01DeviceBridge.cs b/PepperDashEssentials/Room/Cotija/CotijaDdvc01DeviceBridge.cs similarity index 100% rename from Essentials/PepperDashEssentials/Room/Cotija/CotijaDdvc01DeviceBridge.cs rename to PepperDashEssentials/Room/Cotija/CotijaDdvc01DeviceBridge.cs diff --git a/Essentials/PepperDashEssentials/Room/Cotija/CotijaSystemController.cs b/PepperDashEssentials/Room/Cotija/CotijaSystemController.cs similarity index 96% rename from Essentials/PepperDashEssentials/Room/Cotija/CotijaSystemController.cs rename to PepperDashEssentials/Room/Cotija/CotijaSystemController.cs index aa324a4b..7141a577 100644 --- a/Essentials/PepperDashEssentials/Room/Cotija/CotijaSystemController.cs +++ b/PepperDashEssentials/Room/Cotija/CotijaSystemController.cs @@ -1,690 +1,690 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using Crestron.SimplSharp; -using Crestron.SimplSharp.CrestronIO; -using Crestron.SimplSharp.Reflection; -using Crestron.SimplSharpPro.CrestronThread; -using Crestron.SimplSharp.CrestronWebSocketClient; -using Crestron.SimplSharpPro; -using Crestron.SimplSharp.Net.Http; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -using PepperDash.Core; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Room.Cotija; - -namespace PepperDash.Essentials -{ - public class CotijaSystemController : Device - { - WebSocketClient WSClient; - - /// - /// Prevents post operations from stomping on each other and getting lost - /// - CEvent PostLockEvent = new CEvent(true, true); - - CEvent RegisterLockEvent = new CEvent(true, true); - - public CotijaConfig Config { get; private set; } - - Dictionary ActionDictionary = new Dictionary(StringComparer.InvariantCultureIgnoreCase); - - Dictionary PushedActions = new Dictionary(); - - CTimer ServerHeartbeatCheckTimer; - - long ServerHeartbeatInterval = 20000; - - CTimer ServerReconnectTimer; - - long ServerReconnectInterval = 5000; - - string SystemUuid; - - List RoomBridges = new List(); - - long ButtonHeartbeatInterval = 1000; - - /// - /// Used for tracking HTTP debugging - /// - bool HttpDebugEnabled; - - /// - /// - /// - /// - /// - /// - public CotijaSystemController(string key, string name, CotijaConfig config) : base(key, name) - { - Config = config; - Debug.Console(0, this, "Mobile UI controller initializing for server:{0}", config.ServerUrl); - - CrestronConsole.AddNewConsoleCommand(AuthorizeSystem, - "mobileauth", "Authorizes system to talk to cotija server", ConsoleAccessLevelEnum.AccessOperator); - CrestronConsole.AddNewConsoleCommand(s => ShowInfo(), - "mobileinfo", "Shows information for current mobile control session", ConsoleAccessLevelEnum.AccessOperator); - CrestronConsole.AddNewConsoleCommand(s => { - s = s.Trim(); - if(!string.IsNullOrEmpty(s)) - { - HttpDebugEnabled = (s.Trim() != "0"); - } - CrestronConsole.ConsoleCommandResponse("HTTP Debug {0}", HttpDebugEnabled ? "Enabled" : "Disabled"); - }, - "mobilehttpdebug", "1 enables more verbose HTTP response debugging", ConsoleAccessLevelEnum.AccessOperator); - CrestronConsole.AddNewConsoleCommand(TestHttpRequest, - "mobilehttprequest", "Tests an HTTP get to URL given", ConsoleAccessLevelEnum.AccessOperator); - - } - - /// - /// Adds an action to the dictionary - /// - /// The path of the API command - /// The action to be triggered by the commmand - public void AddAction(string key, object action) - { - if (!ActionDictionary.ContainsKey(key)) - { - ActionDictionary.Add(key, action); - } - else - { - Debug.Console(1, this, "Cannot add action with key '{0}' because key already exists in ActionDictionary.", key); - } - } - - /// - /// Removes an action from the dictionary - /// - /// - public void RemoveAction(string key) - { - if (ActionDictionary.ContainsKey(key)) - ActionDictionary.Remove(key); - } - - /// - /// - /// - /// - public void AddBridge(CotijaBridgeBase bridge) - { - RoomBridges.Add(bridge); - var b = bridge as IDelayedConfiguration; - if (b != null) - { - Debug.Console(0, this, "Adding room bridge with delayed configuration"); - b.ConfigurationIsReady += new EventHandler(bridge_ConfigurationIsReady); - } - else - { - Debug.Console(0, this, "Adding room bridge and sending configuration"); - RegisterSystemToServer(); - } - } - - /// - /// - /// - /// - /// - void bridge_ConfigurationIsReady(object sender, EventArgs e) - { - Debug.Console(1, this, "Bridge ready. Registering"); - // send the configuration object to the server - RegisterSystemToServer(); - } - - /// - /// - /// - /// - void ReconnectToServerTimerCallback(object o) - { - RegisterSystemToServer(); - } - - /// - /// Verifies system connection with servers - /// - /// - void AuthorizeSystem(string code) - { - if (string.IsNullOrEmpty(code)) - { - CrestronConsole.ConsoleCommandResponse("Please enter a user code to authorize a system"); - return; - } - - var req = new HttpClientRequest(); - string url = string.Format("http://{0}/api/system/grantcode/{1}/{2}", Config.ServerUrl, code, SystemUuid); - Debug.Console(0, this, "Authorizing to: {0}", url); - - if (string.IsNullOrEmpty(Config.ServerUrl)) - { - CrestronConsole.ConsoleCommandResponse("Config URL address is not set. Check portal configuration"); - return; - } - try - { - req.Url.Parse(url); - new HttpClient().DispatchAsync(req, (r, e) => - { - CheckHttpDebug(r, e); - if (e == HTTP_CALLBACK_ERROR.COMPLETED) - { - if (r.Code == 200) - { - Debug.Console(0, "System authorized, sending config."); - RegisterSystemToServer(); - } - else if (r.Code == 404) - { - if (r.ContentString.Contains("codeNotFound")) - { - Debug.Console(0, "Authorization failed, code not found for system UUID {0}", SystemUuid); - } - else if (r.ContentString.Contains("uuidNotFound")) - { - Debug.Console(0, "Authorization failed, uuid {0} not found. Check Essentials configuration is correct", - SystemUuid); - } - } - } - else - Debug.Console(0, this, "Error {0} in authorizing system", e); - }); - } - catch (Exception e) - { - Debug.Console(0, this, "Error in authorizing: {0}", e); - } - } - - /// - /// Dumps info in response to console command. - /// - void ShowInfo() - { - var url = Config != null ? Config.ServerUrl : "No config"; - string name; - string code; - if (RoomBridges != null && RoomBridges.Count > 0) - { - name = RoomBridges[0].RoomName; - code = RoomBridges[0].UserCode; - } - else - { - name = "No config"; - code = "Not available"; - } - var conn = WSClient == null ? "No client" : (WSClient.Connected ? "Yes" : "No"); - - CrestronConsole.ConsoleCommandResponse(@"Mobile Control Information: - Server address: {0} - System Name: {1} - System UUID: {2} - System User code: {3} - Connected?: {4}", url, name, SystemUuid, - code, conn); - } - - /// - /// Registers the room with the server - /// - /// URL of the server, including the port number, if not 80. Format: "serverUrlOrIp:port" - void RegisterSystemToServer() - { - var ready = RegisterLockEvent.Wait(20000); - if (!ready) - { - Debug.Console(1, this, "RegisterSystemToServer failed to enter after 20 seconds. Ignoring"); - return; - } - RegisterLockEvent.Reset(); - - try - { - var confObject = ConfigReader.ConfigObject; - confObject.Info.RuntimeInfo.AppName = Assembly.GetExecutingAssembly().GetName().Name; - var version = Assembly.GetExecutingAssembly().GetName().Version; - confObject.Info.RuntimeInfo.AssemblyVersion = string.Format("{0}.{1}.{2}", version.Major, version.Minor, version.Build); - confObject.Info.RuntimeInfo.OsVersion = Crestron.SimplSharp.CrestronEnvironment.OSVersion.Firmware; - - string postBody = JsonConvert.SerializeObject(confObject); - SystemUuid = confObject.SystemUuid; - - if (string.IsNullOrEmpty(postBody)) - { - Debug.Console(1, this, "ERROR: Config body is empty. Cannot register with server."); - } - else - { - var regClient = new HttpClient(); - regClient.Verbose = true; - regClient.KeepAlive = true; - - string url = string.Format("http://{0}/api/system/join/{1}", Config.ServerUrl, SystemUuid); - Debug.Console(1, this, "Joining server at {0}", url); - - HttpClientRequest request = new HttpClientRequest(); - request.Url.Parse(url); - request.RequestType = RequestType.Post; - request.Header.SetHeaderValue("Content-Type", "application/json"); - request.ContentString = postBody; - - var err = regClient.DispatchAsync(request, RegistrationConnectionCallback); - } - - } - catch (Exception e) - { - Debug.Console(0, this, "ERROR: Initilizing Room: {0}", e); - RegisterLockEvent.Set(); - StartReconnectTimer(); - } - - } - - /// - /// Sends a message to the server from a room - /// - /// room from which the message originates - /// object to be serialized and sent in post body - public void SendMessageToServer(JObject o) - { - - if (WSClient != null && WSClient.Connected) - { - string message = JsonConvert.SerializeObject(o, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); - Debug.Console(1, this, "Message TX: {0}", message); - var messageBytes = System.Text.Encoding.UTF8.GetBytes(message); - WSClient.Send(messageBytes, (uint)messageBytes.Length, WebSocketClient.WEBSOCKET_PACKET_TYPES.LWS_WS_OPCODE_07__TEXT_FRAME); - //WSClient.SendAsync(messageBytes, (uint)messageBytes.Length, WebSocketClient.WEBSOCKET_PACKET_TYPES.LWS_WS_OPCODE_07__TEXT_FRAME); - } - - } - - /// - /// Disconnects the SSE Client and stops the heartbeat timer - /// - /// - void DisconnectStreamClient(string command) - { - //if(SseClient != null) - // SseClient.Disconnect(); - - if (WSClient != null && WSClient.Connected) - WSClient.Disconnect(); - - if (ServerHeartbeatCheckTimer != null) - { - ServerHeartbeatCheckTimer.Stop(); - - ServerHeartbeatCheckTimer = null; - } - } - - /// - /// The callback that fires when we get a response from our registration attempt - /// - /// - /// - void RegistrationConnectionCallback(HttpClientResponse resp, HTTP_CALLBACK_ERROR err) - { - CheckHttpDebug(resp, err); - Debug.Console(1, this, "RegistrationConnectionCallback: {0}", err); - try - { - if (resp != null && resp.Code == 200) - { - if(ServerReconnectTimer != null) - { - ServerReconnectTimer.Stop(); - ServerReconnectTimer = null; - } - - // Success here! - ConnectStreamClient(); - } - else - { - if (resp != null) - Debug.Console(1, this, "Response from server: {0}\n{1}", resp.Code, err); - else - { - Debug.Console(1, this, "Null response received from server."); - } - StartReconnectTimer(); - } - } - catch (Exception e) - { - Debug.Console(1, this, "Error Initializing Stream Client: {0}", e); - StartReconnectTimer(); - } - RegisterLockEvent.Set(); - } - - /// - /// Executes when we don't get a heartbeat message in time. Triggers reconnect. - /// - /// For CTimer callback. Not used - void HeartbeatExpiredTimerCallback(object o) - { - Debug.Console(1, this, "Heartbeat Timer Expired."); - if (ServerHeartbeatCheckTimer != null) - { - ServerHeartbeatCheckTimer.Stop(); - ServerHeartbeatCheckTimer = null; - } - StartReconnectTimer(); - } - - /// - /// - /// - /// - /// - void StartReconnectTimer() - { - // Start the reconnect timer - if (ServerReconnectTimer == null) - { - ServerReconnectTimer = new CTimer(ReconnectToServerTimerCallback, null, ServerReconnectInterval, ServerReconnectInterval); - Debug.Console(1, this, "Reconnect Timer Started."); - } - ServerReconnectTimer.Reset(ServerReconnectInterval, ServerReconnectInterval); - } - - /// - /// - /// - /// - /// - void ResetOrStartHearbeatTimer() - { - if (ServerHeartbeatCheckTimer == null) - { - ServerHeartbeatCheckTimer = new CTimer(HeartbeatExpiredTimerCallback, null, ServerHeartbeatInterval, ServerHeartbeatInterval); - - Debug.Console(1, this, "Heartbeat Timer Started."); - } - - ServerHeartbeatCheckTimer.Reset(ServerHeartbeatInterval, ServerHeartbeatInterval); - } - - - /// - /// Connects the SSE Client - /// - /// - void ConnectStreamClient() - { - Debug.Console(0, this, "Initializing Stream client to server."); - - if (WSClient == null) - { - WSClient = new WebSocketClient(); - } - WSClient.URL = string.Format("wss://{0}/system/join/{1}", Config.ServerUrl, this.SystemUuid); - WSClient.Connect(); - Debug.Console(0, this, "Websocket connected"); - WSClient.ReceiveCallBack = WebsocketReceiveCallback; - //WSClient.SendCallBack = WebsocketSendCallback; - WSClient.ReceiveAsync(); - } - - /// - /// Resets reconnect timer and updates usercode - /// - /// - void HandleHeartBeat(JToken content) - { - var code = content["userCode"]; - if(code != null) - { - foreach (var b in RoomBridges) - { - b.SetUserCode(code.Value()); - } - } - ResetOrStartHearbeatTimer(); - } - - /// - /// Outputs debug info when enabled - /// - /// - /// - /// - void CheckHttpDebug(HttpClientResponse r, HTTP_CALLBACK_ERROR e) - { - if (HttpDebugEnabled) - { - Debug.Console(0, this, "------ Begin HTTP Debug ---------------------------------------"); - Debug.Console(0, this, "HTTP Response URL: {0}", r.ResponseUrl.ToString()); - Debug.Console(0, this, "HTTP Response 'error' {0}", e); - Debug.Console(0, this, "HTTP Response code: {0}", r.Code); - Debug.Console(0, this, "HTTP Response content: \r{0}", r.ContentString); - Debug.Console(0, this, "------ End HTTP Debug -----------------------------------------"); - } - } - - /// - /// - /// - /// - /// - /// - /// - int WebsocketReceiveCallback(byte[] data, uint length, WebSocketClient.WEBSOCKET_PACKET_TYPES opcode, - WebSocketClient.WEBSOCKET_RESULT_CODES err) - { - var rx = System.Text.Encoding.UTF8.GetString(data, 0, (int)length); - if(rx.Length > 0) - ParseStreamRx(rx); - WSClient.ReceiveAsync(); - return 1; - } - - /// - /// Callback to catch possible errors in sending via the websocket - /// - /// - /// - int WebsocketSendCallback(Crestron.SimplSharp.CrestronWebSocketClient.WebSocketClient.WEBSOCKET_RESULT_CODES result) - { - Debug.Console(1, this, "SendCallback result: {0}", result); - - return 1; - } - - /// - /// - /// - /// - /// - void ParseStreamRx(string message) - { - if(string.IsNullOrEmpty(message)) - return; - - Debug.Console(1, this, "Message RX: '{0}'", message); - try - { - var messageObj = JObject.Parse(message); - - var type = messageObj["type"].Value(); - - if (type == "hello") - { - ResetOrStartHearbeatTimer(); - } - else if (type == "/system/heartbeat") - { - HandleHeartBeat(messageObj["content"]); - } - else if (type == "close") - { - WSClient.Disconnect(); - - ServerHeartbeatCheckTimer.Stop(); - // Start the reconnect timer - StartReconnectTimer(); - } - else - { - // Check path against Action dictionary - if (ActionDictionary.ContainsKey(type)) - { - var action = ActionDictionary[type]; - - if (action is Action) - { - (action as Action)(); - } - else if (action is PressAndHoldAction) - { - var stateString = messageObj["content"]["state"].Value(); - - // Look for a button press event - if (!string.IsNullOrEmpty(stateString)) - { - switch (stateString) - { - case "true": - { - if (!PushedActions.ContainsKey(type)) - { - PushedActions.Add(type, new CTimer(o => - { - (action as PressAndHoldAction)(false); - PushedActions.Remove(type); - }, null, ButtonHeartbeatInterval, ButtonHeartbeatInterval)); - } - // Maybe add an else to reset the timer - break; - } - case "held": - { - if (!PushedActions.ContainsKey(type)) - { - PushedActions[type].Reset(ButtonHeartbeatInterval, ButtonHeartbeatInterval); - } - return; - } - case "false": - { - if (PushedActions.ContainsKey(type)) - { - PushedActions[type].Stop(); - PushedActions.Remove(type); - } - break; - } - } - - (action as PressAndHoldAction)(stateString == "true"); - } - } - else if (action is Action) - { - var stateString = messageObj["content"]["state"].Value(); - - if (!string.IsNullOrEmpty(stateString)) - { - (action as Action)(stateString == "true"); - } - } - else if (action is Action) - { - (action as Action)(messageObj["content"]["value"].Value()); - } - else if (action is Action) - { - (action as Action)(messageObj["content"]["value"].Value()); - } - else if (action is Action) - { - (action as Action)(messageObj["content"] - .ToObject()); - } - } - else - { - Debug.Console(1, this, "-- Warning: Incoming message has no registered handler"); - } - } - } - catch (Exception err) - { - //Debug.Console(1, "SseMessageLengthBeforeFailureCount: {0}", SseMessageLengthBeforeFailureCount); - //SseMessageLengthBeforeFailureCount = 0; - Debug.Console(1, this, "Unable to parse message: {0}", err); - } - } - - void TestHttpRequest(string s) - { - { - s = s.Trim(); - if (string.IsNullOrEmpty(s)) - { - PrintTestHttpRequestUsage(); - return; - } - var tokens = s.Split(' '); - if (tokens.Length < 2) - { - CrestronConsole.ConsoleCommandResponse("Too few paramaters\r"); - PrintTestHttpRequestUsage(); - return; - } - - try - { - var url = tokens[1]; - if (tokens[0].ToLower() == "get") - { - var resp = new HttpClient().Get(url); - CrestronConsole.ConsoleCommandResponse("RESPONSE:\r{0}\r\r", resp); - } - else if (tokens[0].ToLower() == "post") - { - var resp = new HttpClient().Post(url, new byte[] { }); - CrestronConsole.ConsoleCommandResponse("RESPONSE:\r{0}\r\r", resp); - } - - else - { - CrestronConsole.ConsoleCommandResponse("Only get or post supported\r"); - PrintTestHttpRequestUsage(); - } - } - catch (HttpException e) - { - CrestronConsole.ConsoleCommandResponse("Exception in request:\r"); - CrestronConsole.ConsoleCommandResponse("Response URL: {0}\r", e.Response.ResponseUrl); - CrestronConsole.ConsoleCommandResponse("Response Error Code: {0}\r", e.Response.Code); - CrestronConsole.ConsoleCommandResponse("Response body: {0}\r", e.Response.ContentString); - } - - } - } - - void PrintTestHttpRequestUsage() - { - CrestronConsole.ConsoleCommandResponse("Usage: mobilehttprequest:N get/post url\r"); - } - } +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronIO; +using Crestron.SimplSharp.Reflection; +using Crestron.SimplSharpPro.CrestronThread; +using Crestron.SimplSharp.CrestronWebSocketClient; +using Crestron.SimplSharpPro; +using Crestron.SimplSharp.Net.Http; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Room.Cotija; + +namespace PepperDash.Essentials +{ + public class CotijaSystemController : Device + { + WebSocketClient WSClient; + + /// + /// Prevents post operations from stomping on each other and getting lost + /// + CEvent PostLockEvent = new CEvent(true, true); + + CEvent RegisterLockEvent = new CEvent(true, true); + + public CotijaConfig Config { get; private set; } + + Dictionary ActionDictionary = new Dictionary(StringComparer.InvariantCultureIgnoreCase); + + Dictionary PushedActions = new Dictionary(); + + CTimer ServerHeartbeatCheckTimer; + + long ServerHeartbeatInterval = 20000; + + CTimer ServerReconnectTimer; + + long ServerReconnectInterval = 5000; + + string SystemUuid; + + List RoomBridges = new List(); + + long ButtonHeartbeatInterval = 1000; + + /// + /// Used for tracking HTTP debugging + /// + bool HttpDebugEnabled; + + /// + /// + /// + /// + /// + /// + public CotijaSystemController(string key, string name, CotijaConfig config) : base(key, name) + { + Config = config; + Debug.Console(0, this, "Mobile UI controller initializing for server:{0}", config.ServerUrl); + + CrestronConsole.AddNewConsoleCommand(AuthorizeSystem, + "mobileauth", "Authorizes system to talk to cotija server", ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(s => ShowInfo(), + "mobileinfo", "Shows information for current mobile control session", ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(s => { + s = s.Trim(); + if(!string.IsNullOrEmpty(s)) + { + HttpDebugEnabled = (s.Trim() != "0"); + } + CrestronConsole.ConsoleCommandResponse("HTTP Debug {0}", HttpDebugEnabled ? "Enabled" : "Disabled"); + }, + "mobilehttpdebug", "1 enables more verbose HTTP response debugging", ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(TestHttpRequest, + "mobilehttprequest", "Tests an HTTP get to URL given", ConsoleAccessLevelEnum.AccessOperator); + + } + + /// + /// Adds an action to the dictionary + /// + /// The path of the API command + /// The action to be triggered by the commmand + public void AddAction(string key, object action) + { + if (!ActionDictionary.ContainsKey(key)) + { + ActionDictionary.Add(key, action); + } + else + { + Debug.Console(1, this, "Cannot add action with key '{0}' because key already exists in ActionDictionary.", key); + } + } + + /// + /// Removes an action from the dictionary + /// + /// + public void RemoveAction(string key) + { + if (ActionDictionary.ContainsKey(key)) + ActionDictionary.Remove(key); + } + + /// + /// + /// + /// + public void AddBridge(CotijaBridgeBase bridge) + { + RoomBridges.Add(bridge); + var b = bridge as IDelayedConfiguration; + if (b != null) + { + Debug.Console(0, this, "Adding room bridge with delayed configuration"); + b.ConfigurationIsReady += new EventHandler(bridge_ConfigurationIsReady); + } + else + { + Debug.Console(0, this, "Adding room bridge and sending configuration"); + RegisterSystemToServer(); + } + } + + /// + /// + /// + /// + /// + void bridge_ConfigurationIsReady(object sender, EventArgs e) + { + Debug.Console(1, this, "Bridge ready. Registering"); + // send the configuration object to the server + RegisterSystemToServer(); + } + + /// + /// + /// + /// + void ReconnectToServerTimerCallback(object o) + { + RegisterSystemToServer(); + } + + /// + /// Verifies system connection with servers + /// + /// + void AuthorizeSystem(string code) + { + if (string.IsNullOrEmpty(code)) + { + CrestronConsole.ConsoleCommandResponse("Please enter a user code to authorize a system"); + return; + } + + var req = new HttpClientRequest(); + string url = string.Format("http://{0}/api/system/grantcode/{1}/{2}", Config.ServerUrl, code, SystemUuid); + Debug.Console(0, this, "Authorizing to: {0}", url); + + if (string.IsNullOrEmpty(Config.ServerUrl)) + { + CrestronConsole.ConsoleCommandResponse("Config URL address is not set. Check portal configuration"); + return; + } + try + { + req.Url.Parse(url); + new HttpClient().DispatchAsync(req, (r, e) => + { + CheckHttpDebug(r, e); + if (e == HTTP_CALLBACK_ERROR.COMPLETED) + { + if (r.Code == 200) + { + Debug.Console(0, "System authorized, sending config."); + RegisterSystemToServer(); + } + else if (r.Code == 404) + { + if (r.ContentString.Contains("codeNotFound")) + { + Debug.Console(0, "Authorization failed, code not found for system UUID {0}", SystemUuid); + } + else if (r.ContentString.Contains("uuidNotFound")) + { + Debug.Console(0, "Authorization failed, uuid {0} not found. Check Essentials configuration is correct", + SystemUuid); + } + } + } + else + Debug.Console(0, this, "Error {0} in authorizing system", e); + }); + } + catch (Exception e) + { + Debug.Console(0, this, "Error in authorizing: {0}", e); + } + } + + /// + /// Dumps info in response to console command. + /// + void ShowInfo() + { + var url = Config != null ? Config.ServerUrl : "No config"; + string name; + string code; + if (RoomBridges != null && RoomBridges.Count > 0) + { + name = RoomBridges[0].RoomName; + code = RoomBridges[0].UserCode; + } + else + { + name = "No config"; + code = "Not available"; + } + var conn = WSClient == null ? "No client" : (WSClient.Connected ? "Yes" : "No"); + + CrestronConsole.ConsoleCommandResponse(@"Mobile Control Information: + Server address: {0} + System Name: {1} + System UUID: {2} + System User code: {3} + Connected?: {4}", url, name, SystemUuid, + code, conn); + } + + /// + /// Registers the room with the server + /// + /// URL of the server, including the port number, if not 80. Format: "serverUrlOrIp:port" + void RegisterSystemToServer() + { + var ready = RegisterLockEvent.Wait(20000); + if (!ready) + { + Debug.Console(1, this, "RegisterSystemToServer failed to enter after 20 seconds. Ignoring"); + return; + } + RegisterLockEvent.Reset(); + + try + { + var confObject = ConfigReader.ConfigObject; + confObject.Info.RuntimeInfo.AppName = Assembly.GetExecutingAssembly().GetName().Name; + var version = Assembly.GetExecutingAssembly().GetName().Version; + confObject.Info.RuntimeInfo.AssemblyVersion = string.Format("{0}.{1}.{2}", version.Major, version.Minor, version.Build); + confObject.Info.RuntimeInfo.OsVersion = Crestron.SimplSharp.CrestronEnvironment.OSVersion.Firmware; + + string postBody = JsonConvert.SerializeObject(confObject); + SystemUuid = confObject.SystemUuid; + + if (string.IsNullOrEmpty(postBody)) + { + Debug.Console(1, this, "ERROR: Config body is empty. Cannot register with server."); + } + else + { + var regClient = new HttpClient(); + regClient.Verbose = true; + regClient.KeepAlive = true; + + string url = string.Format("http://{0}/api/system/join/{1}", Config.ServerUrl, SystemUuid); + Debug.Console(1, this, "Joining server at {0}", url); + + HttpClientRequest request = new HttpClientRequest(); + request.Url.Parse(url); + request.RequestType = RequestType.Post; + request.Header.SetHeaderValue("Content-Type", "application/json"); + request.ContentString = postBody; + + var err = regClient.DispatchAsync(request, RegistrationConnectionCallback); + } + + } + catch (Exception e) + { + Debug.Console(0, this, "ERROR: Initilizing Room: {0}", e); + RegisterLockEvent.Set(); + StartReconnectTimer(); + } + + } + + /// + /// Sends a message to the server from a room + /// + /// room from which the message originates + /// object to be serialized and sent in post body + public void SendMessageToServer(JObject o) + { + + if (WSClient != null && WSClient.Connected) + { + string message = JsonConvert.SerializeObject(o, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); + Debug.Console(1, this, "Message TX: {0}", message); + var messageBytes = System.Text.Encoding.UTF8.GetBytes(message); + WSClient.Send(messageBytes, (uint)messageBytes.Length, WebSocketClient.WEBSOCKET_PACKET_TYPES.LWS_WS_OPCODE_07__TEXT_FRAME); + //WSClient.SendAsync(messageBytes, (uint)messageBytes.Length, WebSocketClient.WEBSOCKET_PACKET_TYPES.LWS_WS_OPCODE_07__TEXT_FRAME); + } + + } + + /// + /// Disconnects the SSE Client and stops the heartbeat timer + /// + /// + void DisconnectStreamClient(string command) + { + //if(SseClient != null) + // SseClient.Disconnect(); + + if (WSClient != null && WSClient.Connected) + WSClient.Disconnect(); + + if (ServerHeartbeatCheckTimer != null) + { + ServerHeartbeatCheckTimer.Stop(); + + ServerHeartbeatCheckTimer = null; + } + } + + /// + /// The callback that fires when we get a response from our registration attempt + /// + /// + /// + void RegistrationConnectionCallback(HttpClientResponse resp, HTTP_CALLBACK_ERROR err) + { + CheckHttpDebug(resp, err); + Debug.Console(1, this, "RegistrationConnectionCallback: {0}", err); + try + { + if (resp != null && resp.Code == 200) + { + if(ServerReconnectTimer != null) + { + ServerReconnectTimer.Stop(); + ServerReconnectTimer = null; + } + + // Success here! + ConnectStreamClient(); + } + else + { + if (resp != null) + Debug.Console(1, this, "Response from server: {0}\n{1}", resp.Code, err); + else + { + Debug.Console(1, this, "Null response received from server."); + } + StartReconnectTimer(); + } + } + catch (Exception e) + { + Debug.Console(1, this, "Error Initializing Stream Client: {0}", e); + StartReconnectTimer(); + } + RegisterLockEvent.Set(); + } + + /// + /// Executes when we don't get a heartbeat message in time. Triggers reconnect. + /// + /// For CTimer callback. Not used + void HeartbeatExpiredTimerCallback(object o) + { + Debug.Console(1, this, "Heartbeat Timer Expired."); + if (ServerHeartbeatCheckTimer != null) + { + ServerHeartbeatCheckTimer.Stop(); + ServerHeartbeatCheckTimer = null; + } + StartReconnectTimer(); + } + + /// + /// + /// + /// + /// + void StartReconnectTimer() + { + // Start the reconnect timer + if (ServerReconnectTimer == null) + { + ServerReconnectTimer = new CTimer(ReconnectToServerTimerCallback, null, ServerReconnectInterval, ServerReconnectInterval); + Debug.Console(1, this, "Reconnect Timer Started."); + } + ServerReconnectTimer.Reset(ServerReconnectInterval, ServerReconnectInterval); + } + + /// + /// + /// + /// + /// + void ResetOrStartHearbeatTimer() + { + if (ServerHeartbeatCheckTimer == null) + { + ServerHeartbeatCheckTimer = new CTimer(HeartbeatExpiredTimerCallback, null, ServerHeartbeatInterval, ServerHeartbeatInterval); + + Debug.Console(1, this, "Heartbeat Timer Started."); + } + + ServerHeartbeatCheckTimer.Reset(ServerHeartbeatInterval, ServerHeartbeatInterval); + } + + + /// + /// Connects the SSE Client + /// + /// + void ConnectStreamClient() + { + Debug.Console(0, this, "Initializing Stream client to server."); + + if (WSClient == null) + { + WSClient = new WebSocketClient(); + } + WSClient.URL = string.Format("wss://{0}/system/join/{1}", Config.ServerUrl, this.SystemUuid); + WSClient.Connect(); + Debug.Console(0, this, "Websocket connected"); + WSClient.ReceiveCallBack = WebsocketReceiveCallback; + //WSClient.SendCallBack = WebsocketSendCallback; + WSClient.ReceiveAsync(); + } + + /// + /// Resets reconnect timer and updates usercode + /// + /// + void HandleHeartBeat(JToken content) + { + var code = content["userCode"]; + if(code != null) + { + foreach (var b in RoomBridges) + { + b.SetUserCode(code.Value()); + } + } + ResetOrStartHearbeatTimer(); + } + + /// + /// Outputs debug info when enabled + /// + /// + /// + /// + void CheckHttpDebug(HttpClientResponse r, HTTP_CALLBACK_ERROR e) + { + if (HttpDebugEnabled) + { + Debug.Console(0, this, "------ Begin HTTP Debug ---------------------------------------"); + Debug.Console(0, this, "HTTP Response URL: {0}", r.ResponseUrl.ToString()); + Debug.Console(0, this, "HTTP Response 'error' {0}", e); + Debug.Console(0, this, "HTTP Response code: {0}", r.Code); + Debug.Console(0, this, "HTTP Response content: \r{0}", r.ContentString); + Debug.Console(0, this, "------ End HTTP Debug -----------------------------------------"); + } + } + + /// + /// + /// + /// + /// + /// + /// + int WebsocketReceiveCallback(byte[] data, uint length, WebSocketClient.WEBSOCKET_PACKET_TYPES opcode, + WebSocketClient.WEBSOCKET_RESULT_CODES err) + { + var rx = System.Text.Encoding.UTF8.GetString(data, 0, (int)length); + if(rx.Length > 0) + ParseStreamRx(rx); + WSClient.ReceiveAsync(); + return 1; + } + + /// + /// Callback to catch possible errors in sending via the websocket + /// + /// + /// + int WebsocketSendCallback(Crestron.SimplSharp.CrestronWebSocketClient.WebSocketClient.WEBSOCKET_RESULT_CODES result) + { + Debug.Console(1, this, "SendCallback result: {0}", result); + + return 1; + } + + /// + /// + /// + /// + /// + void ParseStreamRx(string message) + { + if(string.IsNullOrEmpty(message)) + return; + + Debug.Console(1, this, "Message RX: '{0}'", message); + try + { + var messageObj = JObject.Parse(message); + + var type = messageObj["type"].Value(); + + if (type == "hello") + { + ResetOrStartHearbeatTimer(); + } + else if (type == "/system/heartbeat") + { + HandleHeartBeat(messageObj["content"]); + } + else if (type == "close") + { + WSClient.Disconnect(); + + ServerHeartbeatCheckTimer.Stop(); + // Start the reconnect timer + StartReconnectTimer(); + } + else + { + // Check path against Action dictionary + if (ActionDictionary.ContainsKey(type)) + { + var action = ActionDictionary[type]; + + if (action is Action) + { + (action as Action)(); + } + else if (action is PressAndHoldAction) + { + var stateString = messageObj["content"]["state"].Value(); + + // Look for a button press event + if (!string.IsNullOrEmpty(stateString)) + { + switch (stateString) + { + case "true": + { + if (!PushedActions.ContainsKey(type)) + { + PushedActions.Add(type, new CTimer(o => + { + (action as PressAndHoldAction)(false); + PushedActions.Remove(type); + }, null, ButtonHeartbeatInterval, ButtonHeartbeatInterval)); + } + // Maybe add an else to reset the timer + break; + } + case "held": + { + if (!PushedActions.ContainsKey(type)) + { + PushedActions[type].Reset(ButtonHeartbeatInterval, ButtonHeartbeatInterval); + } + return; + } + case "false": + { + if (PushedActions.ContainsKey(type)) + { + PushedActions[type].Stop(); + PushedActions.Remove(type); + } + break; + } + } + + (action as PressAndHoldAction)(stateString == "true"); + } + } + else if (action is Action) + { + var stateString = messageObj["content"]["state"].Value(); + + if (!string.IsNullOrEmpty(stateString)) + { + (action as Action)(stateString == "true"); + } + } + else if (action is Action) + { + (action as Action)(messageObj["content"]["value"].Value()); + } + else if (action is Action) + { + (action as Action)(messageObj["content"]["value"].Value()); + } + else if (action is Action) + { + (action as Action)(messageObj["content"] + .ToObject()); + } + } + else + { + Debug.Console(1, this, "-- Warning: Incoming message has no registered handler"); + } + } + } + catch (Exception err) + { + //Debug.Console(1, "SseMessageLengthBeforeFailureCount: {0}", SseMessageLengthBeforeFailureCount); + //SseMessageLengthBeforeFailureCount = 0; + Debug.Console(1, this, "Unable to parse message: {0}", err); + } + } + + void TestHttpRequest(string s) + { + { + s = s.Trim(); + if (string.IsNullOrEmpty(s)) + { + PrintTestHttpRequestUsage(); + return; + } + var tokens = s.Split(' '); + if (tokens.Length < 2) + { + CrestronConsole.ConsoleCommandResponse("Too few paramaters\r"); + PrintTestHttpRequestUsage(); + return; + } + + try + { + var url = tokens[1]; + if (tokens[0].ToLower() == "get") + { + var resp = new HttpClient().Get(url); + CrestronConsole.ConsoleCommandResponse("RESPONSE:\r{0}\r\r", resp); + } + else if (tokens[0].ToLower() == "post") + { + var resp = new HttpClient().Post(url, new byte[] { }); + CrestronConsole.ConsoleCommandResponse("RESPONSE:\r{0}\r\r", resp); + } + + else + { + CrestronConsole.ConsoleCommandResponse("Only get or post supported\r"); + PrintTestHttpRequestUsage(); + } + } + catch (HttpException e) + { + CrestronConsole.ConsoleCommandResponse("Exception in request:\r"); + CrestronConsole.ConsoleCommandResponse("Response URL: {0}\r", e.Response.ResponseUrl); + CrestronConsole.ConsoleCommandResponse("Response Error Code: {0}\r", e.Response.Code); + CrestronConsole.ConsoleCommandResponse("Response body: {0}\r", e.Response.ContentString); + } + + } + } + + void PrintTestHttpRequestUsage() + { + CrestronConsole.ConsoleCommandResponse("Usage: mobilehttprequest:N get/post url\r"); + } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Room/Cotija/CotijaSystemController.cs.orig b/PepperDashEssentials/Room/Cotija/CotijaSystemController.cs.orig similarity index 100% rename from Essentials/PepperDashEssentials/Room/Cotija/CotijaSystemController.cs.orig rename to PepperDashEssentials/Room/Cotija/CotijaSystemController.cs.orig diff --git a/Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IChannelExtensions.cs b/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IChannelExtensions.cs similarity index 97% rename from Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IChannelExtensions.cs rename to PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IChannelExtensions.cs index d665bd2c..b26a7f99 100644 --- a/Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IChannelExtensions.cs +++ b/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IChannelExtensions.cs @@ -1,37 +1,37 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using PepperDash.Essentials.Core; -using PepperDash.Core; - -namespace PepperDash.Essentials.Room.Cotija -{ - public static class IChannelExtensions - { - public static void LinkActions(this IChannel dev, CotijaSystemController controller) - { - var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); - - controller.AddAction(prefix + "chanup", new PressAndHoldAction(dev.ChannelUp)); - controller.AddAction(prefix + "chandown", new PressAndHoldAction(dev.ChannelDown)); - controller.AddAction(prefix + "lastchan", new PressAndHoldAction(dev.LastChannel)); - controller.AddAction(prefix + "guide", new PressAndHoldAction(dev.Guide)); - controller.AddAction(prefix + "info", new PressAndHoldAction(dev.Info)); - controller.AddAction(prefix + "exit", new PressAndHoldAction(dev.Exit)); - } - - public static void UnlinkActions(this IChannel dev, CotijaSystemController controller) - { - var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); - - controller.RemoveAction(prefix + "chanup"); - controller.RemoveAction(prefix + "chandown"); - controller.RemoveAction(prefix + "lastchan"); - controller.RemoveAction(prefix + "guide"); - controller.RemoveAction(prefix + "info"); - controller.RemoveAction(prefix + "exit"); - } - } +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using PepperDash.Essentials.Core; +using PepperDash.Core; + +namespace PepperDash.Essentials.Room.Cotija +{ + public static class IChannelExtensions + { + public static void LinkActions(this IChannel dev, CotijaSystemController controller) + { + var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); + + controller.AddAction(prefix + "chanup", new PressAndHoldAction(dev.ChannelUp)); + controller.AddAction(prefix + "chandown", new PressAndHoldAction(dev.ChannelDown)); + controller.AddAction(prefix + "lastchan", new PressAndHoldAction(dev.LastChannel)); + controller.AddAction(prefix + "guide", new PressAndHoldAction(dev.Guide)); + controller.AddAction(prefix + "info", new PressAndHoldAction(dev.Info)); + controller.AddAction(prefix + "exit", new PressAndHoldAction(dev.Exit)); + } + + public static void UnlinkActions(this IChannel dev, CotijaSystemController controller) + { + var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); + + controller.RemoveAction(prefix + "chanup"); + controller.RemoveAction(prefix + "chandown"); + controller.RemoveAction(prefix + "lastchan"); + controller.RemoveAction(prefix + "guide"); + controller.RemoveAction(prefix + "info"); + controller.RemoveAction(prefix + "exit"); + } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IColorExtensions.cs b/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IColorExtensions.cs similarity index 97% rename from Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IColorExtensions.cs rename to PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IColorExtensions.cs index e7e90471..21296550 100644 --- a/Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IColorExtensions.cs +++ b/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IColorExtensions.cs @@ -1,33 +1,33 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using PepperDash.Essentials.Core; -using PepperDash.Core; - -namespace PepperDash.Essentials.Room.Cotija -{ - public static class IColorExtensions - { - public static void LinkActions(this IColor dev, CotijaSystemController controller) - { - var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); - - controller.AddAction(prefix + "red", new PressAndHoldAction(dev.Red)); - controller.AddAction(prefix + "green", new PressAndHoldAction(dev.Green)); - controller.AddAction(prefix + "yellow", new PressAndHoldAction(dev.Yellow)); - controller.AddAction(prefix + "blue", new PressAndHoldAction(dev.Blue)); - } - - public static void UnlinkActions(this IColor dev, CotijaSystemController controller) - { - var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); - - controller.RemoveAction(prefix + "red"); - controller.RemoveAction(prefix + "green"); - controller.RemoveAction(prefix + "yellow"); - controller.RemoveAction(prefix + "blue"); - } - } +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using PepperDash.Essentials.Core; +using PepperDash.Core; + +namespace PepperDash.Essentials.Room.Cotija +{ + public static class IColorExtensions + { + public static void LinkActions(this IColor dev, CotijaSystemController controller) + { + var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); + + controller.AddAction(prefix + "red", new PressAndHoldAction(dev.Red)); + controller.AddAction(prefix + "green", new PressAndHoldAction(dev.Green)); + controller.AddAction(prefix + "yellow", new PressAndHoldAction(dev.Yellow)); + controller.AddAction(prefix + "blue", new PressAndHoldAction(dev.Blue)); + } + + public static void UnlinkActions(this IColor dev, CotijaSystemController controller) + { + var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); + + controller.RemoveAction(prefix + "red"); + controller.RemoveAction(prefix + "green"); + controller.RemoveAction(prefix + "yellow"); + controller.RemoveAction(prefix + "blue"); + } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IDPadExtensions.cs b/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IDPadExtensions.cs similarity index 97% rename from Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IDPadExtensions.cs rename to PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IDPadExtensions.cs index 294c9623..3652ba68 100644 --- a/Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IDPadExtensions.cs +++ b/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IDPadExtensions.cs @@ -1,39 +1,39 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using PepperDash.Essentials.Core; -using PepperDash.Core; - -namespace PepperDash.Essentials.Room.Cotija -{ - public static class IDPadExtensions - { - public static void LinkActions(this IDPad dev, CotijaSystemController controller) - { - var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); - - controller.AddAction(prefix + "up", new PressAndHoldAction(dev.Up)); - controller.AddAction(prefix + "down", new PressAndHoldAction(dev.Down)); - controller.AddAction(prefix + "left", new PressAndHoldAction(dev.Left)); - controller.AddAction(prefix + "right", new PressAndHoldAction(dev.Right)); - controller.AddAction(prefix + "select", new PressAndHoldAction(dev.Select)); - controller.AddAction(prefix + "menu", new PressAndHoldAction(dev.Menu)); - controller.AddAction(prefix + "exit", new PressAndHoldAction(dev.Exit)); - } - - public static void UnlinkActions(this IDPad dev, CotijaSystemController controller) - { - var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); - - controller.RemoveAction(prefix + "up"); - controller.RemoveAction(prefix + "down"); - controller.RemoveAction(prefix + "left"); - controller.RemoveAction(prefix + "right"); - controller.RemoveAction(prefix + "select"); - controller.RemoveAction(prefix + "menu"); - controller.RemoveAction(prefix + "exit"); - } - } +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using PepperDash.Essentials.Core; +using PepperDash.Core; + +namespace PepperDash.Essentials.Room.Cotija +{ + public static class IDPadExtensions + { + public static void LinkActions(this IDPad dev, CotijaSystemController controller) + { + var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); + + controller.AddAction(prefix + "up", new PressAndHoldAction(dev.Up)); + controller.AddAction(prefix + "down", new PressAndHoldAction(dev.Down)); + controller.AddAction(prefix + "left", new PressAndHoldAction(dev.Left)); + controller.AddAction(prefix + "right", new PressAndHoldAction(dev.Right)); + controller.AddAction(prefix + "select", new PressAndHoldAction(dev.Select)); + controller.AddAction(prefix + "menu", new PressAndHoldAction(dev.Menu)); + controller.AddAction(prefix + "exit", new PressAndHoldAction(dev.Exit)); + } + + public static void UnlinkActions(this IDPad dev, CotijaSystemController controller) + { + var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); + + controller.RemoveAction(prefix + "up"); + controller.RemoveAction(prefix + "down"); + controller.RemoveAction(prefix + "left"); + controller.RemoveAction(prefix + "right"); + controller.RemoveAction(prefix + "select"); + controller.RemoveAction(prefix + "menu"); + controller.RemoveAction(prefix + "exit"); + } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IDvrExtensions.cs b/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IDvrExtensions.cs similarity index 97% rename from Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IDvrExtensions.cs rename to PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IDvrExtensions.cs index 3909b540..99aa1103 100644 --- a/Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IDvrExtensions.cs +++ b/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IDvrExtensions.cs @@ -1,29 +1,29 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using PepperDash.Essentials.Core; -using PepperDash.Core; - -namespace PepperDash.Essentials.Room.Cotija -{ - public static class IDvrExtensions - { - public static void LinkActions(this IDvr dev, CotijaSystemController controller) - { - var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); - - controller.AddAction(prefix + "dvrlist", new PressAndHoldAction(dev.DvrList)); - controller.AddAction(prefix + "record", new PressAndHoldAction(dev.Record)); - } - - public static void UnlinkActions(this IDvr dev, CotijaSystemController controller) - { - var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); - - controller.RemoveAction(prefix + "dvrlist"); - controller.RemoveAction(prefix + "record"); - } - } +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using PepperDash.Essentials.Core; +using PepperDash.Core; + +namespace PepperDash.Essentials.Room.Cotija +{ + public static class IDvrExtensions + { + public static void LinkActions(this IDvr dev, CotijaSystemController controller) + { + var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); + + controller.AddAction(prefix + "dvrlist", new PressAndHoldAction(dev.DvrList)); + controller.AddAction(prefix + "record", new PressAndHoldAction(dev.Record)); + } + + public static void UnlinkActions(this IDvr dev, CotijaSystemController controller) + { + var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); + + controller.RemoveAction(prefix + "dvrlist"); + controller.RemoveAction(prefix + "record"); + } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/INumericExtensions.cs b/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/INumericExtensions.cs similarity index 98% rename from Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/INumericExtensions.cs rename to PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/INumericExtensions.cs index 83a6f4cc..7246cb51 100644 --- a/Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/INumericExtensions.cs +++ b/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/INumericExtensions.cs @@ -1,50 +1,50 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using PepperDash.Essentials.Core; -using PepperDash.Core; - -namespace PepperDash.Essentials.Room.Cotija -{ - public static class INumericExtensions - { - public static void LinkActions(this INumericKeypad dev, CotijaSystemController controller) - { - var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); - - controller.AddAction(prefix + "num0", new PressAndHoldAction(dev.Digit0)); - controller.AddAction(prefix + "num1", new PressAndHoldAction(dev.Digit1)); - controller.AddAction(prefix + "num2", new PressAndHoldAction(dev.Digit2)); - controller.AddAction(prefix + "num3", new PressAndHoldAction(dev.Digit3)); - controller.AddAction(prefix + "num4", new PressAndHoldAction(dev.Digit4)); - controller.AddAction(prefix + "num5", new PressAndHoldAction(dev.Digit5)); - controller.AddAction(prefix + "num6", new PressAndHoldAction(dev.Digit6)); - controller.AddAction(prefix + "num7", new PressAndHoldAction(dev.Digit0)); - controller.AddAction(prefix + "num8", new PressAndHoldAction(dev.Digit0)); - controller.AddAction(prefix + "num9", new PressAndHoldAction(dev.Digit0)); - controller.AddAction(prefix + "dash", new PressAndHoldAction(dev.KeypadAccessoryButton1)); - controller.AddAction(prefix + "enter", new PressAndHoldAction(dev.KeypadAccessoryButton2)); - // Deal with the Accessory functions on the numpad later - } - - public static void UnlinkActions(this INumericKeypad dev, CotijaSystemController controller) - { - var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); - - controller.RemoveAction(prefix + "num0"); - controller.RemoveAction(prefix + "num1"); - controller.RemoveAction(prefix + "num2"); - controller.RemoveAction(prefix + "num3"); - controller.RemoveAction(prefix + "num4"); - controller.RemoveAction(prefix + "num5"); - controller.RemoveAction(prefix + "num6"); - controller.RemoveAction(prefix + "num7"); - controller.RemoveAction(prefix + "num8"); - controller.RemoveAction(prefix + "num9"); - controller.RemoveAction(prefix + "dash"); - controller.RemoveAction(prefix + "enter"); - } - } +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using PepperDash.Essentials.Core; +using PepperDash.Core; + +namespace PepperDash.Essentials.Room.Cotija +{ + public static class INumericExtensions + { + public static void LinkActions(this INumericKeypad dev, CotijaSystemController controller) + { + var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); + + controller.AddAction(prefix + "num0", new PressAndHoldAction(dev.Digit0)); + controller.AddAction(prefix + "num1", new PressAndHoldAction(dev.Digit1)); + controller.AddAction(prefix + "num2", new PressAndHoldAction(dev.Digit2)); + controller.AddAction(prefix + "num3", new PressAndHoldAction(dev.Digit3)); + controller.AddAction(prefix + "num4", new PressAndHoldAction(dev.Digit4)); + controller.AddAction(prefix + "num5", new PressAndHoldAction(dev.Digit5)); + controller.AddAction(prefix + "num6", new PressAndHoldAction(dev.Digit6)); + controller.AddAction(prefix + "num7", new PressAndHoldAction(dev.Digit0)); + controller.AddAction(prefix + "num8", new PressAndHoldAction(dev.Digit0)); + controller.AddAction(prefix + "num9", new PressAndHoldAction(dev.Digit0)); + controller.AddAction(prefix + "dash", new PressAndHoldAction(dev.KeypadAccessoryButton1)); + controller.AddAction(prefix + "enter", new PressAndHoldAction(dev.KeypadAccessoryButton2)); + // Deal with the Accessory functions on the numpad later + } + + public static void UnlinkActions(this INumericKeypad dev, CotijaSystemController controller) + { + var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); + + controller.RemoveAction(prefix + "num0"); + controller.RemoveAction(prefix + "num1"); + controller.RemoveAction(prefix + "num2"); + controller.RemoveAction(prefix + "num3"); + controller.RemoveAction(prefix + "num4"); + controller.RemoveAction(prefix + "num5"); + controller.RemoveAction(prefix + "num6"); + controller.RemoveAction(prefix + "num7"); + controller.RemoveAction(prefix + "num8"); + controller.RemoveAction(prefix + "num9"); + controller.RemoveAction(prefix + "dash"); + controller.RemoveAction(prefix + "enter"); + } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IPowerExtensions.cs b/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IPowerExtensions.cs similarity index 97% rename from Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IPowerExtensions.cs rename to PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IPowerExtensions.cs index ff986325..68b36675 100644 --- a/Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IPowerExtensions.cs +++ b/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/IPowerExtensions.cs @@ -1,32 +1,32 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using PepperDash.Essentials.Core; -using PepperDash.Core; - -namespace PepperDash.Essentials.Room.Cotija -{ - public static class IPowerExtensions - { - public static void LinkActions(this IPower dev, CotijaSystemController controller) - { - var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); - - controller.AddAction(prefix + "poweron", new Action(dev.PowerOn)); - controller.AddAction(prefix + "poweroff", new Action(dev.PowerOff)); - controller.AddAction(prefix + "powertoggle", new Action(dev.PowerToggle)); - } - - public static void UnlinkActions(this IPower dev, CotijaSystemController controller) - { - var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); - - controller.RemoveAction(prefix + "poweron"); - controller.RemoveAction(prefix + "poweroff"); - controller.RemoveAction(prefix + "powertoggle"); - - } - } +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using PepperDash.Essentials.Core; +using PepperDash.Core; + +namespace PepperDash.Essentials.Room.Cotija +{ + public static class IPowerExtensions + { + public static void LinkActions(this IPower dev, CotijaSystemController controller) + { + var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); + + controller.AddAction(prefix + "poweron", new Action(dev.PowerOn)); + controller.AddAction(prefix + "poweroff", new Action(dev.PowerOff)); + controller.AddAction(prefix + "powertoggle", new Action(dev.PowerToggle)); + } + + public static void UnlinkActions(this IPower dev, CotijaSystemController controller) + { + var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); + + controller.RemoveAction(prefix + "poweron"); + controller.RemoveAction(prefix + "poweroff"); + controller.RemoveAction(prefix + "powertoggle"); + + } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/ISetTopBoxControlsExtensions.cs b/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/ISetTopBoxControlsExtensions.cs similarity index 97% rename from Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/ISetTopBoxControlsExtensions.cs rename to PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/ISetTopBoxControlsExtensions.cs index 14dc8e90..7fa7d1b1 100644 --- a/Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/ISetTopBoxControlsExtensions.cs +++ b/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/ISetTopBoxControlsExtensions.cs @@ -1,29 +1,29 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using PepperDash.Essentials.Core; -using PepperDash.Core; - -namespace PepperDash.Essentials.Room.Cotija -{ - public static class ISetTopBoxControlsExtensions - { - public static void LinkActions(this ISetTopBoxControls dev, CotijaSystemController controller) - { - var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); - - controller.AddAction(prefix + "dvrlist", new PressAndHoldAction(dev.DvrList)); - controller.AddAction(prefix + "replay", new PressAndHoldAction(dev.Replay)); - } - - public static void UnlinkActions(this ISetTopBoxControls dev, CotijaSystemController controller) - { - var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); - - controller.RemoveAction(prefix + "dvrlist"); - controller.RemoveAction(prefix + "replay"); - } - } +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using PepperDash.Essentials.Core; +using PepperDash.Core; + +namespace PepperDash.Essentials.Room.Cotija +{ + public static class ISetTopBoxControlsExtensions + { + public static void LinkActions(this ISetTopBoxControls dev, CotijaSystemController controller) + { + var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); + + controller.AddAction(prefix + "dvrlist", new PressAndHoldAction(dev.DvrList)); + controller.AddAction(prefix + "replay", new PressAndHoldAction(dev.Replay)); + } + + public static void UnlinkActions(this ISetTopBoxControls dev, CotijaSystemController controller) + { + var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); + + controller.RemoveAction(prefix + "dvrlist"); + controller.RemoveAction(prefix + "replay"); + } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/ITransportExtensions.cs b/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/ITransportExtensions.cs similarity index 97% rename from Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/ITransportExtensions.cs rename to PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/ITransportExtensions.cs index 64af15b0..34bda457 100644 --- a/Essentials/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/ITransportExtensions.cs +++ b/PepperDashEssentials/Room/Cotija/DeviceTypeInterfaces/ITransportExtensions.cs @@ -1,41 +1,41 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using PepperDash.Essentials.Core; -using PepperDash.Core; - -namespace PepperDash.Essentials.Room.Cotija -{ - public static class ITransportExtensions - { - public static void LinkActions(this ITransport dev, CotijaSystemController controller) - { - var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); - - controller.AddAction(prefix + "play", new PressAndHoldAction(dev.Play)); - controller.AddAction(prefix + "pause", new PressAndHoldAction(dev.Pause)); - controller.AddAction(prefix + "stop", new PressAndHoldAction(dev.Stop)); - controller.AddAction(prefix + "prevtrack", new PressAndHoldAction(dev.ChapPlus)); - controller.AddAction(prefix + "nexttrack", new PressAndHoldAction(dev.ChapMinus)); - controller.AddAction(prefix + "rewind", new PressAndHoldAction(dev.Rewind)); - controller.AddAction(prefix + "ffwd", new PressAndHoldAction(dev.FFwd)); - controller.AddAction(prefix + "record", new PressAndHoldAction(dev.Record)); - } - - public static void UnlinkActions(this ITransport dev, CotijaSystemController controller) - { - var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); - - controller.RemoveAction(prefix + "play"); - controller.RemoveAction(prefix + "pause"); - controller.RemoveAction(prefix + "stop"); - controller.RemoveAction(prefix + "prevtrack"); - controller.RemoveAction(prefix + "nexttrack"); - controller.RemoveAction(prefix + "rewind"); - controller.RemoveAction(prefix + "ffwd"); - controller.RemoveAction(prefix + "record"); - } - } +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using PepperDash.Essentials.Core; +using PepperDash.Core; + +namespace PepperDash.Essentials.Room.Cotija +{ + public static class ITransportExtensions + { + public static void LinkActions(this ITransport dev, CotijaSystemController controller) + { + var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); + + controller.AddAction(prefix + "play", new PressAndHoldAction(dev.Play)); + controller.AddAction(prefix + "pause", new PressAndHoldAction(dev.Pause)); + controller.AddAction(prefix + "stop", new PressAndHoldAction(dev.Stop)); + controller.AddAction(prefix + "prevtrack", new PressAndHoldAction(dev.ChapPlus)); + controller.AddAction(prefix + "nexttrack", new PressAndHoldAction(dev.ChapMinus)); + controller.AddAction(prefix + "rewind", new PressAndHoldAction(dev.Rewind)); + controller.AddAction(prefix + "ffwd", new PressAndHoldAction(dev.FFwd)); + controller.AddAction(prefix + "record", new PressAndHoldAction(dev.Record)); + } + + public static void UnlinkActions(this ITransport dev, CotijaSystemController controller) + { + var prefix = string.Format(@"/device/{0}/", (dev as IKeyed).Key); + + controller.RemoveAction(prefix + "play"); + controller.RemoveAction(prefix + "pause"); + controller.RemoveAction(prefix + "stop"); + controller.RemoveAction(prefix + "prevtrack"); + controller.RemoveAction(prefix + "nexttrack"); + controller.RemoveAction(prefix + "rewind"); + controller.RemoveAction(prefix + "ffwd"); + controller.RemoveAction(prefix + "record"); + } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Room/Cotija/Interfaces.cs b/PepperDashEssentials/Room/Cotija/Interfaces.cs similarity index 100% rename from Essentials/PepperDashEssentials/Room/Cotija/Interfaces.cs rename to PepperDashEssentials/Room/Cotija/Interfaces.cs diff --git a/Essentials/PepperDashEssentials/Room/Cotija/RoomBridges/CotijaBridgeBase.cs b/PepperDashEssentials/Room/Cotija/RoomBridges/CotijaBridgeBase.cs similarity index 100% rename from Essentials/PepperDashEssentials/Room/Cotija/RoomBridges/CotijaBridgeBase.cs rename to PepperDashEssentials/Room/Cotija/RoomBridges/CotijaBridgeBase.cs diff --git a/Essentials/PepperDashEssentials/Room/Cotija/RoomBridges/CotijaDdvc01RoomBridge.cs b/PepperDashEssentials/Room/Cotija/RoomBridges/CotijaDdvc01RoomBridge.cs similarity index 100% rename from Essentials/PepperDashEssentials/Room/Cotija/RoomBridges/CotijaDdvc01RoomBridge.cs rename to PepperDashEssentials/Room/Cotija/RoomBridges/CotijaDdvc01RoomBridge.cs diff --git a/Essentials/PepperDashEssentials/Room/Cotija/RoomBridges/CotijaEssentialsHuddleSpaceRoomBridge.cs b/PepperDashEssentials/Room/Cotija/RoomBridges/CotijaEssentialsHuddleSpaceRoomBridge.cs similarity index 100% rename from Essentials/PepperDashEssentials/Room/Cotija/RoomBridges/CotijaEssentialsHuddleSpaceRoomBridge.cs rename to PepperDashEssentials/Room/Cotija/RoomBridges/CotijaEssentialsHuddleSpaceRoomBridge.cs diff --git a/Essentials/PepperDashEssentials/Room/Emergency/EsentialsRoomEmergencyContactClosure.cs b/PepperDashEssentials/Room/Emergency/EsentialsRoomEmergencyContactClosure.cs similarity index 100% rename from Essentials/PepperDashEssentials/Room/Emergency/EsentialsRoomEmergencyContactClosure.cs rename to PepperDashEssentials/Room/Emergency/EsentialsRoomEmergencyContactClosure.cs diff --git a/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs b/PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs similarity index 97% rename from Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs rename to PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs index 8630dfa4..5493fd9d 100644 --- a/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs +++ b/PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs @@ -1,462 +1,462 @@ -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.Room.Config; - -namespace PepperDash.Essentials -{ - public class EssentialsHuddleSpaceRoom : EssentialsRoomBase, IHasCurrentSourceInfoChange - { - public event EventHandler CurrentVolumeDeviceChange; - public event SourceInfoChangeHandler CurrentSingleSourceChange; - - protected override Func OnFeedbackFunc - { - get - { - return () => - { - var disp = DefaultDisplay as DisplayBase; - var val = CurrentSourceInfo != null - && CurrentSourceInfo.Type == eSourceListItemType.Route - && disp != null; - //&& disp.PowerIsOnFeedback.BoolValue; - return val; - }; - } - } - /// - /// - /// - protected override Func IsWarmingFeedbackFunc - { - get - { - return () => - { - var disp = DefaultDisplay as DisplayBase; - if (disp != null) - return disp.IsWarmingUpFeedback.BoolValue; - else - return false; - }; - } - } - /// - /// - /// - protected override Func IsCoolingFeedbackFunc - { - get - { - return () => - { - var disp = DefaultDisplay as DisplayBase; - if (disp != null) - return disp.IsCoolingDownFeedback.BoolValue; - else - return false; - }; - } - } - - public EssentialsRoomPropertiesConfig Config { get; private set; } - - public IRoutingSinkWithSwitching DefaultDisplay { get; private set; } - public IRoutingSinkNoSwitching DefaultAudioDevice { get; private set; } - public IBasicVolumeControls DefaultVolumeControls { get; private set; } - - public bool ExcludeFromGlobalFunctions { get; set; } - - /// - /// The config name of the source list - /// - public string SourceListKey { get; set; } - - public string DefaultSourceItem { get; set; } - - public ushort DefaultVolume { get; set; } - - /// - /// If room is off, enables power on to last source. Default true - /// - public bool EnablePowerOnToLastSource { get; set; } - string LastSourceKey; - - /// - /// - /// - public IBasicVolumeControls CurrentVolumeControls - { - get { return _CurrentAudioDevice; } - set - { - if (value == _CurrentAudioDevice) return; - - var oldDev = _CurrentAudioDevice; - // derigister this room from the device, if it can - if (oldDev is IInUseTracking) - (oldDev as IInUseTracking).InUseTracker.RemoveUser(this, "audio"); - var handler = CurrentVolumeDeviceChange; - if (handler != null) - CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.WillChange)); - _CurrentAudioDevice = value; - if (handler != null) - CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.DidChange)); - // register this room with new device, if it can - if (_CurrentAudioDevice is IInUseTracking) - (_CurrentAudioDevice as IInUseTracking).InUseTracker.AddUser(this, "audio"); - } - } - IBasicVolumeControls _CurrentAudioDevice; - - /// - /// The SourceListItem last run - containing names and icons - /// - public SourceListItem CurrentSourceInfo - { - get { return _CurrentSourceInfo; } - private set - { - if (value == _CurrentSourceInfo) return; - - var handler = CurrentSingleSourceChange; - // remove from in-use tracker, if so equipped - if(_CurrentSourceInfo != null && _CurrentSourceInfo.SourceDevice is IInUseTracking) - (_CurrentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.RemoveUser(this, "control"); - - if (handler != null) - handler(this, _CurrentSourceInfo, ChangeType.WillChange); - - _CurrentSourceInfo = value; - - // add to in-use tracking - if (_CurrentSourceInfo != null && _CurrentSourceInfo.SourceDevice is IInUseTracking) - (_CurrentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.AddUser(this, "control"); - if (handler != null) - handler(this, _CurrentSourceInfo, ChangeType.DidChange); - } - } - SourceListItem _CurrentSourceInfo; - - public string CurrentSourceInfoKey { get; private set; } - - /// - /// - /// - /// - /// - public EssentialsHuddleSpaceRoom(string key, string name, IRoutingSinkWithSwitching defaultDisplay, - IRoutingSinkNoSwitching defaultAudio, EssentialsRoomPropertiesConfig config) - : base(key, name) - { - Config = config; - DefaultDisplay = defaultDisplay; - DefaultAudioDevice = defaultAudio; - if (defaultAudio is IBasicVolumeControls) - DefaultVolumeControls = defaultAudio as IBasicVolumeControls; - else if (defaultAudio is IHasVolumeDevice) - DefaultVolumeControls = (defaultAudio as IHasVolumeDevice).VolumeDevice; - CurrentVolumeControls = DefaultVolumeControls; - - var disp = DefaultDisplay as DisplayBase; - if (disp != null) - { - // Link power, warming, cooling to display - disp.PowerIsOnFeedback.OutputChange += (o, a) => - { - if (disp.PowerIsOnFeedback.BoolValue != OnFeedback.BoolValue) - { - if (!disp.PowerIsOnFeedback.BoolValue) - CurrentSourceInfo = null; - OnFeedback.FireUpdate(); - } - }; - - disp.IsWarmingUpFeedback.OutputChange += (o, a) => - { - IsWarmingUpFeedback.FireUpdate(); - if (!IsWarmingUpFeedback.BoolValue) - (DefaultDisplay as IBasicVolumeWithFeedback).SetVolume(DefaultVolume); - }; - disp.IsCoolingDownFeedback.OutputChange += (o, a) => - { - IsCoolingDownFeedback.FireUpdate(); - }; - } - - SourceListKey = "default"; - EnablePowerOnToLastSource = true; - } - - - /// - /// - /// - protected override void EndShutdown() - { - SetDefaultLevels(); - - RunDefaultRoute(); - - CrestronEnvironment.Sleep(1000); - - RunRouteAction("roomOff"); - } - - /// - /// Routes the default source item, if any - /// - public void RunDefaultRoute() - { - //if (DefaultSourceItem != null && !OnFeedback.BoolValue) - RunRouteAction(DefaultSourceItem); - } - - /// - /// - /// - /// - public void RunRouteAction(string routeKey) - { - RunRouteAction(routeKey, null); - } - - /// - /// Gets a source from config list SourceListKey and dynamically build and executes the - /// route or commands - /// - /// - public void RunRouteAction(string routeKey, Action successCallback) - { - // Run this on a separate thread - new CTimer(o => - { - Debug.Console(1, this, "Run route action '{0}'", routeKey); - var dict = ConfigReader.ConfigObject.GetSourceListForKey(SourceListKey); - if(dict == null) - { - Debug.Console(1, this, "WARNING: Config source list '{0}' not found", SourceListKey); - return; - } - - // Try to get the list item by it's string key - if (!dict.ContainsKey(routeKey)) - { - Debug.Console(1, this, "WARNING: No item '{0}' found on config list '{1}'", - routeKey, SourceListKey); - return; - } - - var item = dict[routeKey]; - //Debug.Console(2, this, "Action {0} has {1} steps", - // item.SourceKey, item.RouteList.Count); - - // End usage timer on last source - if (!string.IsNullOrEmpty(LastSourceKey)) - { - var lastSource = dict[LastSourceKey].SourceDevice; - - try - { - if (lastSource != null && lastSource is IUsageTracking) - (lastSource as IUsageTracking).UsageTracker.EndDeviceUsage(); - } - catch (Exception e) - { - Debug.Console(1, this, "*#* EXCEPTION in end usage tracking (257):\r{0}", e); - } - } - - // Let's run it - if (routeKey.ToLower() != "roomoff") - { - LastSourceKey = routeKey; - } - else - { - CurrentSourceInfoKey = null; - } - - foreach (var route in item.RouteList) - { - // if there is a $defaultAll on route, run two separate - if (route.DestinationKey.Equals("$defaultAll", StringComparison.OrdinalIgnoreCase)) - { - // Going to assume a single-path route for now - var tempVideo = new SourceRouteListItem - { - DestinationKey = "$defaultDisplay", - SourceKey = route.SourceKey, - Type = eRoutingSignalType.Video - }; - DoRoute(tempVideo); - - //var tempAudio = new SourceRouteListItem - //{ - // DestinationKey = "$defaultAudio", - // SourceKey = route.SourceKey, - // Type = eRoutingSignalType.Audio - //}; - //DoRoute(tempAudio); - //continue; -- not sure why this was here - } - else - DoRoute(route); - } - - // Start usage timer on routed source - if (item.SourceDevice is IUsageTracking) - { - (item.SourceDevice as IUsageTracking).UsageTracker.StartDeviceUsage(); - } - - - - - // Set volume control, using default if non provided - IBasicVolumeControls volDev = null; - // Handle special cases for volume control - if (string.IsNullOrEmpty(item.VolumeControlKey) - || item.VolumeControlKey.Equals("$defaultAudio", StringComparison.OrdinalIgnoreCase)) - volDev = DefaultVolumeControls; - else if (item.VolumeControlKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase)) - volDev = DefaultDisplay as IBasicVolumeControls; - // Or a specific device, probably rarely used. - else - { - var dev = DeviceManager.GetDeviceForKey(item.VolumeControlKey); - if (dev is IBasicVolumeControls) - volDev = dev as IBasicVolumeControls; - else if (dev is IHasVolumeDevice) - volDev = (dev as IHasVolumeDevice).VolumeDevice; - } - - if (volDev != CurrentVolumeControls) - { - // zero the volume on the device we are leaving. - // Set the volume to default on device we are entering - if (ZeroVolumeWhenSwtichingVolumeDevices && CurrentVolumeControls is IBasicVolumeWithFeedback) - { - var vd = CurrentVolumeControls as IBasicVolumeWithFeedback; - SavedVolumeLevels[vd] = (uint)vd.VolumeLevelFeedback.IntValue; - vd.SetVolume(0); - } - CurrentVolumeControls = volDev; - if (ZeroVolumeWhenSwtichingVolumeDevices && CurrentVolumeControls is IBasicVolumeWithFeedback) - { - var vd = CurrentVolumeControls as IBasicVolumeWithFeedback; - ushort vol = (SavedVolumeLevels.ContainsKey(vd) ? (ushort)SavedVolumeLevels[vd] : DefaultVolume); - vd.SetVolume(vol); - } - } - - - - // store the name and UI info for routes - if (item.SourceKey == "$off") - { - CurrentSourceInfoKey = routeKey; - CurrentSourceInfo = null; - } - else if (item.SourceKey != null) - { - CurrentSourceInfoKey = routeKey; - CurrentSourceInfo = item; - } - // And finally, set the "control". This will trigger event - //CurrentControlDevice = DeviceManager.GetDeviceForKey(item.SourceKey) as Device; - - OnFeedback.FireUpdate(); - - // report back when done - if (successCallback != null) - successCallback(); - - }, 0); // end of CTimer - } - - /// - /// Will power the room on with the last-used source - /// - public void PowerOnToDefaultOrLastSource() - { - if (!EnablePowerOnToLastSource || LastSourceKey == null) - return; - RunRouteAction(LastSourceKey); - } - - /// - /// Does what it says - /// - public override void SetDefaultLevels() - { - Debug.Console(1, this, "Restoring default levels"); - var vc = CurrentVolumeControls as IBasicVolumeWithFeedback; - if (vc != null) - vc.SetVolume(DefaultVolume); - } - - /// - /// - /// - /// - /// - bool DoRoute(SourceRouteListItem route) - { - IRoutingSinkNoSwitching dest = null; - - if (route.DestinationKey.Equals("$defaultaudio", StringComparison.OrdinalIgnoreCase)) - dest = DefaultAudioDevice; - else if (route.DestinationKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase)) - dest = DefaultDisplay; - else - dest = DeviceManager.GetDeviceForKey(route.DestinationKey) as IRoutingSinkNoSwitching; - - if (dest == null) - { - Debug.Console(1, this, "Cannot route, unknown destination '{0}'", route.DestinationKey); - return false; - } - - if (route.SourceKey.Equals("$off", StringComparison.OrdinalIgnoreCase)) - { - dest.ReleaseRoute(); - if (dest is IPower) - (dest as IPower).PowerOff(); - } - else - { - var source = DeviceManager.GetDeviceForKey(route.SourceKey) as IRoutingOutputs; - if (source == null) - { - Debug.Console(1, this, "Cannot route unknown source '{0}' to {1}", route.SourceKey, route.DestinationKey); - return false; - } - dest.ReleaseAndMakeRoute(source, route.Type); - } - return true; - } - - public override void RoomVacatedForTimeoutPeriod(object o) - { - //Implement this - } - - /// - /// Runs "roomOff" action on all rooms not set to ExcludeFromGlobalFunctions - /// - public static void AllRoomsOff() - { - var allRooms = DeviceManager.AllDevices.Where(d => - d is EssentialsHuddleSpaceRoom && !(d as EssentialsHuddleSpaceRoom).ExcludeFromGlobalFunctions); - foreach (var room in allRooms) - (room as EssentialsHuddleSpaceRoom).RunRouteAction("roomOff"); - } - } +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.Room.Config; + +namespace PepperDash.Essentials +{ + public class EssentialsHuddleSpaceRoom : EssentialsRoomBase, IHasCurrentSourceInfoChange + { + public event EventHandler CurrentVolumeDeviceChange; + public event SourceInfoChangeHandler CurrentSingleSourceChange; + + protected override Func OnFeedbackFunc + { + get + { + return () => + { + var disp = DefaultDisplay as DisplayBase; + var val = CurrentSourceInfo != null + && CurrentSourceInfo.Type == eSourceListItemType.Route + && disp != null; + //&& disp.PowerIsOnFeedback.BoolValue; + return val; + }; + } + } + /// + /// + /// + protected override Func IsWarmingFeedbackFunc + { + get + { + return () => + { + var disp = DefaultDisplay as DisplayBase; + if (disp != null) + return disp.IsWarmingUpFeedback.BoolValue; + else + return false; + }; + } + } + /// + /// + /// + protected override Func IsCoolingFeedbackFunc + { + get + { + return () => + { + var disp = DefaultDisplay as DisplayBase; + if (disp != null) + return disp.IsCoolingDownFeedback.BoolValue; + else + return false; + }; + } + } + + public EssentialsRoomPropertiesConfig Config { get; private set; } + + public IRoutingSinkWithSwitching DefaultDisplay { get; private set; } + public IRoutingSinkNoSwitching DefaultAudioDevice { get; private set; } + public IBasicVolumeControls DefaultVolumeControls { get; private set; } + + public bool ExcludeFromGlobalFunctions { get; set; } + + /// + /// The config name of the source list + /// + public string SourceListKey { get; set; } + + public string DefaultSourceItem { get; set; } + + public ushort DefaultVolume { get; set; } + + /// + /// If room is off, enables power on to last source. Default true + /// + public bool EnablePowerOnToLastSource { get; set; } + string LastSourceKey; + + /// + /// + /// + public IBasicVolumeControls CurrentVolumeControls + { + get { return _CurrentAudioDevice; } + set + { + if (value == _CurrentAudioDevice) return; + + var oldDev = _CurrentAudioDevice; + // derigister this room from the device, if it can + if (oldDev is IInUseTracking) + (oldDev as IInUseTracking).InUseTracker.RemoveUser(this, "audio"); + var handler = CurrentVolumeDeviceChange; + if (handler != null) + CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.WillChange)); + _CurrentAudioDevice = value; + if (handler != null) + CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.DidChange)); + // register this room with new device, if it can + if (_CurrentAudioDevice is IInUseTracking) + (_CurrentAudioDevice as IInUseTracking).InUseTracker.AddUser(this, "audio"); + } + } + IBasicVolumeControls _CurrentAudioDevice; + + /// + /// The SourceListItem last run - containing names and icons + /// + public SourceListItem CurrentSourceInfo + { + get { return _CurrentSourceInfo; } + private set + { + if (value == _CurrentSourceInfo) return; + + var handler = CurrentSingleSourceChange; + // remove from in-use tracker, if so equipped + if(_CurrentSourceInfo != null && _CurrentSourceInfo.SourceDevice is IInUseTracking) + (_CurrentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.RemoveUser(this, "control"); + + if (handler != null) + handler(this, _CurrentSourceInfo, ChangeType.WillChange); + + _CurrentSourceInfo = value; + + // add to in-use tracking + if (_CurrentSourceInfo != null && _CurrentSourceInfo.SourceDevice is IInUseTracking) + (_CurrentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.AddUser(this, "control"); + if (handler != null) + handler(this, _CurrentSourceInfo, ChangeType.DidChange); + } + } + SourceListItem _CurrentSourceInfo; + + public string CurrentSourceInfoKey { get; private set; } + + /// + /// + /// + /// + /// + public EssentialsHuddleSpaceRoom(string key, string name, IRoutingSinkWithSwitching defaultDisplay, + IRoutingSinkNoSwitching defaultAudio, EssentialsRoomPropertiesConfig config) + : base(key, name) + { + Config = config; + DefaultDisplay = defaultDisplay; + DefaultAudioDevice = defaultAudio; + if (defaultAudio is IBasicVolumeControls) + DefaultVolumeControls = defaultAudio as IBasicVolumeControls; + else if (defaultAudio is IHasVolumeDevice) + DefaultVolumeControls = (defaultAudio as IHasVolumeDevice).VolumeDevice; + CurrentVolumeControls = DefaultVolumeControls; + + var disp = DefaultDisplay as DisplayBase; + if (disp != null) + { + // Link power, warming, cooling to display + disp.PowerIsOnFeedback.OutputChange += (o, a) => + { + if (disp.PowerIsOnFeedback.BoolValue != OnFeedback.BoolValue) + { + if (!disp.PowerIsOnFeedback.BoolValue) + CurrentSourceInfo = null; + OnFeedback.FireUpdate(); + } + }; + + disp.IsWarmingUpFeedback.OutputChange += (o, a) => + { + IsWarmingUpFeedback.FireUpdate(); + if (!IsWarmingUpFeedback.BoolValue) + (DefaultDisplay as IBasicVolumeWithFeedback).SetVolume(DefaultVolume); + }; + disp.IsCoolingDownFeedback.OutputChange += (o, a) => + { + IsCoolingDownFeedback.FireUpdate(); + }; + } + + SourceListKey = "default"; + EnablePowerOnToLastSource = true; + } + + + /// + /// + /// + protected override void EndShutdown() + { + SetDefaultLevels(); + + RunDefaultRoute(); + + CrestronEnvironment.Sleep(1000); + + RunRouteAction("roomOff"); + } + + /// + /// Routes the default source item, if any + /// + public void RunDefaultRoute() + { + //if (DefaultSourceItem != null && !OnFeedback.BoolValue) + RunRouteAction(DefaultSourceItem); + } + + /// + /// + /// + /// + public void RunRouteAction(string routeKey) + { + RunRouteAction(routeKey, null); + } + + /// + /// Gets a source from config list SourceListKey and dynamically build and executes the + /// route or commands + /// + /// + public void RunRouteAction(string routeKey, Action successCallback) + { + // Run this on a separate thread + new CTimer(o => + { + Debug.Console(1, this, "Run route action '{0}'", routeKey); + var dict = ConfigReader.ConfigObject.GetSourceListForKey(SourceListKey); + if(dict == null) + { + Debug.Console(1, this, "WARNING: Config source list '{0}' not found", SourceListKey); + return; + } + + // Try to get the list item by it's string key + if (!dict.ContainsKey(routeKey)) + { + Debug.Console(1, this, "WARNING: No item '{0}' found on config list '{1}'", + routeKey, SourceListKey); + return; + } + + var item = dict[routeKey]; + //Debug.Console(2, this, "Action {0} has {1} steps", + // item.SourceKey, item.RouteList.Count); + + // End usage timer on last source + if (!string.IsNullOrEmpty(LastSourceKey)) + { + var lastSource = dict[LastSourceKey].SourceDevice; + + try + { + if (lastSource != null && lastSource is IUsageTracking) + (lastSource as IUsageTracking).UsageTracker.EndDeviceUsage(); + } + catch (Exception e) + { + Debug.Console(1, this, "*#* EXCEPTION in end usage tracking (257):\r{0}", e); + } + } + + // Let's run it + if (routeKey.ToLower() != "roomoff") + { + LastSourceKey = routeKey; + } + else + { + CurrentSourceInfoKey = null; + } + + foreach (var route in item.RouteList) + { + // if there is a $defaultAll on route, run two separate + if (route.DestinationKey.Equals("$defaultAll", StringComparison.OrdinalIgnoreCase)) + { + // Going to assume a single-path route for now + var tempVideo = new SourceRouteListItem + { + DestinationKey = "$defaultDisplay", + SourceKey = route.SourceKey, + Type = eRoutingSignalType.Video + }; + DoRoute(tempVideo); + + //var tempAudio = new SourceRouteListItem + //{ + // DestinationKey = "$defaultAudio", + // SourceKey = route.SourceKey, + // Type = eRoutingSignalType.Audio + //}; + //DoRoute(tempAudio); + //continue; -- not sure why this was here + } + else + DoRoute(route); + } + + // Start usage timer on routed source + if (item.SourceDevice is IUsageTracking) + { + (item.SourceDevice as IUsageTracking).UsageTracker.StartDeviceUsage(); + } + + + + + // Set volume control, using default if non provided + IBasicVolumeControls volDev = null; + // Handle special cases for volume control + if (string.IsNullOrEmpty(item.VolumeControlKey) + || item.VolumeControlKey.Equals("$defaultAudio", StringComparison.OrdinalIgnoreCase)) + volDev = DefaultVolumeControls; + else if (item.VolumeControlKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase)) + volDev = DefaultDisplay as IBasicVolumeControls; + // Or a specific device, probably rarely used. + else + { + var dev = DeviceManager.GetDeviceForKey(item.VolumeControlKey); + if (dev is IBasicVolumeControls) + volDev = dev as IBasicVolumeControls; + else if (dev is IHasVolumeDevice) + volDev = (dev as IHasVolumeDevice).VolumeDevice; + } + + if (volDev != CurrentVolumeControls) + { + // zero the volume on the device we are leaving. + // Set the volume to default on device we are entering + if (ZeroVolumeWhenSwtichingVolumeDevices && CurrentVolumeControls is IBasicVolumeWithFeedback) + { + var vd = CurrentVolumeControls as IBasicVolumeWithFeedback; + SavedVolumeLevels[vd] = (uint)vd.VolumeLevelFeedback.IntValue; + vd.SetVolume(0); + } + CurrentVolumeControls = volDev; + if (ZeroVolumeWhenSwtichingVolumeDevices && CurrentVolumeControls is IBasicVolumeWithFeedback) + { + var vd = CurrentVolumeControls as IBasicVolumeWithFeedback; + ushort vol = (SavedVolumeLevels.ContainsKey(vd) ? (ushort)SavedVolumeLevels[vd] : DefaultVolume); + vd.SetVolume(vol); + } + } + + + + // store the name and UI info for routes + if (item.SourceKey == "$off") + { + CurrentSourceInfoKey = routeKey; + CurrentSourceInfo = null; + } + else if (item.SourceKey != null) + { + CurrentSourceInfoKey = routeKey; + CurrentSourceInfo = item; + } + // And finally, set the "control". This will trigger event + //CurrentControlDevice = DeviceManager.GetDeviceForKey(item.SourceKey) as Device; + + OnFeedback.FireUpdate(); + + // report back when done + if (successCallback != null) + successCallback(); + + }, 0); // end of CTimer + } + + /// + /// Will power the room on with the last-used source + /// + public void PowerOnToDefaultOrLastSource() + { + if (!EnablePowerOnToLastSource || LastSourceKey == null) + return; + RunRouteAction(LastSourceKey); + } + + /// + /// Does what it says + /// + public override void SetDefaultLevels() + { + Debug.Console(1, this, "Restoring default levels"); + var vc = CurrentVolumeControls as IBasicVolumeWithFeedback; + if (vc != null) + vc.SetVolume(DefaultVolume); + } + + /// + /// + /// + /// + /// + bool DoRoute(SourceRouteListItem route) + { + IRoutingSinkNoSwitching dest = null; + + if (route.DestinationKey.Equals("$defaultaudio", StringComparison.OrdinalIgnoreCase)) + dest = DefaultAudioDevice; + else if (route.DestinationKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase)) + dest = DefaultDisplay; + else + dest = DeviceManager.GetDeviceForKey(route.DestinationKey) as IRoutingSinkNoSwitching; + + if (dest == null) + { + Debug.Console(1, this, "Cannot route, unknown destination '{0}'", route.DestinationKey); + return false; + } + + if (route.SourceKey.Equals("$off", StringComparison.OrdinalIgnoreCase)) + { + dest.ReleaseRoute(); + if (dest is IPower) + (dest as IPower).PowerOff(); + } + else + { + var source = DeviceManager.GetDeviceForKey(route.SourceKey) as IRoutingOutputs; + if (source == null) + { + Debug.Console(1, this, "Cannot route unknown source '{0}' to {1}", route.SourceKey, route.DestinationKey); + return false; + } + dest.ReleaseAndMakeRoute(source, route.Type); + } + return true; + } + + public override void RoomVacatedForTimeoutPeriod(object o) + { + //Implement this + } + + /// + /// Runs "roomOff" action on all rooms not set to ExcludeFromGlobalFunctions + /// + public static void AllRoomsOff() + { + var allRooms = DeviceManager.AllDevices.Where(d => + d is EssentialsHuddleSpaceRoom && !(d as EssentialsHuddleSpaceRoom).ExcludeFromGlobalFunctions); + foreach (var room in allRooms) + (room as EssentialsHuddleSpaceRoom).RunRouteAction("roomOff"); + } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs.orig b/PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs.orig similarity index 100% rename from Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs.orig rename to PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs.orig diff --git a/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs b/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs similarity index 97% rename from Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs rename to PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs index 3ad281db..60027142 100644 --- a/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs +++ b/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs @@ -1,572 +1,572 @@ -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.Room.Config; -using PepperDash.Essentials.Devices.Common.Codec; -using PepperDash.Essentials.Devices.Common.VideoCodec; - -namespace PepperDash.Essentials -{ - public class EssentialsHuddleVtc1Room : EssentialsRoomBase, IHasCurrentSourceInfoChange, IPrivacy, IHasCurrentVolumeControls - { - public event EventHandler CurrentVolumeDeviceChange; - public event SourceInfoChangeHandler CurrentSingleSourceChange; - - - //************************ - // Call-related stuff - - public BoolFeedback InCallFeedback { get; private set; } - - /// - /// Make this more specific - /// - public List ActiveCalls { get; private set; } - - /// - /// States: 0 for on hook, 1 for video, 2 for audio, 3 for telekenesis - /// - public IntFeedback CallTypeFeedback { get; private set; } - - /// - /// - /// - public BoolFeedback PrivacyModeIsOnFeedback { get; private set; } - - /// - /// When something in the room is sharing with the far end or through other means - /// - public BoolFeedback IsSharingFeedback { get; private set; } - - //************************ - - - protected override Func OnFeedbackFunc - { - get - { - return () => - { - var disp = DefaultDisplay as DisplayBase; - var val = CurrentSourceInfo != null - && CurrentSourceInfo.Type == eSourceListItemType.Route - && disp != null; - //&& disp.PowerIsOnFeedback.BoolValue; - return val; - }; - } - } - /// - /// - /// - protected override Func IsWarmingFeedbackFunc - { - get - { - return () => - { - var disp = DefaultDisplay as DisplayBase; - if (disp != null) - return disp.IsWarmingUpFeedback.BoolValue; - else - return false; - }; - } - } - /// - /// - /// - protected override Func IsCoolingFeedbackFunc - { - get - { - return () => - { - var disp = DefaultDisplay as DisplayBase; - if (disp != null) - return disp.IsCoolingDownFeedback.BoolValue; - else - return false; - }; - } - } - - public EssentialsHuddleVtc1PropertiesConfig Config { get; private set; } - - public IRoutingSinkWithSwitching DefaultDisplay { get; private set; } - public IBasicVolumeControls DefaultAudioDevice { get; private set; } - public IBasicVolumeControls DefaultVolumeControls { get; private set; } - - public VideoCodecBase VideoCodec { get; private set; } - - public bool ExcludeFromGlobalFunctions { get; set; } - - /// - /// The config name of the source list - /// - public string SourceListKey { get; set; } - - public string DefaultSourceItem { get; set; } - - public ushort DefaultVolume { get; set; } - - /// - /// If room is off, enables power on to last source. Default true - /// - public bool EnablePowerOnToLastSource { get; set; } - string LastSourceKey; - - /// - /// Sets the volume control device, and attaches/removes InUseTrackers with "audio" - /// tag to device. - /// - public IBasicVolumeControls CurrentVolumeControls - { - get { return _CurrentAudioDevice; } - set - { - if (value == _CurrentAudioDevice) return; - - var oldDev = _CurrentAudioDevice; - // derigister this room from the device, if it can - if (oldDev is IInUseTracking) - (oldDev as IInUseTracking).InUseTracker.RemoveUser(this, "audio"); - var handler = CurrentVolumeDeviceChange; - if (handler != null) - CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.WillChange)); - _CurrentAudioDevice = value; - if (handler != null) - CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.DidChange)); - // register this room with new device, if it can - if (_CurrentAudioDevice is IInUseTracking) - (_CurrentAudioDevice as IInUseTracking).InUseTracker.AddUser(this, "audio"); - } - } - IBasicVolumeControls _CurrentAudioDevice; - - /// - /// The SourceListItem last run - containing names and icons - /// - public SourceListItem CurrentSourceInfo - { - get { return _CurrentSourceInfo; } - private set - { - if (value == _CurrentSourceInfo) return; - - var handler = CurrentSingleSourceChange; - // remove from in-use tracker, if so equipped - if(_CurrentSourceInfo != null && _CurrentSourceInfo.SourceDevice is IInUseTracking) - (_CurrentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.RemoveUser(this, "control"); - - if (handler != null) - handler(this, _CurrentSourceInfo, ChangeType.WillChange); - - _CurrentSourceInfo = value; - - // add to in-use tracking - if (_CurrentSourceInfo != null && _CurrentSourceInfo.SourceDevice is IInUseTracking) - (_CurrentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.AddUser(this, "control"); - if (handler != null) - handler(this, _CurrentSourceInfo, ChangeType.DidChange); - } - } - SourceListItem _CurrentSourceInfo; - - public string CurrentSourceInfoKey { get; private set; } - - /// - /// "codecOsd" - /// - public string DefaultCodecRouteString { get { return "codecOsd"; } } - - /// - /// Temporary implementation. Returns the schedule-ready object or null if none. Fow now, - /// always returns the VideoCodec if it is capable - /// - public IHasScheduleAwareness ScheduleSource { get { return VideoCodec as IHasScheduleAwareness; } } - - CCriticalSection SourceSelectLock = new CCriticalSection(); - - /// - /// - /// - /// - /// - public EssentialsHuddleVtc1Room(string key, string name, IRoutingSinkWithSwitching defaultDisplay, - IBasicVolumeControls defaultAudio, VideoCodecBase codec, EssentialsHuddleVtc1PropertiesConfig config) - : base(key, name) - { - if (codec == null) - throw new ArgumentNullException("codec cannot be null"); - Config = config; - DefaultDisplay = defaultDisplay; - VideoCodec = codec; - DefaultAudioDevice = defaultAudio; - - if (defaultAudio is IBasicVolumeControls) - DefaultVolumeControls = defaultAudio as IBasicVolumeControls; - else if (defaultAudio is IHasVolumeDevice) - DefaultVolumeControls = (defaultAudio as IHasVolumeDevice).VolumeDevice; - CurrentVolumeControls = DefaultVolumeControls; - - - var disp = DefaultDisplay as DisplayBase; - if (disp != null) - { - // Link power, warming, cooling to display - disp.PowerIsOnFeedback.OutputChange += (o, a) => - { - if (disp.PowerIsOnFeedback.BoolValue != OnFeedback.BoolValue) - { - if (!disp.PowerIsOnFeedback.BoolValue) - CurrentSourceInfo = null; - OnFeedback.FireUpdate(); - } - if (disp.PowerIsOnFeedback.BoolValue) - { - SetDefaultLevels(); - } - }; - - disp.IsWarmingUpFeedback.OutputChange += (o, a) => - { - IsWarmingUpFeedback.FireUpdate(); - if (!IsWarmingUpFeedback.BoolValue) - (CurrentVolumeControls as IBasicVolumeWithFeedback).SetVolume(DefaultVolume); - }; - disp.IsCoolingDownFeedback.OutputChange += (o, a) => - { - IsCoolingDownFeedback.FireUpdate(); - }; - } - - InCallFeedback = new BoolFeedback(() => VideoCodec.IsInCall); - VideoCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate(); - - IsSharingFeedback = new BoolFeedback(() => VideoCodec.SharingContentIsOnFeedback.BoolValue); - VideoCodec.SharingContentIsOnFeedback.OutputChange += (o, a) => this.IsSharingFeedback.FireUpdate(); - - // link privacy to VC (for now?) - PrivacyModeIsOnFeedback = new BoolFeedback(() => VideoCodec.PrivacyModeIsOnFeedback.BoolValue); - VideoCodec.PrivacyModeIsOnFeedback.OutputChange += (o, a) => this.PrivacyModeIsOnFeedback.FireUpdate(); - - CallTypeFeedback = new IntFeedback(() => 0); - - SourceListKey = "default"; - EnablePowerOnToLastSource = true; - } - - - /// - /// - /// - protected override void EndShutdown() - { - VideoCodec.EndAllCalls(); - - SetDefaultLevels(); - - RunDefaultPresentRoute(); - - CrestronEnvironment.Sleep(1000); - - RunRouteAction("roomOff"); - } - - /// - /// Routes the default source item, if any. Returns true when default route exists - /// - public bool RunDefaultPresentRoute() - { - //if (DefaultSourceItem != null) - RunRouteAction(DefaultSourceItem); - return DefaultSourceItem != null; - } - - /// - /// Sets up the room when started into call mode without presenting a source - /// - /// - public bool RunDefaultCallRoute() - { - RunRouteAction(DefaultCodecRouteString); - return true; - } - - /// - /// - /// - /// - public void RunRouteAction(string routeKey) - { - RunRouteAction(routeKey, null); - } - - /// - /// Gets a source from config list SourceListKey and dynamically build and executes the - /// route or commands - /// - /// - public void RunRouteAction(string routeKey, Action successCallback) - { - // Run this on a separate thread - new CTimer(o => - { - // try to prevent multiple simultaneous selections - SourceSelectLock.TryEnter(); - - try - { - - Debug.Console(1, this, "Run route action '{0}'", routeKey); - var dict = ConfigReader.ConfigObject.GetSourceListForKey(SourceListKey); - if (dict == null) - { - Debug.Console(1, this, "WARNING: Config source list '{0}' not found", SourceListKey); - return; - } - - // Try to get the list item by it's string key - if (!dict.ContainsKey(routeKey)) - { - Debug.Console(1, this, "WARNING: No item '{0}' found on config list '{1}'", - routeKey, SourceListKey); - return; - } - - // End usage timer on last source - if (!string.IsNullOrEmpty(LastSourceKey)) - { - var usageLastSource = dict[LastSourceKey].SourceDevice as IUsageTracking; - if (usageLastSource != null && usageLastSource.UsageTracker != null) - { - try - { - // There MAY have been failures in here. Protect - usageLastSource.UsageTracker.EndDeviceUsage(); - } - catch (Exception e) - { - Debug.Console(1, this, "*#* EXCEPTION in end usage tracking:\r{0}", e); - } - } - } - - // Let's run it - var item = dict[routeKey]; - if (routeKey.ToLower() != "roomoff") - { - - LastSourceKey = routeKey; - } - else - CurrentSourceInfoKey = null; - - // hand off the individual routes to this helper - foreach (var route in item.RouteList) - DoRouteItem(route); - - // Start usage timer on routed source - var usageNewSource = item.SourceDevice as IUsageTracking; - if (usageNewSource != null && usageNewSource.UsageTracker != null) // Have to make sure there is a usage tracker! - { - (item.SourceDevice as IUsageTracking).UsageTracker.StartDeviceUsage(); - } - - // See if this can be moved into common, base-class method ------------- - - - // Set volume control, using default if non provided - IBasicVolumeControls volDev = null; - // Handle special cases for volume control - if (string.IsNullOrEmpty(item.VolumeControlKey) - || item.VolumeControlKey.Equals("$defaultAudio", StringComparison.OrdinalIgnoreCase)) - volDev = DefaultVolumeControls; - else if (item.VolumeControlKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase)) - volDev = DefaultDisplay as IBasicVolumeControls; - // Or a specific device, probably rarely used. - else - { - var dev = DeviceManager.GetDeviceForKey(item.VolumeControlKey); - if (dev is IBasicVolumeControls) - volDev = dev as IBasicVolumeControls; - else if (dev is IHasVolumeDevice) - volDev = (dev as IHasVolumeDevice).VolumeDevice; - } - - if (volDev != CurrentVolumeControls) - { - // zero the volume on the device we are leaving. - // Set the volume to default on device we are entering - if (ZeroVolumeWhenSwtichingVolumeDevices && CurrentVolumeControls is IBasicVolumeWithFeedback) - { - var vd = CurrentVolumeControls as IBasicVolumeWithFeedback; - SavedVolumeLevels[vd] = (uint)vd.VolumeLevelFeedback.IntValue; - vd.SetVolume(0); - } - - CurrentVolumeControls = volDev; - if (ZeroVolumeWhenSwtichingVolumeDevices && CurrentVolumeControls is IBasicVolumeWithFeedback) - { - var vd = CurrentVolumeControls as IBasicVolumeWithFeedback; - ushort vol = (SavedVolumeLevels.ContainsKey(vd) ? (ushort)SavedVolumeLevels[vd] : DefaultVolume); - vd.SetVolume(vol); - } - } - // ----------------------------------------------------------------------- - - - - // store the name and UI info for routes - if (item.SourceKey == "$off") - { - CurrentSourceInfoKey = routeKey; - CurrentSourceInfo = null; - } - else if (item.SourceKey != null) - { - CurrentSourceInfoKey = routeKey; - CurrentSourceInfo = item; - } - - OnFeedback.FireUpdate(); - - // report back when done - if (successCallback != null) - successCallback(); - } - catch (Exception e) - { - Debug.Console(1, this, "ERROR in routing: {0}", e); - } - - SourceSelectLock.Leave(); - }, 0); // end of CTimer - } - - /// - /// - /// - /// - void DoRouteItem(SourceRouteListItem route) - { - // if there is a $defaultAll on route, run two separate - if (route.DestinationKey.Equals("$defaultAll", StringComparison.OrdinalIgnoreCase)) - { - // Going to assume a single-path route for now - var tempVideo = new SourceRouteListItem - { - DestinationKey = "$defaultDisplay", - SourceKey = route.SourceKey, - Type = eRoutingSignalType.Video - }; - DoRoute(tempVideo); - } - else - DoRoute(route); - } - - /// - /// - /// - /// - /// - bool DoRoute(SourceRouteListItem route) - { - IRoutingSinkNoSwitching dest = null; - - if (route.DestinationKey.Equals("$defaultaudio", StringComparison.OrdinalIgnoreCase)) - dest = DefaultAudioDevice as IRoutingSinkNoSwitching; - else if (route.DestinationKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase)) - dest = DefaultDisplay; - else - dest = DeviceManager.GetDeviceForKey(route.DestinationKey) as IRoutingSinkNoSwitching; - - if (dest == null) - { - Debug.Console(1, this, "Cannot route, unknown destination '{0}'", route.DestinationKey); - return false; - } - - if (route.SourceKey.Equals("$off", StringComparison.OrdinalIgnoreCase)) - { - dest.ReleaseRoute(); - if (dest is IPower) - (dest as IPower).PowerOff(); - } - else - { - var source = DeviceManager.GetDeviceForKey(route.SourceKey) as IRoutingOutputs; - if (source == null) - { - Debug.Console(1, this, "Cannot route unknown source '{0}' to {1}", route.SourceKey, route.DestinationKey); - return false; - } - dest.ReleaseAndMakeRoute(source, route.Type); - } - return true; - } - - public override void RoomVacatedForTimeoutPeriod(object o) - { - //Implement this - } - - /// - /// Does what it says - /// - public override void SetDefaultLevels() - { - Debug.Console(1, this, "Restoring default levels"); - var vc = CurrentVolumeControls as IBasicVolumeWithFeedback; - if (vc != null) - vc.SetVolume(DefaultVolume); - } - /// - /// Will power the room on with the last-used source - /// - public void PowerOnToDefaultOrLastSource() - { - if (!EnablePowerOnToLastSource || LastSourceKey == null) - return; - RunRouteAction(LastSourceKey); - } - - /// - /// Runs "roomOff" action on all rooms not set to ExcludeFromGlobalFunctions - /// - public static void AllRoomsOff() - { - var allRooms = DeviceManager.AllDevices.Where(d => - d is EssentialsHuddleSpaceRoom && !(d as EssentialsHuddleSpaceRoom).ExcludeFromGlobalFunctions); - foreach (var room in allRooms) - (room as EssentialsHuddleSpaceRoom).RunRouteAction("roomOff"); - } - - #region IPrivacy Members - - - public void PrivacyModeOff() - { - VideoCodec.PrivacyModeOff(); - } - - public void PrivacyModeOn() - { - VideoCodec.PrivacyModeOn(); - } - - public void PrivacyModeToggle() - { - VideoCodec.PrivacyModeToggle(); - } - - #endregion - } +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.Room.Config; +using PepperDash.Essentials.Devices.Common.Codec; +using PepperDash.Essentials.Devices.Common.VideoCodec; + +namespace PepperDash.Essentials +{ + public class EssentialsHuddleVtc1Room : EssentialsRoomBase, IHasCurrentSourceInfoChange, IPrivacy, IHasCurrentVolumeControls + { + public event EventHandler CurrentVolumeDeviceChange; + public event SourceInfoChangeHandler CurrentSingleSourceChange; + + + //************************ + // Call-related stuff + + public BoolFeedback InCallFeedback { get; private set; } + + /// + /// Make this more specific + /// + public List ActiveCalls { get; private set; } + + /// + /// States: 0 for on hook, 1 for video, 2 for audio, 3 for telekenesis + /// + public IntFeedback CallTypeFeedback { get; private set; } + + /// + /// + /// + public BoolFeedback PrivacyModeIsOnFeedback { get; private set; } + + /// + /// When something in the room is sharing with the far end or through other means + /// + public BoolFeedback IsSharingFeedback { get; private set; } + + //************************ + + + protected override Func OnFeedbackFunc + { + get + { + return () => + { + var disp = DefaultDisplay as DisplayBase; + var val = CurrentSourceInfo != null + && CurrentSourceInfo.Type == eSourceListItemType.Route + && disp != null; + //&& disp.PowerIsOnFeedback.BoolValue; + return val; + }; + } + } + /// + /// + /// + protected override Func IsWarmingFeedbackFunc + { + get + { + return () => + { + var disp = DefaultDisplay as DisplayBase; + if (disp != null) + return disp.IsWarmingUpFeedback.BoolValue; + else + return false; + }; + } + } + /// + /// + /// + protected override Func IsCoolingFeedbackFunc + { + get + { + return () => + { + var disp = DefaultDisplay as DisplayBase; + if (disp != null) + return disp.IsCoolingDownFeedback.BoolValue; + else + return false; + }; + } + } + + public EssentialsHuddleVtc1PropertiesConfig Config { get; private set; } + + public IRoutingSinkWithSwitching DefaultDisplay { get; private set; } + public IBasicVolumeControls DefaultAudioDevice { get; private set; } + public IBasicVolumeControls DefaultVolumeControls { get; private set; } + + public VideoCodecBase VideoCodec { get; private set; } + + public bool ExcludeFromGlobalFunctions { get; set; } + + /// + /// The config name of the source list + /// + public string SourceListKey { get; set; } + + public string DefaultSourceItem { get; set; } + + public ushort DefaultVolume { get; set; } + + /// + /// If room is off, enables power on to last source. Default true + /// + public bool EnablePowerOnToLastSource { get; set; } + string LastSourceKey; + + /// + /// Sets the volume control device, and attaches/removes InUseTrackers with "audio" + /// tag to device. + /// + public IBasicVolumeControls CurrentVolumeControls + { + get { return _CurrentAudioDevice; } + set + { + if (value == _CurrentAudioDevice) return; + + var oldDev = _CurrentAudioDevice; + // derigister this room from the device, if it can + if (oldDev is IInUseTracking) + (oldDev as IInUseTracking).InUseTracker.RemoveUser(this, "audio"); + var handler = CurrentVolumeDeviceChange; + if (handler != null) + CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.WillChange)); + _CurrentAudioDevice = value; + if (handler != null) + CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.DidChange)); + // register this room with new device, if it can + if (_CurrentAudioDevice is IInUseTracking) + (_CurrentAudioDevice as IInUseTracking).InUseTracker.AddUser(this, "audio"); + } + } + IBasicVolumeControls _CurrentAudioDevice; + + /// + /// The SourceListItem last run - containing names and icons + /// + public SourceListItem CurrentSourceInfo + { + get { return _CurrentSourceInfo; } + private set + { + if (value == _CurrentSourceInfo) return; + + var handler = CurrentSingleSourceChange; + // remove from in-use tracker, if so equipped + if(_CurrentSourceInfo != null && _CurrentSourceInfo.SourceDevice is IInUseTracking) + (_CurrentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.RemoveUser(this, "control"); + + if (handler != null) + handler(this, _CurrentSourceInfo, ChangeType.WillChange); + + _CurrentSourceInfo = value; + + // add to in-use tracking + if (_CurrentSourceInfo != null && _CurrentSourceInfo.SourceDevice is IInUseTracking) + (_CurrentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.AddUser(this, "control"); + if (handler != null) + handler(this, _CurrentSourceInfo, ChangeType.DidChange); + } + } + SourceListItem _CurrentSourceInfo; + + public string CurrentSourceInfoKey { get; private set; } + + /// + /// "codecOsd" + /// + public string DefaultCodecRouteString { get { return "codecOsd"; } } + + /// + /// Temporary implementation. Returns the schedule-ready object or null if none. Fow now, + /// always returns the VideoCodec if it is capable + /// + public IHasScheduleAwareness ScheduleSource { get { return VideoCodec as IHasScheduleAwareness; } } + + CCriticalSection SourceSelectLock = new CCriticalSection(); + + /// + /// + /// + /// + /// + public EssentialsHuddleVtc1Room(string key, string name, IRoutingSinkWithSwitching defaultDisplay, + IBasicVolumeControls defaultAudio, VideoCodecBase codec, EssentialsHuddleVtc1PropertiesConfig config) + : base(key, name) + { + if (codec == null) + throw new ArgumentNullException("codec cannot be null"); + Config = config; + DefaultDisplay = defaultDisplay; + VideoCodec = codec; + DefaultAudioDevice = defaultAudio; + + if (defaultAudio is IBasicVolumeControls) + DefaultVolumeControls = defaultAudio as IBasicVolumeControls; + else if (defaultAudio is IHasVolumeDevice) + DefaultVolumeControls = (defaultAudio as IHasVolumeDevice).VolumeDevice; + CurrentVolumeControls = DefaultVolumeControls; + + + var disp = DefaultDisplay as DisplayBase; + if (disp != null) + { + // Link power, warming, cooling to display + disp.PowerIsOnFeedback.OutputChange += (o, a) => + { + if (disp.PowerIsOnFeedback.BoolValue != OnFeedback.BoolValue) + { + if (!disp.PowerIsOnFeedback.BoolValue) + CurrentSourceInfo = null; + OnFeedback.FireUpdate(); + } + if (disp.PowerIsOnFeedback.BoolValue) + { + SetDefaultLevels(); + } + }; + + disp.IsWarmingUpFeedback.OutputChange += (o, a) => + { + IsWarmingUpFeedback.FireUpdate(); + if (!IsWarmingUpFeedback.BoolValue) + (CurrentVolumeControls as IBasicVolumeWithFeedback).SetVolume(DefaultVolume); + }; + disp.IsCoolingDownFeedback.OutputChange += (o, a) => + { + IsCoolingDownFeedback.FireUpdate(); + }; + } + + InCallFeedback = new BoolFeedback(() => VideoCodec.IsInCall); + VideoCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate(); + + IsSharingFeedback = new BoolFeedback(() => VideoCodec.SharingContentIsOnFeedback.BoolValue); + VideoCodec.SharingContentIsOnFeedback.OutputChange += (o, a) => this.IsSharingFeedback.FireUpdate(); + + // link privacy to VC (for now?) + PrivacyModeIsOnFeedback = new BoolFeedback(() => VideoCodec.PrivacyModeIsOnFeedback.BoolValue); + VideoCodec.PrivacyModeIsOnFeedback.OutputChange += (o, a) => this.PrivacyModeIsOnFeedback.FireUpdate(); + + CallTypeFeedback = new IntFeedback(() => 0); + + SourceListKey = "default"; + EnablePowerOnToLastSource = true; + } + + + /// + /// + /// + protected override void EndShutdown() + { + VideoCodec.EndAllCalls(); + + SetDefaultLevels(); + + RunDefaultPresentRoute(); + + CrestronEnvironment.Sleep(1000); + + RunRouteAction("roomOff"); + } + + /// + /// Routes the default source item, if any. Returns true when default route exists + /// + public bool RunDefaultPresentRoute() + { + //if (DefaultSourceItem != null) + RunRouteAction(DefaultSourceItem); + return DefaultSourceItem != null; + } + + /// + /// Sets up the room when started into call mode without presenting a source + /// + /// + public bool RunDefaultCallRoute() + { + RunRouteAction(DefaultCodecRouteString); + return true; + } + + /// + /// + /// + /// + public void RunRouteAction(string routeKey) + { + RunRouteAction(routeKey, null); + } + + /// + /// Gets a source from config list SourceListKey and dynamically build and executes the + /// route or commands + /// + /// + public void RunRouteAction(string routeKey, Action successCallback) + { + // Run this on a separate thread + new CTimer(o => + { + // try to prevent multiple simultaneous selections + SourceSelectLock.TryEnter(); + + try + { + + Debug.Console(1, this, "Run route action '{0}'", routeKey); + var dict = ConfigReader.ConfigObject.GetSourceListForKey(SourceListKey); + if (dict == null) + { + Debug.Console(1, this, "WARNING: Config source list '{0}' not found", SourceListKey); + return; + } + + // Try to get the list item by it's string key + if (!dict.ContainsKey(routeKey)) + { + Debug.Console(1, this, "WARNING: No item '{0}' found on config list '{1}'", + routeKey, SourceListKey); + return; + } + + // End usage timer on last source + if (!string.IsNullOrEmpty(LastSourceKey)) + { + var usageLastSource = dict[LastSourceKey].SourceDevice as IUsageTracking; + if (usageLastSource != null && usageLastSource.UsageTracker != null) + { + try + { + // There MAY have been failures in here. Protect + usageLastSource.UsageTracker.EndDeviceUsage(); + } + catch (Exception e) + { + Debug.Console(1, this, "*#* EXCEPTION in end usage tracking:\r{0}", e); + } + } + } + + // Let's run it + var item = dict[routeKey]; + if (routeKey.ToLower() != "roomoff") + { + + LastSourceKey = routeKey; + } + else + CurrentSourceInfoKey = null; + + // hand off the individual routes to this helper + foreach (var route in item.RouteList) + DoRouteItem(route); + + // Start usage timer on routed source + var usageNewSource = item.SourceDevice as IUsageTracking; + if (usageNewSource != null && usageNewSource.UsageTracker != null) // Have to make sure there is a usage tracker! + { + (item.SourceDevice as IUsageTracking).UsageTracker.StartDeviceUsage(); + } + + // See if this can be moved into common, base-class method ------------- + + + // Set volume control, using default if non provided + IBasicVolumeControls volDev = null; + // Handle special cases for volume control + if (string.IsNullOrEmpty(item.VolumeControlKey) + || item.VolumeControlKey.Equals("$defaultAudio", StringComparison.OrdinalIgnoreCase)) + volDev = DefaultVolumeControls; + else if (item.VolumeControlKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase)) + volDev = DefaultDisplay as IBasicVolumeControls; + // Or a specific device, probably rarely used. + else + { + var dev = DeviceManager.GetDeviceForKey(item.VolumeControlKey); + if (dev is IBasicVolumeControls) + volDev = dev as IBasicVolumeControls; + else if (dev is IHasVolumeDevice) + volDev = (dev as IHasVolumeDevice).VolumeDevice; + } + + if (volDev != CurrentVolumeControls) + { + // zero the volume on the device we are leaving. + // Set the volume to default on device we are entering + if (ZeroVolumeWhenSwtichingVolumeDevices && CurrentVolumeControls is IBasicVolumeWithFeedback) + { + var vd = CurrentVolumeControls as IBasicVolumeWithFeedback; + SavedVolumeLevels[vd] = (uint)vd.VolumeLevelFeedback.IntValue; + vd.SetVolume(0); + } + + CurrentVolumeControls = volDev; + if (ZeroVolumeWhenSwtichingVolumeDevices && CurrentVolumeControls is IBasicVolumeWithFeedback) + { + var vd = CurrentVolumeControls as IBasicVolumeWithFeedback; + ushort vol = (SavedVolumeLevels.ContainsKey(vd) ? (ushort)SavedVolumeLevels[vd] : DefaultVolume); + vd.SetVolume(vol); + } + } + // ----------------------------------------------------------------------- + + + + // store the name and UI info for routes + if (item.SourceKey == "$off") + { + CurrentSourceInfoKey = routeKey; + CurrentSourceInfo = null; + } + else if (item.SourceKey != null) + { + CurrentSourceInfoKey = routeKey; + CurrentSourceInfo = item; + } + + OnFeedback.FireUpdate(); + + // report back when done + if (successCallback != null) + successCallback(); + } + catch (Exception e) + { + Debug.Console(1, this, "ERROR in routing: {0}", e); + } + + SourceSelectLock.Leave(); + }, 0); // end of CTimer + } + + /// + /// + /// + /// + void DoRouteItem(SourceRouteListItem route) + { + // if there is a $defaultAll on route, run two separate + if (route.DestinationKey.Equals("$defaultAll", StringComparison.OrdinalIgnoreCase)) + { + // Going to assume a single-path route for now + var tempVideo = new SourceRouteListItem + { + DestinationKey = "$defaultDisplay", + SourceKey = route.SourceKey, + Type = eRoutingSignalType.Video + }; + DoRoute(tempVideo); + } + else + DoRoute(route); + } + + /// + /// + /// + /// + /// + bool DoRoute(SourceRouteListItem route) + { + IRoutingSinkNoSwitching dest = null; + + if (route.DestinationKey.Equals("$defaultaudio", StringComparison.OrdinalIgnoreCase)) + dest = DefaultAudioDevice as IRoutingSinkNoSwitching; + else if (route.DestinationKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase)) + dest = DefaultDisplay; + else + dest = DeviceManager.GetDeviceForKey(route.DestinationKey) as IRoutingSinkNoSwitching; + + if (dest == null) + { + Debug.Console(1, this, "Cannot route, unknown destination '{0}'", route.DestinationKey); + return false; + } + + if (route.SourceKey.Equals("$off", StringComparison.OrdinalIgnoreCase)) + { + dest.ReleaseRoute(); + if (dest is IPower) + (dest as IPower).PowerOff(); + } + else + { + var source = DeviceManager.GetDeviceForKey(route.SourceKey) as IRoutingOutputs; + if (source == null) + { + Debug.Console(1, this, "Cannot route unknown source '{0}' to {1}", route.SourceKey, route.DestinationKey); + return false; + } + dest.ReleaseAndMakeRoute(source, route.Type); + } + return true; + } + + public override void RoomVacatedForTimeoutPeriod(object o) + { + //Implement this + } + + /// + /// Does what it says + /// + public override void SetDefaultLevels() + { + Debug.Console(1, this, "Restoring default levels"); + var vc = CurrentVolumeControls as IBasicVolumeWithFeedback; + if (vc != null) + vc.SetVolume(DefaultVolume); + } + /// + /// Will power the room on with the last-used source + /// + public void PowerOnToDefaultOrLastSource() + { + if (!EnablePowerOnToLastSource || LastSourceKey == null) + return; + RunRouteAction(LastSourceKey); + } + + /// + /// Runs "roomOff" action on all rooms not set to ExcludeFromGlobalFunctions + /// + public static void AllRoomsOff() + { + var allRooms = DeviceManager.AllDevices.Where(d => + d is EssentialsHuddleSpaceRoom && !(d as EssentialsHuddleSpaceRoom).ExcludeFromGlobalFunctions); + foreach (var room in allRooms) + (room as EssentialsHuddleSpaceRoom).RunRouteAction("roomOff"); + } + + #region IPrivacy Members + + + public void PrivacyModeOff() + { + VideoCodec.PrivacyModeOff(); + } + + public void PrivacyModeOn() + { + VideoCodec.PrivacyModeOn(); + } + + public void PrivacyModeToggle() + { + VideoCodec.PrivacyModeToggle(); + } + + #endregion + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs.orig b/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs.orig similarity index 100% rename from Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs.orig rename to PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs.orig diff --git a/Essentials/PepperDashEssentials/Room/Types/EssentialsPresentationRoom.cs b/PepperDashEssentials/Room/Types/EssentialsPresentationRoom.cs similarity index 97% rename from Essentials/PepperDashEssentials/Room/Types/EssentialsPresentationRoom.cs rename to PepperDashEssentials/Room/Types/EssentialsPresentationRoom.cs index 3f768188..86de8977 100644 --- a/Essentials/PepperDashEssentials/Room/Types/EssentialsPresentationRoom.cs +++ b/PepperDashEssentials/Room/Types/EssentialsPresentationRoom.cs @@ -1,437 +1,437 @@ -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.Room.Config; - -namespace PepperDash.Essentials -{ - public class EssentialsPresentationRoom : EssentialsRoomBase, IHasCurrentSourceInfoChange - { - public event EventHandler CurrentVolumeDeviceChange; - public event SourceInfoChangeHandler CurrentSingleSourceChange; - public event SourceInfoChangeHandler CurrentDisplay1SourceChange; - public event SourceInfoChangeHandler CurrentDisplay2SourceChange; - - protected override Func OnFeedbackFunc { get { - return () => (CurrentSingleSourceInfo != null - && CurrentSingleSourceInfo.Type != eSourceListItemType.Off) - || (Display1SourceInfo != null - && Display1SourceInfo.Type != eSourceListItemType.Off) - || (Display2SourceInfo != null - && Display2SourceInfo.Type != eSourceListItemType.Off); } } - - protected override Func IsWarmingFeedbackFunc { get { return () =>false;; } } - protected override Func IsCoolingFeedbackFunc { get { return () => false; } } - - public EssentialsPresentationRoomPropertiesConfig Config { get; private set; } - - public Dictionary Displays { get; private set; } - - public IRoutingSinkNoSwitching DefaultAudioDevice { get; private set; } - public IBasicVolumeControls DefaultVolumeControls { get; private set; } - - /// - /// The config name of the source list - /// - public string SourceListKey { get; set; } - - /// - /// If room is off, enables power on to last source. Default true - /// - public bool EnablePowerOnToLastSource { get; set; } - string LastSourceKey; - - public enum eVideoRoutingMode - { - SelectSourceSelectDisplay, SourceToAllDisplays - } - - public eVideoRoutingMode VideoRoutingMode { get; set; } - - public enum eAudioRoutingMode - { - AudioFollowsLastVideo, SelectAudioFromDisplay - } - - /// - /// - /// - public IBasicVolumeControls CurrentVolumeControls - { - get { return _CurrentAudioDevice; } - set - { - if (value == _CurrentAudioDevice) return; - - var oldDev = _CurrentAudioDevice; - // derigister this room from the device, if it can - if (oldDev is IInUseTracking) - (oldDev as IInUseTracking).InUseTracker.RemoveUser(this, "audio"); - var handler = CurrentVolumeDeviceChange; - if (handler != null) - CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.WillChange)); - _CurrentAudioDevice = value; - if (handler != null) - CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.DidChange)); - // register this room with new device, if it can - if (_CurrentAudioDevice is IInUseTracking) - (_CurrentAudioDevice as IInUseTracking).InUseTracker.AddUser(this, "audio"); - } - } - IBasicVolumeControls _CurrentAudioDevice; - - /// - /// The SourceListItem last run - containing names and icons. The complex setter is - /// to add/remove this room to the source's InUseTracking, if it is capable - /// - public SourceListItem CurrentSingleSourceInfo - { - get { return _CurrentSingleSourceInfo; } - private set - { - if (value == _CurrentSingleSourceInfo) return; - - var handler = CurrentSingleSourceChange; - // remove from in-use tracker, if so equipped - if(_CurrentSingleSourceInfo != null && _CurrentSingleSourceInfo.SourceDevice is IInUseTracking) - (_CurrentSingleSourceInfo.SourceDevice as IInUseTracking).InUseTracker.RemoveUser(this, "control"); - - if (handler != null) - handler(this, _CurrentSingleSourceInfo, ChangeType.WillChange); - - _CurrentSingleSourceInfo = value; - - // add to in-use tracking - if (_CurrentSingleSourceInfo != null && _CurrentSingleSourceInfo.SourceDevice is IInUseTracking) - (_CurrentSingleSourceInfo.SourceDevice as IInUseTracking).InUseTracker.AddUser(this, "control"); - if (handler != null) - handler(this, _CurrentSingleSourceInfo, ChangeType.DidChange); - } - } - SourceListItem _CurrentSingleSourceInfo; - - public SourceListItem Display1SourceInfo - { - get { return _Display1SourceInfo; } - set - { - if (value == _Display1SourceInfo) return; - - var handler = CurrentDisplay1SourceChange; - if (handler != null) - handler(this, _Display1SourceInfo, ChangeType.WillChange); - - _Display1SourceInfo = value; - - if (handler != null) - handler(this, _Display1SourceInfo, ChangeType.DidChange); - } - } - SourceListItem _Display1SourceInfo; - - public SourceListItem Display2SourceInfo - { - get { return _Display2SourceInfo; } - set - { - if (value == _Display2SourceInfo) return; - - var handler = CurrentDisplay2SourceChange; - if (handler != null) - handler(this, _Display2SourceInfo, ChangeType.WillChange); - - _Display2SourceInfo = value; - - if (handler != null) - handler(this, _Display2SourceInfo, ChangeType.DidChange); - } - } - SourceListItem _Display2SourceInfo; - - /// - /// If an audio dialer is available for this room - /// - public bool HasAudioDialer { get { return false; } } - /// - /// - /// - /// - /// - public EssentialsPresentationRoom(string key, string name, - Dictionary displays, - IBasicVolumeWithFeedback defaultVolume, EssentialsPresentationRoomPropertiesConfig config) - : base(key, name) - { - Config = config; - Displays = displays; - - DefaultVolumeControls = defaultVolume; - CurrentVolumeControls = defaultVolume; - - //DefaultAudioDevice = defaultAudio; - //if (defaultAudio is IBasicVolumeControls) - // DefaultVolumeControls = defaultAudio as IBasicVolumeControls; - //else if (defaultAudio is IHasVolumeDevice) - // DefaultVolumeControls = (defaultAudio as IHasVolumeDevice).VolumeDevice; - - - SourceListKey = "default"; - EnablePowerOnToLastSource = true; - } - - /// - /// Run the same source to all destinations - /// - /// - public void RouteSourceToAllDestinations(SourceListItem sourceItem) - { - if (Config.Volumes.Master != null) - { - var audioDev = DeviceManager.GetDeviceForKey(Config.Volumes.Master.DeviceKey); - if (audioDev is IBasicVolumeWithFeedback) - { - - } - } - - foreach (var display in Displays.Values) - { - if (sourceItem != null) - DoVideoRoute(sourceItem.SourceKey, display.Key); - else - DoVideoRoute("$off", display.Key); - } - Display1SourceInfo = sourceItem; - Display2SourceInfo = sourceItem; - CurrentSingleSourceInfo = sourceItem; - OnFeedback.FireUpdate(); - } - - public void SourceToDisplay1(SourceListItem sourceItem) - { - DoVideoRoute(sourceItem.SourceKey, Displays[1].Key); - Display1SourceInfo = sourceItem; - OnFeedback.FireUpdate(); - } - - public void SourceToDisplay2(SourceListItem sourceItem) - { - DoVideoRoute(sourceItem.SourceKey, Displays[2].Key); - Display2SourceInfo = sourceItem; - OnFeedback.FireUpdate(); - } - - - /// - /// Basic source -> destination routing - /// - void DoVideoRoute(string sourceKey, string destinationKey) - { - new CTimer(o => - { - var dest = DeviceManager.GetDeviceForKey(destinationKey) as IRoutingSinkNoSwitching; - if (dest == null) - { - Debug.Console(1, this, "Cannot route. Destination '{0}' not found", destinationKey); - return; - } - // off is special case - if (sourceKey.Equals("$off", StringComparison.OrdinalIgnoreCase)) - { - dest.ReleaseRoute(); - if (dest is IPower) - (dest as IPower).PowerOff(); - return; - } - - var source = DeviceManager.GetDeviceForKey(sourceKey) as IRoutingOutputs; - if (source == null) - { - Debug.Console(1, this, "Cannot route. Source '{0}' not found", sourceKey); - return; - } - dest.ReleaseAndMakeRoute(source, eRoutingSignalType.Video); - }, 0); - } - - /// - /// - /// - protected override void EndShutdown() - { - RunRouteAction("roomoff"); - } - - /// - /// - /// - /// - public void RunRouteAction(string routeKey) - { - RunRouteAction(routeKey, null); - } - - /// - /// Gets a source from config list SourceListKey and dynamically build and executes the - /// route or commands - /// - /// - public void RunRouteAction(string routeKey, Action successCallback) - { - // Run this on a separate thread - new CTimer(o => - { - Debug.Console(1, this, "Run room action '{0}'", routeKey); - var dict = ConfigReader.ConfigObject.GetSourceListForKey(SourceListKey); - if(dict == null) - { - Debug.Console(1, this, "WARNING: Config source list '{0}' not found", SourceListKey); - return; - } - - // Try to get the list item by it's string key - if (!dict.ContainsKey(routeKey)) - { - Debug.Console(1, this, "WARNING: No item '{0}' found on config list '{1}'", - routeKey, SourceListKey); - return; - } - - var item = dict[routeKey]; - //Debug.Console(2, this, "Action {0} has {1} steps", - // item.SourceKey, item.RouteList.Count); - - // Let's run it - if (routeKey.ToLower() != "roomoff") - LastSourceKey = routeKey; - - foreach (var route in item.RouteList) - { - // if there is a $defaultAll on route, run two separate - if (route.DestinationKey.Equals("$defaultAll", StringComparison.OrdinalIgnoreCase)) - { - var tempAudio = new SourceRouteListItem - { - DestinationKey = "$defaultDisplay", - SourceKey = route.SourceKey, - Type = eRoutingSignalType.Video - }; - DoRoute(tempAudio); - - var tempVideo = new SourceRouteListItem - { - DestinationKey = "$defaultAudio", - SourceKey = route.SourceKey, - Type = eRoutingSignalType.Audio - }; - DoRoute(tempVideo); - continue; - } - else - DoRoute(route); - } - - // Set volume control on room, using default if non provided - IBasicVolumeControls volDev = null; - // Handle special cases for volume control - if (string.IsNullOrEmpty(item.VolumeControlKey) - || item.VolumeControlKey.Equals("$defaultAudio", StringComparison.OrdinalIgnoreCase)) - volDev = DefaultVolumeControls; - //else if (item.VolumeControlKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase)) - // volDev = DefaultDisplay as IBasicVolumeControls; - // Or a specific device, probably rarely used. - else - { - var dev = DeviceManager.GetDeviceForKey(item.VolumeControlKey); - if (dev is IBasicVolumeControls) - volDev = dev as IBasicVolumeControls; - else if (dev is IHasVolumeDevice) - volDev = (dev as IHasVolumeDevice).VolumeDevice; - } - CurrentVolumeControls = volDev; - - // store the name and UI info for routes - if (item.SourceKey != null) - CurrentSingleSourceInfo = item; - // And finally, set the "control". This will trigger event - //CurrentControlDevice = DeviceManager.GetDeviceForKey(item.SourceKey) as Device; - - OnFeedback.FireUpdate(); - - // report back when done - if (successCallback != null) - successCallback(); - }, 0); // end of CTimer - } - - /// - /// Will power the room on with the last-used source - /// - public void PowerOnToDefaultOrLastSource() - { - if (!EnablePowerOnToLastSource || LastSourceKey == null) - return; - RunRouteAction(LastSourceKey); - } - - /// - /// Does what it says - /// - public override void SetDefaultLevels() - { - Debug.Console(0, this, "SetDefaultLevels not implemented"); - } - - /// - /// - /// - /// - /// - bool DoRoute(SourceRouteListItem route) - { - IRoutingSinkNoSwitching dest = null; - - if (route.DestinationKey.Equals("$defaultaudio", StringComparison.OrdinalIgnoreCase)) - dest = DefaultAudioDevice; - //else if (route.DestinationKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase)) - // dest = DefaultDisplay; - else - dest = DeviceManager.GetDeviceForKey(route.DestinationKey) as IRoutingSinkNoSwitching; - - if (dest == null) - { - Debug.Console(1, this, "Cannot route, unknown destination '{0}'", route.DestinationKey); - return false; - } - - if (route.SourceKey.Equals("$off", StringComparison.OrdinalIgnoreCase)) - { - dest.ReleaseRoute(); - if (dest is IPower) - (dest as IPower).PowerOff(); - } - else - { - var source = DeviceManager.GetDeviceForKey(route.SourceKey) as IRoutingOutputs; - if (source == null) - { - Debug.Console(1, this, "Cannot route unknown source '{0}' to {1}", route.SourceKey, route.DestinationKey); - return false; - } - dest.ReleaseAndMakeRoute(source, route.Type); - } - return true; - } - - public override void RoomVacatedForTimeoutPeriod(object o) - { - //Implement this - } - - } +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.Room.Config; + +namespace PepperDash.Essentials +{ + public class EssentialsPresentationRoom : EssentialsRoomBase, IHasCurrentSourceInfoChange + { + public event EventHandler CurrentVolumeDeviceChange; + public event SourceInfoChangeHandler CurrentSingleSourceChange; + public event SourceInfoChangeHandler CurrentDisplay1SourceChange; + public event SourceInfoChangeHandler CurrentDisplay2SourceChange; + + protected override Func OnFeedbackFunc { get { + return () => (CurrentSingleSourceInfo != null + && CurrentSingleSourceInfo.Type != eSourceListItemType.Off) + || (Display1SourceInfo != null + && Display1SourceInfo.Type != eSourceListItemType.Off) + || (Display2SourceInfo != null + && Display2SourceInfo.Type != eSourceListItemType.Off); } } + + protected override Func IsWarmingFeedbackFunc { get { return () =>false;; } } + protected override Func IsCoolingFeedbackFunc { get { return () => false; } } + + public EssentialsPresentationRoomPropertiesConfig Config { get; private set; } + + public Dictionary Displays { get; private set; } + + public IRoutingSinkNoSwitching DefaultAudioDevice { get; private set; } + public IBasicVolumeControls DefaultVolumeControls { get; private set; } + + /// + /// The config name of the source list + /// + public string SourceListKey { get; set; } + + /// + /// If room is off, enables power on to last source. Default true + /// + public bool EnablePowerOnToLastSource { get; set; } + string LastSourceKey; + + public enum eVideoRoutingMode + { + SelectSourceSelectDisplay, SourceToAllDisplays + } + + public eVideoRoutingMode VideoRoutingMode { get; set; } + + public enum eAudioRoutingMode + { + AudioFollowsLastVideo, SelectAudioFromDisplay + } + + /// + /// + /// + public IBasicVolumeControls CurrentVolumeControls + { + get { return _CurrentAudioDevice; } + set + { + if (value == _CurrentAudioDevice) return; + + var oldDev = _CurrentAudioDevice; + // derigister this room from the device, if it can + if (oldDev is IInUseTracking) + (oldDev as IInUseTracking).InUseTracker.RemoveUser(this, "audio"); + var handler = CurrentVolumeDeviceChange; + if (handler != null) + CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.WillChange)); + _CurrentAudioDevice = value; + if (handler != null) + CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.DidChange)); + // register this room with new device, if it can + if (_CurrentAudioDevice is IInUseTracking) + (_CurrentAudioDevice as IInUseTracking).InUseTracker.AddUser(this, "audio"); + } + } + IBasicVolumeControls _CurrentAudioDevice; + + /// + /// The SourceListItem last run - containing names and icons. The complex setter is + /// to add/remove this room to the source's InUseTracking, if it is capable + /// + public SourceListItem CurrentSingleSourceInfo + { + get { return _CurrentSingleSourceInfo; } + private set + { + if (value == _CurrentSingleSourceInfo) return; + + var handler = CurrentSingleSourceChange; + // remove from in-use tracker, if so equipped + if(_CurrentSingleSourceInfo != null && _CurrentSingleSourceInfo.SourceDevice is IInUseTracking) + (_CurrentSingleSourceInfo.SourceDevice as IInUseTracking).InUseTracker.RemoveUser(this, "control"); + + if (handler != null) + handler(this, _CurrentSingleSourceInfo, ChangeType.WillChange); + + _CurrentSingleSourceInfo = value; + + // add to in-use tracking + if (_CurrentSingleSourceInfo != null && _CurrentSingleSourceInfo.SourceDevice is IInUseTracking) + (_CurrentSingleSourceInfo.SourceDevice as IInUseTracking).InUseTracker.AddUser(this, "control"); + if (handler != null) + handler(this, _CurrentSingleSourceInfo, ChangeType.DidChange); + } + } + SourceListItem _CurrentSingleSourceInfo; + + public SourceListItem Display1SourceInfo + { + get { return _Display1SourceInfo; } + set + { + if (value == _Display1SourceInfo) return; + + var handler = CurrentDisplay1SourceChange; + if (handler != null) + handler(this, _Display1SourceInfo, ChangeType.WillChange); + + _Display1SourceInfo = value; + + if (handler != null) + handler(this, _Display1SourceInfo, ChangeType.DidChange); + } + } + SourceListItem _Display1SourceInfo; + + public SourceListItem Display2SourceInfo + { + get { return _Display2SourceInfo; } + set + { + if (value == _Display2SourceInfo) return; + + var handler = CurrentDisplay2SourceChange; + if (handler != null) + handler(this, _Display2SourceInfo, ChangeType.WillChange); + + _Display2SourceInfo = value; + + if (handler != null) + handler(this, _Display2SourceInfo, ChangeType.DidChange); + } + } + SourceListItem _Display2SourceInfo; + + /// + /// If an audio dialer is available for this room + /// + public bool HasAudioDialer { get { return false; } } + /// + /// + /// + /// + /// + public EssentialsPresentationRoom(string key, string name, + Dictionary displays, + IBasicVolumeWithFeedback defaultVolume, EssentialsPresentationRoomPropertiesConfig config) + : base(key, name) + { + Config = config; + Displays = displays; + + DefaultVolumeControls = defaultVolume; + CurrentVolumeControls = defaultVolume; + + //DefaultAudioDevice = defaultAudio; + //if (defaultAudio is IBasicVolumeControls) + // DefaultVolumeControls = defaultAudio as IBasicVolumeControls; + //else if (defaultAudio is IHasVolumeDevice) + // DefaultVolumeControls = (defaultAudio as IHasVolumeDevice).VolumeDevice; + + + SourceListKey = "default"; + EnablePowerOnToLastSource = true; + } + + /// + /// Run the same source to all destinations + /// + /// + public void RouteSourceToAllDestinations(SourceListItem sourceItem) + { + if (Config.Volumes.Master != null) + { + var audioDev = DeviceManager.GetDeviceForKey(Config.Volumes.Master.DeviceKey); + if (audioDev is IBasicVolumeWithFeedback) + { + + } + } + + foreach (var display in Displays.Values) + { + if (sourceItem != null) + DoVideoRoute(sourceItem.SourceKey, display.Key); + else + DoVideoRoute("$off", display.Key); + } + Display1SourceInfo = sourceItem; + Display2SourceInfo = sourceItem; + CurrentSingleSourceInfo = sourceItem; + OnFeedback.FireUpdate(); + } + + public void SourceToDisplay1(SourceListItem sourceItem) + { + DoVideoRoute(sourceItem.SourceKey, Displays[1].Key); + Display1SourceInfo = sourceItem; + OnFeedback.FireUpdate(); + } + + public void SourceToDisplay2(SourceListItem sourceItem) + { + DoVideoRoute(sourceItem.SourceKey, Displays[2].Key); + Display2SourceInfo = sourceItem; + OnFeedback.FireUpdate(); + } + + + /// + /// Basic source -> destination routing + /// + void DoVideoRoute(string sourceKey, string destinationKey) + { + new CTimer(o => + { + var dest = DeviceManager.GetDeviceForKey(destinationKey) as IRoutingSinkNoSwitching; + if (dest == null) + { + Debug.Console(1, this, "Cannot route. Destination '{0}' not found", destinationKey); + return; + } + // off is special case + if (sourceKey.Equals("$off", StringComparison.OrdinalIgnoreCase)) + { + dest.ReleaseRoute(); + if (dest is IPower) + (dest as IPower).PowerOff(); + return; + } + + var source = DeviceManager.GetDeviceForKey(sourceKey) as IRoutingOutputs; + if (source == null) + { + Debug.Console(1, this, "Cannot route. Source '{0}' not found", sourceKey); + return; + } + dest.ReleaseAndMakeRoute(source, eRoutingSignalType.Video); + }, 0); + } + + /// + /// + /// + protected override void EndShutdown() + { + RunRouteAction("roomoff"); + } + + /// + /// + /// + /// + public void RunRouteAction(string routeKey) + { + RunRouteAction(routeKey, null); + } + + /// + /// Gets a source from config list SourceListKey and dynamically build and executes the + /// route or commands + /// + /// + public void RunRouteAction(string routeKey, Action successCallback) + { + // Run this on a separate thread + new CTimer(o => + { + Debug.Console(1, this, "Run room action '{0}'", routeKey); + var dict = ConfigReader.ConfigObject.GetSourceListForKey(SourceListKey); + if(dict == null) + { + Debug.Console(1, this, "WARNING: Config source list '{0}' not found", SourceListKey); + return; + } + + // Try to get the list item by it's string key + if (!dict.ContainsKey(routeKey)) + { + Debug.Console(1, this, "WARNING: No item '{0}' found on config list '{1}'", + routeKey, SourceListKey); + return; + } + + var item = dict[routeKey]; + //Debug.Console(2, this, "Action {0} has {1} steps", + // item.SourceKey, item.RouteList.Count); + + // Let's run it + if (routeKey.ToLower() != "roomoff") + LastSourceKey = routeKey; + + foreach (var route in item.RouteList) + { + // if there is a $defaultAll on route, run two separate + if (route.DestinationKey.Equals("$defaultAll", StringComparison.OrdinalIgnoreCase)) + { + var tempAudio = new SourceRouteListItem + { + DestinationKey = "$defaultDisplay", + SourceKey = route.SourceKey, + Type = eRoutingSignalType.Video + }; + DoRoute(tempAudio); + + var tempVideo = new SourceRouteListItem + { + DestinationKey = "$defaultAudio", + SourceKey = route.SourceKey, + Type = eRoutingSignalType.Audio + }; + DoRoute(tempVideo); + continue; + } + else + DoRoute(route); + } + + // Set volume control on room, using default if non provided + IBasicVolumeControls volDev = null; + // Handle special cases for volume control + if (string.IsNullOrEmpty(item.VolumeControlKey) + || item.VolumeControlKey.Equals("$defaultAudio", StringComparison.OrdinalIgnoreCase)) + volDev = DefaultVolumeControls; + //else if (item.VolumeControlKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase)) + // volDev = DefaultDisplay as IBasicVolumeControls; + // Or a specific device, probably rarely used. + else + { + var dev = DeviceManager.GetDeviceForKey(item.VolumeControlKey); + if (dev is IBasicVolumeControls) + volDev = dev as IBasicVolumeControls; + else if (dev is IHasVolumeDevice) + volDev = (dev as IHasVolumeDevice).VolumeDevice; + } + CurrentVolumeControls = volDev; + + // store the name and UI info for routes + if (item.SourceKey != null) + CurrentSingleSourceInfo = item; + // And finally, set the "control". This will trigger event + //CurrentControlDevice = DeviceManager.GetDeviceForKey(item.SourceKey) as Device; + + OnFeedback.FireUpdate(); + + // report back when done + if (successCallback != null) + successCallback(); + }, 0); // end of CTimer + } + + /// + /// Will power the room on with the last-used source + /// + public void PowerOnToDefaultOrLastSource() + { + if (!EnablePowerOnToLastSource || LastSourceKey == null) + return; + RunRouteAction(LastSourceKey); + } + + /// + /// Does what it says + /// + public override void SetDefaultLevels() + { + Debug.Console(0, this, "SetDefaultLevels not implemented"); + } + + /// + /// + /// + /// + /// + bool DoRoute(SourceRouteListItem route) + { + IRoutingSinkNoSwitching dest = null; + + if (route.DestinationKey.Equals("$defaultaudio", StringComparison.OrdinalIgnoreCase)) + dest = DefaultAudioDevice; + //else if (route.DestinationKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase)) + // dest = DefaultDisplay; + else + dest = DeviceManager.GetDeviceForKey(route.DestinationKey) as IRoutingSinkNoSwitching; + + if (dest == null) + { + Debug.Console(1, this, "Cannot route, unknown destination '{0}'", route.DestinationKey); + return false; + } + + if (route.SourceKey.Equals("$off", StringComparison.OrdinalIgnoreCase)) + { + dest.ReleaseRoute(); + if (dest is IPower) + (dest as IPower).PowerOff(); + } + else + { + var source = DeviceManager.GetDeviceForKey(route.SourceKey) as IRoutingOutputs; + if (source == null) + { + Debug.Console(1, this, "Cannot route unknown source '{0}' to {1}", route.SourceKey, route.DestinationKey); + return false; + } + dest.ReleaseAndMakeRoute(source, route.Type); + } + return true; + } + + public override void RoomVacatedForTimeoutPeriod(object o) + { + //Implement this + } + + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Room/Types/EssentialsRoomBase.cs b/PepperDashEssentials/Room/Types/EssentialsRoomBase.cs similarity index 97% rename from Essentials/PepperDashEssentials/Room/Types/EssentialsRoomBase.cs rename to PepperDashEssentials/Room/Types/EssentialsRoomBase.cs index e138211e..6251c067 100644 --- a/Essentials/PepperDashEssentials/Room/Types/EssentialsRoomBase.cs +++ b/PepperDashEssentials/Room/Types/EssentialsRoomBase.cs @@ -1,272 +1,272 @@ -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.Devices.Common.Occupancy; - -namespace PepperDash.Essentials -{ - /// - /// - /// - public interface IHasCurrentSourceInfoChange - { - event SourceInfoChangeHandler CurrentSingleSourceChange; - } - - /// - /// - /// - public abstract class EssentialsRoomBase : Device - { - /// - /// - /// - public BoolFeedback OnFeedback { get; private set; } - - public BoolFeedback IsWarmingUpFeedback { get; private set; } - public BoolFeedback IsCoolingDownFeedback { get; private set; } - - public IOccupancyStatusProvider RoomOccupancy { get; private set; } - - public bool OccupancyStatusProviderIsRemote { get; private set; } - - protected abstract Func IsWarmingFeedbackFunc { get; } - protected abstract Func IsCoolingFeedbackFunc { get; } - - /// - /// Timer used for informing the UIs of a shutdown - /// - public SecondsCountdownTimer ShutdownPromptTimer { get; private set; } - - /// - /// - /// - public int ShutdownPromptSeconds { get; set; } - public int ShutdownVacancySeconds { get; set; } - public eShutdownType ShutdownType { get; private set; } - - public PepperDash.Essentials.Room.EssentialsRoomEmergencyBase Emergency { get; set; } - - public PepperDash.Essentials.Devices.Common.Microphones.MicrophonePrivacyController MicrophonePrivacy { get; set; } - - public string LogoUrl { get; set; } - - protected SecondsCountdownTimer RoomVacancyShutdownTimer { get; private set; } - - public eVacancyMode VacancyMode { get; private set; } - - /// - /// Seconds after vacancy prompt is displayed until shutdown - /// - protected int RoomVacancyShutdownSeconds; - - /// - /// Seconds after vacancy detected until prompt is displayed - /// - protected int RoomVacancyShutdownPromptSeconds; - - /// - /// - /// - protected abstract Func OnFeedbackFunc { get; } - - protected Dictionary SavedVolumeLevels = new Dictionary(); - - /// - /// When volume control devices change, should we zero the one that we are leaving? - /// - public bool ZeroVolumeWhenSwtichingVolumeDevices { get; private set; } - - /// - /// - /// - /// - /// - public EssentialsRoomBase(string key, string name) : base(key, name) - { - // Setup the ShutdownPromptTimer - ShutdownPromptTimer = new SecondsCountdownTimer(Key + "-offTimer"); - ShutdownPromptTimer.IsRunningFeedback.OutputChange += (o, a) => - { - if (!ShutdownPromptTimer.IsRunningFeedback.BoolValue) - ShutdownType = eShutdownType.None; - }; - ShutdownPromptTimer.HasFinished += (o, a) => Shutdown(); // Shutdown is triggered - - ShutdownPromptSeconds = 60; - ShutdownVacancySeconds = 120; - ShutdownType = eShutdownType.None; - - RoomVacancyShutdownTimer = new SecondsCountdownTimer(Key + "-vacancyOffTimer"); - //RoomVacancyShutdownTimer.IsRunningFeedback.OutputChange += (o, a) => - //{ - // if (!RoomVacancyShutdownTimer.IsRunningFeedback.BoolValue) - // ShutdownType = ShutdownType.Vacancy; - //}; - RoomVacancyShutdownTimer.HasFinished += new EventHandler(RoomVacancyShutdownPromptTimer_HasFinished); // Shutdown is triggered - - RoomVacancyShutdownPromptSeconds = 1500; // 25 min to prompt warning - RoomVacancyShutdownSeconds = 240; // 4 min after prompt will trigger shutdown prompt - VacancyMode = eVacancyMode.None; - - OnFeedback = new BoolFeedback(OnFeedbackFunc); - - IsWarmingUpFeedback = new BoolFeedback(IsWarmingFeedbackFunc); - IsCoolingDownFeedback = new BoolFeedback(IsCoolingFeedbackFunc); - } - - void RoomVacancyShutdownPromptTimer_HasFinished(object sender, EventArgs e) - { - switch (VacancyMode) - { - case eVacancyMode.None: - StartRoomVacancyTimer(eVacancyMode.InInitialVacancy); - break; - case eVacancyMode.InInitialVacancy: - StartRoomVacancyTimer(eVacancyMode.InShutdownWarning); - break; - case eVacancyMode.InShutdownWarning: - { - StartShutdown(eShutdownType.Vacancy); - Debug.Console(0, this, "Shutting Down due to vacancy."); - break; - } - default: - break; - } - } - - /// - /// - /// - /// - public void StartShutdown(eShutdownType type) - { - // Check for shutdowns running. Manual should override other shutdowns - - if (type == eShutdownType.Manual) - ShutdownPromptTimer.SecondsToCount = ShutdownPromptSeconds; - else if (type == eShutdownType.Vacancy) - ShutdownPromptTimer.SecondsToCount = ShutdownVacancySeconds; - ShutdownType = type; - ShutdownPromptTimer.Start(); - } - - public void StartRoomVacancyTimer(eVacancyMode mode) - { - if (mode == eVacancyMode.None) - RoomVacancyShutdownTimer.SecondsToCount = RoomVacancyShutdownPromptSeconds; - else if (mode == eVacancyMode.InInitialVacancy) - RoomVacancyShutdownTimer.SecondsToCount = RoomVacancyShutdownSeconds; - VacancyMode = mode; - RoomVacancyShutdownTimer.Start(); - - Debug.Console(0, this, "Vacancy Timer Started."); - } - - /// - /// Resets the vacancy mode and shutsdwon the room - /// - public void Shutdown() - { - VacancyMode = eVacancyMode.None; - EndShutdown(); - } - - /// - /// This method is for the derived class to define it's specific shutdown - /// requirements but should not be called directly. It is called by Shutdown() - /// - protected abstract void EndShutdown(); - - - /// - /// Override this to implement a default volume level(s) method - /// - public abstract void SetDefaultLevels(); - - /// - /// Sets the object to be used as the IOccupancyStatusProvider for the room. Can be an Occupancy Aggregator or a specific device - /// - /// - public void SetRoomOccupancy(IOccupancyStatusProvider statusProvider, int timeoutMinutes) - { - if (statusProvider == null) - { - Debug.Console(0, this, "ERROR: Occupancy sensor device is null"); - return; - } - - // If status provider is fusion, set flag to remote - if (statusProvider is PepperDash.Essentials.Fusion.EssentialsHuddleSpaceFusionSystemControllerBase) - OccupancyStatusProviderIsRemote = true; - - if(timeoutMinutes > 0) - RoomVacancyShutdownSeconds = timeoutMinutes * 60; - - RoomOccupancy = statusProvider; - - RoomOccupancy.RoomIsOccupiedFeedback.OutputChange += RoomIsOccupiedFeedback_OutputChange; - } - - void RoomIsOccupiedFeedback_OutputChange(object sender, EventArgs e) - { - if (RoomOccupancy.RoomIsOccupiedFeedback.BoolValue == false) - { - Debug.Console(1, this, "Notice: Vacancy Detected"); - // Trigger the timer when the room is vacant - StartRoomVacancyTimer(eVacancyMode.InInitialVacancy); - } - else - { - Debug.Console(1, this, "Notice: Occupancy Detected"); - // Reset the timer when the room is occupied - - RoomVacancyShutdownTimer.Cancel(); - } - } - - //void SwapVolumeDevices(IBasicVolumeControls currentDevice, IBasicVolumeControls newDevice) - //{ - - //} - - /// - /// Executes when RoomVacancyShutdownTimer expires. Used to trigger specific room actions as needed. Must nullify the timer object when executed - /// - /// - public abstract void RoomVacatedForTimeoutPeriod(object o); - } - - /// - /// To describe the various ways a room may be shutting down - /// - public enum eShutdownType - { - None = 0, - External, - Manual, - Vacancy - } - - public enum eVacancyMode - { - None = 0, - InInitialVacancy, - InShutdownWarning - } - - /// - /// - /// - public enum eWarmingCoolingMode - { - None, - Warming, - Cooling - } +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.Devices.Common.Occupancy; + +namespace PepperDash.Essentials +{ + /// + /// + /// + public interface IHasCurrentSourceInfoChange + { + event SourceInfoChangeHandler CurrentSingleSourceChange; + } + + /// + /// + /// + public abstract class EssentialsRoomBase : Device + { + /// + /// + /// + public BoolFeedback OnFeedback { get; private set; } + + public BoolFeedback IsWarmingUpFeedback { get; private set; } + public BoolFeedback IsCoolingDownFeedback { get; private set; } + + public IOccupancyStatusProvider RoomOccupancy { get; private set; } + + public bool OccupancyStatusProviderIsRemote { get; private set; } + + protected abstract Func IsWarmingFeedbackFunc { get; } + protected abstract Func IsCoolingFeedbackFunc { get; } + + /// + /// Timer used for informing the UIs of a shutdown + /// + public SecondsCountdownTimer ShutdownPromptTimer { get; private set; } + + /// + /// + /// + public int ShutdownPromptSeconds { get; set; } + public int ShutdownVacancySeconds { get; set; } + public eShutdownType ShutdownType { get; private set; } + + public PepperDash.Essentials.Room.EssentialsRoomEmergencyBase Emergency { get; set; } + + public PepperDash.Essentials.Devices.Common.Microphones.MicrophonePrivacyController MicrophonePrivacy { get; set; } + + public string LogoUrl { get; set; } + + protected SecondsCountdownTimer RoomVacancyShutdownTimer { get; private set; } + + public eVacancyMode VacancyMode { get; private set; } + + /// + /// Seconds after vacancy prompt is displayed until shutdown + /// + protected int RoomVacancyShutdownSeconds; + + /// + /// Seconds after vacancy detected until prompt is displayed + /// + protected int RoomVacancyShutdownPromptSeconds; + + /// + /// + /// + protected abstract Func OnFeedbackFunc { get; } + + protected Dictionary SavedVolumeLevels = new Dictionary(); + + /// + /// When volume control devices change, should we zero the one that we are leaving? + /// + public bool ZeroVolumeWhenSwtichingVolumeDevices { get; private set; } + + /// + /// + /// + /// + /// + public EssentialsRoomBase(string key, string name) : base(key, name) + { + // Setup the ShutdownPromptTimer + ShutdownPromptTimer = new SecondsCountdownTimer(Key + "-offTimer"); + ShutdownPromptTimer.IsRunningFeedback.OutputChange += (o, a) => + { + if (!ShutdownPromptTimer.IsRunningFeedback.BoolValue) + ShutdownType = eShutdownType.None; + }; + ShutdownPromptTimer.HasFinished += (o, a) => Shutdown(); // Shutdown is triggered + + ShutdownPromptSeconds = 60; + ShutdownVacancySeconds = 120; + ShutdownType = eShutdownType.None; + + RoomVacancyShutdownTimer = new SecondsCountdownTimer(Key + "-vacancyOffTimer"); + //RoomVacancyShutdownTimer.IsRunningFeedback.OutputChange += (o, a) => + //{ + // if (!RoomVacancyShutdownTimer.IsRunningFeedback.BoolValue) + // ShutdownType = ShutdownType.Vacancy; + //}; + RoomVacancyShutdownTimer.HasFinished += new EventHandler(RoomVacancyShutdownPromptTimer_HasFinished); // Shutdown is triggered + + RoomVacancyShutdownPromptSeconds = 1500; // 25 min to prompt warning + RoomVacancyShutdownSeconds = 240; // 4 min after prompt will trigger shutdown prompt + VacancyMode = eVacancyMode.None; + + OnFeedback = new BoolFeedback(OnFeedbackFunc); + + IsWarmingUpFeedback = new BoolFeedback(IsWarmingFeedbackFunc); + IsCoolingDownFeedback = new BoolFeedback(IsCoolingFeedbackFunc); + } + + void RoomVacancyShutdownPromptTimer_HasFinished(object sender, EventArgs e) + { + switch (VacancyMode) + { + case eVacancyMode.None: + StartRoomVacancyTimer(eVacancyMode.InInitialVacancy); + break; + case eVacancyMode.InInitialVacancy: + StartRoomVacancyTimer(eVacancyMode.InShutdownWarning); + break; + case eVacancyMode.InShutdownWarning: + { + StartShutdown(eShutdownType.Vacancy); + Debug.Console(0, this, "Shutting Down due to vacancy."); + break; + } + default: + break; + } + } + + /// + /// + /// + /// + public void StartShutdown(eShutdownType type) + { + // Check for shutdowns running. Manual should override other shutdowns + + if (type == eShutdownType.Manual) + ShutdownPromptTimer.SecondsToCount = ShutdownPromptSeconds; + else if (type == eShutdownType.Vacancy) + ShutdownPromptTimer.SecondsToCount = ShutdownVacancySeconds; + ShutdownType = type; + ShutdownPromptTimer.Start(); + } + + public void StartRoomVacancyTimer(eVacancyMode mode) + { + if (mode == eVacancyMode.None) + RoomVacancyShutdownTimer.SecondsToCount = RoomVacancyShutdownPromptSeconds; + else if (mode == eVacancyMode.InInitialVacancy) + RoomVacancyShutdownTimer.SecondsToCount = RoomVacancyShutdownSeconds; + VacancyMode = mode; + RoomVacancyShutdownTimer.Start(); + + Debug.Console(0, this, "Vacancy Timer Started."); + } + + /// + /// Resets the vacancy mode and shutsdwon the room + /// + public void Shutdown() + { + VacancyMode = eVacancyMode.None; + EndShutdown(); + } + + /// + /// This method is for the derived class to define it's specific shutdown + /// requirements but should not be called directly. It is called by Shutdown() + /// + protected abstract void EndShutdown(); + + + /// + /// Override this to implement a default volume level(s) method + /// + public abstract void SetDefaultLevels(); + + /// + /// Sets the object to be used as the IOccupancyStatusProvider for the room. Can be an Occupancy Aggregator or a specific device + /// + /// + public void SetRoomOccupancy(IOccupancyStatusProvider statusProvider, int timeoutMinutes) + { + if (statusProvider == null) + { + Debug.Console(0, this, "ERROR: Occupancy sensor device is null"); + return; + } + + // If status provider is fusion, set flag to remote + if (statusProvider is PepperDash.Essentials.Fusion.EssentialsHuddleSpaceFusionSystemControllerBase) + OccupancyStatusProviderIsRemote = true; + + if(timeoutMinutes > 0) + RoomVacancyShutdownSeconds = timeoutMinutes * 60; + + RoomOccupancy = statusProvider; + + RoomOccupancy.RoomIsOccupiedFeedback.OutputChange += RoomIsOccupiedFeedback_OutputChange; + } + + void RoomIsOccupiedFeedback_OutputChange(object sender, EventArgs e) + { + if (RoomOccupancy.RoomIsOccupiedFeedback.BoolValue == false) + { + Debug.Console(1, this, "Notice: Vacancy Detected"); + // Trigger the timer when the room is vacant + StartRoomVacancyTimer(eVacancyMode.InInitialVacancy); + } + else + { + Debug.Console(1, this, "Notice: Occupancy Detected"); + // Reset the timer when the room is occupied + + RoomVacancyShutdownTimer.Cancel(); + } + } + + //void SwapVolumeDevices(IBasicVolumeControls currentDevice, IBasicVolumeControls newDevice) + //{ + + //} + + /// + /// Executes when RoomVacancyShutdownTimer expires. Used to trigger specific room actions as needed. Must nullify the timer object when executed + /// + /// + public abstract void RoomVacatedForTimeoutPeriod(object o); + } + + /// + /// To describe the various ways a room may be shutting down + /// + public enum eShutdownType + { + None = 0, + External, + Manual, + Vacancy + } + + public enum eVacancyMode + { + None = 0, + InInitialVacancy, + InShutdownWarning + } + + /// + /// + /// + public enum eWarmingCoolingMode + { + None, + Warming, + Cooling + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/SGD/PepperDash Essentials TSW-560.sgd b/PepperDashEssentials/SGD/PepperDash Essentials TSW-560.sgd similarity index 100% rename from Essentials/PepperDashEssentials/SGD/PepperDash Essentials TSW-560.sgd rename to PepperDashEssentials/SGD/PepperDash Essentials TSW-560.sgd diff --git a/Essentials/PepperDashEssentials/SGD/PepperDash Essentials TSW-760.sgd b/PepperDashEssentials/SGD/PepperDash Essentials TSW-760.sgd similarity index 100% rename from Essentials/PepperDashEssentials/SGD/PepperDash Essentials TSW-760.sgd rename to PepperDashEssentials/SGD/PepperDash Essentials TSW-760.sgd diff --git a/Essentials/PepperDashEssentials/SGD/PepperDash Essentials iPad.sgd b/PepperDashEssentials/SGD/PepperDash Essentials iPad.sgd similarity index 100% rename from Essentials/PepperDashEssentials/SGD/PepperDash Essentials iPad.sgd rename to PepperDashEssentials/SGD/PepperDash Essentials iPad.sgd diff --git a/Essentials/PepperDashEssentials/UI - FILES ORPHANED-DELETE/CrestronTouchpanelPropertiesConfig.cs b/PepperDashEssentials/UI - FILES ORPHANED-DELETE/CrestronTouchpanelPropertiesConfig.cs similarity index 100% rename from Essentials/PepperDashEssentials/UI - FILES ORPHANED-DELETE/CrestronTouchpanelPropertiesConfig.cs rename to PepperDashEssentials/UI - FILES ORPHANED-DELETE/CrestronTouchpanelPropertiesConfig.cs diff --git a/Essentials/PepperDashEssentials/UI - FILES ORPHANED-DELETE/DualDisplaySourceSRLController.cs b/PepperDashEssentials/UI - FILES ORPHANED-DELETE/DualDisplaySourceSRLController.cs similarity index 100% rename from Essentials/PepperDashEssentials/UI - FILES ORPHANED-DELETE/DualDisplaySourceSRLController.cs rename to PepperDashEssentials/UI - FILES ORPHANED-DELETE/DualDisplaySourceSRLController.cs diff --git a/Essentials/PepperDashEssentials/UI - FILES ORPHANED-DELETE/EssentialsTouchpanelController.cs b/PepperDashEssentials/UI - FILES ORPHANED-DELETE/EssentialsTouchpanelController.cs similarity index 100% rename from Essentials/PepperDashEssentials/UI - FILES ORPHANED-DELETE/EssentialsTouchpanelController.cs rename to PepperDashEssentials/UI - FILES ORPHANED-DELETE/EssentialsTouchpanelController.cs diff --git a/Essentials/PepperDashEssentials/UI - FILES ORPHANED-DELETE/SubpageReferenceListActivityItem.cs b/PepperDashEssentials/UI - FILES ORPHANED-DELETE/SubpageReferenceListActivityItem.cs similarity index 100% rename from Essentials/PepperDashEssentials/UI - FILES ORPHANED-DELETE/SubpageReferenceListActivityItem.cs rename to PepperDashEssentials/UI - FILES ORPHANED-DELETE/SubpageReferenceListActivityItem.cs diff --git a/Essentials/PepperDashEssentials/UI - FILES ORPHANED-DELETE/SubpageReferenceListSourceItem.cs b/PepperDashEssentials/UI - FILES ORPHANED-DELETE/SubpageReferenceListSourceItem.cs similarity index 100% rename from Essentials/PepperDashEssentials/UI - FILES ORPHANED-DELETE/SubpageReferenceListSourceItem.cs rename to PepperDashEssentials/UI - FILES ORPHANED-DELETE/SubpageReferenceListSourceItem.cs diff --git a/Essentials/PepperDashEssentials/UI/CrestronTouchpanelPropertiesConfig.cs b/PepperDashEssentials/UI/CrestronTouchpanelPropertiesConfig.cs similarity index 99% rename from Essentials/PepperDashEssentials/UI/CrestronTouchpanelPropertiesConfig.cs rename to PepperDashEssentials/UI/CrestronTouchpanelPropertiesConfig.cs index 4b504af0..f018b9e8 100644 --- a/Essentials/PepperDashEssentials/UI/CrestronTouchpanelPropertiesConfig.cs +++ b/PepperDashEssentials/UI/CrestronTouchpanelPropertiesConfig.cs @@ -12,7 +12,7 @@ public bool ShowDate { get; set; } public bool ShowTime { get; set; } public UiSetupPropertiesConfig Setup { get; set; } - public string HeaderStyle { get; set; } + public string HeaderStyle { get; set; } public bool IncludeInFusionRoomHealth { get; set; } diff --git a/Essentials/PepperDashEssentials/UI/DualDisplaySourceSRLController.cs b/PepperDashEssentials/UI/DualDisplaySourceSRLController.cs similarity index 100% rename from Essentials/PepperDashEssentials/UI/DualDisplaySourceSRLController.cs rename to PepperDashEssentials/UI/DualDisplaySourceSRLController.cs diff --git a/Essentials/PepperDashEssentials/UI/EssentialsTouchpanelController.cs b/PepperDashEssentials/UI/EssentialsTouchpanelController.cs similarity index 100% rename from Essentials/PepperDashEssentials/UI/EssentialsTouchpanelController.cs rename to PepperDashEssentials/UI/EssentialsTouchpanelController.cs diff --git a/Essentials/PepperDashEssentials/UI/HttpLogoServer.cs b/PepperDashEssentials/UI/HttpLogoServer.cs similarity index 100% rename from Essentials/PepperDashEssentials/UI/HttpLogoServer.cs rename to PepperDashEssentials/UI/HttpLogoServer.cs diff --git a/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs b/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs similarity index 96% rename from Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs rename to PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs index 623febff..c52f6b44 100644 --- a/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs +++ b/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs @@ -1,813 +1,813 @@ -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 -{ - /// - /// Where all UI element common joins are defined - /// - public class UIBoolJoin - { - /// - /// 901 - /// - public const uint VolumeUpPress = 901; - /// - /// 902 - /// - public const uint VolumeDownPress = 902; - - //**************************************************** - // Codec General - - /// - /// 1001 - /// - public const uint CallEndPress = 1001; - /// - /// 1002 - /// - public const uint CallEndAllConfirmPress = 1002; - /// - /// 1003 - For tapping the text field to reveal the keyboard - /// - public const uint CodecDirectorySearchTextPress = 1003; - /// - /// 1004 - /// - public const uint CallStopSharingPress = 1004; - /// - /// 1005 - /// - public const uint CallSharedSourceInfoVisible = 1005; - /// - /// 1006 - /// - public const uint CallEndAllConfirmVisible = 1006; - - - - // Audio Conference - /// - /// 1101 - /// - public const uint ACKeypadVisible = 1101; - /// - /// 1102 - /// - public const uint ACStagingPopoverVisible = 1102; - /// - /// 1111 - /// - public const uint ACSpeedDial1Press = 1111; - /// - /// 1112 - /// - public const uint ACSpeedDial2Press = 1112; - /// - /// 1113 - /// - public const uint ACSpeedDial3Press = 1113; - /// - /// 1114 - /// - public const uint ACSpeedDial4Press = 1114; - /// - /// 1121 - /// - public const uint ACSpeedDial1Visible = 1121; - /// - /// 1122 - /// - public const uint ACSpeedDial2Visible = 1122; - /// - /// 1123 - /// - public const uint ACSpeedDial3Visible = 1123; - /// - /// 1124 - /// - public const uint ACSpeedDial4Visible = 1124; - - //****************************************************** - // Video Conference - /// - /// 1201 - /// - public const uint VCKeypadWithFavoritesVisible = 1201; - /// - /// 1202 - /// - public const uint VCStagingInactivePopoverVisible = 1202; - /// - /// - /// - public const uint VCStagingActivePopoverVisible = 1203; - /// - /// - /// - public const uint VCKeypadVisible = 1204; - /// - /// 1205 - /// - public const uint VCDirectoryVisible = 1205; - /// - /// 1206 - /// - public const uint VCRecentsVisible = 1206; - /// - /// 1207 - /// - public const uint VCCameraVisible = 1207; - /// - /// 1208 - /// - public const uint VCSelfViewLayoutVisible = 1208; - /// - /// 1211 - 1215 - /// - public const uint VCFavoritePressStart = 1211; - // RANGE IN USE - public const uint VCFavoritePressEnd = 1215; - /// - /// 1221 - 1225 - /// - public const uint VCFavoriteVisibleStart = 1221; - // RANGE IN USE - public const uint VCFavoriteVisibleEnd = 1225; - /// - /// 1231 - /// - public const uint VCStagingRecentsPress = 1231; - /// - /// 1232 - /// - public const uint VCStagingDirectoryPress = 1232; - /// - /// 1233 - /// - public const uint VCStagingKeypadPress = 1233; - /// - /// 1234 - /// - public const uint VCStagingConnectPress = 1234; - /// - /// 1235 - /// - public const uint VCStagingCameraPress = 1235; - /// - /// 1236 - /// - public const uint VCStagingConnectEnable = 1236; - /// - /// 1237 - When the user touches the text field, should trigger keyboard - /// - public const uint VCKeypadTextPress = 1237; - /// - /// 1238 - /// - public const uint VCKeypadBackspacePress = 1238; - /// - /// 1239 - /// - public const uint VCKeypadBackspaceVisible = 1239; - /// - /// 1240 - /// - public const uint VCDirectoryBackPress = 1240; - /// - /// 1241 For touching the text area to bring up keyboard - /// - public const uint VCDirectorySearchTextPress = 1241; - /// - /// 1242 - /// - public const uint VCStagingSelfViewLayoutPress = 1242; - /// - /// 1243 - /// - public const uint VCDirectoryBackVisible = 1243; - /// - /// 1244 - /// - public const uint VCDirectoryBackspacePress = 1244; - /// - /// 1245 - /// - public const uint VCDirectoryBackspaceVisible = 1245; - /// - /// 1251 - /// - public const uint VCSelfViewTogglePress = 1251; - /// - /// 1252 - /// - public const uint VCLayoutTogglePress = 1252; - /// - /// 1253 - /// - public const uint VCSelfViewPipTogglePress = 1253; - /// - /// 1254 - /// - public const uint VCLayoutToggleEnable = 1254; - /// - /// 1255 - /// - public const uint VCMinMaxPress = 1255; - /// - /// 1256 - /// - public const uint VCMinMaxEnable = 1256; - - // Letter joins start at 2921; - - //****************************************************** - - // Environment Joins - - // Popup Container - - /// - /// 2001 - 2004 - /// - public const uint EnvironmentBackgroundSubpageVisibleBase = 2000; - - - // ColumnOne - - /// - /// 2011 - 2015 - /// - public const uint EnvironmentColumnOneLightingTypeVisibleBase = 2010; - - /// - /// 2016 - 2020 - /// - public const uint EnvironmentColumnOneShadingTypeVisibleBase = 2015; - - // ColumnTwo - - /// - /// 2021 - 2025 - /// - public const uint EnvironmentColumnTwoLightingTypeVisibleBase = 2020; - - /// - /// 2026 - 2030 - /// - public const uint EnvironmentColumnTwoShadingTypeVisibleBase = 2025; - - // ColumnThree - - /// - /// 2031 - 2035 - /// - public const uint EnvironmentColumnThreeLightingTypeVisibleBase = 2030; - - /// - /// 2036 - 2040 - /// - public const uint EnvironmentColumnThreeShadingTypeVisibleBase = 2035; - - // ColumnFour - - /// - /// 2041 - 2045 - /// - public const uint EnvironmentColumnFourLightingTypeVisibleBase = 2040; - - /// - /// 2046 - 2050 - /// - public const uint EnvironmentColumnFourShadingTypeVisibleBase = 2045; - - // Button press - - /// - /// 2051 - 2060 - /// - public const uint EnvironmentColumnOneButtonPressBase = 2050; - - /// - /// 2061 - 2070 - /// - public const uint EnvironmentColumnTwoButtonPressBase = 2060; - - /// - /// 2071 - 2080 - /// - public const uint EnvironmentColumnThreeButtonPressBase = 2070; - - /// - /// 2081 - 2090 - /// - public const uint EnvironmentColumnFourButtonPressBase = 2080; - - // Button visibility - - /// - /// 2151 - 2160 - /// - public const uint EnvironmentColumnOneButtonVisibleBase = 2150; - - /// - /// 2161 - 2170 - /// - public const uint EnvironmentColumnTwoButtonVisibleBase = 2160; - - /// - /// 2171 - 2180 - /// - public const uint EnvironmentColumnThreeButtonVisibleBase = 2170; - - /// - /// 2181 - 2190 - /// - public const uint EnvironmentColumnFourButtonVisibleBase = 2180; - - - //****************************************************** - - /// - /// 3101 - /// - public const uint TechExitButton = 3101; - /// - /// 3106 - /// - public const uint TechCommonItemsVisbible = 3106; - /// - /// 3107 - /// - public const uint TechSystemStatusVisible = 3107; - /// - /// 3108 - /// - public const uint TechDisplayControlsVisible = 3108; - /// - /// 3109 - /// - public const uint TechPanelSetupVisible = 3109; - /// - /// 3110 - /// - public const uint TechAdvancedVolumeVisible = 3110; - /// - /// 3111 - /// - public const uint TechAboutVisible = 3111; - /// - /// 3112 - /// - public const uint TechSchedulerVisible = 3112; - - //***************************************************** - /// - /// 3811 - /// - public const uint VolumeSingleMute1Visible = 3811; - /// - /// 3812 - /// - public const uint VolumeSlider1Press = 3812; - /// - /// 3813 - /// - public const uint Volume1ProgramMutePressAndFB = 3813; - /// - /// 3821 - /// - public const uint Volume2Visible = 3821; - /// - /// 3822 - /// - public const uint VolumeSlider2Press = 3822; - /// - /// 3823 - /// - public const uint Volume2MutePressAndFB = 3823; - /// - /// 3831 - /// - public const uint Volume3Visible = 3831; - /// - /// 3832 - /// - public const uint VolumeSlider3Press = 3832; - /// - /// 3833 - /// - public const uint Volume3MutePressAndFB = 3833; - /// - /// 3841 - /// - public const uint Volume4Visible = 3841; - /// - /// 3842 - /// - public const uint VolumeSlider4Press = 3842; - /// - /// 3843 - /// - public const uint Volume4MutePressAndFB = 3843; - /// - /// 3851 - /// - public const uint Volume5Visible = 3851; - /// - /// 3852 - /// - public const uint VolumeSlider5Press = 3852; - /// - /// 3853 - /// - public const uint Volume5MutePressAndFB = 3853; - /// - /// 3861 - /// - public const uint Volume6Visible = 3861; - /// - /// 3862 - /// - public const uint VolumeSlider6Press = 3862; - /// - /// 3863 - /// - public const uint Volume6MutePressAndFB = 3863; - - /// - /// 3869 - when the system is off and the gear is pressed - /// - public const uint VolumesPagePowerOffVisible = 3869; - /// - /// 3870 - /// - public const uint VolumesPageVisible = 3870; - /// - /// 3871 - /// - public const uint VolumeDualMute1Visible = 3871; - /// - /// 3874 - /// - public const uint Volume1SpeechMutePressAndFB = 3874; - /// - /// 3875 - /// - public const uint Volume1BackerVisibility = 3875; - /// - /// 3891 - /// - public const uint VolumeDefaultPress = 3891; - /// - /// 3951 - /// - /// 3952 - /// - public const uint HeaderIcon2Press = 3952; - /// - /// 3953 - /// - public const uint HeaderIcon3Press = 3953; - /// - /// 3954 - /// - public const uint HeaderIcon4Press = 3954; - /// - /// 3955 - /// - public const uint HeaderIcon5Press = 3955; - - /// - /// 3999 - /// - public const uint GenericModalVisible = 3999; - /// - /// 12345 - /// - public const uint AvNoControlsSubVisible = 12345; - - // 10000 - 14999 are general "source" pages - - /// - /// 15001 - /// - public const uint StartPageVisible = 15001; - /// - /// 15002 Shows the start page in the source controls area of the screen - /// - public const uint TapToBeginVisible = 15002; - /// - /// 15003 Message text when no source is showing - /// - public const uint SelectASourceVisible = 15003; - /// - /// 15004 - /// - public const uint RoomIsOn = 15004; - /// - /// 15005 Shows always-on volume control subpage with only audio mute - /// - public const uint VolumeControlsSingleMuteVisible = 15005; - /// - /// 15006 Shows always-on volume control subpage with mic and audio mutes - /// - public const uint VolumeControlsDualMuteVisible = 15006; - /// - /// 15010 - /// - public const uint ShowPanelSetupPress = 15010; - /// - /// 15011 - Top bar with room name and button that pops up dialog with room data - /// - public const uint TopBarHabaneroVisible = 15011; - /// - /// 15012 - /// - public const uint SourceStagingBarVisible = 15012; - /// - /// 15013 - /// - public const uint PowerOffStep1Visible = 15013; - /// - /// 15014 - /// - public const uint PowerOffStep2Visible = 15014; - /// - /// 15015 - /// - public const uint ShowPowerOffPress = 15015; - /// - /// 15016 - /// - public const uint PowerOffMorePress = 15016; - /// - /// 15017 - /// - public const uint StagingPageAdditionalArrowsVisible = 15017; - /// - /// 15018 The Header with dynamic buttons - /// - public const uint TopBarHabaneroDynamicVisible = 15018; - /// - /// 15019 Shown when system is starting and not ready for use - /// - public const uint SystemInitializingVisible = 15019; - /// - /// 15020 - /// - public const uint PanelSetupVisible = 15020; - /// - /// 15021 - /// - public const uint SourceWaitOverlayVisible = 15021; - /// - /// 15022 - /// - public const uint ActivityFooterVisible = 15022; - /// - /// 15024 - /// - public const uint HeaderCallStatusLeftPositionVisible = 15024; - /// - /// 15025 - /// - public const uint HeaderCallStatusRightPositionVisible = 15025; - /// - /// 15027 - /// - public const uint HeaderCallStatusLabelPress = 15027; - /// - /// 15028 The gear button in header - /// - public const uint FIXFIX_HeaderGearButtonPress_FIXFIX = 15028; - /// - /// 15029 the room button in header - /// - public const uint HeaderRoomButtonPress = 15029; - /// - /// 15030 Visibility for room data popup - /// - public const uint RoomHeaderPageVisible = 15030; - /// - /// 15031 - /// - public const uint AllRoomsOffPress = 15031; - /// - /// 15032 - /// - public const uint DisplayPowerTogglePress = 15032; - /// - /// 15033 - /// - public const uint PowerOffCancelPress = 15033; - /// - /// 15034 - /// - public const uint PowerOffConfirmPress = 15034; - /// - /// 15035 - /// - public const uint VolumeButtonPopupPress = 15035; - /// - /// 15035 - /// - public const uint VolumeButtonPopupVisible = 15035; - /// - /// 15036 - /// - public const uint VolumeGaugePopupVisible = 15036; - /// - /// 15037 - /// - public const uint GearButtonVisible = 15037; - /// - /// 15038 - /// - public const uint CalendarHeaderButtonVisible = 15038; - /// - /// 15039 - /// - public const uint CalendarHeaderButtonPress = 15039; - /// - /// 15040 - /// - public const uint CallStatusPageVisible = 15040; - /// - /// 15041 - /// - public const uint LightsPageVisible = 15041; - /// - /// 15042 Closes whichever interlocked modal is open - /// - public const uint InterlockedModalClosePress = 15042; - /// - /// 15043 Vis for modal backer for full-screen source - /// - public const uint SourceBackgroundOverlayVisible = 15043; - /// - /// 15044 Close button for source modal overlay - /// - public const uint SourceBackgroundOverlayClosePress = 15044; - /// - /// 15045 - Visibility for the bar containing call navigation button list - /// - public const uint CallStagingBarVisible = 15045; - /// - /// 15046 - /// - public const uint MeetingsOrContacMethodsListVisible = 15046; - /// - /// 15047 The "Join" button on the next meeting ribbon - /// - public const uint NextMeetingJoinPress = 15047; - /// - /// 15048 Dismisses the ribbon - /// - public const uint NextMeetingModalClosePress = 15048; - /// - /// 15049 - /// - public const uint NextMeetingModalVisible = 15049; - /// - /// 15051 - /// - public const uint Display1SelectPressAndFb = 15051; - /// - /// 15052 - /// - public const uint Display1ControlButtonEnable = 15052; - /// - /// 15053 - /// - public const uint Display1ControlButtonPress = 15053; - /// - /// 15054 - /// - public const uint Display1AudioButtonEnable = 15054; - /// - /// 15055 - /// - public const uint Display1AudioButtonPressAndFb = 15055; - /// - /// 15056 - /// - public const uint Display2SelectPressAndFb = 15056; - /// - /// 15057 - /// - public const uint Display2ControlButtonEnable = 15057; - /// - /// 15058 - /// - public const uint Display2ControlButtonPress = 15058; - /// - /// 15059 - /// - public const uint Display2AudioButtonEnable = 15059; - /// - /// 15060 - /// - public const uint Display2AudioButtonPressAndFb = 15060; - /// - /// 15061 Reveals the dual-display subpage - /// - public const uint DualDisplayPageVisible = 15061; - /// - /// 15062 Reveals the toggle switch for the sharing mode - /// - public const uint ToggleSharingModeVisible = 15062; - /// - /// 15063 Press for the toggle mode switch - /// - public const uint ToggleSharingModePress = 15063; - /// - /// 15064 - /// - public const uint LogoDefaultVisible = 15064; - /// - /// 15065 - /// - public const uint LogoUrlVisible = 15065; - /// - /// 15066 - Reveals the active calls header item - /// - public const uint HeaderActiveCallsListVisible = 15066; - /// - /// 15067 - /// - public const uint NotificationRibbonVisible = 15067; - /// - /// 15083 - Press for Call help desk on AC/VC - /// - public const uint HelpPageShowCallButtonPress = 15083; - /// - /// 15084 - Show the "call help desk" button on help page - /// - public const uint HelpPageShowCallButtonVisible = 15084; - /// - /// 15085 Visibility join for help subpage - /// - public const uint HelpPageVisible = 15085; - /// - /// 15086 Press for help header button - /// - public const uint HelpPress = 15086; - /// - /// 15088 - /// - public const uint DateOnlyVisible = 15088; - /// - /// 15089 - /// - public const uint TimeOnlyVisible = 15089; - /// - /// 15090 - /// - public const uint DateAndTimeVisible = 15090; - /// - /// 15091 - /// - public const uint SetupFullDistrib = 15091; - - // PIN dialogs ************************************ - - /// - /// 15201 - /// - public const uint PinDialog4DigitVisible = 15201; - /// - /// 15206 - /// - public const uint PinDialogCancelPress = 15206; - /// - /// 15207 - /// - public const uint PinDialogErrorVisible = 15207; - /// - /// 15211 - /// - public const uint PinDialogDot1 = 15211; - /// - /// 15212 - /// - public const uint PinDialogDot2 = 15212; - /// - /// 15213 - /// - public const uint PinDialogDot3 = 15213; - /// - /// 15214 - /// - public const uint PinDialogDot4 = 15214; - } +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 +{ + /// + /// Where all UI element common joins are defined + /// + public class UIBoolJoin + { + /// + /// 901 + /// + public const uint VolumeUpPress = 901; + /// + /// 902 + /// + public const uint VolumeDownPress = 902; + + //**************************************************** + // Codec General + + /// + /// 1001 + /// + public const uint CallEndPress = 1001; + /// + /// 1002 + /// + public const uint CallEndAllConfirmPress = 1002; + /// + /// 1003 - For tapping the text field to reveal the keyboard + /// + public const uint CodecDirectorySearchTextPress = 1003; + /// + /// 1004 + /// + public const uint CallStopSharingPress = 1004; + /// + /// 1005 + /// + public const uint CallSharedSourceInfoVisible = 1005; + /// + /// 1006 + /// + public const uint CallEndAllConfirmVisible = 1006; + + + + // Audio Conference + /// + /// 1101 + /// + public const uint ACKeypadVisible = 1101; + /// + /// 1102 + /// + public const uint ACStagingPopoverVisible = 1102; + /// + /// 1111 + /// + public const uint ACSpeedDial1Press = 1111; + /// + /// 1112 + /// + public const uint ACSpeedDial2Press = 1112; + /// + /// 1113 + /// + public const uint ACSpeedDial3Press = 1113; + /// + /// 1114 + /// + public const uint ACSpeedDial4Press = 1114; + /// + /// 1121 + /// + public const uint ACSpeedDial1Visible = 1121; + /// + /// 1122 + /// + public const uint ACSpeedDial2Visible = 1122; + /// + /// 1123 + /// + public const uint ACSpeedDial3Visible = 1123; + /// + /// 1124 + /// + public const uint ACSpeedDial4Visible = 1124; + + //****************************************************** + // Video Conference + /// + /// 1201 + /// + public const uint VCKeypadWithFavoritesVisible = 1201; + /// + /// 1202 + /// + public const uint VCStagingInactivePopoverVisible = 1202; + /// + /// + /// + public const uint VCStagingActivePopoverVisible = 1203; + /// + /// + /// + public const uint VCKeypadVisible = 1204; + /// + /// 1205 + /// + public const uint VCDirectoryVisible = 1205; + /// + /// 1206 + /// + public const uint VCRecentsVisible = 1206; + /// + /// 1207 + /// + public const uint VCCameraVisible = 1207; + /// + /// 1208 + /// + public const uint VCSelfViewLayoutVisible = 1208; + /// + /// 1211 - 1215 + /// + public const uint VCFavoritePressStart = 1211; + // RANGE IN USE + public const uint VCFavoritePressEnd = 1215; + /// + /// 1221 - 1225 + /// + public const uint VCFavoriteVisibleStart = 1221; + // RANGE IN USE + public const uint VCFavoriteVisibleEnd = 1225; + /// + /// 1231 + /// + public const uint VCStagingRecentsPress = 1231; + /// + /// 1232 + /// + public const uint VCStagingDirectoryPress = 1232; + /// + /// 1233 + /// + public const uint VCStagingKeypadPress = 1233; + /// + /// 1234 + /// + public const uint VCStagingConnectPress = 1234; + /// + /// 1235 + /// + public const uint VCStagingCameraPress = 1235; + /// + /// 1236 + /// + public const uint VCStagingConnectEnable = 1236; + /// + /// 1237 - When the user touches the text field, should trigger keyboard + /// + public const uint VCKeypadTextPress = 1237; + /// + /// 1238 + /// + public const uint VCKeypadBackspacePress = 1238; + /// + /// 1239 + /// + public const uint VCKeypadBackspaceVisible = 1239; + /// + /// 1240 + /// + public const uint VCDirectoryBackPress = 1240; + /// + /// 1241 For touching the text area to bring up keyboard + /// + public const uint VCDirectorySearchTextPress = 1241; + /// + /// 1242 + /// + public const uint VCStagingSelfViewLayoutPress = 1242; + /// + /// 1243 + /// + public const uint VCDirectoryBackVisible = 1243; + /// + /// 1244 + /// + public const uint VCDirectoryBackspacePress = 1244; + /// + /// 1245 + /// + public const uint VCDirectoryBackspaceVisible = 1245; + /// + /// 1251 + /// + public const uint VCSelfViewTogglePress = 1251; + /// + /// 1252 + /// + public const uint VCLayoutTogglePress = 1252; + /// + /// 1253 + /// + public const uint VCSelfViewPipTogglePress = 1253; + /// + /// 1254 + /// + public const uint VCLayoutToggleEnable = 1254; + /// + /// 1255 + /// + public const uint VCMinMaxPress = 1255; + /// + /// 1256 + /// + public const uint VCMinMaxEnable = 1256; + + // Letter joins start at 2921; + + //****************************************************** + + // Environment Joins + + // Popup Container + + /// + /// 2001 - 2004 + /// + public const uint EnvironmentBackgroundSubpageVisibleBase = 2000; + + + // ColumnOne + + /// + /// 2011 - 2015 + /// + public const uint EnvironmentColumnOneLightingTypeVisibleBase = 2010; + + /// + /// 2016 - 2020 + /// + public const uint EnvironmentColumnOneShadingTypeVisibleBase = 2015; + + // ColumnTwo + + /// + /// 2021 - 2025 + /// + public const uint EnvironmentColumnTwoLightingTypeVisibleBase = 2020; + + /// + /// 2026 - 2030 + /// + public const uint EnvironmentColumnTwoShadingTypeVisibleBase = 2025; + + // ColumnThree + + /// + /// 2031 - 2035 + /// + public const uint EnvironmentColumnThreeLightingTypeVisibleBase = 2030; + + /// + /// 2036 - 2040 + /// + public const uint EnvironmentColumnThreeShadingTypeVisibleBase = 2035; + + // ColumnFour + + /// + /// 2041 - 2045 + /// + public const uint EnvironmentColumnFourLightingTypeVisibleBase = 2040; + + /// + /// 2046 - 2050 + /// + public const uint EnvironmentColumnFourShadingTypeVisibleBase = 2045; + + // Button press + + /// + /// 2051 - 2060 + /// + public const uint EnvironmentColumnOneButtonPressBase = 2050; + + /// + /// 2061 - 2070 + /// + public const uint EnvironmentColumnTwoButtonPressBase = 2060; + + /// + /// 2071 - 2080 + /// + public const uint EnvironmentColumnThreeButtonPressBase = 2070; + + /// + /// 2081 - 2090 + /// + public const uint EnvironmentColumnFourButtonPressBase = 2080; + + // Button visibility + + /// + /// 2151 - 2160 + /// + public const uint EnvironmentColumnOneButtonVisibleBase = 2150; + + /// + /// 2161 - 2170 + /// + public const uint EnvironmentColumnTwoButtonVisibleBase = 2160; + + /// + /// 2171 - 2180 + /// + public const uint EnvironmentColumnThreeButtonVisibleBase = 2170; + + /// + /// 2181 - 2190 + /// + public const uint EnvironmentColumnFourButtonVisibleBase = 2180; + + + //****************************************************** + + /// + /// 3101 + /// + public const uint TechExitButton = 3101; + /// + /// 3106 + /// + public const uint TechCommonItemsVisbible = 3106; + /// + /// 3107 + /// + public const uint TechSystemStatusVisible = 3107; + /// + /// 3108 + /// + public const uint TechDisplayControlsVisible = 3108; + /// + /// 3109 + /// + public const uint TechPanelSetupVisible = 3109; + /// + /// 3110 + /// + public const uint TechAdvancedVolumeVisible = 3110; + /// + /// 3111 + /// + public const uint TechAboutVisible = 3111; + /// + /// 3112 + /// + public const uint TechSchedulerVisible = 3112; + + //***************************************************** + /// + /// 3811 + /// + public const uint VolumeSingleMute1Visible = 3811; + /// + /// 3812 + /// + public const uint VolumeSlider1Press = 3812; + /// + /// 3813 + /// + public const uint Volume1ProgramMutePressAndFB = 3813; + /// + /// 3821 + /// + public const uint Volume2Visible = 3821; + /// + /// 3822 + /// + public const uint VolumeSlider2Press = 3822; + /// + /// 3823 + /// + public const uint Volume2MutePressAndFB = 3823; + /// + /// 3831 + /// + public const uint Volume3Visible = 3831; + /// + /// 3832 + /// + public const uint VolumeSlider3Press = 3832; + /// + /// 3833 + /// + public const uint Volume3MutePressAndFB = 3833; + /// + /// 3841 + /// + public const uint Volume4Visible = 3841; + /// + /// 3842 + /// + public const uint VolumeSlider4Press = 3842; + /// + /// 3843 + /// + public const uint Volume4MutePressAndFB = 3843; + /// + /// 3851 + /// + public const uint Volume5Visible = 3851; + /// + /// 3852 + /// + public const uint VolumeSlider5Press = 3852; + /// + /// 3853 + /// + public const uint Volume5MutePressAndFB = 3853; + /// + /// 3861 + /// + public const uint Volume6Visible = 3861; + /// + /// 3862 + /// + public const uint VolumeSlider6Press = 3862; + /// + /// 3863 + /// + public const uint Volume6MutePressAndFB = 3863; + + /// + /// 3869 - when the system is off and the gear is pressed + /// + public const uint VolumesPagePowerOffVisible = 3869; + /// + /// 3870 + /// + public const uint VolumesPageVisible = 3870; + /// + /// 3871 + /// + public const uint VolumeDualMute1Visible = 3871; + /// + /// 3874 + /// + public const uint Volume1SpeechMutePressAndFB = 3874; + /// + /// 3875 + /// + public const uint Volume1BackerVisibility = 3875; + /// + /// 3891 + /// + public const uint VolumeDefaultPress = 3891; + /// + /// 3951 + /// + /// 3952 + /// + public const uint HeaderIcon2Press = 3952; + /// + /// 3953 + /// + public const uint HeaderIcon3Press = 3953; + /// + /// 3954 + /// + public const uint HeaderIcon4Press = 3954; + /// + /// 3955 + /// + public const uint HeaderIcon5Press = 3955; + + /// + /// 3999 + /// + public const uint GenericModalVisible = 3999; + /// + /// 12345 + /// + public const uint AvNoControlsSubVisible = 12345; + + // 10000 - 14999 are general "source" pages + + /// + /// 15001 + /// + public const uint StartPageVisible = 15001; + /// + /// 15002 Shows the start page in the source controls area of the screen + /// + public const uint TapToBeginVisible = 15002; + /// + /// 15003 Message text when no source is showing + /// + public const uint SelectASourceVisible = 15003; + /// + /// 15004 + /// + public const uint RoomIsOn = 15004; + /// + /// 15005 Shows always-on volume control subpage with only audio mute + /// + public const uint VolumeControlsSingleMuteVisible = 15005; + /// + /// 15006 Shows always-on volume control subpage with mic and audio mutes + /// + public const uint VolumeControlsDualMuteVisible = 15006; + /// + /// 15010 + /// + public const uint ShowPanelSetupPress = 15010; + /// + /// 15011 - Top bar with room name and button that pops up dialog with room data + /// + public const uint TopBarHabaneroVisible = 15011; + /// + /// 15012 + /// + public const uint SourceStagingBarVisible = 15012; + /// + /// 15013 + /// + public const uint PowerOffStep1Visible = 15013; + /// + /// 15014 + /// + public const uint PowerOffStep2Visible = 15014; + /// + /// 15015 + /// + public const uint ShowPowerOffPress = 15015; + /// + /// 15016 + /// + public const uint PowerOffMorePress = 15016; + /// + /// 15017 + /// + public const uint StagingPageAdditionalArrowsVisible = 15017; + /// + /// 15018 The Header with dynamic buttons + /// + public const uint TopBarHabaneroDynamicVisible = 15018; + /// + /// 15019 Shown when system is starting and not ready for use + /// + public const uint SystemInitializingVisible = 15019; + /// + /// 15020 + /// + public const uint PanelSetupVisible = 15020; + /// + /// 15021 + /// + public const uint SourceWaitOverlayVisible = 15021; + /// + /// 15022 + /// + public const uint ActivityFooterVisible = 15022; + /// + /// 15024 + /// + public const uint HeaderCallStatusLeftPositionVisible = 15024; + /// + /// 15025 + /// + public const uint HeaderCallStatusRightPositionVisible = 15025; + /// + /// 15027 + /// + public const uint HeaderCallStatusLabelPress = 15027; + /// + /// 15028 The gear button in header + /// + public const uint FIXFIX_HeaderGearButtonPress_FIXFIX = 15028; + /// + /// 15029 the room button in header + /// + public const uint HeaderRoomButtonPress = 15029; + /// + /// 15030 Visibility for room data popup + /// + public const uint RoomHeaderPageVisible = 15030; + /// + /// 15031 + /// + public const uint AllRoomsOffPress = 15031; + /// + /// 15032 + /// + public const uint DisplayPowerTogglePress = 15032; + /// + /// 15033 + /// + public const uint PowerOffCancelPress = 15033; + /// + /// 15034 + /// + public const uint PowerOffConfirmPress = 15034; + /// + /// 15035 + /// + public const uint VolumeButtonPopupPress = 15035; + /// + /// 15035 + /// + public const uint VolumeButtonPopupVisible = 15035; + /// + /// 15036 + /// + public const uint VolumeGaugePopupVisible = 15036; + /// + /// 15037 + /// + public const uint GearButtonVisible = 15037; + /// + /// 15038 + /// + public const uint CalendarHeaderButtonVisible = 15038; + /// + /// 15039 + /// + public const uint CalendarHeaderButtonPress = 15039; + /// + /// 15040 + /// + public const uint CallStatusPageVisible = 15040; + /// + /// 15041 + /// + public const uint LightsPageVisible = 15041; + /// + /// 15042 Closes whichever interlocked modal is open + /// + public const uint InterlockedModalClosePress = 15042; + /// + /// 15043 Vis for modal backer for full-screen source + /// + public const uint SourceBackgroundOverlayVisible = 15043; + /// + /// 15044 Close button for source modal overlay + /// + public const uint SourceBackgroundOverlayClosePress = 15044; + /// + /// 15045 - Visibility for the bar containing call navigation button list + /// + public const uint CallStagingBarVisible = 15045; + /// + /// 15046 + /// + public const uint MeetingsOrContacMethodsListVisible = 15046; + /// + /// 15047 The "Join" button on the next meeting ribbon + /// + public const uint NextMeetingJoinPress = 15047; + /// + /// 15048 Dismisses the ribbon + /// + public const uint NextMeetingModalClosePress = 15048; + /// + /// 15049 + /// + public const uint NextMeetingModalVisible = 15049; + /// + /// 15051 + /// + public const uint Display1SelectPressAndFb = 15051; + /// + /// 15052 + /// + public const uint Display1ControlButtonEnable = 15052; + /// + /// 15053 + /// + public const uint Display1ControlButtonPress = 15053; + /// + /// 15054 + /// + public const uint Display1AudioButtonEnable = 15054; + /// + /// 15055 + /// + public const uint Display1AudioButtonPressAndFb = 15055; + /// + /// 15056 + /// + public const uint Display2SelectPressAndFb = 15056; + /// + /// 15057 + /// + public const uint Display2ControlButtonEnable = 15057; + /// + /// 15058 + /// + public const uint Display2ControlButtonPress = 15058; + /// + /// 15059 + /// + public const uint Display2AudioButtonEnable = 15059; + /// + /// 15060 + /// + public const uint Display2AudioButtonPressAndFb = 15060; + /// + /// 15061 Reveals the dual-display subpage + /// + public const uint DualDisplayPageVisible = 15061; + /// + /// 15062 Reveals the toggle switch for the sharing mode + /// + public const uint ToggleSharingModeVisible = 15062; + /// + /// 15063 Press for the toggle mode switch + /// + public const uint ToggleSharingModePress = 15063; + /// + /// 15064 + /// + public const uint LogoDefaultVisible = 15064; + /// + /// 15065 + /// + public const uint LogoUrlVisible = 15065; + /// + /// 15066 - Reveals the active calls header item + /// + public const uint HeaderActiveCallsListVisible = 15066; + /// + /// 15067 + /// + public const uint NotificationRibbonVisible = 15067; + /// + /// 15083 - Press for Call help desk on AC/VC + /// + public const uint HelpPageShowCallButtonPress = 15083; + /// + /// 15084 - Show the "call help desk" button on help page + /// + public const uint HelpPageShowCallButtonVisible = 15084; + /// + /// 15085 Visibility join for help subpage + /// + public const uint HelpPageVisible = 15085; + /// + /// 15086 Press for help header button + /// + public const uint HelpPress = 15086; + /// + /// 15088 + /// + public const uint DateOnlyVisible = 15088; + /// + /// 15089 + /// + public const uint TimeOnlyVisible = 15089; + /// + /// 15090 + /// + public const uint DateAndTimeVisible = 15090; + /// + /// 15091 + /// + public const uint SetupFullDistrib = 15091; + + // PIN dialogs ************************************ + + /// + /// 15201 + /// + public const uint PinDialog4DigitVisible = 15201; + /// + /// 15206 + /// + public const uint PinDialogCancelPress = 15206; + /// + /// 15207 + /// + public const uint PinDialogErrorVisible = 15207; + /// + /// 15211 + /// + public const uint PinDialogDot1 = 15211; + /// + /// 15212 + /// + public const uint PinDialogDot2 = 15212; + /// + /// 15213 + /// + public const uint PinDialogDot3 = 15213; + /// + /// 15214 + /// + public const uint PinDialogDot4 = 15214; + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs b/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs similarity index 100% rename from Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs rename to PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs diff --git a/Essentials/PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs b/PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs similarity index 96% rename from Essentials/PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs rename to PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs index 101c8cda..b5f5a86b 100644 --- a/Essentials/PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs +++ b/PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs @@ -1,279 +1,279 @@ -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 -{ - /// - /// Common string join number constants - /// - public class UIStringJoin - { - //****************************************************** - // Codec - /// - /// 1001 - /// - public const uint CodecAddressEntryText = 1001; - /// - /// 1002 - /// - public const uint CodecDirectorySearchEntryText = 1002; - /// - /// 1004 - /// - public const uint CallSharedSourceNameText = 1004; - - - /// - /// 1201 - 1230 range of joins for recents list - /// - public const uint VCRecentListTextStart = 1201; - // RANGE IN USE - public const uint VCRecentListTextEnd = 1230; - /// - /// 1231 - 1261 range of joins for recent list time - /// - public const uint VCRecentListTimeTextStart = 1231; - // RANGE IN USE - public const uint VCRecentListTimeTextEnd = 1260; - /// - /// 1291 - the current layout mode - /// - public const uint VCLayoutModeText = 1291; - - /// - /// 1301 - 1400 - /// - public const uint VCDirectoryListTextStart = 1301; - // RANGE IN USE - public const uint VCDirectoryListTextEnd = 1556; - - /// - /// 1611 - 1615 - /// - public const uint VCFavoritesStart = 1611; - // RANGE IN USE - public const uint VCFavoritesTextEnd = 1615; - - - //****************************************************** - // Keyboard - /// - /// 1901 - /// - //public const uint KeypadText = 2901; - - //****************************************************** - - // Environment Joins - - /// - /// 2001 - 2010 - /// - public const uint EnvironmentColumnOneLabelBase = 2000; - - /// - /// 2011 - 2020 - /// - public const uint EnvironmentColumnTwoLabelBase = 2010; - - /// - /// 2021 - 2030 - /// - public const uint EnvironmentColumnThreeLabelBase = 2020; - - /// - /// 2031 - 2040 - /// - public const uint EnvironmentColumnFourLabelBase = 2030; - - // 2050, 2060, 2070 and 2080 reserved for column device name labels - - //****************************************************** - - /// - /// 3101 - This is the start of the range 3101 - 3120 - /// - public const uint TechMenuButtonTextStart = 3101; - - //----- through 3120 - - - /// - /// 3812 - /// - public const uint AdvancedVolumeSlider1Text = 3812; - /// - /// 3822 - /// - public const uint AdvancedVolumeSlider2Text = 3822; - /// - /// 3832 - /// - public const uint AdvancedVolumeSlider3Text = 3832; - /// - /// 3842 - /// - public const uint AdvancedVolumeSlider4Text = 3842; - /// - /// 3852 - /// - public const uint AdvancedVolumeSlider5Text = 3852; - /// - /// 3862 - /// - public const uint AdvancedVolumeSlider6Text = 3862; - - /// - /// 3901 - /// - public const uint CurrentRoomName = 3901; - /// - /// 3902 - /// - public const uint CurrentSourceName = 3902; - /// - /// 3903 - /// - public const uint CurrentSourceIcon = 3903; - /// - /// 3904 - Phone number for room header - /// - public const uint RoomPhoneText = 3904; - /// - /// 3906 - The separator for verbose-header text on addresses - /// - public const uint RoomAddressPipeText = 3906; - /// - /// 3907 - The user code for mobile control - /// - public const uint RoomUserCode = 3907; - /// - /// 3911 - /// - public const uint PowerOffMessage = 3911; - /// - /// 3912 - /// - public const uint StartPageMessage = 3912; - /// - /// 3913 - /// - public const uint StartActivityText = 3913; - /// - /// 3914 Title bar label for source overlay - /// - public const uint SourceBackgroundOverlayTitle = 3914; - - /// - /// 3915 - /// - public const uint NotificationRibbonText = 3915; - /// - /// 3916 The "active call" label - /// - public const uint HeaderCallStatusLabel = 3916; - /// - /// 3919 Mesage on init page - /// - public const uint SystemInitializingMessage = 3919; - /// - /// 3922 - /// - public const uint HelpMessage = 3922; - /// - /// 3923 - /// - public const uint LogoUrl = 3923; - /// - /// 3924 - the text on the "call help desk" button - /// - public const uint HelpPageCallButtonText = 3924; - - /// - /// 3951 - /// - public const uint HeaderButtonIcon1 = 3951; - /// - /// 3952 - /// - public const uint HeaderButtonIcon2 = 3952; - /// - /// 3953 - /// - public const uint HeaderButtonIcon3 = 3953; - /// - /// 3954 - /// - public const uint HeaderButtonIcon4 = 3954; - /// - /// 3955 - /// - public const uint HeaderButtonIcon5 = 3955; - - /// - /// 3961 Name of source on display 1 - /// - public const uint Display1SourceLabel = 3961; - /// - /// 3962 Title above display 1 - /// - public const uint Display1TitleLabel = 3962; - /// - /// 3964 Name of source on display 2 - /// - public const uint Display2SourceLabel = 3964; - /// - /// 3965 Title above display 2 - /// - public const uint Display2TitleLabel = 3965; - - /// - /// 3966 - /// - public const uint NextMeetingStartTimeText = 3966; - /// - /// 3967 - /// - public const uint NextMeetingEndTimeText = 3967; - /// - /// 3968 - /// - public const uint NextMeetingTitleText = 3968; - /// - /// 3969 - /// - public const uint NextMeetingNameText = 3969; - /// - /// 3970 - /// - public const uint NextMeetingButtonLabel = 3970; - /// - /// 3971 - /// - public const uint NextMeetingSecondaryButtonLabel = 3971; - /// - /// 3972 - /// - public const uint NextMeetingFollowingMeetingText = 3972; - /// - /// 3976 - /// - public const uint MeetingsOrContactMethodListIcon = 3976; - /// - /// 3977 - /// - public const uint MeetingsOrContactMethodListTitleText = 3977; - - // ------------------------------------ - // - // MODAL JOINS 3991 - 3999 - // - // ------------------------------------ - } +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 +{ + /// + /// Common string join number constants + /// + public class UIStringJoin + { + //****************************************************** + // Codec + /// + /// 1001 + /// + public const uint CodecAddressEntryText = 1001; + /// + /// 1002 + /// + public const uint CodecDirectorySearchEntryText = 1002; + /// + /// 1004 + /// + public const uint CallSharedSourceNameText = 1004; + + + /// + /// 1201 - 1230 range of joins for recents list + /// + public const uint VCRecentListTextStart = 1201; + // RANGE IN USE + public const uint VCRecentListTextEnd = 1230; + /// + /// 1231 - 1261 range of joins for recent list time + /// + public const uint VCRecentListTimeTextStart = 1231; + // RANGE IN USE + public const uint VCRecentListTimeTextEnd = 1260; + /// + /// 1291 - the current layout mode + /// + public const uint VCLayoutModeText = 1291; + + /// + /// 1301 - 1400 + /// + public const uint VCDirectoryListTextStart = 1301; + // RANGE IN USE + public const uint VCDirectoryListTextEnd = 1556; + + /// + /// 1611 - 1615 + /// + public const uint VCFavoritesStart = 1611; + // RANGE IN USE + public const uint VCFavoritesTextEnd = 1615; + + + //****************************************************** + // Keyboard + /// + /// 1901 + /// + //public const uint KeypadText = 2901; + + //****************************************************** + + // Environment Joins + + /// + /// 2001 - 2010 + /// + public const uint EnvironmentColumnOneLabelBase = 2000; + + /// + /// 2011 - 2020 + /// + public const uint EnvironmentColumnTwoLabelBase = 2010; + + /// + /// 2021 - 2030 + /// + public const uint EnvironmentColumnThreeLabelBase = 2020; + + /// + /// 2031 - 2040 + /// + public const uint EnvironmentColumnFourLabelBase = 2030; + + // 2050, 2060, 2070 and 2080 reserved for column device name labels + + //****************************************************** + + /// + /// 3101 - This is the start of the range 3101 - 3120 + /// + public const uint TechMenuButtonTextStart = 3101; + + //----- through 3120 + + + /// + /// 3812 + /// + public const uint AdvancedVolumeSlider1Text = 3812; + /// + /// 3822 + /// + public const uint AdvancedVolumeSlider2Text = 3822; + /// + /// 3832 + /// + public const uint AdvancedVolumeSlider3Text = 3832; + /// + /// 3842 + /// + public const uint AdvancedVolumeSlider4Text = 3842; + /// + /// 3852 + /// + public const uint AdvancedVolumeSlider5Text = 3852; + /// + /// 3862 + /// + public const uint AdvancedVolumeSlider6Text = 3862; + + /// + /// 3901 + /// + public const uint CurrentRoomName = 3901; + /// + /// 3902 + /// + public const uint CurrentSourceName = 3902; + /// + /// 3903 + /// + public const uint CurrentSourceIcon = 3903; + /// + /// 3904 - Phone number for room header + /// + public const uint RoomPhoneText = 3904; + /// + /// 3906 - The separator for verbose-header text on addresses + /// + public const uint RoomAddressPipeText = 3906; + /// + /// 3907 - The user code for mobile control + /// + public const uint RoomUserCode = 3907; + /// + /// 3911 + /// + public const uint PowerOffMessage = 3911; + /// + /// 3912 + /// + public const uint StartPageMessage = 3912; + /// + /// 3913 + /// + public const uint StartActivityText = 3913; + /// + /// 3914 Title bar label for source overlay + /// + public const uint SourceBackgroundOverlayTitle = 3914; + + /// + /// 3915 + /// + public const uint NotificationRibbonText = 3915; + /// + /// 3916 The "active call" label + /// + public const uint HeaderCallStatusLabel = 3916; + /// + /// 3919 Mesage on init page + /// + public const uint SystemInitializingMessage = 3919; + /// + /// 3922 + /// + public const uint HelpMessage = 3922; + /// + /// 3923 + /// + public const uint LogoUrl = 3923; + /// + /// 3924 - the text on the "call help desk" button + /// + public const uint HelpPageCallButtonText = 3924; + + /// + /// 3951 + /// + public const uint HeaderButtonIcon1 = 3951; + /// + /// 3952 + /// + public const uint HeaderButtonIcon2 = 3952; + /// + /// 3953 + /// + public const uint HeaderButtonIcon3 = 3953; + /// + /// 3954 + /// + public const uint HeaderButtonIcon4 = 3954; + /// + /// 3955 + /// + public const uint HeaderButtonIcon5 = 3955; + + /// + /// 3961 Name of source on display 1 + /// + public const uint Display1SourceLabel = 3961; + /// + /// 3962 Title above display 1 + /// + public const uint Display1TitleLabel = 3962; + /// + /// 3964 Name of source on display 2 + /// + public const uint Display2SourceLabel = 3964; + /// + /// 3965 Title above display 2 + /// + public const uint Display2TitleLabel = 3965; + + /// + /// 3966 + /// + public const uint NextMeetingStartTimeText = 3966; + /// + /// 3967 + /// + public const uint NextMeetingEndTimeText = 3967; + /// + /// 3968 + /// + public const uint NextMeetingTitleText = 3968; + /// + /// 3969 + /// + public const uint NextMeetingNameText = 3969; + /// + /// 3970 + /// + public const uint NextMeetingButtonLabel = 3970; + /// + /// 3971 + /// + public const uint NextMeetingSecondaryButtonLabel = 3971; + /// + /// 3972 + /// + public const uint NextMeetingFollowingMeetingText = 3972; + /// + /// 3976 + /// + public const uint MeetingsOrContactMethodListIcon = 3976; + /// + /// 3977 + /// + public const uint MeetingsOrContactMethodListTitleText = 3977; + + // ------------------------------------ + // + // MODAL JOINS 3991 - 3999 + // + // ------------------------------------ + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/UI/JoinConstants/UIUshortJoin.cs b/PepperDashEssentials/UI/JoinConstants/UIUshortJoin.cs similarity index 100% rename from Essentials/PepperDashEssentials/UI/JoinConstants/UIUshortJoin.cs rename to PepperDashEssentials/UI/JoinConstants/UIUshortJoin.cs diff --git a/Essentials/PepperDashEssentials/UI/SmartObjectHeaderButtonList.cs b/PepperDashEssentials/UI/SmartObjectHeaderButtonList.cs similarity index 100% rename from Essentials/PepperDashEssentials/UI/SmartObjectHeaderButtonList.cs rename to PepperDashEssentials/UI/SmartObjectHeaderButtonList.cs diff --git a/Essentials/PepperDashEssentials/UI/SubpageReferenceListActivityItem.cs b/PepperDashEssentials/UI/SubpageReferenceListActivityItem.cs similarity index 100% rename from Essentials/PepperDashEssentials/UI/SubpageReferenceListActivityItem.cs rename to PepperDashEssentials/UI/SubpageReferenceListActivityItem.cs diff --git a/Essentials/PepperDashEssentials/UI/SubpageReferenceListCallStagingItem.cs b/PepperDashEssentials/UI/SubpageReferenceListCallStagingItem.cs similarity index 100% rename from Essentials/PepperDashEssentials/UI/SubpageReferenceListCallStagingItem.cs rename to PepperDashEssentials/UI/SubpageReferenceListCallStagingItem.cs diff --git a/Essentials/PepperDashEssentials/UI/SubpageReferenceListSourceItem.cs b/PepperDashEssentials/UI/SubpageReferenceListSourceItem.cs similarity index 100% rename from Essentials/PepperDashEssentials/UI/SubpageReferenceListSourceItem.cs rename to PepperDashEssentials/UI/SubpageReferenceListSourceItem.cs diff --git a/Essentials/PepperDashEssentials/UIDrivers/DualDisplayRouting.cs b/PepperDashEssentials/UIDrivers/DualDisplayRouting.cs similarity index 100% rename from Essentials/PepperDashEssentials/UIDrivers/DualDisplayRouting.cs rename to PepperDashEssentials/UIDrivers/DualDisplayRouting.cs diff --git a/Essentials/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsEnvironmentDriver.cs b/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsEnvironmentDriver.cs similarity index 97% rename from Essentials/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsEnvironmentDriver.cs rename to PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsEnvironmentDriver.cs index dc6578ec..bb931ce9 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsEnvironmentDriver.cs +++ b/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsEnvironmentDriver.cs @@ -1,251 +1,251 @@ -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.Config; -using PepperDash.Essentials.Core.Shades; -using PepperDash.Essentials.Core.Lighting; - -namespace PepperDash.Essentials -{ - public class EssentialsEnvironmentDriver : PanelDriverBase - { - /// - /// Do I need this here? - /// - CrestronTouchpanelPropertiesConfig Config; - - /// - /// The list of devices this driver is responsible for controlling - /// - public List Devices { get; private set; } - - /// - /// The parent driver for this - /// - EssentialsPanelMainInterfaceDriver Parent; - - /// - /// The list of sub drivers for the devices - /// - public List DeviceSubDrivers { get; private set; } - - public uint BackgroundSubpageJoin { get; private set; } - - public EssentialsEnvironmentDriver(EssentialsPanelMainInterfaceDriver parent, CrestronTouchpanelPropertiesConfig config) - : base(parent.TriList) - { - Config = config; - Parent = parent; - - Devices = new List(); - DeviceSubDrivers = new List(); - - Parent.AvDriver.PopupInterlock.IsShownFeedback.OutputChange += IsShownFeedback_OutputChange; - - // Calculate the join offests for each device page and assign join actions for each button - } - - void IsShownFeedback_OutputChange(object sender, EventArgs e) - { - // Hide this driver and all sub drivers if popup interlock is not shown - if (Parent.AvDriver.PopupInterlock.IsShownFeedback.BoolValue == false) - { - foreach (var driver in DeviceSubDrivers) - { - driver.Hide(); - } - - base.Hide(); - } - } - - /// - /// Shows this driver and all sub drivers - /// - public override void Show() - { - Parent.AvDriver.PopupInterlock.ShowInterlockedWithToggle(BackgroundSubpageJoin); - - foreach (var driver in DeviceSubDrivers) - { - driver.Show(); - } - - base.Show(); - } - - /// - /// Hides this driver and all sub drivers - /// - public override void Hide() - { - Parent.AvDriver.PopupInterlock.HideAndClear(); - - foreach (var driver in DeviceSubDrivers) - { - driver.Hide(); - } - - base.Hide(); - } - - public override void Toggle() - { - if (IsVisible) - Hide(); - else - Show(); - } - - - /// - /// Reads the device keys from the config and gets the devices by key - /// - public void GetDevicesFromConfig(Room.Config.EssentialsEnvironmentPropertiesConfig EnvironmentPropertiesConfig) - { - if (EnvironmentPropertiesConfig != null) - { - Devices.Clear(); - DeviceSubDrivers.Clear(); - - uint column = 1; - - foreach (var dKey in EnvironmentPropertiesConfig.DeviceKeys) - { - var device = DeviceManager.GetDeviceForKey(dKey); - - if (device != null) - { - // Build the driver - var devicePanelDriver = GetPanelDriverForDevice(device, column); - - // Add new PanelDriverBase SubDriver - if (devicePanelDriver != null) - { - Devices.Add(device); - DeviceSubDrivers.Add(devicePanelDriver); - - Debug.Console(1, "Adding '{0}' to Environment Devices", device.Key); - - column++; - - - // Quit if device count is exceeded - if (column > 4) - break; - } - else - Debug.Console(1, "Unable to build environment driver for device: '{0}'", device.Key); - - } - - } - - SetupEnvironmentUiJoins(); - } - else - { - Debug.Console(1, "Unable to get devices from config. No EnvironmentPropertiesConfig object in room config"); - } - } - - /// - /// Returns the appropriate panel driver for the device - /// - /// - /// - /// - PanelDriverBase GetPanelDriverForDevice(IKeyed device, uint column) - { - PanelDriverBase panelDriver = null; - - uint buttonPressJoinBase = 0; - uint buttonVisibleJoinBase = 0; - uint stringJoinBase = 0; - uint shadeTypeVisibleBase = 0; - uint lightingTypeVisibleBase = 0; - - switch (column) - { - case 1: - { - buttonPressJoinBase = UIBoolJoin.EnvironmentColumnOneButtonPressBase; - buttonVisibleJoinBase = UIBoolJoin.EnvironmentColumnOneButtonVisibleBase; - stringJoinBase = UIStringJoin.EnvironmentColumnOneLabelBase; - shadeTypeVisibleBase = UIBoolJoin.EnvironmentColumnOneShadingTypeVisibleBase; - lightingTypeVisibleBase = UIBoolJoin.EnvironmentColumnOneLightingTypeVisibleBase; - break; - } - case 2: - { - buttonPressJoinBase = UIBoolJoin.EnvironmentColumnTwoButtonPressBase; - buttonVisibleJoinBase = UIBoolJoin.EnvironmentColumnTwoButtonVisibleBase; - stringJoinBase = UIStringJoin.EnvironmentColumnTwoLabelBase; - shadeTypeVisibleBase = UIBoolJoin.EnvironmentColumnTwoShadingTypeVisibleBase; - lightingTypeVisibleBase = UIBoolJoin.EnvironmentColumnTwoLightingTypeVisibleBase; - break; - } - case 3: - { - buttonPressJoinBase = UIBoolJoin.EnvironmentColumnThreeButtonPressBase; - buttonVisibleJoinBase = UIBoolJoin.EnvironmentColumnThreeButtonVisibleBase; - stringJoinBase = UIStringJoin.EnvironmentColumnThreeLabelBase; - shadeTypeVisibleBase = UIBoolJoin.EnvironmentColumnThreeShadingTypeVisibleBase; - lightingTypeVisibleBase = UIBoolJoin.EnvironmentColumnThreeLightingTypeVisibleBase; - break; - } - case 4: - { - buttonPressJoinBase = UIBoolJoin.EnvironmentColumnFourButtonPressBase; - buttonVisibleJoinBase = UIBoolJoin.EnvironmentColumnFourButtonVisibleBase; - stringJoinBase = UIStringJoin.EnvironmentColumnFourLabelBase; - shadeTypeVisibleBase = UIBoolJoin.EnvironmentColumnFourShadingTypeVisibleBase; - lightingTypeVisibleBase = UIBoolJoin.EnvironmentColumnFourLightingTypeVisibleBase; - break; - } - default: - { - Debug.Console(1, "Environment Driver: Invalid column number specified"); - break; - } - } - - // Determine if device is a shade or lighting type and construct the appropriate driver - if (device is ShadeBase) - { - panelDriver = new EssentialsShadeDriver(this, device.Key, buttonPressJoinBase, stringJoinBase, shadeTypeVisibleBase); - } - else if (device is LightingBase) - { - panelDriver = new EssentialsLightingDriver(this, device.Key, buttonPressJoinBase, buttonVisibleJoinBase, stringJoinBase, lightingTypeVisibleBase); - } - - // Return the driver - - return panelDriver; - } - - /// - /// Determines the join values for the generic environment subpages - /// - void SetupEnvironmentUiJoins() - { - // Calculate which background subpage join to use - BackgroundSubpageJoin = UIBoolJoin.EnvironmentBackgroundSubpageVisibleBase + (uint)DeviceSubDrivers.Count; - - - } - - } - - public interface IEnvironmentSubdriver - { - uint SubpageVisibleJoin { get; } - } - +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.Config; +using PepperDash.Essentials.Core.Shades; +using PepperDash.Essentials.Core.Lighting; + +namespace PepperDash.Essentials +{ + public class EssentialsEnvironmentDriver : PanelDriverBase + { + /// + /// Do I need this here? + /// + CrestronTouchpanelPropertiesConfig Config; + + /// + /// The list of devices this driver is responsible for controlling + /// + public List Devices { get; private set; } + + /// + /// The parent driver for this + /// + EssentialsPanelMainInterfaceDriver Parent; + + /// + /// The list of sub drivers for the devices + /// + public List DeviceSubDrivers { get; private set; } + + public uint BackgroundSubpageJoin { get; private set; } + + public EssentialsEnvironmentDriver(EssentialsPanelMainInterfaceDriver parent, CrestronTouchpanelPropertiesConfig config) + : base(parent.TriList) + { + Config = config; + Parent = parent; + + Devices = new List(); + DeviceSubDrivers = new List(); + + Parent.AvDriver.PopupInterlock.IsShownFeedback.OutputChange += IsShownFeedback_OutputChange; + + // Calculate the join offests for each device page and assign join actions for each button + } + + void IsShownFeedback_OutputChange(object sender, EventArgs e) + { + // Hide this driver and all sub drivers if popup interlock is not shown + if (Parent.AvDriver.PopupInterlock.IsShownFeedback.BoolValue == false) + { + foreach (var driver in DeviceSubDrivers) + { + driver.Hide(); + } + + base.Hide(); + } + } + + /// + /// Shows this driver and all sub drivers + /// + public override void Show() + { + Parent.AvDriver.PopupInterlock.ShowInterlockedWithToggle(BackgroundSubpageJoin); + + foreach (var driver in DeviceSubDrivers) + { + driver.Show(); + } + + base.Show(); + } + + /// + /// Hides this driver and all sub drivers + /// + public override void Hide() + { + Parent.AvDriver.PopupInterlock.HideAndClear(); + + foreach (var driver in DeviceSubDrivers) + { + driver.Hide(); + } + + base.Hide(); + } + + public override void Toggle() + { + if (IsVisible) + Hide(); + else + Show(); + } + + + /// + /// Reads the device keys from the config and gets the devices by key + /// + public void GetDevicesFromConfig(Room.Config.EssentialsEnvironmentPropertiesConfig EnvironmentPropertiesConfig) + { + if (EnvironmentPropertiesConfig != null) + { + Devices.Clear(); + DeviceSubDrivers.Clear(); + + uint column = 1; + + foreach (var dKey in EnvironmentPropertiesConfig.DeviceKeys) + { + var device = DeviceManager.GetDeviceForKey(dKey); + + if (device != null) + { + // Build the driver + var devicePanelDriver = GetPanelDriverForDevice(device, column); + + // Add new PanelDriverBase SubDriver + if (devicePanelDriver != null) + { + Devices.Add(device); + DeviceSubDrivers.Add(devicePanelDriver); + + Debug.Console(1, "Adding '{0}' to Environment Devices", device.Key); + + column++; + + + // Quit if device count is exceeded + if (column > 4) + break; + } + else + Debug.Console(1, "Unable to build environment driver for device: '{0}'", device.Key); + + } + + } + + SetupEnvironmentUiJoins(); + } + else + { + Debug.Console(1, "Unable to get devices from config. No EnvironmentPropertiesConfig object in room config"); + } + } + + /// + /// Returns the appropriate panel driver for the device + /// + /// + /// + /// + PanelDriverBase GetPanelDriverForDevice(IKeyed device, uint column) + { + PanelDriverBase panelDriver = null; + + uint buttonPressJoinBase = 0; + uint buttonVisibleJoinBase = 0; + uint stringJoinBase = 0; + uint shadeTypeVisibleBase = 0; + uint lightingTypeVisibleBase = 0; + + switch (column) + { + case 1: + { + buttonPressJoinBase = UIBoolJoin.EnvironmentColumnOneButtonPressBase; + buttonVisibleJoinBase = UIBoolJoin.EnvironmentColumnOneButtonVisibleBase; + stringJoinBase = UIStringJoin.EnvironmentColumnOneLabelBase; + shadeTypeVisibleBase = UIBoolJoin.EnvironmentColumnOneShadingTypeVisibleBase; + lightingTypeVisibleBase = UIBoolJoin.EnvironmentColumnOneLightingTypeVisibleBase; + break; + } + case 2: + { + buttonPressJoinBase = UIBoolJoin.EnvironmentColumnTwoButtonPressBase; + buttonVisibleJoinBase = UIBoolJoin.EnvironmentColumnTwoButtonVisibleBase; + stringJoinBase = UIStringJoin.EnvironmentColumnTwoLabelBase; + shadeTypeVisibleBase = UIBoolJoin.EnvironmentColumnTwoShadingTypeVisibleBase; + lightingTypeVisibleBase = UIBoolJoin.EnvironmentColumnTwoLightingTypeVisibleBase; + break; + } + case 3: + { + buttonPressJoinBase = UIBoolJoin.EnvironmentColumnThreeButtonPressBase; + buttonVisibleJoinBase = UIBoolJoin.EnvironmentColumnThreeButtonVisibleBase; + stringJoinBase = UIStringJoin.EnvironmentColumnThreeLabelBase; + shadeTypeVisibleBase = UIBoolJoin.EnvironmentColumnThreeShadingTypeVisibleBase; + lightingTypeVisibleBase = UIBoolJoin.EnvironmentColumnThreeLightingTypeVisibleBase; + break; + } + case 4: + { + buttonPressJoinBase = UIBoolJoin.EnvironmentColumnFourButtonPressBase; + buttonVisibleJoinBase = UIBoolJoin.EnvironmentColumnFourButtonVisibleBase; + stringJoinBase = UIStringJoin.EnvironmentColumnFourLabelBase; + shadeTypeVisibleBase = UIBoolJoin.EnvironmentColumnFourShadingTypeVisibleBase; + lightingTypeVisibleBase = UIBoolJoin.EnvironmentColumnFourLightingTypeVisibleBase; + break; + } + default: + { + Debug.Console(1, "Environment Driver: Invalid column number specified"); + break; + } + } + + // Determine if device is a shade or lighting type and construct the appropriate driver + if (device is ShadeBase) + { + panelDriver = new EssentialsShadeDriver(this, device.Key, buttonPressJoinBase, stringJoinBase, shadeTypeVisibleBase); + } + else if (device is LightingBase) + { + panelDriver = new EssentialsLightingDriver(this, device.Key, buttonPressJoinBase, buttonVisibleJoinBase, stringJoinBase, lightingTypeVisibleBase); + } + + // Return the driver + + return panelDriver; + } + + /// + /// Determines the join values for the generic environment subpages + /// + void SetupEnvironmentUiJoins() + { + // Calculate which background subpage join to use + BackgroundSubpageJoin = UIBoolJoin.EnvironmentBackgroundSubpageVisibleBase + (uint)DeviceSubDrivers.Count; + + + } + + } + + public interface IEnvironmentSubdriver + { + uint SubpageVisibleJoin { get; } + } + } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsLightingDriver.cs b/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsLightingDriver.cs similarity index 96% rename from Essentials/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsLightingDriver.cs rename to PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsLightingDriver.cs index 0d8e438a..5ec46a04 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsLightingDriver.cs +++ b/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsLightingDriver.cs @@ -1,210 +1,210 @@ -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.Config; -using PepperDash.Essentials.Core.Lighting; - -namespace PepperDash.Essentials -{ - /// - /// Supports a lighting device with up to 6 scenes - /// - public class EssentialsLightingDriver : PanelDriverBase, IEnvironmentSubdriver - { - EssentialsEnvironmentDriver Parent; - - public LightingBase LightingDevice { get; private set; } - - public uint SubpageVisibleJoin { get; private set; } - - /// - /// The base join number that all button visibilty joins are offset from - /// - uint ButtonVisibleJoinBase; - - /// - /// The base join number that all button presses are offset from - /// - uint ButtonPressJoinBase; - - /// - /// The base join number that all string lables are offset from - /// - uint StringJoinBase; - - eLightsDeviceType DeviceType; - - const uint DeviceNameJoinOffset = 50; - - public EssentialsLightingDriver(EssentialsEnvironmentDriver parent, string deviceKey, uint buttonPressJoinBase, uint buttonVisibleJoinBase, uint stringJoinBase, uint subpageVisibleBase) - : base(parent.TriList) - { - Parent = parent; - - ButtonPressJoinBase = buttonPressJoinBase; - ButtonVisibleJoinBase = buttonVisibleJoinBase; - StringJoinBase = stringJoinBase; - - LightingDevice = DeviceManager.GetDeviceForKey(deviceKey) as LightingBase; - - //LightingDevice.LightingSceneChange += new EventHandler(LightingDevice_LightingSceneChange); - - SetDeviceType(); - - SetSubpageVisibleJoin(subpageVisibleBase); - - SetUpDeviceName(); - - SetUpButtonActions(); - } - - /// - /// Handles setting feedback for the currently selected scene button - /// - /// - /// - void LightingDevice_LightingSceneChange(object sender, LightingSceneChangeEventArgs e) - { - uint joinOffset = 1; - - foreach (var scene in LightingDevice.LightingScenes) - { - if (scene == e.CurrentLightingScene) - TriList.SetBool(ButtonPressJoinBase + joinOffset, true); - else - TriList.SetBool(ButtonPressJoinBase + joinOffset, false); - } - } - - public override void Show() - { - TriList.SetBool(SubpageVisibleJoin, true); - - base.Show(); - } - - public override void Hide() - { - TriList.SetBool(SubpageVisibleJoin, false); - - base.Hide(); - } - - void SetUpDeviceName() - { - Parent.TriList.SetString(StringJoinBase + DeviceNameJoinOffset, LightingDevice.Name); - } - - void SetDeviceType() - { - if (LightingDevice is ILightingScenes) - DeviceType = eLightsDeviceType.Scenes; - } - - void SetSubpageVisibleJoin(uint subpageVisibleBase) - { - SubpageVisibleJoin = subpageVisibleBase + (uint)DeviceType; - } - - /// - /// Drase - /// - void SetUpButtonActions() - { - if (DeviceType == eLightsDeviceType.Scenes) - { - uint joinOffset = ComputeJoinOffset(); - - // Clear preceding buttons - for (uint i = 1; i < joinOffset; i++) - { - TriList.SetString(StringJoinBase + i, ""); - TriList.SetSigFalseAction(ButtonPressJoinBase + i, () => { }); - TriList.SetBool(ButtonVisibleJoinBase + i, false); - } - - foreach (var scene in LightingDevice.LightingScenes) - { - TriList.SetString(StringJoinBase + joinOffset, scene.Name); - var tempScene = scene; - TriList.SetSigFalseAction(ButtonPressJoinBase + joinOffset, () => LightingDevice.SelectScene(tempScene)); - scene.IsActiveFeedback.LinkInputSig(TriList.BooleanInput[ButtonPressJoinBase + joinOffset]); - TriList.SetBool(ButtonVisibleJoinBase + joinOffset, true); - - joinOffset++; - } - - // Clear following buttons - for (uint i = joinOffset; i <= 6; i++) - { - TriList.SetString(StringJoinBase + i, ""); - TriList.SetSigFalseAction(ButtonPressJoinBase + i, () => { }); - TriList.SetBool(ButtonVisibleJoinBase + i, false); - } - } - - } - - - - /// - /// Computes the desired join offset to try to achieve the most centered appearance when using a subpage with 6 scene buttons - /// - /// - uint ComputeJoinOffset() - { - uint joinOffset = 0; - - switch (LightingDevice.LightingScenes.Count) - { - case 1: - { - joinOffset = 2; - break; - } - case 2: - { - joinOffset = 3; - break; - } - case 3: - { - joinOffset = 2; - break; - } - case 4: - { - joinOffset = 2; - break; - } - case 5: - { - joinOffset = 2; - break; - } - case 6: - { - joinOffset = 1; - break; - } - default: - { - break; - } - } - - return joinOffset; - } - } - - enum eLightsDeviceType : uint - { - None = 0, - Scenes = 1, - } +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.Config; +using PepperDash.Essentials.Core.Lighting; + +namespace PepperDash.Essentials +{ + /// + /// Supports a lighting device with up to 6 scenes + /// + public class EssentialsLightingDriver : PanelDriverBase, IEnvironmentSubdriver + { + EssentialsEnvironmentDriver Parent; + + public LightingBase LightingDevice { get; private set; } + + public uint SubpageVisibleJoin { get; private set; } + + /// + /// The base join number that all button visibilty joins are offset from + /// + uint ButtonVisibleJoinBase; + + /// + /// The base join number that all button presses are offset from + /// + uint ButtonPressJoinBase; + + /// + /// The base join number that all string lables are offset from + /// + uint StringJoinBase; + + eLightsDeviceType DeviceType; + + const uint DeviceNameJoinOffset = 50; + + public EssentialsLightingDriver(EssentialsEnvironmentDriver parent, string deviceKey, uint buttonPressJoinBase, uint buttonVisibleJoinBase, uint stringJoinBase, uint subpageVisibleBase) + : base(parent.TriList) + { + Parent = parent; + + ButtonPressJoinBase = buttonPressJoinBase; + ButtonVisibleJoinBase = buttonVisibleJoinBase; + StringJoinBase = stringJoinBase; + + LightingDevice = DeviceManager.GetDeviceForKey(deviceKey) as LightingBase; + + //LightingDevice.LightingSceneChange += new EventHandler(LightingDevice_LightingSceneChange); + + SetDeviceType(); + + SetSubpageVisibleJoin(subpageVisibleBase); + + SetUpDeviceName(); + + SetUpButtonActions(); + } + + /// + /// Handles setting feedback for the currently selected scene button + /// + /// + /// + void LightingDevice_LightingSceneChange(object sender, LightingSceneChangeEventArgs e) + { + uint joinOffset = 1; + + foreach (var scene in LightingDevice.LightingScenes) + { + if (scene == e.CurrentLightingScene) + TriList.SetBool(ButtonPressJoinBase + joinOffset, true); + else + TriList.SetBool(ButtonPressJoinBase + joinOffset, false); + } + } + + public override void Show() + { + TriList.SetBool(SubpageVisibleJoin, true); + + base.Show(); + } + + public override void Hide() + { + TriList.SetBool(SubpageVisibleJoin, false); + + base.Hide(); + } + + void SetUpDeviceName() + { + Parent.TriList.SetString(StringJoinBase + DeviceNameJoinOffset, LightingDevice.Name); + } + + void SetDeviceType() + { + if (LightingDevice is ILightingScenes) + DeviceType = eLightsDeviceType.Scenes; + } + + void SetSubpageVisibleJoin(uint subpageVisibleBase) + { + SubpageVisibleJoin = subpageVisibleBase + (uint)DeviceType; + } + + /// + /// Drase + /// + void SetUpButtonActions() + { + if (DeviceType == eLightsDeviceType.Scenes) + { + uint joinOffset = ComputeJoinOffset(); + + // Clear preceding buttons + for (uint i = 1; i < joinOffset; i++) + { + TriList.SetString(StringJoinBase + i, ""); + TriList.SetSigFalseAction(ButtonPressJoinBase + i, () => { }); + TriList.SetBool(ButtonVisibleJoinBase + i, false); + } + + foreach (var scene in LightingDevice.LightingScenes) + { + TriList.SetString(StringJoinBase + joinOffset, scene.Name); + var tempScene = scene; + TriList.SetSigFalseAction(ButtonPressJoinBase + joinOffset, () => LightingDevice.SelectScene(tempScene)); + scene.IsActiveFeedback.LinkInputSig(TriList.BooleanInput[ButtonPressJoinBase + joinOffset]); + TriList.SetBool(ButtonVisibleJoinBase + joinOffset, true); + + joinOffset++; + } + + // Clear following buttons + for (uint i = joinOffset; i <= 6; i++) + { + TriList.SetString(StringJoinBase + i, ""); + TriList.SetSigFalseAction(ButtonPressJoinBase + i, () => { }); + TriList.SetBool(ButtonVisibleJoinBase + i, false); + } + } + + } + + + + /// + /// Computes the desired join offset to try to achieve the most centered appearance when using a subpage with 6 scene buttons + /// + /// + uint ComputeJoinOffset() + { + uint joinOffset = 0; + + switch (LightingDevice.LightingScenes.Count) + { + case 1: + { + joinOffset = 2; + break; + } + case 2: + { + joinOffset = 3; + break; + } + case 3: + { + joinOffset = 2; + break; + } + case 4: + { + joinOffset = 2; + break; + } + case 5: + { + joinOffset = 2; + break; + } + case 6: + { + joinOffset = 1; + break; + } + default: + { + break; + } + } + + return joinOffset; + } + } + + enum eLightsDeviceType : uint + { + None = 0, + Scenes = 1, + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsShadeDriver.cs b/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsShadeDriver.cs similarity index 96% rename from Essentials/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsShadeDriver.cs rename to PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsShadeDriver.cs index 41f9be6a..b62e047c 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsShadeDriver.cs +++ b/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsShadeDriver.cs @@ -1,117 +1,117 @@ -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.Config; -using PepperDash.Essentials.Core.Shades; -using PepperDash.Essentials.Devices.Common.Environment.Somfy; - -namespace PepperDash.Essentials -{ - public class EssentialsShadeDriver : PanelDriverBase, IEnvironmentSubdriver - { - EssentialsEnvironmentDriver Parent; - - public ShadeBase ShadeDevice { get; private set; } - - public uint SubpageVisibleJoin { get; private set; } - - /// - /// The base join number that all button presses are offset from - /// - uint ButtonPressJoinBase; - - /// - /// The base join number that all string lables are offset from - /// - uint StringJoinBase; - - eShadeDeviceType DeviceType; - - const uint DeviceNameJoinOffset = 50; - - public EssentialsShadeDriver(EssentialsEnvironmentDriver parent, string deviceKey, uint buttonPressJoinBase, uint stringJoinBase, uint subpageVisibleBase) - : base(parent.TriList) - { - Parent = parent; - - ButtonPressJoinBase = buttonPressJoinBase; - StringJoinBase = stringJoinBase; - - ShadeDevice = DeviceManager.GetDeviceForKey(deviceKey) as ShadeBase; - - SetDeviceType(); - - SetSubpageVisibleJoin(subpageVisibleBase); - - SetUpDeviceName(); - - SetUpButtonActions(); - } - - public override void Show() - { - TriList.SetBool(SubpageVisibleJoin, true); - - base.Show(); - } - - public override void Hide() - { - TriList.SetBool(SubpageVisibleJoin, false); - - base.Hide(); - } - - void SetUpDeviceName() - { - Parent.TriList.SetString(StringJoinBase + DeviceNameJoinOffset, ShadeDevice.Name); - } - - void SetDeviceType() - { - if (ShadeDevice is IShadesOpenCloseStop) - DeviceType = eShadeDeviceType.OpenCloseStop; - else if (ShadeDevice is IShadesOpenClose) - DeviceType = eShadeDeviceType.OpenClose; - } - - void SetSubpageVisibleJoin(uint subpageVisibleBase) - { - SubpageVisibleJoin = subpageVisibleBase + (uint)DeviceType; - } - - void SetUpButtonActions() - { - if(DeviceType == eShadeDeviceType.OpenClose) - { - TriList.SetSigTrueAction(ButtonPressJoinBase + 1, ShadeDevice.Open); - - TriList.SetSigFalseAction(ButtonPressJoinBase + 2, ShadeDevice.Close); - } - else if(DeviceType == eShadeDeviceType.OpenCloseStop) - { - TriList.SetSigFalseAction(ButtonPressJoinBase + 1, ShadeDevice.Open); - - TriList.SetSigFalseAction(ButtonPressJoinBase + 2, (ShadeDevice as IShadesOpenCloseStop).StopOrPreset); - - if(ShadeDevice is RelayControlledShade) - TriList.SetString(StringJoinBase + 2, (ShadeDevice as RelayControlledShade).StopOrPresetButtonLabel); - - TriList.SetSigFalseAction(ButtonPressJoinBase + 3, ShadeDevice.Close); - } - } - } - - enum eShadeDeviceType : uint - { - None = 0, - OpenCloseStop = 1, - OpenClose = 2, - DiscreteLevel = 3 - } +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.Config; +using PepperDash.Essentials.Core.Shades; +using PepperDash.Essentials.Devices.Common.Environment.Somfy; + +namespace PepperDash.Essentials +{ + public class EssentialsShadeDriver : PanelDriverBase, IEnvironmentSubdriver + { + EssentialsEnvironmentDriver Parent; + + public ShadeBase ShadeDevice { get; private set; } + + public uint SubpageVisibleJoin { get; private set; } + + /// + /// The base join number that all button presses are offset from + /// + uint ButtonPressJoinBase; + + /// + /// The base join number that all string lables are offset from + /// + uint StringJoinBase; + + eShadeDeviceType DeviceType; + + const uint DeviceNameJoinOffset = 50; + + public EssentialsShadeDriver(EssentialsEnvironmentDriver parent, string deviceKey, uint buttonPressJoinBase, uint stringJoinBase, uint subpageVisibleBase) + : base(parent.TriList) + { + Parent = parent; + + ButtonPressJoinBase = buttonPressJoinBase; + StringJoinBase = stringJoinBase; + + ShadeDevice = DeviceManager.GetDeviceForKey(deviceKey) as ShadeBase; + + SetDeviceType(); + + SetSubpageVisibleJoin(subpageVisibleBase); + + SetUpDeviceName(); + + SetUpButtonActions(); + } + + public override void Show() + { + TriList.SetBool(SubpageVisibleJoin, true); + + base.Show(); + } + + public override void Hide() + { + TriList.SetBool(SubpageVisibleJoin, false); + + base.Hide(); + } + + void SetUpDeviceName() + { + Parent.TriList.SetString(StringJoinBase + DeviceNameJoinOffset, ShadeDevice.Name); + } + + void SetDeviceType() + { + if (ShadeDevice is IShadesOpenCloseStop) + DeviceType = eShadeDeviceType.OpenCloseStop; + else if (ShadeDevice is IShadesOpenClose) + DeviceType = eShadeDeviceType.OpenClose; + } + + void SetSubpageVisibleJoin(uint subpageVisibleBase) + { + SubpageVisibleJoin = subpageVisibleBase + (uint)DeviceType; + } + + void SetUpButtonActions() + { + if(DeviceType == eShadeDeviceType.OpenClose) + { + TriList.SetSigTrueAction(ButtonPressJoinBase + 1, ShadeDevice.Open); + + TriList.SetSigFalseAction(ButtonPressJoinBase + 2, ShadeDevice.Close); + } + else if(DeviceType == eShadeDeviceType.OpenCloseStop) + { + TriList.SetSigFalseAction(ButtonPressJoinBase + 1, ShadeDevice.Open); + + TriList.SetSigFalseAction(ButtonPressJoinBase + 2, (ShadeDevice as IShadesOpenCloseStop).StopOrPreset); + + if(ShadeDevice is RelayControlledShade) + TriList.SetString(StringJoinBase + 2, (ShadeDevice as RelayControlledShade).StopOrPresetButtonLabel); + + TriList.SetSigFalseAction(ButtonPressJoinBase + 3, ShadeDevice.Close); + } + } + } + + enum eShadeDeviceType : uint + { + None = 0, + OpenCloseStop = 1, + OpenClose = 2, + DiscreteLevel = 3 + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHeaderDriver.cs b/PepperDashEssentials/UIDrivers/Essentials/EssentialsHeaderDriver.cs similarity index 97% rename from Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHeaderDriver.cs rename to PepperDashEssentials/UIDrivers/Essentials/EssentialsHeaderDriver.cs index 29766cc8..4be934bb 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHeaderDriver.cs +++ b/PepperDashEssentials/UIDrivers/Essentials/EssentialsHeaderDriver.cs @@ -1,266 +1,266 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; -using Crestron.SimplSharpPro.UI; -using Crestron.SimplSharpPro.DeviceSupport; - - -using PepperDash.Core; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.SmartObjects; -using PepperDash.Essentials.Core.PageManagers; -using PepperDash.Essentials.Room.Config; -using PepperDash.Essentials.Devices.Common.Codec; -using PepperDash.Essentials.Devices.Common.VideoCodec; - - -namespace PepperDash.Essentials -{ - /// - /// - /// - public class EssentialsHeaderDriver : PanelDriverBase - { - CrestronTouchpanelPropertiesConfig Config; - - /// - /// The parent driver for this - /// - EssentialsPanelMainInterfaceDriver Parent; - - /// - /// Indicates that the SetHeaderButtons method has completed successfully - /// - public bool HeaderButtonsAreSetUp { get; private set; } - - StringInputSig HeaderCallButtonIconSig; - - public EssentialsHeaderDriver(EssentialsPanelMainInterfaceDriver parent, CrestronTouchpanelPropertiesConfig config) - : base(parent.TriList) - { - Config = config; - Parent = parent; - } - - void SetUpGear(IAVDriver avDriver, EssentialsRoomBase currentRoom) - { - // Gear - TriList.SetString(UIStringJoin.HeaderButtonIcon5, "Gear"); - TriList.SetSigHeldAction(UIBoolJoin.HeaderIcon5Press, 2000, - avDriver.ShowTech, - null, - () => - { - if (currentRoom.OnFeedback.BoolValue) - avDriver.PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.VolumesPageVisible); - else - avDriver.PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.VolumesPagePowerOffVisible); - }); - TriList.SetSigFalseAction(UIBoolJoin.TechExitButton, () => - avDriver.PopupInterlock.HideAndClear()); - } - - void SetUpHelpButton(EssentialsRoomPropertiesConfig roomConf) - { - // Help roomConf and popup - if (roomConf.Help != null) - { - TriList.SetString(UIStringJoin.HelpMessage, roomConf.Help.Message); - TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, roomConf.Help.ShowCallButton); - TriList.SetString(UIStringJoin.HelpPageCallButtonText, roomConf.Help.CallButtonText); - if (roomConf.Help.ShowCallButton) - TriList.SetSigFalseAction(UIBoolJoin.HelpPageShowCallButtonPress, () => { }); // ************ FILL IN - else - TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress); - } - else // older config - { - TriList.SetString(UIStringJoin.HelpMessage, roomConf.HelpMessage); - TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, false); - TriList.SetString(UIStringJoin.HelpPageCallButtonText, null); - TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress); - } - TriList.SetString(UIStringJoin.HeaderButtonIcon4, "Help"); - TriList.SetSigFalseAction(UIBoolJoin.HeaderIcon4Press, () => - { - string message = null; - var room = DeviceManager.GetDeviceForKey(Config.DefaultRoomKey) - as EssentialsHuddleSpaceRoom; - if (room != null) - message = room.Config.HelpMessage; - else - message = "Sorry, no help message available. No room connected."; - //TriList.StringInput[UIStringJoin.HelpMessage].StringValue = message; - Parent.AvDriver.PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HelpPageVisible); - }); - } - - uint SetUpEnvironmentButton(EssentialsEnvironmentDriver environmentDriver, uint nextJoin) - { - if (environmentDriver != null) - { - TriList.SetString(nextJoin, "Lights"); - TriList.SetSigFalseAction(nextJoin, environmentDriver.Toggle); - nextJoin--; - return nextJoin; - } - else - return nextJoin; - } - - uint SetUpCalendarButton(EssentialsHuddleVtc1PanelAvFunctionsDriver avDriver, uint nextJoin) - { - // Calendar button - if (avDriver.CurrentRoom.ScheduleSource != null) - { - TriList.SetString(nextJoin, "Calendar"); - TriList.SetSigFalseAction(nextJoin, avDriver.CalendarPress); - - nextJoin--; - return nextJoin; - } - else - return nextJoin; - } - - uint SetUpCallButton(EssentialsHuddleVtc1PanelAvFunctionsDriver avDriver, uint nextJoin) - { - // Call button - TriList.SetString(nextJoin, "DND"); - TriList.SetSigFalseAction(nextJoin, avDriver.ShowActiveCallsList); - HeaderCallButtonIconSig = TriList.StringInput[nextJoin]; - - nextJoin--; - return nextJoin; - } - - /// - /// Evaluates the call status and sets the icon mode and text label - /// - public void ComputeHeaderCallStatus(VideoCodecBase codec) - { - if (codec == null) - { - Debug.Console(1, "ComputeHeaderCallStatus() cannot execute. codec is null"); - return; - } - - if (HeaderCallButtonIconSig == null) - { - Debug.Console(1, "ComputeHeaderCallStatus() cannot execute. HeaderCallButtonIconSig is null"); - return; - } - - // Set mode of header button - if (!codec.IsInCall) - { - HeaderCallButtonIconSig.StringValue = "DND"; - //HeaderCallButton.SetIcon(HeaderListButton.OnHook); - } - else if (codec.ActiveCalls.Any(c => c.Type == eCodecCallType.Video)) - HeaderCallButtonIconSig.StringValue = "Misc-06_Dark"; - //HeaderCallButton.SetIcon(HeaderListButton.Camera); - //TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 2); - else - HeaderCallButtonIconSig.StringValue = "Misc-09_Dark"; - //HeaderCallButton.SetIcon(HeaderListButton.Phone); - //TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 1); - - // Set the call status text - if (codec.ActiveCalls.Count > 0) - { - if (codec.ActiveCalls.Count == 1) - TriList.SetString(UIStringJoin.HeaderCallStatusLabel, "1 Active Call"); - else if (codec.ActiveCalls.Count > 1) - TriList.SetString(UIStringJoin.HeaderCallStatusLabel, string.Format("{0} Active Calls", codec.ActiveCalls.Count)); - } - else - TriList.SetString(UIStringJoin.HeaderCallStatusLabel, "No Active Calls"); - } - - /// - /// Sets up Header Buttons for the EssentialsHuddleVtc1Room type - /// - public void SetupHeaderButtons(EssentialsHuddleVtc1PanelAvFunctionsDriver avDriver, EssentialsHuddleVtc1Room currentRoom) - { - HeaderButtonsAreSetUp = false; - - TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, true); - - var roomConf = currentRoom.Config; - - SetUpGear(avDriver, currentRoom); - - SetUpHelpButton(roomConf); - - uint nextJoin = 3953; - - nextJoin = SetUpEnvironmentButton(Parent.EnvironmentDriver, nextJoin); - - nextJoin = SetUpCalendarButton(avDriver, nextJoin); - - nextJoin = SetUpCallButton(avDriver, nextJoin); - - // blank any that remain - for (var i = nextJoin; i > 3950; i--) - { - TriList.SetString(i, "Blank"); - TriList.SetSigFalseAction(i, () => { }); - } - - TriList.SetSigFalseAction(UIBoolJoin.HeaderCallStatusLabelPress, avDriver.ShowActiveCallsList); - - // Set Call Status Subpage Position - - if (nextJoin == 3951) - { - // Set to right position - TriList.SetBool(UIBoolJoin.HeaderCallStatusLeftPositionVisible, false); - TriList.SetBool(UIBoolJoin.HeaderCallStatusRightPositionVisible, true); - } - else if (nextJoin == 3950) - { - // Set to left position - TriList.SetBool(UIBoolJoin.HeaderCallStatusLeftPositionVisible, true); - TriList.SetBool(UIBoolJoin.HeaderCallStatusRightPositionVisible, false); - } - - HeaderButtonsAreSetUp = true; - - ComputeHeaderCallStatus(currentRoom.VideoCodec); - } - - /// - /// Sets up Header Buttons for the EssentialsHuddleSpaceRoom type - /// - public void SetupHeaderButtons(EssentialsHuddlePanelAvFunctionsDriver avDriver, EssentialsHuddleSpaceRoom currentRoom) - { - HeaderButtonsAreSetUp = false; - - TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, true); - - var roomConf = currentRoom.Config; - - SetUpGear(avDriver, currentRoom); - - SetUpHelpButton(roomConf); - - uint nextJoin = 3953; - - nextJoin = SetUpEnvironmentButton(Parent.EnvironmentDriver, nextJoin); - - // blank any that remain - for (var i = nextJoin; i > 3950; i--) - { - TriList.SetString(i, "Blank"); - TriList.SetSigFalseAction(i, () => { }); - } - - HeaderButtonsAreSetUp = true; - } - - } +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.UI; +using Crestron.SimplSharpPro.DeviceSupport; + + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.SmartObjects; +using PepperDash.Essentials.Core.PageManagers; +using PepperDash.Essentials.Room.Config; +using PepperDash.Essentials.Devices.Common.Codec; +using PepperDash.Essentials.Devices.Common.VideoCodec; + + +namespace PepperDash.Essentials +{ + /// + /// + /// + public class EssentialsHeaderDriver : PanelDriverBase + { + CrestronTouchpanelPropertiesConfig Config; + + /// + /// The parent driver for this + /// + EssentialsPanelMainInterfaceDriver Parent; + + /// + /// Indicates that the SetHeaderButtons method has completed successfully + /// + public bool HeaderButtonsAreSetUp { get; private set; } + + StringInputSig HeaderCallButtonIconSig; + + public EssentialsHeaderDriver(EssentialsPanelMainInterfaceDriver parent, CrestronTouchpanelPropertiesConfig config) + : base(parent.TriList) + { + Config = config; + Parent = parent; + } + + void SetUpGear(IAVDriver avDriver, EssentialsRoomBase currentRoom) + { + // Gear + TriList.SetString(UIStringJoin.HeaderButtonIcon5, "Gear"); + TriList.SetSigHeldAction(UIBoolJoin.HeaderIcon5Press, 2000, + avDriver.ShowTech, + null, + () => + { + if (currentRoom.OnFeedback.BoolValue) + avDriver.PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.VolumesPageVisible); + else + avDriver.PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.VolumesPagePowerOffVisible); + }); + TriList.SetSigFalseAction(UIBoolJoin.TechExitButton, () => + avDriver.PopupInterlock.HideAndClear()); + } + + void SetUpHelpButton(EssentialsRoomPropertiesConfig roomConf) + { + // Help roomConf and popup + if (roomConf.Help != null) + { + TriList.SetString(UIStringJoin.HelpMessage, roomConf.Help.Message); + TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, roomConf.Help.ShowCallButton); + TriList.SetString(UIStringJoin.HelpPageCallButtonText, roomConf.Help.CallButtonText); + if (roomConf.Help.ShowCallButton) + TriList.SetSigFalseAction(UIBoolJoin.HelpPageShowCallButtonPress, () => { }); // ************ FILL IN + else + TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress); + } + else // older config + { + TriList.SetString(UIStringJoin.HelpMessage, roomConf.HelpMessage); + TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, false); + TriList.SetString(UIStringJoin.HelpPageCallButtonText, null); + TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress); + } + TriList.SetString(UIStringJoin.HeaderButtonIcon4, "Help"); + TriList.SetSigFalseAction(UIBoolJoin.HeaderIcon4Press, () => + { + string message = null; + var room = DeviceManager.GetDeviceForKey(Config.DefaultRoomKey) + as EssentialsHuddleSpaceRoom; + if (room != null) + message = room.Config.HelpMessage; + else + message = "Sorry, no help message available. No room connected."; + //TriList.StringInput[UIStringJoin.HelpMessage].StringValue = message; + Parent.AvDriver.PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HelpPageVisible); + }); + } + + uint SetUpEnvironmentButton(EssentialsEnvironmentDriver environmentDriver, uint nextJoin) + { + if (environmentDriver != null) + { + TriList.SetString(nextJoin, "Lights"); + TriList.SetSigFalseAction(nextJoin, environmentDriver.Toggle); + nextJoin--; + return nextJoin; + } + else + return nextJoin; + } + + uint SetUpCalendarButton(EssentialsHuddleVtc1PanelAvFunctionsDriver avDriver, uint nextJoin) + { + // Calendar button + if (avDriver.CurrentRoom.ScheduleSource != null) + { + TriList.SetString(nextJoin, "Calendar"); + TriList.SetSigFalseAction(nextJoin, avDriver.CalendarPress); + + nextJoin--; + return nextJoin; + } + else + return nextJoin; + } + + uint SetUpCallButton(EssentialsHuddleVtc1PanelAvFunctionsDriver avDriver, uint nextJoin) + { + // Call button + TriList.SetString(nextJoin, "DND"); + TriList.SetSigFalseAction(nextJoin, avDriver.ShowActiveCallsList); + HeaderCallButtonIconSig = TriList.StringInput[nextJoin]; + + nextJoin--; + return nextJoin; + } + + /// + /// Evaluates the call status and sets the icon mode and text label + /// + public void ComputeHeaderCallStatus(VideoCodecBase codec) + { + if (codec == null) + { + Debug.Console(1, "ComputeHeaderCallStatus() cannot execute. codec is null"); + return; + } + + if (HeaderCallButtonIconSig == null) + { + Debug.Console(1, "ComputeHeaderCallStatus() cannot execute. HeaderCallButtonIconSig is null"); + return; + } + + // Set mode of header button + if (!codec.IsInCall) + { + HeaderCallButtonIconSig.StringValue = "DND"; + //HeaderCallButton.SetIcon(HeaderListButton.OnHook); + } + else if (codec.ActiveCalls.Any(c => c.Type == eCodecCallType.Video)) + HeaderCallButtonIconSig.StringValue = "Misc-06_Dark"; + //HeaderCallButton.SetIcon(HeaderListButton.Camera); + //TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 2); + else + HeaderCallButtonIconSig.StringValue = "Misc-09_Dark"; + //HeaderCallButton.SetIcon(HeaderListButton.Phone); + //TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 1); + + // Set the call status text + if (codec.ActiveCalls.Count > 0) + { + if (codec.ActiveCalls.Count == 1) + TriList.SetString(UIStringJoin.HeaderCallStatusLabel, "1 Active Call"); + else if (codec.ActiveCalls.Count > 1) + TriList.SetString(UIStringJoin.HeaderCallStatusLabel, string.Format("{0} Active Calls", codec.ActiveCalls.Count)); + } + else + TriList.SetString(UIStringJoin.HeaderCallStatusLabel, "No Active Calls"); + } + + /// + /// Sets up Header Buttons for the EssentialsHuddleVtc1Room type + /// + public void SetupHeaderButtons(EssentialsHuddleVtc1PanelAvFunctionsDriver avDriver, EssentialsHuddleVtc1Room currentRoom) + { + HeaderButtonsAreSetUp = false; + + TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, true); + + var roomConf = currentRoom.Config; + + SetUpGear(avDriver, currentRoom); + + SetUpHelpButton(roomConf); + + uint nextJoin = 3953; + + nextJoin = SetUpEnvironmentButton(Parent.EnvironmentDriver, nextJoin); + + nextJoin = SetUpCalendarButton(avDriver, nextJoin); + + nextJoin = SetUpCallButton(avDriver, nextJoin); + + // blank any that remain + for (var i = nextJoin; i > 3950; i--) + { + TriList.SetString(i, "Blank"); + TriList.SetSigFalseAction(i, () => { }); + } + + TriList.SetSigFalseAction(UIBoolJoin.HeaderCallStatusLabelPress, avDriver.ShowActiveCallsList); + + // Set Call Status Subpage Position + + if (nextJoin == 3951) + { + // Set to right position + TriList.SetBool(UIBoolJoin.HeaderCallStatusLeftPositionVisible, false); + TriList.SetBool(UIBoolJoin.HeaderCallStatusRightPositionVisible, true); + } + else if (nextJoin == 3950) + { + // Set to left position + TriList.SetBool(UIBoolJoin.HeaderCallStatusLeftPositionVisible, true); + TriList.SetBool(UIBoolJoin.HeaderCallStatusRightPositionVisible, false); + } + + HeaderButtonsAreSetUp = true; + + ComputeHeaderCallStatus(currentRoom.VideoCodec); + } + + /// + /// Sets up Header Buttons for the EssentialsHuddleSpaceRoom type + /// + public void SetupHeaderButtons(EssentialsHuddlePanelAvFunctionsDriver avDriver, EssentialsHuddleSpaceRoom currentRoom) + { + HeaderButtonsAreSetUp = false; + + TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, true); + + var roomConf = currentRoom.Config; + + SetUpGear(avDriver, currentRoom); + + SetUpHelpButton(roomConf); + + uint nextJoin = 3953; + + nextJoin = SetUpEnvironmentButton(Parent.EnvironmentDriver, nextJoin); + + // blank any that remain + for (var i = nextJoin; i > 3950; i--) + { + TriList.SetString(i, "Blank"); + TriList.SetSigFalseAction(i, () => { }); + } + + HeaderButtonsAreSetUp = true; + } + + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsPanelMainInterfaceDriver.cs b/PepperDashEssentials/UIDrivers/Essentials/EssentialsPanelMainInterfaceDriver.cs similarity index 95% rename from Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsPanelMainInterfaceDriver.cs rename to PepperDashEssentials/UIDrivers/Essentials/EssentialsPanelMainInterfaceDriver.cs index d843e152..e32015fe 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsPanelMainInterfaceDriver.cs +++ b/PepperDashEssentials/UIDrivers/Essentials/EssentialsPanelMainInterfaceDriver.cs @@ -1,71 +1,71 @@ -using System; -using Crestron.SimplSharpPro.DeviceSupport; -using Crestron.SimplSharpPro.UI; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.SmartObjects; - -namespace PepperDash.Essentials -{ - /// - /// - /// - public class EssentialsPanelMainInterfaceDriver : PanelDriverBase - { - /// - /// Assign the appropriate A/V driver. - /// Want to keep the AvDriver alive, because it may hold states - /// - public IAVDriver AvDriver { get; set; } - - public EssentialsHeaderDriver HeaderDriver { get; set; } - - public EssentialsEnvironmentDriver EnvironmentDriver { get; set; } - - public PanelDriverBase CurrentChildDriver { get; private set; } - - CrestronTouchpanelPropertiesConfig Config; - - /// - /// The main interlock for popups - /// - //public JoinedSigInterlock PopupInterlock { get; private set; } - - public EssentialsPanelMainInterfaceDriver(BasicTriListWithSmartObject trilist, - CrestronTouchpanelPropertiesConfig config) - : base(trilist) - { - Config = config; - } - - public override void Show() - { - CurrentChildDriver = null; - ShowSubDriver(AvDriver as PanelDriverBase); - base.Show(); - } - - public override void Hide() - { - TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = false; - base.Hide(); - } - - void ShowSubDriver(PanelDriverBase driver) - { - CurrentChildDriver = driver; - if (driver == null) - return; - this.Hide(); - driver.Show(); - } - - /// - /// - /// - public override void BackButtonPressed() - { - if(CurrentChildDriver != null) - CurrentChildDriver.BackButtonPressed(); - } - } +using System; +using Crestron.SimplSharpPro.DeviceSupport; +using Crestron.SimplSharpPro.UI; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.SmartObjects; + +namespace PepperDash.Essentials +{ + /// + /// + /// + public class EssentialsPanelMainInterfaceDriver : PanelDriverBase + { + /// + /// Assign the appropriate A/V driver. + /// Want to keep the AvDriver alive, because it may hold states + /// + public IAVDriver AvDriver { get; set; } + + public EssentialsHeaderDriver HeaderDriver { get; set; } + + public EssentialsEnvironmentDriver EnvironmentDriver { get; set; } + + public PanelDriverBase CurrentChildDriver { get; private set; } + + CrestronTouchpanelPropertiesConfig Config; + + /// + /// The main interlock for popups + /// + //public JoinedSigInterlock PopupInterlock { get; private set; } + + public EssentialsPanelMainInterfaceDriver(BasicTriListWithSmartObject trilist, + CrestronTouchpanelPropertiesConfig config) + : base(trilist) + { + Config = config; + } + + public override void Show() + { + CurrentChildDriver = null; + ShowSubDriver(AvDriver as PanelDriverBase); + base.Show(); + } + + public override void Hide() + { + TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = false; + base.Hide(); + } + + void ShowSubDriver(PanelDriverBase driver) + { + CurrentChildDriver = driver; + if (driver == null) + return; + this.Hide(); + driver.Show(); + } + + /// + /// + /// + public override void BackButtonPressed() + { + if(CurrentChildDriver != null) + CurrentChildDriver.BackButtonPressed(); + } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsPresentationPanelAvFunctionsDriver.cs b/PepperDashEssentials/UIDrivers/Essentials/EssentialsPresentationPanelAvFunctionsDriver.cs similarity index 100% rename from Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsPresentationPanelAvFunctionsDriver.cs rename to PepperDashEssentials/UIDrivers/Essentials/EssentialsPresentationPanelAvFunctionsDriver.cs diff --git a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddlePanelAvFunctionsDriver.cs b/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddlePanelAvFunctionsDriver.cs similarity index 97% rename from Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddlePanelAvFunctionsDriver.cs rename to PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddlePanelAvFunctionsDriver.cs index fbdfa36c..99803f26 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddlePanelAvFunctionsDriver.cs +++ b/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddlePanelAvFunctionsDriver.cs @@ -1,1135 +1,1135 @@ -using System; -using System.Collections.Generic; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; -using Crestron.SimplSharpPro.UI; - -using PepperDash.Core; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.SmartObjects; -using PepperDash.Essentials.Core.PageManagers; - -namespace PepperDash.Essentials -{ - /// - /// - /// - public class EssentialsHuddlePanelAvFunctionsDriver : PanelDriverBase, IAVDriver - { - CrestronTouchpanelPropertiesConfig Config; - - public enum UiDisplayMode - { - PresentationMode, AudioSetup - } - - /// - /// Whether volume ramping from this panel will show the volume - /// gauge popup. - /// - public bool ShowVolumeGauge { get; set; } - - /// - /// The amount of time that the volume buttons stays on screen, in ms - /// - public uint VolumeButtonPopupTimeout - { - get { return VolumeButtonsPopupFeedback.TimeoutMs; } - set { VolumeButtonsPopupFeedback.TimeoutMs = value; } - } - - /// - /// The amount of time that the volume gauge stays on screen, in ms - /// - public uint VolumeGaugePopupTimeout - { - get { return VolumeGaugeFeedback.TimeoutMs; } - set { VolumeGaugeFeedback.TimeoutMs = value; } - } - - /// - /// - /// - public uint PowerOffTimeout { get; set; } - - /// - /// - /// - public string DefaultRoomKey - { - get { return _DefaultRoomKey; } - set - { - _DefaultRoomKey = value; - //CurrentRoom = DeviceManager.GetDeviceForKey(value) as EssentialsHuddleSpaceRoom; - } - } - string _DefaultRoomKey; - - /// - /// Indicates that the SetHeaderButtons method has completed successfully - /// - public bool HeaderButtonsAreSetUp { get; private set; } - - /// - /// - /// - public EssentialsHuddleSpaceRoom CurrentRoom - { - get { return _CurrentRoom; } - set - { - SetCurrentRoom(value); - } - } - EssentialsHuddleSpaceRoom _CurrentRoom; - - /// - /// - /// - //uint CurrentInterlockedModalJoin; - - /// - /// For hitting feedback - /// - BoolInputSig ShareButtonSig; - BoolInputSig EndMeetingButtonSig; - - /// - /// Controls the extended period that the volume gauge shows on-screen, - /// as triggered by Volume up/down operations - /// - BoolFeedbackPulseExtender VolumeGaugeFeedback; - - /// - /// Controls the period that the volume buttons show on non-hard-button - /// interfaces - /// - BoolFeedbackPulseExtender VolumeButtonsPopupFeedback; - - /// - /// The parent driver for this - /// - PanelDriverBase Parent; - - /// - /// All children attached to this driver. For hiding and showing as a group. - /// - List ChildDrivers = new List(); - - List CurrentDisplayModeSigsInUse = new List(); - - //// Important smart objects - - /// - /// Smart Object 3200 - /// - SubpageReferenceList SourcesSrl; - - /// - /// Smart Object 15022 - /// - SubpageReferenceList ActivityFooterSrl; - - /// - /// Tracks which audio page group the UI is in - /// - UiDisplayMode CurrentDisplayMode; - - /// - /// The AV page mangagers that have been used, to keep them alive for later - /// - Dictionary PageManagers = new Dictionary(); - - /// - /// Current page manager running for a source - /// - PageManager CurrentSourcePageManager; - - /// - /// Will auto-timeout a power off - /// - CTimer PowerOffTimer; - - ModalDialog PowerDownModal; - - public JoinedSigInterlock PopupInterlock { get; private set; } - - /// - /// The driver for the tech page. Lazy getter for memory usage - /// - PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver TechDriver - { - get - { - if (_TechDriver == null) - _TechDriver = new PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver(TriList, CurrentRoom.Config.Tech); - return _TechDriver; - } - } - PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver _TechDriver; - - - /// - /// Controls timeout of notification ribbon timer - /// - CTimer RibbonTimer; - - /// - /// Constructor - /// - public EssentialsHuddlePanelAvFunctionsDriver(PanelDriverBase parent, CrestronTouchpanelPropertiesConfig config) - : base(parent.TriList) - { - Config = config; - Parent = parent; - PopupInterlock = new JoinedSigInterlock(TriList); - - SourcesSrl = new SubpageReferenceList(TriList, 3200, 3, 3, 3); - ActivityFooterSrl = new SubpageReferenceList(TriList, 15022, 3, 3, 3); - ShareButtonSig = ActivityFooterSrl.BoolInputSig(1, 1); - - SetupActivityFooterWhenRoomOff(); - - ShowVolumeGauge = true; - - // One-second pulse extender for volume gauge - VolumeGaugeFeedback = new BoolFeedbackPulseExtender(1500); - VolumeGaugeFeedback.Feedback - .LinkInputSig(TriList.BooleanInput[UIBoolJoin.VolumeGaugePopupVisible]); - - VolumeButtonsPopupFeedback = new BoolFeedbackPulseExtender(4000); - VolumeButtonsPopupFeedback.Feedback - .LinkInputSig(TriList.BooleanInput[UIBoolJoin.VolumeButtonPopupVisible]); - - PowerOffTimeout = 30000; - - TriList.StringInput[UIStringJoin.StartActivityText].StringValue = - "Tap Share to begin"; - } - - /// - /// - /// - public override void Show() - { - if (CurrentRoom == null) - { - Debug.Console(1, "ERROR: AVUIFunctionsDriver, Cannot show. No room assigned"); - return; - } - - var roomConf = CurrentRoom.Config; - - TriList.SetString(UIStringJoin.CurrentRoomName, CurrentRoom.Name); - - if (Config.HeaderStyle.ToLower() == CrestronTouchpanelPropertiesConfig.Habanero) - { - TriList.SetSigFalseAction(UIBoolJoin.HeaderRoomButtonPress, () => - PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.RoomHeaderPageVisible)); - } - else if (Config.HeaderStyle.ToLower() == CrestronTouchpanelPropertiesConfig.Verbose) - { - // room name on join 1, concat phone and sip on join 2, no button method - //var addr = roomConf.Addresses; - //if (addr == null) // protect from missing values by using default empties - // addr = new EssentialsRoomAddressPropertiesConfig(); - //// empty string when either missing, pipe when both showing - //TriList.SetString(UIStringJoin.RoomAddressPipeText, - // (string.IsNullOrEmpty(addr.PhoneNumber.Trim()) - // || string.IsNullOrEmpty(addr.SipAddress.Trim())) ? "" : " | "); - //TriList.SetString(UIStringJoin.RoomPhoneText, addr.PhoneNumber); - //TriList.SetString(UIStringJoin.RoomSipText, addr.SipAddress); - } - - TriList.SetBool(UIBoolJoin.DateAndTimeVisible, Config.ShowDate && Config.ShowTime); - TriList.SetBool(UIBoolJoin.DateOnlyVisible, Config.ShowDate && !Config.ShowTime); - TriList.SetBool(UIBoolJoin.TimeOnlyVisible, !Config.ShowDate && Config.ShowTime); - - TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, true); - TriList.BooleanInput[UIBoolJoin.ActivityFooterVisible].BoolValue = true; - - // Default to showing rooms/sources now. - if (CurrentRoom.OnFeedback.BoolValue) - { - TriList.SetBool(UIBoolJoin.TapToBeginVisible, false); - SetupActivityFooterWhenRoomOn(); - } - else - { - TriList.SetBool(UIBoolJoin.StartPageVisible, true); - TriList.SetBool(UIBoolJoin.TapToBeginVisible, true); - SetupActivityFooterWhenRoomOff(); - } - ShowCurrentDisplayModeSigsInUse(); - - // Attach actions - TriList.SetSigFalseAction(UIBoolJoin.VolumeButtonPopupPress, VolumeButtonsTogglePress); - - // Generic "close" button for popup modals - TriList.SetSigFalseAction(UIBoolJoin.InterlockedModalClosePress, PopupInterlock.HideAndClear); - - // Volume related things - TriList.SetSigFalseAction(UIBoolJoin.VolumeDefaultPress, () => CurrentRoom.SetDefaultLevels()); - TriList.SetString(UIStringJoin.AdvancedVolumeSlider1Text, "Room"); - - //TriList.SetSigFalseAction(UIBoolJoin.RoomHeaderButtonPress, () => - // ShowInterlockedModal(UIBoolJoin.RoomHeaderPageVisible)); - - - //if(TriList is CrestronApp) - // TriList.BooleanInput[UIBoolJoin.GearButtonVisible].BoolValue = false; - //else - // TriList.BooleanInput[UIBoolJoin.GearButtonVisible].BoolValue = true; - - // power-related functions - // Note: some of these are not directly-related to the huddle space UI, but are held over - // in case - TriList.SetSigFalseAction(UIBoolJoin.ShowPowerOffPress, EndMeetingPress); - - TriList.SetSigFalseAction(UIBoolJoin.DisplayPowerTogglePress, () => - { - if (CurrentRoom != null && CurrentRoom.DefaultDisplay is IPower) - (CurrentRoom.DefaultDisplay as IPower).PowerToggle(); - }); - - base.Show(); - } - - /// - /// - /// - public void EndMeetingPress() - { - if (!CurrentRoom.OnFeedback.BoolValue - || CurrentRoom.ShutdownPromptTimer.IsRunningFeedback.BoolValue) - return; - - CurrentRoom.StartShutdown(eShutdownType.Manual); - } - - /// - /// Reveals the tech page and puts away anything that's in the way. - /// - public void ShowTech() - { - PopupInterlock.HideAndClear(); - TechDriver.Show(); - } - - /// - /// - /// - void ShowLogo() - { - if (CurrentRoom.LogoUrl == null) - { - TriList.SetBool(UIBoolJoin.LogoDefaultVisible, true); - TriList.SetBool(UIBoolJoin.LogoUrlVisible, false); - } - else - { - TriList.SetBool(UIBoolJoin.LogoDefaultVisible, false); - TriList.SetBool(UIBoolJoin.LogoUrlVisible, true); - TriList.SetString(UIStringJoin.LogoUrl, _CurrentRoom.LogoUrl); - } - } - - /// - /// - /// - void HideLogo() - { - TriList.SetBool(UIBoolJoin.LogoDefaultVisible, false); - TriList.SetBool(UIBoolJoin.LogoUrlVisible, false); - } - - /// - /// - /// - public override void Hide() - { - HideAndClearCurrentDisplayModeSigsInUse(); - TriList.BooleanInput[UIBoolJoin.TopBarHabaneroDynamicVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.ActivityFooterVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.TapToBeginVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; - //TriList.BooleanInput[UIBoolJoin.StagingPageVisible].BoolValue = false; - VolumeButtonsPopupFeedback.ClearNow(); - //CancelPowerOff(); - - base.Hide(); - } - - /// - /// Reveals a message on the notification ribbon until cleared - /// - /// Text to display - /// Time in ms to display. 0 to keep on screen - public void ShowNotificationRibbon(string message, int timeout) - { - TriList.SetString(UIStringJoin.NotificationRibbonText, message); - TriList.SetBool(UIBoolJoin.NotificationRibbonVisible, true); - if (timeout > 0) - { - if (RibbonTimer != null) - RibbonTimer.Stop(); - RibbonTimer = new CTimer(o => - { - TriList.SetBool(UIBoolJoin.NotificationRibbonVisible, false); - RibbonTimer = null; - }, timeout); - } - } - - /// - /// Hides the notification ribbon - /// - public void HideNotificationRibbon() - { - TriList.SetBool(UIBoolJoin.NotificationRibbonVisible, false); - if (RibbonTimer != null) - { - RibbonTimer.Stop(); - RibbonTimer = null; - } - } - - /// - /// Shows the various "modes" that this driver controls. Presentation, Setup page - /// - /// - public void ShowMode(UiDisplayMode mode) - { - //Clear whatever is showing now. - HideAndClearCurrentDisplayModeSigsInUse(); - CurrentDisplayMode = mode; - switch (mode) - { - case UiDisplayMode.PresentationMode: - // show start page or staging... - if (CurrentRoom.OnFeedback.BoolValue) - { - TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = true; - TriList.BooleanInput[UIBoolJoin.TapToBeginVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; - } - else - { - TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = true; - TriList.BooleanInput[UIBoolJoin.TapToBeginVisible].BoolValue = true; - TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; - } - // Date/time - if (Config.ShowDate && Config.ShowTime) - { - TriList.BooleanInput[UIBoolJoin.DateAndTimeVisible].BoolValue = true; - TriList.BooleanInput[UIBoolJoin.DateOnlyVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.TimeOnlyVisible].BoolValue = false; - } - else - { - TriList.BooleanInput[UIBoolJoin.DateAndTimeVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.DateOnlyVisible].BoolValue = Config.ShowDate; - TriList.BooleanInput[UIBoolJoin.TimeOnlyVisible].BoolValue = Config.ShowTime; - } - - ShowCurrentDisplayModeSigsInUse(); - break; - } - } - - /// - /// When the room is off, set the footer SRL - /// - void SetupActivityFooterWhenRoomOff() - { - ActivityFooterSrl.Clear(); - ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(1, ActivityFooterSrl, 0, - b => { if (!b) ShareButtonPressed(); })); - ActivityFooterSrl.Count = 1; - TriList.UShortInput[UIUshortJoin.PresentationStagingCaretMode].UShortValue = 0; - ShareButtonSig.BoolValue = false; - } - - /// - /// Sets up the footer SRL for when the room is on - /// - void SetupActivityFooterWhenRoomOn() - { - ActivityFooterSrl.Clear(); - ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(1, ActivityFooterSrl, - 0, null)); - ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(2, ActivityFooterSrl, - 4, b => { if (!b) PowerButtonPressed(); })); - ActivityFooterSrl.Count = 2; - TriList.UShortInput[UIUshortJoin.PresentationStagingCaretMode].UShortValue = 1; - EndMeetingButtonSig = ActivityFooterSrl.BoolInputSig(2, 1); - ShareButtonSig.BoolValue = CurrentRoom.OnFeedback.BoolValue; - } - - /// - /// Attached to activity list share button - /// - void ShareButtonPressed() - { - ShareButtonSig.BoolValue = true; - TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = true; - TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = true; - // Run default source when room is off and share is pressed - if (!CurrentRoom.OnFeedback.BoolValue) - CurrentRoom.RunDefaultRoute(); - } - - - /// - /// Shows all sigs that are in CurrentDisplayModeSigsInUse - /// - void ShowCurrentDisplayModeSigsInUse() - { - foreach (var sig in CurrentDisplayModeSigsInUse) - sig.BoolValue = true; - } - - /// - /// Hides all CurrentDisplayModeSigsInUse sigs and clears the array - /// - void HideAndClearCurrentDisplayModeSigsInUse() - { - foreach (var sig in CurrentDisplayModeSigsInUse) - sig.BoolValue = false; - CurrentDisplayModeSigsInUse.Clear(); - } - - /// - /// Send the UI back depending on location, not used in huddle UI - /// - public override void BackButtonPressed() - { - switch (CurrentDisplayMode) - { - case UiDisplayMode.PresentationMode: - //CancelReturnToSourceTimer(); - BackToHome(); - break; - } - } - - /// - /// - /// - void BackToHome() - { - Hide(); - Parent.Show(); - } - - /// - /// Loads the appropriate Sigs into CurrentDisplayModeSigsInUse and shows them - /// - void ShowCurrentSource() - { - if (CurrentRoom.CurrentSourceInfo == null) - return; - - var uiDev = CurrentRoom.CurrentSourceInfo.SourceDevice as IUiDisplayInfo; - PageManager pm = null; - // If we need a page manager, get an appropriate one - if (uiDev != null) - { - TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; - // Got an existing page manager, get it - if (PageManagers.ContainsKey(uiDev)) - pm = PageManagers[uiDev]; - // Otherwise make an apporiate one - else if (uiDev is ISetTopBoxControls) - //pm = new SetTopBoxMediumPageManager(uiDev as ISetTopBoxControls, TriList); - pm = new SetTopBoxThreePanelPageManager(uiDev as ISetTopBoxControls, TriList); - else if (uiDev is IDiscPlayerControls) - pm = new DiscPlayerMediumPageManager(uiDev as IDiscPlayerControls, TriList); - else - pm = new DefaultPageManager(uiDev, TriList); - PageManagers[uiDev] = pm; - CurrentSourcePageManager = pm; - pm.Show(); - } - } - - /// - /// Called from button presses on source, where We can assume we want - /// to change to the proper screen. - /// - /// The key name of the route to run - void UiSelectSource(string key) - { - // Run the route and when it calls back, show the source - CurrentRoom.RunRouteAction(key, null); - } - - /// - /// - /// - public void PowerButtonPressed() - { - if (!CurrentRoom.OnFeedback.BoolValue - || CurrentRoom.ShutdownPromptTimer.IsRunningFeedback.BoolValue) - return; - - CurrentRoom.StartShutdown(eShutdownType.Manual); - } - - /// - /// - /// - /// - /// - void ShutdownPromptTimer_HasStarted(object sender, EventArgs e) - { - // Do we need to check where the UI is? No? - var timer = CurrentRoom.ShutdownPromptTimer; - EndMeetingButtonSig.BoolValue = true; - ShareButtonSig.BoolValue = false; - - if (CurrentRoom.ShutdownType == eShutdownType.Manual) - { - PowerDownModal = new ModalDialog(TriList); - var message = string.Format("Meeting will end in {0} seconds", CurrentRoom.ShutdownPromptSeconds); - - // Attach timer things to modal - CurrentRoom.ShutdownPromptTimer.TimeRemainingFeedback.OutputChange += ShutdownPromptTimer_TimeRemainingFeedback_OutputChange; - CurrentRoom.ShutdownPromptTimer.PercentFeedback.OutputChange += ShutdownPromptTimer_PercentFeedback_OutputChange; - - // respond to offs by cancelling dialog - var onFb = CurrentRoom.OnFeedback; - EventHandler offHandler = null; - offHandler = (o, a) => - { - if (!onFb.BoolValue) - { - EndMeetingButtonSig.BoolValue = false; - PowerDownModal.HideDialog(); - onFb.OutputChange -= offHandler; - //gauge.OutputChange -= gaugeHandler; - } - }; - onFb.OutputChange += offHandler; - - PowerDownModal.PresentModalDialog(2, "End Meeting", "Power", message, "Cancel", "End Meeting Now", true, true, - but => - { - if (but != 2) // any button except for End cancels - timer.Cancel(); - else - timer.Finish(); - }); - } - } - - /// - /// - /// - /// - /// - void ShutdownPromptTimer_HasFinished(object sender, EventArgs e) - { - EndMeetingButtonSig.BoolValue = false; - CurrentRoom.ShutdownPromptTimer.TimeRemainingFeedback.OutputChange -= ShutdownPromptTimer_TimeRemainingFeedback_OutputChange; - CurrentRoom.ShutdownPromptTimer.PercentFeedback.OutputChange -= ShutdownPromptTimer_PercentFeedback_OutputChange; - } - - /// - /// - /// - /// - /// - void ShutdownPromptTimer_WasCancelled(object sender, EventArgs e) - { - if (PowerDownModal != null) - PowerDownModal.HideDialog(); - EndMeetingButtonSig.BoolValue = false; - ShareButtonSig.BoolValue = CurrentRoom.OnFeedback.BoolValue; - - CurrentRoom.ShutdownPromptTimer.TimeRemainingFeedback.OutputChange += ShutdownPromptTimer_TimeRemainingFeedback_OutputChange; - CurrentRoom.ShutdownPromptTimer.PercentFeedback.OutputChange -= ShutdownPromptTimer_PercentFeedback_OutputChange; - } - - void ShutdownPromptTimer_TimeRemainingFeedback_OutputChange(object sender, EventArgs e) - { - - var message = string.Format("Meeting will end in {0} seconds", (sender as StringFeedback).StringValue); - TriList.StringInput[ModalDialog.MessageTextJoin].StringValue = message; - } - - void ShutdownPromptTimer_PercentFeedback_OutputChange(object sender, EventArgs e) - { - var value = (ushort)((sender as IntFeedback).UShortValue * 65535 / 100); - TriList.UShortInput[ModalDialog.TimerGaugeJoin].UShortValue = value; - } - - /// - /// - /// - void CancelPowerOffTimer() - { - if (PowerOffTimer != null) - { - PowerOffTimer.Stop(); - PowerOffTimer = null; - } - } - - /// - /// - /// - void VolumeButtonsTogglePress() - { - if (VolumeButtonsPopupFeedback.BoolValue) - VolumeButtonsPopupFeedback.ClearNow(); - else - { - // Trigger the popup - VolumeButtonsPopupFeedback.BoolValue = true; - VolumeButtonsPopupFeedback.BoolValue = false; - } - } - - /// - /// - /// - /// - public void VolumeUpPress(bool state) - { - // extend timeouts - if (ShowVolumeGauge) - VolumeGaugeFeedback.BoolValue = state; - VolumeButtonsPopupFeedback.BoolValue = state; - if (CurrentRoom.CurrentVolumeControls != null) - CurrentRoom.CurrentVolumeControls.VolumeUp(state); - } - - /// - /// - /// - /// - public void VolumeDownPress(bool state) - { - // extend timeouts - if (ShowVolumeGauge) - VolumeGaugeFeedback.BoolValue = state; - VolumeButtonsPopupFeedback.BoolValue = state; - if (CurrentRoom.CurrentVolumeControls != null) - CurrentRoom.CurrentVolumeControls.VolumeDown(state); - } - - /// - /// Helper for property setter. Sets the panel to the given room, latching up all functionality - /// - void SetCurrentRoom(EssentialsHuddleSpaceRoom room) - { - if (_CurrentRoom == room) return; - // Disconnect current (probably never called) - if (_CurrentRoom != null) - { - // Disconnect current room - _CurrentRoom.CurrentVolumeDeviceChange -= this.CurrentRoom_CurrentAudioDeviceChange; - ClearAudioDeviceConnections(); - _CurrentRoom.CurrentSingleSourceChange -= this.CurrentRoom_SourceInfoChange; - DisconnectSource(_CurrentRoom.CurrentSourceInfo); - _CurrentRoom.ShutdownPromptTimer.HasStarted -= ShutdownPromptTimer_HasStarted; - _CurrentRoom.ShutdownPromptTimer.HasFinished -= ShutdownPromptTimer_HasFinished; - _CurrentRoom.ShutdownPromptTimer.WasCancelled -= ShutdownPromptTimer_WasCancelled; - - _CurrentRoom.OnFeedback.OutputChange += CurrentRoom_OnFeedback_OutputChange; - _CurrentRoom.IsWarmingUpFeedback.OutputChange -= CurrentRoom_IsWarmingFeedback_OutputChange; - _CurrentRoom.IsCoolingDownFeedback.OutputChange -= IsCoolingDownFeedback_OutputChange; - } - - _CurrentRoom = room; - - if (_CurrentRoom != null) - { - // get the source list config and set up the source list - var config = ConfigReader.ConfigObject.SourceLists; - if (config.ContainsKey(_CurrentRoom.SourceListKey)) - { - var srcList = config[_CurrentRoom.SourceListKey]; - // Setup sources list - uint i = 1; // counter for UI list - foreach (var kvp in srcList) - { - var srcConfig = kvp.Value; - if (!srcConfig.IncludeInSourceList) // Skip sources marked this way - continue; - - var actualSource = DeviceManager.GetDeviceForKey(srcConfig.SourceKey) as Device; - if (actualSource == null) - { - Debug.Console(1, "Cannot assign missing source '{0}' to source UI list", - srcConfig.SourceKey); - continue; - } - var routeKey = kvp.Key; - var item = new SubpageReferenceListSourceItem(i++, SourcesSrl, srcConfig, - b => { if (!b) UiSelectSource(routeKey); }); - SourcesSrl.AddItem(item); // add to the SRL - item.RegisterForSourceChange(_CurrentRoom); - } - SourcesSrl.Count = (ushort)(i - 1); - } - // Name and logo - TriList.StringInput[UIStringJoin.CurrentRoomName].StringValue = _CurrentRoom.Name; - if (_CurrentRoom.LogoUrl == null) - { - TriList.BooleanInput[UIBoolJoin.LogoDefaultVisible].BoolValue = true; - TriList.BooleanInput[UIBoolJoin.LogoUrlVisible].BoolValue = false; - } - else - { - TriList.BooleanInput[UIBoolJoin.LogoDefaultVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.LogoUrlVisible].BoolValue = true; - TriList.StringInput[UIStringJoin.LogoUrl].StringValue = _CurrentRoom.LogoUrl; - } - - // Shutdown timer - _CurrentRoom.ShutdownPromptTimer.HasStarted += ShutdownPromptTimer_HasStarted; - _CurrentRoom.ShutdownPromptTimer.HasFinished += ShutdownPromptTimer_HasFinished; - _CurrentRoom.ShutdownPromptTimer.WasCancelled += ShutdownPromptTimer_WasCancelled; - - // Link up all the change events from the room - _CurrentRoom.OnFeedback.OutputChange += CurrentRoom_OnFeedback_OutputChange; - CurrentRoom_SyncOnFeedback(); - _CurrentRoom.IsWarmingUpFeedback.OutputChange += CurrentRoom_IsWarmingFeedback_OutputChange; - _CurrentRoom.IsCoolingDownFeedback.OutputChange += IsCoolingDownFeedback_OutputChange; - - _CurrentRoom.CurrentVolumeDeviceChange += CurrentRoom_CurrentAudioDeviceChange; - RefreshAudioDeviceConnections(); - _CurrentRoom.CurrentSingleSourceChange += CurrentRoom_SourceInfoChange; - RefreshSourceInfo(); - - (Parent as EssentialsPanelMainInterfaceDriver).HeaderDriver.SetupHeaderButtons(this, CurrentRoom); - } - else - { - // Clear sigs that need to be - TriList.StringInput[UIStringJoin.CurrentRoomName].StringValue = "Select a room"; - } - } - - //void SetupHeaderButtons() - //{ - // HeaderButtonsAreSetUp = false; - - // TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, true); - - // var roomConf = CurrentRoom.Config; - - // // Gear - // TriList.SetString(UIStringJoin.HeaderButtonIcon5, "Gear"); - // TriList.SetSigHeldAction(UIBoolJoin.HeaderIcon5Press, 2000, - // ShowTech, - // null, - // () => - // { - // if (CurrentRoom.OnFeedback.BoolValue) - // PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.VolumesPageVisible); - // else - // PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.VolumesPagePowerOffVisible); - // }); - // TriList.SetSigFalseAction(UIBoolJoin.TechExitButton, () => - // PopupInterlock.HideAndClear()); - - // // Help button and popup - // if (CurrentRoom.Config.Help != null) - // { - // TriList.SetString(UIStringJoin.HelpMessage, roomConf.Help.Message); - // TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, roomConf.Help.ShowCallButton); - // TriList.SetString(UIStringJoin.HelpPageCallButtonText, roomConf.Help.CallButtonText); - // if (roomConf.Help.ShowCallButton) - // TriList.SetSigFalseAction(UIBoolJoin.HelpPageShowCallButtonPress, () => { }); // ************ FILL IN - // else - // TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress); - // } - // else // older config - // { - // TriList.SetString(UIStringJoin.HelpMessage, CurrentRoom.Config.HelpMessage); - // TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, false); - // TriList.SetString(UIStringJoin.HelpPageCallButtonText, null); - // TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress); - // } - // TriList.SetString(UIStringJoin.HeaderButtonIcon4, "Help"); - // TriList.SetSigFalseAction(UIBoolJoin.HeaderIcon4Press, () => - // { - // string message = null; - // var room = DeviceManager.GetDeviceForKey(Config.DefaultRoomKey) - // as EssentialsHuddleSpaceRoom; - // if (room != null) - // message = room.Config.HelpMessage; - // else - // message = "Sorry, no help message available. No room connected."; - // //TriList.StringInput[UIStringJoin.HelpMessage].StringValue = message; - // PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HelpPageVisible); - // }); - // uint nextJoin = 3953; - - // //// Calendar button - // //if (_CurrentRoom.ScheduleSource != null) - // //{ - // // TriList.SetString(nextJoin, "Calendar"); - // // TriList.SetSigFalseAction(nextJoin, CalendarPress); - - // // nextJoin--; - // //} - - // //nextJoin--; - - // // blank any that remain - // for (var i = nextJoin; i > 3950; i--) - // { - // TriList.SetString(i, "Blank"); - // TriList.SetSigFalseAction(i, () => { }); - // } - - // HeaderButtonsAreSetUp = true; - //} - - - /// - /// For room on/off changes - /// - void CurrentRoom_OnFeedback_OutputChange(object sender, EventArgs e) - { - CurrentRoom_SyncOnFeedback(); - } - - void CurrentRoom_SyncOnFeedback() - { - var value = _CurrentRoom.OnFeedback.BoolValue; - //Debug.Console(2, CurrentRoom, "UI: Is on event={0}", value); - TriList.BooleanInput[UIBoolJoin.RoomIsOn].BoolValue = value; - - if (value) //ON - { - SetupActivityFooterWhenRoomOn(); - TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = true; - TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.VolumeSingleMute1Visible].BoolValue = true; - - } - else - { - SetupActivityFooterWhenRoomOff(); - ShowLogo(); - TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = true; - TriList.BooleanInput[UIBoolJoin.VolumeSingleMute1Visible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = false; - } - } - - /// - /// - /// - void CurrentRoom_IsWarmingFeedback_OutputChange(object sender, EventArgs e) - { - if (CurrentRoom.IsWarmingUpFeedback.BoolValue) - { - ShowNotificationRibbon("Room is powering on. Please wait...", 0); - } - else - { - ShowNotificationRibbon("Room is powered on. Welcome.", 2000); - } - } - - - void IsCoolingDownFeedback_OutputChange(object sender, EventArgs e) - { - if (CurrentRoom.IsCoolingDownFeedback.BoolValue) - { - ShowNotificationRibbon("Room is powering off. Please wait.", 0); - } - else - { - HideNotificationRibbon(); - } - } - - /// - /// Hides source for provided source info - /// - /// - void DisconnectSource(SourceListItem previousInfo) - { - if (previousInfo == null) return; - - // Hide whatever is showing - if (IsVisible) - { - if (CurrentSourcePageManager != null) - { - CurrentSourcePageManager.Hide(); - CurrentSourcePageManager = null; - } - } - - if (previousInfo == null) return; - var previousDev = previousInfo.SourceDevice; - - // device type interfaces - if (previousDev is ISetTopBoxControls) - (previousDev as ISetTopBoxControls).UnlinkButtons(TriList); - // common interfaces - if (previousDev is IChannel) - (previousDev as IChannel).UnlinkButtons(TriList); - if (previousDev is IColor) - (previousDev as IColor).UnlinkButtons(TriList); - if (previousDev is IDPad) - (previousDev as IDPad).UnlinkButtons(TriList); - if (previousDev is IDvr) - (previousDev as IDvr).UnlinkButtons(TriList); - if (previousDev is INumericKeypad) - (previousDev as INumericKeypad).UnlinkButtons(TriList); - if (previousDev is IPower) - (previousDev as IPower).UnlinkButtons(TriList); - if (previousDev is ITransport) - (previousDev as ITransport).UnlinkButtons(TriList); - //if (previousDev is IRadio) - // (previousDev as IRadio).UnlinkButtons(this); - } - - /// - /// Refreshes and shows the room's current source - /// - void RefreshSourceInfo() - { - var routeInfo = CurrentRoom.CurrentSourceInfo; - // This will show off popup too - if (this.IsVisible) - ShowCurrentSource(); - - if (routeInfo == null)// || !CurrentRoom.OnFeedback.BoolValue) - { - // Check for power off and insert "Room is off" - TriList.StringInput[UIStringJoin.CurrentSourceName].StringValue = "Room is off"; - TriList.StringInput[UIStringJoin.CurrentSourceIcon].StringValue = "Power"; - this.Hide(); - Parent.Show(); - return; - } - else if (CurrentRoom.CurrentSourceInfo != null) - { - TriList.StringInput[UIStringJoin.CurrentSourceName].StringValue = routeInfo.PreferredName; - TriList.StringInput[UIStringJoin.CurrentSourceIcon].StringValue = routeInfo.Icon; // defaults to "blank" - } - else - { - TriList.StringInput[UIStringJoin.CurrentSourceName].StringValue = "---"; - TriList.StringInput[UIStringJoin.CurrentSourceIcon].StringValue = "Blank"; - } - - // Connect controls - if (routeInfo.SourceDevice != null) - ConnectControlDeviceMethods(routeInfo.SourceDevice); - } - - /// - /// Attach the source to the buttons and things - /// - void ConnectControlDeviceMethods(Device dev) - { - if(dev is ISetTopBoxControls) - (dev as ISetTopBoxControls).LinkButtons(TriList); - if (dev is IChannel) - (dev as IChannel).LinkButtons(TriList); - if (dev is IColor) - (dev as IColor).LinkButtons(TriList); - if (dev is IDPad) - (dev as IDPad).LinkButtons(TriList); - if (dev is IDvr) - (dev as IDvr).LinkButtons(TriList); - if (dev is INumericKeypad) - (dev as INumericKeypad).LinkButtons(TriList); - if (dev is IPower) - (dev as IPower).LinkButtons(TriList); - if (dev is ITransport) - (dev as ITransport).LinkButtons(TriList); - //if (dev is IRadio) - // (dev as IRadio).LinkButtons(this); // +++++++++++++ Make part of this into page manager - - //if (dev is ICustomFunctions) - //{ - // var custBridge = (dev as ICustomFunctions).GetCustomBridge(); - // custBridge.Link(this.Remote); - } - - /// - /// Detaches the buttons and feedback from the room's current audio device - /// - void ClearAudioDeviceConnections() - { - TriList.ClearBoolSigAction(UIBoolJoin.VolumeUpPress); - TriList.ClearBoolSigAction(UIBoolJoin.VolumeDownPress); - TriList.ClearBoolSigAction(UIBoolJoin.Volume1ProgramMutePressAndFB); - - var fDev = CurrentRoom.CurrentVolumeControls as IBasicVolumeWithFeedback; - if (fDev != null) - { - TriList.ClearUShortSigAction(UIUshortJoin.VolumeSlider1Value); - fDev.VolumeLevelFeedback.UnlinkInputSig( - TriList.UShortInput[UIUshortJoin.VolumeSlider1Value]); - } - } - - /// - /// Attaches the buttons and feedback to the room's current audio device - /// - void RefreshAudioDeviceConnections() - { - var dev = CurrentRoom.CurrentVolumeControls; - if (dev != null) // connect buttons - { - TriList.SetBoolSigAction(UIBoolJoin.VolumeUpPress, VolumeUpPress); - TriList.SetBoolSigAction(UIBoolJoin.VolumeDownPress, VolumeDownPress); - TriList.SetSigFalseAction(UIBoolJoin.Volume1ProgramMutePressAndFB, dev.MuteToggle); - } - - var fbDev = dev as IBasicVolumeWithFeedback; - if (fbDev == null) // this should catch both IBasicVolume and IBasicVolumeWithFeeback - TriList.UShortInput[UIUshortJoin.VolumeSlider1Value].UShortValue = 0; - else - { - // slider - TriList.SetUShortSigAction(UIUshortJoin.VolumeSlider1Value, fbDev.SetVolume); - // feedbacks - fbDev.MuteFeedback.LinkInputSig(TriList.BooleanInput[UIBoolJoin.Volume1ProgramMutePressAndFB]); - fbDev.VolumeLevelFeedback.LinkInputSig( - TriList.UShortInput[UIUshortJoin.VolumeSlider1Value]); - } - } - - /// - /// Handler for when the room's volume control device changes - /// - void CurrentRoom_CurrentAudioDeviceChange(object sender, VolumeDeviceChangeEventArgs args) - { - if (args.Type == ChangeType.WillChange) - ClearAudioDeviceConnections(); - else // did change - RefreshAudioDeviceConnections(); - } - - /// - /// Handles source change - /// - void CurrentRoom_SourceInfoChange(EssentialsRoomBase room, - SourceListItem info, ChangeType change) - { - if (change == ChangeType.WillChange) - DisconnectSource(info); - else - RefreshSourceInfo(); - } - } +using System; +using System.Collections.Generic; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.UI; + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.SmartObjects; +using PepperDash.Essentials.Core.PageManagers; + +namespace PepperDash.Essentials +{ + /// + /// + /// + public class EssentialsHuddlePanelAvFunctionsDriver : PanelDriverBase, IAVDriver + { + CrestronTouchpanelPropertiesConfig Config; + + public enum UiDisplayMode + { + PresentationMode, AudioSetup + } + + /// + /// Whether volume ramping from this panel will show the volume + /// gauge popup. + /// + public bool ShowVolumeGauge { get; set; } + + /// + /// The amount of time that the volume buttons stays on screen, in ms + /// + public uint VolumeButtonPopupTimeout + { + get { return VolumeButtonsPopupFeedback.TimeoutMs; } + set { VolumeButtonsPopupFeedback.TimeoutMs = value; } + } + + /// + /// The amount of time that the volume gauge stays on screen, in ms + /// + public uint VolumeGaugePopupTimeout + { + get { return VolumeGaugeFeedback.TimeoutMs; } + set { VolumeGaugeFeedback.TimeoutMs = value; } + } + + /// + /// + /// + public uint PowerOffTimeout { get; set; } + + /// + /// + /// + public string DefaultRoomKey + { + get { return _DefaultRoomKey; } + set + { + _DefaultRoomKey = value; + //CurrentRoom = DeviceManager.GetDeviceForKey(value) as EssentialsHuddleSpaceRoom; + } + } + string _DefaultRoomKey; + + /// + /// Indicates that the SetHeaderButtons method has completed successfully + /// + public bool HeaderButtonsAreSetUp { get; private set; } + + /// + /// + /// + public EssentialsHuddleSpaceRoom CurrentRoom + { + get { return _CurrentRoom; } + set + { + SetCurrentRoom(value); + } + } + EssentialsHuddleSpaceRoom _CurrentRoom; + + /// + /// + /// + //uint CurrentInterlockedModalJoin; + + /// + /// For hitting feedback + /// + BoolInputSig ShareButtonSig; + BoolInputSig EndMeetingButtonSig; + + /// + /// Controls the extended period that the volume gauge shows on-screen, + /// as triggered by Volume up/down operations + /// + BoolFeedbackPulseExtender VolumeGaugeFeedback; + + /// + /// Controls the period that the volume buttons show on non-hard-button + /// interfaces + /// + BoolFeedbackPulseExtender VolumeButtonsPopupFeedback; + + /// + /// The parent driver for this + /// + PanelDriverBase Parent; + + /// + /// All children attached to this driver. For hiding and showing as a group. + /// + List ChildDrivers = new List(); + + List CurrentDisplayModeSigsInUse = new List(); + + //// Important smart objects + + /// + /// Smart Object 3200 + /// + SubpageReferenceList SourcesSrl; + + /// + /// Smart Object 15022 + /// + SubpageReferenceList ActivityFooterSrl; + + /// + /// Tracks which audio page group the UI is in + /// + UiDisplayMode CurrentDisplayMode; + + /// + /// The AV page mangagers that have been used, to keep them alive for later + /// + Dictionary PageManagers = new Dictionary(); + + /// + /// Current page manager running for a source + /// + PageManager CurrentSourcePageManager; + + /// + /// Will auto-timeout a power off + /// + CTimer PowerOffTimer; + + ModalDialog PowerDownModal; + + public JoinedSigInterlock PopupInterlock { get; private set; } + + /// + /// The driver for the tech page. Lazy getter for memory usage + /// + PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver TechDriver + { + get + { + if (_TechDriver == null) + _TechDriver = new PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver(TriList, CurrentRoom.Config.Tech); + return _TechDriver; + } + } + PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver _TechDriver; + + + /// + /// Controls timeout of notification ribbon timer + /// + CTimer RibbonTimer; + + /// + /// Constructor + /// + public EssentialsHuddlePanelAvFunctionsDriver(PanelDriverBase parent, CrestronTouchpanelPropertiesConfig config) + : base(parent.TriList) + { + Config = config; + Parent = parent; + PopupInterlock = new JoinedSigInterlock(TriList); + + SourcesSrl = new SubpageReferenceList(TriList, 3200, 3, 3, 3); + ActivityFooterSrl = new SubpageReferenceList(TriList, 15022, 3, 3, 3); + ShareButtonSig = ActivityFooterSrl.BoolInputSig(1, 1); + + SetupActivityFooterWhenRoomOff(); + + ShowVolumeGauge = true; + + // One-second pulse extender for volume gauge + VolumeGaugeFeedback = new BoolFeedbackPulseExtender(1500); + VolumeGaugeFeedback.Feedback + .LinkInputSig(TriList.BooleanInput[UIBoolJoin.VolumeGaugePopupVisible]); + + VolumeButtonsPopupFeedback = new BoolFeedbackPulseExtender(4000); + VolumeButtonsPopupFeedback.Feedback + .LinkInputSig(TriList.BooleanInput[UIBoolJoin.VolumeButtonPopupVisible]); + + PowerOffTimeout = 30000; + + TriList.StringInput[UIStringJoin.StartActivityText].StringValue = + "Tap Share to begin"; + } + + /// + /// + /// + public override void Show() + { + if (CurrentRoom == null) + { + Debug.Console(1, "ERROR: AVUIFunctionsDriver, Cannot show. No room assigned"); + return; + } + + var roomConf = CurrentRoom.Config; + + TriList.SetString(UIStringJoin.CurrentRoomName, CurrentRoom.Name); + + if (Config.HeaderStyle.ToLower() == CrestronTouchpanelPropertiesConfig.Habanero) + { + TriList.SetSigFalseAction(UIBoolJoin.HeaderRoomButtonPress, () => + PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.RoomHeaderPageVisible)); + } + else if (Config.HeaderStyle.ToLower() == CrestronTouchpanelPropertiesConfig.Verbose) + { + // room name on join 1, concat phone and sip on join 2, no button method + //var addr = roomConf.Addresses; + //if (addr == null) // protect from missing values by using default empties + // addr = new EssentialsRoomAddressPropertiesConfig(); + //// empty string when either missing, pipe when both showing + //TriList.SetString(UIStringJoin.RoomAddressPipeText, + // (string.IsNullOrEmpty(addr.PhoneNumber.Trim()) + // || string.IsNullOrEmpty(addr.SipAddress.Trim())) ? "" : " | "); + //TriList.SetString(UIStringJoin.RoomPhoneText, addr.PhoneNumber); + //TriList.SetString(UIStringJoin.RoomSipText, addr.SipAddress); + } + + TriList.SetBool(UIBoolJoin.DateAndTimeVisible, Config.ShowDate && Config.ShowTime); + TriList.SetBool(UIBoolJoin.DateOnlyVisible, Config.ShowDate && !Config.ShowTime); + TriList.SetBool(UIBoolJoin.TimeOnlyVisible, !Config.ShowDate && Config.ShowTime); + + TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, true); + TriList.BooleanInput[UIBoolJoin.ActivityFooterVisible].BoolValue = true; + + // Default to showing rooms/sources now. + if (CurrentRoom.OnFeedback.BoolValue) + { + TriList.SetBool(UIBoolJoin.TapToBeginVisible, false); + SetupActivityFooterWhenRoomOn(); + } + else + { + TriList.SetBool(UIBoolJoin.StartPageVisible, true); + TriList.SetBool(UIBoolJoin.TapToBeginVisible, true); + SetupActivityFooterWhenRoomOff(); + } + ShowCurrentDisplayModeSigsInUse(); + + // Attach actions + TriList.SetSigFalseAction(UIBoolJoin.VolumeButtonPopupPress, VolumeButtonsTogglePress); + + // Generic "close" button for popup modals + TriList.SetSigFalseAction(UIBoolJoin.InterlockedModalClosePress, PopupInterlock.HideAndClear); + + // Volume related things + TriList.SetSigFalseAction(UIBoolJoin.VolumeDefaultPress, () => CurrentRoom.SetDefaultLevels()); + TriList.SetString(UIStringJoin.AdvancedVolumeSlider1Text, "Room"); + + //TriList.SetSigFalseAction(UIBoolJoin.RoomHeaderButtonPress, () => + // ShowInterlockedModal(UIBoolJoin.RoomHeaderPageVisible)); + + + //if(TriList is CrestronApp) + // TriList.BooleanInput[UIBoolJoin.GearButtonVisible].BoolValue = false; + //else + // TriList.BooleanInput[UIBoolJoin.GearButtonVisible].BoolValue = true; + + // power-related functions + // Note: some of these are not directly-related to the huddle space UI, but are held over + // in case + TriList.SetSigFalseAction(UIBoolJoin.ShowPowerOffPress, EndMeetingPress); + + TriList.SetSigFalseAction(UIBoolJoin.DisplayPowerTogglePress, () => + { + if (CurrentRoom != null && CurrentRoom.DefaultDisplay is IPower) + (CurrentRoom.DefaultDisplay as IPower).PowerToggle(); + }); + + base.Show(); + } + + /// + /// + /// + public void EndMeetingPress() + { + if (!CurrentRoom.OnFeedback.BoolValue + || CurrentRoom.ShutdownPromptTimer.IsRunningFeedback.BoolValue) + return; + + CurrentRoom.StartShutdown(eShutdownType.Manual); + } + + /// + /// Reveals the tech page and puts away anything that's in the way. + /// + public void ShowTech() + { + PopupInterlock.HideAndClear(); + TechDriver.Show(); + } + + /// + /// + /// + void ShowLogo() + { + if (CurrentRoom.LogoUrl == null) + { + TriList.SetBool(UIBoolJoin.LogoDefaultVisible, true); + TriList.SetBool(UIBoolJoin.LogoUrlVisible, false); + } + else + { + TriList.SetBool(UIBoolJoin.LogoDefaultVisible, false); + TriList.SetBool(UIBoolJoin.LogoUrlVisible, true); + TriList.SetString(UIStringJoin.LogoUrl, _CurrentRoom.LogoUrl); + } + } + + /// + /// + /// + void HideLogo() + { + TriList.SetBool(UIBoolJoin.LogoDefaultVisible, false); + TriList.SetBool(UIBoolJoin.LogoUrlVisible, false); + } + + /// + /// + /// + public override void Hide() + { + HideAndClearCurrentDisplayModeSigsInUse(); + TriList.BooleanInput[UIBoolJoin.TopBarHabaneroDynamicVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.ActivityFooterVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.TapToBeginVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; + //TriList.BooleanInput[UIBoolJoin.StagingPageVisible].BoolValue = false; + VolumeButtonsPopupFeedback.ClearNow(); + //CancelPowerOff(); + + base.Hide(); + } + + /// + /// Reveals a message on the notification ribbon until cleared + /// + /// Text to display + /// Time in ms to display. 0 to keep on screen + public void ShowNotificationRibbon(string message, int timeout) + { + TriList.SetString(UIStringJoin.NotificationRibbonText, message); + TriList.SetBool(UIBoolJoin.NotificationRibbonVisible, true); + if (timeout > 0) + { + if (RibbonTimer != null) + RibbonTimer.Stop(); + RibbonTimer = new CTimer(o => + { + TriList.SetBool(UIBoolJoin.NotificationRibbonVisible, false); + RibbonTimer = null; + }, timeout); + } + } + + /// + /// Hides the notification ribbon + /// + public void HideNotificationRibbon() + { + TriList.SetBool(UIBoolJoin.NotificationRibbonVisible, false); + if (RibbonTimer != null) + { + RibbonTimer.Stop(); + RibbonTimer = null; + } + } + + /// + /// Shows the various "modes" that this driver controls. Presentation, Setup page + /// + /// + public void ShowMode(UiDisplayMode mode) + { + //Clear whatever is showing now. + HideAndClearCurrentDisplayModeSigsInUse(); + CurrentDisplayMode = mode; + switch (mode) + { + case UiDisplayMode.PresentationMode: + // show start page or staging... + if (CurrentRoom.OnFeedback.BoolValue) + { + TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = true; + TriList.BooleanInput[UIBoolJoin.TapToBeginVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; + } + else + { + TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = true; + TriList.BooleanInput[UIBoolJoin.TapToBeginVisible].BoolValue = true; + TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; + } + // Date/time + if (Config.ShowDate && Config.ShowTime) + { + TriList.BooleanInput[UIBoolJoin.DateAndTimeVisible].BoolValue = true; + TriList.BooleanInput[UIBoolJoin.DateOnlyVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.TimeOnlyVisible].BoolValue = false; + } + else + { + TriList.BooleanInput[UIBoolJoin.DateAndTimeVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.DateOnlyVisible].BoolValue = Config.ShowDate; + TriList.BooleanInput[UIBoolJoin.TimeOnlyVisible].BoolValue = Config.ShowTime; + } + + ShowCurrentDisplayModeSigsInUse(); + break; + } + } + + /// + /// When the room is off, set the footer SRL + /// + void SetupActivityFooterWhenRoomOff() + { + ActivityFooterSrl.Clear(); + ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(1, ActivityFooterSrl, 0, + b => { if (!b) ShareButtonPressed(); })); + ActivityFooterSrl.Count = 1; + TriList.UShortInput[UIUshortJoin.PresentationStagingCaretMode].UShortValue = 0; + ShareButtonSig.BoolValue = false; + } + + /// + /// Sets up the footer SRL for when the room is on + /// + void SetupActivityFooterWhenRoomOn() + { + ActivityFooterSrl.Clear(); + ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(1, ActivityFooterSrl, + 0, null)); + ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(2, ActivityFooterSrl, + 4, b => { if (!b) PowerButtonPressed(); })); + ActivityFooterSrl.Count = 2; + TriList.UShortInput[UIUshortJoin.PresentationStagingCaretMode].UShortValue = 1; + EndMeetingButtonSig = ActivityFooterSrl.BoolInputSig(2, 1); + ShareButtonSig.BoolValue = CurrentRoom.OnFeedback.BoolValue; + } + + /// + /// Attached to activity list share button + /// + void ShareButtonPressed() + { + ShareButtonSig.BoolValue = true; + TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = true; + TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = true; + // Run default source when room is off and share is pressed + if (!CurrentRoom.OnFeedback.BoolValue) + CurrentRoom.RunDefaultRoute(); + } + + + /// + /// Shows all sigs that are in CurrentDisplayModeSigsInUse + /// + void ShowCurrentDisplayModeSigsInUse() + { + foreach (var sig in CurrentDisplayModeSigsInUse) + sig.BoolValue = true; + } + + /// + /// Hides all CurrentDisplayModeSigsInUse sigs and clears the array + /// + void HideAndClearCurrentDisplayModeSigsInUse() + { + foreach (var sig in CurrentDisplayModeSigsInUse) + sig.BoolValue = false; + CurrentDisplayModeSigsInUse.Clear(); + } + + /// + /// Send the UI back depending on location, not used in huddle UI + /// + public override void BackButtonPressed() + { + switch (CurrentDisplayMode) + { + case UiDisplayMode.PresentationMode: + //CancelReturnToSourceTimer(); + BackToHome(); + break; + } + } + + /// + /// + /// + void BackToHome() + { + Hide(); + Parent.Show(); + } + + /// + /// Loads the appropriate Sigs into CurrentDisplayModeSigsInUse and shows them + /// + void ShowCurrentSource() + { + if (CurrentRoom.CurrentSourceInfo == null) + return; + + var uiDev = CurrentRoom.CurrentSourceInfo.SourceDevice as IUiDisplayInfo; + PageManager pm = null; + // If we need a page manager, get an appropriate one + if (uiDev != null) + { + TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; + // Got an existing page manager, get it + if (PageManagers.ContainsKey(uiDev)) + pm = PageManagers[uiDev]; + // Otherwise make an apporiate one + else if (uiDev is ISetTopBoxControls) + //pm = new SetTopBoxMediumPageManager(uiDev as ISetTopBoxControls, TriList); + pm = new SetTopBoxThreePanelPageManager(uiDev as ISetTopBoxControls, TriList); + else if (uiDev is IDiscPlayerControls) + pm = new DiscPlayerMediumPageManager(uiDev as IDiscPlayerControls, TriList); + else + pm = new DefaultPageManager(uiDev, TriList); + PageManagers[uiDev] = pm; + CurrentSourcePageManager = pm; + pm.Show(); + } + } + + /// + /// Called from button presses on source, where We can assume we want + /// to change to the proper screen. + /// + /// The key name of the route to run + void UiSelectSource(string key) + { + // Run the route and when it calls back, show the source + CurrentRoom.RunRouteAction(key, null); + } + + /// + /// + /// + public void PowerButtonPressed() + { + if (!CurrentRoom.OnFeedback.BoolValue + || CurrentRoom.ShutdownPromptTimer.IsRunningFeedback.BoolValue) + return; + + CurrentRoom.StartShutdown(eShutdownType.Manual); + } + + /// + /// + /// + /// + /// + void ShutdownPromptTimer_HasStarted(object sender, EventArgs e) + { + // Do we need to check where the UI is? No? + var timer = CurrentRoom.ShutdownPromptTimer; + EndMeetingButtonSig.BoolValue = true; + ShareButtonSig.BoolValue = false; + + if (CurrentRoom.ShutdownType == eShutdownType.Manual) + { + PowerDownModal = new ModalDialog(TriList); + var message = string.Format("Meeting will end in {0} seconds", CurrentRoom.ShutdownPromptSeconds); + + // Attach timer things to modal + CurrentRoom.ShutdownPromptTimer.TimeRemainingFeedback.OutputChange += ShutdownPromptTimer_TimeRemainingFeedback_OutputChange; + CurrentRoom.ShutdownPromptTimer.PercentFeedback.OutputChange += ShutdownPromptTimer_PercentFeedback_OutputChange; + + // respond to offs by cancelling dialog + var onFb = CurrentRoom.OnFeedback; + EventHandler offHandler = null; + offHandler = (o, a) => + { + if (!onFb.BoolValue) + { + EndMeetingButtonSig.BoolValue = false; + PowerDownModal.HideDialog(); + onFb.OutputChange -= offHandler; + //gauge.OutputChange -= gaugeHandler; + } + }; + onFb.OutputChange += offHandler; + + PowerDownModal.PresentModalDialog(2, "End Meeting", "Power", message, "Cancel", "End Meeting Now", true, true, + but => + { + if (but != 2) // any button except for End cancels + timer.Cancel(); + else + timer.Finish(); + }); + } + } + + /// + /// + /// + /// + /// + void ShutdownPromptTimer_HasFinished(object sender, EventArgs e) + { + EndMeetingButtonSig.BoolValue = false; + CurrentRoom.ShutdownPromptTimer.TimeRemainingFeedback.OutputChange -= ShutdownPromptTimer_TimeRemainingFeedback_OutputChange; + CurrentRoom.ShutdownPromptTimer.PercentFeedback.OutputChange -= ShutdownPromptTimer_PercentFeedback_OutputChange; + } + + /// + /// + /// + /// + /// + void ShutdownPromptTimer_WasCancelled(object sender, EventArgs e) + { + if (PowerDownModal != null) + PowerDownModal.HideDialog(); + EndMeetingButtonSig.BoolValue = false; + ShareButtonSig.BoolValue = CurrentRoom.OnFeedback.BoolValue; + + CurrentRoom.ShutdownPromptTimer.TimeRemainingFeedback.OutputChange += ShutdownPromptTimer_TimeRemainingFeedback_OutputChange; + CurrentRoom.ShutdownPromptTimer.PercentFeedback.OutputChange -= ShutdownPromptTimer_PercentFeedback_OutputChange; + } + + void ShutdownPromptTimer_TimeRemainingFeedback_OutputChange(object sender, EventArgs e) + { + + var message = string.Format("Meeting will end in {0} seconds", (sender as StringFeedback).StringValue); + TriList.StringInput[ModalDialog.MessageTextJoin].StringValue = message; + } + + void ShutdownPromptTimer_PercentFeedback_OutputChange(object sender, EventArgs e) + { + var value = (ushort)((sender as IntFeedback).UShortValue * 65535 / 100); + TriList.UShortInput[ModalDialog.TimerGaugeJoin].UShortValue = value; + } + + /// + /// + /// + void CancelPowerOffTimer() + { + if (PowerOffTimer != null) + { + PowerOffTimer.Stop(); + PowerOffTimer = null; + } + } + + /// + /// + /// + void VolumeButtonsTogglePress() + { + if (VolumeButtonsPopupFeedback.BoolValue) + VolumeButtonsPopupFeedback.ClearNow(); + else + { + // Trigger the popup + VolumeButtonsPopupFeedback.BoolValue = true; + VolumeButtonsPopupFeedback.BoolValue = false; + } + } + + /// + /// + /// + /// + public void VolumeUpPress(bool state) + { + // extend timeouts + if (ShowVolumeGauge) + VolumeGaugeFeedback.BoolValue = state; + VolumeButtonsPopupFeedback.BoolValue = state; + if (CurrentRoom.CurrentVolumeControls != null) + CurrentRoom.CurrentVolumeControls.VolumeUp(state); + } + + /// + /// + /// + /// + public void VolumeDownPress(bool state) + { + // extend timeouts + if (ShowVolumeGauge) + VolumeGaugeFeedback.BoolValue = state; + VolumeButtonsPopupFeedback.BoolValue = state; + if (CurrentRoom.CurrentVolumeControls != null) + CurrentRoom.CurrentVolumeControls.VolumeDown(state); + } + + /// + /// Helper for property setter. Sets the panel to the given room, latching up all functionality + /// + void SetCurrentRoom(EssentialsHuddleSpaceRoom room) + { + if (_CurrentRoom == room) return; + // Disconnect current (probably never called) + if (_CurrentRoom != null) + { + // Disconnect current room + _CurrentRoom.CurrentVolumeDeviceChange -= this.CurrentRoom_CurrentAudioDeviceChange; + ClearAudioDeviceConnections(); + _CurrentRoom.CurrentSingleSourceChange -= this.CurrentRoom_SourceInfoChange; + DisconnectSource(_CurrentRoom.CurrentSourceInfo); + _CurrentRoom.ShutdownPromptTimer.HasStarted -= ShutdownPromptTimer_HasStarted; + _CurrentRoom.ShutdownPromptTimer.HasFinished -= ShutdownPromptTimer_HasFinished; + _CurrentRoom.ShutdownPromptTimer.WasCancelled -= ShutdownPromptTimer_WasCancelled; + + _CurrentRoom.OnFeedback.OutputChange += CurrentRoom_OnFeedback_OutputChange; + _CurrentRoom.IsWarmingUpFeedback.OutputChange -= CurrentRoom_IsWarmingFeedback_OutputChange; + _CurrentRoom.IsCoolingDownFeedback.OutputChange -= IsCoolingDownFeedback_OutputChange; + } + + _CurrentRoom = room; + + if (_CurrentRoom != null) + { + // get the source list config and set up the source list + var config = ConfigReader.ConfigObject.SourceLists; + if (config.ContainsKey(_CurrentRoom.SourceListKey)) + { + var srcList = config[_CurrentRoom.SourceListKey]; + // Setup sources list + uint i = 1; // counter for UI list + foreach (var kvp in srcList) + { + var srcConfig = kvp.Value; + if (!srcConfig.IncludeInSourceList) // Skip sources marked this way + continue; + + var actualSource = DeviceManager.GetDeviceForKey(srcConfig.SourceKey) as Device; + if (actualSource == null) + { + Debug.Console(1, "Cannot assign missing source '{0}' to source UI list", + srcConfig.SourceKey); + continue; + } + var routeKey = kvp.Key; + var item = new SubpageReferenceListSourceItem(i++, SourcesSrl, srcConfig, + b => { if (!b) UiSelectSource(routeKey); }); + SourcesSrl.AddItem(item); // add to the SRL + item.RegisterForSourceChange(_CurrentRoom); + } + SourcesSrl.Count = (ushort)(i - 1); + } + // Name and logo + TriList.StringInput[UIStringJoin.CurrentRoomName].StringValue = _CurrentRoom.Name; + if (_CurrentRoom.LogoUrl == null) + { + TriList.BooleanInput[UIBoolJoin.LogoDefaultVisible].BoolValue = true; + TriList.BooleanInput[UIBoolJoin.LogoUrlVisible].BoolValue = false; + } + else + { + TriList.BooleanInput[UIBoolJoin.LogoDefaultVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.LogoUrlVisible].BoolValue = true; + TriList.StringInput[UIStringJoin.LogoUrl].StringValue = _CurrentRoom.LogoUrl; + } + + // Shutdown timer + _CurrentRoom.ShutdownPromptTimer.HasStarted += ShutdownPromptTimer_HasStarted; + _CurrentRoom.ShutdownPromptTimer.HasFinished += ShutdownPromptTimer_HasFinished; + _CurrentRoom.ShutdownPromptTimer.WasCancelled += ShutdownPromptTimer_WasCancelled; + + // Link up all the change events from the room + _CurrentRoom.OnFeedback.OutputChange += CurrentRoom_OnFeedback_OutputChange; + CurrentRoom_SyncOnFeedback(); + _CurrentRoom.IsWarmingUpFeedback.OutputChange += CurrentRoom_IsWarmingFeedback_OutputChange; + _CurrentRoom.IsCoolingDownFeedback.OutputChange += IsCoolingDownFeedback_OutputChange; + + _CurrentRoom.CurrentVolumeDeviceChange += CurrentRoom_CurrentAudioDeviceChange; + RefreshAudioDeviceConnections(); + _CurrentRoom.CurrentSingleSourceChange += CurrentRoom_SourceInfoChange; + RefreshSourceInfo(); + + (Parent as EssentialsPanelMainInterfaceDriver).HeaderDriver.SetupHeaderButtons(this, CurrentRoom); + } + else + { + // Clear sigs that need to be + TriList.StringInput[UIStringJoin.CurrentRoomName].StringValue = "Select a room"; + } + } + + //void SetupHeaderButtons() + //{ + // HeaderButtonsAreSetUp = false; + + // TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, true); + + // var roomConf = CurrentRoom.Config; + + // // Gear + // TriList.SetString(UIStringJoin.HeaderButtonIcon5, "Gear"); + // TriList.SetSigHeldAction(UIBoolJoin.HeaderIcon5Press, 2000, + // ShowTech, + // null, + // () => + // { + // if (CurrentRoom.OnFeedback.BoolValue) + // PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.VolumesPageVisible); + // else + // PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.VolumesPagePowerOffVisible); + // }); + // TriList.SetSigFalseAction(UIBoolJoin.TechExitButton, () => + // PopupInterlock.HideAndClear()); + + // // Help button and popup + // if (CurrentRoom.Config.Help != null) + // { + // TriList.SetString(UIStringJoin.HelpMessage, roomConf.Help.Message); + // TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, roomConf.Help.ShowCallButton); + // TriList.SetString(UIStringJoin.HelpPageCallButtonText, roomConf.Help.CallButtonText); + // if (roomConf.Help.ShowCallButton) + // TriList.SetSigFalseAction(UIBoolJoin.HelpPageShowCallButtonPress, () => { }); // ************ FILL IN + // else + // TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress); + // } + // else // older config + // { + // TriList.SetString(UIStringJoin.HelpMessage, CurrentRoom.Config.HelpMessage); + // TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, false); + // TriList.SetString(UIStringJoin.HelpPageCallButtonText, null); + // TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress); + // } + // TriList.SetString(UIStringJoin.HeaderButtonIcon4, "Help"); + // TriList.SetSigFalseAction(UIBoolJoin.HeaderIcon4Press, () => + // { + // string message = null; + // var room = DeviceManager.GetDeviceForKey(Config.DefaultRoomKey) + // as EssentialsHuddleSpaceRoom; + // if (room != null) + // message = room.Config.HelpMessage; + // else + // message = "Sorry, no help message available. No room connected."; + // //TriList.StringInput[UIStringJoin.HelpMessage].StringValue = message; + // PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HelpPageVisible); + // }); + // uint nextJoin = 3953; + + // //// Calendar button + // //if (_CurrentRoom.ScheduleSource != null) + // //{ + // // TriList.SetString(nextJoin, "Calendar"); + // // TriList.SetSigFalseAction(nextJoin, CalendarPress); + + // // nextJoin--; + // //} + + // //nextJoin--; + + // // blank any that remain + // for (var i = nextJoin; i > 3950; i--) + // { + // TriList.SetString(i, "Blank"); + // TriList.SetSigFalseAction(i, () => { }); + // } + + // HeaderButtonsAreSetUp = true; + //} + + + /// + /// For room on/off changes + /// + void CurrentRoom_OnFeedback_OutputChange(object sender, EventArgs e) + { + CurrentRoom_SyncOnFeedback(); + } + + void CurrentRoom_SyncOnFeedback() + { + var value = _CurrentRoom.OnFeedback.BoolValue; + //Debug.Console(2, CurrentRoom, "UI: Is on event={0}", value); + TriList.BooleanInput[UIBoolJoin.RoomIsOn].BoolValue = value; + + if (value) //ON + { + SetupActivityFooterWhenRoomOn(); + TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = true; + TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.VolumeSingleMute1Visible].BoolValue = true; + + } + else + { + SetupActivityFooterWhenRoomOff(); + ShowLogo(); + TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = true; + TriList.BooleanInput[UIBoolJoin.VolumeSingleMute1Visible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = false; + } + } + + /// + /// + /// + void CurrentRoom_IsWarmingFeedback_OutputChange(object sender, EventArgs e) + { + if (CurrentRoom.IsWarmingUpFeedback.BoolValue) + { + ShowNotificationRibbon("Room is powering on. Please wait...", 0); + } + else + { + ShowNotificationRibbon("Room is powered on. Welcome.", 2000); + } + } + + + void IsCoolingDownFeedback_OutputChange(object sender, EventArgs e) + { + if (CurrentRoom.IsCoolingDownFeedback.BoolValue) + { + ShowNotificationRibbon("Room is powering off. Please wait.", 0); + } + else + { + HideNotificationRibbon(); + } + } + + /// + /// Hides source for provided source info + /// + /// + void DisconnectSource(SourceListItem previousInfo) + { + if (previousInfo == null) return; + + // Hide whatever is showing + if (IsVisible) + { + if (CurrentSourcePageManager != null) + { + CurrentSourcePageManager.Hide(); + CurrentSourcePageManager = null; + } + } + + if (previousInfo == null) return; + var previousDev = previousInfo.SourceDevice; + + // device type interfaces + if (previousDev is ISetTopBoxControls) + (previousDev as ISetTopBoxControls).UnlinkButtons(TriList); + // common interfaces + if (previousDev is IChannel) + (previousDev as IChannel).UnlinkButtons(TriList); + if (previousDev is IColor) + (previousDev as IColor).UnlinkButtons(TriList); + if (previousDev is IDPad) + (previousDev as IDPad).UnlinkButtons(TriList); + if (previousDev is IDvr) + (previousDev as IDvr).UnlinkButtons(TriList); + if (previousDev is INumericKeypad) + (previousDev as INumericKeypad).UnlinkButtons(TriList); + if (previousDev is IPower) + (previousDev as IPower).UnlinkButtons(TriList); + if (previousDev is ITransport) + (previousDev as ITransport).UnlinkButtons(TriList); + //if (previousDev is IRadio) + // (previousDev as IRadio).UnlinkButtons(this); + } + + /// + /// Refreshes and shows the room's current source + /// + void RefreshSourceInfo() + { + var routeInfo = CurrentRoom.CurrentSourceInfo; + // This will show off popup too + if (this.IsVisible) + ShowCurrentSource(); + + if (routeInfo == null)// || !CurrentRoom.OnFeedback.BoolValue) + { + // Check for power off and insert "Room is off" + TriList.StringInput[UIStringJoin.CurrentSourceName].StringValue = "Room is off"; + TriList.StringInput[UIStringJoin.CurrentSourceIcon].StringValue = "Power"; + this.Hide(); + Parent.Show(); + return; + } + else if (CurrentRoom.CurrentSourceInfo != null) + { + TriList.StringInput[UIStringJoin.CurrentSourceName].StringValue = routeInfo.PreferredName; + TriList.StringInput[UIStringJoin.CurrentSourceIcon].StringValue = routeInfo.Icon; // defaults to "blank" + } + else + { + TriList.StringInput[UIStringJoin.CurrentSourceName].StringValue = "---"; + TriList.StringInput[UIStringJoin.CurrentSourceIcon].StringValue = "Blank"; + } + + // Connect controls + if (routeInfo.SourceDevice != null) + ConnectControlDeviceMethods(routeInfo.SourceDevice); + } + + /// + /// Attach the source to the buttons and things + /// + void ConnectControlDeviceMethods(Device dev) + { + if(dev is ISetTopBoxControls) + (dev as ISetTopBoxControls).LinkButtons(TriList); + if (dev is IChannel) + (dev as IChannel).LinkButtons(TriList); + if (dev is IColor) + (dev as IColor).LinkButtons(TriList); + if (dev is IDPad) + (dev as IDPad).LinkButtons(TriList); + if (dev is IDvr) + (dev as IDvr).LinkButtons(TriList); + if (dev is INumericKeypad) + (dev as INumericKeypad).LinkButtons(TriList); + if (dev is IPower) + (dev as IPower).LinkButtons(TriList); + if (dev is ITransport) + (dev as ITransport).LinkButtons(TriList); + //if (dev is IRadio) + // (dev as IRadio).LinkButtons(this); // +++++++++++++ Make part of this into page manager + + //if (dev is ICustomFunctions) + //{ + // var custBridge = (dev as ICustomFunctions).GetCustomBridge(); + // custBridge.Link(this.Remote); + } + + /// + /// Detaches the buttons and feedback from the room's current audio device + /// + void ClearAudioDeviceConnections() + { + TriList.ClearBoolSigAction(UIBoolJoin.VolumeUpPress); + TriList.ClearBoolSigAction(UIBoolJoin.VolumeDownPress); + TriList.ClearBoolSigAction(UIBoolJoin.Volume1ProgramMutePressAndFB); + + var fDev = CurrentRoom.CurrentVolumeControls as IBasicVolumeWithFeedback; + if (fDev != null) + { + TriList.ClearUShortSigAction(UIUshortJoin.VolumeSlider1Value); + fDev.VolumeLevelFeedback.UnlinkInputSig( + TriList.UShortInput[UIUshortJoin.VolumeSlider1Value]); + } + } + + /// + /// Attaches the buttons and feedback to the room's current audio device + /// + void RefreshAudioDeviceConnections() + { + var dev = CurrentRoom.CurrentVolumeControls; + if (dev != null) // connect buttons + { + TriList.SetBoolSigAction(UIBoolJoin.VolumeUpPress, VolumeUpPress); + TriList.SetBoolSigAction(UIBoolJoin.VolumeDownPress, VolumeDownPress); + TriList.SetSigFalseAction(UIBoolJoin.Volume1ProgramMutePressAndFB, dev.MuteToggle); + } + + var fbDev = dev as IBasicVolumeWithFeedback; + if (fbDev == null) // this should catch both IBasicVolume and IBasicVolumeWithFeeback + TriList.UShortInput[UIUshortJoin.VolumeSlider1Value].UShortValue = 0; + else + { + // slider + TriList.SetUShortSigAction(UIUshortJoin.VolumeSlider1Value, fbDev.SetVolume); + // feedbacks + fbDev.MuteFeedback.LinkInputSig(TriList.BooleanInput[UIBoolJoin.Volume1ProgramMutePressAndFB]); + fbDev.VolumeLevelFeedback.LinkInputSig( + TriList.UShortInput[UIUshortJoin.VolumeSlider1Value]); + } + } + + /// + /// Handler for when the room's volume control device changes + /// + void CurrentRoom_CurrentAudioDeviceChange(object sender, VolumeDeviceChangeEventArgs args) + { + if (args.Type == ChangeType.WillChange) + ClearAudioDeviceConnections(); + else // did change + RefreshAudioDeviceConnections(); + } + + /// + /// Handles source change + /// + void CurrentRoom_SourceInfoChange(EssentialsRoomBase room, + SourceListItem info, ChangeType change) + { + if (change == ChangeType.WillChange) + DisconnectSource(info); + else + RefreshSourceInfo(); + } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs b/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs similarity index 97% rename from Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs rename to PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs index cb89b329..02221d52 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs +++ b/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs @@ -1,325 +1,325 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro.DeviceSupport; - -using PepperDash.Core; -using PepperDash.Essentials; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.SmartObjects; -using PepperDash.Essentials.Core.Touchpanels.Keyboards; -using PepperDash.Essentials.Devices.Displays; -using PepperDash.Essentials.Room.Config; - -namespace PepperDash.Essentials.UIDrivers -{ - public class EssentialsHuddleTechPageDriver : PanelDriverBase - { - /// - /// - /// - SmartObjectDynamicList MenuList; - /// - /// - /// - SubpageReferenceList StatusList; - /// - /// The list of display controls - /// - SubpageReferenceList DisplayList; - /// - /// References lines in the list against device instances - /// - Dictionary StatusListDeviceIndexes; - /// - /// - /// - JoinedSigInterlock PagesInterlock; - - /// - /// 1 - /// - public const uint JoinText = 1; - - CTimer PinAuthorizedTimer; - - EssentialsRoomTechConfig Config; - - StringBuilder PinEntryBuilder = new StringBuilder(4); - - bool IsAuthorized; - - SmartObjectNumeric PinKeypad; - - /// - /// - /// - /// - /// - public EssentialsHuddleTechPageDriver(BasicTriListWithSmartObject trilist, EssentialsRoomTechConfig config) - : base(trilist) - { - Config = config; - - PagesInterlock = new JoinedSigInterlock(trilist); - PagesInterlock.SetButDontShow(UIBoolJoin.TechSystemStatusVisible); - - trilist.SetSigFalseAction(UIBoolJoin.TechExitButton, Hide); - - MenuList = new SmartObjectDynamicList(trilist.SmartObjects[UISmartObjectJoin.TechMenuList], - true, 3100); - - MenuList.SetFeedback(1, true); // initial fb - ushort count = 0; - - MenuList.SetItemMainText(1, "System Status"); - MenuList.SetItemButtonAction(1, b => { - if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechSystemStatusVisible); - MenuList.SetFeedback(1, true); - }); - - MenuList.SetItemMainText(2, "Display Controls"); - MenuList.SetItemButtonAction(2, b => { - if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechDisplayControlsVisible); - MenuList.SetFeedback(2, true); - }); - - count = 2; - - // Don't show panel setup on iPad or xpanel - if (TriList is Crestron.SimplSharpPro.DeviceSupport.TswFt5Button) - { - count++; - MenuList.SetItemMainText(count, "Panel Setup"); - MenuList.SetItemButtonAction(count, b => - { - if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechPanelSetupVisible); - MenuList.SetFeedback(count, true); - }); - } - - MenuList.Count = count; - BuildStatusList(); - BuildDisplayList(); - SetupPinModal(); - } - - /// - /// - /// - public override void Show() - { - // divert to PIN if we need auth - if (IsAuthorized) - { - // Cancel the auth timer so we don't deauth after coming back in - if (PinAuthorizedTimer != null) - PinAuthorizedTimer.Stop(); - - TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, true); - PagesInterlock.Show(); - base.Show(); - } - else - { - TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, true); - } - } - - /// - /// - /// - public override void Hide() - { - // Leave it authorized for 60 seconds. - if (IsAuthorized) - PinAuthorizedTimer = new CTimer(o => { - IsAuthorized = false; - PinAuthorizedTimer = null; - }, 60000); - TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, false); - PagesInterlock.Hide(); - base.Hide(); - } - - /// - /// Wire up the keypad and buttons - /// - void SetupPinModal() - { - TriList.SetSigFalseAction(UIBoolJoin.PinDialogCancelPress, CancelPinDialog); - PinKeypad = new SmartObjectNumeric(TriList.SmartObjects[UISmartObjectJoin.TechPinDialogKeypad], true); - PinKeypad.Digit0.UserObject = new Action(b => { if (b)DialPinDigit('0'); }); - PinKeypad.Digit1.UserObject = new Action(b => { if (b)DialPinDigit('1'); }); - PinKeypad.Digit2.UserObject = new Action(b => { if (b)DialPinDigit('2'); }); - PinKeypad.Digit3.UserObject = new Action(b => { if (b)DialPinDigit('3'); }); - PinKeypad.Digit4.UserObject = new Action(b => { if (b)DialPinDigit('4'); }); - PinKeypad.Digit5.UserObject = new Action(b => { if (b)DialPinDigit('5'); }); - PinKeypad.Digit6.UserObject = new Action(b => { if (b)DialPinDigit('6'); }); - PinKeypad.Digit7.UserObject = new Action(b => { if (b)DialPinDigit('7'); }); - PinKeypad.Digit8.UserObject = new Action(b => { if (b)DialPinDigit('8'); }); - PinKeypad.Digit9.UserObject = new Action(b => { if (b)DialPinDigit('9'); }); - } - - /// - /// - /// - /// - void DialPinDigit(char d) - { - PinEntryBuilder.Append(d); - var len = PinEntryBuilder.Length; - SetPinDotsFeedback(len); - - // check it! - if (len == 4) - { - if (Config.Password == PinEntryBuilder.ToString()) - { - IsAuthorized = true; - SetPinDotsFeedback(0); - TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, false); - Show(); - } - else - { - SetPinDotsFeedback(0); - TriList.SetBool(UIBoolJoin.PinDialogErrorVisible, true); - new CTimer(o => - { - TriList.SetBool(UIBoolJoin.PinDialogErrorVisible, false); - }, 1500); - } - - PinEntryBuilder.Remove(0, len); // clear it either way - } - } - - /// - /// Draws the dots as pin is entered - /// - /// - void SetPinDotsFeedback(int len) - { - TriList.SetBool(UIBoolJoin.PinDialogDot1, len >= 1); - TriList.SetBool(UIBoolJoin.PinDialogDot2, len >= 2); - TriList.SetBool(UIBoolJoin.PinDialogDot3, len >= 3); - TriList.SetBool(UIBoolJoin.PinDialogDot4, len == 4); - - } - - /// - /// Does what it says - /// - void CancelPinDialog() - { - PinEntryBuilder.Remove(0, PinEntryBuilder.Length); - TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, false); - } - - - /// - /// - /// - void BuildStatusList() - { - StatusList = new SubpageReferenceList(TriList, UISmartObjectJoin.TechStatusList, 3, 3, 3); - StatusListDeviceIndexes = new Dictionary(); - uint i = 0; - foreach (var d in DeviceManager.AllDevices) - { - // make sure it is both ICommunicationMonitor and a Device - var sd = d as ICommunicationMonitor; - if (sd == null) - continue; - var dd = sd as Device; - if(dd == null) - continue; - i++; - StatusList.StringInputSig(i, 1).StringValue = dd.Name; - StatusList.UShortInputSig(i, 1).UShortValue = (ushort)sd.CommunicationMonitor.Status; - StatusListDeviceIndexes.Add(sd, i); - sd.CommunicationMonitor.StatusChange += CommunicationMonitor_StatusChange ; - } - StatusList.Count = (ushort)i; - } - - /// - /// Builds the list of display controls - /// - void BuildDisplayList() - { - DisplayList = new SubpageReferenceList(TriList, UISmartObjectJoin.TechDisplayControlsList, 10, 3, 3); - - var devKeys = ConfigReader.ConfigObject.Devices.Where(d => - d.Group.Equals("display", StringComparison.OrdinalIgnoreCase) - || d.Group.Equals("projector", StringComparison.OrdinalIgnoreCase)) - .Select(dd => dd.Key); - var disps = DeviceManager.AllDevices.Where(d => - devKeys.Contains(d.Key)); - ushort i = 0; - foreach (var disp in disps) - { - var display = disp as DisplayBase; - if (display != null) - { - i++; - DisplayList.StringInputSig(i, 1).StringValue = display.Name; - DisplayList.GetBoolFeedbackSig(i, 1).SetSigFalseAction(display.PowerOn); - DisplayList.GetBoolFeedbackSig(i, 2).SetSigFalseAction(display.PowerOff); - if (display is TwoWayDisplayBase) - { - var powerOnSig = DisplayList.BoolInputSig(i, 1); - (display as TwoWayDisplayBase).PowerIsOnFeedback.LinkInputSig(powerOnSig); - - var powerOffSig = DisplayList.BoolInputSig(1, 2); - (display as TwoWayDisplayBase).PowerIsOnFeedback.LinkComplementInputSig(powerOffSig); - } - DisplayList.GetBoolFeedbackSig(i, 3).SetSigFalseAction(() => - { if (display is IInputHdmi1) (display as IInputHdmi1).InputHdmi1(); }); - DisplayList.GetBoolFeedbackSig(i, 4).SetSigFalseAction(() => - { if (display is IInputHdmi2) (display as IInputHdmi2).InputHdmi2(); }); - DisplayList.GetBoolFeedbackSig(i, 5).SetSigFalseAction(() => - { if (display is IInputHdmi3) (display as IInputHdmi3).InputHdmi3(); }); - //DisplayList.GetBoolFeedbackSig(i, 6).SetSigFalseAction(() => - //{ if (display is IInputHdmi4) (display as IInputHdmi4).InputHdmi4(); }); - DisplayList.GetBoolFeedbackSig(i, 6).SetSigFalseAction(() => - { if (display is IInputDisplayPort1) (display as IInputDisplayPort1).InputDisplayPort1(); }); - - - // Figure out some way to provide current input feedback - if (display is TwoWayDisplayBase) - { - (display as TwoWayDisplayBase).CurrentInputFeedback.OutputChange += CurrentInputFeedback_OutputChange; - } - } - - - } - - DisplayList.Count = i; - } - - - void CurrentInputFeedback_OutputChange(object sender, EventArgs e) - { - - } - - /// - /// - /// - void CommunicationMonitor_StatusChange(object sender, MonitorStatusChangeEventArgs e) - { - var c = sender as ICommunicationMonitor; - if (StatusListDeviceIndexes.ContainsKey(c)) - { - var i = StatusListDeviceIndexes[c]; - StatusList.UShortInputSig(i, 1).UShortValue = (ushort)e.Status; - } - } - } +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Core; +using PepperDash.Essentials; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.SmartObjects; +using PepperDash.Essentials.Core.Touchpanels.Keyboards; +using PepperDash.Essentials.Devices.Displays; +using PepperDash.Essentials.Room.Config; + +namespace PepperDash.Essentials.UIDrivers +{ + public class EssentialsHuddleTechPageDriver : PanelDriverBase + { + /// + /// + /// + SmartObjectDynamicList MenuList; + /// + /// + /// + SubpageReferenceList StatusList; + /// + /// The list of display controls + /// + SubpageReferenceList DisplayList; + /// + /// References lines in the list against device instances + /// + Dictionary StatusListDeviceIndexes; + /// + /// + /// + JoinedSigInterlock PagesInterlock; + + /// + /// 1 + /// + public const uint JoinText = 1; + + CTimer PinAuthorizedTimer; + + EssentialsRoomTechConfig Config; + + StringBuilder PinEntryBuilder = new StringBuilder(4); + + bool IsAuthorized; + + SmartObjectNumeric PinKeypad; + + /// + /// + /// + /// + /// + public EssentialsHuddleTechPageDriver(BasicTriListWithSmartObject trilist, EssentialsRoomTechConfig config) + : base(trilist) + { + Config = config; + + PagesInterlock = new JoinedSigInterlock(trilist); + PagesInterlock.SetButDontShow(UIBoolJoin.TechSystemStatusVisible); + + trilist.SetSigFalseAction(UIBoolJoin.TechExitButton, Hide); + + MenuList = new SmartObjectDynamicList(trilist.SmartObjects[UISmartObjectJoin.TechMenuList], + true, 3100); + + MenuList.SetFeedback(1, true); // initial fb + ushort count = 0; + + MenuList.SetItemMainText(1, "System Status"); + MenuList.SetItemButtonAction(1, b => { + if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechSystemStatusVisible); + MenuList.SetFeedback(1, true); + }); + + MenuList.SetItemMainText(2, "Display Controls"); + MenuList.SetItemButtonAction(2, b => { + if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechDisplayControlsVisible); + MenuList.SetFeedback(2, true); + }); + + count = 2; + + // Don't show panel setup on iPad or xpanel + if (TriList is Crestron.SimplSharpPro.DeviceSupport.TswFt5Button) + { + count++; + MenuList.SetItemMainText(count, "Panel Setup"); + MenuList.SetItemButtonAction(count, b => + { + if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechPanelSetupVisible); + MenuList.SetFeedback(count, true); + }); + } + + MenuList.Count = count; + BuildStatusList(); + BuildDisplayList(); + SetupPinModal(); + } + + /// + /// + /// + public override void Show() + { + // divert to PIN if we need auth + if (IsAuthorized) + { + // Cancel the auth timer so we don't deauth after coming back in + if (PinAuthorizedTimer != null) + PinAuthorizedTimer.Stop(); + + TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, true); + PagesInterlock.Show(); + base.Show(); + } + else + { + TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, true); + } + } + + /// + /// + /// + public override void Hide() + { + // Leave it authorized for 60 seconds. + if (IsAuthorized) + PinAuthorizedTimer = new CTimer(o => { + IsAuthorized = false; + PinAuthorizedTimer = null; + }, 60000); + TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, false); + PagesInterlock.Hide(); + base.Hide(); + } + + /// + /// Wire up the keypad and buttons + /// + void SetupPinModal() + { + TriList.SetSigFalseAction(UIBoolJoin.PinDialogCancelPress, CancelPinDialog); + PinKeypad = new SmartObjectNumeric(TriList.SmartObjects[UISmartObjectJoin.TechPinDialogKeypad], true); + PinKeypad.Digit0.UserObject = new Action(b => { if (b)DialPinDigit('0'); }); + PinKeypad.Digit1.UserObject = new Action(b => { if (b)DialPinDigit('1'); }); + PinKeypad.Digit2.UserObject = new Action(b => { if (b)DialPinDigit('2'); }); + PinKeypad.Digit3.UserObject = new Action(b => { if (b)DialPinDigit('3'); }); + PinKeypad.Digit4.UserObject = new Action(b => { if (b)DialPinDigit('4'); }); + PinKeypad.Digit5.UserObject = new Action(b => { if (b)DialPinDigit('5'); }); + PinKeypad.Digit6.UserObject = new Action(b => { if (b)DialPinDigit('6'); }); + PinKeypad.Digit7.UserObject = new Action(b => { if (b)DialPinDigit('7'); }); + PinKeypad.Digit8.UserObject = new Action(b => { if (b)DialPinDigit('8'); }); + PinKeypad.Digit9.UserObject = new Action(b => { if (b)DialPinDigit('9'); }); + } + + /// + /// + /// + /// + void DialPinDigit(char d) + { + PinEntryBuilder.Append(d); + var len = PinEntryBuilder.Length; + SetPinDotsFeedback(len); + + // check it! + if (len == 4) + { + if (Config.Password == PinEntryBuilder.ToString()) + { + IsAuthorized = true; + SetPinDotsFeedback(0); + TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, false); + Show(); + } + else + { + SetPinDotsFeedback(0); + TriList.SetBool(UIBoolJoin.PinDialogErrorVisible, true); + new CTimer(o => + { + TriList.SetBool(UIBoolJoin.PinDialogErrorVisible, false); + }, 1500); + } + + PinEntryBuilder.Remove(0, len); // clear it either way + } + } + + /// + /// Draws the dots as pin is entered + /// + /// + void SetPinDotsFeedback(int len) + { + TriList.SetBool(UIBoolJoin.PinDialogDot1, len >= 1); + TriList.SetBool(UIBoolJoin.PinDialogDot2, len >= 2); + TriList.SetBool(UIBoolJoin.PinDialogDot3, len >= 3); + TriList.SetBool(UIBoolJoin.PinDialogDot4, len == 4); + + } + + /// + /// Does what it says + /// + void CancelPinDialog() + { + PinEntryBuilder.Remove(0, PinEntryBuilder.Length); + TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, false); + } + + + /// + /// + /// + void BuildStatusList() + { + StatusList = new SubpageReferenceList(TriList, UISmartObjectJoin.TechStatusList, 3, 3, 3); + StatusListDeviceIndexes = new Dictionary(); + uint i = 0; + foreach (var d in DeviceManager.AllDevices) + { + // make sure it is both ICommunicationMonitor and a Device + var sd = d as ICommunicationMonitor; + if (sd == null) + continue; + var dd = sd as Device; + if(dd == null) + continue; + i++; + StatusList.StringInputSig(i, 1).StringValue = dd.Name; + StatusList.UShortInputSig(i, 1).UShortValue = (ushort)sd.CommunicationMonitor.Status; + StatusListDeviceIndexes.Add(sd, i); + sd.CommunicationMonitor.StatusChange += CommunicationMonitor_StatusChange ; + } + StatusList.Count = (ushort)i; + } + + /// + /// Builds the list of display controls + /// + void BuildDisplayList() + { + DisplayList = new SubpageReferenceList(TriList, UISmartObjectJoin.TechDisplayControlsList, 10, 3, 3); + + var devKeys = ConfigReader.ConfigObject.Devices.Where(d => + d.Group.Equals("display", StringComparison.OrdinalIgnoreCase) + || d.Group.Equals("projector", StringComparison.OrdinalIgnoreCase)) + .Select(dd => dd.Key); + var disps = DeviceManager.AllDevices.Where(d => + devKeys.Contains(d.Key)); + ushort i = 0; + foreach (var disp in disps) + { + var display = disp as DisplayBase; + if (display != null) + { + i++; + DisplayList.StringInputSig(i, 1).StringValue = display.Name; + DisplayList.GetBoolFeedbackSig(i, 1).SetSigFalseAction(display.PowerOn); + DisplayList.GetBoolFeedbackSig(i, 2).SetSigFalseAction(display.PowerOff); + if (display is TwoWayDisplayBase) + { + var powerOnSig = DisplayList.BoolInputSig(i, 1); + (display as TwoWayDisplayBase).PowerIsOnFeedback.LinkInputSig(powerOnSig); + + var powerOffSig = DisplayList.BoolInputSig(1, 2); + (display as TwoWayDisplayBase).PowerIsOnFeedback.LinkComplementInputSig(powerOffSig); + } + DisplayList.GetBoolFeedbackSig(i, 3).SetSigFalseAction(() => + { if (display is IInputHdmi1) (display as IInputHdmi1).InputHdmi1(); }); + DisplayList.GetBoolFeedbackSig(i, 4).SetSigFalseAction(() => + { if (display is IInputHdmi2) (display as IInputHdmi2).InputHdmi2(); }); + DisplayList.GetBoolFeedbackSig(i, 5).SetSigFalseAction(() => + { if (display is IInputHdmi3) (display as IInputHdmi3).InputHdmi3(); }); + //DisplayList.GetBoolFeedbackSig(i, 6).SetSigFalseAction(() => + //{ if (display is IInputHdmi4) (display as IInputHdmi4).InputHdmi4(); }); + DisplayList.GetBoolFeedbackSig(i, 6).SetSigFalseAction(() => + { if (display is IInputDisplayPort1) (display as IInputDisplayPort1).InputDisplayPort1(); }); + + + // Figure out some way to provide current input feedback + if (display is TwoWayDisplayBase) + { + (display as TwoWayDisplayBase).CurrentInputFeedback.OutputChange += CurrentInputFeedback_OutputChange; + } + } + + + } + + DisplayList.Count = i; + } + + + void CurrentInputFeedback_OutputChange(object sender, EventArgs e) + { + + } + + /// + /// + /// + void CommunicationMonitor_StatusChange(object sender, MonitorStatusChangeEventArgs e) + { + var c = sender as ICommunicationMonitor; + if (StatusListDeviceIndexes.ContainsKey(c)) + { + var i = StatusListDeviceIndexes[c]; + StatusList.UShortInputSig(i, 1).UShortValue = (ushort)e.Status; + } + } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddlePresentationUiDriver.cs b/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddlePresentationUiDriver.cs similarity index 100% rename from Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddlePresentationUiDriver.cs rename to PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddlePresentationUiDriver.cs diff --git a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs b/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs similarity index 97% rename from Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs rename to PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs index 5f407ead..8644d24d 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs +++ b/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs @@ -1,1533 +1,1533 @@ -using System; -using System.Linq; -using System.Collections.Generic; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro; -using Crestron.SimplSharpPro.UI; - -using PepperDash.Core; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.SmartObjects; -using PepperDash.Essentials.Core.PageManagers; -using PepperDash.Essentials.Room.Config; -using PepperDash.Essentials.Devices.Common.Codec; -using PepperDash.Essentials.Devices.Common.VideoCodec; - -namespace PepperDash.Essentials -{ - /// - /// - /// - public class EssentialsHuddleVtc1PanelAvFunctionsDriver : PanelDriverBase, IAVWithVCDriver - { - CrestronTouchpanelPropertiesConfig Config; - - public enum UiDisplayMode - { - Presentation, AudioSetup, Call, Start - } - - /// - /// Whether volume ramping from this panel will show the volume - /// gauge popup. - /// - public bool ShowVolumeGauge { get; set; } - - /// - /// - /// - public uint PowerOffTimeout { get; set; } - - /// - /// - /// - public string DefaultRoomKey { get; set; } - - - /// - /// - /// - public EssentialsHuddleVtc1Room CurrentRoom - { - get { return _CurrentRoom; } - set - { - SetCurrentRoom(value); - } - } - EssentialsHuddleVtc1Room _CurrentRoom; - - /// - /// For hitting feedbacks - /// - BoolInputSig CallButtonSig; - BoolInputSig ShareButtonSig; - BoolInputSig EndMeetingButtonSig; - - BoolFeedback CallSharingInfoVisibleFeedback; - - /// - /// The parent driver for this - /// - PanelDriverBase Parent; - - /// - /// All children attached to this driver. For hiding and showing as a group. - /// - List ChildDrivers = new List(); - - List CurrentDisplayModeSigsInUse = new List(); - - //// Important smart objects - - /// - /// Smart Object 3200 - /// - SubpageReferenceList SourceStagingSrl; - - /// - /// Smart Object 15022 - /// - SubpageReferenceList ActivityFooterSrl; - - /// - /// - /// - public SubpageReferenceList MeetingOrContactMethodModalSrl { get; set; } - - /// - /// The list of buttons on the header. Managed with visibility only - /// - //SmartObjectHeaderButtonList HeaderButtonsList; - - /// - /// The AV page mangagers that have been used, to keep them alive for later - /// - Dictionary PageManagers = new Dictionary(); - - /// - /// Current page manager running for a source - /// - PageManager CurrentSourcePageManager; - - /// - /// Will auto-timeout a power off - /// - CTimer PowerOffTimer; - - /// - /// - /// - ModalDialog PowerDownModal; - - /// - /// - /// - //ModalDialog WarmingCoolingModal; - - /// - /// Represents - /// - public JoinedSigInterlock PopupInterlock { get; private set; } - - /// - /// Interlock for various source, camera, call control bars. The bar above the activity footer. This is also - /// used to show start page - /// - JoinedSigInterlock StagingBarInterlock; - - /// - /// Interlocks the various call-related subpages - /// - JoinedSigInterlock CallPagesInterlock; - - /// - /// The Video codec driver - /// - PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver VCDriver; - - /// - /// The driver for the tech page. Lazy getter for memory usage - /// - PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver TechDriver - { - get - { - if (_TechDriver == null) - _TechDriver = new PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver(TriList, CurrentRoom.Config.Tech); - return _TechDriver; - } - } - PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver _TechDriver; - - /// - /// Controls timeout of notification ribbon timer - /// - CTimer RibbonTimer; - - /// - /// The keyboard - /// - public PepperDash.Essentials.Core.Touchpanels.Keyboards.HabaneroKeyboardController Keyboard { get; private set; } - - /// - /// The mode showing. Presentation or call. - /// - UiDisplayMode CurrentMode = UiDisplayMode.Start; - - CTimer NextMeetingTimer; - - /// - /// Tracks the last meeting that was cancelled - /// - string LastMeetingDismissedId; - - /// - /// Constructor - /// - public EssentialsHuddleVtc1PanelAvFunctionsDriver(PanelDriverBase parent, CrestronTouchpanelPropertiesConfig config) - : base(parent.TriList) - { - Config = config; - Parent = parent; - - PopupInterlock = new JoinedSigInterlock(TriList); - StagingBarInterlock = new JoinedSigInterlock(TriList); - CallPagesInterlock = new JoinedSigInterlock(TriList); - - SourceStagingSrl = new SubpageReferenceList(TriList, UISmartObjectJoin.SourceStagingSRL, 3, 3, 3); - - ActivityFooterSrl = new SubpageReferenceList(TriList, UISmartObjectJoin.ActivityFooterSRL, 3, 3, 3); - CallButtonSig = ActivityFooterSrl.BoolInputSig(2, 1); - ShareButtonSig = ActivityFooterSrl.BoolInputSig(1, 1); - EndMeetingButtonSig = ActivityFooterSrl.BoolInputSig(3, 1); - - MeetingOrContactMethodModalSrl = new SubpageReferenceList(TriList, UISmartObjectJoin.MeetingListSRL, 3, 3, 5); - - - // buttons are added in SetCurrentRoom - //HeaderButtonsList = new SmartObjectHeaderButtonList(TriList.SmartObjects[UISmartObjectJoin.HeaderButtonList]); - - SetupActivityFooterWhenRoomOff(); - - ShowVolumeGauge = true; - Keyboard = new PepperDash.Essentials.Core.Touchpanels.Keyboards.HabaneroKeyboardController(TriList); - } - - /// - /// Add a video codec driver to this - /// - /// - public void SetVideoCodecDriver(PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver vcd) - { - VCDriver = vcd; - } - - /// - /// - /// - public override void Show() - { - if (CurrentRoom == null) - { - Debug.Console(1, "ERROR: AVUIFunctionsDriver, Cannot show. No room assigned"); - return; - } - - var roomConf = CurrentRoom.Config; - - TriList.SetString(UIStringJoin.CurrentRoomName, CurrentRoom.Name); - - if (Config.HeaderStyle.ToLower() == CrestronTouchpanelPropertiesConfig.Habanero) - { - TriList.SetSigFalseAction(UIBoolJoin.HeaderRoomButtonPress, () => - PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.RoomHeaderPageVisible)); - } - else if (Config.HeaderStyle.ToLower() == CrestronTouchpanelPropertiesConfig.Verbose) - { - // room name on join 1, concat phone and sip on join 2, no button method - //var addr = roomConf.Addresses; - //if (addr == null) // protect from missing values by using default empties - // addr = new EssentialsRoomAddressPropertiesConfig(); - //// empty string when either missing, pipe when both showing - //TriList.SetString(UIStringJoin.RoomAddressPipeText, - // (string.IsNullOrEmpty(addr.PhoneNumber.Trim()) - // || string.IsNullOrEmpty(addr.SipAddress.Trim())) ? "" : " | "); - //TriList.SetString(UIStringJoin.RoomPhoneText, addr.PhoneNumber); - //TriList.SetString(UIStringJoin.RoomSipText, addr.SipAddress); - } - - TriList.SetBool(UIBoolJoin.DateAndTimeVisible, Config.ShowDate && Config.ShowTime); - TriList.SetBool(UIBoolJoin.DateOnlyVisible, Config.ShowDate && !Config.ShowTime); - TriList.SetBool(UIBoolJoin.TimeOnlyVisible, !Config.ShowDate && Config.ShowTime); - - TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, true); - - TriList.SetBool(UIBoolJoin.ActivityFooterVisible, true); - - // Privacy mute button - TriList.SetSigFalseAction(UIBoolJoin.Volume1SpeechMutePressAndFB, CurrentRoom.PrivacyModeToggle); - CurrentRoom.PrivacyModeIsOnFeedback.LinkInputSig(TriList.BooleanInput[UIBoolJoin.Volume1SpeechMutePressAndFB]); - - // Default to showing rooms/sources now. - if (CurrentRoom.OnFeedback.BoolValue) - { - TriList.SetBool(UIBoolJoin.TapToBeginVisible, false); - SetupActivityFooterWhenRoomOn(); - } - else - { - TriList.SetBool(UIBoolJoin.StartPageVisible, true); - TriList.SetBool(UIBoolJoin.TapToBeginVisible, true); - SetupActivityFooterWhenRoomOff(); - } - ShowCurrentDisplayModeSigsInUse(); - - // *** Header Buttons *** - - // Generic "close" button for popup modals - TriList.SetSigFalseAction(UIBoolJoin.InterlockedModalClosePress, PopupInterlock.HideAndClear); - - // Volume related things - TriList.SetSigFalseAction(UIBoolJoin.VolumeDefaultPress, () => CurrentRoom.SetDefaultLevels()); - TriList.SetString(UIStringJoin.AdvancedVolumeSlider1Text, "Room"); - - //if (TriList is CrestronApp) - // TriList.BooleanInput[UIBoolJoin.GearButtonVisible].BoolValue = false; - //else - // TriList.BooleanInput[UIBoolJoin.GearButtonVisible].BoolValue = true; - - // power-related functions - // Note: some of these are not directly-related to the huddle space UI, but are held over - // in case - TriList.SetSigFalseAction(UIBoolJoin.ShowPowerOffPress, EndMeetingPress); - - TriList.SetSigFalseAction(UIBoolJoin.DisplayPowerTogglePress, () => - { - if (CurrentRoom != null && CurrentRoom.DefaultDisplay is IPower) - (CurrentRoom.DefaultDisplay as IPower).PowerToggle(); - }); - - SetupNextMeetingTimer(); - - base.Show(); - } - - /// - /// Allows PopupInterlock to be toggled if the calls list is already visible, or if the codec is in a call - /// - public void ShowActiveCallsList() - { - TriList.SetBool(UIBoolJoin.CallEndAllConfirmVisible, true); - if(PopupInterlock.CurrentJoin == UIBoolJoin.HeaderActiveCallsListVisible) - PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HeaderActiveCallsListVisible); - else - { - if((CurrentRoom.ScheduleSource as VideoCodecBase).IsInCall) - PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HeaderActiveCallsListVisible); - } - } - - /// - /// - /// - void ShowLogo() - { - if (CurrentRoom.LogoUrl == null) - { - TriList.SetBool(UIBoolJoin.LogoDefaultVisible, true); - TriList.SetBool(UIBoolJoin.LogoUrlVisible, false); - } - else - { - TriList.SetBool(UIBoolJoin.LogoDefaultVisible, false); - TriList.SetBool(UIBoolJoin.LogoUrlVisible, true); - TriList.SetString(UIStringJoin.LogoUrl, _CurrentRoom.LogoUrl); - } - } - - /// - /// - /// - void HideLogo() - { - TriList.SetBool(UIBoolJoin.LogoDefaultVisible, false); - TriList.SetBool(UIBoolJoin.LogoUrlVisible, false); - } - - /// - /// - /// - public override void Hide() - { - HideAndClearCurrentDisplayModeSigsInUse(); - TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, false); - TriList.BooleanInput[UIBoolJoin.ActivityFooterVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.TapToBeginVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; - if (NextMeetingTimer != null) - NextMeetingTimer.Stop(); - HideNextMeetingPopup(); - base.Hide(); - } - - /// - /// Reveals a message on the notification ribbon until cleared - /// - /// Text to display - /// Time in ms to display. 0 to keep on screen - public void ShowNotificationRibbon(string message, int timeout) - { - TriList.SetString(UIStringJoin.NotificationRibbonText, message); - TriList.SetBool(UIBoolJoin.NotificationRibbonVisible, true); - if (timeout > 0) - { - if (RibbonTimer != null) - RibbonTimer.Stop(); - RibbonTimer = new CTimer(o => { - TriList.SetBool(UIBoolJoin.NotificationRibbonVisible, false); - RibbonTimer = null; - }, timeout); - } - } - - /// - /// Hides the notification ribbon - /// - public void HideNotificationRibbon() - { - TriList.SetBool(UIBoolJoin.NotificationRibbonVisible, false); - if (RibbonTimer != null) - { - RibbonTimer.Stop(); - RibbonTimer = null; - } - } - - void SetupNextMeetingTimer() - { - var ss = CurrentRoom.ScheduleSource; - if (ss != null) - { - NextMeetingTimer = new CTimer(o => ShowNextMeetingTimerCallback(), null, 0, 60000); - } - } - - /// - /// - /// - void ShowNextMeetingTimerCallback() - { - // Every 60 seconds, refresh the calendar - RefreshMeetingsList(); - // check meetings list for the closest, joinable meeting - var ss = CurrentRoom.ScheduleSource; - var meetings = ss.CodecSchedule.Meetings; - - if (meetings.Count > 0) - { - // If the room is off pester the user - // If the room is on, and the meeting is joinable - // and the LastMeetingDismissed != this meeting - - var lastMeetingDismissed = meetings.FirstOrDefault(m => m.Id == LastMeetingDismissedId); - Debug.Console(0, "*#* Room on: {0}, lastMeetingDismissedId: {1} {2} *#*", - CurrentRoom.OnFeedback.BoolValue, - LastMeetingDismissedId, - lastMeetingDismissed != null ? lastMeetingDismissed.StartTime.ToShortTimeString() : ""); - - var meeting = meetings.LastOrDefault(m => m.Joinable); - if (CurrentRoom.OnFeedback.BoolValue - && lastMeetingDismissed == meeting) - { - return; - } - - LastMeetingDismissedId = null; - // Clear the popup when we run out of meetings - if (meeting == null) - { - HideNextMeetingPopup(); - } - else - { - TriList.SetString(UIStringJoin.MeetingsOrContactMethodListTitleText, "Upcoming meeting"); - TriList.SetString(UIStringJoin.NextMeetingStartTimeText, meeting.StartTime.ToShortTimeString()); - TriList.SetString(UIStringJoin.NextMeetingEndTimeText, meeting.EndTime.ToShortTimeString()); - TriList.SetString(UIStringJoin.NextMeetingTitleText, meeting.Title); - TriList.SetString(UIStringJoin.NextMeetingNameText, meeting.Organizer); - TriList.SetString(UIStringJoin.NextMeetingButtonLabel, "Join"); - TriList.SetSigFalseAction(UIBoolJoin.NextMeetingJoinPress, () => - { - HideNextMeetingPopup(); - PopupInterlock.Hide(); - RoomOnAndDialMeeting(meeting); - }); - TriList.SetString(UIStringJoin.NextMeetingSecondaryButtonLabel, "Show Schedule"); - TriList.SetSigFalseAction(UIBoolJoin.CalendarHeaderButtonPress, () => - { - HideNextMeetingPopup(); - //CalendarPress(); - RefreshMeetingsList(); - PopupInterlock.ShowInterlocked(UIBoolJoin.MeetingsOrContacMethodsListVisible); - }); - var indexOfNext = meetings.IndexOf(meeting) + 1; - - // indexOf = 3, 4 meetings : - if (indexOfNext < meetings.Count) - TriList.SetString(UIStringJoin.NextMeetingFollowingMeetingText, - meetings[indexOfNext].StartTime.ToShortTimeString()); - else - TriList.SetString(UIStringJoin.NextMeetingFollowingMeetingText, "No more meetings today"); - - TriList.SetSigFalseAction(UIBoolJoin.NextMeetingModalClosePress, () => - { - // Mark the meeting to not re-harass the user - if(CurrentRoom.OnFeedback.BoolValue) - LastMeetingDismissedId = meeting.Id; - HideNextMeetingPopup(); - }); - - TriList.SetBool(UIBoolJoin.NextMeetingModalVisible, true); - } - } - } - - /// - /// - /// - void HideNextMeetingPopup() - { - TriList.SetBool(UIBoolJoin.NextMeetingModalVisible, false); - - } - - /// - /// Calendar should only be visible when it's supposed to - /// - public void CalendarPress() - { - //RefreshMeetingsList(); // List should be up-to-date - PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.MeetingsOrContacMethodsListVisible); - } - - /// - /// Dials a meeting after turning on room (if necessary) - /// - void RoomOnAndDialMeeting(Meeting meeting) - { - Action dialAction = () => - { - var d = CurrentRoom.ScheduleSource as VideoCodecBase; - if (d != null) - { - d.Dial(meeting); - LastMeetingDismissedId = meeting.Id; // To prevent prompts for already-joined call - } - }; - if (CurrentRoom.OnFeedback.BoolValue) - dialAction(); - else - { - // Rig a one-time handler to catch when the room is warmed and then dial call - EventHandler oneTimeHandler = null; - oneTimeHandler = (o, a) => - { - if (!CurrentRoom.IsWarmingUpFeedback.BoolValue) - { - CurrentRoom.IsWarmingUpFeedback.OutputChange -= oneTimeHandler; - dialAction(); - } - }; - CurrentRoom.IsWarmingUpFeedback.OutputChange += oneTimeHandler; - ActivityCallButtonPressed(); - } - } - - /// - /// Reveals the tech page and puts away anything that's in the way. - /// - public void ShowTech() - { - PopupInterlock.HideAndClear(); - TechDriver.Show(); - } - - /// - /// When the room is off, set the footer SRL - /// - void SetupActivityFooterWhenRoomOff() - { - ActivityFooterSrl.Clear(); - ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(1, ActivityFooterSrl, 0, - b => { if (!b) ActivityShareButtonPressed(); })); - ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(2, ActivityFooterSrl, 3, - b => { if (!b) ActivityCallButtonPressed(); })); - ActivityFooterSrl.Count = 2; - TriList.SetUshort(UIUshortJoin.PresentationStagingCaretMode, 1); // right one slot - TriList.SetUshort(UIUshortJoin.CallStagingCaretMode, 5); // left one slot - } - - /// - /// Sets up the footer SRL for when the room is on - /// - void SetupActivityFooterWhenRoomOn() - { - ActivityFooterSrl.Clear(); - ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(1, ActivityFooterSrl, 0, - b => { if (!b) ActivityShareButtonPressed(); })); - ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(2, ActivityFooterSrl, 3, - b => { if (!b) ActivityCallButtonPressed(); })); - ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(3, ActivityFooterSrl, 4, - b => { if (!b) EndMeetingPress(); })); - ActivityFooterSrl.Count = 3; - TriList.SetUshort(UIUshortJoin.PresentationStagingCaretMode, 2); // center - TriList.SetUshort(UIUshortJoin.CallStagingCaretMode, 0); // left -2 - } - - /// - /// Single point call for setting the feedbacks on the activity buttons - /// - void SetActivityFooterFeedbacks() - { - CallButtonSig.BoolValue = CurrentMode == UiDisplayMode.Call - && CurrentRoom.ShutdownType == eShutdownType.None; - ShareButtonSig.BoolValue = CurrentMode == UiDisplayMode.Presentation - && CurrentRoom.ShutdownType == eShutdownType.None; - EndMeetingButtonSig.BoolValue = CurrentRoom.ShutdownType != eShutdownType.None; - } - - /// - /// - /// - public void ActivityCallButtonPressed() - { - if (VCDriver.IsVisible) - return; - HideLogo(); - HideNextMeetingPopup(); - TriList.SetBool(UIBoolJoin.StartPageVisible, false); - TriList.SetBool(UIBoolJoin.SourceStagingBarVisible, false); - TriList.SetBool(UIBoolJoin.SelectASourceVisible, false); - if (CurrentSourcePageManager != null) - CurrentSourcePageManager.Hide(); - PowerOnFromCall(); - CurrentMode = UiDisplayMode.Call; - SetActivityFooterFeedbacks(); - VCDriver.Show(); - } - - /// - /// Attached to activity list share button - /// - void ActivityShareButtonPressed() - { - SetupSourceList(); - if (VCDriver.IsVisible) - VCDriver.Hide(); - HideNextMeetingPopup(); - TriList.SetBool(UIBoolJoin.StartPageVisible, false); - TriList.SetBool(UIBoolJoin.CallStagingBarVisible, false); - TriList.SetBool(UIBoolJoin.SourceStagingBarVisible, true); - // Run default source when room is off and share is pressed - if (!CurrentRoom.OnFeedback.BoolValue) - { - if (!CurrentRoom.OnFeedback.BoolValue) - { - // If there's no default, show UI elements - if (!CurrentRoom.RunDefaultPresentRoute()) - TriList.SetBool(UIBoolJoin.SelectASourceVisible, true); - } - } - else // room is on show what's active or select a source if nothing is yet active - { - if(CurrentRoom.CurrentSourceInfo == null || CurrentRoom.CurrentSourceInfoKey == CurrentRoom.DefaultCodecRouteString) - TriList.SetBool(UIBoolJoin.SelectASourceVisible, true); - else if (CurrentSourcePageManager != null) - CurrentSourcePageManager.Show(); - } - CurrentMode = UiDisplayMode.Presentation; - SetupSourceList(); - SetActivityFooterFeedbacks(); - } - - /// - /// Powers up the system to the codec route, if not already on. - /// - void PowerOnFromCall() - { - if (!CurrentRoom.OnFeedback.BoolValue) - { - CurrentRoom.RunDefaultCallRoute(); - } - } - - /// - /// Shows all sigs that are in CurrentDisplayModeSigsInUse - /// - void ShowCurrentDisplayModeSigsInUse() - { - foreach (var sig in CurrentDisplayModeSigsInUse) - sig.BoolValue = true; - } - - /// - /// Hides all CurrentDisplayModeSigsInUse sigs and clears the array - /// - void HideAndClearCurrentDisplayModeSigsInUse() - { - foreach (var sig in CurrentDisplayModeSigsInUse) - sig.BoolValue = false; - CurrentDisplayModeSigsInUse.Clear(); - } - - - /// - /// Loads the appropriate Sigs into CurrentDisplayModeSigsInUse and shows them - /// - void ShowCurrentSource() - { - if (CurrentRoom.CurrentSourceInfo == null) - return; - - if (CurrentRoom.CurrentSourceInfo.SourceDevice == null) - { - TriList.SetBool(UIBoolJoin.SelectASourceVisible, true); - return; - } - - var uiDev = CurrentRoom.CurrentSourceInfo.SourceDevice as IUiDisplayInfo; - PageManager pm = null; - // If we need a page manager, get an appropriate one - if (uiDev != null) - { - TriList.SetBool(UIBoolJoin.SelectASourceVisible, false); - // Got an existing page manager, get it - if (PageManagers.ContainsKey(uiDev)) - pm = PageManagers[uiDev]; - // Otherwise make an apporiate one - else if (uiDev is ISetTopBoxControls) - pm = new SetTopBoxThreePanelPageManager(uiDev as ISetTopBoxControls, TriList); - else if (uiDev is IDiscPlayerControls) - pm = new DiscPlayerMediumPageManager(uiDev as IDiscPlayerControls, TriList); - else - pm = new DefaultPageManager(uiDev, TriList); - PageManagers[uiDev] = pm; - CurrentSourcePageManager = pm; - pm.Show(); - } - } - - /// - /// Called from button presses on source, where We can assume we want - /// to change to the proper screen. - /// - /// The key name of the route to run - void UiSelectSource(string key) - { - // Run the route and when it calls back, show the source - CurrentRoom.RunRouteAction(key, null); - } - - /// - /// - /// - public void EndMeetingPress() - { - if (!CurrentRoom.OnFeedback.BoolValue - || CurrentRoom.ShutdownPromptTimer.IsRunningFeedback.BoolValue) - return; - - CurrentRoom.StartShutdown(eShutdownType.Manual); - } - - /// - /// Puts away modals and things that might be up when call comes in - /// - public void PrepareForCodecIncomingCall() - { - if (PowerDownModal != null && PowerDownModal.ModalIsVisible) - PowerDownModal.CancelDialog(); - PopupInterlock.Hide(); - } - - /// - /// - /// - /// - /// - void ShutdownPromptTimer_HasStarted(object sender, EventArgs e) - { - // Do we need to check where the UI is? No? - var timer = CurrentRoom.ShutdownPromptTimer; - SetActivityFooterFeedbacks(); - - if (CurrentRoom.ShutdownType == eShutdownType.Manual) - { - PowerDownModal = new ModalDialog(TriList); - var message = string.Format("Meeting will end in {0} seconds", CurrentRoom.ShutdownPromptSeconds); - - // Attach timer things to modal - CurrentRoom.ShutdownPromptTimer.TimeRemainingFeedback.OutputChange += ShutdownPromptTimer_TimeRemainingFeedback_OutputChange; - CurrentRoom.ShutdownPromptTimer.PercentFeedback.OutputChange += ShutdownPromptTimer_PercentFeedback_OutputChange; - - // respond to offs by cancelling dialog - var onFb = CurrentRoom.OnFeedback; - EventHandler offHandler = null; - offHandler = (o, a) => - { - if (!onFb.BoolValue) - { - PowerDownModal.HideDialog(); - SetActivityFooterFeedbacks(); - onFb.OutputChange -= offHandler; - } - }; - onFb.OutputChange += offHandler; - - PowerDownModal.PresentModalDialog(2, "End Meeting", "Power", message, "Cancel", "End Meeting Now", true, true, - but => - { - if (but != 2) // any button except for End cancels - timer.Cancel(); - else - timer.Finish(); - }); - } - } - - /// - /// - /// - /// - /// - void ShutdownPromptTimer_HasFinished(object sender, EventArgs e) - { - SetActivityFooterFeedbacks(); - CurrentRoom.ShutdownPromptTimer.TimeRemainingFeedback.OutputChange -= ShutdownPromptTimer_TimeRemainingFeedback_OutputChange; - CurrentRoom.ShutdownPromptTimer.PercentFeedback.OutputChange -= ShutdownPromptTimer_PercentFeedback_OutputChange; - } - - /// - /// - /// - /// - /// - void ShutdownPromptTimer_WasCancelled(object sender, EventArgs e) - { - if (PowerDownModal != null) - PowerDownModal.HideDialog(); - SetActivityFooterFeedbacks(); - - CurrentRoom.ShutdownPromptTimer.TimeRemainingFeedback.OutputChange += ShutdownPromptTimer_TimeRemainingFeedback_OutputChange; - CurrentRoom.ShutdownPromptTimer.PercentFeedback.OutputChange -= ShutdownPromptTimer_PercentFeedback_OutputChange; - } - - /// - /// Event handler for countdown timer on power off modal - /// - void ShutdownPromptTimer_TimeRemainingFeedback_OutputChange(object sender, EventArgs e) - { - - var message = string.Format("Meeting will end in {0} seconds", (sender as StringFeedback).StringValue); - TriList.StringInput[ModalDialog.MessageTextJoin].StringValue = message; - } - - /// - /// Event handler for percentage on power off countdown - /// - void ShutdownPromptTimer_PercentFeedback_OutputChange(object sender, EventArgs e) - { - var value = (ushort)((sender as IntFeedback).UShortValue * 65535 / 100); - TriList.UShortInput[ModalDialog.TimerGaugeJoin].UShortValue = value; - } - - /// - /// - /// - void CancelPowerOffTimer() - { - if (PowerOffTimer != null) - { - PowerOffTimer.Stop(); - PowerOffTimer = null; - } - } - - /// - /// - /// - /// - public void VolumeUpPress(bool state) - { - if (CurrentRoom.CurrentVolumeControls != null) - CurrentRoom.CurrentVolumeControls.VolumeUp(state); - } - - /// - /// - /// - /// - public void VolumeDownPress(bool state) - { - if (CurrentRoom.CurrentVolumeControls != null) - CurrentRoom.CurrentVolumeControls.VolumeDown(state); - } - - /// - /// Helper for property setter. Sets the panel to the given room, latching up all functionality - /// - void SetCurrentRoom(EssentialsHuddleVtc1Room room) - { - if (_CurrentRoom == room) return; - // Disconnect current (probably never called) - if (_CurrentRoom != null) - { - // Disconnect current room - _CurrentRoom.CurrentVolumeDeviceChange -= this.CurrentRoom_CurrentAudioDeviceChange; - ClearAudioDeviceConnections(); - _CurrentRoom.CurrentSingleSourceChange -= this.CurrentRoom_SourceInfoChange; - DisconnectSource(_CurrentRoom.CurrentSourceInfo); - _CurrentRoom.ShutdownPromptTimer.HasStarted -= ShutdownPromptTimer_HasStarted; - _CurrentRoom.ShutdownPromptTimer.HasFinished -= ShutdownPromptTimer_HasFinished; - _CurrentRoom.ShutdownPromptTimer.WasCancelled -= ShutdownPromptTimer_WasCancelled; - - _CurrentRoom.OnFeedback.OutputChange += CurrentRoom_OnFeedback_OutputChange; - _CurrentRoom.IsWarmingUpFeedback.OutputChange -= CurrentRoom_IsWarmingFeedback_OutputChange; - _CurrentRoom.IsCoolingDownFeedback.OutputChange -= CurrentRoom_IsCoolingDownFeedback_OutputChange; - _CurrentRoom.InCallFeedback.OutputChange -= CurrentRoom_InCallFeedback_OutputChange; - } - - _CurrentRoom = room; - - if (_CurrentRoom != null) - { - // get the source list config and set up the source list - - SetupSourceList(); - - // Name and logo - TriList.StringInput[UIStringJoin.CurrentRoomName].StringValue = _CurrentRoom.Name; - ShowLogo(); - - // Shutdown timer - _CurrentRoom.ShutdownPromptTimer.HasStarted += ShutdownPromptTimer_HasStarted; - _CurrentRoom.ShutdownPromptTimer.HasFinished += ShutdownPromptTimer_HasFinished; - _CurrentRoom.ShutdownPromptTimer.WasCancelled += ShutdownPromptTimer_WasCancelled; - - // Link up all the change events from the room - _CurrentRoom.OnFeedback.OutputChange += CurrentRoom_OnFeedback_OutputChange; - CurrentRoom_SyncOnFeedback(); - _CurrentRoom.IsWarmingUpFeedback.OutputChange += CurrentRoom_IsWarmingFeedback_OutputChange; - _CurrentRoom.IsCoolingDownFeedback.OutputChange += CurrentRoom_IsCoolingDownFeedback_OutputChange; - _CurrentRoom.InCallFeedback.OutputChange += CurrentRoom_InCallFeedback_OutputChange; - - - _CurrentRoom.CurrentVolumeDeviceChange += CurrentRoom_CurrentAudioDeviceChange; - RefreshAudioDeviceConnections(); - _CurrentRoom.CurrentSingleSourceChange += CurrentRoom_SourceInfoChange; - RefreshSourceInfo(); - - (_CurrentRoom.VideoCodec as IHasScheduleAwareness).CodecSchedule.MeetingsListHasChanged += CodecSchedule_MeetingsListHasChanged; - - CallSharingInfoVisibleFeedback = new BoolFeedback(() => _CurrentRoom.VideoCodec.SharingContentIsOnFeedback.BoolValue); - _CurrentRoom.VideoCodec.SharingContentIsOnFeedback.OutputChange += SharingContentIsOnFeedback_OutputChange; - CallSharingInfoVisibleFeedback.LinkInputSig(TriList.BooleanInput[UIBoolJoin.CallSharedSourceInfoVisible]); - - SetActiveCallListSharingContentStatus(); - - if (_CurrentRoom != null) - _CurrentRoom.CurrentSingleSourceChange += new SourceInfoChangeHandler(CurrentRoom_CurrentSingleSourceChange); - - TriList.SetSigFalseAction(UIBoolJoin.CallStopSharingPress, () => _CurrentRoom.RunRouteAction("codecOsd")); - - (Parent as EssentialsPanelMainInterfaceDriver).HeaderDriver.SetupHeaderButtons(this, CurrentRoom); - } - else - { - // Clear sigs that need to be - TriList.StringInput[UIStringJoin.CurrentRoomName].StringValue = "Select a room"; - } - } - - /// - /// - /// - /// - /// - void CurrentRoom_InCallFeedback_OutputChange(object sender, EventArgs e) - { - var inCall = CurrentRoom.InCallFeedback.BoolValue; - if (inCall) - { - // Check if transitioning to in call - and non-sharable source is in use - if (CurrentRoom.CurrentSourceInfo != null && CurrentRoom.CurrentSourceInfo.DisableCodecSharing) - { - Debug.Console(1, CurrentRoom, "Transitioning to in-call, cancelling non-sharable source"); - CurrentRoom.RunRouteAction("codecOsd"); - } - } - - SetupSourceList(); - } - - /// - /// - /// - void SetupSourceList() - { - - var inCall = CurrentRoom.InCallFeedback.BoolValue; - var config = ConfigReader.ConfigObject.SourceLists; - if (config.ContainsKey(_CurrentRoom.SourceListKey)) - { - var srcList = config[_CurrentRoom.SourceListKey].OrderBy(kv => kv.Value.Order); - - // Setup sources list - SourceStagingSrl.Clear(); - uint i = 1; // counter for UI list - foreach (var kvp in srcList) - { - var srcConfig = kvp.Value; - Debug.Console(1, "**** {0}, {1}, {2}, {3}, {4}", srcConfig.PreferredName, srcConfig.IncludeInSourceList, - srcConfig.DisableCodecSharing, inCall, this.CurrentMode); - // Skip sources marked as not included, and filter list of non-sharable sources when in call - // or on share screen - if (!srcConfig.IncludeInSourceList || (inCall && srcConfig.DisableCodecSharing) - || this.CurrentMode == UiDisplayMode.Call && srcConfig.DisableCodecSharing) - { - Debug.Console(1, "Skipping {0}", srcConfig.PreferredName); - continue; - } - - var routeKey = kvp.Key; - var item = new SubpageReferenceListSourceItem(i++, SourceStagingSrl, srcConfig, - b => { if (!b) UiSelectSource(routeKey); }); - SourceStagingSrl.AddItem(item); // add to the SRL - item.RegisterForSourceChange(_CurrentRoom); - } - SourceStagingSrl.Count = (ushort)(i - 1); - } - - } - - /// - /// If the schedule changes, this event will fire - /// - /// - /// - void CodecSchedule_MeetingsListHasChanged(object sender, EventArgs e) - { - RefreshMeetingsList(); - } - - /// - /// Updates the current shared source label on the call list when the source changes - /// - /// - /// - /// - void CurrentRoom_CurrentSingleSourceChange(EssentialsRoomBase room, SourceListItem info, ChangeType type) - { - if (_CurrentRoom.VideoCodec.SharingContentIsOnFeedback.BoolValue && _CurrentRoom.CurrentSourceInfo != null) - TriList.StringInput[UIStringJoin.CallSharedSourceNameText].StringValue = _CurrentRoom.CurrentSourceInfo.PreferredName; - } - - /// - /// Fires when the sharing source feedback of the codec changes - /// - /// - /// - void SharingContentIsOnFeedback_OutputChange(object sender, EventArgs e) - { - SetActiveCallListSharingContentStatus(); - } - - /// - /// Sets the values for the text and button visibilty for the active call list source sharing info - /// - void SetActiveCallListSharingContentStatus() - { - CallSharingInfoVisibleFeedback.FireUpdate(); - - string callListSharedSourceLabel; - - if (_CurrentRoom.VideoCodec.SharingContentIsOnFeedback.BoolValue && _CurrentRoom.CurrentSourceInfo != null) - { - Debug.Console(0, "*#* CurrentRoom.CurrentSourceInfo = {0}", - _CurrentRoom.CurrentSourceInfo != null ? _CurrentRoom.CurrentSourceInfo.SourceKey : "Nada!"); - callListSharedSourceLabel = _CurrentRoom.CurrentSourceInfo.PreferredName; - } - else - callListSharedSourceLabel = "None"; - - TriList.StringInput[UIStringJoin.CallSharedSourceNameText].StringValue = callListSharedSourceLabel; - } - - - ///// - ///// - ///// - //void SetupHeaderButtons() - //{ - // HeaderButtonsAreSetUp = false; - - // TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, true); - - // var roomConf = CurrentRoom.Config; - - // // Gear - // TriList.SetString(UIStringJoin.HeaderButtonIcon5, "Gear"); - // TriList.SetSigHeldAction(UIBoolJoin.HeaderIcon5Press, 2000, - // ShowTech, - // null, - // () => - // { - // if (CurrentRoom.OnFeedback.BoolValue) - // PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.VolumesPageVisible); - // else - // PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.VolumesPagePowerOffVisible); - // }); - // TriList.SetSigFalseAction(UIBoolJoin.TechExitButton, () => - // PopupInterlock.HideAndClear()); - - // // Help button and popup - // if (CurrentRoom.Config.Help != null) - // { - // TriList.SetString(UIStringJoin.HelpMessage, roomConf.Help.Message); - // TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, roomConf.Help.ShowCallButton); - // TriList.SetString(UIStringJoin.HelpPageCallButtonText, roomConf.Help.CallButtonText); - // if (roomConf.Help.ShowCallButton) - // TriList.SetSigFalseAction(UIBoolJoin.HelpPageShowCallButtonPress, () => { }); // ************ FILL IN - // else - // TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress); - // } - // else // older config - // { - // TriList.SetString(UIStringJoin.HelpMessage, CurrentRoom.Config.HelpMessage); - // TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, false); - // TriList.SetString(UIStringJoin.HelpPageCallButtonText, null); - // TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress); - // } - // TriList.SetString(UIStringJoin.HeaderButtonIcon4, "Help"); - // TriList.SetSigFalseAction(UIBoolJoin.HeaderIcon4Press, () => - // { - // string message = null; - // var room = DeviceManager.GetDeviceForKey(Config.DefaultRoomKey) - // as EssentialsHuddleSpaceRoom; - // if (room != null) - // message = room.Config.HelpMessage; - // else - // message = "Sorry, no help message available. No room connected."; - // //TriList.StringInput[UIStringJoin.HelpMessage].StringValue = message; - // PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HelpPageVisible); - // }); - // uint nextJoin = 3953; - - // // Calendar button - // if (_CurrentRoom.ScheduleSource != null) - // { - // TriList.SetString(nextJoin, "Calendar"); - // TriList.SetSigFalseAction(nextJoin, CalendarPress); - - // nextJoin--; - // } - - // // Call button - // TriList.SetString(nextJoin, "DND"); - // TriList.SetSigFalseAction(nextJoin, ShowActiveCallsList); - // HeaderCallButtonIconSig = TriList.StringInput[nextJoin]; - - // nextJoin--; - - // // blank any that remain - // for (var i = nextJoin; i > 3950; i--) - // { - // TriList.SetString(i, "Blank"); - // TriList.SetSigFalseAction(i, () => { }); - // } - - // TriList.SetSigFalseAction(UIBoolJoin.HeaderCallStatusLabelPress, ShowActiveCallsList); - - // // Set Call Status Subpage Position - - // if (nextJoin == 3951) - // { - // // Set to right position - // TriList.SetBool(UIBoolJoin.HeaderCallStatusLeftPositionVisible, false); - // TriList.SetBool(UIBoolJoin.HeaderCallStatusRightPositionVisible, true); - // } - // else if (nextJoin == 3950) - // { - // // Set to left position - // TriList.SetBool(UIBoolJoin.HeaderCallStatusLeftPositionVisible, true); - // TriList.SetBool(UIBoolJoin.HeaderCallStatusRightPositionVisible, false); - // } - - // HeaderButtonsAreSetUp = true; - - // ComputeHeaderCallStatus(CurrentRoom.VideoCodec); - //} - - ///// - ///// Evaluates the call status and sets the icon mode and text label - ///// - //public void ComputeHeaderCallStatus(VideoCodecBase codec) - //{ - // if (codec == null) - // { - // Debug.Console(1, "ComputeHeaderCallStatus() cannot execute. codec is null"); - // return; - // } - - // if (HeaderCallButtonIconSig == null) - // { - // Debug.Console(1, "ComputeHeaderCallStatus() cannot execute. HeaderCallButtonIconSig is null"); - // return; - // } - - // // Set mode of header button - // if (!codec.IsInCall) - // { - // HeaderCallButtonIconSig.StringValue = "DND"; - // //HeaderCallButton.SetIcon(HeaderListButton.OnHook); - // } - // else if (codec.ActiveCalls.Any(c => c.Type == eCodecCallType.Video)) - // HeaderCallButtonIconSig.StringValue = "Misc-06_Dark"; - // //HeaderCallButton.SetIcon(HeaderListButton.Camera); - // //TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 2); - // else - // HeaderCallButtonIconSig.StringValue = "Misc-09_Dark"; - // //HeaderCallButton.SetIcon(HeaderListButton.Phone); - // //TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 1); - - // // Set the call status text - // if (codec.ActiveCalls.Count > 0) - // { - // if (codec.ActiveCalls.Count == 1) - // TriList.SetString(UIStringJoin.HeaderCallStatusLabel, "1 Active Call"); - // else if (codec.ActiveCalls.Count > 1) - // TriList.SetString(UIStringJoin.HeaderCallStatusLabel, string.Format("{0} Active Calls", codec.ActiveCalls.Count)); - // } - // else - // TriList.SetString(UIStringJoin.HeaderCallStatusLabel, "No Active Calls"); - //} - - /// - /// - /// - void RefreshMeetingsList() - { - // See if this is helpful or if the callback response in the codec class maybe doesn't come it time? - // Let's build list from event - // CurrentRoom.ScheduleSource.GetSchedule(); - - TriList.SetString(UIStringJoin.MeetingsOrContactMethodListIcon, "Calendar"); - TriList.SetString(UIStringJoin.MeetingsOrContactMethodListTitleText, "Today's Meetings"); - - ushort i = 0; - foreach (var m in CurrentRoom.ScheduleSource.CodecSchedule.Meetings) - { - i++; - MeetingOrContactMethodModalSrl.StringInputSig(i, 1).StringValue = m.StartTime.ToShortTimeString(); - MeetingOrContactMethodModalSrl.StringInputSig(i, 2).StringValue = m.EndTime.ToShortTimeString(); - MeetingOrContactMethodModalSrl.StringInputSig(i, 3).StringValue = m.Title; - MeetingOrContactMethodModalSrl.StringInputSig(i, 4).StringValue = string.Format("
{0}",m.Organizer); - MeetingOrContactMethodModalSrl.StringInputSig(i, 5).StringValue = "Join"; - MeetingOrContactMethodModalSrl.BoolInputSig(i, 2).BoolValue = m.Joinable; - var mm = m; // lambda scope - MeetingOrContactMethodModalSrl.GetBoolFeedbackSig(i, 1).SetSigFalseAction(() => - { - PopupInterlock.Hide(); - ActivityCallButtonPressed(); - var d = CurrentRoom.ScheduleSource as VideoCodecBase; - if (d != null) - RoomOnAndDialMeeting(mm); - }); - } - MeetingOrContactMethodModalSrl.Count = i; - - if (i == 0) // Show item indicating no meetings are booked for rest of day - { - MeetingOrContactMethodModalSrl.Count = 1; - - MeetingOrContactMethodModalSrl.StringInputSig(1, 1).StringValue = string.Empty; - MeetingOrContactMethodModalSrl.StringInputSig(1, 2).StringValue = string.Empty; - MeetingOrContactMethodModalSrl.StringInputSig(1, 3).StringValue = "No Meetings are booked for the remainder of the day."; - MeetingOrContactMethodModalSrl.StringInputSig(1, 4).StringValue = string.Empty; - MeetingOrContactMethodModalSrl.StringInputSig(1, 5).StringValue = string.Empty; - } - } - - /// - /// For room on/off changes - /// - void CurrentRoom_OnFeedback_OutputChange(object sender, EventArgs e) - { - CurrentRoom_SyncOnFeedback(); - } - - /// - /// - /// - void CurrentRoom_SyncOnFeedback() - { - var value = _CurrentRoom.OnFeedback.BoolValue; - TriList.BooleanInput[UIBoolJoin.RoomIsOn].BoolValue = value; - - TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = !value; - - if (value) //ON - { - SetupActivityFooterWhenRoomOn(); - TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.VolumeDualMute1Visible].BoolValue = true; - - } - else - { - CurrentMode = UiDisplayMode.Start; - if (VCDriver.IsVisible) - VCDriver.Hide(); - SetupActivityFooterWhenRoomOff(); - ShowLogo(); - SetActivityFooterFeedbacks(); - TriList.BooleanInput[UIBoolJoin.VolumeDualMute1Visible].BoolValue = false; - TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = false; - // Clear this so that the pesky meeting warning can resurface every minute when off - LastMeetingDismissedId = null; - } - } - - /// - /// - /// - void CurrentRoom_IsWarmingFeedback_OutputChange(object sender, EventArgs e) - { - if (CurrentRoom.IsWarmingUpFeedback.BoolValue) - { - ShowNotificationRibbon("Room is powering on. Please wait...", 0); - } - else - { - ShowNotificationRibbon("Room is powered on. Welcome.", 2000); - } - } - - /// - /// - /// - /// - /// - void CurrentRoom_IsCoolingDownFeedback_OutputChange(object sender, EventArgs e) - { - if (CurrentRoom.IsCoolingDownFeedback.BoolValue) - { - ShowNotificationRibbon("Room is powering off. Please wait.", 0); - } - else - { - HideNotificationRibbon(); - } - } - - /// - /// Hides source for provided source info - /// - /// - void DisconnectSource(SourceListItem previousInfo) - { - if (previousInfo == null) return; - - // Hide whatever is showing - if (IsVisible) - { - if (CurrentSourcePageManager != null) - { - CurrentSourcePageManager.Hide(); - CurrentSourcePageManager = null; - } - } - - if (previousInfo == null) return; - var previousDev = previousInfo.SourceDevice; - - // device type interfaces - if (previousDev is ISetTopBoxControls) - (previousDev as ISetTopBoxControls).UnlinkButtons(TriList); - // common interfaces - if (previousDev is IChannel) - (previousDev as IChannel).UnlinkButtons(TriList); - if (previousDev is IColor) - (previousDev as IColor).UnlinkButtons(TriList); - if (previousDev is IDPad) - (previousDev as IDPad).UnlinkButtons(TriList); - if (previousDev is IDvr) - (previousDev as IDvr).UnlinkButtons(TriList); - if (previousDev is INumericKeypad) - (previousDev as INumericKeypad).UnlinkButtons(TriList); - if (previousDev is IPower) - (previousDev as IPower).UnlinkButtons(TriList); - if (previousDev is ITransport) - (previousDev as ITransport).UnlinkButtons(TriList); - } - - /// - /// Refreshes and shows the room's current source - /// - void RefreshSourceInfo() - { - var routeInfo = CurrentRoom.CurrentSourceInfo; - // This will show off popup too - if (this.IsVisible && !VCDriver.IsVisible) - ShowCurrentSource(); - - if (routeInfo == null)// || !CurrentRoom.OnFeedback.BoolValue) - { - // Check for power off and insert "Room is off" - TriList.StringInput[UIStringJoin.CurrentSourceName].StringValue = "Room is off"; - TriList.StringInput[UIStringJoin.CurrentSourceIcon].StringValue = "Power"; - this.Hide(); - Parent.Show(); - return; - } - else if (routeInfo != null) - { - TriList.StringInput[UIStringJoin.CurrentSourceName].StringValue = routeInfo.PreferredName; - TriList.StringInput[UIStringJoin.CurrentSourceIcon].StringValue = routeInfo.Icon; // defaults to "blank" - } - else // This never gets hit???!!! - { - TriList.StringInput[UIStringJoin.CurrentSourceName].StringValue = "---"; - TriList.StringInput[UIStringJoin.CurrentSourceIcon].StringValue = "Blank"; - } - - // Connect controls - if (routeInfo.SourceDevice != null) - ConnectControlDeviceMethods(routeInfo.SourceDevice); - } - - /// - /// Attach the source to the buttons and things - /// - void ConnectControlDeviceMethods(Device dev) - { - if (dev is ISetTopBoxControls) - (dev as ISetTopBoxControls).LinkButtons(TriList); - if (dev is IChannel) - (dev as IChannel).LinkButtons(TriList); - if (dev is IColor) - (dev as IColor).LinkButtons(TriList); - if (dev is IDPad) - (dev as IDPad).LinkButtons(TriList); - if (dev is IDvr) - (dev as IDvr).LinkButtons(TriList); - if (dev is INumericKeypad) - (dev as INumericKeypad).LinkButtons(TriList); - if (dev is IPower) - (dev as IPower).LinkButtons(TriList); - if (dev is ITransport) - (dev as ITransport).LinkButtons(TriList); - } - - /// - /// Detaches the buttons and feedback from the room's current audio device - /// - void ClearAudioDeviceConnections() - { - TriList.ClearBoolSigAction(UIBoolJoin.VolumeUpPress); - TriList.ClearBoolSigAction(UIBoolJoin.VolumeDownPress); - TriList.ClearBoolSigAction(UIBoolJoin.Volume1ProgramMutePressAndFB); - - var fDev = CurrentRoom.CurrentVolumeControls as IBasicVolumeWithFeedback; - if (fDev != null) - { - TriList.ClearUShortSigAction(UIUshortJoin.VolumeSlider1Value); - fDev.VolumeLevelFeedback.UnlinkInputSig( - TriList.UShortInput[UIUshortJoin.VolumeSlider1Value]); - } - } - - /// - /// Attaches the buttons and feedback to the room's current audio device - /// - void RefreshAudioDeviceConnections() - { - var dev = CurrentRoom.CurrentVolumeControls; - if (dev != null) // connect buttons - { - TriList.SetBoolSigAction(UIBoolJoin.VolumeUpPress, VolumeUpPress); - TriList.SetBoolSigAction(UIBoolJoin.VolumeDownPress, VolumeDownPress); - TriList.SetSigFalseAction(UIBoolJoin.Volume1ProgramMutePressAndFB, dev.MuteToggle); - } - - var fbDev = dev as IBasicVolumeWithFeedback; - if (fbDev == null) // this should catch both IBasicVolume and IBasicVolumeWithFeeback - TriList.UShortInput[UIUshortJoin.VolumeSlider1Value].UShortValue = 0; - else - { - // slider - TriList.SetUShortSigAction(UIUshortJoin.VolumeSlider1Value, fbDev.SetVolume); - // feedbacks - fbDev.MuteFeedback.LinkInputSig(TriList.BooleanInput[UIBoolJoin.Volume1ProgramMutePressAndFB]); - fbDev.VolumeLevelFeedback.LinkInputSig( - TriList.UShortInput[UIUshortJoin.VolumeSlider1Value]); - } - } - - /// - /// Handler for when the room's volume control device changes - /// - void CurrentRoom_CurrentAudioDeviceChange(object sender, VolumeDeviceChangeEventArgs args) - { - if (args.Type == ChangeType.WillChange) - ClearAudioDeviceConnections(); - else // did change - RefreshAudioDeviceConnections(); - } - - /// - /// Handles source change - /// - void CurrentRoom_SourceInfoChange(EssentialsRoomBase room, - SourceListItem info, ChangeType change) - { - if (change == ChangeType.WillChange) - DisconnectSource(info); - else - RefreshSourceInfo(); - } - } - - /// - /// For hanging off various common AV things that child drivers might need from a parent AV driver - /// - public interface IAVDriver - { - JoinedSigInterlock PopupInterlock { get; } - void ShowNotificationRibbon(string message, int timeout); - void HideNotificationRibbon(); - void ShowTech(); - } - - /// - /// For hanging off various common VC things that child drivers might need from a parent AV driver - /// - public interface IAVWithVCDriver : IAVDriver - { - EssentialsHuddleVtc1Room CurrentRoom { get; } - - PepperDash.Essentials.Core.Touchpanels.Keyboards.HabaneroKeyboardController Keyboard { get; } - /// - /// Exposes the ability to switch into call mode - /// - void ActivityCallButtonPressed(); - /// - /// Allows the codec to trigger the main UI to clear up if call is coming in. - /// - void PrepareForCodecIncomingCall(); - - SubpageReferenceList MeetingOrContactMethodModalSrl { get; } - } -} +using System; +using System.Linq; +using System.Collections.Generic; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro; +using Crestron.SimplSharpPro.UI; + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.SmartObjects; +using PepperDash.Essentials.Core.PageManagers; +using PepperDash.Essentials.Room.Config; +using PepperDash.Essentials.Devices.Common.Codec; +using PepperDash.Essentials.Devices.Common.VideoCodec; + +namespace PepperDash.Essentials +{ + /// + /// + /// + public class EssentialsHuddleVtc1PanelAvFunctionsDriver : PanelDriverBase, IAVWithVCDriver + { + CrestronTouchpanelPropertiesConfig Config; + + public enum UiDisplayMode + { + Presentation, AudioSetup, Call, Start + } + + /// + /// Whether volume ramping from this panel will show the volume + /// gauge popup. + /// + public bool ShowVolumeGauge { get; set; } + + /// + /// + /// + public uint PowerOffTimeout { get; set; } + + /// + /// + /// + public string DefaultRoomKey { get; set; } + + + /// + /// + /// + public EssentialsHuddleVtc1Room CurrentRoom + { + get { return _CurrentRoom; } + set + { + SetCurrentRoom(value); + } + } + EssentialsHuddleVtc1Room _CurrentRoom; + + /// + /// For hitting feedbacks + /// + BoolInputSig CallButtonSig; + BoolInputSig ShareButtonSig; + BoolInputSig EndMeetingButtonSig; + + BoolFeedback CallSharingInfoVisibleFeedback; + + /// + /// The parent driver for this + /// + PanelDriverBase Parent; + + /// + /// All children attached to this driver. For hiding and showing as a group. + /// + List ChildDrivers = new List(); + + List CurrentDisplayModeSigsInUse = new List(); + + //// Important smart objects + + /// + /// Smart Object 3200 + /// + SubpageReferenceList SourceStagingSrl; + + /// + /// Smart Object 15022 + /// + SubpageReferenceList ActivityFooterSrl; + + /// + /// + /// + public SubpageReferenceList MeetingOrContactMethodModalSrl { get; set; } + + /// + /// The list of buttons on the header. Managed with visibility only + /// + //SmartObjectHeaderButtonList HeaderButtonsList; + + /// + /// The AV page mangagers that have been used, to keep them alive for later + /// + Dictionary PageManagers = new Dictionary(); + + /// + /// Current page manager running for a source + /// + PageManager CurrentSourcePageManager; + + /// + /// Will auto-timeout a power off + /// + CTimer PowerOffTimer; + + /// + /// + /// + ModalDialog PowerDownModal; + + /// + /// + /// + //ModalDialog WarmingCoolingModal; + + /// + /// Represents + /// + public JoinedSigInterlock PopupInterlock { get; private set; } + + /// + /// Interlock for various source, camera, call control bars. The bar above the activity footer. This is also + /// used to show start page + /// + JoinedSigInterlock StagingBarInterlock; + + /// + /// Interlocks the various call-related subpages + /// + JoinedSigInterlock CallPagesInterlock; + + /// + /// The Video codec driver + /// + PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver VCDriver; + + /// + /// The driver for the tech page. Lazy getter for memory usage + /// + PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver TechDriver + { + get + { + if (_TechDriver == null) + _TechDriver = new PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver(TriList, CurrentRoom.Config.Tech); + return _TechDriver; + } + } + PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver _TechDriver; + + /// + /// Controls timeout of notification ribbon timer + /// + CTimer RibbonTimer; + + /// + /// The keyboard + /// + public PepperDash.Essentials.Core.Touchpanels.Keyboards.HabaneroKeyboardController Keyboard { get; private set; } + + /// + /// The mode showing. Presentation or call. + /// + UiDisplayMode CurrentMode = UiDisplayMode.Start; + + CTimer NextMeetingTimer; + + /// + /// Tracks the last meeting that was cancelled + /// + string LastMeetingDismissedId; + + /// + /// Constructor + /// + public EssentialsHuddleVtc1PanelAvFunctionsDriver(PanelDriverBase parent, CrestronTouchpanelPropertiesConfig config) + : base(parent.TriList) + { + Config = config; + Parent = parent; + + PopupInterlock = new JoinedSigInterlock(TriList); + StagingBarInterlock = new JoinedSigInterlock(TriList); + CallPagesInterlock = new JoinedSigInterlock(TriList); + + SourceStagingSrl = new SubpageReferenceList(TriList, UISmartObjectJoin.SourceStagingSRL, 3, 3, 3); + + ActivityFooterSrl = new SubpageReferenceList(TriList, UISmartObjectJoin.ActivityFooterSRL, 3, 3, 3); + CallButtonSig = ActivityFooterSrl.BoolInputSig(2, 1); + ShareButtonSig = ActivityFooterSrl.BoolInputSig(1, 1); + EndMeetingButtonSig = ActivityFooterSrl.BoolInputSig(3, 1); + + MeetingOrContactMethodModalSrl = new SubpageReferenceList(TriList, UISmartObjectJoin.MeetingListSRL, 3, 3, 5); + + + // buttons are added in SetCurrentRoom + //HeaderButtonsList = new SmartObjectHeaderButtonList(TriList.SmartObjects[UISmartObjectJoin.HeaderButtonList]); + + SetupActivityFooterWhenRoomOff(); + + ShowVolumeGauge = true; + Keyboard = new PepperDash.Essentials.Core.Touchpanels.Keyboards.HabaneroKeyboardController(TriList); + } + + /// + /// Add a video codec driver to this + /// + /// + public void SetVideoCodecDriver(PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver vcd) + { + VCDriver = vcd; + } + + /// + /// + /// + public override void Show() + { + if (CurrentRoom == null) + { + Debug.Console(1, "ERROR: AVUIFunctionsDriver, Cannot show. No room assigned"); + return; + } + + var roomConf = CurrentRoom.Config; + + TriList.SetString(UIStringJoin.CurrentRoomName, CurrentRoom.Name); + + if (Config.HeaderStyle.ToLower() == CrestronTouchpanelPropertiesConfig.Habanero) + { + TriList.SetSigFalseAction(UIBoolJoin.HeaderRoomButtonPress, () => + PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.RoomHeaderPageVisible)); + } + else if (Config.HeaderStyle.ToLower() == CrestronTouchpanelPropertiesConfig.Verbose) + { + // room name on join 1, concat phone and sip on join 2, no button method + //var addr = roomConf.Addresses; + //if (addr == null) // protect from missing values by using default empties + // addr = new EssentialsRoomAddressPropertiesConfig(); + //// empty string when either missing, pipe when both showing + //TriList.SetString(UIStringJoin.RoomAddressPipeText, + // (string.IsNullOrEmpty(addr.PhoneNumber.Trim()) + // || string.IsNullOrEmpty(addr.SipAddress.Trim())) ? "" : " | "); + //TriList.SetString(UIStringJoin.RoomPhoneText, addr.PhoneNumber); + //TriList.SetString(UIStringJoin.RoomSipText, addr.SipAddress); + } + + TriList.SetBool(UIBoolJoin.DateAndTimeVisible, Config.ShowDate && Config.ShowTime); + TriList.SetBool(UIBoolJoin.DateOnlyVisible, Config.ShowDate && !Config.ShowTime); + TriList.SetBool(UIBoolJoin.TimeOnlyVisible, !Config.ShowDate && Config.ShowTime); + + TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, true); + + TriList.SetBool(UIBoolJoin.ActivityFooterVisible, true); + + // Privacy mute button + TriList.SetSigFalseAction(UIBoolJoin.Volume1SpeechMutePressAndFB, CurrentRoom.PrivacyModeToggle); + CurrentRoom.PrivacyModeIsOnFeedback.LinkInputSig(TriList.BooleanInput[UIBoolJoin.Volume1SpeechMutePressAndFB]); + + // Default to showing rooms/sources now. + if (CurrentRoom.OnFeedback.BoolValue) + { + TriList.SetBool(UIBoolJoin.TapToBeginVisible, false); + SetupActivityFooterWhenRoomOn(); + } + else + { + TriList.SetBool(UIBoolJoin.StartPageVisible, true); + TriList.SetBool(UIBoolJoin.TapToBeginVisible, true); + SetupActivityFooterWhenRoomOff(); + } + ShowCurrentDisplayModeSigsInUse(); + + // *** Header Buttons *** + + // Generic "close" button for popup modals + TriList.SetSigFalseAction(UIBoolJoin.InterlockedModalClosePress, PopupInterlock.HideAndClear); + + // Volume related things + TriList.SetSigFalseAction(UIBoolJoin.VolumeDefaultPress, () => CurrentRoom.SetDefaultLevels()); + TriList.SetString(UIStringJoin.AdvancedVolumeSlider1Text, "Room"); + + //if (TriList is CrestronApp) + // TriList.BooleanInput[UIBoolJoin.GearButtonVisible].BoolValue = false; + //else + // TriList.BooleanInput[UIBoolJoin.GearButtonVisible].BoolValue = true; + + // power-related functions + // Note: some of these are not directly-related to the huddle space UI, but are held over + // in case + TriList.SetSigFalseAction(UIBoolJoin.ShowPowerOffPress, EndMeetingPress); + + TriList.SetSigFalseAction(UIBoolJoin.DisplayPowerTogglePress, () => + { + if (CurrentRoom != null && CurrentRoom.DefaultDisplay is IPower) + (CurrentRoom.DefaultDisplay as IPower).PowerToggle(); + }); + + SetupNextMeetingTimer(); + + base.Show(); + } + + /// + /// Allows PopupInterlock to be toggled if the calls list is already visible, or if the codec is in a call + /// + public void ShowActiveCallsList() + { + TriList.SetBool(UIBoolJoin.CallEndAllConfirmVisible, true); + if(PopupInterlock.CurrentJoin == UIBoolJoin.HeaderActiveCallsListVisible) + PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HeaderActiveCallsListVisible); + else + { + if((CurrentRoom.ScheduleSource as VideoCodecBase).IsInCall) + PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HeaderActiveCallsListVisible); + } + } + + /// + /// + /// + void ShowLogo() + { + if (CurrentRoom.LogoUrl == null) + { + TriList.SetBool(UIBoolJoin.LogoDefaultVisible, true); + TriList.SetBool(UIBoolJoin.LogoUrlVisible, false); + } + else + { + TriList.SetBool(UIBoolJoin.LogoDefaultVisible, false); + TriList.SetBool(UIBoolJoin.LogoUrlVisible, true); + TriList.SetString(UIStringJoin.LogoUrl, _CurrentRoom.LogoUrl); + } + } + + /// + /// + /// + void HideLogo() + { + TriList.SetBool(UIBoolJoin.LogoDefaultVisible, false); + TriList.SetBool(UIBoolJoin.LogoUrlVisible, false); + } + + /// + /// + /// + public override void Hide() + { + HideAndClearCurrentDisplayModeSigsInUse(); + TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, false); + TriList.BooleanInput[UIBoolJoin.ActivityFooterVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.TapToBeginVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; + if (NextMeetingTimer != null) + NextMeetingTimer.Stop(); + HideNextMeetingPopup(); + base.Hide(); + } + + /// + /// Reveals a message on the notification ribbon until cleared + /// + /// Text to display + /// Time in ms to display. 0 to keep on screen + public void ShowNotificationRibbon(string message, int timeout) + { + TriList.SetString(UIStringJoin.NotificationRibbonText, message); + TriList.SetBool(UIBoolJoin.NotificationRibbonVisible, true); + if (timeout > 0) + { + if (RibbonTimer != null) + RibbonTimer.Stop(); + RibbonTimer = new CTimer(o => { + TriList.SetBool(UIBoolJoin.NotificationRibbonVisible, false); + RibbonTimer = null; + }, timeout); + } + } + + /// + /// Hides the notification ribbon + /// + public void HideNotificationRibbon() + { + TriList.SetBool(UIBoolJoin.NotificationRibbonVisible, false); + if (RibbonTimer != null) + { + RibbonTimer.Stop(); + RibbonTimer = null; + } + } + + void SetupNextMeetingTimer() + { + var ss = CurrentRoom.ScheduleSource; + if (ss != null) + { + NextMeetingTimer = new CTimer(o => ShowNextMeetingTimerCallback(), null, 0, 60000); + } + } + + /// + /// + /// + void ShowNextMeetingTimerCallback() + { + // Every 60 seconds, refresh the calendar + RefreshMeetingsList(); + // check meetings list for the closest, joinable meeting + var ss = CurrentRoom.ScheduleSource; + var meetings = ss.CodecSchedule.Meetings; + + if (meetings.Count > 0) + { + // If the room is off pester the user + // If the room is on, and the meeting is joinable + // and the LastMeetingDismissed != this meeting + + var lastMeetingDismissed = meetings.FirstOrDefault(m => m.Id == LastMeetingDismissedId); + Debug.Console(0, "*#* Room on: {0}, lastMeetingDismissedId: {1} {2} *#*", + CurrentRoom.OnFeedback.BoolValue, + LastMeetingDismissedId, + lastMeetingDismissed != null ? lastMeetingDismissed.StartTime.ToShortTimeString() : ""); + + var meeting = meetings.LastOrDefault(m => m.Joinable); + if (CurrentRoom.OnFeedback.BoolValue + && lastMeetingDismissed == meeting) + { + return; + } + + LastMeetingDismissedId = null; + // Clear the popup when we run out of meetings + if (meeting == null) + { + HideNextMeetingPopup(); + } + else + { + TriList.SetString(UIStringJoin.MeetingsOrContactMethodListTitleText, "Upcoming meeting"); + TriList.SetString(UIStringJoin.NextMeetingStartTimeText, meeting.StartTime.ToShortTimeString()); + TriList.SetString(UIStringJoin.NextMeetingEndTimeText, meeting.EndTime.ToShortTimeString()); + TriList.SetString(UIStringJoin.NextMeetingTitleText, meeting.Title); + TriList.SetString(UIStringJoin.NextMeetingNameText, meeting.Organizer); + TriList.SetString(UIStringJoin.NextMeetingButtonLabel, "Join"); + TriList.SetSigFalseAction(UIBoolJoin.NextMeetingJoinPress, () => + { + HideNextMeetingPopup(); + PopupInterlock.Hide(); + RoomOnAndDialMeeting(meeting); + }); + TriList.SetString(UIStringJoin.NextMeetingSecondaryButtonLabel, "Show Schedule"); + TriList.SetSigFalseAction(UIBoolJoin.CalendarHeaderButtonPress, () => + { + HideNextMeetingPopup(); + //CalendarPress(); + RefreshMeetingsList(); + PopupInterlock.ShowInterlocked(UIBoolJoin.MeetingsOrContacMethodsListVisible); + }); + var indexOfNext = meetings.IndexOf(meeting) + 1; + + // indexOf = 3, 4 meetings : + if (indexOfNext < meetings.Count) + TriList.SetString(UIStringJoin.NextMeetingFollowingMeetingText, + meetings[indexOfNext].StartTime.ToShortTimeString()); + else + TriList.SetString(UIStringJoin.NextMeetingFollowingMeetingText, "No more meetings today"); + + TriList.SetSigFalseAction(UIBoolJoin.NextMeetingModalClosePress, () => + { + // Mark the meeting to not re-harass the user + if(CurrentRoom.OnFeedback.BoolValue) + LastMeetingDismissedId = meeting.Id; + HideNextMeetingPopup(); + }); + + TriList.SetBool(UIBoolJoin.NextMeetingModalVisible, true); + } + } + } + + /// + /// + /// + void HideNextMeetingPopup() + { + TriList.SetBool(UIBoolJoin.NextMeetingModalVisible, false); + + } + + /// + /// Calendar should only be visible when it's supposed to + /// + public void CalendarPress() + { + //RefreshMeetingsList(); // List should be up-to-date + PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.MeetingsOrContacMethodsListVisible); + } + + /// + /// Dials a meeting after turning on room (if necessary) + /// + void RoomOnAndDialMeeting(Meeting meeting) + { + Action dialAction = () => + { + var d = CurrentRoom.ScheduleSource as VideoCodecBase; + if (d != null) + { + d.Dial(meeting); + LastMeetingDismissedId = meeting.Id; // To prevent prompts for already-joined call + } + }; + if (CurrentRoom.OnFeedback.BoolValue) + dialAction(); + else + { + // Rig a one-time handler to catch when the room is warmed and then dial call + EventHandler oneTimeHandler = null; + oneTimeHandler = (o, a) => + { + if (!CurrentRoom.IsWarmingUpFeedback.BoolValue) + { + CurrentRoom.IsWarmingUpFeedback.OutputChange -= oneTimeHandler; + dialAction(); + } + }; + CurrentRoom.IsWarmingUpFeedback.OutputChange += oneTimeHandler; + ActivityCallButtonPressed(); + } + } + + /// + /// Reveals the tech page and puts away anything that's in the way. + /// + public void ShowTech() + { + PopupInterlock.HideAndClear(); + TechDriver.Show(); + } + + /// + /// When the room is off, set the footer SRL + /// + void SetupActivityFooterWhenRoomOff() + { + ActivityFooterSrl.Clear(); + ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(1, ActivityFooterSrl, 0, + b => { if (!b) ActivityShareButtonPressed(); })); + ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(2, ActivityFooterSrl, 3, + b => { if (!b) ActivityCallButtonPressed(); })); + ActivityFooterSrl.Count = 2; + TriList.SetUshort(UIUshortJoin.PresentationStagingCaretMode, 1); // right one slot + TriList.SetUshort(UIUshortJoin.CallStagingCaretMode, 5); // left one slot + } + + /// + /// Sets up the footer SRL for when the room is on + /// + void SetupActivityFooterWhenRoomOn() + { + ActivityFooterSrl.Clear(); + ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(1, ActivityFooterSrl, 0, + b => { if (!b) ActivityShareButtonPressed(); })); + ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(2, ActivityFooterSrl, 3, + b => { if (!b) ActivityCallButtonPressed(); })); + ActivityFooterSrl.AddItem(new SubpageReferenceListActivityItem(3, ActivityFooterSrl, 4, + b => { if (!b) EndMeetingPress(); })); + ActivityFooterSrl.Count = 3; + TriList.SetUshort(UIUshortJoin.PresentationStagingCaretMode, 2); // center + TriList.SetUshort(UIUshortJoin.CallStagingCaretMode, 0); // left -2 + } + + /// + /// Single point call for setting the feedbacks on the activity buttons + /// + void SetActivityFooterFeedbacks() + { + CallButtonSig.BoolValue = CurrentMode == UiDisplayMode.Call + && CurrentRoom.ShutdownType == eShutdownType.None; + ShareButtonSig.BoolValue = CurrentMode == UiDisplayMode.Presentation + && CurrentRoom.ShutdownType == eShutdownType.None; + EndMeetingButtonSig.BoolValue = CurrentRoom.ShutdownType != eShutdownType.None; + } + + /// + /// + /// + public void ActivityCallButtonPressed() + { + if (VCDriver.IsVisible) + return; + HideLogo(); + HideNextMeetingPopup(); + TriList.SetBool(UIBoolJoin.StartPageVisible, false); + TriList.SetBool(UIBoolJoin.SourceStagingBarVisible, false); + TriList.SetBool(UIBoolJoin.SelectASourceVisible, false); + if (CurrentSourcePageManager != null) + CurrentSourcePageManager.Hide(); + PowerOnFromCall(); + CurrentMode = UiDisplayMode.Call; + SetActivityFooterFeedbacks(); + VCDriver.Show(); + } + + /// + /// Attached to activity list share button + /// + void ActivityShareButtonPressed() + { + SetupSourceList(); + if (VCDriver.IsVisible) + VCDriver.Hide(); + HideNextMeetingPopup(); + TriList.SetBool(UIBoolJoin.StartPageVisible, false); + TriList.SetBool(UIBoolJoin.CallStagingBarVisible, false); + TriList.SetBool(UIBoolJoin.SourceStagingBarVisible, true); + // Run default source when room is off and share is pressed + if (!CurrentRoom.OnFeedback.BoolValue) + { + if (!CurrentRoom.OnFeedback.BoolValue) + { + // If there's no default, show UI elements + if (!CurrentRoom.RunDefaultPresentRoute()) + TriList.SetBool(UIBoolJoin.SelectASourceVisible, true); + } + } + else // room is on show what's active or select a source if nothing is yet active + { + if(CurrentRoom.CurrentSourceInfo == null || CurrentRoom.CurrentSourceInfoKey == CurrentRoom.DefaultCodecRouteString) + TriList.SetBool(UIBoolJoin.SelectASourceVisible, true); + else if (CurrentSourcePageManager != null) + CurrentSourcePageManager.Show(); + } + CurrentMode = UiDisplayMode.Presentation; + SetupSourceList(); + SetActivityFooterFeedbacks(); + } + + /// + /// Powers up the system to the codec route, if not already on. + /// + void PowerOnFromCall() + { + if (!CurrentRoom.OnFeedback.BoolValue) + { + CurrentRoom.RunDefaultCallRoute(); + } + } + + /// + /// Shows all sigs that are in CurrentDisplayModeSigsInUse + /// + void ShowCurrentDisplayModeSigsInUse() + { + foreach (var sig in CurrentDisplayModeSigsInUse) + sig.BoolValue = true; + } + + /// + /// Hides all CurrentDisplayModeSigsInUse sigs and clears the array + /// + void HideAndClearCurrentDisplayModeSigsInUse() + { + foreach (var sig in CurrentDisplayModeSigsInUse) + sig.BoolValue = false; + CurrentDisplayModeSigsInUse.Clear(); + } + + + /// + /// Loads the appropriate Sigs into CurrentDisplayModeSigsInUse and shows them + /// + void ShowCurrentSource() + { + if (CurrentRoom.CurrentSourceInfo == null) + return; + + if (CurrentRoom.CurrentSourceInfo.SourceDevice == null) + { + TriList.SetBool(UIBoolJoin.SelectASourceVisible, true); + return; + } + + var uiDev = CurrentRoom.CurrentSourceInfo.SourceDevice as IUiDisplayInfo; + PageManager pm = null; + // If we need a page manager, get an appropriate one + if (uiDev != null) + { + TriList.SetBool(UIBoolJoin.SelectASourceVisible, false); + // Got an existing page manager, get it + if (PageManagers.ContainsKey(uiDev)) + pm = PageManagers[uiDev]; + // Otherwise make an apporiate one + else if (uiDev is ISetTopBoxControls) + pm = new SetTopBoxThreePanelPageManager(uiDev as ISetTopBoxControls, TriList); + else if (uiDev is IDiscPlayerControls) + pm = new DiscPlayerMediumPageManager(uiDev as IDiscPlayerControls, TriList); + else + pm = new DefaultPageManager(uiDev, TriList); + PageManagers[uiDev] = pm; + CurrentSourcePageManager = pm; + pm.Show(); + } + } + + /// + /// Called from button presses on source, where We can assume we want + /// to change to the proper screen. + /// + /// The key name of the route to run + void UiSelectSource(string key) + { + // Run the route and when it calls back, show the source + CurrentRoom.RunRouteAction(key, null); + } + + /// + /// + /// + public void EndMeetingPress() + { + if (!CurrentRoom.OnFeedback.BoolValue + || CurrentRoom.ShutdownPromptTimer.IsRunningFeedback.BoolValue) + return; + + CurrentRoom.StartShutdown(eShutdownType.Manual); + } + + /// + /// Puts away modals and things that might be up when call comes in + /// + public void PrepareForCodecIncomingCall() + { + if (PowerDownModal != null && PowerDownModal.ModalIsVisible) + PowerDownModal.CancelDialog(); + PopupInterlock.Hide(); + } + + /// + /// + /// + /// + /// + void ShutdownPromptTimer_HasStarted(object sender, EventArgs e) + { + // Do we need to check where the UI is? No? + var timer = CurrentRoom.ShutdownPromptTimer; + SetActivityFooterFeedbacks(); + + if (CurrentRoom.ShutdownType == eShutdownType.Manual) + { + PowerDownModal = new ModalDialog(TriList); + var message = string.Format("Meeting will end in {0} seconds", CurrentRoom.ShutdownPromptSeconds); + + // Attach timer things to modal + CurrentRoom.ShutdownPromptTimer.TimeRemainingFeedback.OutputChange += ShutdownPromptTimer_TimeRemainingFeedback_OutputChange; + CurrentRoom.ShutdownPromptTimer.PercentFeedback.OutputChange += ShutdownPromptTimer_PercentFeedback_OutputChange; + + // respond to offs by cancelling dialog + var onFb = CurrentRoom.OnFeedback; + EventHandler offHandler = null; + offHandler = (o, a) => + { + if (!onFb.BoolValue) + { + PowerDownModal.HideDialog(); + SetActivityFooterFeedbacks(); + onFb.OutputChange -= offHandler; + } + }; + onFb.OutputChange += offHandler; + + PowerDownModal.PresentModalDialog(2, "End Meeting", "Power", message, "Cancel", "End Meeting Now", true, true, + but => + { + if (but != 2) // any button except for End cancels + timer.Cancel(); + else + timer.Finish(); + }); + } + } + + /// + /// + /// + /// + /// + void ShutdownPromptTimer_HasFinished(object sender, EventArgs e) + { + SetActivityFooterFeedbacks(); + CurrentRoom.ShutdownPromptTimer.TimeRemainingFeedback.OutputChange -= ShutdownPromptTimer_TimeRemainingFeedback_OutputChange; + CurrentRoom.ShutdownPromptTimer.PercentFeedback.OutputChange -= ShutdownPromptTimer_PercentFeedback_OutputChange; + } + + /// + /// + /// + /// + /// + void ShutdownPromptTimer_WasCancelled(object sender, EventArgs e) + { + if (PowerDownModal != null) + PowerDownModal.HideDialog(); + SetActivityFooterFeedbacks(); + + CurrentRoom.ShutdownPromptTimer.TimeRemainingFeedback.OutputChange += ShutdownPromptTimer_TimeRemainingFeedback_OutputChange; + CurrentRoom.ShutdownPromptTimer.PercentFeedback.OutputChange -= ShutdownPromptTimer_PercentFeedback_OutputChange; + } + + /// + /// Event handler for countdown timer on power off modal + /// + void ShutdownPromptTimer_TimeRemainingFeedback_OutputChange(object sender, EventArgs e) + { + + var message = string.Format("Meeting will end in {0} seconds", (sender as StringFeedback).StringValue); + TriList.StringInput[ModalDialog.MessageTextJoin].StringValue = message; + } + + /// + /// Event handler for percentage on power off countdown + /// + void ShutdownPromptTimer_PercentFeedback_OutputChange(object sender, EventArgs e) + { + var value = (ushort)((sender as IntFeedback).UShortValue * 65535 / 100); + TriList.UShortInput[ModalDialog.TimerGaugeJoin].UShortValue = value; + } + + /// + /// + /// + void CancelPowerOffTimer() + { + if (PowerOffTimer != null) + { + PowerOffTimer.Stop(); + PowerOffTimer = null; + } + } + + /// + /// + /// + /// + public void VolumeUpPress(bool state) + { + if (CurrentRoom.CurrentVolumeControls != null) + CurrentRoom.CurrentVolumeControls.VolumeUp(state); + } + + /// + /// + /// + /// + public void VolumeDownPress(bool state) + { + if (CurrentRoom.CurrentVolumeControls != null) + CurrentRoom.CurrentVolumeControls.VolumeDown(state); + } + + /// + /// Helper for property setter. Sets the panel to the given room, latching up all functionality + /// + void SetCurrentRoom(EssentialsHuddleVtc1Room room) + { + if (_CurrentRoom == room) return; + // Disconnect current (probably never called) + if (_CurrentRoom != null) + { + // Disconnect current room + _CurrentRoom.CurrentVolumeDeviceChange -= this.CurrentRoom_CurrentAudioDeviceChange; + ClearAudioDeviceConnections(); + _CurrentRoom.CurrentSingleSourceChange -= this.CurrentRoom_SourceInfoChange; + DisconnectSource(_CurrentRoom.CurrentSourceInfo); + _CurrentRoom.ShutdownPromptTimer.HasStarted -= ShutdownPromptTimer_HasStarted; + _CurrentRoom.ShutdownPromptTimer.HasFinished -= ShutdownPromptTimer_HasFinished; + _CurrentRoom.ShutdownPromptTimer.WasCancelled -= ShutdownPromptTimer_WasCancelled; + + _CurrentRoom.OnFeedback.OutputChange += CurrentRoom_OnFeedback_OutputChange; + _CurrentRoom.IsWarmingUpFeedback.OutputChange -= CurrentRoom_IsWarmingFeedback_OutputChange; + _CurrentRoom.IsCoolingDownFeedback.OutputChange -= CurrentRoom_IsCoolingDownFeedback_OutputChange; + _CurrentRoom.InCallFeedback.OutputChange -= CurrentRoom_InCallFeedback_OutputChange; + } + + _CurrentRoom = room; + + if (_CurrentRoom != null) + { + // get the source list config and set up the source list + + SetupSourceList(); + + // Name and logo + TriList.StringInput[UIStringJoin.CurrentRoomName].StringValue = _CurrentRoom.Name; + ShowLogo(); + + // Shutdown timer + _CurrentRoom.ShutdownPromptTimer.HasStarted += ShutdownPromptTimer_HasStarted; + _CurrentRoom.ShutdownPromptTimer.HasFinished += ShutdownPromptTimer_HasFinished; + _CurrentRoom.ShutdownPromptTimer.WasCancelled += ShutdownPromptTimer_WasCancelled; + + // Link up all the change events from the room + _CurrentRoom.OnFeedback.OutputChange += CurrentRoom_OnFeedback_OutputChange; + CurrentRoom_SyncOnFeedback(); + _CurrentRoom.IsWarmingUpFeedback.OutputChange += CurrentRoom_IsWarmingFeedback_OutputChange; + _CurrentRoom.IsCoolingDownFeedback.OutputChange += CurrentRoom_IsCoolingDownFeedback_OutputChange; + _CurrentRoom.InCallFeedback.OutputChange += CurrentRoom_InCallFeedback_OutputChange; + + + _CurrentRoom.CurrentVolumeDeviceChange += CurrentRoom_CurrentAudioDeviceChange; + RefreshAudioDeviceConnections(); + _CurrentRoom.CurrentSingleSourceChange += CurrentRoom_SourceInfoChange; + RefreshSourceInfo(); + + (_CurrentRoom.VideoCodec as IHasScheduleAwareness).CodecSchedule.MeetingsListHasChanged += CodecSchedule_MeetingsListHasChanged; + + CallSharingInfoVisibleFeedback = new BoolFeedback(() => _CurrentRoom.VideoCodec.SharingContentIsOnFeedback.BoolValue); + _CurrentRoom.VideoCodec.SharingContentIsOnFeedback.OutputChange += SharingContentIsOnFeedback_OutputChange; + CallSharingInfoVisibleFeedback.LinkInputSig(TriList.BooleanInput[UIBoolJoin.CallSharedSourceInfoVisible]); + + SetActiveCallListSharingContentStatus(); + + if (_CurrentRoom != null) + _CurrentRoom.CurrentSingleSourceChange += new SourceInfoChangeHandler(CurrentRoom_CurrentSingleSourceChange); + + TriList.SetSigFalseAction(UIBoolJoin.CallStopSharingPress, () => _CurrentRoom.RunRouteAction("codecOsd")); + + (Parent as EssentialsPanelMainInterfaceDriver).HeaderDriver.SetupHeaderButtons(this, CurrentRoom); + } + else + { + // Clear sigs that need to be + TriList.StringInput[UIStringJoin.CurrentRoomName].StringValue = "Select a room"; + } + } + + /// + /// + /// + /// + /// + void CurrentRoom_InCallFeedback_OutputChange(object sender, EventArgs e) + { + var inCall = CurrentRoom.InCallFeedback.BoolValue; + if (inCall) + { + // Check if transitioning to in call - and non-sharable source is in use + if (CurrentRoom.CurrentSourceInfo != null && CurrentRoom.CurrentSourceInfo.DisableCodecSharing) + { + Debug.Console(1, CurrentRoom, "Transitioning to in-call, cancelling non-sharable source"); + CurrentRoom.RunRouteAction("codecOsd"); + } + } + + SetupSourceList(); + } + + /// + /// + /// + void SetupSourceList() + { + + var inCall = CurrentRoom.InCallFeedback.BoolValue; + var config = ConfigReader.ConfigObject.SourceLists; + if (config.ContainsKey(_CurrentRoom.SourceListKey)) + { + var srcList = config[_CurrentRoom.SourceListKey].OrderBy(kv => kv.Value.Order); + + // Setup sources list + SourceStagingSrl.Clear(); + uint i = 1; // counter for UI list + foreach (var kvp in srcList) + { + var srcConfig = kvp.Value; + Debug.Console(1, "**** {0}, {1}, {2}, {3}, {4}", srcConfig.PreferredName, srcConfig.IncludeInSourceList, + srcConfig.DisableCodecSharing, inCall, this.CurrentMode); + // Skip sources marked as not included, and filter list of non-sharable sources when in call + // or on share screen + if (!srcConfig.IncludeInSourceList || (inCall && srcConfig.DisableCodecSharing) + || this.CurrentMode == UiDisplayMode.Call && srcConfig.DisableCodecSharing) + { + Debug.Console(1, "Skipping {0}", srcConfig.PreferredName); + continue; + } + + var routeKey = kvp.Key; + var item = new SubpageReferenceListSourceItem(i++, SourceStagingSrl, srcConfig, + b => { if (!b) UiSelectSource(routeKey); }); + SourceStagingSrl.AddItem(item); // add to the SRL + item.RegisterForSourceChange(_CurrentRoom); + } + SourceStagingSrl.Count = (ushort)(i - 1); + } + + } + + /// + /// If the schedule changes, this event will fire + /// + /// + /// + void CodecSchedule_MeetingsListHasChanged(object sender, EventArgs e) + { + RefreshMeetingsList(); + } + + /// + /// Updates the current shared source label on the call list when the source changes + /// + /// + /// + /// + void CurrentRoom_CurrentSingleSourceChange(EssentialsRoomBase room, SourceListItem info, ChangeType type) + { + if (_CurrentRoom.VideoCodec.SharingContentIsOnFeedback.BoolValue && _CurrentRoom.CurrentSourceInfo != null) + TriList.StringInput[UIStringJoin.CallSharedSourceNameText].StringValue = _CurrentRoom.CurrentSourceInfo.PreferredName; + } + + /// + /// Fires when the sharing source feedback of the codec changes + /// + /// + /// + void SharingContentIsOnFeedback_OutputChange(object sender, EventArgs e) + { + SetActiveCallListSharingContentStatus(); + } + + /// + /// Sets the values for the text and button visibilty for the active call list source sharing info + /// + void SetActiveCallListSharingContentStatus() + { + CallSharingInfoVisibleFeedback.FireUpdate(); + + string callListSharedSourceLabel; + + if (_CurrentRoom.VideoCodec.SharingContentIsOnFeedback.BoolValue && _CurrentRoom.CurrentSourceInfo != null) + { + Debug.Console(0, "*#* CurrentRoom.CurrentSourceInfo = {0}", + _CurrentRoom.CurrentSourceInfo != null ? _CurrentRoom.CurrentSourceInfo.SourceKey : "Nada!"); + callListSharedSourceLabel = _CurrentRoom.CurrentSourceInfo.PreferredName; + } + else + callListSharedSourceLabel = "None"; + + TriList.StringInput[UIStringJoin.CallSharedSourceNameText].StringValue = callListSharedSourceLabel; + } + + + ///// + ///// + ///// + //void SetupHeaderButtons() + //{ + // HeaderButtonsAreSetUp = false; + + // TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, true); + + // var roomConf = CurrentRoom.Config; + + // // Gear + // TriList.SetString(UIStringJoin.HeaderButtonIcon5, "Gear"); + // TriList.SetSigHeldAction(UIBoolJoin.HeaderIcon5Press, 2000, + // ShowTech, + // null, + // () => + // { + // if (CurrentRoom.OnFeedback.BoolValue) + // PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.VolumesPageVisible); + // else + // PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.VolumesPagePowerOffVisible); + // }); + // TriList.SetSigFalseAction(UIBoolJoin.TechExitButton, () => + // PopupInterlock.HideAndClear()); + + // // Help button and popup + // if (CurrentRoom.Config.Help != null) + // { + // TriList.SetString(UIStringJoin.HelpMessage, roomConf.Help.Message); + // TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, roomConf.Help.ShowCallButton); + // TriList.SetString(UIStringJoin.HelpPageCallButtonText, roomConf.Help.CallButtonText); + // if (roomConf.Help.ShowCallButton) + // TriList.SetSigFalseAction(UIBoolJoin.HelpPageShowCallButtonPress, () => { }); // ************ FILL IN + // else + // TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress); + // } + // else // older config + // { + // TriList.SetString(UIStringJoin.HelpMessage, CurrentRoom.Config.HelpMessage); + // TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, false); + // TriList.SetString(UIStringJoin.HelpPageCallButtonText, null); + // TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress); + // } + // TriList.SetString(UIStringJoin.HeaderButtonIcon4, "Help"); + // TriList.SetSigFalseAction(UIBoolJoin.HeaderIcon4Press, () => + // { + // string message = null; + // var room = DeviceManager.GetDeviceForKey(Config.DefaultRoomKey) + // as EssentialsHuddleSpaceRoom; + // if (room != null) + // message = room.Config.HelpMessage; + // else + // message = "Sorry, no help message available. No room connected."; + // //TriList.StringInput[UIStringJoin.HelpMessage].StringValue = message; + // PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HelpPageVisible); + // }); + // uint nextJoin = 3953; + + // // Calendar button + // if (_CurrentRoom.ScheduleSource != null) + // { + // TriList.SetString(nextJoin, "Calendar"); + // TriList.SetSigFalseAction(nextJoin, CalendarPress); + + // nextJoin--; + // } + + // // Call button + // TriList.SetString(nextJoin, "DND"); + // TriList.SetSigFalseAction(nextJoin, ShowActiveCallsList); + // HeaderCallButtonIconSig = TriList.StringInput[nextJoin]; + + // nextJoin--; + + // // blank any that remain + // for (var i = nextJoin; i > 3950; i--) + // { + // TriList.SetString(i, "Blank"); + // TriList.SetSigFalseAction(i, () => { }); + // } + + // TriList.SetSigFalseAction(UIBoolJoin.HeaderCallStatusLabelPress, ShowActiveCallsList); + + // // Set Call Status Subpage Position + + // if (nextJoin == 3951) + // { + // // Set to right position + // TriList.SetBool(UIBoolJoin.HeaderCallStatusLeftPositionVisible, false); + // TriList.SetBool(UIBoolJoin.HeaderCallStatusRightPositionVisible, true); + // } + // else if (nextJoin == 3950) + // { + // // Set to left position + // TriList.SetBool(UIBoolJoin.HeaderCallStatusLeftPositionVisible, true); + // TriList.SetBool(UIBoolJoin.HeaderCallStatusRightPositionVisible, false); + // } + + // HeaderButtonsAreSetUp = true; + + // ComputeHeaderCallStatus(CurrentRoom.VideoCodec); + //} + + ///// + ///// Evaluates the call status and sets the icon mode and text label + ///// + //public void ComputeHeaderCallStatus(VideoCodecBase codec) + //{ + // if (codec == null) + // { + // Debug.Console(1, "ComputeHeaderCallStatus() cannot execute. codec is null"); + // return; + // } + + // if (HeaderCallButtonIconSig == null) + // { + // Debug.Console(1, "ComputeHeaderCallStatus() cannot execute. HeaderCallButtonIconSig is null"); + // return; + // } + + // // Set mode of header button + // if (!codec.IsInCall) + // { + // HeaderCallButtonIconSig.StringValue = "DND"; + // //HeaderCallButton.SetIcon(HeaderListButton.OnHook); + // } + // else if (codec.ActiveCalls.Any(c => c.Type == eCodecCallType.Video)) + // HeaderCallButtonIconSig.StringValue = "Misc-06_Dark"; + // //HeaderCallButton.SetIcon(HeaderListButton.Camera); + // //TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 2); + // else + // HeaderCallButtonIconSig.StringValue = "Misc-09_Dark"; + // //HeaderCallButton.SetIcon(HeaderListButton.Phone); + // //TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 1); + + // // Set the call status text + // if (codec.ActiveCalls.Count > 0) + // { + // if (codec.ActiveCalls.Count == 1) + // TriList.SetString(UIStringJoin.HeaderCallStatusLabel, "1 Active Call"); + // else if (codec.ActiveCalls.Count > 1) + // TriList.SetString(UIStringJoin.HeaderCallStatusLabel, string.Format("{0} Active Calls", codec.ActiveCalls.Count)); + // } + // else + // TriList.SetString(UIStringJoin.HeaderCallStatusLabel, "No Active Calls"); + //} + + /// + /// + /// + void RefreshMeetingsList() + { + // See if this is helpful or if the callback response in the codec class maybe doesn't come it time? + // Let's build list from event + // CurrentRoom.ScheduleSource.GetSchedule(); + + TriList.SetString(UIStringJoin.MeetingsOrContactMethodListIcon, "Calendar"); + TriList.SetString(UIStringJoin.MeetingsOrContactMethodListTitleText, "Today's Meetings"); + + ushort i = 0; + foreach (var m in CurrentRoom.ScheduleSource.CodecSchedule.Meetings) + { + i++; + MeetingOrContactMethodModalSrl.StringInputSig(i, 1).StringValue = m.StartTime.ToShortTimeString(); + MeetingOrContactMethodModalSrl.StringInputSig(i, 2).StringValue = m.EndTime.ToShortTimeString(); + MeetingOrContactMethodModalSrl.StringInputSig(i, 3).StringValue = m.Title; + MeetingOrContactMethodModalSrl.StringInputSig(i, 4).StringValue = string.Format("
{0}",m.Organizer); + MeetingOrContactMethodModalSrl.StringInputSig(i, 5).StringValue = "Join"; + MeetingOrContactMethodModalSrl.BoolInputSig(i, 2).BoolValue = m.Joinable; + var mm = m; // lambda scope + MeetingOrContactMethodModalSrl.GetBoolFeedbackSig(i, 1).SetSigFalseAction(() => + { + PopupInterlock.Hide(); + ActivityCallButtonPressed(); + var d = CurrentRoom.ScheduleSource as VideoCodecBase; + if (d != null) + RoomOnAndDialMeeting(mm); + }); + } + MeetingOrContactMethodModalSrl.Count = i; + + if (i == 0) // Show item indicating no meetings are booked for rest of day + { + MeetingOrContactMethodModalSrl.Count = 1; + + MeetingOrContactMethodModalSrl.StringInputSig(1, 1).StringValue = string.Empty; + MeetingOrContactMethodModalSrl.StringInputSig(1, 2).StringValue = string.Empty; + MeetingOrContactMethodModalSrl.StringInputSig(1, 3).StringValue = "No Meetings are booked for the remainder of the day."; + MeetingOrContactMethodModalSrl.StringInputSig(1, 4).StringValue = string.Empty; + MeetingOrContactMethodModalSrl.StringInputSig(1, 5).StringValue = string.Empty; + } + } + + /// + /// For room on/off changes + /// + void CurrentRoom_OnFeedback_OutputChange(object sender, EventArgs e) + { + CurrentRoom_SyncOnFeedback(); + } + + /// + /// + /// + void CurrentRoom_SyncOnFeedback() + { + var value = _CurrentRoom.OnFeedback.BoolValue; + TriList.BooleanInput[UIBoolJoin.RoomIsOn].BoolValue = value; + + TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = !value; + + if (value) //ON + { + SetupActivityFooterWhenRoomOn(); + TriList.BooleanInput[UIBoolJoin.SelectASourceVisible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.VolumeDualMute1Visible].BoolValue = true; + + } + else + { + CurrentMode = UiDisplayMode.Start; + if (VCDriver.IsVisible) + VCDriver.Hide(); + SetupActivityFooterWhenRoomOff(); + ShowLogo(); + SetActivityFooterFeedbacks(); + TriList.BooleanInput[UIBoolJoin.VolumeDualMute1Visible].BoolValue = false; + TriList.BooleanInput[UIBoolJoin.SourceStagingBarVisible].BoolValue = false; + // Clear this so that the pesky meeting warning can resurface every minute when off + LastMeetingDismissedId = null; + } + } + + /// + /// + /// + void CurrentRoom_IsWarmingFeedback_OutputChange(object sender, EventArgs e) + { + if (CurrentRoom.IsWarmingUpFeedback.BoolValue) + { + ShowNotificationRibbon("Room is powering on. Please wait...", 0); + } + else + { + ShowNotificationRibbon("Room is powered on. Welcome.", 2000); + } + } + + /// + /// + /// + /// + /// + void CurrentRoom_IsCoolingDownFeedback_OutputChange(object sender, EventArgs e) + { + if (CurrentRoom.IsCoolingDownFeedback.BoolValue) + { + ShowNotificationRibbon("Room is powering off. Please wait.", 0); + } + else + { + HideNotificationRibbon(); + } + } + + /// + /// Hides source for provided source info + /// + /// + void DisconnectSource(SourceListItem previousInfo) + { + if (previousInfo == null) return; + + // Hide whatever is showing + if (IsVisible) + { + if (CurrentSourcePageManager != null) + { + CurrentSourcePageManager.Hide(); + CurrentSourcePageManager = null; + } + } + + if (previousInfo == null) return; + var previousDev = previousInfo.SourceDevice; + + // device type interfaces + if (previousDev is ISetTopBoxControls) + (previousDev as ISetTopBoxControls).UnlinkButtons(TriList); + // common interfaces + if (previousDev is IChannel) + (previousDev as IChannel).UnlinkButtons(TriList); + if (previousDev is IColor) + (previousDev as IColor).UnlinkButtons(TriList); + if (previousDev is IDPad) + (previousDev as IDPad).UnlinkButtons(TriList); + if (previousDev is IDvr) + (previousDev as IDvr).UnlinkButtons(TriList); + if (previousDev is INumericKeypad) + (previousDev as INumericKeypad).UnlinkButtons(TriList); + if (previousDev is IPower) + (previousDev as IPower).UnlinkButtons(TriList); + if (previousDev is ITransport) + (previousDev as ITransport).UnlinkButtons(TriList); + } + + /// + /// Refreshes and shows the room's current source + /// + void RefreshSourceInfo() + { + var routeInfo = CurrentRoom.CurrentSourceInfo; + // This will show off popup too + if (this.IsVisible && !VCDriver.IsVisible) + ShowCurrentSource(); + + if (routeInfo == null)// || !CurrentRoom.OnFeedback.BoolValue) + { + // Check for power off and insert "Room is off" + TriList.StringInput[UIStringJoin.CurrentSourceName].StringValue = "Room is off"; + TriList.StringInput[UIStringJoin.CurrentSourceIcon].StringValue = "Power"; + this.Hide(); + Parent.Show(); + return; + } + else if (routeInfo != null) + { + TriList.StringInput[UIStringJoin.CurrentSourceName].StringValue = routeInfo.PreferredName; + TriList.StringInput[UIStringJoin.CurrentSourceIcon].StringValue = routeInfo.Icon; // defaults to "blank" + } + else // This never gets hit???!!! + { + TriList.StringInput[UIStringJoin.CurrentSourceName].StringValue = "---"; + TriList.StringInput[UIStringJoin.CurrentSourceIcon].StringValue = "Blank"; + } + + // Connect controls + if (routeInfo.SourceDevice != null) + ConnectControlDeviceMethods(routeInfo.SourceDevice); + } + + /// + /// Attach the source to the buttons and things + /// + void ConnectControlDeviceMethods(Device dev) + { + if (dev is ISetTopBoxControls) + (dev as ISetTopBoxControls).LinkButtons(TriList); + if (dev is IChannel) + (dev as IChannel).LinkButtons(TriList); + if (dev is IColor) + (dev as IColor).LinkButtons(TriList); + if (dev is IDPad) + (dev as IDPad).LinkButtons(TriList); + if (dev is IDvr) + (dev as IDvr).LinkButtons(TriList); + if (dev is INumericKeypad) + (dev as INumericKeypad).LinkButtons(TriList); + if (dev is IPower) + (dev as IPower).LinkButtons(TriList); + if (dev is ITransport) + (dev as ITransport).LinkButtons(TriList); + } + + /// + /// Detaches the buttons and feedback from the room's current audio device + /// + void ClearAudioDeviceConnections() + { + TriList.ClearBoolSigAction(UIBoolJoin.VolumeUpPress); + TriList.ClearBoolSigAction(UIBoolJoin.VolumeDownPress); + TriList.ClearBoolSigAction(UIBoolJoin.Volume1ProgramMutePressAndFB); + + var fDev = CurrentRoom.CurrentVolumeControls as IBasicVolumeWithFeedback; + if (fDev != null) + { + TriList.ClearUShortSigAction(UIUshortJoin.VolumeSlider1Value); + fDev.VolumeLevelFeedback.UnlinkInputSig( + TriList.UShortInput[UIUshortJoin.VolumeSlider1Value]); + } + } + + /// + /// Attaches the buttons and feedback to the room's current audio device + /// + void RefreshAudioDeviceConnections() + { + var dev = CurrentRoom.CurrentVolumeControls; + if (dev != null) // connect buttons + { + TriList.SetBoolSigAction(UIBoolJoin.VolumeUpPress, VolumeUpPress); + TriList.SetBoolSigAction(UIBoolJoin.VolumeDownPress, VolumeDownPress); + TriList.SetSigFalseAction(UIBoolJoin.Volume1ProgramMutePressAndFB, dev.MuteToggle); + } + + var fbDev = dev as IBasicVolumeWithFeedback; + if (fbDev == null) // this should catch both IBasicVolume and IBasicVolumeWithFeeback + TriList.UShortInput[UIUshortJoin.VolumeSlider1Value].UShortValue = 0; + else + { + // slider + TriList.SetUShortSigAction(UIUshortJoin.VolumeSlider1Value, fbDev.SetVolume); + // feedbacks + fbDev.MuteFeedback.LinkInputSig(TriList.BooleanInput[UIBoolJoin.Volume1ProgramMutePressAndFB]); + fbDev.VolumeLevelFeedback.LinkInputSig( + TriList.UShortInput[UIUshortJoin.VolumeSlider1Value]); + } + } + + /// + /// Handler for when the room's volume control device changes + /// + void CurrentRoom_CurrentAudioDeviceChange(object sender, VolumeDeviceChangeEventArgs args) + { + if (args.Type == ChangeType.WillChange) + ClearAudioDeviceConnections(); + else // did change + RefreshAudioDeviceConnections(); + } + + /// + /// Handles source change + /// + void CurrentRoom_SourceInfoChange(EssentialsRoomBase room, + SourceListItem info, ChangeType change) + { + if (change == ChangeType.WillChange) + DisconnectSource(info); + else + RefreshSourceInfo(); + } + } + + /// + /// For hanging off various common AV things that child drivers might need from a parent AV driver + /// + public interface IAVDriver + { + JoinedSigInterlock PopupInterlock { get; } + void ShowNotificationRibbon(string message, int timeout); + void HideNotificationRibbon(); + void ShowTech(); + } + + /// + /// For hanging off various common VC things that child drivers might need from a parent AV driver + /// + public interface IAVWithVCDriver : IAVDriver + { + EssentialsHuddleVtc1Room CurrentRoom { get; } + + PepperDash.Essentials.Core.Touchpanels.Keyboards.HabaneroKeyboardController Keyboard { get; } + /// + /// Exposes the ability to switch into call mode + /// + void ActivityCallButtonPressed(); + /// + /// Allows the codec to trigger the main UI to clear up if call is coming in. + /// + void PrepareForCodecIncomingCall(); + + SubpageReferenceList MeetingOrContactMethodModalSrl { get; } + } +} diff --git a/Essentials/PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs b/PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs similarity index 96% rename from Essentials/PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs rename to PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs index 69494263..18651e5f 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs +++ b/PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs @@ -1,129 +1,129 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro.DeviceSupport; - -using PepperDash.Core; -using PepperDash.Essentials.Core; - -namespace PepperDash.Essentials -{ - public class JoinedSigInterlock - { - public uint CurrentJoin { get; private set; } - - BasicTriList TriList; - - public BoolFeedback IsShownFeedback; - - bool _IsShown; - - public bool IsShown - { - get - { - return _IsShown; - } - private set - { - _IsShown = value; - IsShownFeedback.FireUpdate(); - } - } - - //public BoolFeedback ShownFeedback { get; private set; } - - public JoinedSigInterlock(BasicTriList triList) - { - TriList = triList; - - IsShownFeedback = new BoolFeedback(new Func( () => _IsShown)); - } - - /// - /// Hides CurrentJoin and shows join. Will check and re-set signal if join - /// equals CurrentJoin - /// - public void ShowInterlocked(uint join) - { - Debug.Console(2, "Trilist {0:X2}, interlock swapping {1} for {2}", TriList.ID, CurrentJoin, join); - if (CurrentJoin == join && TriList.BooleanInput[join].BoolValue) - return; - SetButDontShow(join); - TriList.SetBool(CurrentJoin, true); - IsShown = true; - } - - /// - /// - /// - /// - public void ShowInterlockedWithToggle(uint join) - { - Debug.Console(2, "Trilist {0:X2}, interlock swapping {1} for {2}", TriList.ID, CurrentJoin, join); - if (CurrentJoin == join) - HideAndClear(); - else - { - if (CurrentJoin > 0) - TriList.BooleanInput[CurrentJoin].BoolValue = false; - CurrentJoin = join; - TriList.BooleanInput[CurrentJoin].BoolValue = true; - IsShown = true; - } - } - /// - /// Hides current join and clears CurrentJoin - /// - public void HideAndClear() - { - Debug.Console(2, "Trilist {0:X2}, interlock hiding {1}", TriList.ID, CurrentJoin); - Hide(); - CurrentJoin = 0; - } - - /// - /// Hides the current join but does not clear the selected join in case - /// it needs to be reshown - /// - public void Hide() - { - Debug.Console(2, "Trilist {0:X2}, interlock hiding {1}", TriList.ID, CurrentJoin); - if (CurrentJoin > 0) - { - TriList.BooleanInput[CurrentJoin].BoolValue = false; - IsShown = false; - } - } - - /// - /// If CurrentJoin is set, it restores that join - /// - public void Show() - { - Debug.Console(2, "Trilist {0:X2}, interlock showing {1}", TriList.ID, CurrentJoin); - if (CurrentJoin > 0) - { - TriList.BooleanInput[CurrentJoin].BoolValue = true; - IsShown = true; - } - } - - /// - /// Useful for pre-setting the interlock but not enabling it. Sets CurrentJoin - /// - /// - public void SetButDontShow(uint join) - { - if (CurrentJoin > 0) - { - TriList.BooleanInput[CurrentJoin].BoolValue = false; - IsShown = false; - } - CurrentJoin = join; - } - - } +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Core; +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials +{ + public class JoinedSigInterlock + { + public uint CurrentJoin { get; private set; } + + BasicTriList TriList; + + public BoolFeedback IsShownFeedback; + + bool _IsShown; + + public bool IsShown + { + get + { + return _IsShown; + } + private set + { + _IsShown = value; + IsShownFeedback.FireUpdate(); + } + } + + //public BoolFeedback ShownFeedback { get; private set; } + + public JoinedSigInterlock(BasicTriList triList) + { + TriList = triList; + + IsShownFeedback = new BoolFeedback(new Func( () => _IsShown)); + } + + /// + /// Hides CurrentJoin and shows join. Will check and re-set signal if join + /// equals CurrentJoin + /// + public void ShowInterlocked(uint join) + { + Debug.Console(2, "Trilist {0:X2}, interlock swapping {1} for {2}", TriList.ID, CurrentJoin, join); + if (CurrentJoin == join && TriList.BooleanInput[join].BoolValue) + return; + SetButDontShow(join); + TriList.SetBool(CurrentJoin, true); + IsShown = true; + } + + /// + /// + /// + /// + public void ShowInterlockedWithToggle(uint join) + { + Debug.Console(2, "Trilist {0:X2}, interlock swapping {1} for {2}", TriList.ID, CurrentJoin, join); + if (CurrentJoin == join) + HideAndClear(); + else + { + if (CurrentJoin > 0) + TriList.BooleanInput[CurrentJoin].BoolValue = false; + CurrentJoin = join; + TriList.BooleanInput[CurrentJoin].BoolValue = true; + IsShown = true; + } + } + /// + /// Hides current join and clears CurrentJoin + /// + public void HideAndClear() + { + Debug.Console(2, "Trilist {0:X2}, interlock hiding {1}", TriList.ID, CurrentJoin); + Hide(); + CurrentJoin = 0; + } + + /// + /// Hides the current join but does not clear the selected join in case + /// it needs to be reshown + /// + public void Hide() + { + Debug.Console(2, "Trilist {0:X2}, interlock hiding {1}", TriList.ID, CurrentJoin); + if (CurrentJoin > 0) + { + TriList.BooleanInput[CurrentJoin].BoolValue = false; + IsShown = false; + } + } + + /// + /// If CurrentJoin is set, it restores that join + /// + public void Show() + { + Debug.Console(2, "Trilist {0:X2}, interlock showing {1}", TriList.ID, CurrentJoin); + if (CurrentJoin > 0) + { + TriList.BooleanInput[CurrentJoin].BoolValue = true; + IsShown = true; + } + } + + /// + /// Useful for pre-setting the interlock but not enabling it. Sets CurrentJoin + /// + /// + public void SetButDontShow(uint join) + { + if (CurrentJoin > 0) + { + TriList.BooleanInput[CurrentJoin].BoolValue = false; + IsShown = false; + } + CurrentJoin = join; + } + + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/UIDrivers/Page Drivers/SingleSubpageModalAndBackDriver.cs b/PepperDashEssentials/UIDrivers/Page Drivers/SingleSubpageModalAndBackDriver.cs similarity index 100% rename from Essentials/PepperDashEssentials/UIDrivers/Page Drivers/SingleSubpageModalAndBackDriver.cs rename to PepperDashEssentials/UIDrivers/Page Drivers/SingleSubpageModalAndBackDriver.cs diff --git a/Essentials/PepperDashEssentials/UIDrivers/Page Drivers/SingleSubpageModalDriver.cs b/PepperDashEssentials/UIDrivers/Page Drivers/SingleSubpageModalDriver.cs similarity index 100% rename from Essentials/PepperDashEssentials/UIDrivers/Page Drivers/SingleSubpageModalDriver.cs rename to PepperDashEssentials/UIDrivers/Page Drivers/SingleSubpageModalDriver.cs diff --git a/Essentials/PepperDashEssentials/UIDrivers/SigInterlock.cs b/PepperDashEssentials/UIDrivers/SigInterlock.cs similarity index 100% rename from Essentials/PepperDashEssentials/UIDrivers/SigInterlock.cs rename to PepperDashEssentials/UIDrivers/SigInterlock.cs diff --git a/Essentials/PepperDashEssentials/UIDrivers/SmartObjectRoomsList.cs b/PepperDashEssentials/UIDrivers/SmartObjectRoomsList.cs similarity index 100% rename from Essentials/PepperDashEssentials/UIDrivers/SmartObjectRoomsList.cs rename to PepperDashEssentials/UIDrivers/SmartObjectRoomsList.cs diff --git a/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs b/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs similarity index 97% rename from Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs rename to PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs index 1fd822df..999a7f0b 100644 --- a/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs +++ b/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs @@ -1,1173 +1,1173 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using Crestron.SimplSharp; -using Crestron.SimplSharpPro.DeviceSupport; - -using PepperDash.Core; -using PepperDash.Essentials; -using PepperDash.Essentials.Core; -using PepperDash.Essentials.Core.SmartObjects; -using PepperDash.Essentials.Core.Touchpanels.Keyboards; -using PepperDash.Essentials.Devices.Common.Codec; -using PepperDash.Essentials.Devices.Common.VideoCodec; - -namespace PepperDash.Essentials.UIDrivers.VC -{ - /// - /// This fella will likely need to interact with the room's source, although that is routed via the spark... - /// Probably needs event or FB to feed AV driver - to show two-mute volume when appropriate. - /// - /// - public class EssentialsVideoCodecUiDriver : PanelDriverBase - { - IAVWithVCDriver Parent; - - /// - /// - /// - VideoCodecBase Codec; - - /// - /// To drive UI elements outside of this driver that may be dependent on this. - /// - //BoolFeedback InCall; - BoolFeedback LocalPrivacyIsMuted; - - /// - /// For the subpages above the bar - /// - JoinedSigInterlock VCControlsInterlock; - - /// - /// For the different staging bars: Active, inactive - /// - JoinedSigInterlock StagingBarsInterlock; - - /// - /// For the staging button feedbacks - /// - JoinedSigInterlock StagingButtonsFeedbackInterlock; - - SmartObjectNumeric DialKeypad; - - SubpageReferenceList ActiveCallsSRL; - - SmartObjectDynamicList RecentCallsList; - - SmartObjectDynamicList DirectoryList; - - CodecDirectory CurrentDirectoryResult; - - /// - /// Tracks the directory browse history when browsing beyond the root directory - /// - List DirectoryBrowseHistory; - - bool NextDirectoryResultIsFolderContents; - - BoolFeedback DirectoryBackButtonVisibleFeedback; - - // These are likely temp until we get a keyboard built - StringFeedback DialStringFeedback; - StringBuilder DialStringBuilder = new StringBuilder(); - BoolFeedback DialStringBackspaceVisibleFeedback; - - StringFeedback SearchStringFeedback; - StringBuilder SearchStringBuilder = new StringBuilder(); - BoolFeedback SearchStringBackspaceVisibleFeedback; - - ModalDialog IncomingCallModal; - - eKeypadMode KeypadMode; - - bool CodecHasFavorites; - - CTimer BackspaceTimer; - - - /// - /// The panel header driver - /// - EssentialsHeaderDriver HeaderDriver; - - /// - /// - /// - /// - /// - public EssentialsVideoCodecUiDriver(BasicTriListWithSmartObject triList, IAVWithVCDriver parent, VideoCodecBase codec, EssentialsHeaderDriver headerDriver) - : base(triList) - { - try - { - if (codec == null) - throw new ArgumentNullException("Codec cannot be null"); - Codec = codec; - Parent = parent; - HeaderDriver = headerDriver; - SetupCallStagingPopover(); - SetupDialKeypad(); - ActiveCallsSRL = new SubpageReferenceList(triList, UISmartObjectJoin.CodecActiveCallsHeaderList, 5,5,5); - SetupDirectoryList(); - SetupRecentCallsList(); - SetupFavorites(); - SetupLayoutControls(); - - codec.CallStatusChange += new EventHandler(Codec_CallStatusChange); - - // If the codec is ready, then get the values we want, otherwise wait - if (Codec.IsReady) - Codec_IsReady(); - else - codec.IsReadyChange += (o, a) => Codec_IsReady(); - - //InCall = new BoolFeedback(() => false); - LocalPrivacyIsMuted = new BoolFeedback(() => false); - - VCControlsInterlock = new JoinedSigInterlock(triList); - if (CodecHasFavorites) - VCControlsInterlock.SetButDontShow(UIBoolJoin.VCKeypadWithFavoritesVisible); - else - VCControlsInterlock.SetButDontShow(UIBoolJoin.VCKeypadVisible); - - StagingBarsInterlock = new JoinedSigInterlock(triList); - StagingBarsInterlock.SetButDontShow(UIBoolJoin.VCStagingInactivePopoverVisible); - - StagingButtonsFeedbackInterlock = new JoinedSigInterlock(triList); - StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingKeypadPress); - - // Return formatted when dialing, straight digits when in call - DialStringFeedback = new StringFeedback(() => - { - if (KeypadMode == eKeypadMode.Dial) - return GetFormattedDialString(DialStringBuilder.ToString()); - else - return DialStringBuilder.ToString(); - - }); - DialStringFeedback.LinkInputSig(triList.StringInput[UIStringJoin.CodecAddressEntryText]); - - DialStringBackspaceVisibleFeedback = new BoolFeedback(() => DialStringBuilder.Length > 0); - DialStringBackspaceVisibleFeedback - .LinkInputSig(triList.BooleanInput[UIBoolJoin.VCKeypadBackspaceVisible]); - - SearchStringFeedback = new StringFeedback(() => - { - if (SearchStringBuilder.Length > 0) - { - Parent.Keyboard.EnableGoButton(); - return SearchStringBuilder.ToString(); - } - else - { - Parent.Keyboard.DisableGoButton(); - return "Tap for keyboard"; - } - }); - SearchStringFeedback.LinkInputSig(triList.StringInput[UIStringJoin.CodecDirectorySearchEntryText]); - - SearchStringBackspaceVisibleFeedback = new BoolFeedback(() => SearchStringBuilder.Length > 0); - SearchStringBackspaceVisibleFeedback.LinkInputSig(triList.BooleanInput[UIBoolJoin.VCDirectoryBackspaceVisible]); - - triList.SetSigFalseAction(UIBoolJoin.VCDirectoryBackPress, GetDirectoryParentFolderContents); - - DirectoryBackButtonVisibleFeedback = new BoolFeedback(() => CurrentDirectoryResult != (codec as IHasDirectory).DirectoryRoot); - DirectoryBackButtonVisibleFeedback - .LinkInputSig(triList.BooleanInput[UIBoolJoin.VCDirectoryBackVisible]); - - triList.SetSigFalseAction(UIBoolJoin.VCKeypadTextPress, RevealKeyboard); - - triList.SetSigFalseAction(UIBoolJoin.VCDirectorySearchTextPress, RevealKeyboard); - - triList.SetSigHeldAction(UIBoolJoin.VCDirectoryBackspacePress, 500, - StartSearchBackspaceRepeat, StopSearchBackspaceRepeat, SearchKeypadBackspacePress); - - } - catch (Exception e) - { - Debug.Console(1, "Exception in VideoCodecUiDriver Constructor: {0}", e); - } - } - - - /// - /// - /// - /// - /// - void Codec_IsReady() - { - string roomNumberSipUri = ""; - -#warning FIX PHONE FORMATTING TO ONLY SHOW WHEN APPROPRIATE - TALK TO NEIL - - if (!string.IsNullOrEmpty(Codec.CodecInfo.SipUri)) // If both values are present, format the string with a pipe divider - roomNumberSipUri = string.Format("{0} | {1}", GetFormattedPhoneNumber(Codec.CodecInfo.SipPhoneNumber), Codec.CodecInfo.SipUri); - else // If only one value present, just show the phone number - roomNumberSipUri = Codec.CodecInfo.SipPhoneNumber; - - if(string.IsNullOrEmpty(roomNumberSipUri)) - roomNumberSipUri = string.Format("{0} | {1}", Codec.CodecInfo.E164Alias, Codec.CodecInfo.H323Id); - - TriList.SetString(UIStringJoin.RoomPhoneText, roomNumberSipUri); - - if(HeaderDriver.HeaderButtonsAreSetUp) - HeaderDriver.ComputeHeaderCallStatus(Codec); - } - - /// - /// Handles status changes for calls - /// - /// - /// - void Codec_CallStatusChange(object sender, CodecCallStatusItemChangeEventArgs e) - { - var call = e.CallItem; - - switch (e.CallItem.Status) - { - case eCodecCallStatus.Connected: - // fire at SRL item - KeypadMode = eKeypadMode.DTMF; - DialStringBuilder.Remove(0, DialStringBuilder.Length); - DialStringFeedback.FireUpdate(); - DialStringTextCheckEnables(); - Parent.ShowNotificationRibbon("Connected", 2000); - StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingKeypadPress); - ShowKeypad(); - ((Parent.CurrentRoom as IHasCurrentVolumeControls).CurrentVolumeControls as IBasicVolumeWithFeedback).MuteOff(); - //VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCKeypadVisible); - break; - case eCodecCallStatus.Connecting: - // fire at SRL item - Parent.ShowNotificationRibbon("Connecting", 0); - break; - case eCodecCallStatus.Dialing: - Parent.ShowNotificationRibbon("Connecting", 0); - break; - case eCodecCallStatus.Disconnected: - if (IncomingCallModal != null) - IncomingCallModal.HideDialog(); - if (!Codec.IsInCall) - { - KeypadMode = eKeypadMode.Dial; - // show keypad if we're in call UI mode - ShowKeypad(); - DialStringBuilder.Remove(0, DialStringBuilder.Length); - DialStringFeedback.FireUpdate(); - Parent.ShowNotificationRibbon("Disconnected", 2000); - } - break; - case eCodecCallStatus.Disconnecting: - break; - case eCodecCallStatus.EarlyMedia: - break; - case eCodecCallStatus.Idle: - break; - case eCodecCallStatus.OnHold: - break; - case eCodecCallStatus.Preserved: - break; - case eCodecCallStatus.RemotePreserved: - break; - case eCodecCallStatus.Ringing: - { - // fire up a modal - if( !Codec.CodecInfo.AutoAnswerEnabled && call.Direction == eCodecCallDirection.Incoming) - ShowIncomingModal(call); - break; - } - default: - break; - } - TriList.UShortInput[UIUshortJoin.VCStagingConnectButtonMode].UShortValue = (ushort)(Codec.IsInCall ? 1 : 0); - - uint stageJoin; - if (Codec.IsInCall) - stageJoin = UIBoolJoin.VCStagingActivePopoverVisible; - else - stageJoin = UIBoolJoin.VCStagingInactivePopoverVisible; - if (IsVisible) - StagingBarsInterlock.ShowInterlocked(stageJoin); - else - StagingBarsInterlock.SetButDontShow(stageJoin); - - HeaderDriver.ComputeHeaderCallStatus(Codec); - - // Update active call list - UpdateHeaderActiveCallList(); - } - - /// - /// Redraws the calls list on the header - /// - void UpdateHeaderActiveCallList() - { - var activeList = Codec.ActiveCalls.Where(c => c.IsActiveCall).ToList(); - ActiveCallsSRL.Clear(); - ushort i = 1; - foreach (var c in activeList) - { - //var item = new SubpageReferenceListItem(1, ActiveCallsSRL); - ActiveCallsSRL.StringInputSig(i, 1).StringValue = c.Name; - ActiveCallsSRL.StringInputSig(i, 2).StringValue = c.Number; - ActiveCallsSRL.StringInputSig(i, 3).StringValue = c.Status.ToString(); - ActiveCallsSRL.StringInputSig(i, 4).StringValue = string.Format("Participant {0}", i); - ActiveCallsSRL.UShortInputSig(i, 1).UShortValue = (ushort)(c.Type == eCodecCallType.Video ? 2 : 1); - var cc = c; // for scope in lambda - ActiveCallsSRL.GetBoolFeedbackSig(i, 1).SetSigFalseAction(() => Codec.EndCall(cc)); - i++; - } - ActiveCallsSRL.Count = (ushort)activeList.Count; - - // If Active Calls list is visible and codec is not in a call, hide the list - if (!Codec.IsInCall && Parent.PopupInterlock.CurrentJoin == UIBoolJoin.HeaderActiveCallsListVisible) - Parent.PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HeaderActiveCallsListVisible); - } - - /// - /// - /// - void ShowIncomingModal(CodecActiveCallItem call) - { - (Parent as IAVWithVCDriver).PrepareForCodecIncomingCall(); - IncomingCallModal = new ModalDialog(TriList); - string msg; - string icon; - if (call.Type == eCodecCallType.Audio) - { - icon = "Phone"; - msg = string.Format("Incoming phone call from: {0}", call.Name); - } - else - { - icon = "Camera"; - msg = string.Format("Incoming video call from: {0}", call.Name); - } - IncomingCallModal.PresentModalDialog(2, "Incoming Call", icon, msg, - "Ignore", "Accept", false, false, b => - { - if (b == 1) - Codec.RejectCall(call); - else //2 - AcceptIncomingCall(call); - IncomingCallModal = null; - }); - } - - /// - /// - /// - void AcceptIncomingCall(CodecActiveCallItem call) - { - (Parent as IAVWithVCDriver).PrepareForCodecIncomingCall(); - (Parent as IAVWithVCDriver).ActivityCallButtonPressed(); - Codec.AcceptCall(call); - } - - /// - /// - /// - public override void Show() - { - VCControlsInterlock.Show(); - StagingBarsInterlock.Show(); - DialStringFeedback.FireUpdate(); - base.Show(); - } - - /// - /// - /// - public override void Hide() - { - VCControlsInterlock.Hide(); - StagingBarsInterlock.Hide(); - base.Hide(); - } - - /// - /// Builds the call stage - /// - void SetupCallStagingPopover() - { - TriList.SetSigFalseAction(UIBoolJoin.VCStagingDirectoryPress, ShowDirectory); - TriList.SetSigFalseAction(UIBoolJoin.VCStagingKeypadPress, ShowKeypad); - TriList.SetSigFalseAction(UIBoolJoin.VCStagingRecentsPress, ShowRecents); - TriList.SetSigFalseAction(UIBoolJoin.VCStagingConnectPress, ConnectPress); - TriList.SetSigFalseAction(UIBoolJoin.CallEndPress, () => - { - if (Codec.ActiveCalls.Count > 1) - { - Parent.PopupInterlock.ShowInterlocked(UIBoolJoin.HeaderActiveCallsListVisible); - } - else - Codec.EndAllCalls(); - }); - TriList.SetSigFalseAction(UIBoolJoin.CallEndAllConfirmPress, () => - { - Parent.PopupInterlock.HideAndClear(); - Codec.EndAllCalls(); - }); - } - - /// - /// - /// - void SetupDialKeypad() - { - if(TriList.SmartObjects.Contains(UISmartObjectJoin.VCDialKeypad)) - { - DialKeypad = new SmartObjectNumeric(TriList.SmartObjects[UISmartObjectJoin.VCDialKeypad], true); - DialKeypad.Digit0.SetSigFalseAction(() => DialKeypadPress("0")); - DialKeypad.Digit1.SetSigFalseAction(() => DialKeypadPress("1")); - DialKeypad.Digit2.SetSigFalseAction(() => DialKeypadPress("2")); - DialKeypad.Digit3.SetSigFalseAction(() => DialKeypadPress("3")); - DialKeypad.Digit4.SetSigFalseAction(() => DialKeypadPress("4")); - DialKeypad.Digit5.SetSigFalseAction(() => DialKeypadPress("5")); - DialKeypad.Digit6.SetSigFalseAction(() => DialKeypadPress("6")); - DialKeypad.Digit7.SetSigFalseAction(() => DialKeypadPress("7")); - DialKeypad.Digit8.SetSigFalseAction(() => DialKeypadPress("8")); - DialKeypad.Digit9.SetSigFalseAction(() => DialKeypadPress("9")); - DialKeypad.Misc1SigName = "*"; - DialKeypad.Misc1.SetSigFalseAction(() => DialKeypadPress("*")); - DialKeypad.Misc2SigName = "#"; - DialKeypad.Misc2.SetSigFalseAction(() => DialKeypadPress("#")); - //TriList.SetSigFalseAction(UIBoolJoin.VCKeypadBackspacePress, DialKeypadBackspacePress); - TriList.SetSigHeldAction(UIBoolJoin.VCKeypadBackspacePress, 500, - StartBackspaceRepeat, StopBackspaceRepeat, DialKeypadBackspacePress); - } - else - Debug.Console(0, "Trilist {0:x2}, VC dial keypad object {1} not found. Check SGD file or VTP", - TriList.ID, UISmartObjectJoin.VCDialKeypad); - } - - /// - /// - /// - void SetupRecentCallsList() - { - var codec = Codec as IHasCallHistory; - if (codec != null) - { - codec.CallHistory.RecentCallsListHasChanged += (o, a) => RefreshRecentCallsList(); - // EVENT??????????????? Pointed at refresh - RecentCallsList = new SmartObjectDynamicList(TriList.SmartObjects[UISmartObjectJoin.VCRecentsList], true, 1200); - RefreshRecentCallsList(); - } - } - - /// - /// - /// - void RefreshRecentCallsList() - { - var codec = Codec as IHasCallHistory; - uint textOffset = 1200; - uint timeTextOffset = 1230; - if (codec != null) - { - ushort i = 0; - foreach (var c in codec.CallHistory.RecentCalls) - { - i++; - TriList.SetString(textOffset + i, c.Name); - // if it's today, show a simpler string - string timeText = null; - if (c.StartTime.Date == DateTime.Now.Date) - timeText = c.StartTime.ToShortTimeString(); - else if (c.StartTime == DateTime.MinValue) - timeText = ""; - else - timeText = c.StartTime.ToString(); - TriList.SetString(timeTextOffset + i, timeText); - - string iconName = null; - if (c.OccurenceType == eCodecOccurrenceType.Received) - iconName = "Misc-18_Light"; - else if (c.OccurenceType == eCodecOccurrenceType.Placed) - iconName = "Misc-17_Light"; - else - iconName = "Delete"; - RecentCallsList.SetItemIcon(i, iconName); - - var call = c; // for lambda scope - RecentCallsList.SetItemButtonAction(i, b => { if(!b) Codec.Dial(call.Number); }); - } - RecentCallsList.Count = i; - } - } - - /// - /// - /// - void SetupFavorites() - { - var c = Codec as IHasCallFavorites; - if (c != null && c.CallFavorites != null) - { - CodecHasFavorites = true; - var favs = c.CallFavorites.Favorites; - for (uint i = 0; i <= 3; i++) - { - if (i < favs.Count) - { - var fav = favs[(int)i]; - TriList.SetString(UIStringJoin.VCFavoritesStart + i, fav.Name); - TriList.SetBool(UIBoolJoin.VCFavoriteVisibleStart + i, true); - TriList.SetSigFalseAction(UIBoolJoin.VCFavoritePressStart + i, () => - { - Codec.Dial(fav.Number); - }); - } - else - TriList.SetBool(UIBoolJoin.VCFavoriteVisibleStart + i, false); - } - } - } - - /// - /// - /// - void SetupDirectoryList() - { - DirectoryBrowseHistory = new List(); - - var codec = Codec as IHasDirectory; - if (codec != null) - { - if (codec != null) - { - DirectoryList = new SmartObjectDynamicList(TriList.SmartObjects[UISmartObjectJoin.VCDirectoryList], - true, 1300); - codec.DirectoryResultReturned += new EventHandler(dir_DirectoryResultReturned); - - if (codec.PhonebookSyncState.InitialSyncComplete) - SetCurrentDirectoryToRoot(); - else - { - codec.PhonebookSyncState.InitialSyncCompleted += new EventHandler(PhonebookSyncState_InitialSyncCompleted); - } - - - // If there is something here now, show it otherwise wait for the event - if (CurrentDirectoryResult != null && codec.DirectoryRoot.DirectoryResults.Count > 0) - { - RefreshDirectory(); - } - } - } - } - - /// - /// Sets the current directory resutls to the DirectorRoot and updates Back Button visibiltiy - /// - void SetCurrentDirectoryToRoot() - { - DirectoryBrowseHistory.Clear(); - - CurrentDirectoryResult = (Codec as IHasDirectory).DirectoryRoot; - - SearchKeypadClear(); - - DirectoryBackButtonVisibleFeedback.FireUpdate(); - - RefreshDirectory(); - } - - /// - /// Setup the Directory list when notified that the initial phonebook sync is completed - /// - /// - /// - void PhonebookSyncState_InitialSyncCompleted(object sender, EventArgs e) - { - var codec = Codec as IHasDirectory; - - SetCurrentDirectoryToRoot(); - - if (CurrentDirectoryResult != null && codec.DirectoryRoot.DirectoryResults.Count > 0) - { - RefreshDirectory(); - } - } - - /// - /// - /// - /// - /// - void dir_DirectoryResultReturned(object sender, DirectoryEventArgs e) - { - if (NextDirectoryResultIsFolderContents) - { - NextDirectoryResultIsFolderContents = false; - DirectoryBrowseHistory.Add(e.Directory); - } - CurrentDirectoryResult = e.Directory; - DirectoryBackButtonVisibleFeedback.FireUpdate(); - RefreshDirectory(); - } - - /// - /// Helper method to retrieve directory folder contents and store last requested folder id - /// - /// - void GetDirectoryFolderContents(DirectoryFolder folder) - { - (Codec as IHasDirectory).GetDirectoryFolderContents(folder.FolderId); - - NextDirectoryResultIsFolderContents = true; - } - - /// - /// Request the parent folder contents or sets back to the root if no parent folder - /// - void GetDirectoryParentFolderContents() - { - var codec = Codec as IHasDirectory; - - if (DirectoryBrowseHistory.Count > 0) - { - var lastItemIndex = DirectoryBrowseHistory.Count - 1; - CurrentDirectoryResult = DirectoryBrowseHistory[lastItemIndex]; - DirectoryBrowseHistory.Remove(DirectoryBrowseHistory[lastItemIndex]); - - RefreshDirectory(); - } - else - { - SetCurrentDirectoryToRoot(); - } - } - - /// - /// - /// - /// - void RefreshDirectory() - { - if (CurrentDirectoryResult.DirectoryResults.Count > 0) - { - ushort i = 0; - foreach (var r in CurrentDirectoryResult.DirectoryResults) - { - if (i == DirectoryList.MaxCount) - { - break; - } - - i++; - - if (r is DirectoryContact) - { - DirectoryList.SetItemMainText(i, r.Name); - - var dc = r as DirectoryContact; - - if (dc.ContactMethods.Count > 1) - { - // If more than one contact method, show contact method modal dialog - DirectoryList.SetItemButtonAction(i, b => - { - if (!b) - { - // Refresh the contact methods list - RefreshContactMethodsModalList(dc); - Parent.PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.MeetingsOrContacMethodsListVisible); - } - }); - - } - else - { - // If only one contact method, just dial that method - DirectoryList.SetItemButtonAction(i, b => { if (!b) Codec.Dial(dc.ContactMethods[0].Number); }); - } - } - else // is DirectoryFolder - { - DirectoryList.SetItemMainText(i, string.Format("[+] {0}", r.Name)); - - var df = r as DirectoryFolder; - - DirectoryList.SetItemButtonAction(i, b => - { - if (!b) - { - GetDirectoryFolderContents(df); - // will later call event handler after folder contents retrieved - } - }); - } - } - DirectoryList.Count = i; - } - else // No results in directory, display message to user - { - DirectoryList.Count = 1; - - DirectoryList.SetItemMainText(1, "No Results Found"); - } - - } - - void RefreshContactMethodsModalList(DirectoryContact contact) - { - TriList.SetString(UIStringJoin.MeetingsOrContactMethodListIcon, "Users"); - TriList.SetString(UIStringJoin.MeetingsOrContactMethodListTitleText, "Contact Methods"); - - ushort i = 0; - foreach (var c in contact.ContactMethods) - { - i++; - Parent.MeetingOrContactMethodModalSrl.StringInputSig(i, 1).StringValue = c.Device.ToString(); - Parent.MeetingOrContactMethodModalSrl.StringInputSig(i, 2).StringValue = c.CallType.ToString(); - Parent.MeetingOrContactMethodModalSrl.StringInputSig(i, 3).StringValue = c.Number; - Parent.MeetingOrContactMethodModalSrl.StringInputSig(i, 4).StringValue = ""; - Parent.MeetingOrContactMethodModalSrl.StringInputSig(i, 5).StringValue = "Connect"; - Parent.MeetingOrContactMethodModalSrl.BoolInputSig(i, 2).BoolValue = true; - var cc = c; // lambda scope - Parent.MeetingOrContactMethodModalSrl.GetBoolFeedbackSig(i, 1).SetSigFalseAction(() => - { - Parent.PopupInterlock.Hide(); - var codec = Codec as VideoCodecBase; - if (codec != null) - codec.Dial(c.Number); - }); - } - Parent.MeetingOrContactMethodModalSrl.Count = i; - - } - - /// - /// - /// - void SetupLayoutControls() - { - TriList.SetSigFalseAction(UIBoolJoin.VCStagingSelfViewLayoutPress, this.ShowSelfViewLayout); - var svc = Codec as IHasCodecSelfview; - if (svc != null) - { - TriList.SetSigFalseAction(UIBoolJoin.VCSelfViewTogglePress, svc.SelfviewModeToggle); - svc.SelfviewIsOnFeedback.LinkInputSig(TriList.BooleanInput[UIBoolJoin.VCSelfViewTogglePress]); - } - var lc = Codec as IHasCodecLayouts; - if (lc != null) - { - TriList.SetSigFalseAction(UIBoolJoin.VCLayoutTogglePress, lc.LocalLayoutToggleSingleProminent); - lc.LocalLayoutFeedback.LinkInputSig(TriList.StringInput[UIStringJoin.VCLayoutModeText]); - lc.LocalLayoutFeedback.OutputChange += (o,a) => - { - TriList.BooleanInput[UIBoolJoin.VCLayoutTogglePress].BoolValue = - lc.LocalLayoutFeedback.StringValue == "Prominent"; - }; - - - // attach to cisco special things to enable buttons - var cisco = Codec as PepperDash.Essentials.Devices.Common.VideoCodec.Cisco.CiscoSparkCodec; - if (cisco != null) - { - // Cisco has min/max buttons that need special sauce - cisco.SharingContentIsOnFeedback.OutputChange += CiscoSharingAndPresentation_OutputChanges; - //cisco.PresentationViewMaximizedFeedback.OutputChange += CiscoSharingAndPresentation_OutputChanges; - - TriList.SetSigFalseAction(UIBoolJoin.VCMinMaxPress, cisco.MinMaxLayoutToggle); - } - - } - } - - /// - /// This should only be linked by cisco classes (spark initially) - /// - /// - /// - void CiscoSharingAndPresentation_OutputChanges(object sender, EventArgs e) - { - var cisco = Codec as PepperDash.Essentials.Devices.Common.VideoCodec.Cisco.CiscoSparkCodec; - if (cisco != null) - { - var sharingNear = cisco.SharingContentIsOnFeedback.BoolValue; - - var sharingFar = cisco.FarEndIsSharingContentFeedback.BoolValue; - //set feedback and enables - TriList.BooleanInput[UIBoolJoin.VCMinMaxEnable].BoolValue = sharingNear; - TriList.BooleanInput[UIBoolJoin.VCLayoutToggleEnable].BoolValue = sharingNear || sharingFar; - TriList.BooleanInput[UIBoolJoin.VCMinMaxPress].BoolValue = sharingNear; - } - } - - /// - /// - /// - void RevealKeyboard() - { - if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCKeypadWithFavoritesVisible && KeypadMode == eKeypadMode.Dial) - { - var kb = Parent.Keyboard; - kb.KeyPress -= Keyboard_DialKeyPress; - kb.KeyPress += Keyboard_DialKeyPress; - kb.HideAction = this.DetachDialKeyboard; - kb.GoButtonText = "Connect"; - kb.GoButtonVisible = true; - DialStringTextCheckEnables(); - kb.Show(); - } - else if(VCControlsInterlock.CurrentJoin == UIBoolJoin.VCDirectoryVisible) - { - var kb = Parent.Keyboard; - kb.KeyPress -= Keyboard_SearchKeyPress; - kb.KeyPress += Keyboard_SearchKeyPress; - kb.HideAction = this.DetachSearchKeyboard; - kb.GoButtonText = "Search"; - kb.GoButtonVisible = true; - SearchStringKeypadCheckEnables(); - kb.Show(); - } - } - - /// - /// Event handler for keyboard dialing - /// - void Keyboard_DialKeyPress(object sender, PepperDash.Essentials.Core.Touchpanels.Keyboards.KeyboardControllerPressEventArgs e) - { - if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCKeypadWithFavoritesVisible && KeypadMode == eKeypadMode.Dial) - { - if (e.Text != null) - DialStringBuilder.Append(e.Text); - else - { - if (e.SpecialKey == KeyboardSpecialKey.Backspace) - DialKeypadBackspacePress(); - else if (e.SpecialKey == KeyboardSpecialKey.Clear) - DialKeypadClear(); - else if (e.SpecialKey == KeyboardSpecialKey.GoButton) - { - ConnectPress(); - } - } - DialStringFeedback.FireUpdate(); - DialStringTextCheckEnables(); - } - } - - /// - /// Event handler for keyboard directory searches - /// - /// - /// - void Keyboard_SearchKeyPress(object sender, KeyboardControllerPressEventArgs e) - { - if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCDirectoryVisible) - { - if (e.Text != null) - SearchStringBuilder.Append(e.Text); - else - { - if (e.SpecialKey == KeyboardSpecialKey.Backspace) - SearchKeypadBackspacePress(); - else if (e.SpecialKey == KeyboardSpecialKey.Clear) - SearchKeypadClear(); - else if (e.SpecialKey == KeyboardSpecialKey.GoButton) - { - SearchPress(); - Parent.Keyboard.Hide(); - } - } - SearchStringFeedback.FireUpdate(); - SearchStringKeypadCheckEnables(); - } - } - - /// - /// Call - /// - void DetachDialKeyboard() - { - Parent.Keyboard.KeyPress -= Keyboard_DialKeyPress; - } - - void DetachSearchKeyboard() - { - Parent.Keyboard.KeyPress -= Keyboard_SearchKeyPress; - } - - /// - /// Shows the camera controls subpage - /// - void ShowCameraControls() - { - VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCCameraVisible); - StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingCameraPress); - } - - /// - /// shows the directory subpage - /// - void ShowDirectory() - { - // populate directory - VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCDirectoryVisible); - StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingDirectoryPress); - - } - - /// - /// shows the appropriate keypad depending on mode and whether visible - /// - void ShowKeypad() - { - uint join = Codec.IsInCall ? UIBoolJoin.VCKeypadVisible : UIBoolJoin.VCKeypadWithFavoritesVisible; - if (IsVisible) - VCControlsInterlock.ShowInterlocked(join); - else - VCControlsInterlock.SetButDontShow(join); - StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingKeypadPress); - } - - /// - /// Shows the self-view layout controls subpage - /// - void ShowSelfViewLayout() - { - VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCSelfViewLayoutVisible); - StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingSelfViewLayoutPress); - } - - /// - /// Shows the recents subpage - /// - void ShowRecents() - { - //populate recents - VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCRecentsVisible); - StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingRecentsPress); - } - - /// - /// Connect call button - /// - void ConnectPress() - { - if (Parent.Keyboard != null) - Parent.Keyboard.Hide(); - Codec.Dial(DialStringBuilder.ToString()); - } - - /// - /// - /// - /// - void DialKeypadPress(string i) - { - if (KeypadMode == eKeypadMode.Dial) - { - DialStringBuilder.Append(i); - DialStringFeedback.FireUpdate(); - DialStringTextCheckEnables(); - } - else - { - Codec.SendDtmf(i); - DialStringBuilder.Append(i); - DialStringFeedback.FireUpdate(); - // no delete key in this mode! - } - DialStringTextCheckEnables(); - } - - /// - /// Does what it says - /// - void StartBackspaceRepeat() - { - if (BackspaceTimer == null) - { - BackspaceTimer = new CTimer(o => DialKeypadBackspacePress(), null, 0, 175); - } - } - - /// - /// Does what it says - /// - void StopBackspaceRepeat() - { - if (BackspaceTimer != null) - { - BackspaceTimer.Stop(); - BackspaceTimer = null; - } - } - - /// - /// - /// - void DialKeypadBackspacePress() - { - if (KeypadMode == eKeypadMode.Dial) - { - DialStringBuilder.Remove(DialStringBuilder.Length - 1, 1); - DialStringFeedback.FireUpdate(); - DialStringTextCheckEnables(); - } - else - DialKeypadClear(); - } - - /// - /// Clears the dial keypad - /// - void DialKeypadClear() - { - DialStringBuilder.Remove(0, DialStringBuilder.Length); - DialStringFeedback.FireUpdate(); - DialStringTextCheckEnables(); - } - - /// - /// Checks the enabled states of various elements around the keypad - /// - void DialStringTextCheckEnables() - { - var textIsEntered = DialStringBuilder.Length > 0; - TriList.SetBool(UIBoolJoin.VCKeypadBackspaceVisible, textIsEntered); - TriList.SetBool(UIBoolJoin.VCStagingConnectEnable, textIsEntered); - if (textIsEntered) - Parent.Keyboard.EnableGoButton(); - else - Parent.Keyboard.DisableGoButton(); - } - - /// - /// - /// - void SearchPress() - { - (Codec as IHasDirectory).SearchDirectory(SearchStringBuilder.ToString()); - } - - /// - /// - /// - /// - void SearchKeyboardPress(string i) - { - SearchStringBuilder.Append(i); - SearchStringFeedback.FireUpdate(); - SearchStringKeypadCheckEnables(); - } - - /// - /// Does what it says - /// - void StartSearchBackspaceRepeat() - { - if (BackspaceTimer == null) - { - BackspaceTimer = new CTimer(o => SearchKeypadBackspacePress(), null, 0, 175); - } - } - - /// - /// Does what it says - /// - void StopSearchBackspaceRepeat() - { - if (BackspaceTimer != null) - { - BackspaceTimer.Stop(); - BackspaceTimer = null; - } - } - - /// - /// - /// - void SearchKeypadBackspacePress() - { - SearchStringBuilder.Remove(SearchStringBuilder.Length - 1, 1); - - if (SearchStringBuilder.Length == 0) - SetCurrentDirectoryToRoot(); - - SearchStringFeedback.FireUpdate(); - SearchStringKeypadCheckEnables(); - } - - /// - /// Clears the Search keypad - /// - void SearchKeypadClear() - { - SearchStringBuilder.Remove(0, SearchStringBuilder.Length); - SearchStringFeedback.FireUpdate(); - SearchStringKeypadCheckEnables(); - - if(CurrentDirectoryResult != (Codec as IHasDirectory).DirectoryRoot) - SetCurrentDirectoryToRoot(); - } - - /// - /// Checks the enabled states of various elements around the keypad - /// - void SearchStringKeypadCheckEnables() - { - var textIsEntered = SearchStringBuilder.Length > 0; - TriList.SetBool(UIBoolJoin.VCDirectoryBackspaceVisible, textIsEntered); - if (textIsEntered) - Parent.Keyboard.EnableGoButton(); - else - Parent.Keyboard.DisableGoButton(); - } - - - /// - /// Returns the text value for the keypad dial entry field - /// - /// - string GetFormattedDialString(string ds) - { - if (DialStringBuilder.Length == 0 && !Codec.IsInCall) - { - return "Tap for keyboard"; - } - - return GetFormattedPhoneNumber(ds); - - } - - /// - /// Formats a string of numbers as a North American phone number - /// - /// - /// - string GetFormattedPhoneNumber(string s) - { - if (Regex.Match(s, @"^\d{4,7}$").Success) // 456-7890 - return string.Format("{0}-{1}", s.Substring(0, 3), s.Substring(3)); - if (Regex.Match(s, @"^9\d{4,7}$").Success) // 456-7890 - return string.Format("9 {0}-{1}", s.Substring(1, 3), s.Substring(4)); - if (Regex.Match(s, @"^\d{8,10}$").Success) // 123-456-78 - return string.Format("({0}) {1}-{2}", s.Substring(0, 3), s.Substring(3, 3), s.Substring(6)); - if (Regex.Match(s, @"^\d{10}$").Success) // 123-456-7890 full - return string.Format("({0}) {1}-{2}", s.Substring(0, 3), s.Substring(3, 3), s.Substring(6)); - if (Regex.Match(s, @"^1\d{10}$").Success) - return string.Format("+1 ({0}) {1}-{2}", s.Substring(1, 3), s.Substring(4, 3), s.Substring(7)); - if (Regex.Match(s, @"^9\d{10}$").Success) - return string.Format("9 ({0}) {1}-{2}", s.Substring(1, 3), s.Substring(4, 3), s.Substring(7)); - if (Regex.Match(s, @"^91\d{10}$").Success) - return string.Format("9 +1 ({0}) {1}-{2}", s.Substring(2, 3), s.Substring(5, 3), s.Substring(8)); - return s; - } - - enum eKeypadMode - { - Dial = 0, - DTMF - } - } +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Core; +using PepperDash.Essentials; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.SmartObjects; +using PepperDash.Essentials.Core.Touchpanels.Keyboards; +using PepperDash.Essentials.Devices.Common.Codec; +using PepperDash.Essentials.Devices.Common.VideoCodec; + +namespace PepperDash.Essentials.UIDrivers.VC +{ + /// + /// This fella will likely need to interact with the room's source, although that is routed via the spark... + /// Probably needs event or FB to feed AV driver - to show two-mute volume when appropriate. + /// + /// + public class EssentialsVideoCodecUiDriver : PanelDriverBase + { + IAVWithVCDriver Parent; + + /// + /// + /// + VideoCodecBase Codec; + + /// + /// To drive UI elements outside of this driver that may be dependent on this. + /// + //BoolFeedback InCall; + BoolFeedback LocalPrivacyIsMuted; + + /// + /// For the subpages above the bar + /// + JoinedSigInterlock VCControlsInterlock; + + /// + /// For the different staging bars: Active, inactive + /// + JoinedSigInterlock StagingBarsInterlock; + + /// + /// For the staging button feedbacks + /// + JoinedSigInterlock StagingButtonsFeedbackInterlock; + + SmartObjectNumeric DialKeypad; + + SubpageReferenceList ActiveCallsSRL; + + SmartObjectDynamicList RecentCallsList; + + SmartObjectDynamicList DirectoryList; + + CodecDirectory CurrentDirectoryResult; + + /// + /// Tracks the directory browse history when browsing beyond the root directory + /// + List DirectoryBrowseHistory; + + bool NextDirectoryResultIsFolderContents; + + BoolFeedback DirectoryBackButtonVisibleFeedback; + + // These are likely temp until we get a keyboard built + StringFeedback DialStringFeedback; + StringBuilder DialStringBuilder = new StringBuilder(); + BoolFeedback DialStringBackspaceVisibleFeedback; + + StringFeedback SearchStringFeedback; + StringBuilder SearchStringBuilder = new StringBuilder(); + BoolFeedback SearchStringBackspaceVisibleFeedback; + + ModalDialog IncomingCallModal; + + eKeypadMode KeypadMode; + + bool CodecHasFavorites; + + CTimer BackspaceTimer; + + + /// + /// The panel header driver + /// + EssentialsHeaderDriver HeaderDriver; + + /// + /// + /// + /// + /// + public EssentialsVideoCodecUiDriver(BasicTriListWithSmartObject triList, IAVWithVCDriver parent, VideoCodecBase codec, EssentialsHeaderDriver headerDriver) + : base(triList) + { + try + { + if (codec == null) + throw new ArgumentNullException("Codec cannot be null"); + Codec = codec; + Parent = parent; + HeaderDriver = headerDriver; + SetupCallStagingPopover(); + SetupDialKeypad(); + ActiveCallsSRL = new SubpageReferenceList(triList, UISmartObjectJoin.CodecActiveCallsHeaderList, 5,5,5); + SetupDirectoryList(); + SetupRecentCallsList(); + SetupFavorites(); + SetupLayoutControls(); + + codec.CallStatusChange += new EventHandler(Codec_CallStatusChange); + + // If the codec is ready, then get the values we want, otherwise wait + if (Codec.IsReady) + Codec_IsReady(); + else + codec.IsReadyChange += (o, a) => Codec_IsReady(); + + //InCall = new BoolFeedback(() => false); + LocalPrivacyIsMuted = new BoolFeedback(() => false); + + VCControlsInterlock = new JoinedSigInterlock(triList); + if (CodecHasFavorites) + VCControlsInterlock.SetButDontShow(UIBoolJoin.VCKeypadWithFavoritesVisible); + else + VCControlsInterlock.SetButDontShow(UIBoolJoin.VCKeypadVisible); + + StagingBarsInterlock = new JoinedSigInterlock(triList); + StagingBarsInterlock.SetButDontShow(UIBoolJoin.VCStagingInactivePopoverVisible); + + StagingButtonsFeedbackInterlock = new JoinedSigInterlock(triList); + StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingKeypadPress); + + // Return formatted when dialing, straight digits when in call + DialStringFeedback = new StringFeedback(() => + { + if (KeypadMode == eKeypadMode.Dial) + return GetFormattedDialString(DialStringBuilder.ToString()); + else + return DialStringBuilder.ToString(); + + }); + DialStringFeedback.LinkInputSig(triList.StringInput[UIStringJoin.CodecAddressEntryText]); + + DialStringBackspaceVisibleFeedback = new BoolFeedback(() => DialStringBuilder.Length > 0); + DialStringBackspaceVisibleFeedback + .LinkInputSig(triList.BooleanInput[UIBoolJoin.VCKeypadBackspaceVisible]); + + SearchStringFeedback = new StringFeedback(() => + { + if (SearchStringBuilder.Length > 0) + { + Parent.Keyboard.EnableGoButton(); + return SearchStringBuilder.ToString(); + } + else + { + Parent.Keyboard.DisableGoButton(); + return "Tap for keyboard"; + } + }); + SearchStringFeedback.LinkInputSig(triList.StringInput[UIStringJoin.CodecDirectorySearchEntryText]); + + SearchStringBackspaceVisibleFeedback = new BoolFeedback(() => SearchStringBuilder.Length > 0); + SearchStringBackspaceVisibleFeedback.LinkInputSig(triList.BooleanInput[UIBoolJoin.VCDirectoryBackspaceVisible]); + + triList.SetSigFalseAction(UIBoolJoin.VCDirectoryBackPress, GetDirectoryParentFolderContents); + + DirectoryBackButtonVisibleFeedback = new BoolFeedback(() => CurrentDirectoryResult != (codec as IHasDirectory).DirectoryRoot); + DirectoryBackButtonVisibleFeedback + .LinkInputSig(triList.BooleanInput[UIBoolJoin.VCDirectoryBackVisible]); + + triList.SetSigFalseAction(UIBoolJoin.VCKeypadTextPress, RevealKeyboard); + + triList.SetSigFalseAction(UIBoolJoin.VCDirectorySearchTextPress, RevealKeyboard); + + triList.SetSigHeldAction(UIBoolJoin.VCDirectoryBackspacePress, 500, + StartSearchBackspaceRepeat, StopSearchBackspaceRepeat, SearchKeypadBackspacePress); + + } + catch (Exception e) + { + Debug.Console(1, "Exception in VideoCodecUiDriver Constructor: {0}", e); + } + } + + + /// + /// + /// + /// + /// + void Codec_IsReady() + { + string roomNumberSipUri = ""; + +#warning FIX PHONE FORMATTING TO ONLY SHOW WHEN APPROPRIATE - TALK TO NEIL + + if (!string.IsNullOrEmpty(Codec.CodecInfo.SipUri)) // If both values are present, format the string with a pipe divider + roomNumberSipUri = string.Format("{0} | {1}", GetFormattedPhoneNumber(Codec.CodecInfo.SipPhoneNumber), Codec.CodecInfo.SipUri); + else // If only one value present, just show the phone number + roomNumberSipUri = Codec.CodecInfo.SipPhoneNumber; + + if(string.IsNullOrEmpty(roomNumberSipUri)) + roomNumberSipUri = string.Format("{0} | {1}", Codec.CodecInfo.E164Alias, Codec.CodecInfo.H323Id); + + TriList.SetString(UIStringJoin.RoomPhoneText, roomNumberSipUri); + + if(HeaderDriver.HeaderButtonsAreSetUp) + HeaderDriver.ComputeHeaderCallStatus(Codec); + } + + /// + /// Handles status changes for calls + /// + /// + /// + void Codec_CallStatusChange(object sender, CodecCallStatusItemChangeEventArgs e) + { + var call = e.CallItem; + + switch (e.CallItem.Status) + { + case eCodecCallStatus.Connected: + // fire at SRL item + KeypadMode = eKeypadMode.DTMF; + DialStringBuilder.Remove(0, DialStringBuilder.Length); + DialStringFeedback.FireUpdate(); + DialStringTextCheckEnables(); + Parent.ShowNotificationRibbon("Connected", 2000); + StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingKeypadPress); + ShowKeypad(); + ((Parent.CurrentRoom as IHasCurrentVolumeControls).CurrentVolumeControls as IBasicVolumeWithFeedback).MuteOff(); + //VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCKeypadVisible); + break; + case eCodecCallStatus.Connecting: + // fire at SRL item + Parent.ShowNotificationRibbon("Connecting", 0); + break; + case eCodecCallStatus.Dialing: + Parent.ShowNotificationRibbon("Connecting", 0); + break; + case eCodecCallStatus.Disconnected: + if (IncomingCallModal != null) + IncomingCallModal.HideDialog(); + if (!Codec.IsInCall) + { + KeypadMode = eKeypadMode.Dial; + // show keypad if we're in call UI mode + ShowKeypad(); + DialStringBuilder.Remove(0, DialStringBuilder.Length); + DialStringFeedback.FireUpdate(); + Parent.ShowNotificationRibbon("Disconnected", 2000); + } + break; + case eCodecCallStatus.Disconnecting: + break; + case eCodecCallStatus.EarlyMedia: + break; + case eCodecCallStatus.Idle: + break; + case eCodecCallStatus.OnHold: + break; + case eCodecCallStatus.Preserved: + break; + case eCodecCallStatus.RemotePreserved: + break; + case eCodecCallStatus.Ringing: + { + // fire up a modal + if( !Codec.CodecInfo.AutoAnswerEnabled && call.Direction == eCodecCallDirection.Incoming) + ShowIncomingModal(call); + break; + } + default: + break; + } + TriList.UShortInput[UIUshortJoin.VCStagingConnectButtonMode].UShortValue = (ushort)(Codec.IsInCall ? 1 : 0); + + uint stageJoin; + if (Codec.IsInCall) + stageJoin = UIBoolJoin.VCStagingActivePopoverVisible; + else + stageJoin = UIBoolJoin.VCStagingInactivePopoverVisible; + if (IsVisible) + StagingBarsInterlock.ShowInterlocked(stageJoin); + else + StagingBarsInterlock.SetButDontShow(stageJoin); + + HeaderDriver.ComputeHeaderCallStatus(Codec); + + // Update active call list + UpdateHeaderActiveCallList(); + } + + /// + /// Redraws the calls list on the header + /// + void UpdateHeaderActiveCallList() + { + var activeList = Codec.ActiveCalls.Where(c => c.IsActiveCall).ToList(); + ActiveCallsSRL.Clear(); + ushort i = 1; + foreach (var c in activeList) + { + //var item = new SubpageReferenceListItem(1, ActiveCallsSRL); + ActiveCallsSRL.StringInputSig(i, 1).StringValue = c.Name; + ActiveCallsSRL.StringInputSig(i, 2).StringValue = c.Number; + ActiveCallsSRL.StringInputSig(i, 3).StringValue = c.Status.ToString(); + ActiveCallsSRL.StringInputSig(i, 4).StringValue = string.Format("Participant {0}", i); + ActiveCallsSRL.UShortInputSig(i, 1).UShortValue = (ushort)(c.Type == eCodecCallType.Video ? 2 : 1); + var cc = c; // for scope in lambda + ActiveCallsSRL.GetBoolFeedbackSig(i, 1).SetSigFalseAction(() => Codec.EndCall(cc)); + i++; + } + ActiveCallsSRL.Count = (ushort)activeList.Count; + + // If Active Calls list is visible and codec is not in a call, hide the list + if (!Codec.IsInCall && Parent.PopupInterlock.CurrentJoin == UIBoolJoin.HeaderActiveCallsListVisible) + Parent.PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HeaderActiveCallsListVisible); + } + + /// + /// + /// + void ShowIncomingModal(CodecActiveCallItem call) + { + (Parent as IAVWithVCDriver).PrepareForCodecIncomingCall(); + IncomingCallModal = new ModalDialog(TriList); + string msg; + string icon; + if (call.Type == eCodecCallType.Audio) + { + icon = "Phone"; + msg = string.Format("Incoming phone call from: {0}", call.Name); + } + else + { + icon = "Camera"; + msg = string.Format("Incoming video call from: {0}", call.Name); + } + IncomingCallModal.PresentModalDialog(2, "Incoming Call", icon, msg, + "Ignore", "Accept", false, false, b => + { + if (b == 1) + Codec.RejectCall(call); + else //2 + AcceptIncomingCall(call); + IncomingCallModal = null; + }); + } + + /// + /// + /// + void AcceptIncomingCall(CodecActiveCallItem call) + { + (Parent as IAVWithVCDriver).PrepareForCodecIncomingCall(); + (Parent as IAVWithVCDriver).ActivityCallButtonPressed(); + Codec.AcceptCall(call); + } + + /// + /// + /// + public override void Show() + { + VCControlsInterlock.Show(); + StagingBarsInterlock.Show(); + DialStringFeedback.FireUpdate(); + base.Show(); + } + + /// + /// + /// + public override void Hide() + { + VCControlsInterlock.Hide(); + StagingBarsInterlock.Hide(); + base.Hide(); + } + + /// + /// Builds the call stage + /// + void SetupCallStagingPopover() + { + TriList.SetSigFalseAction(UIBoolJoin.VCStagingDirectoryPress, ShowDirectory); + TriList.SetSigFalseAction(UIBoolJoin.VCStagingKeypadPress, ShowKeypad); + TriList.SetSigFalseAction(UIBoolJoin.VCStagingRecentsPress, ShowRecents); + TriList.SetSigFalseAction(UIBoolJoin.VCStagingConnectPress, ConnectPress); + TriList.SetSigFalseAction(UIBoolJoin.CallEndPress, () => + { + if (Codec.ActiveCalls.Count > 1) + { + Parent.PopupInterlock.ShowInterlocked(UIBoolJoin.HeaderActiveCallsListVisible); + } + else + Codec.EndAllCalls(); + }); + TriList.SetSigFalseAction(UIBoolJoin.CallEndAllConfirmPress, () => + { + Parent.PopupInterlock.HideAndClear(); + Codec.EndAllCalls(); + }); + } + + /// + /// + /// + void SetupDialKeypad() + { + if(TriList.SmartObjects.Contains(UISmartObjectJoin.VCDialKeypad)) + { + DialKeypad = new SmartObjectNumeric(TriList.SmartObjects[UISmartObjectJoin.VCDialKeypad], true); + DialKeypad.Digit0.SetSigFalseAction(() => DialKeypadPress("0")); + DialKeypad.Digit1.SetSigFalseAction(() => DialKeypadPress("1")); + DialKeypad.Digit2.SetSigFalseAction(() => DialKeypadPress("2")); + DialKeypad.Digit3.SetSigFalseAction(() => DialKeypadPress("3")); + DialKeypad.Digit4.SetSigFalseAction(() => DialKeypadPress("4")); + DialKeypad.Digit5.SetSigFalseAction(() => DialKeypadPress("5")); + DialKeypad.Digit6.SetSigFalseAction(() => DialKeypadPress("6")); + DialKeypad.Digit7.SetSigFalseAction(() => DialKeypadPress("7")); + DialKeypad.Digit8.SetSigFalseAction(() => DialKeypadPress("8")); + DialKeypad.Digit9.SetSigFalseAction(() => DialKeypadPress("9")); + DialKeypad.Misc1SigName = "*"; + DialKeypad.Misc1.SetSigFalseAction(() => DialKeypadPress("*")); + DialKeypad.Misc2SigName = "#"; + DialKeypad.Misc2.SetSigFalseAction(() => DialKeypadPress("#")); + //TriList.SetSigFalseAction(UIBoolJoin.VCKeypadBackspacePress, DialKeypadBackspacePress); + TriList.SetSigHeldAction(UIBoolJoin.VCKeypadBackspacePress, 500, + StartBackspaceRepeat, StopBackspaceRepeat, DialKeypadBackspacePress); + } + else + Debug.Console(0, "Trilist {0:x2}, VC dial keypad object {1} not found. Check SGD file or VTP", + TriList.ID, UISmartObjectJoin.VCDialKeypad); + } + + /// + /// + /// + void SetupRecentCallsList() + { + var codec = Codec as IHasCallHistory; + if (codec != null) + { + codec.CallHistory.RecentCallsListHasChanged += (o, a) => RefreshRecentCallsList(); + // EVENT??????????????? Pointed at refresh + RecentCallsList = new SmartObjectDynamicList(TriList.SmartObjects[UISmartObjectJoin.VCRecentsList], true, 1200); + RefreshRecentCallsList(); + } + } + + /// + /// + /// + void RefreshRecentCallsList() + { + var codec = Codec as IHasCallHistory; + uint textOffset = 1200; + uint timeTextOffset = 1230; + if (codec != null) + { + ushort i = 0; + foreach (var c in codec.CallHistory.RecentCalls) + { + i++; + TriList.SetString(textOffset + i, c.Name); + // if it's today, show a simpler string + string timeText = null; + if (c.StartTime.Date == DateTime.Now.Date) + timeText = c.StartTime.ToShortTimeString(); + else if (c.StartTime == DateTime.MinValue) + timeText = ""; + else + timeText = c.StartTime.ToString(); + TriList.SetString(timeTextOffset + i, timeText); + + string iconName = null; + if (c.OccurenceType == eCodecOccurrenceType.Received) + iconName = "Misc-18_Light"; + else if (c.OccurenceType == eCodecOccurrenceType.Placed) + iconName = "Misc-17_Light"; + else + iconName = "Delete"; + RecentCallsList.SetItemIcon(i, iconName); + + var call = c; // for lambda scope + RecentCallsList.SetItemButtonAction(i, b => { if(!b) Codec.Dial(call.Number); }); + } + RecentCallsList.Count = i; + } + } + + /// + /// + /// + void SetupFavorites() + { + var c = Codec as IHasCallFavorites; + if (c != null && c.CallFavorites != null) + { + CodecHasFavorites = true; + var favs = c.CallFavorites.Favorites; + for (uint i = 0; i <= 3; i++) + { + if (i < favs.Count) + { + var fav = favs[(int)i]; + TriList.SetString(UIStringJoin.VCFavoritesStart + i, fav.Name); + TriList.SetBool(UIBoolJoin.VCFavoriteVisibleStart + i, true); + TriList.SetSigFalseAction(UIBoolJoin.VCFavoritePressStart + i, () => + { + Codec.Dial(fav.Number); + }); + } + else + TriList.SetBool(UIBoolJoin.VCFavoriteVisibleStart + i, false); + } + } + } + + /// + /// + /// + void SetupDirectoryList() + { + DirectoryBrowseHistory = new List(); + + var codec = Codec as IHasDirectory; + if (codec != null) + { + if (codec != null) + { + DirectoryList = new SmartObjectDynamicList(TriList.SmartObjects[UISmartObjectJoin.VCDirectoryList], + true, 1300); + codec.DirectoryResultReturned += new EventHandler(dir_DirectoryResultReturned); + + if (codec.PhonebookSyncState.InitialSyncComplete) + SetCurrentDirectoryToRoot(); + else + { + codec.PhonebookSyncState.InitialSyncCompleted += new EventHandler(PhonebookSyncState_InitialSyncCompleted); + } + + + // If there is something here now, show it otherwise wait for the event + if (CurrentDirectoryResult != null && codec.DirectoryRoot.DirectoryResults.Count > 0) + { + RefreshDirectory(); + } + } + } + } + + /// + /// Sets the current directory resutls to the DirectorRoot and updates Back Button visibiltiy + /// + void SetCurrentDirectoryToRoot() + { + DirectoryBrowseHistory.Clear(); + + CurrentDirectoryResult = (Codec as IHasDirectory).DirectoryRoot; + + SearchKeypadClear(); + + DirectoryBackButtonVisibleFeedback.FireUpdate(); + + RefreshDirectory(); + } + + /// + /// Setup the Directory list when notified that the initial phonebook sync is completed + /// + /// + /// + void PhonebookSyncState_InitialSyncCompleted(object sender, EventArgs e) + { + var codec = Codec as IHasDirectory; + + SetCurrentDirectoryToRoot(); + + if (CurrentDirectoryResult != null && codec.DirectoryRoot.DirectoryResults.Count > 0) + { + RefreshDirectory(); + } + } + + /// + /// + /// + /// + /// + void dir_DirectoryResultReturned(object sender, DirectoryEventArgs e) + { + if (NextDirectoryResultIsFolderContents) + { + NextDirectoryResultIsFolderContents = false; + DirectoryBrowseHistory.Add(e.Directory); + } + CurrentDirectoryResult = e.Directory; + DirectoryBackButtonVisibleFeedback.FireUpdate(); + RefreshDirectory(); + } + + /// + /// Helper method to retrieve directory folder contents and store last requested folder id + /// + /// + void GetDirectoryFolderContents(DirectoryFolder folder) + { + (Codec as IHasDirectory).GetDirectoryFolderContents(folder.FolderId); + + NextDirectoryResultIsFolderContents = true; + } + + /// + /// Request the parent folder contents or sets back to the root if no parent folder + /// + void GetDirectoryParentFolderContents() + { + var codec = Codec as IHasDirectory; + + if (DirectoryBrowseHistory.Count > 0) + { + var lastItemIndex = DirectoryBrowseHistory.Count - 1; + CurrentDirectoryResult = DirectoryBrowseHistory[lastItemIndex]; + DirectoryBrowseHistory.Remove(DirectoryBrowseHistory[lastItemIndex]); + + RefreshDirectory(); + } + else + { + SetCurrentDirectoryToRoot(); + } + } + + /// + /// + /// + /// + void RefreshDirectory() + { + if (CurrentDirectoryResult.DirectoryResults.Count > 0) + { + ushort i = 0; + foreach (var r in CurrentDirectoryResult.DirectoryResults) + { + if (i == DirectoryList.MaxCount) + { + break; + } + + i++; + + if (r is DirectoryContact) + { + DirectoryList.SetItemMainText(i, r.Name); + + var dc = r as DirectoryContact; + + if (dc.ContactMethods.Count > 1) + { + // If more than one contact method, show contact method modal dialog + DirectoryList.SetItemButtonAction(i, b => + { + if (!b) + { + // Refresh the contact methods list + RefreshContactMethodsModalList(dc); + Parent.PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.MeetingsOrContacMethodsListVisible); + } + }); + + } + else + { + // If only one contact method, just dial that method + DirectoryList.SetItemButtonAction(i, b => { if (!b) Codec.Dial(dc.ContactMethods[0].Number); }); + } + } + else // is DirectoryFolder + { + DirectoryList.SetItemMainText(i, string.Format("[+] {0}", r.Name)); + + var df = r as DirectoryFolder; + + DirectoryList.SetItemButtonAction(i, b => + { + if (!b) + { + GetDirectoryFolderContents(df); + // will later call event handler after folder contents retrieved + } + }); + } + } + DirectoryList.Count = i; + } + else // No results in directory, display message to user + { + DirectoryList.Count = 1; + + DirectoryList.SetItemMainText(1, "No Results Found"); + } + + } + + void RefreshContactMethodsModalList(DirectoryContact contact) + { + TriList.SetString(UIStringJoin.MeetingsOrContactMethodListIcon, "Users"); + TriList.SetString(UIStringJoin.MeetingsOrContactMethodListTitleText, "Contact Methods"); + + ushort i = 0; + foreach (var c in contact.ContactMethods) + { + i++; + Parent.MeetingOrContactMethodModalSrl.StringInputSig(i, 1).StringValue = c.Device.ToString(); + Parent.MeetingOrContactMethodModalSrl.StringInputSig(i, 2).StringValue = c.CallType.ToString(); + Parent.MeetingOrContactMethodModalSrl.StringInputSig(i, 3).StringValue = c.Number; + Parent.MeetingOrContactMethodModalSrl.StringInputSig(i, 4).StringValue = ""; + Parent.MeetingOrContactMethodModalSrl.StringInputSig(i, 5).StringValue = "Connect"; + Parent.MeetingOrContactMethodModalSrl.BoolInputSig(i, 2).BoolValue = true; + var cc = c; // lambda scope + Parent.MeetingOrContactMethodModalSrl.GetBoolFeedbackSig(i, 1).SetSigFalseAction(() => + { + Parent.PopupInterlock.Hide(); + var codec = Codec as VideoCodecBase; + if (codec != null) + codec.Dial(c.Number); + }); + } + Parent.MeetingOrContactMethodModalSrl.Count = i; + + } + + /// + /// + /// + void SetupLayoutControls() + { + TriList.SetSigFalseAction(UIBoolJoin.VCStagingSelfViewLayoutPress, this.ShowSelfViewLayout); + var svc = Codec as IHasCodecSelfview; + if (svc != null) + { + TriList.SetSigFalseAction(UIBoolJoin.VCSelfViewTogglePress, svc.SelfviewModeToggle); + svc.SelfviewIsOnFeedback.LinkInputSig(TriList.BooleanInput[UIBoolJoin.VCSelfViewTogglePress]); + } + var lc = Codec as IHasCodecLayouts; + if (lc != null) + { + TriList.SetSigFalseAction(UIBoolJoin.VCLayoutTogglePress, lc.LocalLayoutToggleSingleProminent); + lc.LocalLayoutFeedback.LinkInputSig(TriList.StringInput[UIStringJoin.VCLayoutModeText]); + lc.LocalLayoutFeedback.OutputChange += (o,a) => + { + TriList.BooleanInput[UIBoolJoin.VCLayoutTogglePress].BoolValue = + lc.LocalLayoutFeedback.StringValue == "Prominent"; + }; + + + // attach to cisco special things to enable buttons + var cisco = Codec as PepperDash.Essentials.Devices.Common.VideoCodec.Cisco.CiscoSparkCodec; + if (cisco != null) + { + // Cisco has min/max buttons that need special sauce + cisco.SharingContentIsOnFeedback.OutputChange += CiscoSharingAndPresentation_OutputChanges; + //cisco.PresentationViewMaximizedFeedback.OutputChange += CiscoSharingAndPresentation_OutputChanges; + + TriList.SetSigFalseAction(UIBoolJoin.VCMinMaxPress, cisco.MinMaxLayoutToggle); + } + + } + } + + /// + /// This should only be linked by cisco classes (spark initially) + /// + /// + /// + void CiscoSharingAndPresentation_OutputChanges(object sender, EventArgs e) + { + var cisco = Codec as PepperDash.Essentials.Devices.Common.VideoCodec.Cisco.CiscoSparkCodec; + if (cisco != null) + { + var sharingNear = cisco.SharingContentIsOnFeedback.BoolValue; + + var sharingFar = cisco.FarEndIsSharingContentFeedback.BoolValue; + //set feedback and enables + TriList.BooleanInput[UIBoolJoin.VCMinMaxEnable].BoolValue = sharingNear; + TriList.BooleanInput[UIBoolJoin.VCLayoutToggleEnable].BoolValue = sharingNear || sharingFar; + TriList.BooleanInput[UIBoolJoin.VCMinMaxPress].BoolValue = sharingNear; + } + } + + /// + /// + /// + void RevealKeyboard() + { + if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCKeypadWithFavoritesVisible && KeypadMode == eKeypadMode.Dial) + { + var kb = Parent.Keyboard; + kb.KeyPress -= Keyboard_DialKeyPress; + kb.KeyPress += Keyboard_DialKeyPress; + kb.HideAction = this.DetachDialKeyboard; + kb.GoButtonText = "Connect"; + kb.GoButtonVisible = true; + DialStringTextCheckEnables(); + kb.Show(); + } + else if(VCControlsInterlock.CurrentJoin == UIBoolJoin.VCDirectoryVisible) + { + var kb = Parent.Keyboard; + kb.KeyPress -= Keyboard_SearchKeyPress; + kb.KeyPress += Keyboard_SearchKeyPress; + kb.HideAction = this.DetachSearchKeyboard; + kb.GoButtonText = "Search"; + kb.GoButtonVisible = true; + SearchStringKeypadCheckEnables(); + kb.Show(); + } + } + + /// + /// Event handler for keyboard dialing + /// + void Keyboard_DialKeyPress(object sender, PepperDash.Essentials.Core.Touchpanels.Keyboards.KeyboardControllerPressEventArgs e) + { + if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCKeypadWithFavoritesVisible && KeypadMode == eKeypadMode.Dial) + { + if (e.Text != null) + DialStringBuilder.Append(e.Text); + else + { + if (e.SpecialKey == KeyboardSpecialKey.Backspace) + DialKeypadBackspacePress(); + else if (e.SpecialKey == KeyboardSpecialKey.Clear) + DialKeypadClear(); + else if (e.SpecialKey == KeyboardSpecialKey.GoButton) + { + ConnectPress(); + } + } + DialStringFeedback.FireUpdate(); + DialStringTextCheckEnables(); + } + } + + /// + /// Event handler for keyboard directory searches + /// + /// + /// + void Keyboard_SearchKeyPress(object sender, KeyboardControllerPressEventArgs e) + { + if (VCControlsInterlock.CurrentJoin == UIBoolJoin.VCDirectoryVisible) + { + if (e.Text != null) + SearchStringBuilder.Append(e.Text); + else + { + if (e.SpecialKey == KeyboardSpecialKey.Backspace) + SearchKeypadBackspacePress(); + else if (e.SpecialKey == KeyboardSpecialKey.Clear) + SearchKeypadClear(); + else if (e.SpecialKey == KeyboardSpecialKey.GoButton) + { + SearchPress(); + Parent.Keyboard.Hide(); + } + } + SearchStringFeedback.FireUpdate(); + SearchStringKeypadCheckEnables(); + } + } + + /// + /// Call + /// + void DetachDialKeyboard() + { + Parent.Keyboard.KeyPress -= Keyboard_DialKeyPress; + } + + void DetachSearchKeyboard() + { + Parent.Keyboard.KeyPress -= Keyboard_SearchKeyPress; + } + + /// + /// Shows the camera controls subpage + /// + void ShowCameraControls() + { + VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCCameraVisible); + StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingCameraPress); + } + + /// + /// shows the directory subpage + /// + void ShowDirectory() + { + // populate directory + VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCDirectoryVisible); + StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingDirectoryPress); + + } + + /// + /// shows the appropriate keypad depending on mode and whether visible + /// + void ShowKeypad() + { + uint join = Codec.IsInCall ? UIBoolJoin.VCKeypadVisible : UIBoolJoin.VCKeypadWithFavoritesVisible; + if (IsVisible) + VCControlsInterlock.ShowInterlocked(join); + else + VCControlsInterlock.SetButDontShow(join); + StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingKeypadPress); + } + + /// + /// Shows the self-view layout controls subpage + /// + void ShowSelfViewLayout() + { + VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCSelfViewLayoutVisible); + StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingSelfViewLayoutPress); + } + + /// + /// Shows the recents subpage + /// + void ShowRecents() + { + //populate recents + VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCRecentsVisible); + StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingRecentsPress); + } + + /// + /// Connect call button + /// + void ConnectPress() + { + if (Parent.Keyboard != null) + Parent.Keyboard.Hide(); + Codec.Dial(DialStringBuilder.ToString()); + } + + /// + /// + /// + /// + void DialKeypadPress(string i) + { + if (KeypadMode == eKeypadMode.Dial) + { + DialStringBuilder.Append(i); + DialStringFeedback.FireUpdate(); + DialStringTextCheckEnables(); + } + else + { + Codec.SendDtmf(i); + DialStringBuilder.Append(i); + DialStringFeedback.FireUpdate(); + // no delete key in this mode! + } + DialStringTextCheckEnables(); + } + + /// + /// Does what it says + /// + void StartBackspaceRepeat() + { + if (BackspaceTimer == null) + { + BackspaceTimer = new CTimer(o => DialKeypadBackspacePress(), null, 0, 175); + } + } + + /// + /// Does what it says + /// + void StopBackspaceRepeat() + { + if (BackspaceTimer != null) + { + BackspaceTimer.Stop(); + BackspaceTimer = null; + } + } + + /// + /// + /// + void DialKeypadBackspacePress() + { + if (KeypadMode == eKeypadMode.Dial) + { + DialStringBuilder.Remove(DialStringBuilder.Length - 1, 1); + DialStringFeedback.FireUpdate(); + DialStringTextCheckEnables(); + } + else + DialKeypadClear(); + } + + /// + /// Clears the dial keypad + /// + void DialKeypadClear() + { + DialStringBuilder.Remove(0, DialStringBuilder.Length); + DialStringFeedback.FireUpdate(); + DialStringTextCheckEnables(); + } + + /// + /// Checks the enabled states of various elements around the keypad + /// + void DialStringTextCheckEnables() + { + var textIsEntered = DialStringBuilder.Length > 0; + TriList.SetBool(UIBoolJoin.VCKeypadBackspaceVisible, textIsEntered); + TriList.SetBool(UIBoolJoin.VCStagingConnectEnable, textIsEntered); + if (textIsEntered) + Parent.Keyboard.EnableGoButton(); + else + Parent.Keyboard.DisableGoButton(); + } + + /// + /// + /// + void SearchPress() + { + (Codec as IHasDirectory).SearchDirectory(SearchStringBuilder.ToString()); + } + + /// + /// + /// + /// + void SearchKeyboardPress(string i) + { + SearchStringBuilder.Append(i); + SearchStringFeedback.FireUpdate(); + SearchStringKeypadCheckEnables(); + } + + /// + /// Does what it says + /// + void StartSearchBackspaceRepeat() + { + if (BackspaceTimer == null) + { + BackspaceTimer = new CTimer(o => SearchKeypadBackspacePress(), null, 0, 175); + } + } + + /// + /// Does what it says + /// + void StopSearchBackspaceRepeat() + { + if (BackspaceTimer != null) + { + BackspaceTimer.Stop(); + BackspaceTimer = null; + } + } + + /// + /// + /// + void SearchKeypadBackspacePress() + { + SearchStringBuilder.Remove(SearchStringBuilder.Length - 1, 1); + + if (SearchStringBuilder.Length == 0) + SetCurrentDirectoryToRoot(); + + SearchStringFeedback.FireUpdate(); + SearchStringKeypadCheckEnables(); + } + + /// + /// Clears the Search keypad + /// + void SearchKeypadClear() + { + SearchStringBuilder.Remove(0, SearchStringBuilder.Length); + SearchStringFeedback.FireUpdate(); + SearchStringKeypadCheckEnables(); + + if(CurrentDirectoryResult != (Codec as IHasDirectory).DirectoryRoot) + SetCurrentDirectoryToRoot(); + } + + /// + /// Checks the enabled states of various elements around the keypad + /// + void SearchStringKeypadCheckEnables() + { + var textIsEntered = SearchStringBuilder.Length > 0; + TriList.SetBool(UIBoolJoin.VCDirectoryBackspaceVisible, textIsEntered); + if (textIsEntered) + Parent.Keyboard.EnableGoButton(); + else + Parent.Keyboard.DisableGoButton(); + } + + + /// + /// Returns the text value for the keypad dial entry field + /// + /// + string GetFormattedDialString(string ds) + { + if (DialStringBuilder.Length == 0 && !Codec.IsInCall) + { + return "Tap for keyboard"; + } + + return GetFormattedPhoneNumber(ds); + + } + + /// + /// Formats a string of numbers as a North American phone number + /// + /// + /// + string GetFormattedPhoneNumber(string s) + { + if (Regex.Match(s, @"^\d{4,7}$").Success) // 456-7890 + return string.Format("{0}-{1}", s.Substring(0, 3), s.Substring(3)); + if (Regex.Match(s, @"^9\d{4,7}$").Success) // 456-7890 + return string.Format("9 {0}-{1}", s.Substring(1, 3), s.Substring(4)); + if (Regex.Match(s, @"^\d{8,10}$").Success) // 123-456-78 + return string.Format("({0}) {1}-{2}", s.Substring(0, 3), s.Substring(3, 3), s.Substring(6)); + if (Regex.Match(s, @"^\d{10}$").Success) // 123-456-7890 full + return string.Format("({0}) {1}-{2}", s.Substring(0, 3), s.Substring(3, 3), s.Substring(6)); + if (Regex.Match(s, @"^1\d{10}$").Success) + return string.Format("+1 ({0}) {1}-{2}", s.Substring(1, 3), s.Substring(4, 3), s.Substring(7)); + if (Regex.Match(s, @"^9\d{10}$").Success) + return string.Format("9 ({0}) {1}-{2}", s.Substring(1, 3), s.Substring(4, 3), s.Substring(7)); + if (Regex.Match(s, @"^91\d{10}$").Success) + return string.Format("9 +1 ({0}) {1}-{2}", s.Substring(2, 3), s.Substring(5, 3), s.Substring(8)); + return s; + } + + enum eKeypadMode + { + Dial = 0, + DTMF + } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs.orig b/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs.orig similarity index 100% rename from Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs.orig rename to PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs.orig diff --git a/Essentials/PepperDashEssentials/UIDrivers/VolumeAndSourceChangeArgs.cs b/PepperDashEssentials/UIDrivers/VolumeAndSourceChangeArgs.cs similarity index 100% rename from Essentials/PepperDashEssentials/UIDrivers/VolumeAndSourceChangeArgs.cs rename to PepperDashEssentials/UIDrivers/VolumeAndSourceChangeArgs.cs diff --git a/Essentials/PepperDashEssentials/UIDrivers/enums and base.cs b/PepperDashEssentials/UIDrivers/enums and base.cs similarity index 100% rename from Essentials/PepperDashEssentials/UIDrivers/enums and base.cs rename to PepperDashEssentials/UIDrivers/enums and base.cs diff --git a/Essentials Core/PepperDashEssentialsBase/app.config b/PepperDashEssentials/app.config similarity index 100% rename from Essentials Core/PepperDashEssentialsBase/app.config rename to PepperDashEssentials/app.config diff --git a/essentials-framework b/essentials-framework new file mode 160000 index 00000000..8dbb67fd --- /dev/null +++ b/essentials-framework @@ -0,0 +1 @@ +Subproject commit 8dbb67fda753e126de3f99e8814153410f8834bb