Skip to content

PlayStation Vita

Status: implemented; axis convention pending live-Vita validation.

The Vita has a full 6-axis IMU (3-axis accel + 3-axis gyro), a good tracker in the 3DS / Joy-Con 1 tier. Like the 3DS it can’t be host-driven, so a homebrew streams IMU over UDP. Because the Vita’s motion API already returns calibrated floats, the wire carries SI f32 values and skips all raw-count scaling.

Aspect Value
Protocol UDP, bridge binds 0.0.0.0:9306
Identity sender IP (one Vita = one tracker)
Rate ~100 Hz

A distinct port from the 3DS (9305) lets both run at once.

Packet layout (24 bytes, little-endian f32)

Section titled “Packet layout (24 bytes, little-endian f32)”
Offset Field Unit
0x00 Accel X g
0x04 Accel Y g
0x08 Accel Z g
0x0C Gyro X rad/s
0x10 Gyro Y rad/s
0x14 Gyro Z rad/s

No header, sequence, or checksum - validate length == 24 and drop otherwise.

accel_m_s2 = accel_g × 9.80665; gyro is passed through in rad/s. The axis convention is currently pass-through - confirm on hardware (gravity +Z screen-up, gyro sign agreeing with accel-derived rotation) and lock the remap once validated.

  • The wire format is eimu-defined, so the companion must match it exactly.
  • No magnetometer, battery, or rumble.
  • Vita Wi-Fi is 2.4 GHz; UDP loss is tolerated.