mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-16 05:05:00 +00:00
Implement IDeviceInfoProvider on DGE100
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net.Sockets;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Crestron.SimplSharp;
|
using Crestron.SimplSharp;
|
||||||
using Crestron.SimplSharpPro;
|
using Crestron.SimplSharpPro;
|
||||||
@@ -14,15 +15,19 @@ using Newtonsoft.Json;
|
|||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
using PepperDash.Essentials.Core;
|
using PepperDash.Essentials.Core;
|
||||||
using PepperDash.Essentials.Core.Config;
|
using PepperDash.Essentials.Core.Config;
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
using Crestron.SimplSharpPro.DeviceSupport;
|
||||||
|
using PepperDash.Essentials.Core.DeviceInfo;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.DM.Endpoints.DGEs
|
namespace PepperDash.Essentials.DM.Endpoints.DGEs
|
||||||
{
|
{
|
||||||
[Description("Wrapper class for DGE-100")]
|
[Description("Wrapper class for DGE-100")]
|
||||||
public class Dge100Controller : CrestronGenericBaseDevice, IComPorts, IIROutputPorts, IHasBasicTriListWithSmartObject, ICec
|
public class Dge100Controller : CrestronGenericBaseDevice, IComPorts, IIROutputPorts, IHasBasicTriListWithSmartObject, ICec, IDeviceInfoProvider
|
||||||
{
|
{
|
||||||
|
private const int CtpPort = 41795;
|
||||||
private readonly Dge100 _dge;
|
private readonly Dge100 _dge;
|
||||||
|
|
||||||
|
private readonly TsxCcsUcCodec100EthernetReservedSigs _dgeEthernetInfo;
|
||||||
|
|
||||||
public BasicTriListWithSmartObject Panel { get { return _dge; } }
|
public BasicTriListWithSmartObject Panel { get { return _dge; } }
|
||||||
|
|
||||||
private DeviceConfig _dc;
|
private DeviceConfig _dc;
|
||||||
@@ -32,7 +37,12 @@ namespace PepperDash.Essentials.DM.Endpoints.DGEs
|
|||||||
public Dge100Controller(string key, string name, Dge100 device, DeviceConfig dc, CrestronTouchpanelPropertiesConfig props)
|
public Dge100Controller(string key, string name, Dge100 device, DeviceConfig dc, CrestronTouchpanelPropertiesConfig props)
|
||||||
:base(key, name, device)
|
:base(key, name, device)
|
||||||
{
|
{
|
||||||
_dge = device;
|
_dge = device;
|
||||||
|
_dgeEthernetInfo = _dge.ExtenderEthernetReservedSigs;
|
||||||
|
_dgeEthernetInfo.DeviceExtenderSigChange += (extender, args) => UpdateDeviceInfo();
|
||||||
|
_dgeEthernetInfo.Use();
|
||||||
|
|
||||||
|
DeviceInfo = new DeviceInfo();
|
||||||
|
|
||||||
_dc = dc;
|
_dc = dc;
|
||||||
|
|
||||||
@@ -69,8 +79,86 @@ namespace PepperDash.Essentials.DM.Endpoints.DGEs
|
|||||||
|
|
||||||
#region ICec Members
|
#region ICec Members
|
||||||
public Cec StreamCec { get { return _dge.HdmiOut.StreamCec; } }
|
public Cec StreamCec { get { return _dge.HdmiOut.StreamCec; } }
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Implementation of IDeviceInfoProvider
|
||||||
|
|
||||||
|
public DeviceInfo DeviceInfo { get; private set; }
|
||||||
|
|
||||||
|
public event EventHandler<DeviceInfoEventArgs> DeviceInfoChanged;
|
||||||
|
|
||||||
|
public void UpdateDeviceInfo()
|
||||||
|
{
|
||||||
|
DeviceInfo.IpAddress = _dgeEthernetInfo.IpAddressFeedback.StringValue;
|
||||||
|
DeviceInfo.MacAddress = _dgeEthernetInfo.MacAddressFeedback.StringValue;
|
||||||
|
|
||||||
|
GetFirmwareAndSerialInfo();
|
||||||
|
|
||||||
|
OnDeviceInfoChange();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GetFirmwareAndSerialInfo()
|
||||||
|
{
|
||||||
|
if (String.IsNullOrEmpty(_dgeEthernetInfo.IpAddressFeedback.StringValue))
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "IP Address information not yet received. No device is online");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var tcpClient = new GenericTcpIpClient("", _dgeEthernetInfo.IpAddressFeedback.StringValue, CtpPort, 1024);
|
||||||
|
|
||||||
|
var gather = new CommunicationGather(tcpClient, "\r\n\r\n");
|
||||||
|
|
||||||
|
tcpClient.ConnectionChange += (sender, args) =>
|
||||||
|
{
|
||||||
|
if (!args.Client.IsConnected)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
args.Client.SendText("ver\r\n");
|
||||||
|
};
|
||||||
|
|
||||||
|
gather.LineReceived += (sender, args) =>
|
||||||
|
{
|
||||||
|
if (args.Text.ToLower().Contains("host"))
|
||||||
|
{
|
||||||
|
DeviceInfo.HostName = args.Text.Split(';')[1].Trim();
|
||||||
|
|
||||||
|
tcpClient.Disconnect();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//ignore console prompt
|
||||||
|
if (args.Text.ToLower().Contains(">"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!args.Text.ToLower().Contains("dge"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DeviceInfo.SerialNumber = args.Text.Split('[')[1].Split(' ')[4].Replace("#", "");
|
||||||
|
DeviceInfo.FirmwareVersion = args.Text.Split('[')[1].Split(' ')[1];
|
||||||
|
|
||||||
|
tcpClient.SendText("host\r\n");
|
||||||
|
};
|
||||||
|
|
||||||
|
tcpClient.Connect();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDeviceInfoChange()
|
||||||
|
{
|
||||||
|
var handler = DeviceInfoChanged;
|
||||||
|
|
||||||
|
if (handler == null) return;
|
||||||
|
|
||||||
|
handler(this, new DeviceInfoEventArgs(DeviceInfo));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Dge100ControllerFactory : EssentialsDeviceFactory<Dge100Controller>
|
public class Dge100ControllerFactory : EssentialsDeviceFactory<Dge100Controller>
|
||||||
|
|||||||
Reference in New Issue
Block a user