@@ -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
3034var cts = new CancellationTokenSource ();
3135host .Discover (async hub =>
@@ -50,13 +54,11 @@ cts.Cancel();
5054See 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
5759using (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();
9193Console .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 (0x 64 ); // That is StartPower(100%) on a motor
132+ await Task .Delay (2_ 000 );
133+ await powerMode .WriteDirectModeDataAsync (0x 00 ); // 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