Files
2026-04-17 14:55:32 -04:00

12 KiB

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
DataPRO/IService/StateMachine/StatusAndParameters/Configure/GroupChannelWithMeta.cs
DataPRO/IService/StateMachine/StatusAndParameters/Configure/ConfigureStatusParameters.cs
DataPRO/IService/StateMachine/StatusAndParameters/Configure/ConfigureStatusInformation.cs
2026-04-17T15:41:27.157987+00:00 zai-org/GLM-5-FP8 1 0a25ce0aa4784f4b

Documentation: Configure State Machine Module

1. Purpose

This module provides the configuration state machine for Data Acquisition System (DAS) units, managing the complete lifecycle of hardware configuration including channel resolution, sensor-to-hardware mapping, configuration application, and diagnostic preparation. It serves as the orchestration layer between high-level test setup definitions and low-level hardware communication, supporting both automatic channel resolution (via EID lookup) and manual channel assignment with validation.


2. Public Interface

ConfigureStatusParameters (Class)

Namespace: DTS.DASLib.Service.StateMachine
Implements: IStatusParameters

Configuration options container for the configure state machine.

Properties

Property Type Default Description
RequireIdFoundForSensorsWithIds bool true Requires that sensors with IDs have their EID found during resolution
AllowMissingSensors bool false Permits channels without assigned sensors
AllowSensorsOutOfPosition bool true Allows sensors on different channels than originally specified
AllowSensorIdToBlankChannel bool false Permits assigning sensors with EIDs to unassigned hardware channels
TestSetupConfiguration ITestSetup null The test setup containing channel/group definitions
TurnOffExcitation bool false Triggers excitation shutdown process
UnitsToConfigure IDASCommunication[] empty array Target DAS units for configuration
DoStrictCheck bool true Enables strict validation during configuration
EventConfig bool true Writes to event/diagnostic file stores (SLICE legacy feature)
DummyConfig bool false Configures units without actual data collection
MaxAAF double[] empty array Maximum Anti-Alias Filter values for SLICE/TDAS
ConfigureDigitalOutputs bool true Whether to apply digital output configuration
TurnOffAAFRealtime bool true Disables AAF for realtime mode (performance optimization)
ResetHardwareEventLines bool false Resets hardware event lines before configuration
PrepareForDiagnostics bool false Enables excitation/switch preparation for diagnostics
SkipTurnOnPower bool false Skips power-on step to maintain low-power state
SetConfiguration bool true Whether to apply configuration at all
DiscardDiagnostics bool true Discards diagnostics during configuration
DSPFilterType DSPFilterType from collection DSP filter configuration
SampleRateLookup IReadOnlyDictionary<string, double> empty Serial number to sample rate mapping
AAFRateLookup IReadOnlyDictionary<string, float> empty Serial number to AAF rate mapping

Delegates

Delegate Signature Description
GetSensorDelegate ISensorData(IGroupChannel) Retrieves sensor data for a group channel
GetSensorCalibrationDelegate ISensorCalibration(ISensorData, ExcitationVoltageOption) Retrieves calibration for sensor/excitation combo
GetDatabaseIdDelegate int(IDASCommunication) Retrieves database ID for a DAS unit
SetSensorCalibrationDelegate void(ISensorData, ISensorCalibration) Sets calibration on a sensor

Methods

  • ConfigureStatusParameters() - Constructor; initializes DSPFilterType from DSPFilterCollection
  • void Reset() - Resets all properties to default values
  • string ToString() - Returns formatted string of all parameter values

ConfigureStatusInformation (Class)

Namespace: DTS.DASLib.Service.StateMachine
Implements: IStatusInfo

Runtime status tracking and orchestration for the configuration process.

Nested Types

StatusValues (Enum)

ApplyingConfiguration, AutoResolvingChannels, ManuallyResolvedChannels,
Completed, Cancelling, Cancelled, ChannelOutOfPosition, NoChannelsAssigned,
AllChannelsResolved, EIDNotFound, ApplyConfigFailed, AppliedConfiguration,
PrepareForDiagnostics, PrepareForDiagnosticsFailed, PrepareForDiagnosticsSuccess,
LowPower, LowPowerSuccess, LowPowerFailure

InvalidAssignmentException (Exception)

  • Reasons enum: BlankChannel, NoSensor, ChannelDisabled, SensorNotFound, IncompatibleHardware, ChannelAlreadyAssigned, EID_Locked, EIDRequiredAndMissing, ChannelNotAssigned
  • Properties: IGroupChannel GroupChannel, Reasons Reason

SensorCompatiblilityResponse (Enum) - internal

Compatible, DigitalInputNotSupportedOnHWChannel, DigitalInputModeNotSupportedOnHWChannel,
BridgeModeNotSupportedOnHWChannel, SquibFireModeNotSupportedOnHWChannel,
NoSupportedExcitationOnHWChannel

Properties

Property Type Description
NoChannelsAssigned bool true when no channels are assigned
AllChannelsResolved bool true when all channels are resolved
ChannelsOutOfPosition bool true when channels are on different hardware than specified
HaveAppliedConfigAllUnits bool true when all target units are configured
UnitsConfigured IDASCommunication[] Successfully configured units
CancelEvent ManualResetEvent Signals cancel request
DoneEvent ManualResetEvent Signals work completion
CompleteAction ActionCompleteDelegate Completion callback
ProgressAction SetProgressValueDelegate Progress notification callback
StatusAction StatusIntDelegate Status notification callback
StatusExAction StatusExIntDelegate Extended status notification callback

Methods

  • Task Cancel() - Async; sets cancel event, waits for task completion, reports Cancelling then Cancelled status
  • void ApplyConfig() - Starts configuration process; checks TurnOffExcitation flag first; runs configuration in background task
  • void TurnOffExcitation() - Initiates low-power mode on all DAS units; runs in background task
  • void ManuallyResolveChannel(IGroupChannel channel, IDASChannel hardwareChannel) - Manually assigns a sensor channel to hardware; validates compatibility and throws InvalidAssignmentException on failure
  • void ManuallyUnresolveChannel(IGroupChannel channel) - Removes manual channel assignment; throws if channel not assigned or EID-locked
  • void Reset() - Resets all status properties to defaults

GroupChannelWithMeta (Class)

Namespace: DTS.DASLib.Service.StateMachine.StatusAndParameters.Configure
Access: internal

Helper class for tracking channel resolution state.

Properties

Property Type Description
ChannelConflict bool Channel has conflicting assignment
ConflictingChannel IGroupChannel Reference to conflicting channel
Channel IGroupChannel The group channel being tracked
Group IGroup Parent group reference
MissingID bool EID not found during resolution
MissingSensor bool No sensor assigned to channel
EIDOutOfPlace bool EID found on different hardware than expected
HWNotFound bool Hardware channel not found
HWChannelIncompatible bool Hardware incompatible with sensor
DASChannel IDASChannel Resolved hardware channel
AssignedByEID bool Channel was auto-assigned via EID lookup

3. Invariants

  1. Mutual Exclusion of Channel State: A channel exists in either _resolvedChannels or _unresolvedChannels, never both simultaneously. Methods AddResolvedChannel and AddUnresolvedChannel both remove from the opposite list before adding.

  2. Thread-Safe Unit Tracking: The UnitsConfigured array is modified exclusively through AddConfiguredDevice, which uses a static lock object (MyLock) to prevent race conditions.

  3. EID Lock Immutability: Channels assigned via EID (AssignedByEID = true) cannot be manually unresolved or reassigned to different hardware.

  4. Task Synchronization: CancelEvent and DoneEvent coordinate task lifecycle; DoneEvent is reset at the start of ApplyConfig and set upon completion.

  5. Configuration Bypass: If SetConfiguration is false, the configuration application step is skipped entirely, proceeding directly to power/diagnostic preparation.


4. Dependencies

This Module Depends On

Namespace Purpose
DTS.Common.Interface.Channels Channel interfaces (IDASChannel, AnalogInputDASChannel, OutputSquibChannel, OutputTOMDigitalChannel)
DTS.Common.Interface.DASFactory DAS communication and configuration interfaces (IDASCommunication, IDASFactory)
DTS.Common.Interface.DASFactory.Config Configuration data structures
DTS.Common.Interface.Sensors Sensor interfaces (ISensorData, ISensorCalibration)
DTS.Common.Interface.StatusAndProgressBar Status/callback delegates
DTS.Common.Interface.TestSetups.TestSetupsList Test setup interfaces (ITestSetup)
DTS.Common.Interface.Groups.GroupList Group/channel interfaces (IGroup, IGroupChannel)
DTS.Common.Classes.DSP DSP filter types and collections
DTS.Common.Enums ExcitationVoltageOptions, DSPFilterType
DTS.Common.Utilities.Logging APILogger for exception logging
DTS.DASLib.Service.StateMachine.StatusAndParameters.Configure GroupChannelWithMeta (same namespace)

External Service Dependencies (instantiated within)

Service Usage
DiagnosticsService Prepare units for diagnostic mode
ArmingService Enter low-power mode
ConfigurationService Apply hardware configuration

Global State Dependencies

  • States.Instance.Configure - Configuration state access
  • States.Instance.ConfigureStart - Alternate state access path
  • States.Instance.Configure.Status.GlobalStatusInformation - Global status tracking (e.g., ExcitationOn flag)

5. Gotchas

  1. Dual State Access Paths: The code accesses States.Instance.Configure and States.Instance.ConfigureStart interchangeably. The relationship between these two paths is unclear from source alone—this may indicate a refactoring artifact or intentional state sharing.

  2. Hardcoded Timing Constants: PREPARE_SPIN_TIME (200ms) and EXPECTED_PREPARE_TIME (8000ms) are hardcoded in PrepareForDiagnostics. These may not be appropriate for all hardware configurations.

  3. Cancel Latency: The Cancel method includes a fixed 100ms Thread.Sleep to "simulate time spent waiting for cancel to be acknowledged." This may cause unexpected delays in time-sensitive scenarios.

  4. Exception Re-throw Pattern: In PrepareForDiagnostics, exceptions are caught and re-thrown with throw ex, which destroys the original stack trace. This should be throw instead.

  5. Legacy SLICE Features: The EventConfig property references a "legacy feature of sliceware" for multiple file stores. Not all units support this, but the source does not indicate which units do.

  6. Delegate Nullability: Several delegate properties (GetSensorAction, GetCalibrationAction, GetDatabaseIdAction, SetSensorCalibrationAction) are not validated for null before invocation. Callers must ensure these are set.

  7. Array Initialization Pattern: Properties like MaxAAF, UnitsToConfigure, SampleRateLookup, and AAFRateLookup are initialized to empty collections rather than null, but the source does not document whether consumers should replace these or modify them in-place.