protocol

Morgan Jones edited this page Jul 12, 2016 · 11 revisions

Protocol

The Pokémon Go Plus (codenamed "Sfida") is a battery-powered Bluetooth LE bracelet.

Hardware specs

  • CPU: unknown
  • 8-intensity vibration motor
  • 4-bit RGB LEDs (12-bit color)

Services

Note: These UUIDs appear to have their bytes backwards in the provided (decompiled) source. Not sure why. I think they should be the other way, because the 4 ends up in the right place.

Service UUID
FW_UPDATE_SERVICE 0000fef5-0000-1000-8000-00805f9b34fb
DEVICE_CONTROL_SERVICE 21c50462-67cb-63a3-5c4c-82b5b9939aeb
CERTIFICATE_SERVICE bbe87709-5b89-4433-ab7f-8b8eef0d8e37
BATTERY_SERVICE 0000180f-0000-1000-8000-00805f9b34fb

Characteristics

FW_UPDATE_SERVICE

Characteristic UUID
FW_UPDATE_REQUEST 21c50462-67cb-63a3-5c4c-82b5b9939aef
FW_VERSION 21c50462-67cb-63a3-5c4c-82b5b9939af0

DEVICE_CONTROL_SERVICE

Characteristic UUID
LED_VIBRATE_CTRL 21c50462-67cb-63a3-5c4c-82b5b9939aec
BUTTON_NOTIF 21c50462-67cb-63a3-5c4c-82b5b9939aed

LED_VIBRATE_CTRL

The LED_VIBRATE_CTRL characteristic takes a chunk of bytecode describing what patterns to display on the wristband.

The bits in the following tables are numbered from high to low.

Header

Field Byte Offset Width Description
delay 0 [7:0] The input delay, in m50
reserved0 1 [7:0] Typically zero. Has another meaning, but not sure what yet.
reserved1 2 [7:0] Typically zero.
priority 3 [7:5] The message priority, in 0..7. Higher-priority messages will override lower ones.
patterns 3 [4:0] The number of patterns, in 0..31. Notably, it can be zero to cancel an in-progress sequence using one with a higher priority.

Pattern

Field Byte Offset Width Description
duration 0 [7:0] The duration, in m50
g 1 [7:4] The green level, in 0..15
r 1 [3:0] The red level, in 0..15
interpolate 2 [7:7] Single-bit flag describing whether to interpolate to the next or from the previous color (unknown, could be either)
intensity 2 [6:4] The vibration intensity level, in 0..7.
b 2 [3:0] The blue level, in 0..15

Aside: duration formatting

Durations are formatted in a scheme called m50, which is a byte value representing 50-millisecond intervals. This gives a maximum duration of 50 * 255 = 12750 ms.

BUTTON_NOTIF

TODO

CERTIFICATE_SERVICE

Characteristic UUID
SFIDA_COMMANDS bbe87709-5b89-4433-ab7f-8b8eef0d8e39
CENTRAL_TO_SFIDA bbe87709-5b89-4433-ab7f-8b8eef0d8e38
SFIDA_TO_CENTRAL bbe87709-5b89-4433-ab7f-8b8eef0d8e3a

BATTERY_SERVICE

Characteristic UUID
BATTERY_LEVEL 00002a19-0000-1000-8000-00805f9b34fb
Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.