Skip to content

Class ID Table

Every serializable object in the protocol is identified by a 16-bit class ID. The deserializer reads this ID from the stream and uses it to dispatch to the correct object constructor.

Class ID Object Description
0 BMPacket Protocol packet wrapper
1 BMAddress Network address (private IP + ports)
3 BMParameter Typed value wrapper (String, Int, Float, Bool, ByteArray, Object)
4 BMInvoke RPC method call (method name, return method, parameters)
5 Acceleration Accelerometer reading (x, y, z as f64)
6 TouchSet Multi-touch input (list of Touch points)
7 IPhoneDevice iOS device identity
8 UnityDevice Unity host device identity
9 AckPacket Connection request acknowledgment
10 AndroidDevice Android device identity
11 Ping Latency probe
12 StringLiteral Simple string wrapper
13 Shake Device shake event
14 BMByteChunk Raw binary chunk with size header
15 NativeDevice Native (C/C++) host device identity
16 PalmDevice Palm/webOS device identity
17 ServerDevice Registry server device identity
18 FlashDevice Flash host device identity
19 BMRegistryInfo Device identity + network address + slot info
21 BMArray Ordered collection of serialized values
22 BMGyro Gyroscope reading (x, y, z as f32)
23 Orientation Orientation quaternion (x, y, z, w as f32)
24 DPadUpdate D-Pad directional input (x, y as i16)
256 BMPacket Alias for class ID 0 (BMPacket)

Notes

  • Class ID 2 is unassigned.
  • Class ID 13 is technically defined but never used. Shake event sending was never implemented in any of the original controller apps.
  • Class ID 20 is unassigned.
  • Class ID 256 (0x100) is a secondary registration for BMPacket, likely used as a version-specific alias.
  • Device identity classes (7, 8, 10, 15, 16, 17, 18) share the same serialization format but carry different device type codes. See Device Types.