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 @@
+