diff --git a/src/essentials-framework/Essentials Core/PepperDashEssentialsBase/Comm and IR/CommBridge.cs b/src/essentials-framework/Essentials Core/PepperDashEssentialsBase/Comm and IR/CommBridge.cs new file mode 100644 index 00000000..73e839f8 --- /dev/null +++ b/src/essentials-framework/Essentials Core/PepperDashEssentialsBase/Comm and IR/CommBridge.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.Generic; +using Crestron.SimplSharp.CrestronSockets; +using Crestron.SimplSharpPro.DeviceSupport; +using Newtonsoft.Json; +using System.Text; + +using PepperDash.Core; +using PepperDash.Essentials.Core.Bridges; +using PepperDash.Essentials.Core.Devices; +using PepperDash.Essentials.Core.Config; + + +namespace PepperDash.Essentials.Core +{ + /// + /// Implements IBasicCommunication and sends all communication through an EISC + /// + [Description("Generic communication wrapper class for any IBasicCommunication type")] + public class CommBridge : EssentialsBridgeableDevice, IBasicCommunication + { + private EiscApiAdvanced eisc; + + private IBasicCommunicationJoinMap joinMap; + + public event EventHandler TextReceived; + + public event EventHandler BytesReceived; + + public bool IsConnected { get; private set; } + + public CommBridge(string key, string name) + : base(key, name) + { + + } + + public void SendBytes(byte[] bytes) + { + eisc.Eisc.SetString(joinMap.SendText.JoinNumber, Encoding.ASCII.GetString(bytes, 0, bytes.Length)); + } + + public void SendText(string text) + { + eisc.Eisc.SetString(joinMap.SendText.JoinNumber, text); + } + + public void Connect() { + eisc.Eisc.SetBool(joinMap.Connect.JoinNumber, true); + } + + public void Disconnect() { + eisc.Eisc.SetBool(joinMap.Connect.JoinNumber, false); + } + + public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) + { + joinMap = new IBasicCommunicationJoinMap(joinStart); + + var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey); + + if (!string.IsNullOrEmpty(joinMapSerialized)) + joinMap = JsonConvert.DeserializeObject(joinMapSerialized); + + if (bridge != null) + { + bridge.AddJoinMap(Key, joinMap); + } + else + { + Debug.Console(0, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device."); + } + + Debug.Console(1, this, "Linking to Trilist '{0}'", trilist.ID.ToString("X")); + + eisc = bridge; + + trilist.SetBoolSigAction(joinMap.Connected.JoinNumber, (b) => IsConnected = b); + + trilist.SetStringSigAction(joinMap.TextReceived.JoinNumber, (s) => { + var textHandler = TextReceived; + + if (textHandler != null) + { + textHandler(this, new GenericCommMethodReceiveTextArgs(s)); + } + + var bytesHandler = BytesReceived; + + if(bytesHandler != null) + { + bytesHandler(this, new GenericCommMethodReceiveBytesArgs(Encoding.ASCII.GetBytes(s))); + } + }); + } + } +} \ No newline at end of file diff --git a/src/essentials-framework/Essentials Core/PepperDashEssentialsBase/Comm and IR/GenericCommBridge.cs b/src/essentials-framework/Essentials Core/PepperDashEssentialsBase/Comm and IR/GenericCommBridge.cs deleted file mode 100644 index 6d18d38b..00000000 --- a/src/essentials-framework/Essentials Core/PepperDashEssentialsBase/Comm and IR/GenericCommBridge.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -using System.Collections.Generic; -using Crestron.SimplSharp.CrestronSockets; -using Crestron.SimplSharpPro.DeviceSupport; -using Newtonsoft.Json; - -using PepperDash.Core; -using PepperDash.Essentials.Core.Bridges; -using PepperDash.Essentials.Core.Devices; -using PepperDash.Essentials.Core.Config; - - -namespace PepperDash.Essentials.Core -{ - /// - /// Implements IBasicCommunication and sends all communication through an EISC - /// - [Description("Generic communication wrapper class for any IBasicCommunication type")] - public class GenericCommBridge : ReconfigurableBridgableDevice, IBasicCommunication - { - public GenericComm(DeviceConfig config) - : base(config) - { - - } - - public static IKeyed BuildDevice(DeviceConfig dc) - { - Debug.Console(1, "Factory Attempting to create new Generic Comm Device"); - return new GenericComm(dc); - } - - protected override void CustomSetConfig(DeviceConfig config) - { - PropertiesConfig = CommFactory.GetControlPropertiesConfig(config); - - ConfigWriter.UpdateDeviceConfig(config); - } - - public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) - { - var joinMap = new IBasicCommunicationJoinMap(joinStart); - - var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey); - - if (!string.IsNullOrEmpty(joinMapSerialized)) - joinMap = JsonConvert.DeserializeObject(joinMapSerialized); - - if (bridge != null) - { - bridge.AddJoinMap(Key, joinMap); - } - else - { - Debug.Console(0, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device."); - } - - Debug.Console(1, this, "Linking to Trilist '{0}'", trilist.ID.ToString("X")); - - // this is a permanent event handler. This cannot be -= from event - CommPort.TextReceived += (s, a) => - { - trilist.SetString(joinMap.TextReceived.JoinNumber, a.Text); - }; - trilist.SetStringSigAction(joinMap.SendText.JoinNumber, s => CommPort.SendText(s)); - trilist.SetStringSigAction(joinMap.SetPortConfig.JoinNumber, SetPortConfig); - - - var sComm = CommPort as ISocketStatus; - if (sComm == null) return; - sComm.ConnectionChange += (s, a) => - { - trilist.SetUshort(joinMap.Status.JoinNumber, (ushort)(a.Client.ClientStatus)); - trilist.SetBool(joinMap.Connected.JoinNumber, a.Client.ClientStatus == - SocketStatus.SOCKET_STATUS_CONNECTED); - }; - - trilist.SetBoolSigAction(joinMap.Connect.JoinNumber, b => - { - if (b) - { - sComm.Connect(); - } - else - { - sComm.Disconnect(); - } - }); - } - } - - public class GenericCommBridgeFactory : EssentialsDeviceFactory - { - public GenericCommBridgeFactory() - { - TypeNames = new List() { "genericCommBridge" }; - } - - public override EssentialsDevice BuildDevice(DeviceConfig dc) - { - Debug.Console(1, "Factory Attempting to create new Generic Comm Device"); - return new GenericComm(dc); - } - } -} \ No newline at end of file diff --git a/src/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj b/src/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj index 0dfd3657..9ae4379d 100644 --- a/src/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj +++ b/src/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj @@ -165,6 +165,7 @@ +