From 7a636b78e2b8fe481e8c51f317124b2108070414 Mon Sep 17 00:00:00 2001 From: Jason DeVito Date: Sat, 12 Oct 2019 00:25:47 -0500 Subject: [PATCH] Completed SystemInfo class, created example program for testing. PepperDash Core updates ready for review. Additional changes made to core: Moved EventArgs from JsonToSimpl to root of core for access to the Bool, Ushrt, String change event args classes --- .../Pepperdash Core/PepperDash_Core.csproj | 8 +- .../SystemInfo/ConsoleHelper.cs | 52 --- .../SystemInfo/ControlSubnetInfo.cs | 81 ----- .../SystemInfo/EthernetInfo.cs | 108 ------ .../SystemInfo/EventArgs and Constants.cs | 32 +- .../SystemInfo/ProcessorInfo.cs | 121 ------- .../Pepperdash Core/SystemInfo/ProgramInfo.cs | 88 ----- .../SystemInfo/SystemInfoConfig.cs | 102 ++++++ .../SystemInfo/SystemInfoToSimpl.cs | 325 ++++++++++++++---- 9 files changed, 377 insertions(+), 540 deletions(-) delete mode 100644 Pepperdash Core/Pepperdash Core/SystemInfo/ConsoleHelper.cs delete mode 100644 Pepperdash Core/Pepperdash Core/SystemInfo/ControlSubnetInfo.cs delete mode 100644 Pepperdash Core/Pepperdash Core/SystemInfo/EthernetInfo.cs delete mode 100644 Pepperdash Core/Pepperdash Core/SystemInfo/ProcessorInfo.cs delete mode 100644 Pepperdash Core/Pepperdash Core/SystemInfo/ProgramInfo.cs create mode 100644 Pepperdash Core/Pepperdash Core/SystemInfo/SystemInfoConfig.cs diff --git a/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj b/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj index ec3427c..5cfaffc 100644 --- a/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj +++ b/Pepperdash Core/Pepperdash Core/PepperDash_Core.csproj @@ -110,14 +110,10 @@ - - - - - - + + diff --git a/Pepperdash Core/Pepperdash Core/SystemInfo/ConsoleHelper.cs b/Pepperdash Core/Pepperdash Core/SystemInfo/ConsoleHelper.cs deleted file mode 100644 index c38279d..0000000 --- a/Pepperdash Core/Pepperdash Core/SystemInfo/ConsoleHelper.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Core.SystemInfo -{ - /// - /// Console helper class - /// - public class ConsoleHelper - { - /// - /// Cosntructor - /// - public ConsoleHelper() - { - - } - - /// - /// Parse console respopnse method - /// - /// - /// - /// - /// - /// console response - public string ParseConsoleResponse(string response, string line, string startString, string endString) - { - if (string.IsNullOrEmpty(response) || string.IsNullOrEmpty(line) || string.IsNullOrEmpty(startString) || string.IsNullOrEmpty(endString)) - return ""; - - try - { - var linePos = response.IndexOf(line); - var startPos = response.IndexOf(startString, linePos) + startString.Length; - var endPos = response.IndexOf(endString, startPos); - response = response.Substring(startPos, endPos - startPos).Trim(); - } - catch (Exception e) - { - var msg = string.Format("ConsoleHelper.ParseConsoleResponse failed:\r{0}", e); - CrestronConsole.PrintLine(msg); - ErrorLog.Error(msg); - } - - return response; - } - } -} \ No newline at end of file diff --git a/Pepperdash Core/Pepperdash Core/SystemInfo/ControlSubnetInfo.cs b/Pepperdash Core/Pepperdash Core/SystemInfo/ControlSubnetInfo.cs deleted file mode 100644 index 6353339..0000000 --- a/Pepperdash Core/Pepperdash Core/SystemInfo/ControlSubnetInfo.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Core.SystemInfo -{ - /// - /// Control subnet class - /// - public class ControlSubnetConfig - { - public ushort Enabled { get; set; } - public ushort IsInAutomaticMode { get; set; } - public string MacAddress { get; set; } - public string IpAddress { get; set; } - public string Subnet { get; set; } - public string RouterPrefix { get; set; } - - /// - /// Constructor - /// - public ControlSubnetConfig() - { - // add logic here if necessary - } - } - - /// - /// Control subnet info class - /// - public class ControlSubnetInfo - { - public ControlSubnetConfig properties { get; set; } - - /// - /// Constructor - /// - public ControlSubnetInfo() - { - properties.Enabled = (ushort)0; - properties.IsInAutomaticMode = (ushort)0; - properties.MacAddress = "NA"; - properties.IpAddress = "NA"; - properties.Subnet = "NA"; - properties.RouterPrefix = "NA"; - } - - /// - /// Get control subnet info - /// - /// - public bool GetInfo() - { - try - { - // get cs adapter id - var adapterId = CrestronEthernetHelper.GetAdapterdIdForSpecifiedAdapterType(EthernetAdapterType.EthernetCSAdapter); - if (!adapterId.Equals(EthernetAdapterType.EthernetUnknownAdapter)) - { - properties.Enabled = (ushort)EthernetAdapterType.EthernetCSAdapter; - properties.IsInAutomaticMode = (ushort)(CrestronEthernetHelper.IsControlSubnetInAutomaticMode ? 1 : 0); - properties.MacAddress = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_MAC_ADDRESS, adapterId); - properties.IpAddress = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, adapterId); - properties.Subnet = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_MASK, adapterId); - properties.RouterPrefix = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CONTROL_SUBNET_ROUTER_PREFIX, adapterId); - } - } - catch (Exception e) - { - var msg = string.Format("ControlSubnetInfo.GetInfo() failed:\r{0}", e); - CrestronConsole.PrintLine(msg); - ErrorLog.Error(msg); - return false; - } - - return true; - } - } -} \ No newline at end of file diff --git a/Pepperdash Core/Pepperdash Core/SystemInfo/EthernetInfo.cs b/Pepperdash Core/Pepperdash Core/SystemInfo/EthernetInfo.cs deleted file mode 100644 index d98d186..0000000 --- a/Pepperdash Core/Pepperdash Core/SystemInfo/EthernetInfo.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Core.SystemInfo -{ - /// - /// Ethernet class - /// - public class EthernetConfig - { - public ushort DhcpIsOn { get; set; } - public string Hostname { get; set; } - public string MacAddress { get; set; } - public string IpAddress { get; set; } - public string Subnet { get; set; } - public string Gateway { get; set; } - public string Dns1 { get; set; } - public string Dns2 { get; set; } - public string Dns3 { get; set; } - public string Domain { get; set; } - - /// - /// Constructor - /// - public EthernetConfig() - { - // add logic here if necessary - } - } - - /// - /// - /// - public class EthernetInfo - { - public EthernetConfig properties { get; set; } - - /// - /// Constructor - /// - public EthernetInfo() - { - - } - - /// - /// - /// - /// - public bool GetInfo() - { - try - { - // get lan adapter id - var adapterId = CrestronEthernetHelper.GetAdapterdIdForSpecifiedAdapterType(EthernetAdapterType.EthernetLANAdapter); - - // get lan adapter info - var dhcpState = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_DHCP_STATE, adapterId); - if (!string.IsNullOrEmpty(dhcpState)) - properties.DhcpIsOn = (ushort)(dhcpState.ToLower().Contains("on") ? 1 : 0); - - properties.Hostname = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_HOSTNAME, adapterId); - properties.MacAddress = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_MAC_ADDRESS, adapterId); - properties.IpAddress = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, adapterId); - properties.Subnet = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_MASK, adapterId); - properties.Gateway = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_ROUTER, adapterId); - properties.Domain = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_DOMAIN_NAME, adapterId); - - // returns comma seperate list of dns servers with trailing comma - // example return: "8.8.8.8 (DHCP),8.8.4.4 (DHCP)," - string dns = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_DNS_SERVER, adapterId); - if (string.IsNullOrEmpty(dns)) - { - properties.Dns1 = "0.0.0.0"; - properties.Dns2 = "0.0.0.0"; - properties.Dns3 = "0.0.0.0"; - } - - if (dns.Contains(",")) - { - string[] dnsList = dns.Split(','); - properties.Dns1 = !string.IsNullOrEmpty(dnsList[0]) ? dnsList[0] : "0.0.0.0"; - properties.Dns2 = !string.IsNullOrEmpty(dnsList[1]) ? dnsList[1] : "0.0.0.0"; - properties.Dns3 = !string.IsNullOrEmpty(dnsList[2]) ? dnsList[2] : "0.0.0.0"; - } - else - { - - properties.Dns1 = !string.IsNullOrEmpty(dns) ? dns : "0.0.0.0"; - properties.Dns2 = "0.0.0.0"; - properties.Dns3 = "0.0.0.0"; - } - } - catch(Exception e) - { - var msg = string.Format("EthernetInfo.GetInfo() failed:\r{0}", e); - CrestronConsole.PrintLine(msg); - ErrorLog.Error(msg); - return false; - } - - return true; - } - } -} \ No newline at end of file diff --git a/Pepperdash Core/Pepperdash Core/SystemInfo/EventArgs and Constants.cs b/Pepperdash Core/Pepperdash Core/SystemInfo/EventArgs and Constants.cs index 169bf4b..4e6b500 100644 --- a/Pepperdash Core/Pepperdash Core/SystemInfo/EventArgs and Constants.cs +++ b/Pepperdash Core/Pepperdash Core/SystemInfo/EventArgs and Constants.cs @@ -23,10 +23,10 @@ namespace PepperDash.Core.SystemInfo public const ushort ProgramUptimeChange = 204; public const ushort ObjectChange = 301; - public const ushort ProcessorObjectChange = 302; - public const ushort EthernetObjectChange = 303; - public const ushort ControlSubnetObjectChange = 304; - public const ushort ProgramObjectChange = 305; + public const ushort ProcessorConfigChange = 302; + public const ushort EthernetConfigChange = 303; + public const ushort ControlSubnetConfigChange = 304; + public const ushort ProgramConfigChange = 305; } /// @@ -34,7 +34,7 @@ namespace PepperDash.Core.SystemInfo /// public class ProcessorChangeEventArgs : EventArgs { - public ProcessorConfig Processor { get; set; } + public ProcessorInfo Processor { get; set; } public ushort Type { get; set; } public ushort Index { get; set; } @@ -49,7 +49,7 @@ namespace PepperDash.Core.SystemInfo /// /// Constructor overload /// - public ProcessorChangeEventArgs(ProcessorConfig processor, ushort type) + public ProcessorChangeEventArgs(ProcessorInfo processor, ushort type) { Processor = processor; Type = type; @@ -58,7 +58,7 @@ namespace PepperDash.Core.SystemInfo /// /// Constructor /// - public ProcessorChangeEventArgs(ProcessorConfig processor, ushort type, ushort index) + public ProcessorChangeEventArgs(ProcessorInfo processor, ushort type, ushort index) { Processor = processor; Type = type; @@ -71,7 +71,7 @@ namespace PepperDash.Core.SystemInfo /// public class EthernetChangeEventArgs : EventArgs { - public EthernetConfig Adapter { get; set; } + public EthernetInfo Adapter { get; set; } public ushort Type { get; set; } public ushort Index { get; set; } @@ -88,7 +88,7 @@ namespace PepperDash.Core.SystemInfo /// /// /// - public EthernetChangeEventArgs(EthernetConfig ethernet, ushort type) + public EthernetChangeEventArgs(EthernetInfo ethernet, ushort type) { Adapter = ethernet; Type = type; @@ -99,7 +99,7 @@ namespace PepperDash.Core.SystemInfo /// /// /// - public EthernetChangeEventArgs(EthernetConfig ethernet, ushort type, ushort index) + public EthernetChangeEventArgs(EthernetInfo ethernet, ushort type, ushort index) { Adapter = ethernet; Type = type; @@ -112,7 +112,7 @@ namespace PepperDash.Core.SystemInfo /// public class ControlSubnetChangeEventArgs : EventArgs { - public ControlSubnetConfig Adapter { get; set; } + public ControlSubnetInfo Adapter { get; set; } public ushort Type { get; set; } public ushort Index { get; set; } @@ -127,7 +127,7 @@ namespace PepperDash.Core.SystemInfo /// /// Constructor overload /// - public ControlSubnetChangeEventArgs(ControlSubnetConfig controlSubnet, ushort type) + public ControlSubnetChangeEventArgs(ControlSubnetInfo controlSubnet, ushort type) { Adapter = controlSubnet; Type = type; @@ -136,7 +136,7 @@ namespace PepperDash.Core.SystemInfo /// /// Constructor overload /// - public ControlSubnetChangeEventArgs(ControlSubnetConfig controlSubnet, ushort type, ushort index) + public ControlSubnetChangeEventArgs(ControlSubnetInfo controlSubnet, ushort type, ushort index) { Adapter = controlSubnet; Type = type; @@ -149,7 +149,7 @@ namespace PepperDash.Core.SystemInfo /// public class ProgramChangeEventArgs : EventArgs { - public ProgramConfig Program { get; set; } + public ProgramInfo Program { get; set; } public ushort Type { get; set; } public ushort Index { get; set; } @@ -166,7 +166,7 @@ namespace PepperDash.Core.SystemInfo /// /// /// - public ProgramChangeEventArgs(ProgramConfig program, ushort type) + public ProgramChangeEventArgs(ProgramInfo program, ushort type) { Program = program; Type = type; @@ -177,7 +177,7 @@ namespace PepperDash.Core.SystemInfo /// /// /// - public ProgramChangeEventArgs(ProgramConfig program, ushort type, ushort index) + public ProgramChangeEventArgs(ProgramInfo program, ushort type, ushort index) { Program = program; Type = type; diff --git a/Pepperdash Core/Pepperdash Core/SystemInfo/ProcessorInfo.cs b/Pepperdash Core/Pepperdash Core/SystemInfo/ProcessorInfo.cs deleted file mode 100644 index 701956e..0000000 --- a/Pepperdash Core/Pepperdash Core/SystemInfo/ProcessorInfo.cs +++ /dev/null @@ -1,121 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Core.SystemInfo -{ - /// - /// Processor properties class - /// - public class ProcessorConfig - { - public string Model { get; set; } - public string SerialNumber { get; set; } - public string Firmware { get; set; } - public string FirmwareDate { get; set; } - public string OsVersion { get; set; } - public string RuntimeEnvironment { get; set; } - public string DevicePlatform { get; set; } - public string ModuleDirectory { get; set; } - public string LocalTimeZone { get; set; } - public string ProgramIdTag { get; set; } - - /// - /// Constructor - /// - public ProcessorConfig() - { - Model = ""; - SerialNumber = ""; - Firmware = ""; - FirmwareDate = ""; - OsVersion = ""; - RuntimeEnvironment = ""; - DevicePlatform = ""; - ModuleDirectory = ""; - LocalTimeZone = ""; - ProgramIdTag = ""; - } - } - - /// - /// - /// - public class ProcessorInfo - { - public ProcessorConfig properties { get; set; } - - /// - /// Constructor - /// - public ProcessorInfo() - { - properties.Model = ""; - properties.SerialNumber = ""; - properties.Firmware = ""; - properties.FirmwareDate = ""; - properties.OsVersion = ""; - properties.RuntimeEnvironment = ""; - properties.DevicePlatform = ""; - properties.ModuleDirectory = ""; - properties.LocalTimeZone = ""; - properties.ProgramIdTag = ""; - } - - /// - /// Get processor info method - /// - /// bool - public bool GetInfo() - { - var console = new ConsoleHelper(); - - try - { - properties.Model = InitialParametersClass.ControllerPromptName; - properties.SerialNumber = CrestronEnvironment.SystemInfo.SerialNumber; - properties.ModuleDirectory = InitialParametersClass.ProgramDirectory.ToString(); - properties.ProgramIdTag = InitialParametersClass.ProgramIDTag; - properties.DevicePlatform = CrestronEnvironment.DevicePlatform.ToString(); - properties.OsVersion = CrestronEnvironment.OSVersion.Version.ToString(); - properties.RuntimeEnvironment = CrestronEnvironment.RuntimeEnvironment.ToString(); - properties.LocalTimeZone = CrestronEnvironment.GetTimeZone().Offset; - - // Does not return firmware version matching a "ver" command - // returns the "ver -v" 'CAB' version - // example return ver -v: - // RMC3 Cntrl Eng [v1.503.3568.25373 (Oct 09 2018), #4001E302] @E-00107f4420f0 - // Build: 14:05:46 Oct 09 2018 (3568.25373) - // Cab: 1.503.0070 - // Applications: 1.0.6855.21351 - // Updater: 1.4.24 - // Bootloader: 1.22.00 - // RMC3-SetupProgram: 1.003.0011 - // IOPVersion: FPGA [v09] slot:7 - // PUF: Unknown - //Firmware = CrestronEnvironment.OSVersion.Firmware; - //Firmware = InitialParametersClass.FirmwareVersion; - - // Use below logic to get actual firmware ver, not the 'CAB' returned by the above - // matches console return of a "ver" and on SystemInfo page - // example return ver: - // RMC3 Cntrl Eng [v1.503.3568.25373 (Oct 09 2018), #4001E302] @E-00107f4420f0 - var response = ""; - CrestronConsole.SendControlSystemCommand("ver", ref response); - properties.Firmware = console.ParseConsoleResponse(response, "Cntrl Eng", "[", "("); - properties.FirmwareDate = console.ParseConsoleResponse(response, "Cntrl Eng", "(", ")"); - } - catch (Exception e) - { - var msg = string.Format("ProcessorInfo.GetInfo() failed:\r{0}", e); - CrestronConsole.PrintLine(msg); - ErrorLog.Error(msg); - return false; - } - - return true; - } - } -} \ No newline at end of file diff --git a/Pepperdash Core/Pepperdash Core/SystemInfo/ProgramInfo.cs b/Pepperdash Core/Pepperdash Core/SystemInfo/ProgramInfo.cs deleted file mode 100644 index 46cebd1..0000000 --- a/Pepperdash Core/Pepperdash Core/SystemInfo/ProgramInfo.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Core.SystemInfo -{ - /// - /// Program class - /// - public class ProgramConfig - { - public string Key { get; set; } - public string Name { get; set; } - public string Header { get; set; } - public string System { get; set; } - public string CompileTime { get; set; } - public string Database { get; set; } - public string Environment { get; set; } - public string Programmer { get; set; } - - /// - /// Constructor - /// - public ProgramConfig() - { - // add logic here if necessary - } - } - - /// - /// Program info class - /// - public class ProgramInfo - { - public ProgramConfig properties { get; set; } - - /// - /// Constructor - /// - public ProgramInfo() - { - - } - - /// - /// Get program info by index - /// - /// - /// - public bool GetInfoByIndex(int index) - { - var console = new ConsoleHelper(); - - try - { - string response = ""; - CrestronConsole.SendControlSystemCommand(string.Format("progcomments:{0}", index), ref response); - - // SIMPL returns - properties.Name = console.ParseConsoleResponse(response, "Program File", ":", "\x0D"); - properties.System = console.ParseConsoleResponse(response, "System Name", ":", "\x0D"); - properties.Programmer = console.ParseConsoleResponse(response, "Programmer", ":", "\x0D"); - properties.CompileTime = console.ParseConsoleResponse(response, "Compiled On", ":", "\x0D"); - properties.Database = console.ParseConsoleResponse(response, "CrestronDB", ":", "\x0D"); - properties.Environment = console.ParseConsoleResponse(response, "Source Env", ":", "\x0D"); - - // S# returns - if (properties.System.Length == 0) - properties.System = console.ParseConsoleResponse(response, "Application Name", ":", "\x0D"); - if (properties.Database.Length == 0) - properties.Database = console.ParseConsoleResponse(response, "PlugInVersion", ":", "\x0D"); - if (properties.Environment.Length == 0) - properties.Environment = console.ParseConsoleResponse(response, "Program Tool", ":", "\x0D"); - } - catch (Exception e) - { - var msg = string.Format("ProgramInfo.GetInfoByIndex({0}) failed:\r{1}", index, e); - CrestronConsole.PrintLine(msg); - ErrorLog.Error(msg); - return false; - } - - return true; - } - } -} \ No newline at end of file diff --git a/Pepperdash Core/Pepperdash Core/SystemInfo/SystemInfoConfig.cs b/Pepperdash Core/Pepperdash Core/SystemInfo/SystemInfoConfig.cs new file mode 100644 index 0000000..cbf5f4b --- /dev/null +++ b/Pepperdash Core/Pepperdash Core/SystemInfo/SystemInfoConfig.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +namespace PepperDash.Core.SystemInfo +{ + /// + /// Processor info class + /// + public class ProcessorInfo + { + public string Model { get; set; } + public string SerialNumber { get; set; } + public string Firmware { get; set; } + public string FirmwareDate { get; set; } + public string OsVersion { get; set; } + public string RuntimeEnvironment { get; set; } + public string DevicePlatform { get; set; } + public string ModuleDirectory { get; set; } + public string LocalTimeZone { get; set; } + public string ProgramIdTag { get; set; } + + /// + /// Constructor + /// + public ProcessorInfo() + { + + } + } + + /// + /// Ethernet info class + /// + public class EthernetInfo + { + public ushort DhcpIsOn { get; set; } + public string Hostname { get; set; } + public string MacAddress { get; set; } + public string IpAddress { get; set; } + public string Subnet { get; set; } + public string Gateway { get; set; } + public string Dns1 { get; set; } + public string Dns2 { get; set; } + public string Dns3 { get; set; } + public string Domain { get; set; } + + /// + /// Constructor + /// + public EthernetInfo() + { + + } + } + + /// + /// Control subnet info class + /// + public class ControlSubnetInfo + { + public ushort Enabled { get; set; } + public ushort IsInAutomaticMode { get; set; } + public string MacAddress { get; set; } + public string IpAddress { get; set; } + public string Subnet { get; set; } + public string RouterPrefix { get; set; } + + /// + /// Constructor + /// + public ControlSubnetInfo() + { + + } + } + + /// + /// Program info class + /// + public class ProgramInfo + { + public string Name { get; set; } + public string Header { get; set; } + public string System { get; set; } + public string ProgramIdTag { get; set; } + public string CompileTime { get; set; } + public string Database { get; set; } + public string Environment { get; set; } + public string Programmer { get; set; } + + /// + /// Constructor + /// + public ProgramInfo() + { + + } + } +} \ No newline at end of file diff --git a/Pepperdash Core/Pepperdash Core/SystemInfo/SystemInfoToSimpl.cs b/Pepperdash Core/Pepperdash Core/SystemInfo/SystemInfoToSimpl.cs index c86d469..80c8246 100644 --- a/Pepperdash Core/Pepperdash Core/SystemInfo/SystemInfoToSimpl.cs +++ b/Pepperdash Core/Pepperdash Core/SystemInfo/SystemInfoToSimpl.cs @@ -3,18 +3,17 @@ using System.Collections.Generic; using System.Linq; using System.Text; using Crestron.SimplSharp; -using Crestron.SimplSharp.CrestronIO; namespace PepperDash.Core.SystemInfo { /// - /// Processor Info to Simpl Class - /// Ported from Technics_Core + /// System Info class /// public class SystemInfoToSimpl { public event EventHandler BoolChange; - public event EventHandler StringChange; + public event EventHandler StringChange; + public event EventHandler ProcessorChange; public event EventHandler EthernetChange; public event EventHandler ControlSubnetChange; @@ -29,109 +28,266 @@ namespace PepperDash.Core.SystemInfo } /// - /// Get processor info method + /// Gets the current processor info /// public void GetProcessorInfo() { OnBoolChange(true, 0, SystemInfoConstants.BusyBoolChange); - var processor = new ProcessorInfo(); - if (processor.GetInfo() == true) - OnProcessorChange(processor.properties, 0, SystemInfoConstants.ProcessorObjectChange); + try + { + var processor = new ProcessorInfo(); + processor.Model = InitialParametersClass.ControllerPromptName; + processor.SerialNumber = CrestronEnvironment.SystemInfo.SerialNumber; + processor.ModuleDirectory = InitialParametersClass.ProgramDirectory.ToString(); + processor.ProgramIdTag = InitialParametersClass.ProgramIDTag; + processor.DevicePlatform = CrestronEnvironment.DevicePlatform.ToString(); + processor.OsVersion = CrestronEnvironment.OSVersion.Version.ToString(); + processor.RuntimeEnvironment = CrestronEnvironment.RuntimeEnvironment.ToString(); + processor.LocalTimeZone = CrestronEnvironment.GetTimeZone().Offset; + + // Does not return firmware version matching a "ver" command + // returns the "ver -v" 'CAB' version + // example return ver -v: + // RMC3 Cntrl Eng [v1.503.3568.25373 (Oct 09 2018), #4001E302] @E-00107f4420f0 + // Build: 14:05:46 Oct 09 2018 (3568.25373) + // Cab: 1.503.0070 + // Applications: 1.0.6855.21351 + // Updater: 1.4.24 + // Bootloader: 1.22.00 + // RMC3-SetupProgram: 1.003.0011 + // IOPVersion: FPGA [v09] slot:7 + // PUF: Unknown + //Firmware = CrestronEnvironment.OSVersion.Firmware; + //Firmware = InitialParametersClass.FirmwareVersion; + + // Use below logic to get actual firmware ver, not the 'CAB' returned by the above + // matches console return of a "ver" and on SystemInfo page + // example return ver: + // RMC3 Cntrl Eng [v1.503.3568.25373 (Oct 09 2018), #4001E302] @E-00107f4420f0 + var response = ""; + CrestronConsole.SendControlSystemCommand("ver", ref response); + processor.Firmware = ParseConsoleResponse(response, "Cntrl Eng", "[", "("); + processor.FirmwareDate = ParseConsoleResponse(response, "Cntrl Eng", "(", ")"); + + OnProcessorChange(processor, 0, SystemInfoConstants.ProcessorConfigChange); + } + catch (Exception e) + { + var msg = string.Format("GetProcessorInfo failed: {0}", e.Message); + CrestronConsole.PrintLine(msg); + //ErrorLog.Error(msg); + } OnBoolChange(false, 0, SystemInfoConstants.BusyBoolChange); } /// - /// Get processor uptime method - /// - public void RefreshProcessorUptime() - { - var console = new ConsoleHelper(); - - try - { - string response = ""; - CrestronConsole.SendControlSystemCommand("uptime", ref response); - var uptime = console.ParseConsoleResponse(response, "running for", "running for", "\x0D"); - OnStringChange(uptime, 0, SystemInfoConstants.ProcessorUptimeChange); - } - catch (Exception e) - { - var msg = string.Format("RefreshProcessorUptime failed:\r{0}", e); - CrestronConsole.PrintLine(msg); - ErrorLog.Error(msg); - } - } - - /// - /// get ethernet info method + /// Gets the current ethernet info /// public void GetEthernetInfo() { OnBoolChange(true, 0, SystemInfoConstants.BusyBoolChange); - var ethernet = new EthernetInfo(); - if(ethernet.GetInfo() == true) - OnEthernetInfoChange(ethernet.properties, 0, SystemInfoConstants.ObjectChange); + var adapter = new EthernetInfo(); + + try + { + // get lan adapter id + var adapterId = CrestronEthernetHelper.GetAdapterdIdForSpecifiedAdapterType(EthernetAdapterType.EthernetLANAdapter); + + // get lan adapter info + var dhcpState = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_DHCP_STATE, adapterId); + if (!string.IsNullOrEmpty(dhcpState)) + adapter.DhcpIsOn = (ushort)(dhcpState.ToLower().Contains("on") ? 1 : 0); + + adapter.Hostname = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_HOSTNAME, adapterId); + adapter.MacAddress = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_MAC_ADDRESS, adapterId); + adapter.IpAddress = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, adapterId); + adapter.Subnet = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_MASK, adapterId); + adapter.Gateway = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_ROUTER, adapterId); + adapter.Domain = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_DOMAIN_NAME, adapterId); + + // returns comma seperate list of dns servers with trailing comma + // example return: "8.8.8.8 (DHCP),8.8.4.4 (DHCP)," + string dns = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_DNS_SERVER, adapterId); + if (dns.Contains(",")) + { + string[] dnsList = dns.Split(','); + for (var i = 0; i < dnsList.Length; i++) + { + if(i == 0) + adapter.Dns1 = !string.IsNullOrEmpty(dnsList[0]) ? dnsList[0] : "0.0.0.0"; + if(i == 1) + adapter.Dns2 = !string.IsNullOrEmpty(dnsList[1]) ? dnsList[1] : "0.0.0.0"; + if(i == 2) + adapter.Dns3 = !string.IsNullOrEmpty(dnsList[2]) ? dnsList[2] : "0.0.0.0"; + } + } + else + { + adapter.Dns1 = !string.IsNullOrEmpty(dns) ? dns : "0.0.0.0"; + adapter.Dns2 = "0.0.0.0"; + adapter.Dns3 = "0.0.0.0"; + } + + OnEthernetInfoChange(adapter, 0, SystemInfoConstants.EthernetConfigChange); + } + catch (Exception e) + { + var msg = string.Format("GetEthernetInfo failed: {0}", e.Message); + CrestronConsole.PrintLine(msg); + //ErrorLog.Error(msg); + } OnBoolChange(false, 0, SystemInfoConstants.BusyBoolChange); } /// - /// Get control subnet ethernet info method + /// Gets the current control subnet info /// public void GetControlSubnetInfo() { OnBoolChange(true, 0, SystemInfoConstants.BusyBoolChange); - var ethernet = new ControlSubnetInfo(); - if(ethernet.GetInfo() == true) - OnControlSubnetInfoChange(ethernet.properties, 0, SystemInfoConstants.ObjectChange); + var adapter = new ControlSubnetInfo(); + try + { + // get cs adapter id + var adapterId = CrestronEthernetHelper.GetAdapterdIdForSpecifiedAdapterType(EthernetAdapterType.EthernetCSAdapter); + if (!adapterId.Equals(EthernetAdapterType.EthernetUnknownAdapter)) + { + adapter.Enabled = 1; + adapter.IsInAutomaticMode = (ushort)(CrestronEthernetHelper.IsControlSubnetInAutomaticMode ? 1 : 0); + adapter.MacAddress = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_MAC_ADDRESS, adapterId); + adapter.IpAddress = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, adapterId); + adapter.Subnet = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_MASK, adapterId); + adapter.RouterPrefix = CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CONTROL_SUBNET_ROUTER_PREFIX, adapterId); + } + } + catch (Exception e) + { + adapter.Enabled = 0; + adapter.IsInAutomaticMode = 0; + adapter.MacAddress = "NA"; + adapter.IpAddress = "NA"; + adapter.Subnet = "NA"; + adapter.RouterPrefix = "NA"; + + var msg = string.Format("GetControlSubnetInfo failed: {0}", e.Message); + CrestronConsole.PrintLine(msg); + //ErrorLog.Error(msg); + } + + OnControlSubnetInfoChange(adapter, 0, SystemInfoConstants.ControlSubnetConfigChange); OnBoolChange(false, 0, SystemInfoConstants.BusyBoolChange); } /// - /// Get program info by index method + /// Gets the program info by index /// /// public void GetProgramInfoByIndex(ushort index) { + if (index < 1 || index > 10) + return; + OnBoolChange(true, 0, SystemInfoConstants.BusyBoolChange); - + var program = new ProgramInfo(); - if (program.GetInfoByIndex(index) == true) - OnProgramChange(program.properties, index, SystemInfoConstants.ObjectChange); - + + try + { + var response = ""; + CrestronConsole.SendControlSystemCommand(string.Format("progcomments:{0}", index), ref response); + + // no program loaded or running + if (response.Contains("Bad or Incomplete Command")) + { + program.Name = ""; + program.System = ""; + program.Programmer = ""; + program.CompileTime = ""; + program.Database = ""; + program.Environment = ""; + } + else + { + // SIMPL returns + program.Name = ParseConsoleResponse(response, "Program File", ":", "\x0D"); + program.System = ParseConsoleResponse(response, "System Name", ":", "\x0D"); + program.ProgramIdTag = ParseConsoleResponse(response, "Friendly Name", ":", "\x0D"); + program.Programmer = ParseConsoleResponse(response, "Programmer", ":", "\x0D"); + program.CompileTime = ParseConsoleResponse(response, "Compiled On", ":", "\x0D"); + program.Database = ParseConsoleResponse(response, "CrestronDB", ":", "\x0D"); + program.Environment = ParseConsoleResponse(response, "Source Env", ":", "\x0D"); + + // S# returns + if (program.System.Length == 0) + program.System = ParseConsoleResponse(response, "Application Name", ":", "\x0D"); + if (program.Database.Length == 0) + program.Database = ParseConsoleResponse(response, "PlugInVersion", ":", "\x0D"); + if (program.Environment.Length == 0) + program.Environment = ParseConsoleResponse(response, "Program Tool", ":", "\x0D"); + + } + + OnProgramChange(program, index, SystemInfoConstants.ProgramConfigChange); + } + catch (Exception e) + { + var msg = string.Format("GetProgramInfoByIndex failed: {0}", e.Message); + CrestronConsole.PrintLine(msg); + //ErrorLog.Error(msg); + } + OnBoolChange(false, 0, SystemInfoConstants.BusyBoolChange); } /// - /// Refresh program uptime by index + /// Gets the processor uptime and passes it to S+ /// - /// - public void RefreshProgramUptimeByIndex(int index) + public void RefreshProcessorUptime() { - var console = new ConsoleHelper(); - try { string response = ""; - CrestronConsole.SendControlSystemCommand(string.Format("proguptime:{0}", index), ref response); - string uptime = console.ParseConsoleResponse(response, "running for", "running for", "\x0D"); - OnStringChange(uptime, (ushort)index, SystemInfoConstants.ProgramUptimeChange); + CrestronConsole.SendControlSystemCommand("uptime", ref response); + var uptime = ParseConsoleResponse(response, "running for", "running for", "\x0D"); + OnStringChange(uptime, 0, SystemInfoConstants.ProcessorUptimeChange); } catch (Exception e) { - var msg = string.Format("RefreshProgramUptimebyIndex({0}) failed:\r{1}", index, e); + var msg = string.Format("RefreshProcessorUptime failed:\r{0}", e.Message); CrestronConsole.PrintLine(msg); - ErrorLog.Error(msg); + //ErrorLog.Error(msg); } } /// - /// Send console command + /// Gets the program uptime, by index, and passes it to S+ + /// + /// + public void RefreshProgramUptimeByIndex(int index) + { + try + { + string response = ""; + CrestronConsole.SendControlSystemCommand(string.Format("proguptime:{0}", index), ref response); + string uptime = ParseConsoleResponse(response, "running for", "running for", "\x0D"); + OnStringChange(uptime, (ushort)index, SystemInfoConstants.ProgramUptimeChange); + } + catch (Exception e) + { + var msg = string.Format("RefreshProgramUptimebyIndex({0}) failed:\r{1}", index, e.Message); + CrestronConsole.PrintLine(msg); + //ErrorLog.Error(msg); + } + } + + /// + /// Sends command to console, passes response back using string change event /// /// public void SendConsoleCommand(string cmd) @@ -139,18 +295,51 @@ namespace PepperDash.Core.SystemInfo if (string.IsNullOrEmpty(cmd)) return; - string consoleResponse = ""; - CrestronConsole.SendControlSystemCommand(cmd, ref consoleResponse); - if (!string.IsNullOrEmpty(consoleResponse)) + string response = ""; + CrestronConsole.SendControlSystemCommand(cmd, ref response); + if (!string.IsNullOrEmpty(response)) { - if (consoleResponse.Contains("\x0D\x0A")) - consoleResponse.Trim('\n'); - OnStringChange(consoleResponse, 0, SystemInfoConstants.ConsoleResponseChange); + if (response.EndsWith("\x0D\\x0A")) + response.Trim('\n'); + + OnStringChange(response, 0, SystemInfoConstants.ConsoleResponseChange); } - } + } /// - /// Boolean change event handler + /// private method to parse console messages + /// + /// + /// + /// + /// + /// + private string ParseConsoleResponse(string data, string line, string dataStart, string dataEnd) + { + var response = ""; + + if (string.IsNullOrEmpty(data) || string.IsNullOrEmpty(line) || string.IsNullOrEmpty(dataStart) || string.IsNullOrEmpty(dataEnd)) + return response; + + try + { + var linePos = data.IndexOf(line); + var startPos = data.IndexOf(dataStart, linePos) + dataStart.Length; + var endPos = data.IndexOf(dataEnd, startPos); + response = data.Substring(startPos, endPos - startPos).Trim(); + } + catch (Exception e) + { + var msg = string.Format("ParseConsoleResponse failed: {0}", e.Message); + CrestronConsole.PrintLine(msg); + //ErrorLog.Error(msg); + } + + return response; + } + + /// + /// Protected boolean change event handler /// /// /// @@ -167,7 +356,7 @@ namespace PepperDash.Core.SystemInfo } /// - /// String change event handler + /// Protected string change event handler /// /// /// @@ -184,12 +373,12 @@ namespace PepperDash.Core.SystemInfo } /// - /// Processor change event handler + /// Protected processor config change event handler /// /// /// /// - protected void OnProcessorChange(ProcessorConfig processor, ushort index, ushort type) + protected void OnProcessorChange(ProcessorInfo processor, ushort index, ushort type) { var handler = ProcessorChange; if (handler != null) @@ -206,7 +395,7 @@ namespace PepperDash.Core.SystemInfo /// /// /// - protected void OnEthernetInfoChange(EthernetConfig ethernet, ushort index, ushort type) + protected void OnEthernetInfoChange(EthernetInfo ethernet, ushort index, ushort type) { var handler = EthernetChange; if (handler != null) @@ -223,7 +412,7 @@ namespace PepperDash.Core.SystemInfo /// /// /// - protected void OnControlSubnetInfoChange(ControlSubnetConfig ethernet, ushort index, ushort type) + protected void OnControlSubnetInfoChange(ControlSubnetInfo ethernet, ushort index, ushort type) { var handler = ControlSubnetChange; if (handler != null) @@ -240,7 +429,7 @@ namespace PepperDash.Core.SystemInfo /// /// /// - protected void OnProgramChange(ProgramConfig program, ushort index, ushort type) + protected void OnProgramChange(ProgramInfo program, ushort index, ushort type) { var handler = ProgramChange; if (handler != null)