--- 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`, `Data`) 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`** 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`** Abstract base class representing a list of channel data samples. Inherits from `ExceptionalList` (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 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 0–5). - `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` and `Data`**: - 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`). - Provides `ExceptionalList` (base class for `Data`). - `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` 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` and `Data` provide no implementation details beyond inheritance. Behavior (e.g., thread safety, sample ordering) must be inferred from concrete subclasses. - `Data` inherits from `ExceptionalList`, but no information about `ExceptionalList`’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.*