Index: 01 23 45 67 89 AB CD EF Data: A1 2B 03 00 00 00
This document provides protocol information for the AmbX ambient environment system, with a goal of providing developers with enough low level information to developer their own drivers and software to harness the AmbX protocol.
Information on the AmbX product is available at the AmbX website:
The device has 3 endpoints
*0x02 - Out *0x81 - In *0x83 - In - Constantly polled, used for plug and play detection
The AmbX Communications protocol works over full-speed USB 2.0. It addresses the system through simple bulk read/writes commands.
Index: 01 23 45 67 89 AB CD EF Data: A1 2B 03 00 00 00
This is a sequence that is monotonically increasing and rolling over. It begins at 0 for the first command, 1 for the second, etc… until 16 commands have been sent, then returns to zero. In the above example packet, we have hit the 11th packet since we rolled over, so the value is 0xA
This value is significant, but it is not yet known what it is
This value is the address of the unit being commanded. In the example, 0x1B refers to the left lighting node of the wall washer unit.
This value is the command to send to the unit. In the example, 0x03 is the command to set a light to a certain color
Remaining bytes are parameters to the send command, and are specific to the command. In the example, 0x00 0x00 0x00 means that the color to be set in the left wall washer unit light is black.
Left Speaker light
Right Speaker light
Left (when viewed from front) Wall Washer light
Middle Wall Washer light
Right Wall Washer light
Left Fan
Right Fan
Vibration Bar
Also Vibration Bar?
There’s some sort of initialization step when the device is connected. What is it?
Given the address of a light, sets it to a certain RGB Color
Unknown
0x03
3 bytes, denoting the values to set the red, green, and blue channels to.
A1 2B 03 00 00 FF
Given the address of a light and a delay value, iterate through a list of colors, holding each color for the specified delay value.
Unknown
0x72
Byte 3 (Nibbles 6-7) and 4 (Nibbles 8-9) denote the 16-bit delay time, in milliseconds. After that, a list of 16 3-byte colors are sent.
E1 2B 72 00 14 00 00 00 01 01 03 02 02 07 03 03 0A 04 05 0E 05 06 11 06 07 15 07 08 19 08 0A 1C 09 0B 20 0A 0C 23 0B 0E 27 0C 0F 2A 0E 10 2E 0F 11 32 10 13 35
E1 2B 72 00 14
This tells the left-most light (0x2B) to iterate through the following 16 colors, holding for 20ms (0x0014) at each color
00 00 00 01 01 03 02 02 07 03 03 0A 04 05 0E 05 06 11 06 07 15 07 08 19 08 0A 1C 09 0B 20 0A 0C 23 0B 0E 27 0C 0F 2A 0E 10 2E 0F 11 32 10 13 35
Given the address of a fan, sets it to a certain speed
Unknown
0x01
1 byte, speed to set fan to
Data: A1 6B 01 FF
Given the address of a fan and a delay value, iterate through a list of speeds, holding each speed for the specified delay value.
Unknown
0x74
Byte 3 (Nibbles 6-7) and 4 (Nibbles 8-9) denote the 16-bit delay time, in milliseconds. After that, a list of up to 48 8-bit speeds.
61 6B 72 00 8A 68 00 65 00 61 00 5E 00 5B 00 58 00 54 00 51 00 4E 00 4B 00 47 00 44 00 41 00 3D 00 3A 00 37 00 34 00 30 00 2D 00 2A 00 26 00 23 00 20 00 00 00
61 6B 72 00 8A
This tells the right fan (0x6B) to iterate through the following 48 speeds, holding for 138ms (0x008A) at each speed
68 00 65 00 61 00 5E 00 5B 00 58 00 54 00 51 00 4E 00 4B 00 47 00 44 00 41 00 3D 00 3A 00 37 00 34 00 30 00 2D 00 2A 00 26 00 23 00 20 00 00 00
Given the address of a rumble bar and a delay value, iterate through a list of speeds, holding each speed for the specified delay value.
Unknown
0x74
Byte 3 (Nibbles 6-7) and 4 (Nibbles 8-9) denote the 16-bit delay time, in milliseconds. After that, a list of up to 24 8-bit pairs (right and left motor) of speeds.
61 7B 72 00 8A 68 00 65 00 61 00 5E 00 5B 00 58 00 54 00 51 00 4E 00 4B 00 47 00 44 00 41 00 3D 00 3A 00 37 00 34 00 30 00 2D 00 2A 00 26 00 23 00 20 00 00 00
61 7B 72 00 8A
This tells the rumble bar (0x7B) to iterate through the following 24 speeds, holding for 138ms (0x008A) at each speed
68 00 65 00 61 00 5E 00 5B 00 58 00 54 00 51 00 4E 00 4B 00 47 00 44 00 41 00 3D 00 3A 00 37 00 34 00 30 00 2D 00 2A 00 26 00 23 00 20 00 00 00
The 0x7? commands seem to be basically equivilent between devices and usage, i.e 0x72 and 0x74 seem to do the same thing?
What is the 0x7C device? The rumble bar reacts to it?
What do the following messages mean? They keep showing up (X denotes first iteration nibble, can be ignored)
X1 F2 01 07
The following pair, which always comes in order
X1 01 03 00 00 3B
X1 01 03 00 3B 3B
X1 Y1 00 01 08 - Where Y is 0-8?
For further information, visit: