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.


Getting started

Through the API you'll be able to access:

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d5ebd30d-0229-4209-a001-ad36d154adb7/Untitled.png

Firmware

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.

Python

To get started using Python, clone the repository and follow the installation / usage instructions.

Usage

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

WavePublicTypes.h

Note: The words query, metadata and header are used interchangeably throughout the documentation and code.

Sending and receiving packets

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.