Definitions / Abbreviations / Acronyms
Term | Description |
---|---|
API | Application Programming Interface |
AAR | Android Archive |
BLE | Bluetooth Low-Energy |
FN | Fabrique Nationale |
ICD | Interface Control Document |
SDK | Software Development Kit |
OS | Operating System |
USB | Universal Serial Bus |
UWP | Universal Windows Platform |
Overview
The FN VictoR SDK is the core software development tool that allows for the creation of applications that use FN VictoR devices. The SDK provides developers who would like to interact with an FN VictoR device in their applications with two libraries - VictoR Core and VictoR Communications - that handle the bulk of the work required to communicate with a device.
The VictoR Communications Library provides communications protocol specific implementations of the SDK’s standardized communications interface designed for use with the VictoR Core Library on both Windows and Android operating systems.
The VictoR Core Library provides a standardized, user-friendly set of interfaces for interacting with the various services within an FN VictoR device without needing to reference an ICD to figure out the low-level details required for those interactions. Note that the VictoR Communications Libraries are designed for use in conjunction with the VictoR Core Libraries for convenience, but are still usable for direct interaction with a device. For example, if new services are added to the device, but corresponding interfaces for that service have not yet been added to the VictoR Core Library, then, combined with details on how to interact with the service (i.e. from the ICD), interaction with that service can still be achieved.
The diagram in figure 1 below illustrates the high-level architecture of the SDK and its relationship to applications that are developed with it. Blocks highlighted in white and blue indicate implementations that Unity provides. Blocks highlighted in grey are presented for illustration purposes only, and are not implemented by Unity.
Project Structure
The SDK is composed of multiple libraries, each targeting a different language and/or project type combination determined by their specific use case. All projects are contained within a single repository.
Windows
VictoR Core Library
Language: C#
Project Type: .NET Standard 2.0 Library
Reason: A .NET Standard 2.0 library allows for easy integration with cross-platform development frameworks (including Unity and Xamarin) that target the .NET API.
VictoR Communications Library
Language: C#
Project Type: .NET Standard 2.0 Library with WinRT API Pack
Reason:
A .NET Standard 2.0 library allows for easy integration with cross-platform development frameworks (including Unity and Xamarin) that target the .NET API.
The WinRT API Pack (accessed through the Windows SDK Contracts NuGet package) provides access to the Windows SDK’s BLE libraries, and still supports integration into Unity (or other .NET projects).
Note: A Unity project that uses this library must target UWP. Windows applications can target UWP or standard Win32.
Android
VictoR Core and VictoR Communications Libraries
Language: Java
Project Type: AAR Library
Reason: Java is the only language that the Android SDK supports for access to its BLE libraries. A Java-based AAR library can be integrated with Unity and bound to C# using Unity provided helper classes.
Library Breakdown
VictoR Core
The VictoR Core Library provides a standardized, user-friendly set of interfaces for interacting with the services within an FN VictoR device. It also provides a logging system (through the NLog NuGet package) and any other miscellaneous helper functions, data structures, utilities, or base classes that might be useful to developers using the SDK.
The VictoR Core Library contains the following key elements:
Abstract VictoR Communications Interfaces: The common base interfaces that establish the “contract” that service classes can expect communications implementations to adhere to.
Base Service Interface: The common base class that houses information relevant to every service specific implementation such as common UUID bases and references to communications interfaces and provide functionality shared by all service implementations.
Service Interface Implementations:
Device Information Service Interface: Provides an interface to the Device Information Service, which provides device system related information.
Device Configuration Service Interface: Provides an interface to the Device Configuration Service, which handles device settings and operational behavior.
VictoR Windows Communications
The VictoR Communications Windows Library provides Windows OS-specific implementations of the IVictorDeviceManager and IVictorDevice interfaces for the following communications protocols:
Bluetooth Low-Energy (BLE)
VictoR Android Communications
The VictoR Communications Android Library provides Android OS-specific implementations of the VictorDeviceManager and VictorDevice interfaces for the following communications protocols:
Bluetooth Low-Energy (BLE)
VictoR Core and VictoR Communications
The VictoR Communications Libraries are designed for use in conjunction with the VictoR Core Libraries. The general idea is that for applications running on each respective operating system, protocol specific implementations of the communications interfaces are instantiated, then passed to instances of services of the VictoR Core Libraries. The diagram in figure 2 below illustrates a high-level overview of how the two libraries work together.
Library Testing
SDK libraries are tested with internal testing projects that load the libraries and provide/perform unit testing on the APIs provided by the libraries.
The testing applications are written in the same language as the libraries being tested for ease of loading/integration.
C# test applications use the xUnit.net testing framework.
Java test applications use the JUnit5 testing framework.
Test application code is contained within the respective library project that they are testing.
Unity Package
In addition to the SDK, a Unity Package will be provided that serves as a reference implementation of an application that integrates the SDK. This package also serves as a starting platform from which Unity projects that want to utilize the SDK for FN VictoR device communication can be built. The diagram in figure 3 below illustrates the structure of the Unity Package.
Supported Build Types
UWP
Android
Supported Libraries
Windows
VictoR Communications
VictoR Core
Android
VictoR Communications
A C# binding is provided in the VictorAndroidBleDeviceManager script that can be used with the Windows VictoR Core library.
VictoR Core
This is included and supported, albeit not necessary to use directly. To use this, the developer would need to build a C# binding around it using Unity’s Android JNI Module in the same manner as the VictorAndroidBleDeviceManager script.
The Assets folder houses example Scripts, PreFabs, and GameObjects built to demonstrate the FN SDK’s functionality. GameObjects utilize Scripts implementing various features from the VictoR Core Library to provide example use cases. Fields within these Scripts are exposed to enable users to make their own modifications. PreFabs of these GameObjects provide preconfigured assets that can be reused across Scenes.
A Third Party Notice is included to indicate any third party libraries used by the Unity Package.
A License file will be included to indicate any relevant licensing information dealing with the FN SDK, the Unity Package, and any third party libraries used.
Unity Package Testing
The Unity Package is tested using a manual QA acceptance testing procedure. See the Final Test Report for details on this procedure.