diff --git a/RGB.NET.Core/Update/Devices/DeviceUpdateTrigger.cs b/RGB.NET.Core/Update/Devices/DeviceUpdateTrigger.cs
index 03410fb..04cfb92 100644
--- a/RGB.NET.Core/Update/Devices/DeviceUpdateTrigger.cs
+++ b/RGB.NET.Core/Update/Devices/DeviceUpdateTrigger.cs
@@ -53,12 +53,12 @@ namespace RGB.NET.Core
}
}
- private AutoResetEvent _hasDataEvent = new AutoResetEvent(false);
+ protected AutoResetEvent HasDataEvent = new AutoResetEvent(false);
- private bool _isRunning;
- private Task _updateTask;
- private CancellationTokenSource _updateTokenSource;
- private CancellationToken _updateToken;
+ protected bool IsRunning;
+ protected Task UpdateTask;
+ protected CancellationTokenSource UpdateTokenSource;
+ protected CancellationToken UpdateToken;
#endregion
@@ -88,13 +88,13 @@ namespace RGB.NET.Core
///
public void Start()
{
- if (_isRunning) return;
+ if (IsRunning) return;
- _isRunning = true;
+ IsRunning = true;
- _updateTokenSource?.Dispose();
- _updateTokenSource = new CancellationTokenSource();
- _updateTask = Task.Factory.StartNew(UpdateLoop, (_updateToken = _updateTokenSource.Token), TaskCreationOptions.LongRunning, TaskScheduler.Default);
+ UpdateTokenSource?.Dispose();
+ UpdateTokenSource = new CancellationTokenSource();
+ UpdateTask = Task.Factory.StartNew(UpdateLoop, (UpdateToken = UpdateTokenSource.Token), TaskCreationOptions.LongRunning, TaskScheduler.Default);
}
///
@@ -102,22 +102,22 @@ namespace RGB.NET.Core
///
public async void Stop()
{
- if (!_isRunning) return;
+ if (!IsRunning) return;
- _isRunning = false;
+ IsRunning = false;
- _updateTokenSource.Cancel();
- await _updateTask;
- _updateTask.Dispose();
- _updateTask = null;
+ UpdateTokenSource.Cancel();
+ await UpdateTask;
+ UpdateTask.Dispose();
+ UpdateTask = null;
}
- private void UpdateLoop()
+ protected virtual void UpdateLoop()
{
OnStartup();
- while (!_updateToken.IsCancellationRequested)
+ while (!UpdateToken.IsCancellationRequested)
{
- if (_hasDataEvent.WaitOne(Timeout))
+ if (HasDataEvent.WaitOne(Timeout))
{
long preUpdateTicks = Stopwatch.GetTimestamp();
@@ -135,7 +135,7 @@ namespace RGB.NET.Core
}
///
- public void TriggerHasData() => _hasDataEvent.Set();
+ public void TriggerHasData() => HasDataEvent.Set();
private void UpdateUpdateFrequency()
{
diff --git a/RGB.NET.Devices.SteelSeries/Generic/SteelSeriesDeviceUpdateTrigger.cs b/RGB.NET.Devices.SteelSeries/Generic/SteelSeriesDeviceUpdateTrigger.cs
index 2d5ac46..88c04ac 100644
--- a/RGB.NET.Devices.SteelSeries/Generic/SteelSeriesDeviceUpdateTrigger.cs
+++ b/RGB.NET.Devices.SteelSeries/Generic/SteelSeriesDeviceUpdateTrigger.cs
@@ -3,71 +3,24 @@
using System;
using System.Diagnostics;
using System.Threading;
-using System.Threading.Tasks;
using RGB.NET.Core;
namespace RGB.NET.Devices.SteelSeries
{
///
- /// Represents an update-trigger used to update devices with a maximum update-rate.
+ /// Represents an update-trigger used to update SteelSeries devices
///
- public class SteelSeriesDeviceUpdateTrigger : AbstractUpdateTrigger, IDeviceUpdateTrigger
+ public class SteelSeriesDeviceUpdateTrigger : DeviceUpdateTrigger
{
#region Constants
- private const long FLUSH_TIMER = 5 * 1000 * TimeSpan.TicksPerMillisecond; // every 5 seconds flush the device to prevent timeouts
+ private const long FLUSH_TIMER = 5 * 1000 * TimeSpan.TicksPerMillisecond; // flush the device every 5 seconds to prevent timeouts
#endregion
#region Properties & Fields
- ///
- /// Gets or sets the timeout used by the blocking wait for data availability.
- ///
- public int Timeout { get; set; } = 100;
-
- ///
- /// Gets the update frequency used by the trigger if not limited by data shortage.
- ///
- public double UpdateFrequency { get; private set; }
-
- private double _maxUpdateRate;
- ///
- /// Gets or sets the maximum update rate of this trigger (is overwriten if the is smaller).
- /// <= 0 removes the limit.
- ///
- public double MaxUpdateRate
- {
- get => _maxUpdateRate;
- set
- {
- _maxUpdateRate = value;
- UpdateUpdateFrequency();
- }
- }
-
- private double _updateRateHardLimit;
- ///
- /// Gets the hard limit of the update rate of this trigger. Updates will never perform faster then then this value if it's set.
- /// <= 0 removes the limit.
- ///
- public double UpdateRateHardLimit
- {
- get => _updateRateHardLimit;
- protected set
- {
- _updateRateHardLimit = value;
- UpdateUpdateFrequency();
- }
- }
-
- private AutoResetEvent _hasDataEvent = new AutoResetEvent(false);
-
private long _lastUpdateTimestamp;
- private bool _isRunning;
- private Task _updateTask;
- private CancellationTokenSource _updateTokenSource;
- private CancellationToken _updateToken;
#endregion
@@ -76,6 +29,7 @@ namespace RGB.NET.Devices.SteelSeries
///
/// Initializes a new instance of the class.
///
+ /// The hard limit of the update rate of this trigger.
public SteelSeriesDeviceUpdateTrigger()
{ }
@@ -84,49 +38,19 @@ namespace RGB.NET.Devices.SteelSeries
///
/// The hard limit of the update rate of this trigger.
public SteelSeriesDeviceUpdateTrigger(double updateRateHardLimit)
- {
- this.UpdateRateHardLimit = updateRateHardLimit;
- }
+ : base(updateRateHardLimit)
+ { }
#endregion
#region Methods
- ///
- /// Starts the trigger.
- ///
- public void Start()
- {
- if (_isRunning) return;
-
- _isRunning = true;
-
- _updateTokenSource?.Dispose();
- _updateTokenSource = new CancellationTokenSource();
- _updateTask = Task.Factory.StartNew(UpdateLoop, (_updateToken = _updateTokenSource.Token), TaskCreationOptions.LongRunning, TaskScheduler.Default);
- }
-
- ///
- /// Stops the trigger.
- ///
- public async void Stop()
- {
- if (!_isRunning) return;
-
- _isRunning = false;
-
- _updateTokenSource.Cancel();
- await _updateTask;
- _updateTask.Dispose();
- _updateTask = null;
- }
-
- private void UpdateLoop()
+ protected override void UpdateLoop()
{
OnStartup();
- while (!_updateToken.IsCancellationRequested)
+ while (!UpdateToken.IsCancellationRequested)
{
- if (_hasDataEvent.WaitOne(Timeout))
+ if (HasDataEvent.WaitOne(Timeout))
{
long preUpdateTicks = Stopwatch.GetTimestamp();
@@ -146,16 +70,6 @@ namespace RGB.NET.Devices.SteelSeries
}
}
- ///
- public void TriggerHasData() => _hasDataEvent.Set();
-
- private void UpdateUpdateFrequency()
- {
- UpdateFrequency = MaxUpdateRate;
- if ((UpdateFrequency <= 0) || ((UpdateRateHardLimit > 0) && (UpdateRateHardLimit < UpdateFrequency)))
- UpdateFrequency = UpdateRateHardLimit;
- }
-
#endregion
}
}