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.Bridges { public static class IBasicCommunicationApiExtensions { public static void LinkToApi(this GenericComm comm, BasicTriList trilist, uint joinStart, string joinMapKey) { var joinMap = JoinMapHelper.GetJoinMapForDevice(joinMapKey) as IBasicCommunicationJoinMap; if (joinMap == null) joinMap = new IBasicCommunicationJoinMap(); joinMap.OffsetJoinNumbers(joinStart); if (comm.CommPort == null) { Debug.Console(1, comm, "Unable to link device '{0}'. CommPort is null", comm.Key); return; } Debug.Console(1, comm, "Linking device '{0}' to Trilist '{1}'", comm.Key, trilist.ID); // this is a permanent event handler. This cannot be -= from event comm.CommPort.TextReceived += (s, a) => trilist.SetString(joinMap.TextReceived, a.Text); trilist.SetStringSigAction(joinMap.SendText, new Action(s => comm.CommPort.SendText(s))); trilist.SetStringSigAction(joinMap.SetPortConfig + 1, new Action(s => comm.SetPortConfig(s))); var sComm = comm.CommPort as ISocketStatus; if (sComm != null) { sComm.ConnectionChange += (s, a) => { trilist.SetUshort(joinMap.Status, (ushort)(a.Client.ClientStatus)); trilist.SetBool(joinMap.Connected, a.Client.ClientStatus == Crestron.SimplSharp.CrestronSockets.SocketStatus.SOCKET_STATUS_CONNECTED); }; trilist.SetBoolSigAction(joinMap.Connect, new Action(b => { if (b) { sComm.Connect(); } else { sComm.Disconnect(); } })); } } public class IBasicCommunicationJoinMap : JoinMapBase { // Default joins public uint TextReceived { get; set; } public uint SendText { get; set; } public uint SetPortConfig { get; set; } public uint Connect { get; set; } public uint Connected { get; set; } public uint Status { get; set; } public IBasicCommunicationJoinMap() { TextReceived = 1; SendText = 1; SetPortConfig = 2; Connect = 1; Connected = 1; Status = 1; } public override void OffsetJoinNumbers(uint joinStart) { var joinOffset = joinStart - 1; TextReceived = TextReceived + joinOffset; SendText = SendText + joinOffset; SetPortConfig = SetPortConfig + joinOffset; Connect = Connect + joinOffset; Connected = Connected + joinOffset; Status = Status + joinOffset; } } } ///// ///// ///// //public static class DmChassisControllerApiExtensions //{ // public static void LinkToApi(this PepperDash.Essentials.DM.DmChassisController chassis, // BasicTriList trilist, Dictionary map, uint joinstart) // { // uint joinOffset = joinstart - 1; // uint videoSelectOffset = 0 + joinOffset; // uint audioSelectOffset = 40 + joinOffset; // // loop chassis number of inupts // for (uint i = 1; i <= chassis.Chassis.NumberOfOutputs; i++) // { // trilist.SetUShortSigAction(videoSelectOffset + i, new Action(u => chassis.ExecuteSwitch(u, i, eRoutingSignalType.Video))); // trilist.SetUShortSigAction(audioSelectOffset + i, new Action(u => chassis.ExecuteSwitch(u, i, eRoutingSignalType.Audio))); // } // // wire up output change detection (try to add feedbacks or something to DMChassisController?? // // names? // // HDCP? // } //} }