# Kiiroo Onyx/Pearl 1

The Kiiroo Onyx 1 and Pearl 1 were a set of toys made to control each other via Kiiroo's remote servers. The Onyx 1 was a tube with constricting elements and a touch sensor slider, while the Pearl 1 was a vibrator with 4 capacitive touch elements used to track insertion depth.

# Bluetooth Details

# Bluetooth 2.0 Connections

When pairing using Bluetooth 2.0, serial ports on OS X and linux machines will register for the Pearl toy as:

/dev/tty.PEARL-DevB 

and for the Onyx toy as:

/dev/tty.ONYX-DevB

# Bluetooth LE Connections

When using Bluetooth LE to talk to Kiiroo toys, the following UUIDs are used.

Service UUID:

49535343-fe7d-4ae5-8fa9-9fafd205e455

RX Characteristic UUID:

49535343-1e4d-4bd9-ba61-23c647249616

TX Characteristic UUID:

49535343-8841-43f4-a8d4-ecbe34729bb3

# Kiiroo Protocol

The Kiiroo communications protocol consists of strings send to either the Pearl or Onyx. These strings are formatted like so:

x,\n

Where x is an integer from 0-4. When sent to the Onyx, this command sets the pressure ring position. When sent to the Pearl, this command sets vibration levels.

These commands are sent from the Pearl whenever a corresponding touch sensor is hit. There is no way to send commands from the Oynx.

That is it. That is the whole protocol. The end.

# Stupid Kiiroo Tricks

The simplicity of the protocol means that two toys can interact locally on POSIX-compliant platforms (linux, OSX/macOS, etc) using nothing but a 'cat' command. If both toys are paired using Bluetooth 2.0, so that the Pearl is at

/dev/tty.PEARL-DevB 

and the Onyx is at

/dev/tty.ONYX-DevB

Then the following command can be run

cat /dev/tty.PEARL-DevB > /dev/tty.ONYX-DevB

This will cause the output from the Pearl's touch sensors to be read directly into the Onyx, controlling its pressure rings.