Files
DP44/enriched-qwen3-coder-next/DataPRO/IService/StateMachine/StatusAndParameters.md
2026-04-17 14:55:32 -04:00

7.0 KiB
Raw Blame History

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
DataPRO/IService/StateMachine/StatusAndParameters/IStatusInfo.cs
DataPRO/IService/StateMachine/StatusAndParameters/IStatusParameters.cs
DataPRO/IService/StateMachine/StatusAndParameters/GlobalStatusParameters.cs
DataPRO/IService/StateMachine/StatusAndParameters/Status.cs
DataPRO/IService/StateMachine/StatusAndParameters/GlobalStatusInformation.cs
2026-04-16T04:00:12.173977+00:00 Qwen/Qwen3-Coder-Next-FP8 1 9b91ae827f1dd2a6

StatusAndParameters

Documentation: State Machine Status and Parameters Module


1. Purpose

This module defines the core data structures and interfaces for tracking and managing the runtime state and configuration parameters of a distributed acquisition system (DAS) within the state machine framework. It provides typed containers for status information (read-only or observation-oriented state, e.g., device presence in certain operational modes) and status parameters (configurable settings that influence behavior, e.g., multicast or auto-sense flags). The Status class aggregates all such state and parameter objects into a single, resettable snapshot used by the state machine to make decisions and coordinate subsystems.


2. Public Interface

Interfaces

  • IStatusInfo

    void Reset();
    

    Marker interface for status information types that support resetting to default state. No behavior beyond Reset() is defined here.

  • IStatusParameters

    void Reset();
    

    Marker interface for status parameter types that support resetting to default values. No behavior beyond Reset() is defined here.

Concrete Classes

  • GlobalStatusParameters (implements IStatusParameters)

    public bool AllowUDPMulticast { get; set; } = true;
    public bool DisableAutoSense { get; set; } = SensorConstants.DisableAutoSense;
    public void Reset();
    

    Holds global configuration flags. Reset() restores AllowUDPMulticast to true and DisableAutoSense to SensorConstants.DisableAutoSense.

  • Status (aggregate container)

    public HardwareDiscoveryParameters HardwareDiscoveryParams;
    public HardwareDiscoveryStatusInfo HardwareDiscoveryStatusInfo;
    public GlobalStatusInformation GlobalStatusInformation;
    public GlobalStatusParameters GlobalStatusParameters;
    public ConfigureStatusInformation ConfigureStatus;
    public ConfigureStatusParameters ConfigureParameters;
    public RealtimeStatusInformation RealtimeStatus;
    public RealtimeParameters RealtimeParams;
    public DiagnoseParameters DiagnoseParams;
    public DownloadParameters DownloadParams;
    public DownloadStatusInformation DownloadStatusInfo;
    public void Reset();
    

    Central state container. Reset() invokes Reset() on all contained sub-objects except DownloadStatusInfo and DownloadParams (note: these are omitted from Reset()).

    ⚠️ Observed omission: DownloadStatusInfo.Reset() and DownloadParams.Reset() are not called in Status.Reset(), despite both being declared as fields.

  • GlobalStatusInformation (implements IStatusInfo)

    public IDASCommunication[] GetUnitsInRealtime();
    public void AddUnitInRealtime(IDASCommunication device);
    public IDASCommunication[] GetUnitsInArm();
    public void AddUnitInArm(IDASCommunication device);
    public IDASCommunication[] GetUnitsAtLowPower();
    public void AddUnitAtLowPower(IDASCommunication das);
    public IDASCommunication[] GetUnitsAtHighPower();
    public void AddUnitAtHighPower(IDASCommunication das);
    public bool ExcitationOn { get; set; } = false;
    public void Reset();
    

    Tracks device presence and power/excitation state.

    • AddUnitInRealtime, AddUnitInArm, AddUnitAtLowPower, AddUnitAtHighPower are idempotent (no-op if device already present).
    • AddUnitAtLowPower removes device from _unitsAtHighPower if present.
    • AddUnitAtHighPower removes device from _unitsAtLowPower if present.
    • Reset() clears all device lists and sets ExcitationOn = false.

3. Invariants

  • Thread Safety: All list-modifying operations in GlobalStatusInformation are guarded by a private static lock (MyLock). Reads via Get*() methods are also lock-protected.
  • Mutual Exclusivity: A device cannot be simultaneously in _unitsAtLowPower and _unitsAtHighPower. Adding to one list removes it from the other.
  • Idempotency: AddUnit*() methods silently ignore duplicate additions (checked via Contains() before adding).
  • Reset Scope: Status.Reset() does not reset DownloadStatusInfo or DownloadParameters (per source code).
  • Default Values:
    • GlobalStatusParameters.AllowUDPMulticast defaults to true.
    • GlobalStatusParameters.DisableAutoSense defaults to SensorConstants.DisableAutoSense.
    • GlobalStatusInformation.ExcitationOn defaults to false.

4. Dependencies

Imports/References

  • DTS.Common.Enums.Sensors
    Used in GlobalStatusParameters to initialize DisableAutoSense via SensorConstants.DisableAutoSense.
  • DTS.Common.Interface.DASFactory
    Used in GlobalStatusInformation for the IDASCommunication interface (device abstraction).

Consumed By

  • The state machine logic (implied by namespace DTS.DASLib.Service.StateMachine).
  • Any component needing to inspect or update device status (e.g., Status instance likely passed to state handlers).

Consumed By (Inferred)

  • GlobalStatusInformations IDASCommunication usage implies integration with a device communication layer (e.g., factory-created units implementing IDASCommunication).

5. Gotchas

  • Incomplete Reset: Status.Reset() omits DownloadStatusInfo and DownloadParameters. This is likely unintentional (both have Reset() methods per naming convention), and may cause stale download state to persist across resets.
  • No Removal Methods: GlobalStatusInformation lacks explicit RemoveUnit*() methods. Devices are only removed via Reset() or implicitly via AddUnitAtLowPower/AddUnitAtHighPower (which remove from the opposite power list). There is no way to remove a device from Realtime or Arm lists except via Reset().
  • Static Lock Scope: The MyLock object is static, meaning all instances of GlobalStatusInformation share the same lock. This could cause contention if multiple GlobalStatusInformation instances are used concurrently (though only one is used via Status.GlobalStatusInformation).
  • No Validation in Add*(): Methods like AddUnitInRealtime do not validate device state consistency (e.g., allowing a device to be added to both Realtime and Arm simultaneously is permitted).
  • DisableAutoSense Initialization: Default value depends on SensorConstants.DisableAutoSense, whose value is not visible here. Its semantics (e.g., true = disable auto-sense?) must be verified in DTS.Common.Enums.Sensors.

None identified beyond those above.