Esempio n. 1
0
        public SensorManager(ServiceConfig config)
        {
            Logger.Info("Creating Sensor Manager...");
            _config = config;

            _libreHardwareMonitorFacade = new LibreHardwareMonitorFacade(
                isCpuEnabled: config.CpuSensorsEnabled,
                isGpuEnabled: config.GpuSensorsEnabled,
                isStorageEnabled: config.StorageSensorsEnabled,
                isMotherboardEnabled: config.MotherboardSensorsEnabled,
                isMemoryEnabled: config.MemorySensorsEnabled,
                isNetworkEnabled: config.NetworkSensorsEnabled,
                isControllerEnabled: config.ControllerSensorsEnabled
                );
            _sensorValueProviders = new Dictionary <Identifier, ISensorValueProvider>();
            _hardware             = new HashSet <IHardware>();

            _sensorConfigs = _config.SensorConfigs
                             .SelectMany(x => x.Sensors.Select(s => (Sensor: s, Config: x.Config)))
                             .ToDictionary(x => x.Sensor, x => x.Config);
        }
Esempio n. 2
0
        private static bool DebugMenu()
        {
            if (!LogManager.Configuration.LoggingRules.Any(r => r.IsLoggingEnabledForLevel(LogLevel.Trace)))
            {
                LogManager.DisableLogging();
            }

            void WriteHeader(string header)
            {
                Console.ForegroundColor = ConsoleColor.White;
                Console.WriteLine(header);
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("-------------------------------");
                Console.ForegroundColor = ConsoleColor.Gray;
            }

            void WriteFooter()
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("-------------------------------");
                Console.ForegroundColor = ConsoleColor.White;
                Console.ResetColor();
            }

            void WriteProperty(int indent, string propertyName, object value = null)
            {
                Console.ForegroundColor = ConsoleColor.DarkGray;
                Console.Write($"» {new string('\t', indent)} ");
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.Write($"{propertyName}");
                if (value != null)
                {
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.Write($"{value}");
                }
                Console.WriteLine();
                Console.ResetColor();
            }

            void WaitForInput()
            {
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey();
            }

            void ListInfo()
            {
                WriteHeader("Info");
                WriteProperty(0, "");

                var osName      = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ProductName", null)?.ToString() ?? string.Empty;
                var osReleaseId = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ReleaseId", null)?.ToString() ?? string.Empty;
                var osBuild     = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "BuildLabEx", null)?.ToString() ?? string.Empty;
                var appVersion  = FileVersionInfo.GetVersionInfo(Assembly.GetCallingAssembly().Location)?.ProductVersion;

                WriteProperty(1, "OS: ", $"{osName} {osReleaseId} [{osBuild}]");
                WriteProperty(1, "Build: ", appVersion);

                WriteProperty(0, "");
                WriteFooter();
            }

            void ListApplications()
            {
                WriteHeader("Applications");
                WriteProperty(0, "");

                var thermaltakeExecutables = new[]
                {
                    "TT RGB Plus",
                    "ThermaltakeUpdate",
                    "Thermaltake DPS POWER",
                    "NeonMaker Light Editing Software"
                };

                foreach (var process in Process.GetProcesses())
                {
                    if (thermaltakeExecutables.Any(e => string.CompareOrdinal(process.ProcessName, e) == 0))
                    {
                        WriteProperty(0, $"{Path.GetFileName(process.ProcessName)}.exe ", process.Id);
                    }
                }

                WriteProperty(0, "");
                WriteFooter();
            }

            void ListHid()
            {
                WriteHeader("HID");
                WriteProperty(0, "");

                foreach (var device in DeviceList.Local.GetHidDevices(vendorID: 0x264a))
                {
                    WriteProperty(0, $"[0x{device.VendorID:x}, 0x{device.ProductID:x}]: ", device.DevicePath);
                }

                WriteProperty(0, "");
                WriteFooter();
            }

            void ListControllers()
            {
                WriteHeader("Controllers");
                WriteProperty(0, "");

                PluginLoader.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins"), typeof(IControllerDefinition));
                using (var deviceManager = new DeviceManager())
                {
                    foreach (var controller in deviceManager.Controllers)
                    {
                        WriteProperty(0, "Name: ", controller.Name);
                        WriteProperty(1, "VendorId: ", controller.VendorId);
                        WriteProperty(1, "ProductId: ", controller.ProductId);
                        WriteProperty(1, "Version: ", controller.Version);
                        WriteProperty(1, "Ports: ");

                        foreach (var port in controller.Ports)
                        {
                            WriteProperty(2, $"{port.Id}: ");
                            WriteProperty(3, "Data: ", controller.GetPortData(port.Id));
                            WriteProperty(3, "Identifier: ", port);
                        }

                        WriteProperty(1, "Available effect types: ", string.Join(", ", controller.EffectTypes));
                    }
                }

                WriteProperty(0, "");
                WriteFooter();
            }

            void ListSensors(params SensorType[] types)
            {
                WriteHeader("Sensors");
                WriteProperty(0, "");

                string FormatValue(SensorType type, float value)
                {
                    switch (type)
                    {
                    case SensorType.Voltage:     return($"{value:F2} V");

                    case SensorType.Clock:       return($"{value:F0} MHz");

                    case SensorType.Load:        return($"{value:F1} %");

                    case SensorType.Temperature: return($"{value:F1} °C");

                    case SensorType.Fan:         return($"{value:F0} RPM");

                    case SensorType.Flow:        return($"{value:F0} L/h");

                    case SensorType.Control:     return($"{value:F1} %");

                    case SensorType.Level:       return($"{value:F1} %");

                    case SensorType.Power:       return($"{value:F0} W");

                    case SensorType.Data:        return($"{value:F0} GB");

                    case SensorType.SmallData:   return($"{value:F1} MB");

                    case SensorType.Factor:      return($"{value:F3}");

                    case SensorType.Frequency:   return($"{value:F1} Hz");

                    case SensorType.Throughput:  return($"{value:F1} B/s");
                    }

                    return($"{value}");
                }

                using (var _libreHardwareMonitorFacade = new LibreHardwareMonitorFacade())
                {
                    var availableSensors = _libreHardwareMonitorFacade.Sensors.Where(s => types.Length == 0 || types.Contains(s.SensorType));
                    foreach (var(hardware, sensors) in availableSensors.GroupBy(s => s.Hardware))
                    {
                        WriteProperty(0, $"{hardware.Name}:");
                        hardware.Update();

                        foreach (var(type, group) in sensors.GroupBy(s => s.SensorType))
                        {
                            WriteProperty(1, $"{type}:");
                            foreach (var sensor in group)
                            {
                                WriteProperty(2, $"{ sensor.Name} ({ sensor.Identifier}): ", FormatValue(type, sensor.Value ?? float.NaN));
                            }
                        }

                        WriteProperty(0, "");
                    }
                }

                WriteFooter();
            }

            void ListPlugins()
            {
                WriteHeader("Plugins");
                WriteProperty(0, "");

                var pluginAssemblies = PluginLoader.SearchAll(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins"));

                WriteProperty(0, "Detected plugins:");
                foreach (var assembly in pluginAssemblies)
                {
                    WriteProperty(1, Path.GetFileName(assembly.Location));
                }

                WriteProperty(0, "");
                WriteFooter();
            }

            var enabled = Service != null && Service.Status != ServiceControllerStatus.Running;
            var menu    = new MenuPage("Main Menu > Debug");

            menu.Add("Report", () => {
                Console.Clear();
                ListInfo();
                ListApplications();
                ListHid();
                ListControllers();
                ListSensors(SensorType.Temperature);
                WaitForInput();
                return(false);
            }, () => enabled);
            menu.Add("Controllers", () => {
                Console.Clear();
                ListHid();
                ListControllers();
                WaitForInput();
                return(false);
            }, () => enabled);
            menu.Add("Sensors", () => {
                Console.Clear();
                ListSensors();
                WaitForInput();
                return(false);
            }, () => enabled);
            menu.Add("Plugins", () => {
                Console.Clear();
                ListPlugins();
                WaitForInput();
                return(false);
            }, () => enabled);
            menu.Add("Back", () => {
                LogManager.EnableLogging();
                return(true);
            }, () => true, '0');

            while (true)
            {
                Console.Clear();
                var selected = menu.Show();
                if (selected.Callback())
                {
                    return(false);
                }
            }
        }
Esempio n. 3
0
        private static bool DebugMenu()
        {
            if (!LogManager.Configuration.LoggingRules.Any(r => r.IsLoggingEnabledForLevel(LogLevel.Trace)))
            {
                LogManager.DisableLogging();
            }

            void WriteHeader(string header)
            {
                Console.ForegroundColor = ConsoleColor.White;
                Console.WriteLine(header);
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("-------------------------------");
                Console.ForegroundColor = ConsoleColor.Gray;
            }

            void WriteFooter()
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("-------------------------------");
                Console.ForegroundColor = ConsoleColor.White;
                Console.ResetColor();
            }

            void WriteProperty(int indent, string propertyName, object value = null)
            {
                Console.ForegroundColor = ConsoleColor.DarkGray;
                Console.Write($"» {new string('\t', indent)} ");
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.Write($"{propertyName}");
                if (value != null)
                {
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.Write($"{value}");
                }
                Console.WriteLine();
                Console.ResetColor();
            }

            void WaitForInput()
            {
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey();
            }

            void ListControllers()
            {
                WriteHeader("Controllers");
                WriteProperty(0, "");

                PluginLoader.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins"), typeof(IControllerDefinition));
                using (var deviceManager = new DeviceManager())
                {
                    foreach (var controller in deviceManager.Controllers)
                    {
                        WriteProperty(0, "Name: ", controller.Name);
                        WriteProperty(1, "VendorId: ", controller.VendorId);
                        WriteProperty(1, "ProductId: ", controller.ProductId);
                        WriteProperty(1, "Ports: ");

                        foreach (var port in controller.Ports)
                        {
                            var data = controller.GetPortData(port.Id);
                            WriteProperty(2, $"{port.Id}: ");
                            WriteProperty(3, "Data: ", data);
                            WriteProperty(3, "Identifier: ", port);
                        }

                        WriteProperty(1, "Available effect types: ", string.Join(", ", controller.EffectTypes));
                    }
                }

                WriteProperty(0, "");
                WriteFooter();
            }

            void ListSensors(params SensorType[] types)
            {
                WriteHeader("Sensors");
                WriteProperty(0, "");

                string FormatValue(SensorType type, float value)
                {
                    switch (type)
                    {
                    case SensorType.Voltage:     return($"{value:F2} V");

                    case SensorType.Clock:       return($"{value:F0} MHz");

                    case SensorType.Load:        return($"{value:F1} %");

                    case SensorType.Temperature: return($"{value:F1} °C");

                    case SensorType.Fan:         return($"{value:F0} RPM");

                    case SensorType.Flow:        return($"{value:F0} L/h");

                    case SensorType.Control:     return($"{value:F1} %");

                    case SensorType.Level:       return($"{value:F1} %");

                    case SensorType.Power:       return($"{value:F0} W");

                    case SensorType.Data:        return($"{value:F0} GB");

                    case SensorType.SmallData:   return($"{value:F1} MB");

                    case SensorType.Factor:      return($"{value:F3}");

                    case SensorType.Frequency:   return($"{value:F1} Hz");

                    case SensorType.Throughput:  return($"{value:F1} B/s");
                    }

                    return($"{value}");
                }

                using (var _libreHardwareMonitorFacade = new LibreHardwareMonitorFacade())
                {
                    var availableSensors = _libreHardwareMonitorFacade.Sensors.Where(s => types.Length > 0 ? types.Contains(s.SensorType) : true);
                    foreach (var(hardware, sensors) in availableSensors.GroupBy(s => s.Hardware))
                    {
                        WriteProperty(0, $"{hardware.Name}:");
                        hardware.Update();

                        foreach (var(type, group) in sensors.GroupBy(s => s.SensorType))
                        {
                            WriteProperty(1, $"{type}:");
                            foreach (var sensor in group)
                            {
                                WriteProperty(2, $"{ sensor.Name} ({ sensor.Identifier}): ", FormatValue(type, sensor.Value ?? float.NaN));
                            }
                        }

                        WriteProperty(0, "");
                    }
                }

                WriteFooter();
            }

            void ListPlugins()
            {
                WriteHeader("Plugins");
                WriteProperty(0, "");

                var pluginAssemblies = PluginLoader.SearchAll(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins"));

                WriteProperty(0, "Detected plugins:");
                foreach (var assembly in pluginAssemblies)
                {
                    WriteProperty(1, Path.GetFileName(assembly.Location));
                }

                WriteProperty(0, "");
                WriteFooter();
            }

            var enabled = Service != null && Service.Status != ServiceControllerStatus.Running;
            var menu    = new MenuPage("Main Menu > Debug");

            menu.Add("Report", () => {
                Console.Clear();
                ListControllers();
                ListSensors(SensorType.Temperature);
                WaitForInput();
                return(false);
            }, () => enabled);
            menu.Add("Controllers", () => {
                Console.Clear();
                ListControllers();
                WaitForInput();
                return(false);
            }, () => enabled);
            menu.Add("Sensors", () => {
                Console.Clear();
                ListSensors();
                WaitForInput();
                return(false);
            }, () => enabled);
            menu.Add("Plugins", () => {
                Console.Clear();
                ListPlugins();
                WaitForInput();
                return(false);
            }, () => enabled);
            menu.Add("Back", () => {
                LogManager.EnableLogging();
                return(true);
            }, () => true, '0');

            while (true)
            {
                Console.Clear();
                var selected = menu.Show();
                if (selected.Callback())
                {
                    return(false);
                }
            }
        }