refactor: hardware services

This commit is contained in:
2026-02-12 08:34:19 +03:00
parent eaa20dbe75
commit 691129eff4
6 changed files with 126 additions and 116 deletions
+20 -31
View File
@@ -1,12 +1,15 @@
using System.Device.Gpio;
using System.Device.Pwm;
using Microsoft.Extensions.Logging;
using GSS2.Core.Abstractions;
namespace GSS2.Core.Hardware;
public class IlluminatorService : IDisposable
{
public class IlluminatorServiceConfiguration
public record IlluminatorServiceConfiguration : ServiceConfigurationBase
{
public static IlluminatorServiceConfiguration Default => new IlluminatorServiceConfiguration
{
@@ -76,38 +79,22 @@ public class IlluminatorService : IDisposable
{
_logger = logger;
_logger.LogInformation("Illuminator initialization");
if (configuration is null)
{
_logger.LogWarning("Illuminator configuration not set. Using default configuration.");
_configuration = IlluminatorServiceConfiguration.Default;
}
else
{
_configuration = configuration;
}
_logger.LogDebug(@$"Illuminator use following configuration:
WhitePwmPin: {_configuration.WhitePwmPin}
Uv254PwmPin: {_configuration.Uv254PwmPin}
Uv365PwmPin: {_configuration.Uv365PwmPin}
WhiteRelayPin: {_configuration.WhiteRelayPin}
Uv254RelayPin: {_configuration.Uv254RelayPin}
Uv365RelayPin: {_configuration.Uv365RelayPin}
FanPin: {_configuration.FanPin}
PwmFrequency: {_configuration.PwmFrequency}
MaxWhitePwmDuty: {_configuration.MaxWhitePwmDuty}
MaxUv254PwmDuty: {_configuration.MaxUv254PwmDuty}
MaxUv365PwmDuty: {_configuration.MaxUv365PwmDuty}
");
CheckPwmPin(_configuration.WhitePwmPin);
CheckPwmPin(_configuration.Uv254PwmPin);
CheckPwmPin(_configuration.Uv365PwmPin);
_logger.LogInformation("Initialization");
try
{
if (configuration is null)
{
configuration = IlluminatorServiceConfiguration.Default;
_logger.LogWarning("Configuration not set. Using default configuration.");
}
_configuration = configuration;
_logger.LogInformation("Using following configuration: \n{}", _configuration.ToString("\n", 4));
CheckPwmPin(_configuration.WhitePwmPin);
CheckPwmPin(_configuration.Uv254PwmPin);
CheckPwmPin(_configuration.Uv365PwmPin);
_gpio = new GpioController();
_whitePwm = PwmChannel.Create(PinPwmChips[_configuration.WhitePwmPin], PinPwmChannels[_configuration.WhitePwmPin], _configuration.PwmFrequency, CalculateDuty(0, _configuration.MaxWhitePwmDuty));
_uv254Pwm = PwmChannel.Create(PinPwmChips[_configuration.Uv254PwmPin], PinPwmChannels[_configuration.Uv254PwmPin], _configuration.PwmFrequency, CalculateDuty(0, _configuration.MaxUv254PwmDuty));
@@ -120,9 +107,11 @@ public class IlluminatorService : IDisposable
}
catch (Exception e)
{
_logger.LogCritical(e, "An exception occurred while illuminator initialization");
_logger.LogCritical(e, "An exception occurred while initialization");
throw;
}
_logger.LogInformation("Initialized");
}
public void SetIntensity(double? white = null, double? uv365 = null, double? uv254 = null)