97 lines
3.2 KiB
Plaintext
97 lines
3.2 KiB
Plaintext
|
|
A blocks packet consists of a stream of packed bits.
|
|
|
|
The first 7 bits of a message is the index of the device within the topology to which the
|
|
message should be delivered, or from which it originated. The 0x40 bit of this will be set
|
|
to indicate that it's a device->host message, or clear for host->device
|
|
|
|
The next 32 bits are a timestamp, in milliseconds since the source device was booted.
|
|
If sending from the host to the device, or for types of packet
|
|
where the timestamp is irrelevant, this can be 0.
|
|
|
|
This is followed by a sequence of 1 or more messages. Each message starts with
|
|
a 7 bit message type, followed by message-type-specific data.
|
|
|
|
|
|
---------------------------------------------------------------------------------------
|
|
Device topology update (device -> host)
|
|
|
|
7 bits - message type (0x01)
|
|
7 bits - number of device-info blocks to follow
|
|
8 bits - number of connection-info blocks to follow
|
|
|
|
This is followed by a series of device-info blocks of the form:
|
|
|
|
10 bits - device model identifier (see code for list of types)
|
|
32 bits - device GUID
|
|
10 bits - device firmware version
|
|
6 bits - battery status
|
|
|
|
Next follows by a series of connection-info blocks of ths form:
|
|
|
|
7 bits - device 1 index (i.e. index in the list of devices sent above)
|
|
5 bits - device 1 port type
|
|
7 bits - device 2 index
|
|
5 bits - device 2 port type
|
|
|
|
Ports are indicated by being either North, South, East or West on a device, plus
|
|
an index to indicate their position along that edge.
|
|
|
|
---------------------------------------------------------------------------------------
|
|
Control button down/up (device -> host)
|
|
|
|
7 bits - message type (down = 0x20, up = 0x21)
|
|
7 bits - device index
|
|
12 bits - control button ID (see code for values)
|
|
|
|
---------------------------------------------------------------------------------------
|
|
Touch start/move/end (device -> host)
|
|
|
|
7 bits - message type (start = 0x10, move = 0x11, end = 0x12)
|
|
7 bits - device index
|
|
5 bits - touch index
|
|
12 bits - touch X position
|
|
12 bits - touch Y position
|
|
8 bits - touch Z position
|
|
|
|
---------------------------------------------------------------------------------------
|
|
Touch start/move/end with velocity (device -> host)
|
|
|
|
7 bits - message type (start = 0x13, move = 0x14, end = 0x15)
|
|
7 bits - device index
|
|
5 bits - touch index
|
|
12 bits - touch X position
|
|
12 bits - touch Y position
|
|
8 bits - touch Z position
|
|
8 bits - X velocity
|
|
8 bits - Y velocity
|
|
8 bits - Z velocity
|
|
|
|
---------------------------------------------------------------------------------------
|
|
---------------------------------------------------------------------------------------
|
|
Device command message (host -> device)
|
|
|
|
7 bits - message type (0x01)
|
|
8 bits - command type
|
|
|
|
Command types:
|
|
|
|
resetDevice = 0x00,
|
|
requestTopologyMessage = 0x01,
|
|
setHighResTouchDetectionMode = 0x02,
|
|
setLowResTouchDetectionMode = 0x03,
|
|
|
|
---------------------------------------------------------------------------------------
|
|
Modify shared state data block
|
|
|
|
7 bits - message type (0x02)
|
|
|
|
..then repeatedly:
|
|
3 bits - type of data change command
|
|
...extra command-specific bits..
|
|
3 bits - type of data change command
|
|
..etc..
|
|
3 bits - end of sequence command
|
|
|
|
|