Files
DP44/enriched-qwen3-coder-next/DataPRO/Modules/DatabaseImporter/DatabaseImport/Classes/Hardware.md

177 lines
10 KiB
Markdown
Raw Normal View History

2026-04-17 14:55:32 -04:00
---
source_files:
- DataPRO/Modules/DatabaseImporter/DatabaseImport/Classes/Hardware/DASSettings.cs
- DataPRO/Modules/DatabaseImporter/DatabaseImport/Classes/Hardware/HardwareChannel.cs
- DataPRO/Modules/DatabaseImporter/DatabaseImport/Classes/Hardware/DASHardwareList.cs
- DataPRO/Modules/DatabaseImporter/DatabaseImport/Classes/Hardware/DASHardware.cs
generated_at: "2026-04-16T04:31:49.040833+00:00"
model: "Qwen/Qwen3-Coder-Next-FP8"
schema_version: 1
sha256: "d546885c144cb09e"
---
# Hardware
## Documentation: DAS Hardware Module (`DatabaseImport.Classes.Hardware`)
---
### 1. Purpose
This module provides data structures and utilities for representing and managing Data Acquisition System (DAS) hardware configurations within the `DatabaseImporter` module. It encapsulates hardware metadata (e.g., serial number, type, channels, settings) and supports persistence into the database (specifically `tblTestSetupDASSettings` for `DASSettings`). It serves as a bridge between raw database records (via `ISO.Hardware` and `ISO.HardwareChannel`) and higher-level application logic, enabling consistent handling of DAS hardware during test import and processing.
---
### 2. Public Interface
#### `DASSettings`
- **`public string DASSerialNumber { get; set; }`**
Serial number of the DAS device associated with these settings.
- **`public double SampleRate { get; set; }`**
Sample rate (in Hz) configured for the DAS.
- **`public int ExcitationWarmupTimeMS { get; set; }`**
Excitation warm-up time in milliseconds.
- **`public double HardwareAAF { get; set; }`**
Hardware anti-aliasing filter (AAF) cutoff frequency (in Hz).
- **`public double PreTriggerSeconds { get; set; }`**
Duration (in seconds) of pre-trigger buffer.
- **`public double PostTriggerSeconds { get; set; }`**
Duration (in seconds) of post-trigger buffer.
- **`public bool StatusLineCheck { get; set; }`**
Flag indicating whether status line checking is enabled.
- **`public bool BatteryCheck { get; set; }`**
Flag indicating whether battery voltage checking is enabled.
- **`public double InputVoltageMin { get; set; }`**
Minimum acceptable input voltage (V).
- **`public double InputVoltageMax { get; set; }`**
Maximum acceptable input voltage (V).
- **`public double BatteryVoltageMin { get; set; }`**
Minimum acceptable battery voltage (V).
- **`public double BatteryVoltageMax { get; set; }`**
Maximum acceptable battery voltage (V).
> **Note**: This class is intended for serialization into `tblTestSetupDASSettings`. No custom logic or validation is present in the class itself.
---
#### `HardwareChannel`
- **`public HardwareChannel(HardwareChannel copy)`**
Copy constructor. Copies `ChannelNumber`, `Sensor`, `_testObjectChannel`, `Hardware`, and `_isoChannel` from `copy`.
- **`public HardwareChannel(ISO.HardwareChannel channel, DASHardware hardware)`**
Constructor initializing from an `ISO.HardwareChannel` and its parent `DASHardware`.
- **`public int CompareTo(HardwareChannel right)`**
Compares two `HardwareChannel` instances first by `DASDisplayOrder`, then by `ChannelIdx` (0-based index). Returns `0` if either operand is `null` or reference-equal.
- **`public string GetId()`**
Returns a unique identifier string in the format `{HardwareId}x{ChannelNumber+1}` (1-based channel index).
- **`public bool IsSupportedBridgeType(Test.Module.Channel.Sensor.BridgeType bridgeType)`**
Returns `true` if the underlying `ISO.HardwareChannel.SupportedBridges` bitmask includes the specified `bridgeType`.
- **`public int ChannelNumber { get; }`**
0-based channel index (`ISO.HardwareChannel.ChannelIdx`).
- **`public DASHardware Hardware { get; }`**
Parent `DASHardware` instance.
- **`public SensorData Sensor { get; set; }`**
Optional sensor configuration associated with this channel.
- **`public ISO.HardwareChannel GetISOChannel()`**
Returns the underlying `ISO.HardwareChannel` instance.
---
#### `DASHardware`
- **`public DASHardware(Hardware hardware)`**
Constructor initializing from a `Hardware` instance. Populates `Channels` by wrapping each `ISO.HardwareChannel` in a `HardwareChannel`.
- **`public DASHardware(DASHardware copy, DASHardware parentDAS)`**
Constructor for creating a child DAS from a `copy`, with `parentDAS` as its logical parent. Copies `Channels` (deep copy via `HardwareChannel` copy constructor) and `DbTimeStamp`.
- **`public bool IsPseudoRack()`**
Returns `true` if the hardware type is `SLICE_LabEthernet`, `SLICE_EthernetController`, or `SLICE6DB`, indicating it should be UI-rendered as a rack despite not physically being one.
- **`public bool IsDummy()`**
Returns `true` if `SerialNumber` contains the substring `"Dummy"`.
- **`public int CompareTo(DASHardware right)`**
Implements ordering logic:
- `null``1`
- Same reference or `SerialNumber` match → `0`
- Parent/child relationship → child sorts after parent
- Same parent and `PositionOnDistributor` → sort by `PositionOnDistributor`
- Otherwise → lexicographic sort on `SerialNumber`.
- **`public string SerialNumber { get; set; }`**
Serial number of the DAS.
- **`public string ParentDAS { get; set; }`**
Serial number of the parent DAS (if any).
- **`public int PositionOnDistributor { get; set; }`**
Position index on a distributor rack (used for ordering).
- **`public HardwareChannel[] Channels { get; set; }`**
Array of channels. Setter sorts the list using `HardwareChannel.CompareTo()` before assignment.
- **`public int GetHardwareTypeInt()`**
Returns the raw integer type (`_hardware.DASType`).
- **`public HardwareTypes GetHardwareTypeEnum()`**
Casts `GetHardwareTypeInt()` to `HardwareTypes` enum.
- **`public long GetMaxMemoryLong()`**
Returns `_hardware.MaxMemory`.
- **`public Hardware GetHardware()`**
Returns the underlying `Hardware` instance.
---
#### `DASHardwareList`
- **`public static DASHardwareList GetList()`**
Singleton accessor. Returns the cached instance if present; otherwise instantiates and caches a new one. (Note: `PopulateHardware()` is commented out in both constructor and `GetList()`.)
- **`public void ReloadAll()`**
Intended to reload hardware definitions, but current implementation is commented out.
- **`public DASHardware GetHardware(string id, bool bUseCache = true)`**
Convenience overload of the 4-parameter version with `bThrowExceptionIfChanged = true`, `changed = out bool` ignored.
- **`public DASHardware GetHardware(string id, bool bThrowExceptionIfChanged, out bool changed, bool bUseCache = true)`**
Retrieves a `DASHardware` by `id`. Uses `_cachedHardware` if available and `bUseCache` is `true`. Falls back to `Hardware.GetAllDAS(id, null)`. Returns `null` if not found.
**Note**: Legacy logic for detecting hardware type changes (including `HardwareTypeChangedException`) is commented out and not active.
- **`public class HardwareTypeChangedException : Exception`**
Placeholder exception type for hardware type mismatch, but **not used** in current implementation.
---
### 3. Invariants
- **`HardwareChannel.ChannelNumber`** is always non-negative and corresponds to `ISO.HardwareChannel.ChannelIdx`.
- **`HardwareChannel.GetId()`** produces a 1-based channel index (i.e., `ChannelNumber + 1`).
- **`DASHardware.Channels`** is always sorted by `HardwareChannel.CompareTo()` after assignment (via setter).
- **`DASHardware.CompareTo()`** enforces a partial order where:
- Parent DAS sorts before its children.
- Siblings under the same parent sort by `PositionOnDistributor`.
- Otherwise, lexicographic by `SerialNumber`.
- **`DASSettings`** is a pure data container with no runtime validation or normalization. Values are assumed valid per database schema.
---
### 4. Dependencies
#### Internal Dependencies
- **`ISO.Hardware`** and **`ISO.HardwareChannel`**
Core data models representing raw database records. Used in `HardwareChannel` and `DASHardware` constructors.
- **`SensorData`**
Referenced in `HardwareChannel.Sensor`. Must be defined elsewhere in the codebase.
- **`Test.Module.Channel.Sensor.BridgeType`**
Referenced in `HardwareChannel.IsSupportedBridgeType()`.
- **`HardwareTypes`**
Enum used in `DASHardware.GetHardwareTypeEnum()`. Must be defined externally.
- **`DbTimeStampBase`**
Base class for `DASHardware`. Provides timestamping functionality.
#### External Dependencies
- **`System`** (core .NET types)
- **`DatabaseImport.Hardware`** (static class)
Used in `DASHardwareList.GetHardware()` via `Hardware.GetAllDAS(id, null)`. Must be defined elsewhere.
#### Dependencies on This Module
- Likely consumed by higher-level modules handling test setup, import, or configuration (e.g., `DatabaseImporter` entry points, UI layers).
---
### 5. Gotchas
- **Singleton caching is non-functional**: `GetList()` instantiates `_list`, but `_list.PopulateHardware()` is commented out. Similarly, `ReloadAll()` and caching logic in `GetHardware()` are commented out. As written, `DASHardwareList` does not cache hardware data beyond the initial instantiation.
- **`HardwareTypeChangedException` is unused**: The exception class exists but is never thrown—legacy logic for detecting hardware type changes is disabled.
- **`CompareTo()` returns `0` for `null`**: In `HardwareChannel.CompareTo()`, passing `null` returns `0`, which violates the `IComparable<T>` contract (should throw `ArgumentException` or return non-zero). This may cause unexpected behavior in sorting or collections.
- **`GetHardware()` in `DASHardwareList` silently returns `null`**: No exception or warning is raised if hardware is not found or if type changes occur (legacy checks are commented out).
- **Channel ID is 1-based in string but 0-based internally**: `HardwareChannel.GetId()` uses `ChannelNumber + 1`, which may cause off-by-one confusion if `ChannelNumber` is assumed to be 1-based elsewhere.
- **No validation in `DASSettings`**: All properties are auto-implemented with no guards. Invalid values (e.g., negative sample rate) are permitted.
- **`DASHardware.IsDummy()` is substring-based**: Relies on `"Dummy"` appearing anywhere in `SerialNumber`, which may yield false positives (e.g., `"Dummy123"` vs `"MyDummyDAS"`).
- **`DASHardwareList.GetHardware()` does not handle duplicate IDs**: If `Hardware.GetAllDAS()` returns multiple records, only the first is used—no conflict resolution or logging.
> **None identified from source alone** for additional gotchas beyond those explicitly visible in the code.