--- source_files: - Common/DTS.Common.DataModel/Classes/Hardware/DASSettings.cs - Common/DTS.Common.DataModel/Classes/Hardware/DASHardwareList.cs - Common/DTS.Common.DataModel/Classes/Hardware/BatteryAndInputVoltageDefaults.cs generated_at: "2026-04-17T15:37:11.649380+00:00" model: "zai-org/GLM-5-FP8" schema_version: 1 sha256: "c98b9bdc3b18b6bf" --- # Hardware Data Model Documentation ## Purpose This module provides the data model layer for Data Acquisition System (DAS) hardware management within the DTS system. It encompasses three distinct concerns: `DASSettings` captures test-specific DAS configuration parameters (sample rates, trigger timing, voltage thresholds) for serialization into `tblTestSetupDASSettings`; `DASHardwareList` serves as a singleton registry for DAS hardware instances with caching and database persistence operations; and `DasBatteryInputSettings`/`InputAndBatterySettings` manage hardware-type-specific battery and input voltage threshold defaults with serialization support. --- ## Public Interface ### DASSettings (DataPROWin7.DataModel) **Constructors:** - `DASSettings()` — Default parameterless constructor. - `DASSettings(DASSettings setting)` — Copy constructor that clones all property values from another instance. **Properties:** | Property | Type | Description | |----------|------|-------------| | `DASSerialNumber` | `string` | Serial number identifier for the DAS unit. | | `SampleRate` | `double` | Data acquisition sample rate. | | `ExcitationWarmupTimeMS` | `int` | Excitation warmup time in milliseconds. | | `HardwareAAF` | `double` | Hardware Anti-Aliasing Filter setting. | | `PreTriggerSeconds` | `double` | Pre-trigger duration in seconds. | | `PostTriggerSeconds` | `double` | Post-trigger duration in seconds. | | `StatusLineCheck` | `bool` | Flag indicating whether status line checking is enabled. | | `BatteryCheck` | `bool` | Flag indicating whether battery checking is enabled. | | `InputVoltageMin` | `double` | Minimum input voltage threshold. | | `InputVoltageMax` | `double` | Maximum input voltage threshold. | | `BatteryVoltageMin` | `double` | Minimum battery voltage threshold. | | `BatteryVoltageMax` | `double` | Maximum battery voltage threshold. | --- ### DASHardwareList (DataPROWin7.DataModel.Classes.Hardware) **Static Properties:** - `Cache` (`bool`) — Enables/disables cached data mode. Setting to `false` clears `_cachedDASHardware`. **Static Methods:** - `DASHardwareList GetList()` — Returns the singleton instance, creating it if necessary. - `DASHardware[] GetAllHardware()` — Retrieves all DAS hardware, using cache if `Cache` is `true`. - `List GetEmbeddedModules(IDASHardware[] hardware, int id)` — Returns module IDs for embedded hardware matching the given DAS ID. - `Dictionary GetEmbeddedModuleInfo(DASHardware[] hardware, int id)` — Returns a dictionary of serial number to max sample rate for embedded modules. - `void UnassociateParentDAS(string distributorSerialNumber)` — Calls stored procedure `sp_DASChildrenUnAssociate` to unassociate child DAS units from a parent. **Instance Methods:** - `void ReloadAll()` — Intended to repopulate hardware (currently commented out). - `void SetCache(ICachedContainer container)` — Sets an `ICachedContainer` for hardware caching. - `void ClearCache()` — Clears the `_cachedHardware` reference. - `string GetDASSerialNumberFromId(int id)` — Queries database for serial number by DAS ID using `DbOperations.DASGet`. - `DASHardware GetHardware(int id)` — Retrieves hardware by integer ID. - `DASHardware GetHardware(string id, bool bUseCache = true)` — Retrieves hardware by serial number string. - `DASHardware[] GetHardware(string[] ids, bool bUseCache = true)` — Retrieves multiple hardware instances by serial number array. - `DASHardware GetHardware(string id, bool bThrowExceptionIfChanged, out bool changed, bool bUseCache = true)` — Full retrieval method with change detection output parameter. - `DASHardware GetHardware(string serialNumber, string ipaddress)` — Retrieves hardware by serial number (ipaddress parameter is unused). - `void UpdateMaxMemory(DASHardware h, long newMaxMemory)` — Updates the `MaxMemory` property and persists to database. - `DASHardware GetPrototypeHardware(string serial, int type)` — Retrieves prototype hardware using `DbOperations.DAS.PROTOTYPE_POSITION`. - `void Commit(DASHardware hardware, bool bExisting = false, bool bCheckExisting = true, bool Unassociate = true)` — Persists hardware to database via `DTS.Common.ISO.Hardware` insertion or update. - `void Delete(IHardware hardware)` — Deletes hardware implementing `IISOHardware`. - `void Delete(DASHardware hardware)` — Deletes a `DASHardware` instance, unassociating children if pseudo-rack. - `void Delete(IHardware[] hardware)` — Batch delete for `IHardware` array. - `void Delete(DASHardware[] hardware)` — Batch delete for `DASHardware` array. **Nested Types:** - `HardwareTypeChangedException` — Inner exception class extending `Exception`. - `enum Tags` — Contains `Hardware` value for property change notification. --- ### DasBatteryInputSettings (DataPROWin7.DataModel.BatteryAndInputVoltageDefaults) **Nested Enum:** - `Settings` — Enum defining 16 threshold types. **Order is significant for serialization.** **Constructors:** - `DasBatteryInputSettings(string s)` — Deserializes from comma-separated string; parses values in enum order. - `DasBatteryInputSettings(DasBatteryInputSettings copy)` — Copy constructor. - `DasBatteryInputSettings()` — Default constructor initializing all thresholds to hardcoded defaults. **Properties:** All 16 properties corresponding to `Settings` enum values, typed as `double`: - `BatteryLowDiagnosticsThreshold`, `BatteryHighDiagnosticsThreshold` - `BatteryLowArmedThreshold`, `BatteryHighArmedThreshold` - `InputLowDiagnosticsThreshold`, `InputHighDiagnosticsThreshold` - `InputLowArmedThreshold`, `InputHighArmedThreshold` - `MinimumValidBatteryThreshold`, `MinimumValidInputThreshold` - `MaximumValidBatteryThreshold`, `MaximumValidInputThreshold` - `BatteryMediumDiagnosticsThreshold`, `BatteryMediumArmedThreshold` - `InputMediumDiagnosticsThreshold`, `InputMediumArmedThreshold` **Instance Methods:** - `string ToSerializedString()` — Serializes all settings to comma-separated string using invariant culture. - `double GetValue(Settings setting)` — Retrieves value from `SettingsProperty` dictionary. - `void SetValue(Settings setting, double d)` — Sets value in `SettingsProperty` dictionary. --- ### InputAndBatterySettings (Static Class) **Static Methods:** - `void ClearCache()` — Clears the internal `_cache` dictionary. - `double GetValue(string DasType, DasBatteryInputSettings.Settings setting)` — Gets threshold value by DAS type string. - `double GetValue(HardwareTypes type, DasBatteryInputSettings.Settings setting)` — Gets threshold value by `HardwareTypes` enum. - `DasBatteryInputSettings GetDefaultSettingForHWType(HardwareTypes type)` — Returns default settings for hardware type, caching if `RunTestVariables.InRunTest` and `RunTestVariables.CacheVoltageSettingsInRunTest` are true. - `DasBatteryInputSettings GetSettingForHWType(HardwareTypes type)` — Returns current settings for hardware type from `Common.SerializedSettings`. - `void SetSettingForHWType(HardwareTypes type, DasBatteryInputSettings setting)` — Persists settings to `Common.SerializedSettings` for the specified hardware type. --- ## Invariants 1. **DASSettings**: All property setters use `SetProperty` from `BasePropertyChanged`, implying property change notification is raised on every assignment regardless of value equality. 2. **DASHardwareList Singleton**: The `GetList()` method returns a lazily-initialized singleton. The `_list` field is never reset to null except implicitly by the runtime. 3. **DASHardwareList Cache Consistency**: When `Cache` is set to `false`, `_cachedDASHardware` is cleared. The `_cachedHardware` (instance) and `_cachedDASHardware` (static) are separate caching mechanisms. 4. **DasBatteryInputSettings Serialization Order**: The `Settings` enum order must remain unchanged; serialization/deserialization relies on enum integer values as array indices. 5. **Hardware Type Mapping**: Multiple `HardwareTypes` values map to the same settings (e.g., `SLICE2_SIM` and `SLICE2_Base` share settings; `TDAS_Pro_Rack` and `TDAS_LabRack` share settings). 6. **Commit Versioning**: When updating existing hardware, `h.Version` is incremented by 1 before calling `Update()`. --- ## Dependencies ### Direct Dependencies (Imports): | Module | Depends On | |--------|------------| | `DASSettings` | `DTS.Common.Base` (`BasePropertyChanged`) | | `DASHardwareList` | `DTS.Common.Base`, `DTS.Common.DataModel`, `DTS.Common.Interface.DASFactory.Diagnostics`, `DTS.Common.Interface.DASFactory.Diagnostics.HardwareList`, `DTS.Common.Interface.DataRecorders`, `DTS.Common.Storage`, `System.Windows`, `DataPROWin7.DataModel.Classes.TestTemplate` | | `BatteryAndInputVoltageDefaults` | `DTS.Common.Enums`, `DTS.Common.Enums.Hardware`, `System.Configuration` | ### External System Dependencies: - `DbOperations` — Database access layer for DAS queries and stored procedures. - `DTS.Common.ISO.Hardware` — ISO hardware abstraction for persistence operations. - `Common.SerializedSettings` — Persistent settings storage for battery/input thresholds. - `RunTestVariables` — Runtime configuration flags (`InRunTest`, `CacheVoltageSettingsInRunTest`). - `ApplicationProperties.CurrentUser` — Current user context for audit fields. --- ## Gotchas 1. **DASHardwareList.GetHardware(string, string) Ignores IP Address**: The `ipaddress` parameter in `GetHardware(string serialNumber, string ipaddress)` is passed but never used—the method simply calls `GetHardware(serialNumber)`. 2. **ReloadAll() is a No-Op**: The `ReloadAll()` method body is entirely commented out. Calling it has no effect. 3. **Cache Flag Scope Confusion**: `DASHardwareList` has two separate caching mechanisms—static `Cache` property controls `_cachedDASHardware`, while instance method `SetCache` controls `_cachedHardware`. These operate independently. 4. **Hardware Type Settings Fallthrough**: In `GetSettingForHWType`, several hardware types (e.g., `DIM`, `SIM`, `TOM`, `Ribeye`, `SLICE_Base`) fall through to defaults with comments indicating they're "not expected" to reach that code path. This may mask configuration errors. 5. **GetHardware ID Parsing**: When using `_cachedHardware`, the `id` parameter is split on underscore (`tokens = id.Split('_')`) and only `tokens[0]` is used. This implies IDs may contain additional underscore-delimited metadata. 6. **Commit Order Dependency for SLICE6Db**: The comment in `Commit()` notes that when committing hardware groups containing SLICE6Db, the parent must be committed before children to avoid association issues. 7. **Prototype Hardware CalDate Reset**: `GetPrototypeHardware` explicitly sets `CalDate = DateTime.MinValue` for prototypes, which may affect calibration status checks elsewhere. 8. **DasBatteryInputSettings Default Constructor Throws on Unknown**: The default constructor's switch statement throws `NotSupportedException` for any enum value not explicitly handled, making it fragile to enum extensions.