Every command starts with 1 byte indicating if the command is a request-, write- or response-command. (All bytes are hexadecimal). Every group of bytes is little endian.
A request-command starts with 01
and gets a response-command from the watch, starting with 03
. (See Requests for more info)
A write-command starts with 02
. (See Writes for more info)
Every request has the form 01 XX
, where XX
is the byte indicating which piece of info is being requested (see below) The response to this request has the form 03 XX data
, where the XX
is the same as in the request and data a varibale amount of data, depending on the request (see below).
Response:
- 1 byte: unknown
Response:
- 1 byte: unknown
Response:
- unknown
Response:
- 4 bytes: current timestamp in seconds
- 2 bytes: unknown (possibly 100th's, hard to check)
- 2 bytes: timezone in minutes after UTC
Response:
- 1 byte: unknown
- 3 bytes: step goal
Response:
- 1 byte: unknown
- 3 bytes: step count
This request-command takes another byte as argument, so the command is 01 07 YY
, where YY
is a byte from the following list:
- 01: unknown, response: 11 bytes unknown (looks similar to the response to
01 0a
) - 02: clockState, response: 1 byte unknown
- 03: tripleTapEnable, response: 1 byte unknown (probably 0 or 1)
- 04: unknown, response: 1 byte unknown
- 05: unknown, response: 1 byte unknown
Response:
- 1 byte: battery level (0-100)
Response:
- Unknown
Response:
- 1 byte: status (unkown, found in obfuscated code)
- 2 bytes: connection interval divided by 1.25
- 2 bytes: connection latency
- 2 bytes: supervision timeout divided by 10
Response:
- Unknown
Response:
- 4 bytes: step goal
Response:
- 4 bytes: current step count
This request-command takes another byte as argument, so the command is 01 12 YY
where YY
is the index of the extra timezone.
Response:
- 2 bytes: timezone (in minutes after UTC)
This request-command takes another byte as argument, so the command is 01 13 YY
. The purpose of YY
is unknown, but I could only get it to respond with YY
= 01, but it is probably used to indicate the correct countdown.
Response:
- 4 bytes: start time in UTC seconds
- 4 bytes: end time in UTC seconds
- 2 bytes: timezone (in minutes after UTC)
- 1 byte: progress (unknown, found in obfuscated code)
Returns all FF
if no countdown is set.
This request-command takes another byte as argument, so the command is 01 14 YY
. The purpose of YY
is unknown, but I could only get it to respond with YY
= 01, but it is probably used to indicate the correct goal.
Response:
- 1 byte: goalIdNumber
- 1 byte: goalTrackingState (boolean)
To write data to a specific setting, the write-command must be formed as 02 XX data
, where XX is a byte from the list in Requests and data is formatted like the response to the corresponding request. (THIS NEEDS TO BE CHECKED). Special cases like notifications are documented below:
Format: 02 07 0e 0a 00 VV 05 CC 00 00 [HH HH] [MM MM]
Where:
- VV = vibration type (these are hard to type out into text)
- CC = number of extra bytes (4 if only setting hour- or minute-hand, 6 if setting both)
- HH HH = degrees of hour-hand
- MM MM = degrees of minute-hand
There's two types of button-settings, one for "normal" actions and one for media actions. Both start with 02 0b 32 BB
where BB
is the index of the button to set: (1 for top, 2 for middle, 3 for bottom). Sending just this prefix clears the button.
Format: (prefix) 72 YY ZZ ZZ
Where
YY
=BB
+ 29ZZ ZZ
= the action, twice the same byte:- 00: Date
- 01: Timezone one
- 02: Timezone two
- 03: Last notification
- 04: Alarm (?)
- 05: Twentyfour hour (?)
- 06: Twelve hour (?)
- 07: No mode (?)
- 08: Step progress
- 09: Seconds (?)
- 0a: Countdown (?)
- 0b: Defaults (?)
- 0c: Sequenced Nodes (?)
- 0d: Stopwatch
- 0e: Dial spin (?)
(Actions with a (?) are found in obfuscated code, but I've not figured out what they do exactly)
Format: (prefix) XX ZZ ZZ 00 01
Where
XX
= Button code (top: 30, middle: 38, bottom: 40) (+1 for hold, +2 for double-click)ZZ ZZ
= Action (Volume Up: 14e9, Play/Pause: 14cd, Volume Down: 14ea, Next: 0fb5)
By sending 02 f1 YY
, an animation plays. Currently known values for YY
are:
- 05 (Pairing animation): spins the hands clockwise once
- 06 (Sync animation): spins the hands clockwise once
TODO