diff --git a/ColorControl/ColorControl.csproj b/ColorControl/ColorControl.csproj index a5aa52e..0ed7b4a 100644 --- a/ColorControl/ColorControl.csproj +++ b/ColorControl/ColorControl.csproj @@ -97,6 +97,7 @@ + diff --git a/ColorControl/Forms/MessageForms.cs b/ColorControl/Forms/MessageForms.cs index ea33604..780d6dd 100644 --- a/ColorControl/Forms/MessageForms.cs +++ b/ColorControl/Forms/MessageForms.cs @@ -1,6 +1,8 @@ using ColorControl.Common; using System; using System.Collections.Generic; +using System.Data; +using System.Drawing; using System.Globalization; using System.Linq; using System.Windows.Forms; @@ -28,6 +30,7 @@ namespace ColorControl.Forms public decimal MinValue { get; set; } public decimal MaxValue { get; set; } public int NumberOfValues { get; set; } + public int StepSize { get; set; } public object Value { get; set; } public int ValueAsInt => int.Parse(Value.ToString()); @@ -54,6 +57,15 @@ namespace ColorControl.Forms var trackBar = sender as TrackBar; var edit = (NumericUpDown)_controls[trackBar]; + var indexDbl = (trackBar.Value * 1.0) / trackBar.TickFrequency; + var index = Convert.ToInt32(Math.Round(indexDbl)); + + var newValue = trackBar.Value < trackBar.Maximum ? trackBar.TickFrequency * index : trackBar.Value; + newValue = Math.Max(newValue, trackBar.Minimum); + newValue = Math.Min(newValue, trackBar.Maximum); + + trackBar.Value = newValue; + edit.Value = trackBar.Value; _toolTip ??= new ToolTip(); @@ -114,30 +126,42 @@ namespace ColorControl.Forms var prompt = new MessageForm() { - Width = 500, - Height = 90 + (fields.Count() * 55), + Width = 460, + Height = 106 + (fields.Count() * 50), FormBorderStyle = FormBorderStyle.FixedDialog, Text = caption, StartPosition = FormStartPosition.CenterScreen }; + var groupBox = new Panel(); + groupBox.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Bottom; + groupBox.Top = 0; + groupBox.Left = 0; + groupBox.Width = prompt.Width; + groupBox.Height = prompt.Height - 80; + groupBox.BackColor = SystemColors.Window; + //groupBox.Margin = new Padding(20); + + prompt.Controls.Add(groupBox); + var top = 10; var boxes = new List(); var counter = 1; + const int DefaultLeft = 20; foreach (var field in fields) { var label = field.Label; - var textLabel = new Label() { Left = 40, Top = top, Text = label, AutoSize = true }; - top += 25; - prompt.Controls.Add(textLabel); + var textLabel = new Label() { Left = DefaultLeft, Top = top, Text = label, AutoSize = true }; + top += 20; + groupBox.Controls.Add(textLabel); Control control; switch (field.FieldType) { case FieldType.Text: - var textBox = new MaskedTextBox() { Left = 40, Top = top, Width = 400 }; + var textBox = new MaskedTextBox() { Left = DefaultLeft, Top = top, Width = 400 }; if (label.Contains("Ip-address")) { @@ -157,7 +181,7 @@ namespace ColorControl.Forms case FieldType.Shortcut: var shortcutTextBox = new TextBox() { - Left = 40, + Left = DefaultLeft, Top = top, Width = 200, Name = $"edtShortcut_{counter}", @@ -176,7 +200,7 @@ namespace ColorControl.Forms break; case FieldType.Numeric: - var numericEdit = new NumericUpDown() { Left = 40, Top = top, Width = 400 }; + var numericEdit = new NumericUpDown() { Left = DefaultLeft, Top = top, Width = 400 }; if (field.MinValue != field.MaxValue) { @@ -195,7 +219,7 @@ namespace ColorControl.Forms case FieldType.DropDown: var comboBox = new ComboBox { - Left = 40, + Left = DefaultLeft, Top = top, Width = 400, DropDownStyle = ComboBoxStyle.DropDownList @@ -218,7 +242,7 @@ namespace ColorControl.Forms case FieldType.CheckBox: var checkBox = new CheckBox { - Left = 40, + Left = DefaultLeft, Top = top, Width = 24, }; @@ -231,7 +255,7 @@ namespace ColorControl.Forms case FieldType.Flags: var checkedListBox = new CheckedListBox { - Left = 40, + Left = DefaultLeft, Top = top, Width = 400, Height = 100, @@ -259,7 +283,7 @@ namespace ColorControl.Forms break; case FieldType.TrackBar: - var trackBar = new TrackBar { Left = 40, Top = top, Width = 300 }; + var trackBar = new TrackBar { Left = DefaultLeft, Top = top, Width = 300 }; var trackBarEdit = new NumericUpDown() { Left = trackBar.Left + trackBar.Width + 10, Top = top + 10, Width = 90 }; trackBarEdit.ValueChanged += prompt.TrackBarEdit_ValueChanged; @@ -274,7 +298,16 @@ namespace ColorControl.Forms { trackBar.Minimum = (int)field.MinValue; trackBar.Maximum = (int)field.MaxValue; - trackBar.TickFrequency = (trackBar.Maximum - trackBar.Minimum) / 100; + + if (field.StepSize > 0) + { + trackBar.TickFrequency = field.StepSize; + } + else + { + var tick = (trackBar.Maximum - trackBar.Minimum); + trackBar.TickFrequency = tick >= 100000 ? 5000 : 1; + } trackBarEdit.Minimum = field.MinValue; trackBarEdit.Maximum = field.MaxValue; @@ -289,7 +322,7 @@ namespace ColorControl.Forms top += trackBar.Height - 25; prompt.Height += trackBar.Height - 25; - prompt.Controls.Add(trackBarEdit); + groupBox.Controls.Add(trackBarEdit); control = trackBar; break; @@ -300,13 +333,13 @@ namespace ColorControl.Forms } top += 30; - prompt.Controls.Add(control); + groupBox.Controls.Add(control); boxes.Add(control); control.Tag = field; counter++; } - var confirmation = new Button() { Text = "OK", Left = 365, Width = 75, Top = prompt.ClientRectangle.Height - 30 }; + var confirmation = new Button() { Text = "OK", Left = DefaultLeft + 400 - 75, Width = 75, Top = prompt.ClientRectangle.Height - 30 }; confirmation.Click += (sender, e) => { foreach (var box in boxes) diff --git a/ColorControl/Services/LG/LgService.cs b/ColorControl/Services/LG/LgService.cs index 76ef641..94ed8df 100644 --- a/ColorControl/Services/LG/LgService.cs +++ b/ColorControl/Services/LG/LgService.cs @@ -12,6 +12,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; +using System.Management; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; @@ -542,6 +543,10 @@ namespace ColorControl.Services.LG await Task.Delay(2000); + //var startWatch = new ManagementEventWatcher("SELECT * FROM Win32_ProcessStartTrace"); + //startWatch.EventArrived += startWatch_EventArrived; + //startWatch.Start(); + MonitorContext ??= new ProcessMonitorContext(); //Process[] lastProcesses = null; @@ -634,6 +639,11 @@ namespace ColorControl.Services.LG } } + private void startWatch_EventArrived(object sender, EventArrivedEventArgs e) + { + //Logger.Debug("Process started: " + e.NewEvent.Properties["ProcessName"].Value); + } + private async Task HandleScreenSaverProcessAsync(int lastProcessId, Process[] processes, List connectedDevices) { var process = processes.FirstOrDefault(p => p.ProcessName.ToLowerInvariant().EndsWith(".scr")); diff --git a/ColorControl/Services/NVIDIA/NvDitherPanel.cs b/ColorControl/Services/NVIDIA/NvDitherPanel.cs index 45258bd..a7a19e4 100644 --- a/ColorControl/Services/NVIDIA/NvDitherPanel.cs +++ b/ColorControl/Services/NVIDIA/NvDitherPanel.cs @@ -18,24 +18,18 @@ namespace ColorControl.Services.NVIDIA InitializeComponent(); - if (cbxDitheringBitDepth.Items.Count == 0) - { - cbxDitheringBitDepth.Items.AddRange(Utils.GetDescriptions().ToArray()); - cbxDitheringMode.Items.AddRange(Utils.GetDescriptions().ToArray()); - FillGradient(); - } + cbxDitheringBitDepth.Items.AddRange(Utils.GetDescriptions().ToArray()); + cbxDitheringMode.Items.AddRange(Utils.GetDescriptions().ToArray()); + FillGradient(); - if (cbxDitheringDisplay.Items.Count == 0) - { - var displays = _nvService.GetDisplayInfos(); - var primaryDisplay = _nvService.GetPrimaryDisplay(); - var primaryDisplayInfo = displays.FirstOrDefault(d => d.Display == primaryDisplay); - var index = primaryDisplayInfo != null ? displays.IndexOf(primaryDisplayInfo) : 0; + var displays = _nvService.GetDisplayInfos(); + var primaryDisplay = _nvService.GetPrimaryDisplay(); + var primaryDisplayInfo = displays.FirstOrDefault(d => d.Display == primaryDisplay); + var index = primaryDisplayInfo != null ? displays.IndexOf(primaryDisplayInfo) : 0; - cbxDitheringDisplay.Items.AddRange(displays.ToArray()); + cbxDitheringDisplay.Items.AddRange(displays.ToArray()); - cbxDitheringDisplay.SelectedIndex = index; - } + cbxDitheringDisplay.SelectedIndex = index; UpdateDitherSettings(); diff --git a/ColorControl/Services/NVIDIA/NvGpuInfo.cs b/ColorControl/Services/NVIDIA/NvGpuInfo.cs index d052d51..11a3d03 100644 --- a/ColorControl/Services/NVIDIA/NvGpuInfo.cs +++ b/ColorControl/Services/NVIDIA/NvGpuInfo.cs @@ -1,4 +1,5 @@ using ColorControl.Common; +using ColorControl.Forms; using NvAPIWrapper.GPU; using NvAPIWrapper.Native; using NvAPIWrapper.Native.GPU; @@ -22,6 +23,8 @@ namespace ColorControl.Services.NVIDIA public class NvGpuOcSettings { + public static readonly uint DefaultPowerPCM = 100000; + public string PCIIdentifier { get; set; } public int MemoryOffsetKHz { get; set; } public NvGpuOcType Type { get; set; } @@ -29,7 +32,7 @@ namespace ColorControl.Services.NVIDIA public uint MaximumFrequencyKHz { get; set; } public uint MaximumVoltageUv { get; set; } public uint VoltageBoostPercent { get; set; } - public uint PowerPCM { get; set; } + public uint PowerPCM { get; set; } = DefaultPowerPCM; public override string ToString() { @@ -73,6 +76,16 @@ namespace ColorControl.Services.NVIDIA value += $"Power: {PowerPCM / 1000}%"; } + if (VoltageBoostPercent > 0) + { + if (!string.IsNullOrEmpty(value)) + { + value += ", "; + } + + value += $"Voltage: {VoltageBoostPercent}%"; + } + if (string.IsNullOrEmpty(value)) { value = "None"; @@ -96,6 +109,7 @@ namespace ColorControl.Services.NVIDIA public int? DefaultPowerInMilliWatts { get; private set; } public int MinPowerInMilliWatts { get; private set; } public int MaxPowerInMilliWatts { get; private set; } + public int MinCoreStepInMHz { get; private set; } = 15; public static readonly PublicClockDomain[] Domains = new[] { PublicClockDomain.Graphics, PublicClockDomain.Memory }; @@ -210,6 +224,8 @@ namespace ColorControl.Services.NVIDIA { Logger.Debug(ex); + MinCoreStepInMHz = 12; + var bla = GPUApi.GetClockBoostMask(GPU.Handle); var masks = bla._Masks; @@ -369,6 +385,10 @@ namespace ColorControl.Services.NVIDIA ocSettings.PowerPCM = power.PowerPolicyStatusEntries.FirstOrDefault(e => e.PerformanceStateId == PerformanceStateId.P0_3DPerformance).PowerTargetInPCM; + var voltageBoost = GPUApi.GetCoreVoltageBoostPercent(GPU.Handle); + + ocSettings.VoltageBoostPercent = voltageBoost.Percent; + foreach (var domain in Domains) { var locked = GetLockedBoost(domain); @@ -662,5 +682,106 @@ namespace ColorControl.Services.NVIDIA return string.Empty; } + internal MessageForms.FieldDefinition GetCoreOffsetField(NvGpuOcSettings settings) + { + var graphicsDelta = GetDeltaClockMinMax(PublicClockDomain.Graphics); + + //var field = new MessageForms.FieldDefinition + //{ + // Label = $"Core offset in MHz ({graphicsDelta.Item1.ToUnitString()} to {graphicsDelta.Item2.ToUnitString()})", + // FieldType = MessageForms.FieldType.Numeric, + // MinValue = graphicsDelta.Item1 / 1000, + // MaxValue = graphicsDelta.Item2 / 1000, + // Value = settings.GraphicsOffsetKHz / 1000 + //}; + + var field = new MessageForms.FieldDefinition + { + Label = $"Core offset in MHz ({graphicsDelta.Item1.ToUnitString()} to {graphicsDelta.Item2.ToUnitString()})", + FieldType = MessageForms.FieldType.TrackBar, + MinValue = graphicsDelta.Item1 / 1000, + MaxValue = graphicsDelta.Item2 / 1000, + Value = settings.GraphicsOffsetKHz / 1000, + StepSize = MinCoreStepInMHz + }; + + return field; + } + + internal MessageForms.FieldDefinition GetMemoryOffsetField(NvGpuOcSettings settings) + { + var memoryDelta = GetDeltaClockMinMax(PublicClockDomain.Memory); + + //var field = new MessageForms.FieldDefinition + //{ + // Label = $"Memory offset in MHz ({memoryDelta.Item1.ToUnitString()} to {memoryDelta.Item2.ToUnitString()})", + // FieldType = MessageForms.FieldType.Numeric, + // MinValue = memoryDelta.Item1 / 1000, + // MaxValue = memoryDelta.Item2 / 1000, + // Value = settings.MemoryOffsetKHz / 1000 + //}; + + var field = new MessageForms.FieldDefinition + { + Label = $"Memory offset in MHz ({memoryDelta.Item1.ToUnitString()} to {memoryDelta.Item2.ToUnitString()})", + FieldType = MessageForms.FieldType.TrackBar, + MinValue = memoryDelta.Item1 / 1000, + MaxValue = memoryDelta.Item2 / 1000, + Value = settings.MemoryOffsetKHz / 1000, + StepSize = 25 + }; + + return field; + } + + internal MessageForms.FieldDefinition GetPowerField(NvGpuOcSettings settings) + { + var powerLimits = GetPowerLimits(); + + var defaultPowerLimitMw = DefaultPowerInMilliWatts; + + if (settings.PowerPCM == 0) + { + settings.PowerPCM = NvGpuOcSettings.DefaultPowerPCM; + } + else if (settings.PowerPCM < powerLimits.Item1) + { + settings.PowerPCM = powerLimits.Item1; + } + + var powerField = defaultPowerLimitMw > 0 ? + new MessageForms.FieldDefinition + { + Label = $"Power limit in milli watts. Min: {MinPowerInMilliWatts}, max: {MaxPowerInMilliWatts}", + FieldType = MessageForms.FieldType.TrackBar, + Value = (int)((decimal)defaultPowerLimitMw / 100000 * settings.PowerPCM), + MinValue = MinPowerInMilliWatts, + MaxValue = MaxPowerInMilliWatts + } + : new MessageForms.FieldDefinition + { + Label = $"Power limit in PCM (per cent mille). Min: {powerLimits.Item1}, max: {powerLimits.Item2}", + FieldType = MessageForms.FieldType.TrackBar, + Value = settings.PowerPCM, + MinValue = powerLimits.Item1, + MaxValue = powerLimits.Item2 + }; + + return powerField; + } + + internal MessageForms.FieldDefinition GetVoltageBoostField(NvGpuOcSettings settings) + { + var field = new MessageForms.FieldDefinition + { + Label = "Voltage boost in %", + FieldType = MessageForms.FieldType.TrackBar, + Value = settings.VoltageBoostPercent, + MinValue = 0, + MaxValue = 100 + }; + + return field; + } } } diff --git a/ColorControl/Services/NVIDIA/NvPanel.cs b/ColorControl/Services/NVIDIA/NvPanel.cs index 4a8e6e5..d3c776c 100644 --- a/ColorControl/Services/NVIDIA/NvPanel.cs +++ b/ColorControl/Services/NVIDIA/NvPanel.cs @@ -116,8 +116,6 @@ namespace ColorControl.Services.NVIDIA return; } - var gpus = new List(); - var text = Program.TS_TASKNAME; foreach (var displayInfo in displays) { @@ -161,14 +159,9 @@ namespace ColorControl.Services.NVIDIA } text += "\n" + displayInfo.InfoLine; - - if (!gpus.Contains(displayInfo.Display.DisplayDevice.PhysicalGPU)) - { - gpus.Add(displayInfo.Display.DisplayDevice.PhysicalGPU); - } } - UpdateNvGpuInfo(gpus); + UpdateNvGpuInfo(); FormUtils.SetNotifyIconText(_trayIcon, text); } @@ -547,7 +540,7 @@ namespace ColorControl.Services.NVIDIA private void BuildNvidiaDriverSettingsMenu(ToolStripDropDownItem parent, Dictionary settings = null, ContextMenuStrip contextMenuStrip = null) { var driverSettings = _nvService.GetVisibleSettings().OrderBy(s => s.GroupName); - var handledGroupItems = new List(); + var handledGroupItems = new Dictionary(); var showUnchanged = settings != null; var defaultValue = SettingMeta.UnsetDwordValue; @@ -574,14 +567,14 @@ namespace ColorControl.Services.NVIDIA item.Font = _menuItemFonts[!isDefault]; - if (!handledGroupItems.Contains(groupItem)) + if (!handledGroupItems.ContainsKey(groupItem)) { groupItem.Tag = null; - handledGroupItems.Add(groupItem); + handledGroupItems.Add(groupItem, !isDefault); } - if (!isDefault) + else if (!isDefault) { - groupItem.Tag = true; + handledGroupItems[groupItem] = true; } var subItemUnchangedName = $"mnuNvDriverSettingItem_{driverSetting.SettingId}_Unchanged"; @@ -650,9 +643,9 @@ namespace ColorControl.Services.NVIDIA } } - foreach (var groupItem in handledGroupItems) + foreach (var groupItemKeyValue in handledGroupItems) { - groupItem.Font = _menuItemFonts[groupItem.Tag != null]; + groupItemKeyValue.Key.Font = _menuItemFonts[groupItemKeyValue.Value]; } } @@ -1192,7 +1185,7 @@ namespace ColorControl.Services.NVIDIA { var overclockTypes = Utils.GetDescriptions(); - var values = MessageForms.ShowDialog("Choose desired overclock settings", new[] { + var values = MessageForms.ShowDialog($"Overclock settings - {gpuInfo.GPU.FullName}", new[] { new MessageForms.FieldDefinition { Label = "Overclock method", @@ -1247,7 +1240,7 @@ namespace ColorControl.Services.NVIDIA .OrderBy(x => x) .ToList(); var voltValues = curveEntries - .Where(e => e.DefaultVoltageInMicroV == 0 || e.DefaultFrequencyInkHz >= minCurveFreq) + .Where(e => (e.DefaultVoltageInMicroV == 0 || e.DefaultFrequencyInkHz >= minCurveFreq) && e.DefaultVoltageInMicroV <= 1100000) .OrderBy(e => e.DefaultVoltageInMicroV) .Select(e => (e.DefaultVoltageInMicroV / 1000).ToString()) .Distinct() @@ -1258,39 +1251,14 @@ namespace ColorControl.Services.NVIDIA var curveEntry = curveEntries.FirstOrDefault(e => e.VoltageInMicroV == currentGraphicsVoltage); var currentGpuFreq = curveEntry.FrequencyInkHz; - var memoryDelta = gpuInfo.GetDeltaClockMinMax(NvAPIWrapper.Native.GPU.PublicClockDomain.Memory); + var coreOffsetField = gpuInfo.GetCoreOffsetField(currentSettings); + var memoryOffsetField = gpuInfo.GetMemoryOffsetField(currentSettings); - var powerLimits = gpuInfo.GetPowerLimits(); + var voltageBoostField = gpuInfo.GetVoltageBoostField(currentSettings); + var powerField = gpuInfo.GetPowerField(currentSettings); - var defaultPowerLimitMw = gpuInfo.DefaultPowerInMilliWatts; - - var powerField = defaultPowerLimitMw > 0 ? - new MessageForms.FieldDefinition - { - Label = $"Power limit in milli watts. Min: {gpuInfo.MinPowerInMilliWatts}, max: {gpuInfo.MaxPowerInMilliWatts}", - FieldType = MessageForms.FieldType.TrackBar, - Value = (int)((decimal)defaultPowerLimitMw / 100000 * currentSettings.PowerPCM), - MinValue = gpuInfo.MinPowerInMilliWatts, - MaxValue = gpuInfo.MaxPowerInMilliWatts - } - : new MessageForms.FieldDefinition - { - Label = $"Power limit in PCM (per cent mille). Min: {powerLimits.Item1}, max: {powerLimits.Item2}", - FieldType = MessageForms.FieldType.TrackBar, - Value = currentSettings.PowerPCM, - MinValue = powerLimits.Item1, - MaxValue = powerLimits.Item2 - }; - - var values = MessageForms.ShowDialog("Set desired clock speeds and voltage", new[] { - new MessageForms.FieldDefinition - { - Label = $"Core offset in MHz ({graphicsDelta.Item1.ToUnitString()} to {graphicsDelta.Item2.ToUnitString()})", - FieldType = MessageForms.FieldType.Numeric, - MinValue = graphicsDelta.Item1 / 1000, - MaxValue = graphicsDelta.Item2 / 1000, - Value = currentSettings.GraphicsOffsetKHz / 1000 - }, + var values = MessageForms.ShowDialog($"Overclock settings - {gpuInfo.GPU.FullName}", new[] { + coreOffsetField, new MessageForms.FieldDefinition { Label = "Optional undervolt: maximum voltage in milli volt", @@ -1305,22 +1273,8 @@ namespace ColorControl.Services.NVIDIA Value = currentSettings.MaximumFrequencyKHz / 1000, Values = freqValues, }, - new MessageForms.FieldDefinition - { - Label = $"Memory offset in MHz ({memoryDelta.Item1.ToUnitString()} to {memoryDelta.Item2.ToUnitString()})", - FieldType = MessageForms.FieldType.Numeric, - MinValue = memoryDelta.Item1 / 1000, - MaxValue = memoryDelta.Item2 / 1000, - Value = currentSettings.MemoryOffsetKHz / 1000 - }, - new MessageForms.FieldDefinition - { - Label = "Voltage boost in %", - FieldType = MessageForms.FieldType.Numeric, - Value = currentSettings.VoltageBoostPercent, - MinValue = 0, - MaxValue = 100 - }, + memoryOffsetField, + voltageBoostField, powerField, }); if (!values.Any()) @@ -1335,8 +1289,7 @@ namespace ColorControl.Services.NVIDIA nvOverclockSettings.VoltageBoostPercent = values[4].ValueAsUInt; var power = values[5].ValueAsUInt; - - nvOverclockSettings.PowerPCM = defaultPowerLimitMw > 0 ? (uint)((decimal)power / defaultPowerLimitMw * 100000) : power; + nvOverclockSettings.PowerPCM = powerField.FieldType == MessageForms.FieldType.TrackBar ? (uint)((decimal)power / gpuInfo.DefaultPowerInMilliWatts * 100000) : power; return nvOverclockSettings; } @@ -1349,54 +1302,17 @@ namespace ColorControl.Services.NVIDIA PCIIdentifier = gpuInfo.GPU.BusInformation.PCIIdentifiers.ToString() }; - var curveEntries = gpuInfo.CurveV3.GPUCurveEntries; + var coreOffsetField = gpuInfo.GetCoreOffsetField(currentSettings); + var memoryOffsetField = gpuInfo.GetMemoryOffsetField(currentSettings); - var freqValues = curveEntries.Select(e => (e.DefaultFrequencyInkHz / 1000).ToString()).Distinct().ToList(); - var voltValues = curveEntries.Select(e => (e.DefaultVoltageInMicroV / 1000).ToString()).Distinct().ToList(); + var voltageBoostField = gpuInfo.GetVoltageBoostField(currentSettings); + var powerField = gpuInfo.GetPowerField(currentSettings); - var currentGraphicsVoltage = currentSettings.MaximumVoltageUv > 0 ? currentSettings.MaximumVoltageUv : 1050000; - - var curveEntry = curveEntries.FirstOrDefault(e => e.VoltageInMicroV == currentGraphicsVoltage); - var currentGpuFreq = curveEntry.FrequencyInkHz; - - var graphicsDelta = gpuInfo.GetDeltaClockMinMax(NvAPIWrapper.Native.GPU.PublicClockDomain.Graphics); - var memoryDelta = gpuInfo.GetDeltaClockMinMax(NvAPIWrapper.Native.GPU.PublicClockDomain.Memory); - - var powerLimits = gpuInfo.GetPowerLimits(); - - var values = MessageForms.ShowDialog("Set desired clock speeds and voltage", new[] { - new MessageForms.FieldDefinition - { - Label = $"Core offset in MHz ({graphicsDelta.Item1.ToUnitString()} to {graphicsDelta.Item2.ToUnitString()})", - FieldType = MessageForms.FieldType.Numeric, - MinValue = graphicsDelta.Item1 / 1000, - MaxValue = graphicsDelta.Item2 / 1000, - Value = currentSettings.GraphicsOffsetKHz / 1000 - }, - new MessageForms.FieldDefinition - { - Label = $"Memory offset in MHz ({memoryDelta.Item1.ToUnitString()} to {memoryDelta.Item2.ToUnitString()})", - FieldType = MessageForms.FieldType.Numeric, - MinValue = memoryDelta.Item1 / 1000, - MaxValue = memoryDelta.Item2 / 1000, - Value = currentSettings.MemoryOffsetKHz / 1000 - }, - new MessageForms.FieldDefinition - { - Label = "Voltage boost in %", - FieldType = MessageForms.FieldType.Numeric, - Value = currentSettings.VoltageBoostPercent, - MinValue = 0, - MaxValue = 100 - }, - new MessageForms.FieldDefinition - { - Label = $"Power limit in PCM (per cent mille). Min: {powerLimits.Item1}, max: {powerLimits.Item2}", - FieldType = MessageForms.FieldType.Numeric, - Value = currentSettings.PowerPCM, - MinValue = powerLimits.Item1, - MaxValue = powerLimits.Item2 - }, + var values = MessageForms.ShowDialog($"Overclock settings - {gpuInfo.GPU.FullName}", new[] { + coreOffsetField, + memoryOffsetField, + voltageBoostField, + powerField, }); if (!values.Any()) { @@ -1406,7 +1322,9 @@ namespace ColorControl.Services.NVIDIA nvOverclockSettings.GraphicsOffsetKHz = values[0].ValueAsInt * 1000; nvOverclockSettings.MemoryOffsetKHz = values[1].ValueAsInt * 1000; nvOverclockSettings.VoltageBoostPercent = values[2].ValueAsUInt; - nvOverclockSettings.PowerPCM = values[3].ValueAsUInt; + + var power = values[3].ValueAsUInt; + nvOverclockSettings.PowerPCM = powerField.FieldType == MessageForms.FieldType.TrackBar ? (uint)((decimal)power / gpuInfo.DefaultPowerInMilliWatts * 100000) : power; return nvOverclockSettings; } @@ -1440,7 +1358,7 @@ namespace ColorControl.Services.NVIDIA var currentGraphicsOffset = gpuInfo.GetOffset(NvAPIWrapper.Native.GPU.PublicClockDomain.Graphics); var currentMemoryOffset = gpuInfo.GetOffset(NvAPIWrapper.Native.GPU.PublicClockDomain.Memory); - var values = MessageForms.ShowDialog("Set desired clock speeds and voltage", new[] { + var values = MessageForms.ShowDialog($"Overclock settings - {gpuInfo.GPU.FullName}", new[] { new MessageForms.FieldDefinition { Label = $"Core offset in MHz ({graphicsMinValue}KHz to {graphicsMaxValue}KHz)", @@ -1454,20 +1372,12 @@ namespace ColorControl.Services.NVIDIA Label = "Voltage in micro volt", FieldType = MessageForms.FieldType.DropDown, Values = voltValues, - //FieldType = MessageForms.FieldType.Numeric, - //MinValue = 650000, - //MaxValue = 1100000, - //Value = currentGraphicsVoltage }, new MessageForms.FieldDefinition { Label = "Core frequency in KHz", FieldType = MessageForms.FieldType.DropDown, Values = freqValues, - //FieldType = MessageForms.FieldType.Numeric, - //MinValue = 2000000, - //MaxValue = 3200000, - //Value = currentGpuFreq }, new MessageForms.FieldDefinition { diff --git a/ColorControl/lgtv/ClientKeyStore.cs b/ColorControl/lgtv/ClientKeyStore.cs index b978cf8..a900d06 100644 --- a/ColorControl/lgtv/ClientKeyStore.cs +++ b/ColorControl/lgtv/ClientKeyStore.cs @@ -25,7 +25,7 @@ namespace LgTv public void SaveClientKey(string key) { var filename = Path.Combine(Utils.GetDataPath(), ip + "_ClientKey.txt"); - File.WriteAllText(filename, key); + Utils.WriteText(filename, key); } public bool HasValidHandShake(string expectedHandShake) @@ -48,7 +48,7 @@ namespace LgTv public void SaveHandShake(string data) { var filename = Path.Combine(Utils.GetDataPath(), ip + "_HandShake.txt"); - File.WriteAllText(filename, data); + Utils.WriteText(filename, data); } } } diff --git a/Nspector/Common/DrsSettingsService.cs b/Nspector/Common/DrsSettingsService.cs index c5cc849..90d916d 100644 --- a/Nspector/Common/DrsSettingsService.cs +++ b/Nspector/Common/DrsSettingsService.cs @@ -531,6 +531,19 @@ namespace nspector.Common return result.OrderBy(x => x.SettingText).ThenBy(x => x.GroupName).ToList(); } + public async Task> GetSettingsForProfileAsync(string profileName, SettingViewMode viewMode) + { + var result = default(List); + + await Task.Run(() => + { + var applications = default(Dictionary); + result = GetSettingsForProfile(profileName, viewMode, ref applications, true); + }); + + return result; + } + public void AddApplication(string profileName, string applicationName) { DrsSession((hSession) =>