--- source_files: - Common/DTS.Common/Enums/TSRAIRGo/NavigationButtonId.cs - Common/DTS.Common/Enums/TSRAIRGo/ArmStateMachineStates.cs generated_at: "2026-04-16T03:19:36.720501+00:00" model: "Qwen/Qwen3-Coder-Next-FP8" schema_version: 1 sha256: "59ccdc367292f870" --- # TSRAIRGo ## Documentation Page: TSRAIRGo Navigation & Arm State Machine Enums --- ### 1. **Purpose** This module defines core enumerations used in the TSRAIRGo application to represent navigation button identifiers and discrete states of the arm subsystem’s finite state machine (FSM). It serves as a shared contract between UI components (e.g., button handlers, status displays) and the arm control logic, ensuring consistent state and action semantics across the system. The `NavigationButtonId` enum maps UI interactions to logical actions, while `ArmStateMachineStates` provides the canonical set of states governing arming, disarming, data acquisition, and download workflows. --- ### 2. **Public Interface** #### `NavigationButtonId` Enum Defined in: `DTS.Common.Enums.TSRAIRGo.NavigationButtonId` - **Members** (all `public`): - `TestId` → Represents a test/debug button. - `ArmDisarm` → Toggles arming/disarming state. - `Trigger` → Manually initiates a test trigger. - `Download` → Initiates or manages data download. - `ViewData` → Opens data view interface. - `ExportData` → Exports collected data. - `Help` → Opens help documentation or UI. - `Dashboard` → Navigates to the main dashboard view. #### `ArmStateMachineStates.States` Nested Enum Defined in: `DTS.Common.Enums.TSRAIRGo.ArmStateMachineStates` - **Members** (all `public`, with `[Description]` attributes): - `CheckingArmState` - `CheckingForDAS` - `CheckingForData` - `ClearingFlash` - `Disarmed` - `Downloading` - `DownloadCleaningUp` - `DownloadFinished` - `Failed` - `Faulted` - `GettingEventInfo` - `IDLE` *(note: uppercase)* - `PostTestProcessing` - `PreparingForArming` - `ReadyForDownload` - `Rearming` - `Recording` - `WaitingForInterval` - `WaitingForSchedule` - `WaitingForTrigger` - `Streaming` > **Note**: The enum is nested inside a non-generic container class `ArmStateMachineStates`. The actual type used in code is `ArmStateMachineStates.States`. --- ### 3. **Invariants** - **`NavigationButtonId`**: - All members are compile-time constants; no runtime mutation is possible. - Values are implicitly assigned starting from `0` (`TestId = 0`, `ArmDisarm = 1`, ..., `Dashboard = 7`). - No validation is performed on usage; callers must ensure button IDs map to valid UI elements. - **`ArmStateMachineStates.States`**: - The set of states is exhaustive for the arm subsystem’s lifecycle. - Each state has a human-readable description via `[Description]` (from `System.ComponentModel`), but **no runtime enforcement** ensures descriptions match expected UI text. - The `IDLE` state is intentionally capitalized (unlike PascalCase convention), suggesting legacy or external convention adherence. --- ### 4. **Dependencies** - **Imports/Usings**: - `System`, `System.Collections.Generic`, `System.Linq`, `System.Text`, `System.Threading.Tasks`, `System.ComponentModel` → Indicates usage of standard .NET types (e.g., `DescriptionAttribute`). - **Module Dependencies**: - `DTS.Common` namespace suggests this is part of a shared common library (`DTS.Common.dll`). - Likely consumed by: - UI layer (e.g., WPF/WinForms/Xamarin projects referencing `DTS.Common`) - Arm control logic (e.g., `DTS.TSRAIRGo.Core` or similar) - No direct dependencies on other *TSRAIRGo*-specific enums or classes in the provided files. - **Consumers**: - Not inferable from source alone, but given the enum names, consumers are expected to include: - View models or UI controllers handling button clicks. - State machine implementations managing the arm subsystem. --- ### 5. **Gotchas** - **Capitalization Inconsistency**: `IDLE` is uppercase while all other `ArmStateMachineStates.States` members follow PascalCase (`CheckingArmState`, `Downloading`, etc.). This may cause issues in string comparisons, serialization, or UI binding if case-sensitive logic is used. - **No Explicit Values Assigned**: Both enums rely on implicit integer values. If new members are inserted (e.g., between `ArmDisarm` and `Trigger`), existing serialized data or persisted state may become misaligned. - **`ArmStateMachineStates` is a Container Class**: The enum is nested inside a class (`ArmStateMachineStates`) rather than being a top-level enum. This adds verbosity (`ArmStateMachineStates.States.CheckingArmState`) and may indicate legacy design or namespace organization constraints. - **`Description` Attributes Not Auto-Used**: While `[Description]` attributes are present, the source provides no evidence of helper methods (e.g., `GetDescription()`) to extract them. Consumers must implement reflection-based extraction if needed. - **No Validation or Guard Clauses**: Neither enum includes validation logic (e.g., `TryParse`, range checks). Invalid values (e.g., `(NavigationButtonId)99`) will be accepted at runtime. - **None identified from source alone.** *(No other non-obvious behavior, tech debt, or quirks are evident from the provided files.)*