Files

157 lines
7.8 KiB
Markdown
Raw Permalink Normal View History

2026-04-17 14:55:32 -04:00
---
source_files:
- Common/DTS.Common/Interface/DASFactory/ARM/IArmStatus.cs
- Common/DTS.Common/Interface/DASFactory/ARM/IArmStatusData.cs
generated_at: "2026-04-16T03:11:25.846617+00:00"
model: "Qwen/Qwen3-Coder-Next-FP8"
schema_version: 1
sha256: "5782109e320aeb67"
---
# ARM
## Documentation: `IArmStatus` and `IArmStatusData` Interfaces
### 1. Purpose
This module defines the contract for tracking and managing the operational state of a DAS (Data Acquisition System) unit within the DASFactory ARM (Armed) subsystem. It provides a standardized interface (`IArmStatus`) to query and update high-level DAS states (e.g., *Arm*, *Realtime*, *Streaming*) and exposes detailed status metadata via the `IArmStatusData` interface. The interfaces decouple state management from hardware-specific implementations, enabling consistent state tracking without direct hardware polling—critical for coordinating test sequencing, diagnostics, and database persistence in the DAS factory workflow.
---
### 2. Public Interface
#### `IArmStatus` Interface
- **`void SetInArm(bool WriteToDb)`**
Marks the unit as being in *Arm* state. If `WriteToDb` is `true`, persists the state to the database.
- **`void SetInRealtime(bool WriteToDb, bool ExitRealtimeIfPossible)`**
Marks the unit as being in *Realtime* mode. If `WriteToDb` is `true`, persists the state. If `ExitRealtimeIfPossible` is `true`, allows exiting *Realtime* if conditions permit (e.g., if already in a conflicting state).
- **`bool GetIsInArm()`**
Returns `true` if the unit is *known* to be in *Arm* state (based on internal flags only—no hardware query).
- **`bool GetIsInRealtime()`**
Returns `true` if the unit is *known* to be in *Realtime* state (based on internal flags only—no hardware query).
- **`bool GetIsStreaming()`**
Returns `true` if the unit is *known* to be *streaming* (based on internal flags only—no hardware query).
- **`IArmStatusData DASArmStatus { get; set; }`**
Gets or sets the detailed status object (`IArmStatusData`) for the DAS unit.
- **`void SetDASArmStatus(IArmStatusData status, bool bSetInDb)`**
Sets the `DASArmStatus` property to `status`. If `bSetInDb` is `true`, persists the new status to the database.
- **`void SetDASArmStatus()`**
Persists the *current* `DASArmStatus` value to the database (if connected). Does *not* modify the in-memory status object.
#### `IArmStatusData` Interface
- **`bool ReceivedInvalidModeDuringSetup { get; set; }`**
Indicates if the unit received an `InvalidMode` error during initial setup (used as a proxy for *streaming* detection in some contexts).
- **`void ClearTriggerCheckStatus()`**
Clears flags related to trigger-check diagnostics (e.g., `IsTriggerShorted`, `IsStartShorted`).
- **`bool IsArmed { get; set; }`**
Indicates if the DAS is currently armed.
- **`bool IsTriggered { get; set; }`**
Indicates if the DAS has sensed a trigger event.
- **`bool IsTriggerShorted { get; set; }`**
Indicates if the trigger was shorted *during a trigger-check procedure* (distinct from `IsTriggered`).
- **`bool IsStartShorted { get; set; }`**
Indicates if the start signal was shorted *during a trigger-check procedure*.
- **`bool IsRecording { get; set; }`**
Indicates if the DAS is currently recording sample data.
- **`bool IsFaulted { get; set; }`**
Indicates if the DAS has faulted.
- **`bool IsInRealtime { get; set; }`**
Indicates if the DAS is in real-time mode.
- **`bool IsInFlashWrite { get; set; }`**
Indicates if the DAS is in flash-write mode (G5-specific).
- **`bool IsUndefined { get; set; }`**
Used when `TDAS ARM STAT READ` returns no data (fallback state).
- **`bool IsInPostTestDiagnostics { get; set; }`**
Indicates if the DAS is running post-test diagnostics.
- **`double TimeRemainingSeconds { get; set; }`**
Estimated seconds remaining in the current recording.
- **`double PercentComplete { get; set; }`**
Completion percentage for flash-write operations.
- **`ulong TotalSamples { get; set; }`**
Total number of samples to be recorded in the current test.
- **`ulong CurrentSample { get; set; }`**
Current sample index being recorded.
- **`uint SampleRate { get; set; }`**
Current sample rate (samples per second).
- **`double? InputMilliVolts { get; set; }`**
Current input voltage (in millivolts), or `null` if unavailable.
- **`double? BatteryMilliVolts { get; set; }`**
Current battery voltage (in millivolts), or `null` if no battery is present.
- **`int? EventNumber { get; set; }`**
Current event number being recorded, or `null` if not applicable.
- **`ushort? MaxEventsPossible { get; set; }`**
Maximum number of events supported by the device (per issue FB 26817).
- **`int RecordingMode { get; set; }`**
Numeric recording mode identifier (e.g., 0 = normal, 1 = burst).
- **`string FaultMessage { get; set; }`**
Human-readable fault description (e.g., "Overvoltage on input channel 3").
- **`bool IsRearming { get; set; }`**
Indicates if the DAS is in the rearming phase after a test.
- **`bool HasBeenRecording { get; set; }`**
Indicates if the DAS has ever recorded in the current session.
- **`double? TimeLeftInArm { get; set; }`**
Estimated time remaining in the *Arm* state (in seconds), or `null` if unknown.
---
### 3. Invariants
- **State Flags Are Software-Only**: `GetIsInArm()`, `GetIsInRealtime()`, and `GetIsStreaming()` return *only* software-tracked flags—no hardware queries are performed.
- **`DASArmStatus` Is Mutable**: The `DASArmStatus` property is read-write; consumers may replace the entire `IArmStatusData` instance.
- **Database Persistence Is Optional**: Methods like `SetInArm`, `SetInRealtime`, and `SetDASArmStatus` accept a `bool` parameter to control database writes.
- **`IsTriggerShorted`/`IsStartShorted` Are Trigger-Check-Specific**: These flags are *only* set during trigger-check diagnostics and are cleared by `ClearTriggerCheckStatus()`.
- **`ReceivedInvalidModeDuringSetup` Is a Heuristic**: Used as a fallback to infer *streaming* status when direct state queries fail, but is not a primary state indicator.
---
### 4. Dependencies
- **Depends On**:
- None explicitly (pure interface definitions; no implementation or external library references in source).
- **Depended On By**:
- Likely consumed by DAS factory control logic (e.g., test sequencers, diagnostics tools) that need to monitor DAS state without hardware coupling.
- `IArmStatusData` is used as a data carrier for database persistence (via `SetDASArmStatus()`).
- Concrete implementations (not shown) would depend on hardware communication layers (e.g., ARM-specific drivers) to populate `IArmStatusData`.
---
### 5. Gotchas
- **`GetIsInRealtime()` vs. `IsInRealtime`**:
`GetIsInRealtime()` is a *state flag* (set by `SetInRealtime()`), while `IsInRealtime` in `IArmStatusData` is a *data field* that may be updated independently (e.g., by hardware polling). They are not guaranteed to be synchronized.
- **`IsTriggerShorted``IsTriggered`**:
Confusingly, `IsTriggerShorted` is *only* set during trigger-checks, whereas `IsTriggered` is set in many contexts (e.g., actual trigger events). Do not assume equivalence.
- **`ReceivedInvalidModeDuringSetup` Is Legacy Heuristic**:
Its use as a streaming indicator is explicitly noted as a workaround for incomplete state reporting (see XML comment). Avoid relying on it for new logic unless legacy compatibility is required.
- **`SetDASArmStatus()` Persists Current State**:
The parameterless overload persists the *current* `DASArmStatus` value but does *not* update it—consumers may mistakenly assume it refreshes or validates the data.
- **Nullable Value Semantics**:
Properties like `InputMilliVolts`, `EventNumber`, and `TimeLeftInArm` use `double?`/`int?`/`ushort?``null` indicates *unknown/unavailable*, not a default value (e.g., `0`).