Skip to content

Commit 445d7ff

Browse files
committed
Implemented GetDeviceCapabilities and updated MAUI example.
1 parent 18fd4f6 commit 445d7ff

File tree

13 files changed

+117
-35
lines changed

13 files changed

+117
-35
lines changed

AntRadioInterface/IAntRadio.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,20 +186,20 @@ public interface IAntRadio
186186
/// <returns>
187187
/// Device capabilities
188188
/// </returns>
189-
DeviceCapabilities GetDeviceCapabilities();
189+
Task<DeviceCapabilities> GetDeviceCapabilities();
190190
/// <summary>Gets the device capabilities.</summary>
191191
/// <param name="forceNewCopy">if set to <c>true</c> [force new copy].</param>
192192
/// <param name="responseWaitTime">The response wait time.</param>
193193
/// <returns>
194194
/// Device capabilities
195195
/// </returns>
196-
DeviceCapabilities GetDeviceCapabilities(bool forceNewCopy, uint responseWaitTime);
196+
Task<DeviceCapabilities> GetDeviceCapabilities(bool forceNewCopy, uint responseWaitTime);
197197
/// <summary>Gets the device capabilities.</summary>
198198
/// <param name="responseWaitTime">The response wait time.</param>
199199
/// <returns>
200200
/// Device capabilities
201201
/// </returns>
202-
DeviceCapabilities GetDeviceCapabilities(uint responseWaitTime);
202+
Task<DeviceCapabilities> GetDeviceCapabilities(uint responseWaitTime);
203203
/// <summary>Gets the number channels.</summary>
204204
/// <value>The number channels.</value>
205205
int NumChannels { get; }

Examples/AntUsbStick/AntRadio.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,21 +83,21 @@ public void Dispose()
8383
public IAntChannel GetChannel(int num) => new AntChannel(antDevice.getChannel(num), _loggerFactory.CreateLogger<AntChannel>());
8484

8585
/// <inheritdoc/>
86-
public DeviceCapabilities GetDeviceCapabilities()
86+
public Task<DeviceCapabilities> GetDeviceCapabilities()
8787
{
88-
return new UsbDeviceCapabilities(antDevice.getDeviceCapabilities());
88+
return Task.FromResult(new UsbDeviceCapabilities(antDevice.getDeviceCapabilities()) as DeviceCapabilities);
8989
}
9090

9191
/// <inheritdoc/>
92-
public DeviceCapabilities GetDeviceCapabilities(bool forceNewCopy, uint responseWaitTime)
92+
public Task<DeviceCapabilities> GetDeviceCapabilities(bool forceNewCopy, uint responseWaitTime)
9393
{
94-
return new UsbDeviceCapabilities(antDevice.getDeviceCapabilities(forceNewCopy, responseWaitTime));
94+
return Task.FromResult(new UsbDeviceCapabilities(antDevice.getDeviceCapabilities(forceNewCopy, responseWaitTime)) as DeviceCapabilities);
9595
}
9696

9797
/// <inheritdoc/>
98-
public DeviceCapabilities GetDeviceCapabilities(uint responseWaitTime)
98+
public Task<DeviceCapabilities> GetDeviceCapabilities(uint responseWaitTime)
9999
{
100-
return new UsbDeviceCapabilities(antDevice.getDeviceCapabilities(responseWaitTime));
100+
return Task.FromResult(new UsbDeviceCapabilities(antDevice.getDeviceCapabilities(responseWaitTime)) as DeviceCapabilities);
101101
}
102102

103103
/// <inheritdoc/>

Examples/MAUI-gRPC/AntGrpcServer/Services/AntRadioService.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,23 +44,23 @@ public override Task<GetChannelReply> GetChannel(GetChannelRequest request, Serv
4444
return Task.FromResult(new GetChannelReply());
4545
}
4646

47-
public override Task<GetDeviceCapabilitiesReply> GetDeviceCapabilities(GetDeviceCapabilitiesRequest request, ServerCallContext context)
47+
public override async Task<GetDeviceCapabilitiesReply> GetDeviceCapabilities(GetDeviceCapabilitiesRequest request, ServerCallContext context)
4848
{
4949
DeviceCapabilities capabilities;
5050
if (request.HasForceCopy && request.HasWaitResponseTime)
5151
{
52-
capabilities = _antRadio.GetDeviceCapabilities(request.ForceCopy, request.WaitResponseTime);
52+
capabilities = await _antRadio.GetDeviceCapabilities(request.ForceCopy, request.WaitResponseTime);
5353
}
5454
else if (request.HasWaitResponseTime)
5555
{
56-
capabilities = _antRadio.GetDeviceCapabilities(request.WaitResponseTime);
56+
capabilities = await _antRadio.GetDeviceCapabilities(request.WaitResponseTime);
5757
}
5858
else
5959
{
60-
capabilities = _antRadio.GetDeviceCapabilities();
60+
capabilities = await _antRadio.GetDeviceCapabilities();
6161
}
6262

63-
return Task.FromResult(new GetDeviceCapabilitiesReply
63+
return new GetDeviceCapabilitiesReply
6464
{
6565
MaxAntChannels = capabilities.MaxANTChannels,
6666
MaxNetworks = capabilities.MaxNetworks,
@@ -91,7 +91,7 @@ public override Task<GetDeviceCapabilitiesReply> GetDeviceCapabilities(GetDevice
9191
SelectiveDataUpdate = capabilities.SelectiveDataUpdate,
9292
SingleChannelEncryption = capabilities.SingleChannelEncryption,
9393
MaxDataChannels = capabilities.MaxDataChannels
94-
});
94+
};
9595
}
9696
}
9797
}

Examples/MAUI-gRPC/MauiAntClientApp/AppShell.xaml.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public AppShell()
1313
InitializeComponent();
1414

1515
// initialize routing
16+
Routing.RegisterRoute("RadioCapabilities", typeof(RadioCapabilitiesPage));
1617
Routing.RegisterRoute("AssetTracker", typeof(AssetTrackerPage));
1718
Routing.RegisterRoute("BicyclePower", typeof(BicyclePowerPage));
1819
Routing.RegisterRoute("BikeCadence", typeof(BikeCadencePage));

Examples/MAUI-gRPC/MauiAntClientApp/MauiAntClientApp.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,9 @@
182182
<MauiXaml Update="Views\MuscleOxygenPage.xaml">
183183
<Generator>MSBuild:Compile</Generator>
184184
</MauiXaml>
185+
<MauiXaml Update="Views\RadioCapabilitiesPage.xaml">
186+
<Generator>MSBuild:Compile</Generator>
187+
</MauiXaml>
185188
<MauiXaml Update="Views\StrideBasedMonitorPage.xaml">
186189
<Generator>MSBuild:Compile</Generator>
187190
</MauiXaml>

Examples/MAUI-gRPC/MauiAntClientApp/MauiProgram.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ private static MauiAppBuilder RegisterAppServices(this MauiAppBuilder mauiAppBui
4747
private static MauiAppBuilder RegisterViewModels(this MauiAppBuilder mauiAppBuilder)
4848
{
4949
mauiAppBuilder.Services.AddSingleton<HomePageViewModel>();
50+
mauiAppBuilder.Services.AddTransient<RadioCapabilitiesViewModel>();
5051
mauiAppBuilder.Services.AddTransient<AssetTrackerViewModel>();
5152
mauiAppBuilder.Services.AddTransient<BicyclePowerViewModel>();
5253
mauiAppBuilder.Services.AddTransient<BikeCadenceViewModel>();
@@ -64,6 +65,7 @@ private static MauiAppBuilder RegisterViewModels(this MauiAppBuilder mauiAppBuil
6465
private static MauiAppBuilder RegisterViews(this MauiAppBuilder mauiAppBuilder)
6566
{
6667
mauiAppBuilder.Services.AddTransient<HomePage>();
68+
mauiAppBuilder.Services.AddTransient<RadioCapabilitiesPage>();
6769
mauiAppBuilder.Services.AddTransient<AssetTrackerPage>();
6870
mauiAppBuilder.Services.AddTransient<BicyclePowerPage>();
6971
mauiAppBuilder.Services.AddTransient<BikeCadencePage>();

Examples/MAUI-gRPC/MauiAntClientApp/Services/AntRadioService.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,21 +109,21 @@ public IAntChannel GetChannel(int num)
109109
throw new NotImplementedException();
110110
}
111111

112-
public DeviceCapabilities GetDeviceCapabilities()
112+
public async Task<DeviceCapabilities> GetDeviceCapabilities()
113113
{
114-
GetDeviceCapabilitiesReply caps = _client!.GetDeviceCapabilities(new GetDeviceCapabilitiesRequest());
114+
GetDeviceCapabilitiesReply caps = await _client!.GetDeviceCapabilitiesAsync(new GetDeviceCapabilitiesRequest());
115115
return new GrpcDeviceCapabilities(caps);
116116
}
117117

118-
public DeviceCapabilities GetDeviceCapabilities(bool forceNewCopy, uint responseWaitTime)
118+
public async Task<DeviceCapabilities> GetDeviceCapabilities(bool forceNewCopy, uint responseWaitTime)
119119
{
120-
GetDeviceCapabilitiesReply caps = _client!.GetDeviceCapabilities(new GetDeviceCapabilitiesRequest { ForceCopy = forceNewCopy, WaitResponseTime = responseWaitTime });
120+
GetDeviceCapabilitiesReply caps = await _client!.GetDeviceCapabilitiesAsync(new GetDeviceCapabilitiesRequest { ForceCopy = forceNewCopy, WaitResponseTime = responseWaitTime });
121121
return new GrpcDeviceCapabilities(caps);
122122
}
123123

124-
public DeviceCapabilities GetDeviceCapabilities(uint responseWaitTime)
124+
public async Task<DeviceCapabilities> GetDeviceCapabilities(uint responseWaitTime)
125125
{
126-
GetDeviceCapabilitiesReply caps = _client!.GetDeviceCapabilities(new GetDeviceCapabilitiesRequest { WaitResponseTime = responseWaitTime });
126+
GetDeviceCapabilitiesReply caps = await _client!.GetDeviceCapabilitiesAsync(new GetDeviceCapabilitiesRequest { WaitResponseTime = responseWaitTime });
127127
return new GrpcDeviceCapabilities(caps);
128128
}
129129

Examples/MAUI-gRPC/MauiAntClientApp/ViewModels/HomePageViewModel.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public partial class HomePageViewModel(ILogger<HomePageViewModel> logger, IAntRa
2020
private readonly IServiceProvider _services = services;
2121

2222
[ObservableProperty]
23+
[NotifyCanExecuteChangedFor(nameof(ShowRadioCapabilitiesCommand))]
2324
private bool isBusy;
2425
[ObservableProperty]
2526
private IPAddress? serverIPAddress;
@@ -31,8 +32,6 @@ public partial class HomePageViewModel(ILogger<HomePageViewModel> logger, IAntRa
3132
private string? hostVersion;
3233
[ObservableProperty]
3334
public AntDeviceCollection? antDevices;
34-
[ObservableProperty]
35-
public DeviceCapabilities? deviceCapabilities;
3635

3736
public async Task SearchAsync()
3837
{
@@ -47,10 +46,15 @@ public async Task SearchAsync()
4746
AntDevices = _services.GetRequiredService<AntDeviceCollection>();
4847
}
4948

50-
[RelayCommand]
51-
private void GetRadioCapabilities()
49+
[RelayCommand(CanExecute = nameof(CanShowRadioCapabilities))]
50+
private static async Task ShowRadioCapabilities()
51+
{
52+
await Shell.Current.GoToAsync("RadioCapabilities");
53+
}
54+
55+
private bool CanShowRadioCapabilities()
5256
{
53-
DeviceCapabilities = _antRadioService.GetDeviceCapabilities();
57+
return !IsBusy;
5458
}
5559

5660
[RelayCommand]
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using CommunityToolkit.Mvvm.ComponentModel;
2+
using SmallEarthTech.AntRadioInterface;
3+
4+
namespace MauiAntClientApp.ViewModels
5+
{
6+
public partial class RadioCapabilitiesViewModel : ObservableObject
7+
{
8+
[ObservableProperty]
9+
private DeviceCapabilities? capabilities;
10+
11+
[ObservableProperty]
12+
private List<string> flags = [];
13+
14+
public RadioCapabilitiesViewModel(IAntRadio radioService)
15+
{
16+
Task.Run(async () =>
17+
{
18+
Capabilities = await radioService.GetDeviceCapabilities();
19+
Flags = Capabilities.GetType().GetProperties().
20+
Where(t => t.PropertyType == typeof(bool) && (bool)t.GetValue(capabilities)!).
21+
ToList().
22+
ConvertAll<string>(e => e.Name);
23+
Flags.Sort();
24+
});
25+
}
26+
}
27+
}

Examples/MAUI-gRPC/MauiAntClientApp/Views/HomePage.xaml

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,16 @@
1414
</ContentPage.Resources>
1515
<Grid Margin="16" RowDefinitions="Auto, *">
1616
<Frame>
17-
<StackLayout>
18-
<Label Text="{Binding ServerIPAddress, StringFormat='ANT Radio Server - {0}'}"/>
19-
<BoxView BackgroundColor="Black" HeightRequest="2" HorizontalOptions="Fill"/>
20-
<Label Text="{Binding ProductDescription, StringFormat='Description - {0}'}"/>
21-
<Label Text="{Binding SerialString, StringFormat='Serial Number - {0}'}"/>
22-
<Label Text="{Binding HostVersion, StringFormat='Host Version - {0}'}"/>
23-
</StackLayout>
17+
<Grid ColumnDefinitions="*, Auto">
18+
<StackLayout>
19+
<Label Text="{Binding ServerIPAddress, StringFormat='ANT Radio Server - {0}'}"/>
20+
<BoxView BackgroundColor="Black" HeightRequest="2" HorizontalOptions="Fill"/>
21+
<Label Text="{Binding ProductDescription, StringFormat='Description - {0}'}"/>
22+
<Label Text="{Binding SerialString, StringFormat='Serial Number - {0}'}"/>
23+
<Label Text="{Binding HostVersion, StringFormat='Host Version - {0}'}"/>
24+
</StackLayout>
25+
<ImageButton Source="more_arrow.png" Aspect="AspectFill" Background="Transparent" Grid.Column="2" HeightRequest="40" WidthRequest="40" Command="{Binding ShowRadioCapabilitiesCommand}"/>
26+
</Grid>
2427
</Frame>
2528
<Frame Grid.Row="1">
2629
<StackLayout>

0 commit comments

Comments
 (0)