Skip to content

Commit bed1fcf

Browse files
authored
fix(diag): restore visible SV jitter and integrity telemetry
* feat(diag): restore explicit SV arrival jitter, counter integrity and quality readouts * fix(diag): follow selected SV stream and treat counter rollover zero as valid * feat(diag): make live jitter, smpCnt jumps, missing samples and SV quality primary * test(diag): regress real jitter, missing samples, rollover and quality semantics * fix(diag): distinguish absent smpSynch evidence from observed wire field * fix(ui): show SV metering only for selected SV diagnostics * fix(diag): default to selected live SV rather than stale PTP placeholder
1 parent a4733b0 commit bed1fcf

4 files changed

Lines changed: 251 additions & 88 deletions

File tree

‎src/ProcessBus.App.Wpf/MainWindow.xaml‎

Lines changed: 108 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -2494,92 +2494,98 @@
24942494
</Grid>
24952495
</Border>
24962496

2497-
<!-- Unified cards -->
2498-
<!-- Read-first status: four decisions; forensic explanations via hover/details. -->
2497+
<!-- Immediate SV engineering evidence. Keep numerical jitter and
2498+
smpCnt discontinuities visible without opening Advanced. -->
24992499
<UniformGrid Grid.Row="2" Columns="4">
25002500
<UniformGrid.Style>
25012501
<Style TargetType="UniformGrid">
2502-
<Setter Property="Visibility" Value="Visible"/>
2502+
<Setter Property="Visibility" Value="Collapsed"/>
25032503
<Style.Triggers>
2504-
<DataTrigger Binding="{Binding SelectedDiagnosticTarget.Protocol}" Value="PTP">
2505-
<Setter Property="Visibility" Value="Collapsed"/>
2506-
</DataTrigger>
2507-
<DataTrigger Binding="{Binding SelectedDiagnosticTarget.Protocol}" Value="GOOSE">
2508-
<Setter Property="Visibility" Value="Collapsed"/>
2504+
<DataTrigger Binding="{Binding SelectedDiagnosticTarget.Protocol}" Value="SV">
2505+
<Setter Property="Visibility" Value="Visible"/>
25092506
</DataTrigger>
25102507
</Style.Triggers>
25112508
</Style>
25122509
</UniformGrid.Style>
2513-
<Border Background="#0F2538" BorderBrush="#294864"
2514-
BorderThickness="1" CornerRadius="12"
2515-
Padding="13,12" Margin="0,0,8,0"
2516-
ToolTip="{Binding TimingReferenceText}">
2510+
2511+
<Border Background="#0F2538" BorderBrush="#294864" BorderThickness="1"
2512+
CornerRadius="9" Padding="12,10" Margin="0,0,8,0"
2513+
ToolTip="{Binding Diagnostics.JitterStatusText}">
25172514
<StackPanel>
2518-
<TextBlock Text="ARRIVAL" Foreground="#91B3CF"
2519-
FontSize="10.5" FontWeight="SemiBold"/>
2520-
<TextBlock Text="{Binding FrequencyText}"
2521-
Foreground="#F2F8FF" FontSize="17"
2522-
FontWeight="SemiBold"
2523-
Margin="0,8,0,5"
2515+
<TextBlock Text="ARRIVAL JITTER" Foreground="#9BC7E4" FontSize="10.5"
2516+
FontWeight="SemiBold"/>
2517+
<TextBlock Text="{Binding Diagnostics.SvJitterHeadlineText}"
2518+
Foreground="#F3F9FF" FontSize="20" FontWeight="SemiBold"
2519+
FontFamily="Consolas" Margin="0,6,0,4"
25242520
TextTrimming="CharacterEllipsis"/>
2525-
<TextBlock Text="{Binding JitterText}"
2526-
Foreground="#A7C2D9" FontSize="11.5"
2527-
TextTrimming="CharacterEllipsis"
2528-
ToolTip="{Binding TimestampSourceText}"/>
2521+
<TextBlock Text="{Binding Diagnostics.SvJitterStatisticsText}"
2522+
Foreground="#B9D1E5" FontSize="11" TextWrapping="Wrap"/>
2523+
<TextBlock Text="{Binding Diagnostics.SvJitterExcursionsText}"
2524+
Foreground="#F3C76D" FontSize="11" Margin="0,3,0,0"
2525+
TextWrapping="Wrap"/>
25292526
</StackPanel>
25302527
</Border>
2531-
<Border Background="#0F2538" BorderBrush="#294864"
2532-
BorderThickness="1" CornerRadius="12"
2533-
Padding="13,12" Margin="0,0,8,0"
2534-
ToolTip="{Binding OutOfSequenceText}">
2528+
2529+
<Border Background="#0F2538" BorderBrush="#294864" BorderThickness="1"
2530+
CornerRadius="9" Padding="12,10" Margin="0,0,8,0"
2531+
ToolTip="Discontinuous smpCnt transitions for the selected SV stream. Not the number of missing samples.">
25352532
<StackPanel>
2536-
<TextBlock Text="SEQUENCE" Foreground="#91B3CF"
2537-
FontSize="10.5" FontWeight="SemiBold"/>
2538-
<TextBlock Text="{Binding SmcCntStatus}"
2539-
Foreground="#F2F8FF" FontSize="17"
2540-
FontWeight="SemiBold"
2541-
Margin="0,8,0,5"
2542-
TextTrimming="CharacterEllipsis"/>
2543-
<TextBlock Text="{Binding PacketLossText}"
2544-
Foreground="#A7C2D9" FontSize="11.5"
2545-
TextTrimming="CharacterEllipsis"
2546-
ToolTip="{Binding ExpectedDeltaText}"/>
2533+
<TextBlock Text="SMP COUNT JUMPS" Foreground="#9BC7E4" FontSize="10.5"
2534+
FontWeight="SemiBold"/>
2535+
<TextBlock Text="{Binding Diagnostics.SvSequenceJumpsText}"
2536+
Foreground="#F3F9FF" FontSize="20" FontWeight="SemiBold"
2537+
FontFamily="Consolas" Margin="0,6,0,4"/>
2538+
<TextBlock Text="{Binding Diagnostics.SvSequenceEvidenceText}"
2539+
Foreground="#B9D1E5" FontSize="11.5"
2540+
TextWrapping="Wrap"/>
2541+
<TextBlock Text="{Binding SmcCntStatus, StringFormat=\'Continuity: {0}\'}"
2542+
Foreground="#9EBAD1" FontSize="11" Margin="0,3,0,0"/>
25472543
</StackPanel>
25482544
</Border>
2549-
<Border Background="#0F2538" BorderBrush="#294864"
2550-
BorderThickness="1" CornerRadius="12"
2551-
Padding="13,12" Margin="0,0,8,0"
2552-
ToolTip="{Binding CaptureTimingCautionText}">
2545+
2546+
<Border Background="#0F2538" BorderBrush="#294864" BorderThickness="1"
2547+
CornerRadius="9" Padding="12,10" Margin="0,0,8,0"
2548+
ToolTip="Missing sample count comes from selected SV smpCnt continuity; decoder rejects are capture-wide.">
25532549
<StackPanel>
2554-
<TextBlock Text="CAPTURE PATH" Foreground="#91B3CF"
2555-
FontSize="10.5" FontWeight="SemiBold"/>
2556-
<TextBlock Text="{Binding NetworkHealthText}"
2557-
Foreground="#F2F8FF" FontSize="17"
2558-
FontWeight="SemiBold"
2559-
Margin="0,8,0,5"
2560-
TextTrimming="CharacterEllipsis"/>
2561-
<TextBlock Text="{Binding Diagnostics.CaptureDropEvidenceText}"
2562-
Foreground="#A7C2D9" FontSize="11.5"
2563-
TextTrimming="CharacterEllipsis"
2564-
ToolTip="{Binding AdapterTimingRiskText}"/>
2550+
<TextBlock Text="MISSING SAMPLES" Foreground="#9BC7E4" FontSize="10.5"
2551+
FontWeight="SemiBold"/>
2552+
<TextBlock Text="{Binding Diagnostics.SvMissingSamplesText}"
2553+
Foreground="#F3F9FF" FontSize="20" FontWeight="SemiBold"
2554+
FontFamily="Consolas" Margin="0,6,0,4"/>
2555+
<TextBlock Text="{Binding PacketRateText}"
2556+
Foreground="#B9D1E5" FontSize="11.5"/>
2557+
<TextBlock Text="{Binding Diagnostics.SvDecodeRejectText}"
2558+
Foreground="#9EBAD1" FontSize="11" Margin="0,3,0,0"
2559+
TextWrapping="Wrap"/>
25652560
</StackPanel>
25662561
</Border>
2567-
<Border Background="#0F2538" BorderBrush="#294864"
2568-
BorderThickness="1" CornerRadius="12"
2569-
Padding="13,12" Margin="0"
2570-
ToolTip="{Binding FrequencyStabilityText}">
2562+
2563+
<Border Background="#0F2538" BorderBrush="#294864" BorderThickness="1"
2564+
CornerRadius="9" Padding="12,10"
2565+
ToolTip="{Binding Diagnostics.ValidityText}">
25712566
<StackPanel>
2572-
<TextBlock Text="SIGNAL" Foreground="#91B3CF"
2573-
FontSize="10.5" FontWeight="SemiBold"/>
2574-
<TextBlock Text="{Binding SignalHealthText}"
2575-
Foreground="#F2F8FF" FontSize="17"
2576-
FontWeight="SemiBold"
2577-
Margin="0,8,0,5"
2578-
TextTrimming="CharacterEllipsis"/>
2579-
<TextBlock Text="{Binding VoltageBalanceText}"
2580-
Foreground="#A7C2D9" FontSize="11.5"
2581-
TextTrimming="CharacterEllipsis"
2582-
ToolTip="{Binding TimingMetricText}"/>
2567+
<TextBlock Text="SV QUALITY / SYNC" Foreground="#9BC7E4" FontSize="10.5"
2568+
FontWeight="SemiBold"/>
2569+
<TextBlock Text="{Binding Diagnostics.SvQualityHeadlineText}"
2570+
FontSize="20" FontWeight="SemiBold"
2571+
Margin="0,6,0,4" TextTrimming="CharacterEllipsis">
2572+
<TextBlock.Style>
2573+
<Style TargetType="TextBlock">
2574+
<Setter Property="Foreground" Value="#F3C76D"/>
2575+
<Style.Triggers>
2576+
<DataTrigger Binding="{Binding Diagnostics.SvQualityHeadlineText}" Value="GOOD">
2577+
<Setter Property="Foreground" Value="#74D9AA"/>
2578+
</DataTrigger>
2579+
<DataTrigger Binding="{Binding Diagnostics.SvQualityHeadlineText}" Value="INVALID">
2580+
<Setter Property="Foreground" Value="#FF8484"/>
2581+
</DataTrigger>
2582+
</Style.Triggers>
2583+
</Style>
2584+
</TextBlock.Style>
2585+
</TextBlock>
2586+
<TextBlock Text="{Binding Diagnostics.SvQualityEvidenceText}"
2587+
Foreground="#B9D1E5" FontSize="11"
2588+
TextWrapping="Wrap" ToolTip="{Binding Diagnostics.ValidityText}"/>
25832589
</StackPanel>
25842590
</Border>
25852591
</UniformGrid>
@@ -2831,29 +2837,48 @@
28312837
</Grid>
28322838
</Border>
28332839

2834-
<Border Grid.Row="5"
2835-
Style="{StaticResource DenseGroupBorderStyle}"
2836-
Padding="12,10"
2837-
Margin="0,14,0,14">
2840+
<!-- Selected SV evidence stays visible; PTP is already covered
2841+
by the separate Timing/PTP tab. -->
2842+
<Border Grid.Row="5" Background="#0A1C2D" BorderBrush="#24415C"
2843+
BorderThickness="1" CornerRadius="9" Padding="12,9"
2844+
Margin="0,12,0,12">
2845+
<Border.Style>
2846+
<Style TargetType="Border">
2847+
<Setter Property="Visibility" Value="Collapsed"/>
2848+
<Style.Triggers>
2849+
<DataTrigger Binding="{Binding SelectedDiagnosticTarget.Protocol}" Value="SV">
2850+
<Setter Property="Visibility" Value="Visible"/>
2851+
</DataTrigger>
2852+
</Style.Triggers>
2853+
</Style>
2854+
</Border.Style>
28382855
<Grid>
28392856
<Grid.ColumnDefinitions>
2840-
<ColumnDefinition Width="180"/>
2841-
<ColumnDefinition Width="*"/>
2842-
<ColumnDefinition Width="*"/>
2857+
<ColumnDefinition Width="1.05*"/>
2858+
<ColumnDefinition Width="1.45*"/>
2859+
<ColumnDefinition Width="1.15*"/>
28432860
</Grid.ColumnDefinitions>
28442861
<StackPanel Grid.Column="0">
2845-
<TextBlock Text="TIMING REFERENCE" Foreground="#8FAAC3" FontSize="10.5" FontWeight="SemiBold"/>
2846-
<TextBlock Text="{Binding PtpStatusText}" Foreground="#FFFFFF" FontSize="15" FontWeight="Bold" TextWrapping="Wrap" Margin="0,4,0,0"/>
2862+
<TextBlock Text="SV CAPTURE EVIDENCE" Foreground="#9BC7E4"
2863+
FontSize="10.5" FontWeight="SemiBold"/>
2864+
<TextBlock Text="{Binding Diagnostics.SvArrivalIntervalText}"
2865+
FontSize="11.5" Foreground="#E3F1FB"
2866+
Margin="0,5,6,0" TextWrapping="Wrap"/>
28472867
</StackPanel>
2848-
<StackPanel Grid.Column="1" Margin="14,0,10,0">
2849-
<TextBlock Text="{Binding PtpDomainText}" Foreground="#D6E8F8" FontSize="11.5"/>
2850-
<TextBlock Text="{Binding PtpGrandmasterText}" Foreground="#D6E8F8" FontSize="11.5" TextWrapping="Wrap" Margin="0,3,0,0"/>
2851-
<TextBlock Text="{Binding PtpClockQualityText}" Foreground="#8FAAC3" FontSize="11" TextWrapping="Wrap" Margin="0,3,0,0"/>
2868+
<StackPanel Grid.Column="1" Margin="10,0,10,0">
2869+
<TextBlock Text="TIMESTAMP AUTHORITY" Foreground="#9BC7E4"
2870+
FontSize="10.5" FontWeight="SemiBold"/>
2871+
<TextBlock Text="{Binding Diagnostics.SvArrivalAuthorityText}"
2872+
FontSize="11.5" Foreground="#D1E4F3"
2873+
Margin="0,5,0,0" TextWrapping="Wrap"/>
28522874
</StackPanel>
28532875
<StackPanel Grid.Column="2">
2854-
<TextBlock Text="{Binding PtpRateText}" Foreground="#D6E8F8" FontSize="11.5" TextWrapping="Wrap"/>
2855-
<TextBlock Text="{Binding PtpProfileText}" Foreground="#8FAAC3" FontSize="11" TextWrapping="Wrap" Margin="0,3,0,0"/>
2856-
<TextBlock Text="{Binding TimingMetricText}" Foreground="#8FAAC3" FontSize="11" TextWrapping="Wrap" Margin="0,3,0,0"/>
2876+
<TextBlock Text="NIC / CAPTURE DROPS" Foreground="#9BC7E4"
2877+
FontSize="10.5" FontWeight="SemiBold"/>
2878+
<TextBlock Text="{Binding Diagnostics.CaptureDropEvidenceText}"
2879+
FontSize="11.5" Foreground="#D1E4F3"
2880+
Margin="0,5,0,0" TextWrapping="Wrap"
2881+
ToolTip="{Binding AdapterTimingRiskText}"/>
28572882
</StackPanel>
28582883
</Grid>
28592884
</Border>

0 commit comments

Comments
 (0)