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