Files
DP44/DataPRO/IService/StateMachine/StatusAndParameters/GlobalStatusInformation.cs
2026-04-17 14:55:32 -04:00

143 lines
4.7 KiB
C#

using DTS.Common.Interface.DASFactory;
using System.Collections.Generic;
namespace DTS.DASLib.Service.StateMachine
{
public class GlobalStatusInformation : IStatusInfo
{
private static readonly object MyLock = new object();
private List<IDASCommunication> _unitsInRealtime = new List<IDASCommunication>();
/// <summary>
/// returns an array of all devices that are known to be in realtime
/// </summary>
/// <returns></returns>
public IDASCommunication[] GetUnitsInRealtime()
{
lock (MyLock)
{
return _unitsInRealtime.ToArray();
}
}
/// <summary>
/// adds a device to the list of units known to be in realtime
/// </summary>
/// <param name="device"></param>
public void AddUnitInRealtime(IDASCommunication device)
{
lock (MyLock)
{
if (_unitsInRealtime.Contains(device)) { return; }
_unitsInRealtime.Add(device);
}
}
private List<IDASCommunication> _unitsInArm = new List<IDASCommunication>();
/// <summary>
/// returns an array of units known to be in arm
/// </summary>
/// <returns></returns>
public IDASCommunication[] GetUnitsInArm()
{
lock (MyLock)
{
return _unitsInArm.ToArray();
}
}
/// <summary>
/// adds a device to the list of devices known to be in arm
/// </summary>
/// <param name="device"></param>
public void AddUnitInArm(IDASCommunication device)
{
lock (MyLock)
{
if (_unitsInArm.Contains(device))
{
return;
}
_unitsInArm.Add(device);
}
}
private List<IDASCommunication> _unitsAtLowPower = new List<IDASCommunication>();
/// <summary>
/// returns an array of all known devices that are at low power
/// </summary>
/// <returns></returns>
public IDASCommunication[] GetUnitsAtLowPower()
{
lock (MyLock)
{
return _unitsAtLowPower.ToArray();
}
}
/// <summary>
/// adds a unit to the list of units currently at low power
/// removes from high power list if present in it
/// </summary>
/// <param name="das"></param>
public void AddUnitAtLowPower(IDASCommunication das)
{
lock (MyLock)
{
if (_unitsAtLowPower.Contains(das)) { return; }
_unitsAtLowPower.Add(das);
if (!_unitsAtHighPower.Contains(das)) { return; }
_unitsAtHighPower.Remove(das);
}
}
private List<IDASCommunication> _unitsAtHighPower = new List<IDASCommunication>();
/// <summary>
/// returns an array of all units that are known to be at high power
/// </summary>
/// <returns></returns>
public IDASCommunication[] GetUnitsAtHighPower()
{
lock (MyLock)
{
return _unitsAtHighPower.ToArray();
}
}
/// <summary>
/// adds unit to the list of devices known to be at high power
/// removes from the low power list if present
/// </summary>
/// <param name="das"></param>
public void AddUnitAtHighPower(IDASCommunication das)
{
lock (MyLock)
{
if (_unitsAtHighPower.Contains(das)) { return; }
_unitsAtHighPower.Add(das);
if (!_unitsAtLowPower.Contains(das)) { return; }
_unitsAtLowPower.Remove(das);
}
}
/// <summary>
/// whether excitation is on or off, currently this is just
/// controlled by Configure->TurnOffExcitation and Configure->PrepareForDiagnostics
/// the status is only changed currently if all units successfully switch to low power or vice versa
/// </summary>
public bool ExcitationOn { get; set; } = false;
/// <summary>
/// resets all status back to defaults
/// </summary>
public void Reset()
{
ExcitationOn = false;
lock (MyLock)
{
_unitsAtHighPower.Clear();
_unitsAtLowPower.Clear();
_unitsInRealtime.Clear();
_unitsInArm.Clear();
}
}
}
}