The official app discovers the device by scanning for BLE devices with the name Omi
.
The Omi wearable device implements several services:
The service uses the official UUID of 0x180F and exposes the standard Battery Level characteristic with UUID 0x2A19. The characteristic supports notification to provide regular updates of the level (this does not work with firmware 1.0.x and requires at least v1.5).
Available since firmware version 1.0.3
The service uses the official UUID of 0x180A and exposes the following characteristics:
The main service has UUID of 19B10000-E8F2-537E-4F6C-D104768A1214
and has two characteristics:
19B10001-E8F2-537E-4F6C-D104768A1214
, used to send the audio data from the device to the app.19B10002-E8F2-537E-4F6C-D104768A1214
, determines what codec should be used to decode the audio data.The possible values for the codec type are:
Starting with version 1.0.3 of the firmware, the device default is Opus. On earlier versions it was PCM 16-bit, 8kHz, mono.
The audio data is sent as notifications on the audio characteristic. The format of the data depends on the codec type. The data is split into audio packets, with each packet containing 160 samples. A packet could be sent in multiple value updates if it is larger than (negotiated BLE MTU - 3 bytes). Each value update has a three byte header:
For instance, 160 samples with a codec 0 (16-bit, 16kHz PCM) results in a packet size of 320 bytes. On current iOS devices, this results in 2 value notifications:
The data is sent in little-endian format.