protocol
sabas1080 edited this page Jul 25, 2016
·
2 revisions
The Pokémon Go Plus (codenamed "Sfida") is a battery-powered Bluetooth LE bracelet.
- CPU: unknown
- 8-intensity vibration motor
- 4-bit RGB LEDs (12-bit color)
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 |
Characteristic | UUID |
---|---|
FW_UPDATE_REQUEST |
21c50462-67cb-63a3-5c4c-82b5b9939aef |
FW_VERSION |
21c50462-67cb-63a3-5c4c-82b5b9939af0 |
Characteristic | UUID |
---|---|
LED_VIBRATE_CTRL |
21c50462-67cb-63a3-5c4c-82b5b9939aec |
BUTTON_NOTIF |
21c50462-67cb-63a3-5c4c-82b5b9939aed |
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
.
TODO
Wiki Source: Project "Porygon"