Skip to content

protocol

sabas1080 edited this page Jul 25, 2016 · 2 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

Wiki Source: Project "Porygon"