Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The VictoR Windows Software Development Kit (SDK) allows developers to communicate with a VictoR device over Bluetooth Low Energy (BLE) and USB in C#. The following documentation will walk users through the workflow of connecting to a device, reading and writing data to the services of the VictoR device, and how to register for notifications should the state of the device or its services change while connected. Currently, only the Device Configuration and Device Information services are directly supported by the SDK.

Supported ICD Rev: GH1
Supported VictoR Firmware Revision:

  • Application Firmware Rev: 03.054 080

  • Co-Processor Firmware Rev: 01.001

  • Kernel Module Firmware Rev: 01.001

  • BLE Firmware Rev: 03.017032

SDK:

  • Minimum UWP: 10.0.10240.0

  • NetStandard 2.0.3

...

  • NLog: 4.7.15

  • Microsoft.Windows.SDK.Contracts: 10.0.22000.196

  • Crc32.Net: 3.0.2

Introduction

The Victor SDK is made up of two C# libraries, VictoRCore and VictoRCommunications. Both are essential in working with a VictoR device. It is important users add both libraries as dependencies for a C# project dealing with VictoR devices. If working in Visual Studio, the libraries can be added to the project by first navigating to the Project menu from the toolbar and selecting Add Project Reference.

...

The act of connecting and disconnecting to a device, as well as maintaining a record of connected devices, is handled by the device manager. Before any work can be done on reading, writing, and subscribing to services, users must first create and work with the device manager.

BLE
Code Block
languagec#
VictorBleDeviceManager m_deviceManager = new VictorBleDeviceManager();
USB
Code Block
languagec#
VictorUsbDeviceManager m_deviceManager = new VictorUsbDeviceManager();

Scanning for Devices

Once a VictorBleDeviceManager DeviceManager has been instantiated, a scan must be performed to identify any active VictoR devices accepting connections over bluetooththe device manager’s protocol. By default, scanning for devices is set to take 10 seconds, with a query for any devices with the term “victor” (BLE) or “WASP” (USB) in its name, with case sensitivity not taken into account. Once the scan has completed, a Set of VictorDeviceInfo objects is returned, which each contain the name and address of a VictoR device.

...

Additionally, users can choose to receive a callback during the act of scanning for devices, rather than having to wait for the scan to complete. Callbacks can be set by passing a Action<VictorDeviceInfo>an EventHandler<VictorDeviceScannedEventArgs>.

Code Block
languagec#
List<string> m_discoveredDevices = new List<string>();

public async Task Connect()
{
    var result = await m_deviceManager.ScanForDevices(OnDeviceAdded);
}

public async void OnDeviceAdded(VictorDeviceInfo deviceInfoobject sender,  VictorDeviceScannedEventArgs args)
{
    m_discoveredDevices.Add(deviceInfoargs.AddressInfo);
}

Connecting To A Device

Once a powered on VictoR device has been found by scanning for devices with the VictorBleDeviceManagerDeviceManager, the resulting VictorDeviceInfo VictorDeviceScannedEventArgs, along with the DeviceManager that found the device, can be used to connect to the device along with the VictorBleDeviceManager that found the device.

Code Block
languagec#
List<string> m_discoveredDevices = new List<string>();

public async Task Connect()
{
    var result = await m_deviceManager.ScanForDevices(OnDeviceAdded);
}

public async void OnDeviceAdded(VictorDeviceInfo deviceInfoobject sender, VictorDeviceScannedEventArgs args)
{
    m_discoveredDevices.Add(deviceInfoargs.AddressInfo);
    bool result = await m_deviceManager.Connect(deviceInfoargs.AddressInfo);
}

Subscribing to Connection State Changes

...

Code Block
languagec#
VictorCore.Services.VideoParameters videoParameters = new VictorCore.Services.VideoParameters();

VictorCore.Services.FrameSize frameSize = new VictorCore.Services.FrameSize();
frameSize.Rows = (ushort)128;
frameSize.Columns = (ushort)64;

videoParameters.FrameSize = frameSize;
videoParameters.FrameRate = (ushort)24;
videoParameters.OpticalPath
= videoParameters.OpticalPath = VictorCore.Services.VideoParameters.OpticalPathOptions.AutoRange;

await m_VictorController.SetVideoParameters(videoParameters);

...

Code Block
languagec#
await deviceInformationService.SubscribeToCurrentBatteryLevel(OnBatteryValueChanged);

private async void OnBatteryValueChanged(DeviceInformationEventArgs args)
{
  string batteryLevel = args.CurrentBatteryLevel.ToString();
}

NOTE: When subscribing to an attribute, please reference the supported ICD document specified above to ensure that subscribing to the attribute itself supported.

Custom NLog Target

The VictoR Windows Software Development Kit (SDK) utilizes NLog as it’s logging mechanism. Log info is filtered into Debug, Info, and Warn severity levels. The SDK provides a convenience method to register custom targets to the NLog configuration in order to capture any useful information to a consuming application. A custom target which consumes all levels of the SDK log statements may be created and registered as follows.

...