diff --git a/src/PepperDash.Essentials.Core/Comm and IR/ComPortController.cs b/src/PepperDash.Essentials.Core/Comm and IR/ComPortController.cs
index cc57fa19..ba599ead 100644
--- a/src/PepperDash.Essentials.Core/Comm and IR/ComPortController.cs
+++ b/src/PepperDash.Essentials.Core/Comm and IR/ComPortController.cs
@@ -1,59 +1,76 @@
using System;
-using System.Collections.Generic;
-using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
-using Crestron.SimplSharp;
using Crestron.SimplSharpPro;
-
using PepperDash.Core;
+using PepperDash.Core.Logging;
using Serilog.Events;
namespace PepperDash.Essentials.Core
{
- ///
- /// Represents a ComPortController
- ///
+ ///
+ /// Represents a ComPortController
+ ///
public class ComPortController : Device, IBasicCommunicationWithStreamDebugging
{
- ///
- /// Gets or sets the StreamDebugging
- ///
- public CommunicationStreamDebugging StreamDebugging { get; private set; }
+ ///
+ /// Gets or sets the StreamDebugging
+ ///
+ public CommunicationStreamDebugging StreamDebugging { get; private set; }
+ ///
+ /// Event fired when bytes are received
+ ///
public event EventHandler BytesReceived;
+
+ ///
+ /// Event fired when text is received
+ ///
public event EventHandler TextReceived;
- ///
- /// Gets or sets the IsConnected
- ///
+ ///
+ /// Gets or sets the IsConnected
+ ///
public bool IsConnected { get { return true; } }
ComPort Port;
ComPort.ComPortSpec Spec;
- public ComPortController(string key, Func postActivationFunc,
- ComPort.ComPortSpec spec, EssentialsControlPropertiesConfig config) : base(key)
- {
- StreamDebugging = new CommunicationStreamDebugging(key);
+ ///
+ /// Constructor
+ ///
+ ///
+ ///
+ ///
+ ///
+ public ComPortController(string key, Func postActivationFunc,
+ ComPort.ComPortSpec spec, EssentialsControlPropertiesConfig config) : base(key)
+ {
+ StreamDebugging = new CommunicationStreamDebugging(key);
- Spec = spec;
+ Spec = spec;
- AddPostActivationAction(() =>
- {
- Port = postActivationFunc(config);
+ AddPostActivationAction(() =>
+ {
+ Port = postActivationFunc(config);
- RegisterAndConfigureComPort();
- });
- }
+ RegisterAndConfigureComPort();
+ });
+ }
+ ///
+ /// Constructor
+ ///
+ /// Device key
+ /// COM port instance
+ /// COM port specification
public ComPortController(string key, ComPort port, ComPort.ComPortSpec spec)
: base(key)
{
if (port == null)
{
- Debug.LogMessage(LogEventLevel.Information, this, "ERROR: Invalid com port, continuing but comms will not function");
+ Debug.LogMessage(LogEventLevel.Information, this, "ERROR: Invalid com port, continuing but comms will not function");
return;
}
@@ -64,71 +81,111 @@ namespace PepperDash.Essentials.Core
RegisterAndConfigureComPort();
}
- private void RegisterAndConfigureComPort()
- {
- if (Port == null)
- {
- Debug.LogMessage(LogEventLevel.Information, this, "Configured com Port for this device does not exist.");
- return;
- }
- if (Port.Parent is CrestronControlSystem)
- {
- var result = Port.Register();
- if (result != eDeviceRegistrationUnRegistrationResponse.Success)
- {
- Debug.LogMessage(LogEventLevel.Information, this, "ERROR: Cannot register Com port: {0}", result);
- return; // false
- }
- }
+ private void RegisterAndConfigureComPort()
+ {
+ if (Port == null)
+ {
+ Debug.LogMessage(LogEventLevel.Information, this, "Configured com Port for this device does not exist.");
+ return;
+ }
+ // TODO [ ] - Remove commented out code once verified working
+ //if (Port.Parent is CrestronControlSystem || Port.Parent is CenIoCom102)
+ if (Port.Parent is GenericBase genericDevice && genericDevice.Registerable)
+ {
+ //this.LogInformation($"INFO: Attempting to register {Key} using {Port.Parent.GetType().Name}-comport-{Port.ID}");
+ var result = genericDevice.Register();
+ if (result != eDeviceRegistrationUnRegistrationResponse.Success)
+ {
+ this.LogError($"ERROR: Cannot register {Key} using {Port.Parent.GetType().Name}-comport-{Port.ID} (result == {result})");
+ return; // false
+ }
+ }
+
+ var specResult = Port.SetComPortSpec(Spec);
+ if (specResult != 0)
+ {
+ this.LogError($"ERROR: Cannot set comspec for {Key} using {Port.Parent.GetType().Name}-comport-{Port.ID} (result == {specResult})");
+ return;
+ }
+ //this.LogInformation($"INFO: Successfully set comspec for {Key} using {Port.Parent.GetType().Name}-comport-{Port.ID} (result == {specResult})");
- var specResult = Port.SetComPortSpec(Spec);
- if (specResult != 0)
- {
- Debug.LogMessage(LogEventLevel.Information, this, "WARNING: Cannot set comspec");
- return;
- }
- Port.SerialDataReceived += Port_SerialDataReceived;
- }
- ~ComPortController()
+ // TODO [ ] - Remove debug logging once verified working
+ // if (Port.Parent is CenIoCom102)
+ // {
+ // Port.PropertyChanged += (s, e) =>
+ // {
+ // this.LogInformation($@"RegisterAndConfigureComPort: PropertyChanged Fired >>
+ // comPort-'{Port.ID}',
+ // Property Changed-'{e.Property}',
+ // Value Changed-'{e.Value}',
+ // deviceName-'{Port.DeviceName}',
+ // parentDevice-'{Port.ParentDevice}',
+ // parent-`{Port.Parent}`,
+ // online-`{Port.IsOnline}`,
+ // present-`{Port.Present}`,
+ // supportedBaudRates-'{Port.SupportedBaudRates}'");
+ // };
+ // Port.ExtendedInformationChanged += (s, e) =>
+ // {
+
+ // this.LogInformation($@"RegisterAndConfigureComPort: ExtendedInformationChanged Fired >>
+ // comPort-'{Port.ID}',
+ // {e.Protocol},
+ // {e.BaudRate},
+ // {e.Parity},
+ // {e.DataBits},
+ // {e.StopBits},
+ // HW Handshake-'{e.HardwareHandshakeSetting}',
+ // SW Handshake-'{e.SoftwareHandshakeSetting}'");
+ // };
+ // }
+
+ Port.SerialDataReceived += Port_SerialDataReceived;
+ }
+
+ ///
+ /// Destructor
+ ///
+ ~ComPortController()
{
Port.SerialDataReceived -= Port_SerialDataReceived;
}
void Port_SerialDataReceived(ComPort ReceivingComPort, ComPortSerialDataEventArgs args)
{
- OnDataReceived(args.SerialData);
+ OnDataReceived(args.SerialData);
}
- void OnDataReceived(string s)
- {
+ void OnDataReceived(string s)
+ {
var eventSubscribed = false;
- var bytesHandler = BytesReceived;
- if (bytesHandler != null)
- {
- var bytes = Encoding.GetEncoding(28591).GetBytes(s);
+ var bytesHandler = BytesReceived;
+ if (bytesHandler != null)
+ {
+ var bytes = Encoding.GetEncoding(28591).GetBytes(s);
if (StreamDebugging.RxStreamDebuggingIsEnabled)
Debug.LogMessage(LogEventLevel.Information, this, "Received: '{0}'", ComTextHelper.GetEscapedText(bytes));
- bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes));
+ bytesHandler(this, new GenericCommMethodReceiveBytesArgs(bytes));
eventSubscribed = true;
- }
- var textHandler = TextReceived;
- if (textHandler != null)
- {
+ }
+ var textHandler = TextReceived;
+ if (textHandler != null)
+ {
if (StreamDebugging.RxStreamDebuggingIsEnabled)
Debug.LogMessage(LogEventLevel.Information, this, "Received: '{0}'", s);
- textHandler(this, new GenericCommMethodReceiveTextArgs(s));
+ textHandler(this, new GenericCommMethodReceiveTextArgs(s));
eventSubscribed = true;
- }
+ }
- if(!eventSubscribed) Debug.LogMessage(LogEventLevel.Warning, this, "Received data but no handler is registered");
- }
+ if (!eventSubscribed) Debug.LogMessage(LogEventLevel.Warning, this, "Received data but no handler is registered");
+ }
- ///
- /// Deactivate method
- ///
- ///
+ ///
+ /// Deactivate method
+ ///
+ ///
public override bool Deactivate()
{
return Port.UnRegister() == eDeviceRegistrationUnRegistrationResponse.Success;
@@ -136,70 +193,70 @@ namespace PepperDash.Essentials.Core
#region IBasicCommunication Members
- ///
- /// SendText method
- ///
+ ///
+ /// SendText method
+ ///
public void SendText(string text)
{
if (Port == null)
return;
- if (StreamDebugging.TxStreamDebuggingIsEnabled)
- Debug.LogMessage(LogEventLevel.Information, this, "Sending {0} characters of text: '{1}'", text.Length, text);
- Port.Send(text);
+ if (StreamDebugging.TxStreamDebuggingIsEnabled)
+ Debug.LogMessage(LogEventLevel.Information, this, "Sending {0} characters of text: '{1}'", text.Length, text);
+ Port.Send(text);
}
- ///
- /// SendBytes method
- ///
+ ///
+ /// SendBytes method
+ ///
public void SendBytes(byte[] bytes)
{
if (Port == null)
return;
var text = Encoding.GetEncoding(28591).GetString(bytes, 0, bytes.Length);
- if (StreamDebugging.TxStreamDebuggingIsEnabled)
- Debug.LogMessage(LogEventLevel.Information, this, "Sending {0} bytes: '{1}'", bytes.Length, ComTextHelper.GetEscapedText(bytes));
+ if (StreamDebugging.TxStreamDebuggingIsEnabled)
+ Debug.LogMessage(LogEventLevel.Information, this, "Sending {0} bytes: '{1}'", bytes.Length, ComTextHelper.GetEscapedText(bytes));
Port.Send(text);
}
- ///
- /// Connect method
- ///
+ ///
+ /// Connect method
+ ///
public void Connect()
- {
+ {
}
- ///
- /// Disconnect method
- ///
+ ///
+ /// Disconnect method
+ ///
public void Disconnect()
{
}
#endregion
- ///
- ///
- ///
- ///
- ///
- /// SimulateReceive method
- ///
- 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);
- }
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// SimulateReceive method
+ ///
+ 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());
- }
+ OnDataReceived(b.ToString());
+ }
}
}
\ No newline at end of file