This post describe FreeLace Pro specific configuration protocol notices.
Base protocol is the same as in HUAWEI FreeBuds 4i, so main information is available here. This page contains only differences from their.
This post describe FreeLace Pro specific configuration protocol notices.
Base protocol is the same as in HUAWEI FreeBuds 4i, so main information is available here. This page contains only differences from their.
In all read commands, you should add empty parameters of fields which you want to get in response. For example, if you send Package(b"\x2b\x2a", [])
(read ANC mode request), you’ll got a empty response. So you must place (2, b"")
in parameters array to get values from device.
Except read request difference described above.
Request: To get current battery level, build and send command with ID 0108
.
GET battery | Length | Value (Description) |
---|---|---|
Command ID | 2 | Constant HEX 0108 (1, 8) |
Parameter 2 | 0 | Empty string |
Playground example: Package(b"\x01\x08", [(2, b"")]).send()
.
Response: After that, you’ll got package like this. And the same package device will send if battery state will change while socket is connected.
Battery state | Length | Value (Description) |
---|---|---|
Command ID | 2 | 0108 (1, 8) — Response for request above;0127 (1, 39) — Battery changed notification |
Parameter 1 | 1 | Current battery level, one byte integer |
Parameter 2 | 1 | Same as parameter 1 |
Parameter 3 | 1 | Charging state for headphones, one byte. 0 — not charging, 1 — charging |
Request: If you want to request current ANC mode, send command ID 2B2A
.
GET current mode | Length | Value (Description) |
---|---|---|
Command ID | 2 | Constant HEX 2B2A (43, 42) |
Parameter 1 | 0 | Empty string |
Playground example: Package(b"\x2b\x2a", [(1, b"")]).send()
.
Response: When you send that command, you’ll got a incoming package like that:
Current ANC mode | Length | Value (Description) |
---|---|---|
Command ID | 2 | Constant HEX 2B2A (43, 42) |
Parameter 1 | 2 | Current ANC mode, see table bellow |
Change detection: When ANC mode is changed with touch button on deivce, you’ll get this package. Yes, command ID is the same as in FreeBuds 4i in-ear state change event. Also, sometimes it drop’s a package with 2b2a
command ID and structure like above (response), but not all times…
Current ANC mode | Length | Value (Description) |
---|---|---|
Command ID | 2 | Constant HEX 2B03 (43, 3) |
Parameter 1 | 1 | New ANC mode (0-2) |
Write: To change ANC mode, build and send this package:
Change ANC mode | Length | Value (Description) |
---|---|---|
Command ID | 2 | Constant HEX 2B04 (43, 4) |
Parameter 1 | 2 | New mode, see bellow |
Playground example: Package(b"\x2b\x04", [(1, NEW_MODE)]).send()
, where NEW_MODE
should two byte string, eg b"\x01\x02"
.
Value (HEX) | Description |
---|---|
0000 |
No ANC |
01ff |
Cancellation, kept level |
0101 |
Cancellation, lowest |
0100 |
Cancellation, normal |
0102 |
Cancellation, ultra |
0202 |
Awareness |
Request: To fetch current option value, send package with command ID 0120
(command ID is the same as double tap in 4i).
GET double-tap | Length | Value (Description) |
---|---|---|
Command ID | 2 | Constant HEX 0120 (1, 32) |
Parameter 1 | 0 | Empty |
Parameter 2 | 0 | Empty |
Playground: Package(b"\x01\x20", [(1, b""),(2, b"")]).send()
.
Response:
Double-tap opt value | Length | Value (Description) |
---|---|---|
Command ID | 2 | Constant HEX 0120 (1, 32) |
Parameter 1 | 1 | Signed integer, tap action for power button (check table bellow for value description) |
Parameter 2 | 1 | Same as parameter 1 |
Write: To change this option, send package with command ID 011f
, and place new option value to parameters 1 AND 2
Set double-tap act | Length | Value (Description) |
---|---|---|
Command ID | 2 | Constant HEX 011f (1, 31) |
Parameter 1 | 1 | Signed integer, tap action for power button (check table bellow for value description) |
Parameter 2 | 1 | Same as parameter 1 |
Playground: Package(b"\x01\x1f", [(1, NEW_VALUE),(2, NEW_VALUE),]).send()
where NEW_VALUE
should be from table below.
Available options:
Value | Description |
---|---|
-1 | Do nothing |
12 | Switch device |
Request: To fetch current option value, send package with command ID 2B17
.
GET long-tap | Length | Value (Description) |
---|---|---|
Command ID | 2 | Constant HEX 2B17 (43, 23) |
Parameter 1 | 0 | Empty |
Parameter 2 | 0 | Empty |
Playground: Package(b"\x2b\x17", []).send()
.
Response:
Long-tap opt value | Length | Value (Description) |
---|---|---|
Command ID | 2 | Constant HEX 2B17 (43, 23) |
Parameter 1 | 1 | Signed integer, long tap action for left headphone (check table bellow for value description) |
Parameter 2 | 1 | Same as parameter 1 |
Parameter 3 | 5 | ?? |
Write: Command ID is 2b16
.
Set double-tap act | Length | Value (Description) |
---|---|---|
Command ID | 2 | Constant HEX 2b16 (43, 22) |
Parameter 1 | 1 | Signed integer, double tap action for left headphone (check table bellow for value description) |
Parameter 2 | 1 | Same as parameter 1 |
Playground: Package(b"\x2b\x16", [(1, NEW_VALUE),(2, NEW_VALUE),]).send()
where NEW_VALUE
should be from table below.
Available options:
Value | Description |
---|---|
-1 | Do nothing |
3 | Switch ANC Off/Cancellation |
5 | Switch through all ANC modes |
6 | Switch ANC Cancellation/Awareness |
9 | Switch ANC Off/Awareness |