This page contains information on how to interface with Wave on an API level. We have prepared a Python package making it super easy to get started developing your own applications with Wave.
The API should be easily portable to other languages that can interface with Bluetooth LE devices over Bluetooth GATT.
Through the API you'll be able to access:
In order to get started, make sure you've updated the firmware to the latest version. The latest firmware package and instructions on how to update can be found here.
To get started using Python, clone the repository and follow the installation / usage instructions.
The Wave API interface is based on a request-response model. A request has the following C++ definition:
struct Query
{
enum class Type = std::uint8_t { Request = 0, Response = 1, Stream = 2 };
enum class Id : std::uint8_t { ... };
const Type type{};
const Id id{};
const uint16_t payload_size{};
};
A query has a size of four bytes and all fields have little-endian byte format. An additional payload of size payload_size
can follow directly after the query in the packet.
A complete list of query IDs along with data layout for other relevant API structures can be found in the WavePublicTypes.h
header file below
Note: The words query, metadata and header are used interchangeably throughout the documentation and code.
Packets sent over the API are encoded using the COBS scheme, where each packet is delimited by a zero byte. This is already taken care of in the example Python package.
Packets received over the API need to be decoded as well.