1
0
mirror of https://github.com/DarthAffe/RGB.NET.git synced 2025-12-12 17:48:31 +00:00

Addded heartbeats to dmx devices

This commit is contained in:
Darth Affe 2022-11-05 21:07:11 +01:00
parent c6cfe35124
commit 15c056f11b
3 changed files with 26 additions and 2 deletions

View File

@ -57,14 +57,15 @@ public class DMXDeviceProvider : AbstractRGBDeviceProvider
/// <inheritdoc />
protected override IEnumerable<IRGBDevice> LoadDevices()
{
foreach (IDMXDeviceDefinition dmxDeviceDefinition in DeviceDefinitions)
for (int i = 0; i < DeviceDefinitions.Count; i++)
{
IDMXDeviceDefinition dmxDeviceDefinition = DeviceDefinitions[i];
IRGBDevice? device = null;
try
{
if (dmxDeviceDefinition is E131DMXDeviceDefinition e131DMXDeviceDefinition)
if (e131DMXDeviceDefinition.Leds.Count > 0)
device = new E131Device(new E131DeviceInfo(e131DMXDeviceDefinition), e131DMXDeviceDefinition.Leds, GetUpdateTrigger(0));
device = new E131Device(new E131DeviceInfo(e131DMXDeviceDefinition), e131DMXDeviceDefinition.Leds, GetUpdateTrigger(i));
}
catch (Exception ex)
{
@ -76,5 +77,14 @@ public class DMXDeviceProvider : AbstractRGBDeviceProvider
}
}
protected override IDeviceUpdateTrigger CreateUpdateTrigger(int id, double updateRateHardLimit)
{
DeviceUpdateTrigger updateTrigger = new(updateRateHardLimit);
if ((DeviceDefinitions[id] is E131DMXDeviceDefinition e131DMXDeviceDefinition))
updateTrigger.HeartbeatTimer = e131DMXDeviceDefinition.HeartbeatTimer;
return updateTrigger;
}
#endregion
}

View File

@ -57,6 +57,12 @@ public class E131DMXDeviceDefinition : IDMXDeviceDefinition
/// </summary>
public Dictionary<LedId, List<(int channel, Func<Color, byte> getValueFunc)>> Leds { get; } = new();
/// <summary>
/// The time in ms after which the device is updated even if no changes are made in the meantime to prevent the target from timing out or similar problems.
/// To disable heartbeats leave it at 0.
/// </summary>
public int HeartbeatTimer { get; set; } = 0;
#endregion
#region Constructors

View File

@ -50,6 +50,14 @@ public class E131UpdateQueue : UpdateQueue
#region Methods
protected override void OnUpdate(object? sender, CustomUpdateData customData)
{
if (customData[CustomUpdateDataIndex.HEARTBEAT] as bool? == true)
Update(Array.Empty<(object key, Color color)>());
else
base.OnUpdate(sender, customData);
}
/// <inheritdoc />
protected override void Update(in ReadOnlySpan<(object key, Color color)> dataSet)
{