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,196 @@
---
source_files:
- Common/DTS.CommonCore/Enums/DASFactory/WakeupTriggers.cs
- Common/DTS.CommonCore/Enums/DASFactory/UseCasesTSRAIR.cs
- Common/DTS.CommonCore/Enums/DASFactory/S6DBDiagnosticChannelList.cs
- Common/DTS.CommonCore/Enums/DASFactory/ConstantsAndEnums.cs
- Common/DTS.CommonCore/Enums/DASFactory/DFConstantsAndEnums.cs
generated_at: "2026-04-16T02:44:53.233679+00:00"
model: "Qwen/Qwen3-Coder-Next-FP8"
schema_version: 1
sha256: "79cc4aa25a4a023c"
---
# DASFactory Enums Module Documentation
## 1. Purpose
This module (`DTS.Common.Enums.DASFactory`) defines core enumerations, constants, and extension methods used across the DAS (Data Acquisition System) Factory product line. It serves as a centralized source of truth for device type identifiers, recording modes, channel configurations, diagnostic channels, and protocol-related flags. These definitions enable consistent behavior across modules handling device communication, configuration, diagnostics, and data acquisition workflows. The module supports legacy and modern device families (e.g., SLICE, TSR, TSR AIR, S6DB, TDAS) and includes mappings between internal and external enum representations.
## 2. Public Interface
### Enumerations
#### `WakeupTriggers`
- **Definition**: `public enum WakeupTriggers`
- **Values**:
- `MotionDetect`: Triggered by motion detection.
- **Attributes**: Uses `EnumDescriptionTypeConverter` for localized descriptions.
#### `UseCasesTSRAIR`
- **Definition**: `public enum UseCasesTSRAIR : byte`
- **Values**:
- `AEROSPACE`
- `AEROSPACE_with_motion`
- `VIBRATION`
- `SCHEDULED`
- `INTERVAL`
- `STREAMING`
- `PRETRIGGER_TEST`
- **Attributes**: Uses `EnumDescriptionTypeConverter`.
#### `S6DBDiagnosticChannelList`
- **Definition**: `public enum S6DBDiagnosticChannelList`
- **Values**:
- `InputVoltage = 0`
- `BackupVoltage = 1`
- `TemperatureC = 2`
- `BatterySoc = 3`
- `DiagInputVoltage = 100`
- `DiagMcuTemperature = 101`
- `DiagChargerPower = 102`
- `DiagChargerInputCurrent = 103`
- `DiagEnv_1_Temperature = 104`
- `DiagEnv_1_Humidity = 105`
- `DiagEnv_2_Temperature = 106`
- `DiagEnv_2_Humidity = 107`
- `DiagEnv_3_Temperature = 108`
- `DiagEnv_3_Humidity = 109`
- `DiagEnv_4_Temperature = 110`
- `DiagEnv_4_Humidity = 111`
- `DiagEnv_5_Temperature = 112`
- `DiagEnv_5_Humidity = 113`
- `DiagBatterySoc = 114`
- `DiagBatteryPackVoltage = 115`
- `DiagBatteryPackCurrent = 116`
- `DiagBatteryFgTemperature = 117`
- `DiagBatteryThermistor1Temperature = 118`
- `DiagBatteryThermistor2Temperature = 119`
- **Note**: Values 03 are legacy base channels; 100+ are additional diagnostic channels.
#### `ConstantsAndEnums.DASType`
- **Definition**: `public enum DASType` (nested in `ConstantsAndEnums`)
- **Values**: Includes `NONE`, `HID_SLICE`, `WINUSB_SLICE`, `G5`, `SIM`, `TOM`, `DIM`, `TSR`, `HEADS`, `MINIDAU`, `ETHERNET_SLICE`, `ETHERNET_RIBEYE`, `SLICE_DB`, `TSR2`, `ETHERNET_TDAS`, `CDCUSB_SLICE`, `ETHERNET_SLICE2`, `WINUSB_SLICE1_5`, `ETHERNET_SLICE1_5`, `ETHERNET_SLICE6`, `ETHERNET_SLICE6AIR`, `WINUSB_SLICE6`, `WINUSB_SLICE6AIR`, `ETHERNET_SLICE6DB`, `SERIAL_TDAS`, and others.
- **Purpose**: Identifies device hardware type.
#### `ConstantsAndEnums.VoltageStatusColor`
- **Definition**: `public enum VoltageStatusColor`
- **Values**: `Green`, `Red`, `Yellow`, `Off`
#### Constants in `ConstantsAndEnums`
- `EVENT_NUMBER_PRETEST_DIAG = -1`
- `EVENT_NUMBER_POSTTEST_DIAG = -2`
- `EVENT_NUMBER_MEASURE_BRIDGE = -3`
#### `DFConstantsAndEnums` Static Properties & Methods
- `AlwaysShowUnsignedADC`: `bool` (default `false`)
- `OneShotWaitTimeMs`: `int` (default `3000`)
- `TemperatureLogTimeFormat`: `string` (default `"MM-dd-yyyy HH:mm:ss"`)
- `TemperatureLogValueFormat`: `string` (default `"N2"`)
- `TSR_AIR_HIGH_G_CUTOFF_RATE_SPS`: `int` (value `500`)
- `TSRAIR_ValidSampleRates`: `int[]` (values: `[100, 500, 1000, 5000, 10000, 15000, 20000]`)
- `UseDropDownForTestObjectAndPosition`: `bool` (default `false`)
- `AllowEnableFaultCheckingOnS6DB`: `bool` (default `true`)
- `TDASRemoveOffsetWeighting`: `double` (default `1.0`)
- `TDASShuntEmulationWeighting`: `double` (default `0.5`)
- `ExpectedMaxTDASDiagnosticRunTimePerChannelMS`: `int` (default `8000`)
- `IsSLICE6ERFirmware(string firmwareVersion)`: `bool` — Returns `true` if firmware version ends with `"G1"` or `"G3"` (indicating EDR firmware).
- `UseUDPForAutoArmATDMonitor`: `bool` (default `false`)
- `ArmStateIdle = 0`: `byte`
- `MADEUPEVENT_TESTID = "__MadeUp__"`: `string`
- `NO_CONFIGURATION = "NO_CONFIGURATION"`: `string`
- `TOMSWITCH_ARMED = "TOMSAFETY_ARMED"`: `string`
- `SAFETYSWITCH_EXCEPTION = "SAFETYSWITCH_EXCEPTION"`: `string`
- `CHANNEL_SEPARATOR = "_"`: `string`
- `SERIAL_SEPARATOR = "-"`: `string`
- Serial append strings (e.g., `LOWG_SERIAL_APPEND = "Low g"`, `HIGHG_SERIAL_APPEND = "High g"`, etc.)
- Channel index constants: `CHANNEL_X = 0`, `CHANNEL_Y = 1`, `CHANNEL_Z = 2`, `CHANNEL_TEMPERATURE = 0`, `CHANNEL_HUMIDITY = 1`, `CHANNEL_PRESSURE = 2`
- User channel names: `USER_CHANNEL_NAME_LOWG`, `USER_CHANNEL_NAME_HIGHG`, etc.
- `ExtraCommunicationLogging`: `bool` (default `false`)
- `ReceiveBufferSizeBytes`: `int` (default `65536`)
- `SendBufferSizeBytes`: `int` (default `65536`)
- `RemoteKeepAliveSeconds`: `uint` (default `60`)
- `RemoteKeepAliveRetryIntervalSeconds`: `uint` (default `5`)
- `LocalKeepAliveTimeOutMS`: `uint` (default `5000`)
- `LocalKeepAliveRetryIntervalMS`: `uint` (default `1000`)
- `HeartbeatAsyncConnectTimeoutMS`: `int` (default `10000`)
- `WaitTimeBetweenUnitConnects`: `int` (default `100`)
- `DontDoSDL`: `bool` (default `false`)
- `SCHEDULE_AHEAD_IN_MINUTES = 2`: `int`
- High-g sensor indices: `High_g_Linear_1_Index = 3`, `High_g_Linear_2_Index = 4`, `High_g_Linear_3_Index = 5`
- `RealtimeUDPAddress`: `string` (default `"UDP://239.1.2.10:8400"`)
- `FIRST_USE_DATE_NOT_SET`: `DateTime` (value: `SqlDateTime.MinValue`)
#### `DFConstantsAndEnums` Enumerations
- `FaultFlags` ([Flags] enum): Bitwise flags for legacy SLICE 1 ARM status faults (e.g., `IncomingStatusLineDropped = 1 << 0`, `ADCBufferOverrun = 1 << 1`, ..., `NO_DATA = 1 << 13`)
- `ExcitationStatus`: `Off`, `On`, `Unknown`
- `T0CorrectionStatus`: `ScanningForPowerLoss`, `ScanningForPeaksAndTroughs`, `SettingAttributes`
- `ModuleType`: Lists module types (e.g., `SliceBridge`, `G5Analog`, `EmbeddedLinearAccelHighG`, `UART`, `StreamOut`, etc.)
- `RecordingMode`: Full list of recording modes (e.g., `CircularBuffer`, `RecorderMode`, `AutoActiveMode`, `Aerospace`, `Scheduled`, `Streaming`, `RAMActive`, `a14_NormalRecorderAndStreamSubSampleMode`, etc.) with descriptions and hex values.
- `TiltAxes`: 48-axis orientation configurations for Slice 6 Bubble level tilt feature (e.g., `XYZ = 0`, `XYIZ = 6`, `IXYIZ = 30`, etc.)
- `ConfigMode`: Channel configuration modes (`Disabled`, `Normal`, `DummyArm`, `Clock`, `UART`, `StreamOut`, `StreamIn`)
- `MultiCastDeviceClasses`: [Flags] enum for device classes in UDP broadcast (e.g., `Slice6 = 1 << 0`, `SDB = 1 << 1`, ..., `NextOne = 1 << 10`, `Any = 0xFFFF`)
- `ProtocolLimitedCommands`: List of commands limited by protocol version (e.g., `DiangosShuntDAC`, `Arm`, `Diagnostics`, `SetUARTSettings`, etc.)
- `CommandStatus`: Comprehensive set of command status codes (e.g., `StatusNoError = 0x00`, `StatusInvalidParameter`, ..., `StatusNoResponse`)
- `QATSExtendedFault`: [Flags] enum for extended fault reporting (e.g., `EXT_FAULT_TYPE_STATUSLINE_PORT_1_DROPPED`, `FAULT_FLAG__DEVICE__KX134`, `EXT_FAULT_TYPE_STATUSLINE_SUPER_CAP`, etc.)
- `TMAT_TEMPLATES`: TMAT template identifiers (e.g., `S6Air_PCM`, `TSRAIR_ANALOG`)
#### Extension Methods in `RecordingModeExtensions`
- `UsesTestLength(RecordingModes mode)`: Returns `true` if mode uses test length (e.g., `Recorder`, `Scheduled`, `Interval`)
- `IsTSRAIROnlyRecordingMode(RecordingModes mode)`: Returns `true` for `Active`, `MultipleEventActive`, `Scheduled`, `Interval`
- `IsTSRAirRecordingMode(RecordingModes mode)`: Returns `true` for `Active`, `MultipleEventActive`, `Scheduled`, `Interval`, `Streaming`
- `SupportsT0Correction(DFConstantsAndEnums.RecordingMode mode)`: Returns `true` for circular buffer or hybrid recorder modes
- `ToRecordingModesAlt(DFConstantsAndEnums.RecordingMode mode)`: Maps to `RecordingModes` via alternate lookup
- `ToRecordingModes(DFConstantsAndEnums.RecordingMode mode)`: Maps to `RecordingModes` (fallback: `CircularBuffer`)
- `FromRecordingModes(this RecordingModes mode)`: Maps `RecordingModes``DFConstantsAndEnums.RecordingMode`
- `IsACircularBufferMode(RecordingModes/DFConstantsAndEnums.RecordingMode mode)`: Returns `true` for circular buffer variants
- `DoesModeSupportAutoArm(RecordingModes mode)`: Returns `false` for `Active`, `MultipleEventActive`, `Scheduled`, `Interval`, `Streaming`
- `IsARecorderMode(RecordingModes/DFConstantsAndEnums.RecordingMode mode)`: Returns `true` for recorder variants
- `IsAHybridRecorderMode(RecordingModes/DFConstantsAndEnums.RecordingMode mode)`: Returns `true` for hybrid recorder variants
- `IsAMultipleEvent(RecordingModes mode)`: Returns `true` for multiple-event modes
- `CanBeAMultipleEvent(RecordingModes mode)`: Returns `true` if mode supports multiple-event capability
- `IsAStreamMode(RecordingModes/DFConstantsAndEnums.RecordingMode mode)`: Returns `true` for streaming modes
- `TestWillBeStreaming(RecordingModes recordingMode, bool streaming)`: Returns `true` if mode is streaming or `streaming` flag is set
- `IsAUartMode(RecordingModes/DFConstantsAndEnums.RecordingMode mode)`: Returns `true` for UART-enabled modes
- `IsAnOpenEndedRecordingMode(RecordingModes/DFConstantsAndEnums.RecordingMode mode)`: Returns `true` for open-ended modes (e.g., `ContinuousRecorder`, `RecordOnBoot`)
## 3. Invariants
- **Enum Values Are Fixed**: All enum values are explicitly assigned and must not be changed without coordination across firmware and host software.
- **`DASType` Duplication**: `DASType` is defined in both `ConstantsAndEnums` and `DFConstantsAndEnums`. The latter is the canonical version (includes more entries like `ETHERNET_TSR_AIR`, `WINUSB_TSR_AIR`, etc.).
- **`RecordingMode` Value Mapping**: The mapping between `DFConstantsAndEnums.RecordingMode` and `RecordingModes` is bi-directional and must be kept consistent. Extension methods (`ToRecordingModes`, `FromRecordingModes`) enforce this.
- **`RecordingModes` Values Are Not Reused**: Each `RecordingModes` value maps to exactly one `DFConstantsAndEnums.RecordingMode` and vice versa.
- **`WakeupTriggers` Has One Value**: Only `MotionDetect` is defined; no other triggers are supported.
- **`S6DBDiagnosticChannelList` Channel Ranges**: Base diagnostic channels (03) and extended channels (100+) are disjoint and non-overlapping.
- **`FaultFlags` Is a Flags Enum**: Values are powers of two and combinable via bitwise OR.
## 4. Dependencies
### Dependencies *of* this module:
- **`DTS.Common.Base.Classes`**: Used for base classes (imported but not directly used in provided enums).
- **`DTS.Common.Converters`**: Required for `EnumDescriptionTypeConverter` (used in `WakeupTriggers` and `UseCasesTSRAIR`).
- **`System.ComponentModel`**: Required for `[Description]` attribute.
- **`System`**: Core types (`bool`, `int`, `string`, `DateTime`, `HashSet`, `Dictionary`, etc.)
### Dependencies *on* this module:
- **`DASFactory` modules**: All modules that handle device configuration, diagnostics, or communication rely on these enums for:
- Device type identification (`DASType`)
- Recording mode selection (`RecordingMode`)
- Channel configuration (`ConfigMode`)
- Diagnostic channel addressing (`S6DBDiagnosticChannelList`)
- Protocol command/status handling (`CommandStatus`, `ProtocolLimitedCommands`)
- TSR AIR-specific behavior (`UseCasesTSRAIR`, `TSR_AIR_HIGH_G_CUTOFF_RATE_SPS`, `TSRAIR_ValidSampleRates`)
## 5. Gotchas
- **`DASType` Duplication**: `DASType` is defined in both `ConstantsAndEnums` and `DFConstantsAndEnums`. The latter is the extended version and should be preferred.
- **`RecordingMode` Value Conflicts**: Some `DFConstantsAndEnums.RecordingMode` values map to the same `RecordingModes` value (e.g., `AutoActiveMode` and `Aerospace` both map to `RecordingModes.Active`). This is intentional per comments.
- **`Interval` vs `Scheduled`**: `RecordingModes.Interval` maps to `DFConstantsAndEnums.RecordingMode.Scheduled`, but `DFConstantsAndEnums.RecordingMode.Interval` maps to `RecordingModes.Interval`. This asymmetry may cause confusion.
- **`T0Correction` Support**: Only circular buffer and hybrid recorder modes support T0 correction. Other modes (e.g., `RecorderMode`) do not.
- **`IsTSRAIROnlyRecordingMode` Excludes `Streaming`**: While `Streaming` is a TSR AIR mode, it is not considered "TSR AIR only" per this method.
- **`NO_CONFIGURATION` vs `NO_DATA`**: `NO_CONFIGURATION` (`"NO_CONFIGURATION"`) indicates missing config on device; `NO_DATA` (`1 << 13` in `FaultFlags`) is a runtime fault flag.
- **`FIRST_USE_DATE_NOT_SET`**: Uses `SqlDateTime.MinValue`, not `DateTime.MinValue`, to represent unset date.
- **`IsSLICE6ERFirmware` Logic**: Relies on firmware version string ending with 4-character token starting with `"G1"` or `"G3"`. May break if version format changes.
- **`S6DBDiagnosticChannelList.DiagEnv_X_Temperature` Off-by-One**: `DiagEnv_1_Temperature = 104`, but `DiagChargerDischargeCurrent = 104` is commented out. Ensure no active code uses the old value.
- **`RecordingModeExtensions` Uses `RecordingModes`**: The extension methods operate on `RecordingModes`, not `DFConstantsAndEnums.RecordingMode`, requiring conversion via `ToRecordingModes`/`FromRecordingModes`.
- **`AlwaysShowUnsignedADC` Is a Static Property**: Its value is not persisted; must be set per-session.