Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
d7b0ec7
feat(browser): add fail-closed live GVA and FC typed data-write admis…
masarray Oct 23, 2026
a895db1
feat(mms): add one-shot GVA-fenced data write on existing association…
masarray Oct 23, 2026
bb6473e
feat(browser): add single-DO sequential multi-DA plan and fail-stop p…
masarray Oct 23, 2026
f567d2c
test(browser): guard FC, GVA, integer bounds, float64, BER-safe strin…
masarray Oct 23, 2026
b6e309a
feat(browser): pure live-typed contextual Control eligibility decision
masarray Oct 23, 2026
f135206
test(browser): contextual Control fail-closed cases for StatusOnly, C…
masarray Oct 23, 2026
b7be2d9
fix(mms): lock staged write to exact GVA width/constraint fingerprint
masarray Oct 23, 2026
e16dc45
test(mms): require full GVA fingerprint, not type family only
masarray Oct 23, 2026
64f6f8f
fix(mms): require explicit approval; unknown transport is not IED rej…
masarray Oct 23, 2026
0e8e239
fix(mms): keep ctlModel on qualified control-model configuration path
masarray Oct 23, 2026
0047f52
test(mms): preserve dedicated ctlModel control authority invalidation
masarray Oct 23, 2026
5f623ec
test(mms): use truly different DA in stale GVA reference rejection
masarray Oct 23, 2026
a99f13b
feat(mms): route confirmed DA Write via active IED runtime model+epoc…
masarray Oct 23, 2026
af74cc0
feat(mms): serialize Browser generic data Write through existing WPF …
masarray Oct 23, 2026
8b24605
feat(mms): stage a read-only exact-GVA typed DA edit on shared MMS se…
masarray Oct 23, 2026
6551b5b
feat(browser): strict typed text input for live MMS scalar editor
masarray Oct 23, 2026
e4d5135
feat(browser): live-model and association-gated MMS Write preview
masarray Oct 23, 2026
f25a902
feat(browser): expose non-queued read-only staged write preview throu…
masarray Oct 23, 2026
9e819d2
feat(ui): add compact typed MMS Data Attribute Write dialog with fixe…
masarray Oct 23, 2026
dd5454f
feat(ui): implement explicit single-DA live GVA preview, validation, …
masarray Oct 23, 2026
29bbd95
feat(browser): launch exact-DA staged typed MMS Write from virtualize…
masarray Oct 23, 2026
0b10f2e
feat(browser): compact contextual Write DA toolbar and selected-row e…
masarray Oct 23, 2026
609a2a6
feat(browser): keep staged Write enabled only for valid focused DA
masarray Oct 23, 2026
6f3c248
test(browser): typed scalar editor input never coerces IEC value kinds
masarray Oct 23, 2026
01b6f57
feat(browser): wire Contextual Control to exact live Command Dock pro…
masarray Oct 23, 2026
e25ad46
feat(browser): add live-verified contextual Control toolbar action
masarray Oct 23, 2026
75e34db
feat(browser): refresh Control enablement with focused DO and existin…
masarray Oct 23, 2026
0c9a125
style(control): compact native popup while retaining scroll and fixed…
masarray Oct 23, 2026
d5d0d2b
fix(control): DPI-aware command dialog fit without clipping confirmat…
masarray Oct 23, 2026
fe06621
fix(runtime): repair JS replacement-suffix insertion and restore cano…
masarray Oct 23, 2026
edd9860
fix(browser): import canonical live IEC discovery DA model in Write d…
masarray Oct 23, 2026
b658e29
fix(browser): refuse generic write on projected parent rows; require …
masarray Oct 23, 2026
94f0e51
docs(staging): preserve verified FAT baseline and global Write/Contro…
masarray Oct 23, 2026
6b8398c
feat(browser): add compact scrollable same-DO multi-DA Write editor s…
masarray Oct 23, 2026
e91e80a
feat(browser): preview and explicitly confirm selected changed DA Wri…
masarray Oct 23, 2026
a4d19f5
feat(browser): route exact DO focus to multi-DA editor without changi…
masarray Oct 23, 2026
52ce672
fix(browser): dereference nullable MMS value-type references in batch…
masarray Oct 23, 2026
a363faf
test(browser): protect opt-in multi-DA staging, live lease, preview-o…
masarray Oct 23, 2026
77f8a4c
fix(browser): revoke Write and Control toolbar actions on status-DA f…
masarray Oct 23, 2026
d806e25
fix(control): fail closed on DA focus instead of inheriting parent co…
masarray Oct 23, 2026
5a4a010
test(browser): enforce disabled Write/Control when status DA takes focus
masarray Oct 23, 2026
bafd95f
stage: incorporate latest approved FAT UI/startup baseline
masarray Oct 23, 2026
f509d04
stage(browser): typed single/multi DA Write and fail-closed contextua…
masarray Oct 23, 2026
137efb6
feat(control): redesign compact ARSAS popup with pinned actions and p…
masarray Oct 23, 2026
ce3a991
feat(control): compact SBO-aware UX, originator settings, ctlNum and …
masarray Oct 23, 2026
f8d64ee
test(control): verify default station origin and explicit user-select…
masarray Oct 23, 2026
c44b8f2
fix(control): preserve explicit independent feedback warning in conci…
masarray Oct 23, 2026
9bbcfeb
fix(control): use a strict choice selector for discrete DPC/SPC/BSC v…
masarray Oct 23, 2026
6791b2c
fix(control): keep popup open during in-flight native command and avo…
masarray Oct 23, 2026
2292058
feat(control): disable modal close during in-flight command ownership
masarray Oct 23, 2026
ee83a2b
test(control): verify compact WPF layout, SBO action truth, origin/te…
masarray Oct 23, 2026
dcceb5a
fix(control): allow closing slow read-only inspection while protectin…
masarray Oct 23, 2026
7d1f9b4
testability(control): expose side-effect-free originator ID validator…
masarray Oct 23, 2026
7ed9aa7
fix(control): require operator authorization for Test=true as well as…
masarray Oct 23, 2026
177b872
test(control): verify Test=true still requires explicit authorization…
masarray Oct 23, 2026
aaf9562
fix(control): update primary action label immediately on Test toggle
masarray Oct 23, 2026
29d5eff
fix(control): freeze editable command parameters throughout a native …
masarray Oct 23, 2026
1f857bb
fix(control): disable value, checks and origin edits while executing
masarray Oct 23, 2026
1837348
fix(control): distinguish ambiguous wire/timeout outcomes from confir…
masarray Oct 23, 2026
a7b6eee
test(control): preserve local NotSent vs ambiguous wire outcome class…
masarray Oct 23, 2026
ab22f1d
stage: sync latest FAT Smart IP and startup fixes without control reg…
masarray Oct 23, 2026
f230d7c
feat(control): separate MMS request acceptance, termination and indep…
masarray Oct 23, 2026
d636542
test(control): fail closed on accepted-without-feedback, timeout and …
masarray Oct 23, 2026
095537f
fix(control): one-shot explicit command, truthful result classificati…
masarray Oct 23, 2026
4eeb1b7
feat(control): add explicit Reinspect action in pinned footer without…
masarray Oct 23, 2026
26907b3
test(control): assert feedback truth from outcome classifier rather t…
masarray Oct 23, 2026
79279ae
test(control): disarm after dispatch and require reinspection plus de…
masarray Oct 23, 2026
6aa9b70
feat(control): report actual Select/SBOw/Operate/termination stages w…
masarray Oct 23, 2026
124aab4
feat(control): display only real native Select/Operate/Termination wi…
masarray Oct 23, 2026
51dccb7
feat(control): show compact service-stage evidence below result witho…
masarray Oct 23, 2026
fa7d940
test(control): only display actual native SBOw/Operate/termination st…
masarray Oct 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 90 additions & 0 deletions BrowserBatchWriteWindow.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
<Window x:Class="ArIED61850Tester.BrowserBatchWriteWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Write selected Data Attributes · ARSAS"
Width="760" Height="580" MinWidth="650" MinHeight="420" MaxHeight="690"
WindowStartupLocation="CenterOwner" ResizeMode="CanResize"
Background="#F5F7FA" FontFamily="{StaticResource AppFontFamily}" FontSize="11.5"
Loaded="Window_Loaded" Closed="Window_Closed">
<Grid Margin="14,12,14,12">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*" MinHeight="100"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Margin="2,0,2,10">
<TextBlock Text="Write selected Data Attributes" Foreground="#293E56"
FontWeight="SemiBold" FontSize="15"/>
<TextBlock x:Name="IdentityLabel" Foreground="#5F7389" FontSize="11"
TextTrimming="CharacterEllipsis" Margin="0,3,0,0"/>
<TextBlock Text="One verified DO · exact FC/type · no IEC Control Operate"
Foreground="#637990" FontSize="10.5" Margin="0,3,0,0"/>
</StackPanel>
<TextBlock Grid.Row="1" Text="Select individual rows, enter new values and inspect the live MMS type before confirming. Writes are sequential, never atomic."
TextWrapping="Wrap" Foreground="#596D84" FontSize="10.5" Margin="2,0,2,9"/>
<DataGrid x:Name="RowsGrid" Grid.Row="2" ItemsSource="{Binding Rows}"
Style="{StaticResource ModernDataGrid}" IsReadOnly="False"
AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False"
RowHeight="35" ColumnHeaderHeight="31" MinHeight="0"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling"
EnableRowVirtualization="True">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Write" Width="53">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox HorizontalAlignment="Center" VerticalAlignment="Center"
IsChecked="{Binding Selected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsEnabled="{Binding Eligible}" ToolTip="{Binding Status}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="DA (exact MMS)" Binding="{Binding ReferenceText}"
IsReadOnly="True" Width="2.4*" MinWidth="220"/>
<DataGridTextColumn Header="FC" Binding="{Binding Fc}" IsReadOnly="True" Width="45"/>
<DataGridTextColumn Header="MMS type" Binding="{Binding Type}" IsReadOnly="True" Width="89"/>
<DataGridTextColumn Header="Before" Binding="{Binding Old}" IsReadOnly="True" Width="90"/>
<DataGridTemplateColumn Header="New value" Width="1.1*" MinWidth="108">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding NewValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsEnabled="{Binding Eligible}" Padding="5,3" FontSize="11"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Result / reason" Binding="{Binding Status}"
IsReadOnly="True" Width="1.7*" MinWidth="145"/>
</DataGrid.Columns>
</DataGrid>
<Grid Grid.Row="3" Margin="1,10,1,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock x:Name="StatusLabel" Text="No Write sent. Select changed values for read-only inspection."
TextWrapping="Wrap" Foreground="#506780" FontSize="10.5" Margin="0,0,0,8"/>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="A confirmed Write is not physical feedback."
Foreground="#70849B" FontSize="10" TextWrapping="Wrap"
VerticalAlignment="Center" Margin="0,0,8,0"/>
<Button x:Name="InspectButton" Grid.Column="1" Content="Inspect selected"
Style="{StaticResource SoftButton}" Width="117" Height="31"
Margin="0,0,7,0" Click="Inspect_Click"/>
<Button x:Name="WriteButton" Grid.Column="2" Content="Write selected…"
Width="118" Height="31" IsEnabled="False" Background="#255F99"
Foreground="White" BorderBrush="#255F99"
Margin="0,0,7,0" Click="Write_Click"/>
<Button Grid.Column="3" Content="Close" Width="72" Height="31"
Style="{StaticResource SoftButton}" Click="Close_Click"/>
</Grid>
</Grid>
</Grid>
</Window>
Loading
Loading