mirror of
https://github.com/DarthAffe/RGB.NET.git
synced 2025-12-13 10:08:31 +00:00
Changed SteelSeries devices to use the core heartbeat functionality
This commit is contained in:
parent
ca8bc67f03
commit
b12d0dc631
@ -14,7 +14,7 @@ internal class SteelSeriesDeviceUpdateQueue : UpdateQueue
|
|||||||
{
|
{
|
||||||
#region Properties & Fields
|
#region Properties & Fields
|
||||||
|
|
||||||
private string _deviceType;
|
private readonly string _deviceType;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ internal class SteelSeriesDeviceUpdateQueue : UpdateQueue
|
|||||||
|
|
||||||
protected override void OnUpdate(object? sender, CustomUpdateData customData)
|
protected override void OnUpdate(object? sender, CustomUpdateData customData)
|
||||||
{
|
{
|
||||||
if (customData["refresh"] as bool? ?? false)
|
if (customData[CustomUpdateDataIndex.HEARTBEAT] as bool? ?? false)
|
||||||
SteelSeriesSDK.SendHeartbeat();
|
SteelSeriesSDK.SendHeartbeat();
|
||||||
else
|
else
|
||||||
base.OnUpdate(sender, customData);
|
base.OnUpdate(sender, customData);
|
||||||
|
|||||||
@ -1,80 +0,0 @@
|
|||||||
// ReSharper disable MemberCanBePrivate.Global
|
|
||||||
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Threading;
|
|
||||||
using RGB.NET.Core;
|
|
||||||
|
|
||||||
namespace RGB.NET.Devices.SteelSeries;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Represents an update-trigger used to update SteelSeries devices
|
|
||||||
/// </summary>
|
|
||||||
public class SteelSeriesDeviceUpdateTrigger : DeviceUpdateTrigger
|
|
||||||
{
|
|
||||||
#region Constants
|
|
||||||
|
|
||||||
private static readonly long FLUSH_TIMER = 5 * 1000 * (long)(Stopwatch.Frequency / 1000.0); // flush the device every 5 seconds to prevent timeouts
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Properties & Fields
|
|
||||||
|
|
||||||
private long _lastUpdateTimestamp;
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Constructors
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="SteelSeriesDeviceUpdateTrigger"/> class.
|
|
||||||
/// </summary>
|
|
||||||
public SteelSeriesDeviceUpdateTrigger()
|
|
||||||
{ }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="SteelSeriesDeviceUpdateTrigger"/> class.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="updateRateHardLimit">The hard limit of the update rate of this trigger.</param>
|
|
||||||
public SteelSeriesDeviceUpdateTrigger(double updateRateHardLimit)
|
|
||||||
: base(updateRateHardLimit)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Methods
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
protected override void UpdateLoop()
|
|
||||||
{
|
|
||||||
OnStartup();
|
|
||||||
|
|
||||||
while (!UpdateToken.IsCancellationRequested)
|
|
||||||
{
|
|
||||||
if (HasDataEvent.WaitOne(Timeout))
|
|
||||||
{
|
|
||||||
long preUpdateTicks = Stopwatch.GetTimestamp();
|
|
||||||
|
|
||||||
OnUpdate();
|
|
||||||
|
|
||||||
if (UpdateFrequency > 0)
|
|
||||||
{
|
|
||||||
double lastUpdateTime = ((_lastUpdateTimestamp - preUpdateTicks) / (Stopwatch.Frequency / 1000.0));
|
|
||||||
int sleep = (int)((UpdateFrequency * 1000.0) - lastUpdateTime);
|
|
||||||
if (sleep > 0)
|
|
||||||
Thread.Sleep(sleep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ((_lastUpdateTimestamp > 0) && ((Stopwatch.GetTimestamp() - _lastUpdateTimestamp) > FLUSH_TIMER))
|
|
||||||
OnUpdate(new CustomUpdateData(("refresh", true)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
protected override void OnUpdate(CustomUpdateData? updateData = null)
|
|
||||||
{
|
|
||||||
base.OnUpdate(updateData);
|
|
||||||
_lastUpdateTimestamp = Stopwatch.GetTimestamp();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
@ -12,6 +12,12 @@ namespace RGB.NET.Devices.SteelSeries;
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class SteelSeriesDeviceProvider : AbstractRGBDeviceProvider
|
public class SteelSeriesDeviceProvider : AbstractRGBDeviceProvider
|
||||||
{
|
{
|
||||||
|
#region Constants
|
||||||
|
|
||||||
|
private static readonly int HEARTBEAT_TIMER = 5000; // flush the device every 5 seconds to prevent timeouts
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Properties & Fields
|
#region Properties & Fields
|
||||||
|
|
||||||
private static SteelSeriesDeviceProvider? _instance;
|
private static SteelSeriesDeviceProvider? _instance;
|
||||||
@ -121,7 +127,7 @@ public class SteelSeriesDeviceProvider : AbstractRGBDeviceProvider
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override IDeviceUpdateTrigger CreateUpdateTrigger(int id, double updateRateHardLimit) => new SteelSeriesDeviceUpdateTrigger(updateRateHardLimit);
|
protected override IDeviceUpdateTrigger CreateUpdateTrigger(int id, double updateRateHardLimit) => new DeviceUpdateTrigger(updateRateHardLimit) { HeartbeatTimer = HEARTBEAT_TIMER };
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override void Dispose()
|
public override void Dispose()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user