This commit is contained in:
2026-04-17 14:55:32 -04:00
commit bc3ac1d4c9
18017 changed files with 4371742 additions and 0 deletions

View File

@@ -0,0 +1,115 @@
---
source_files:
- Common/DTS.Common.DAS.Concepts/DAS/Channel/LevelTriggerTypes.cs
- Common/DTS.Common.DAS.Concepts/DAS/Channel/Channel.cs
- Common/DTS.Common.DAS.Concepts/DAS/Channel/TimestampPartTypes.cs
- Common/DTS.Common.DAS.Concepts/DAS/Channel/Data.cs
generated_at: "2026-04-16T02:05:03.519331+00:00"
model: "Qwen/Qwen3-Coder-Next-FP8"
schema_version: 1
sha256: "0f3b00d01b342d9f"
---
# Channel
## Documentation: DAS Channel Concepts Module
---
### 1. Purpose
This module defines core conceptual types used to represent data acquisition system (DAS) channel behavior and data structures within the DTS Common library. It provides foundational enums (`LevelTriggerTypes`, `TimestampPartTypes`) for configuring trigger conditions and interpreting timestamp components, and abstract base classes (`Channel<TDataType>`, `Data<TDatumType>`) that serve as the basis for concrete channel and data implementations in the DAS subsystem. The module exists to standardize how channel-level logic (e.g., threshold triggers) and data containers are modeled internally, decoupling high-level application logic (e.g., slice control app) from hardware-specific implementations.
---
### 2. Public Interface
#### Enums
- **`LevelTriggerTypes`** (`[Flags]` enum)
Represents configurable trigger conditions for a channel. Values are bit flags:
- `NONE = 0x00`: No trigger condition.
- `OutsideWindow = 0x01`: Trigger when value is outside a specified window.
- `InsideWindow = 0x02`: Trigger when value is inside a specified window.
- `LessThan = 0x04`: Trigger when value is less than a threshold.
- `GreaterThan = 0x08`: Trigger when value is greater than a threshold.
*Note:* Combinations (e.g., `LessThan | GreaterThan`) are valid per `[Flags]` semantics, though semantic validity (e.g., `OutsideWindow` + `InsideWindow`) is not enforced here.
- **`TimestampPartTypes`** (`[Flags]` enum with `[Description]` attributes)
Represents components of a timestamp, typically used for parsing or reconstructing high-precision timestamps. Values are bit flags:
- `Marker = 1 << 0` (value `1`): A marker bit (description: `"Marker"`).
- `Seconds_High = 1 << 1` (value `2`): High-order bits of seconds (description: `"Seconds"`).
- `Seconds_Low = 1 << 2` (value `4`): Low-order bits of seconds (description: `"Seconds"`).
- `Nanoseconds_High = 1 << 3` (value `8`): High-order bits of nanoseconds (description: `"Nanoseconds"`).
- `Nanoseconds_Low = 1 << 4` (value `16`): Low-order bits of nanoseconds (description: `"Nanoseconds"`).
- `Reserved = 1 << 5` (value `32`): Reserved bit (description: `"Reserved"`).
*Note:* `Seconds_High` and `Seconds_Low` share the same description `"Seconds"`; similarly for nanosecond components.
#### Abstract Classes
- **`Channel<TDataType>`**
Abstract base class representing a DAS channel in the slice control app. Inherits from `Exceptional` (from `DTS.Common.Utilities`).
- *Generic parameter:* `TDataType` specifies the type of data the channel carries (e.g., `double`, `int`, custom struct).
- *Behavior:* No public methods or properties defined in this source; intended as a base for concrete channel implementations (e.g., `AnalogChannel`, `DigitalChannel`).
- **`Data<TDatumType>`**
Abstract base class representing a list of channel data samples. Inherits from `ExceptionalList<TDatumType>` (from `DTS.Common.Utilities`).
- *Generic parameter:* `TDatumType` specifies the type of individual data samples (e.g., `double`, `SampleRecord`).
- *Constructors:*
- `protected Data()`: Default constructor.
- `protected Data(int capacity)`: Constructor with initial list capacity.
- `protected Data(IEnumerable<TDatumType> collection)`: Constructor that copies elements from a collection.
- *Behavior:* Provides no additional functionality beyond its base list class; intended as a base for concrete data container implementations (e.g., `SampleData`, `EventList`).
---
### 3. Invariants
- **`LevelTriggerTypes`**:
- Values are strictly bit flags (`0x00`, `0x01`, `0x02`, `0x04`, `0x08`).
- Valid combinations must be powers-of-two or bitwise ORs thereof.
- No validation is performed on combinations (e.g., `OutsideWindow | InsideWindow` is syntactically valid but semantically ambiguous).
- **`TimestampPartTypes`**:
- Values are strictly bit flags with explicit bit positions (bits 05).
- `Seconds_High` and `Seconds_Low` are distinct flags despite sharing a description; similarly for `Nanoseconds_High`/`Low`.
- The `Reserved` flag is defined but its usage is unspecified.
- **`Channel<TDataType>` and `Data<TDatumType>`**:
- Both are abstract; direct instantiation is impossible.
- No invariants are enforced in the provided source (e.g., no validation of `TDatumType` constraints).
---
### 4. Dependencies
#### This module depends on:
- `DTS.Common.Utilities`:
- Provides `Exceptional` (base class for `Channel<TDataType>`).
- Provides `ExceptionalList<T>` (base class for `Data<TDatumType>`).
- `System`:
- Core types (`System.FlagsAttribute`, `System.ComponentModel.DescriptionAttribute`, `System.ComponentModel.TypeConverterAttribute`).
- `DTS.Common.Converters`:
- Provides `EnumDescriptionTypeConverter` for `TimestampPartTypes`.
#### This module is depended on by:
- **Inferred consumers**:
- Any code referencing `DTS.Common.DAS.Concepts.DAS.Channel` namespace (e.g., concrete channel implementations, trigger logic, timestamp parsers).
- The `slice control app` (explicitly mentioned in `Channel<TDataType>` summary) is a direct consumer.
- Serialization/deserialization logic likely uses `TimestampPartTypes` (given `TypeConverter` attribute).
---
### 5. Gotchas
- **`LevelTriggerTypes` combinations**:
- `OutsideWindow` and `InsideWindow` are mutually exclusive in practice but not enforced. Combining them (`OutsideWindow | InsideWindow = 0x03`) may lead to undefined behavior in downstream logic.
- `LessThan` and `GreaterThan` can be combined (e.g., for hysteresis), but this is not documented.
- **`TimestampPartTypes` descriptions**:
- `Seconds_High` and `Seconds_Low` share the same `[Description("Seconds")]`; UI/tooling relying solely on `DescriptionAttribute` may not distinguish them.
- `Reserved` flag is defined but its purpose is unspecified—avoid using it unless documented elsewhere.
- **Abstract base classes**:
- `Channel<TDataType>` and `Data<TDatumType>` provide no implementation details beyond inheritance. Behavior (e.g., thread safety, sample ordering) must be inferred from concrete subclasses.
- `Data<TDatumType>` inherits from `ExceptionalList<T>`, but no information about `ExceptionalList<T>`s behavior (e.g., exception handling semantics) is provided here.
- **No versioning or deprecation markers**:
- No attributes (e.g., `[Obsolete]`) or version comments indicate deprecated/legacy usage patterns.
*None identified from source alone.*