Skip to content

Commit 0ab0aba

Browse files
authored
Merge pull request #20 from Z-bit-Systems-LLC/develop
Release 3.0.8
2 parents 9f0968f + 35777c9 commit 0ab0aba

14 files changed

+403
-76
lines changed

ci/testing.yml

+16-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,19 @@
1010
inputs:
1111
command: 'test'
1212
projects: 'test/*Tests/*.csproj'
13-
arguments: '--configuration $(buildConfiguration)'
13+
arguments: '--configuration $(buildConfiguration) --collect:"XPlat Code Coverage"'
14+
15+
- task: reportgenerator@5
16+
displayName: 'Generate Code Coverage Report'
17+
inputs:
18+
reports: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'
19+
targetdir: '$(Build.SourcesDirectory)/coveragereport'
20+
reporttypes: 'Cobertura;HtmlInline_AzurePipelines'
21+
22+
- task: PublishCodeCoverageResults@2
23+
displayName: 'Publish Code Coverage Results'
24+
inputs:
25+
codeCoverageTool: 'Cobertura'
26+
summaryFileLocation: '$(Build.SourcesDirectory)/coveragereport/Cobertura.xml'
27+
reportDirectory: '$(Build.SourcesDirectory)/coveragereport'
28+
failIfCoverageEmpty: true # Optional: Makes the build fail if no coverage data is found

src/Core/Core.csproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
<RepositoryType>git</RepositoryType>
2020
<PublishRepositoryUrl>true</PublishRepositoryUrl>
2121
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
22-
<AssemblyVersion>3.0.7.0</AssemblyVersion>
23-
<FileVersion>3.0.7.0</FileVersion>
22+
<AssemblyVersion>3.0.8.0</AssemblyVersion>
23+
<FileVersion>3.0.8.0</FileVersion>
2424
<Platforms>AnyCPU;ARM64;x64</Platforms>
2525
</PropertyGroup>
2626

src/Core/Services/DeviceManagementService.cs

+2
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,8 @@ private async Task WaitUntilDeviceIsOffline()
239239

240240
await Task.Delay(TimeSpan.FromMilliseconds(100), cts.Token);
241241
}
242+
243+
await Task.Delay(TimeSpan.FromSeconds(1), cts.Token);
242244
}
243245

244246
/// <inheritdoc />

src/Core/ViewModels/Pages/ConnectViewModel.cs

+5-9
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public partial class ConnectViewModel : ObservableObject
1111
{
1212
private readonly IDialogService _dialogService;
1313
private readonly IDeviceManagementService _deviceManagementService;
14-
private ISerialPortConnectionService? _serialPortConnectionService;
14+
private ISerialPortConnectionService _serialPortConnectionService;
1515

1616
/// <summary>
1717
/// ViewModel for the Connect page.
@@ -77,7 +77,7 @@ private void DeviceManagementServiceOnNakReplyReceived(object? sender, string na
7777

7878
[ObservableProperty] private int _selectedBaudRate = 9600;
7979

80-
[ObservableProperty] private byte _selectedAddress;
80+
[ObservableProperty] private double _selectedAddress;
8181

8282
[ObservableProperty] private byte _connectedAddress;
8383

@@ -107,7 +107,6 @@ private async Task ScanSerialPorts()
107107
AvailableSerialPorts.Clear();
108108

109109
var serialPortConnectionService = _serialPortConnectionService;
110-
if (serialPortConnectionService == null) return;
111110

112111
var foundAvailableSerialPorts = await serialPortConnectionService.FindAvailableSerialPorts();
113112

@@ -135,7 +134,6 @@ await _dialogService.ShowMessageDialog("Error",
135134
private async Task DiscoverDevice(CancellationToken token)
136135
{
137136
var serialPortConnectionService = _serialPortConnectionService;
138-
if (serialPortConnectionService == null) return;
139137

140138
string serialPortName = SelectedSerialPort?.Name ?? string.Empty;
141139
if (string.IsNullOrWhiteSpace(serialPortName)) return;
@@ -173,7 +171,7 @@ private async Task DiscoverDevice(CancellationToken token)
173171
StatusText =
174172
$"Successfully discovered device {current.Connection.BaudRate} with address {current.Address}";
175173
StatusLevel = StatusLevel.Discovered;
176-
_serialPortConnectionService = current.Connection as ISerialPortConnectionService;
174+
if (current.Connection is ISerialPortConnectionService service) _serialPortConnectionService = service;
177175
ConnectedAddress = current.Address;
178176
ConnectedBaudRate = current.Connection.BaudRate;
179177
break;
@@ -225,7 +223,6 @@ private async Task DiscoverDevice(CancellationToken token)
225223
private async Task ConnectDevice()
226224
{
227225
var serialPortConnectionService = _serialPortConnectionService;
228-
if (serialPortConnectionService == null) return;
229226

230227
string serialPortName = SelectedSerialPort?.Name ?? string.Empty;
231228
if (string.IsNullOrWhiteSpace(serialPortName)) return;
@@ -252,9 +249,9 @@ await _dialogService.ShowMessageDialog("Connect", $"Invalid security key entered
252249

253250
await _deviceManagementService.Shutdown();
254251
await _deviceManagementService.Connect(
255-
serialPortConnectionService.GetConnection(serialPortName, SelectedBaudRate), SelectedAddress,
252+
serialPortConnectionService.GetConnection(serialPortName, SelectedBaudRate), (byte)SelectedAddress,
256253
UseSecureChannel, UseDefaultKey, securityKey);
257-
ConnectedAddress = SelectedAddress;
254+
ConnectedAddress = (byte)SelectedAddress;
258255
ConnectedBaudRate = SelectedBaudRate;
259256
}
260257
}
@@ -276,5 +273,4 @@ public enum StatusLevel
276273
Disconnected,
277274
ConnectingManually
278275
#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
279-
280276
}

src/Core/ViewModels/Pages/MonitorViewModel.cs

+9-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,15 @@ private void OnDeviceManagementServiceOnTraceEntryReceived(object? _, TraceEntry
4747
if (UsingSecureChannel) return;
4848

4949
var build = new PacketTraceEntryBuilder();
50-
var packetTraceEntry = build.FromTraceEntry(traceEntry, _lastPacketEntry).Build();
50+
PacketTraceEntry packetTraceEntry;
51+
try
52+
{
53+
packetTraceEntry = build.FromTraceEntry(traceEntry, _lastPacketEntry).Build();
54+
}
55+
catch (Exception)
56+
{
57+
return;
58+
}
5159

5260
bool notDisplaying = false;
5361
if (packetTraceEntry.Packet.CommandType == CommandType.Poll)

src/UI/Windows/Views/Controls/SetCommunicationControl.xaml

+4-2
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@
2020
<ComboBox Name="BaudRateComboBox"
2121
Margin="0 0 20 0"
2222
ItemsSource="{Binding AvailableBaudRates}"
23-
SelectedItem="{Binding SelectedBaudRate}"/>
23+
SelectedItem="{Binding SelectedBaudRate, Mode=TwoWay}"/>
2424
</StackPanel>
2525
<StackPanel Grid.Column="1" Orientation="Vertical">
2626
<Label Content="Address"
2727
Target="{Binding ElementName=BaudRateComboBox}" />
2828
<ui:NumberBox Name="AddressNumberBox"
29-
Value="{Binding SelectedAddress}"
29+
TextChanged="AddressNumberBox_OnTextChanged"
30+
ValueChanged="AddressNumberBox_OnValueChanged"
31+
Value="{Binding SelectedAddress, Mode=TwoWay}"
3032
Margin="0 0 20 0"
3133
Minimum="0"
3234
Maximum="127"

src/UI/Windows/Views/Controls/SetCommunicationControl.xaml.cs

+16-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using System.ComponentModel;
22
using System.Runtime.CompilerServices;
3+
using System.Windows.Controls;
4+
using Wpf.Ui.Controls;
35

46
namespace OSDPBench.Windows.Views.Controls;
57

@@ -10,8 +12,8 @@ public SetCommunicationControl(int[] availableBaudRates, uint connectedBaudRate,
1012
DataContext = this;
1113

1214
AvailableBaudRates = availableBaudRates;
13-
_selectedBaudRate = (int)connectedBaudRate;
14-
_selectedAddress = connectedAddress;
15+
SelectedBaudRate = (int)connectedBaudRate;
16+
SelectedAddress = connectedAddress;
1517

1618
InitializeComponent();
1719
}
@@ -25,8 +27,8 @@ public int SelectedBaudRate
2527
set => SetField(ref _selectedBaudRate, value);
2628
}
2729

28-
private byte _selectedAddress;
29-
public byte SelectedAddress
30+
private double _selectedAddress;
31+
public double SelectedAddress
3032
{
3133
get => _selectedAddress;
3234
set => SetField(ref _selectedAddress, value);
@@ -45,4 +47,14 @@ private void SetField<T>(ref T field, T value, [CallerMemberName] string? proper
4547
field = value;
4648
OnPropertyChanged(propertyName);
4749
}
50+
51+
private void AddressNumberBox_OnTextChanged(object sender, TextChangedEventArgs e)
52+
{
53+
SelectedAddress = AddressNumberBox.Value ?? 0;
54+
}
55+
56+
private void AddressNumberBox_OnValueChanged(object sender, NumberBoxValueChangedEventArgs args)
57+
{
58+
SelectedAddress = AddressNumberBox.Value ?? 0;
59+
}
4860
}

src/UI/Windows/Views/Pages/ConnectPage.xaml

+7-5
Original file line numberDiff line numberDiff line change
@@ -152,13 +152,15 @@
152152
<ComboBox Name="BaudRateComboBox"
153153
Margin="0 0 20 0"
154154
ItemsSource="{Binding ViewModel.AvailableBaudRates}"
155-
SelectedItem="{Binding ViewModel.SelectedBaudRate}"/>
155+
SelectedItem="{Binding Path=ViewModel.SelectedBaudRate, Mode=TwoWay}"/>
156156
</StackPanel>
157157
<StackPanel Grid.Row="0" Grid.Column="1" Orientation="Vertical">
158158
<Label Content="Address"
159159
Target="{Binding ElementName=AddressNumberBox}" />
160160
<ui:NumberBox Name="AddressNumberBox"
161-
Value="{Binding ViewModel.SelectedAddress}"
161+
Value="{Binding Path=ViewModel.SelectedAddress, Mode=TwoWay}"
162+
TextChanged="AddressNumberBox_OnTextChanged"
163+
ValueChanged="AddressNumberBox_OnValueChanged"
162164
Margin="0 0 20 0"
163165
Minimum="0"
164166
Maximum="127"
@@ -171,19 +173,19 @@
171173
<StackPanel Orientation="Horizontal">
172174
<CheckBox Name="UseSecureChannelCheckBox"
173175
Content="Use Secure Channel"
174-
IsChecked="{Binding ViewModel.UseSecureChannel}"/>
176+
IsChecked="{Binding Path=ViewModel.UseSecureChannel, Mode=TwoWay}"/>
175177

176178
<CheckBox Name="UseDefaultKeyCheckBox"
177179
Content="Use Default Key"
178180
Margin="10,0,0,0"
179181
IsEnabled="{Binding ElementName=UseSecureChannelCheckBox, Path=IsChecked}"
180-
IsChecked="{Binding ViewModel.UseDefaultKey}"/>
182+
IsChecked="{Binding Path=ViewModel.UseDefaultKey, Mode=TwoWay}"/>
181183
</StackPanel>
182184

183185
<StackPanel Orientation="Vertical">
184186
<Label Content="Security Key"
185187
Target="{Binding ElementName=AddressNumberBox}" />
186-
<TextBox Text="{Binding ViewModel.SecurityKey}">
188+
<TextBox Text="{Binding Path=ViewModel.SecurityKey, Mode=TwoWay}">
187189
<TextBox.Style>
188190
<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
189191
<!-- Only add the specific triggers needed -->

src/UI/Windows/Views/Pages/ConnectPage.xaml.cs

+13-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
using OSDPBench.Core.ViewModels.Pages;
1+
using System.Windows.Controls;
2+
using OSDPBench.Core.ViewModels.Pages;
23
using Wpf.Ui.Abstractions.Controls;
4+
using Wpf.Ui.Controls;
35

46
namespace OSDPBench.Windows.Views.Pages;
57

@@ -27,4 +29,14 @@ public ConnectPage(ConnectViewModel viewModel)
2729
public ConnectViewModel ViewModel { get; }
2830

2931
public IEnumerable<string> ConnectionTypes => ["Discover", "Manual"];
32+
33+
private void AddressNumberBox_OnTextChanged(object sender, TextChangedEventArgs e)
34+
{
35+
ViewModel.SelectedAddress = AddressNumberBox.Value ?? 0;
36+
}
37+
38+
private void AddressNumberBox_OnValueChanged(object sender, NumberBoxValueChangedEventArgs args)
39+
{
40+
ViewModel.SelectedAddress = AddressNumberBox.Value ?? 0;
41+
}
3042
}

src/UI/Windows/Views/Pages/ManagePage.xaml.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ private void SetCommunicationActionControl()
108108
{
109109
ViewModel.DeviceActionParameter = new CommunicationParameters(
110110
ViewModel.ConnectedPortName, (uint)actionControl.SelectedBaudRate,
111-
actionControl.SelectedAddress);
111+
(byte)actionControl.SelectedAddress);
112112
};
113113
DeviceActionControl.Children.Add(actionControl);
114114
}

src/UI/Windows/Windows.csproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
<AssemblyName>OSDPBench</AssemblyName>
1414
<RootNamespace>OSDPBench.Windows</RootNamespace>
1515
<StartupObject>OSDPBench.Windows.App</StartupObject>
16-
<AssemblyVersion>3.0.7.0</AssemblyVersion>
17-
<FileVersion>3.0.7.0</FileVersion>
16+
<AssemblyVersion>3.0.8.0</AssemblyVersion>
17+
<FileVersion>3.0.8.0</FileVersion>
1818
</PropertyGroup>
1919

2020
<ItemGroup>

test/Core.Tests/Core.Tests.csproj

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
</PropertyGroup>
1414

1515
<ItemGroup>
16+
<PackageReference Include="coverlet.collector" Version="6.0.4">
17+
<PrivateAssets>all</PrivateAssets>
18+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
19+
</PackageReference>
1620
<PackageReference Include="Moq" Version="4.20.72" />
1721
<PackageReference Include="nunit" Version="4.3.2" />
1822
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0">

0 commit comments

Comments
 (0)