Introduction

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:

http://www.ambx.com

Device information

The device has 3 endpoints

*0x02 - Out *0x81 - In *0x83 - In - Constantly polled, used for plug and play detection

Protocol Information

The AmbX Communications protocol works over full-speed USB 2.0. It addresses the system through simple bulk read/writes commands.

Protocol Format

Protocol Example
Index: 01 23 45 67 89 AB CD EF
 Data: A1 2B 03 00 00 00
Byte 0 - Nibble 0

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

Byte 0 - Nibble 1

This value is significant, but it is not yet known what it is

Byte 1 (Nibble 2-3)

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.

Byte 2 (Nibble 4-5)

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

All remaining bytes

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.

Internal Device Addresses

0x0B

Left Speaker light

0x1B

Right Speaker light

0x2B

Left (when viewed from front) Wall Washer light

0x3B

Middle Wall Washer light

0x4B

Right Wall Washer light

0x5B

Left Fan

0x6B

Right Fan

0x7B

Vibration Bar

0x7C

Also Vibration Bar?

Initialization

There’s some sort of initialization step when the device is connected. What is it?

Light Commands

Set Light To Color

Description

Given the address of a light, sets it to a certain RGB Color

Setup Requirements

Unknown

Command Index

0x03

Parameters

3 bytes, denoting the values to set the red, green, and blue channels to.

Example Command

Set Left Wall Washer Light to Full Blue
A1 2B 03 00 00 FF

Timed Color Sequence

Description

Given the address of a light and a delay value, iterate through a list of colors, holding each color for the specified delay value.

Setup Requirements

Unknown

Command Index

0x72

Parameters

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.

Example Command

Full Command
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
Command
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

Color Portion
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

Fan Commands

Set Fan to Speed

Description

Given the address of a fan, sets it to a certain speed

Setup Requirements

Unknown

Command Index

0x01

Parameters

1 byte, speed to set fan to

Example Command

Set Right Fan to Full Speed
Data: A1 6B 01 FF

Timed Fan Sequence

Description

Given the address of a fan and a delay value, iterate through a list of speeds, holding each speed for the specified delay value.

Setup Requirements

Unknown

Command Index

0x74

Parameters

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.

Example Command

Full Command
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
Command
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

Speed Portion
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

Rumble Commands

Timed Vibration Sequence

Description

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.

Setup Requirements

Unknown

Command Index

0x74

Parameters

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.

Example Command

Full Command
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
Command
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

Speed Portion
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

Questions

Further Information

For further information, visit: