Skip to content

Commit 2b40a9a

Browse files
committed
Document DynamicDevice in README
#37 non-breaking
1 parent 720fedd commit 2b40a9a

1 file changed

Lines changed: 54 additions & 7 deletions

File tree

README.md

Lines changed: 54 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,13 @@ using SharpBrick.PoweredUp.WinRT; // for WinRT Bluetooth NuGet
2323
## Discovering Hubs
2424

2525
````csharp
26-
var poweredUpBluetoothAdapter = new WinRTPoweredUpBluetoothAdapter();
27-
28-
var host = new PoweredUpHost(poweredUpBluetoothAdapter);
26+
var serviceProvider = new ServiceCollection()
27+
.AddLogging()
28+
.AddPoweredUp()
29+
.AddSingleton<IPoweredUpBluetoothAdapter, WinRTPoweredUpBluetoothAdapter>() // using WinRT Bluetooth on Windows
30+
.BuildServiceProvider();
31+
32+
var host = serviceProvider.GetService<PoweredUpHost>();
2933

3034
var cts = new CancellationTokenSource();
3135
host.Discover(async hub =>
@@ -50,13 +54,11 @@ cts.Cancel();
5054
See source code in `examples/SharpBrick.PoweredUp.Examples` for more examples.
5155

5256
````csharp
53-
var host = new PoweredUpHost();
54-
55-
// do discovery before
57+
// do hub discovery before
5658
5759
using (var technicMediumHub = host.FindByType<TechnicMediumHub>())
5860
{
59-
// optionally verify if everything is wired up correctly (v1.1 onwards)
61+
// optionally verify if everything is wired up correctly (v2.0 onwards)
6062
await technicMediumHub.VerifyDeploymentModelAsync(modelBuilder => modelBuilder
6163
.AddHub<TechnicMediumHub>(hubBuilder => hubBuilder
6264
.AddDevice<TechnicXLargeLinearMotor>(technicMediumHub.A)
@@ -91,6 +93,48 @@ disposable.Dispose();
9193
Console.WriteLine(motor.AbsolutePosition);
9294
````
9395

96+
## Connecting to an unknown device
97+
98+
***Note:** Starting version 2.0*
99+
100+
````csharp
101+
// deployment model verification with unknown devices
102+
await technicMediumHub.VerifyDeploymentModelAsync(mb => mb
103+
.AddAnyHub(hubBuilder => hubBuilder
104+
.AddAnyDevice(0))
105+
);
106+
107+
var dynamicDeviceWhichIsAMotor = technicMediumHub.Port(0).GetDevice<DynamicDevice>();
108+
109+
// or also direct from a protocol
110+
//var dynamicDeviceWhichIsAMotor = new DynamicDevice(technicMediumHub.Protocol, technicMediumHub.HubId, 0);
111+
112+
// discover the unknown device using the LWP (since no cached metadata available)
113+
await dynamicDeviceWhichIsAMotor.DiscoverAsync();
114+
115+
// use combined mode values from the device
116+
await dynamicDeviceWhichIsAMotor.TryLockDeviceForCombinedModeNotificationSetupAsync(2, 3);
117+
await dynamicDeviceWhichIsAMotor.SetupNotificationAsync(2, true);
118+
await dynamicDeviceWhichIsAMotor.SetupNotificationAsync(3, true);
119+
await dynamicDeviceWhichIsAMotor.UnlockFromCombinedModeNotificationSetupAsync(true);
120+
121+
// get the individual modes for input and output
122+
var powerMode = dynamicDeviceWhichIsAMotor.SingleValueMode<sbyte>(0);
123+
var posMode = dynamicDeviceWhichIsAMotor.SingleValueMode<int>(2);
124+
var aposMode = dynamicDeviceWhichIsAMotor.SingleValueMode<short>(3);
125+
126+
// use their observables to report values
127+
using var disposable = posMode.Observable.Subscribe(x => Console.WriteLine($"Position: {x.SI} / {x.Pct}"));
128+
using var disposable2 = aposMode.Observable.Subscribe(x => Console.WriteLine($"Absolute Position: {x.SI} / {x.Pct}"));
129+
130+
// or even write to them
131+
await powerMode.WriteDirectModeDataAsync(0x64); // That is StartPower(100%) on a motor
132+
await Task.Delay(2_000);
133+
await powerMode.WriteDirectModeDataAsync(0x00); // That is Stop on a motor
134+
135+
Console.WriteLine($"Or directly read the latest value: {aposMode.SI} / {aposMode.Pct}%");
136+
````
137+
94138
## Connect to Hub and Send a Message and retrieving answers (directly on protocol layer)
95139

96140
````csharp
@@ -164,6 +208,9 @@ using (var kernel = new BluetoothKernel(poweredUpBluetoothAdapter, bluetoothAddr
164208
- Protocol
165209
- [X] Message Encoding (98% [spec coverage](docs/specification/coverage.md))
166210
- [X] Knowledge
211+
- Features
212+
- [X] Dynamic Device
213+
- [X] Deployment Verifier
167214
- Command Line (`dotnet install -g SharpBrick.PoweredUp.Cli`)
168215
- [X] `poweredup device list` (discover all connected devices and their port (mode) properties)
169216
- [X] `poweredup device dump-static-port -p <port number>` (see [adding new devices tutorial](docs/development/adding-new-device.md))

0 commit comments

Comments
 (0)