Waxwing Bluetooth API Tutorial (Updated 7/11/26)
Using a 3rd party Bluetooth LE app - like LightBlue - you can look for a Waxwing's name in a scan of advertising BLE devices. It will be advertised in the format of a hashtag plus the serial number. For example, you'll see #525 as a nearby peripheral in the scan list for Waxwing S/N 525. For your own software, it is easiest to scan for the Waxwing's main Service (4dddd48d-cf30-492e-850b-76d57dd76900). That is how the Parks Audio Waxwing app scans for devices.
The Waxwing BLE Service:
4dddd48d-cf30-492e-850b-76d57dd76900
The Service's characteristics:
- TX command to Waxwing:
4dddd48d-cf30-492e-850b-76d57dd76901
- RX Stream from Waxwing:
4dddd48d-cf30-492e-850b-76d57dd76902
The TX command is a characteristic of the main service. It is three bytes of data. The first byte is the Function ID, the second byte is the Function Value, and the third byte does not matter (used for other commands to be documented) so just use zero. The table below shows the values in decimal, but 3rd party programs like LightBlue will typically want hexadecimal.
Tutorial examples:
Sending commands to Waxwing:
- Start the LightBlue app and find your Waxwing in the list of devices. It shows up as its serial number. Press "Connect".
- Scroll down to the Waxwing Service (
0x4dddd48d-cf30-492e-850b-76d57dd76900).
- Click on "TX command to Waxwing".
- Click "Write new value". Now let's set the Waxwing's Volume to Mute. This would be 0 for the function, 0 for the value, and 0 for the unused third byte. In hexadecimal this will be
0x000000. Type 000000 and press send.
- Click "Write new value". Now let's set the Waxwing's Volume back to 100%. This would be 0 for the function, 32 for the value, and 0 for the unused third byte. In hexadecimal this will be
0x002000. Type 002000 and press send.
- Click "Write new value". Now let's turn on Magic. This would be 11 for the function, 1 for the value, and 0 for the unused third byte. In hexadecimal this will be
0x0B0100. Type 0B0100 and press send.
- Click "Write new value". Now let's turn off Magic. This would be 11 for the function, 0 for the value, and 0 for the unused third byte. In hexadecimal this will be
0x0B0000. Type 0B0000 and press send.
Reading Waxwing settings:
- Start the LightBlue app and find your Waxwing in the list of devices. It shows up as its serial number. Press "Connect".
- Scroll down to the Waxwing Service (
0x4dddd48d-cf30-492e-850b-76d57dd76900).
- Click on "RX Stream from Waxwing".
- Press the Subscribe button.
- Go back by pressing the "<Peripheral" at the top left.
- Click "TX command to Waxwing".
- Click "Write new value". Now let's turn ON the RX stream. This would be 99 for the function, 1 for the value, and 0 for the unused third byte. In hexadecimal this will be
0x630100. Type 630100 and press send.
- Now you'll be receiving a 100-byte packet every 500ms. This packet is described below in the HTML table as well as by this
publically shared Google spreadsheet.
- Click "Write new value". Now let's turn OFF the RX stream. This would be 99 for the function, 0 for the value, and 0 for the unused third byte. In hexadecimal this will be
0x630000. Type 630000 and press send.
Hopefully, these examples and the table below are all you need to get rolling. There's still a lot to document, so don't hesitate to email me for more assistance.
Waxwing API Terms:
The use of this API is permitted for any lawful purpose - private or commercial - provided that the following restrictions are adhered to:
- Prohibited Uses:
- The API must not be used to intentionally harm, damage, or disable devices, including but not limited to, bricking or rendering devices inoperable.
- The API must not be used for illegal activities or in a manner that violates applicable laws.
- The API must not be used to intentionally harass a Waxwing user.
- Liability:
- The author of this API shall not be liable for any damages resulting from its use in violation of these terms.