fix crash and nvidia error

This commit is contained in:
Vincent Maas committed 2023-04-21 20:11:20 +02:00
1 parent 52fd635fda
commit db23e67742
10 files changed
+138 -48

No files matched your search

+2 -3
View File
@@ -1,6 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<LangVersion>10.0</LangVersion>
<TargetFramework>net7.0-windows10.0.20348.0</TargetFramework>
<OutputType>WinExe</OutputType>
<IsWebBootstrapper>false</IsWebBootstrapper>
@@ -19,8 +18,8 @@
<PublisherName>Maassoft</PublisherName>
<Company>Maassoft</Company>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>9.1.0.0</ApplicationVersion>
<Version>9.1.0.0</Version>
<ApplicationVersion>9.1.1.0</ApplicationVersion>
<Version>9.1.1.0</Version>
<UseApplicationTrust>false</UseApplicationTrust>
<PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>false</BootstrapperEnabled>
+14 -7
View File
@@ -792,17 +792,24 @@ NOTE: installing the service may cause a User Account Control popup.");
}
}
if (_nvService != null && _nvDitherPanel == null)
if (_nvService != null)
{
_nvDitherPanel = new NvDitherPanel(_nvService);
if (_nvDitherPanel == null)
{
_nvDitherPanel = new NvDitherPanel(_nvService);
tabOptions.Controls.Add(_nvDitherPanel);
tabOptions.Controls.Add(_nvDitherPanel);
_nvDitherPanel.Top = grpGeneralOptions.Top;
_nvDitherPanel.Left = grpGeneralOptions.Left + grpGeneralOptions.Width + 4;
_nvDitherPanel.Width = tabOptions.Width - _nvDitherPanel.Left - 4;
_nvDitherPanel.Top = grpGeneralOptions.Top;
_nvDitherPanel.Left = grpGeneralOptions.Left + grpGeneralOptions.Width + 4;
_nvDitherPanel.Width = tabOptions.Width - _nvDitherPanel.Left - 4;
_nvDitherPanel.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
_nvDitherPanel.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
}
else
{
_nvDitherPanel.UpdateInfo();
}
}
_initialized = false;
@@ -36,7 +36,9 @@ namespace ColorControl.Services.EventDispatcher
{
IsRunning = true;
var _ = CheckProcesses();
Task.Run(async () => await CheckProcesses());
//var _ = CheckProcesses();
}
private async Task CheckProcesses()
+16 -6
View File
@@ -263,7 +263,7 @@ namespace ColorControl.Services.LG
~LgDevice()
{
_powerOffTimer?.Dispose();
ClearPowerOffTask();
}
private void AddInvokableAction(string name, Func<Dictionary<string, object>, bool> function)
@@ -780,9 +780,9 @@ namespace ColorControl.Services.LG
return await _lgTvApi.GetApps(force);
}
internal async Task<bool> PowerOff(bool checkHdmi = false)
internal async Task<bool> PowerOff(bool checkHdmi = false, bool reconnect = true)
{
if (!await Connected(true) || CurrentState != PowerState.Active)
if (!await Connected(reconnect) || CurrentState != PowerState.Active)
{
return false;
}
@@ -1102,15 +1102,25 @@ namespace ColorControl.Services.LG
internal void PowerOffIn(int seconds)
{
ClearPowerOffTask();
_powerOffTimer = new Timer(PowerOffByTimer);
_powerOffTimer.Change(TimeSpan.FromSeconds(seconds), TimeSpan.FromSeconds(seconds));
}
private void PowerOffByTimer(object state)
private void PowerOffByTimer(object _)
{
_powerOffTimer?.Dispose();
ClearPowerOffTask();
var _ = PowerOff(true);
Logger.Debug($"Device {Name} is now powering off due to delayed screensaver task");
var x = PowerOff(true, false);
//Task.Run(async () =>
//{
// // Do not force reconnect here (MessageWebSocket issues)
// await PowerOff(true, false);
//});
}
}
}
+23 -7
View File
@@ -9,6 +9,7 @@ using Newtonsoft.Json;
using NWin32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
@@ -88,6 +89,7 @@ namespace ColorControl.Services.LG
private int _poweredOffByScreenSaverProcessId;
private LgPreset _lastTriggeredPreset;
private RestartDetector _restartDetector;
private SynchronizationContext _syncContext;
public LgService(AppContextProvider appContextProvider, PowerEventDispatcher powerEventDispatcher, SessionSwitchDispatcher sessionSwitchDispatcher, ProcessEventDispatcher processEventDispatcher) : base(appContextProvider)
{
@@ -98,6 +100,7 @@ namespace ColorControl.Services.LG
LgPreset.LgApps = _lgApps;
_restartDetector = new RestartDetector();
_syncContext = AsyncOperationManager.SynchronizationContext;
LoadConfig();
LoadPresets();
@@ -434,6 +437,8 @@ namespace ColorControl.Services.LG
internal void WakeAfterStartupOrResume(PowerOnOffState state = PowerOnOffState.StartUp, bool checkUserSession = true)
{
Devices.ForEach(d => d.ClearPowerOffTask());
var wakeDevices = Devices.Where(d => state == PowerOnOffState.StartUp && d.PowerOnAfterStartup ||
state == PowerOnOffState.Resume && d.PowerOnAfterResume ||
state == PowerOnOffState.ScreenSaver && d.PowerOnAfterScreenSaver);
@@ -456,12 +461,11 @@ namespace ColorControl.Services.LG
private void SessionSwitched(object sender, SessionSwitchEventArgs e)
{
if (_sessionSwitchDispatcher.UserLocalSession)
if (!_sessionSwitchDispatcher.UserLocalSession)
{
return;
}
if (_poweredOffByScreenSaver)
{
Logger.Debug("User switched to local and screen was powered off due to screensaver: waking up");
@@ -483,8 +487,6 @@ namespace ColorControl.Services.LG
if (powerOn)
{
Devices.ForEach(d => d.ClearPowerOffTask());
WakeAfterStartupOrResume(PowerOnOffState.Resume);
return;
}
@@ -553,7 +555,11 @@ namespace ColorControl.Services.LG
Logger.Debug("Screensaver stopped, waking");
_poweredOffByScreenSaver = false;
_poweredOffByScreenSaverProcessId = 0;
WakeAfterStartupOrResume(PowerOnOffState.ScreenSaver);
_syncContext.Send((x) =>
{
WakeAfterStartupOrResume(PowerOnOffState.ScreenSaver);
}, null);
return;
}
@@ -698,7 +704,16 @@ namespace ColorControl.Services.LG
foreach (var device in powerOffDevices)
{
Logger.Debug($"Screensaver check: test connection with {device.Name}...");
var test = await device.TestConnection();
var test = false;
_syncContext.Send((x) =>
{
var task = device.TestConnection();
test = Utils.WaitForTask(task);
}, null);
//var test = await device.TestConnection();
Logger.Debug("Screensaver check: test connection result: " + test);
if (!test)
{
@@ -707,6 +722,8 @@ namespace ColorControl.Services.LG
if (device.ScreenSaverMinimalDuration > 0)
{
Logger.Debug($"Screensaver check: powering off tv {device.Name} in {device.ScreenSaverMinimalDuration} seconds because of screensaver");
_poweredOffByScreenSaver = true;
device.PowerOffIn(device.ScreenSaverMinimalDuration);
@@ -714,7 +731,6 @@ namespace ColorControl.Services.LG
continue;
}
Logger.Debug($"Screensaver check: powering off tv {device.Name} because of screensaver");
try
{
+27 -7
View File
@@ -6,7 +6,7 @@ using System.Windows.Forms;
namespace ColorControl.Services.NVIDIA
{
public partial class NvDitherPanel : UserControl
public partial class NvDitherPanel : UserControl, IModulePanel
{
private NvService _nvService;
private bool _updatingDitherSettings;
@@ -22,18 +22,32 @@ namespace ColorControl.Services.NVIDIA
cbxDitheringMode.Items.AddRange(Utils.GetDescriptions<NvDitherMode>().ToArray());
FillGradient();
var displays = _nvService.GetDisplayInfos();
RefreshDisplays();
UpdateDitherSettings();
_initialized = true;
}
private void RefreshDisplays()
{
var displays = _nvService.GetSimpleDisplayInfos();
if (displays == null)
{
return;
}
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.SelectedIndex = index;
UpdateDitherSettings();
_initialized = true;
if (cbxDitheringDisplay.SelectedIndex == -1)
{
cbxDitheringDisplay.SelectedIndex = index;
}
}
private void UpdateDitherSettings()
@@ -118,5 +132,11 @@ namespace ColorControl.Services.NVIDIA
UpdateDitherSettings();
}
public void UpdateInfo()
{
RefreshDisplays();
UpdateDitherSettings();
}
}
}
+28 -2
View File
@@ -240,8 +240,17 @@ namespace ColorControl.Services.NVIDIA
public Display GetPrimaryDisplay()
{
var displayId = DisplayDevice.GetGDIPrimaryDisplayDevice().DisplayId;
return Display.GetDisplays().FirstOrDefault(x => x.DisplayDevice.DisplayId == displayId);
try
{
var displayId = DisplayDevice.GetGDIPrimaryDisplayDevice().DisplayId;
return Display.GetDisplays().FirstOrDefault(x => x.DisplayDevice.DisplayId == displayId);
}
catch (Exception ex)
{
Logger.Error(ex, "Error while getting primary display device");
return null;
}
}
public bool ApplyPreset(string idOrName)
@@ -679,6 +688,23 @@ namespace ColorControl.Services.NVIDIA
return gpus;
}
public List<NvDisplayInfo> GetSimpleDisplayInfos()
{
var displays = GetDisplays();
var list = new List<NvDisplayInfo>();
foreach (var display in displays)
{
var name = FormUtils.ExtendedDisplayName(display.Name);
var displayInfo = new NvDisplayInfo(display, null, null, name);
list.Add(displayInfo);
}
return list;
}
public List<NvDisplayInfo> GetDisplayInfos()
{
try
+21 -14
View File
@@ -288,31 +288,38 @@ namespace LgTv
public static async Task<LgTvApi> CreateLgTvApi(string ip, int retries = 1, bool useSecureWs = true)
{
var instance = new LgTvApi(ip, new LgTvApiCore(), new ClientKeyStore(ip), useSecureWs);
var instance = new LgTvApi(ip, useSecureWs);
Logger.Debug($"Trying to connect with websocket uri: {instance.webSocketUri}");
return await instance.Connect(retries);
}
private LgTvApi(string ip, bool useSecureWs)
{
webSocketUri = useSecureWs ? $"wss://{ip}:3001" : $"ws://{ip}:3000";
_ip = ip;
_connection = new LgTvApiCore();
_keyStore = new ClientKeyStore(ip);
}
private async Task<LgTvApi> Connect(int retries)
{
Logger.Debug($"Trying to connect with websocket uri: {webSocketUri}");
while (retries > 0)
{
var connected = await instance.Connect();
var connected = await Connect();
if (connected)
{
await instance.MakeHandShake();
return instance;
await MakeHandShake();
return this;
}
retries--;
await Task.Delay(500);
}
instance.Dispose();
return null;
}
private LgTvApi(string ip, LgTvApiCore connection, ClientKeyStore keyStore, bool useSecureWs)
{
webSocketUri = useSecureWs ? $"wss://{ip}:3001" : $"ws://{ip}:3000";
_ip = ip;
_connection = connection;
_keyStore = keyStore;
Dispose();
return null;
}
public string GetIpAddress()
+3
View File
@@ -38,8 +38,11 @@ namespace LgTv
{
try
{
_connection?.Dispose();
ConnectionClosed = false;
_commandCount = 0;
_connection = new MessageWebSocket();
_connection.Control.IgnorableServerCertificateErrors.Add(ChainValidationResult.Untrusted);
_connection.Control.IgnorableServerCertificateErrors.Add(ChainValidationResult.InvalidName);
+1 -1
View File
@@ -2,7 +2,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0-windows10.0.20348.0</TargetFramework>
<Version>0.8.1.102</Version>
<Version>0.8.1.103</Version>
<Company>falahati.net</Company>
<Description>NvAPIWrapper is a .Net wrapper for NVIDIA public API</Description>
<Authors>Soroush Falahati</Authors>