Hsm.Bluetooth.Writer
1.0.0
dotnet add package Hsm.Bluetooth.Writer --version 1.0.0
NuGet\Install-Package Hsm.Bluetooth.Writer -Version 1.0.0
<PackageReference Include="Hsm.Bluetooth.Writer" Version="1.0.0" />
paket add Hsm.Bluetooth.Writer --version 1.0.0
#r "nuget: Hsm.Bluetooth.Writer, 1.0.0"
// Install Hsm.Bluetooth.Writer as a Cake Addin #addin nuget:?package=Hsm.Bluetooth.Writer&version=1.0.0 // Install Hsm.Bluetooth.Writer as a Cake Tool #tool nuget:?package=Hsm.Bluetooth.Writer&version=1.0.0
Abstract
Hagleitner provides this library for writing device-settings to devices produced by Hagleitner.
This document introduces what the libary can do and how to use it.
The library Hsm.Bluetooth.Writer
is abailiable on nuget.org
Capabilities
The library handles device discovery and configuring of devices to specific usage scenarios.
Device discovery
Device discovery is needed to be able to connect to bluetooth devices. For device discovery there are two options:
- Discovery can be requested on demand (lazyLoading)
- Discovery can be continuously be performed in the background (eagerLoading) All performed scans will cache the discovered devices in the background for better performance. For performance reasons it is recommended to use eagerLoading.
Device verification
Before writing it is ensured that the device belongs to the OEM-partner for which this library has been compiled.
If it does not it will return the ErrorCode OemTypeSettingsNotAllowed
Configuring device to a usage scenario
To configure a device to a specific usage scenario mulitple values are written to the device. The library is designed to support specific usage scenarios for specific device types. The values for a specific usage scenario are predefined by the library. The values will be read after writing to ensure a successful transmission.
Currently the following device types and usage scenarios are supported:
- Level Unit Hybrid
IBluetoothDeviceWriter.WriteLevelUnitConfigurationOneAsync
- Maximum Distance: 450mm
- Threshold 0 Distance: 210mm
- Threshold 1 Distance: 450mm
- Operation Mode: OPERATION_MODE_VACANCY_DETECTION_2 (full/low/empty)
- TimeSecondsSetting: 100s
IBluetoothDeviceWriter.WriteLevelUnitConfigurationTwoAsync
- Maximum Distance: 450mm
- Threshold 0 Distance: 100mm
- Threshold 1 Distance: 110mm
- Operation Mode: OPERATION_MODE_VACANCY_DETECTION_2 (full/low/empty)
- TimeSecondsSetting: 100s
Usage
The library supports logging via ILogger interface.
Logs of the library have to be stored so that hagleitner can support in case of problems.
Logging level has to be at least of level Information
.
Instances of IBluetoothDeviceWriter
s should be disposed after a single write-function execution.
Usages on write-functions must not be concurrent. Concurrent usage might lead to corrupted data.
Sample Application
private static async Task Main(string[] args)
{
var host = Host.CreateDefaultBuilder(args)
.ConfigureServices((_, services) =>
{
services.AddLogging();
//Register Bluetooth Services
services.RegisterBluetoothWriterServices(true);
}).Build();
await host.StartAsync();
var logger = host.Services.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Starting...");
var qrCodeString = "50-02-2008-411120940000\r\n220114ML10042\r\na42f277c9544aaa7";
if (!QrCodeFactory.TryCreateQrCode(qrCodeString, out var qrCode) || qrCode is not IEuiQrCode euiQrCode)
{
//Handle Error
return;
}
await WriteToDeviceAsync(host, euiQrCode.Eui, default);
logger.LogInformation("Completed");
await host.StopAsync();
}
private static async Task WriteToDeviceAsync(IHost host, IEui eui, CancellationToken cancellationToken)
{
//use one scope per bluetoothDevice-Request and dispose it after use
await using var scope = host.Services.CreateAsyncScope();
var bluetoothWriter = scope.ServiceProvider.GetRequiredService<IBluetoothDeviceWriter>();
//Write to the Device
var completionResult = await bluetoothWriter.WriteLevelUnitConfigurationOneAsync(eui, cancellationToken);
if (!completionResult.IsSuccessStatusCode())
{
//Writing to the device failed
//the error code gives information about what issue occurred.
var isTimeOutError = completionResult.ContainsErrorOfType(ErrorCode.TimeOutError);
}
}
If the application is using .NET6 it needs to target the Framework net6.0-windows10.0.19041
in the .csproj
<PropertyGroup>
<TargetFramework>net6.0-windows10.0.19041</TargetFramework>
</PropertyGroup>
System Setup
The system should run only using the Laird BT820
Bluetooth Dongle.
For this reason existing Bluetooth-Adapters need to be disalbed.
To disable a internal bluetoothadapter:
- Disable bluetooth in the bluetoothsettings
- Disable the bluetooth adapter in the devicemanager
After that you can plug in the dongle and start your application.
Requirements
- Windows10 (build 10.0.19041 or later)
- Bluetooth LE with
Laird BT820
- .NET 6 (net6.0-windows10.0.19041), .NET Core3.1 or .NET Framework 4.6.1
- A
Microsoft.Extensions.DependencyInjection.IServiceCollection
for DependencyInjection
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Hsm.BaseTypes (>= 4.0.0)
- InTheHand.BluetoothLE (>= 4.0.25)
- Microsoft.Bcl.AsyncInterfaces (>= 6.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 6.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 6.0.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.0 | 164 | 6/20/2023 |
1.0.0-beta.1 | 105 | 10/11/2022 |
1.0.0-beta.0 | 97 | 10/11/2022 |