Introduction

NeuroSDK as a part of Callibri and Brainbit products is a set of libraries for different operating systems and platforms providing full set of tools needed for configuring and receiving data from Callibri and Brainbit devices. This software development kit consists of portable core written on C++11/14 and a set of wrappers for different languages and platforms: Java for Android operating system, Objective-C++ for iOS/MacOS, C# for Windows, Python for different platforms. Also, the core could be used for making cross-platform applications in C++ using different compilers and IDEs.

NeuroSDK is intended to be used by developers of different systems which requires biopotential data in conjunction with information about body movements and respiratory activity. NeuroSDK also provides tools for electrostimulation using Callibri EMS device.

Quickstart

To get started with software development kit you need to go through several steps which could vary in details for different platforms, but the essential sequence is constant. You may download and run some samples to get started.

Download and link

First of all download actual libraries for your platform and link them to your project. You could find detailed tutorial for each plantform on page Binaries and downloads. SDK limitations and features for BLE device communications on different platforms are also described there. Once you've downloaded and linked binaries to your project you may start using NeuroMD SDK classes to work with Callibri and Brainbit devices.

Scan for devices

To find devices you need to cteate DeviceScanner object, subscribe DeviceFound event and call startScan method. Using Java for Android you should pass application Context object to its constructor (see "Java" tab). If you're making your application using C++ you should call factory method createDeviceScanner to get scanner object.

Read device name and address and connect to it

Basicly you should read device parameters only if device is in "Connected" state, but parameters "Name", "Address" and "State" could be read on "Disconnected" device. To read params call readParam method passing appropriate ParamName parameter to method in case of Java or with template parameter of type Parameter in case of C++.

Every physical device, Callibri or Brainbit, is represented in NeuroSDK as Device abstraction which has state and set of possible control actions. Device state (should not be confused with connection state - one of device parameters) is characterized by parameters of device , which could be read with special function call readParam. Control actions are presented as set of possible commands and set of writable parameters. Commands could be executed by execute function, parameters could be set with setParam function. Device also has separate functions to control connection state. You can get list of all supported parameters by calling parameters member function. To get list of supported commands call commands member function. More information about these functions available on appropriate Device pages for different languages.

Device parameters

Set of command for specific device depends on which modules does device have. This is also true for parameters set. All possible parameters are listed below:

1. Name,

2. State,

3. Address,

4. SerialNumber,

5. HardwareFilterState,

6. FirmwareMode,

7. SamplingFrequency,

8. Gain,

9. Offset,

10. ExternalSwitchState,

11. ADCInputState,

12. AccelerometerSens,

13. GyroscopeSens,

14. StimulatorState,

15. MotionAssistantState,

16. StimulatorParamPack,

17. MotionAssistantParamPack

Device could be configured by setting these parameters, but whether each parameter could be set or not is represented by parameter access modifier:

1. Read,

2. ReadWrite,

3. ReadNotify

Parameters could be readonly, for some of them device provides notification mechanism. Parameters with ReadWrite notifier could be set from user code.

Channel library

All NeuroMD devices provides biopotential signals and telemetry information through channels. Channel set of device depends on device modules. Information about channels could be obtained by calling channels method of device class.

Base channel

All channel classes which device has are inherited from BaseChannel abstract class/interface. Custom channels (channels which do not present in device, also user-created) could be inherited from BaseChannel, but it is not necessary. Representing device information by channels gives easy way to process heterogeneous information in one manner. For example, it is easy to plot function of battery charge, biosignal, and connection statistics depend on same time scale.

Respiration module

Micro electro-mechanical system (MEMS) module

This module is responsible for orientation and acceleration tracking of device.

Module parameters:

1. AccelerometerSens;

2. GyroscopeSens.

Most commonly Callibri device are supplied with all of these modules.
Modules could be configured through device parameters. It is also possible to execute set of module-specific commands. List of supported commands and parameters could be acquired from device by appropriate calls to device library.

Callibri EMS

Callibri EMS device is positioned as smart electromyostimulation device and provides ability to stimulate muscles based on orientation and acceleration tracking data. It includes:

Base Callibri module

Base module is responsible for common Callibri device configuration and BLE configuration.

Module parameters:

1. Name;

2. State;

3. Address;

4. SerialNumber;

5. FirmwareMode;

Micro electro-mechanical system (MEMS) module

This module is responsible for orientation and acceleration tracking of device.

Module parameters:

1. AccelerometerSens;

2. GyroscopeSens;

Stimulation module

Special module for Callibri EMS which provides output with stimulation current pulses for miostimulation.

Module parameters:

1. StimulatorState;

2. MotionAssistantState;

3. StimulatorParamPack;

4. MotionAssistantParamPack.

Brainbit

Brainbit is more simplier than Callibri device and has only two modules

Base Brainbit module

Base module is responsible for connection establishing through BLE and for device state and mode control.

Module parameters:

1. Name;

2. State;

3. Address;

Signal module

Signal module is responsible for acquisition of EEG signal from 4 device electrodes and for measuring electrodes resistance.

Module parameters:

1. SamplingFrequency;

2. Gain;

3. Offset;

There are no modifications for Brainbit device, so basically it has fixed set of commands and parameters. Anyway, we are moving forward and add new post analytic functions for Brainbit data.