1 · Recommended POCCAN → MCU → USB HID → Quest
The bridge reads CAN and appears to Android/Unity as a joystick or gamepad. Android supports USB host mode and enumerates attached devices; USB HID is self-describing and designed for generic host drivers.45
Why first: least software, deterministic setup, easiest logging, and directly extends the working wired-controller test.
2 · Wireless follow-onCAN → MCU → Bluetooth HID → Quest
Use Bluetooth HID over GATT so Quest sees a standard input device rather than a custom telemetry peripheral. Meta publishes an official game-controller pairing path, and Bluetooth SIG defines HID over GATT for low-energy devices.67
Tradeoff: cable-free operation, but pairing, reconnect behavior, radio congestion, battery state, and headset OS updates become acceptance criteria.
3 · Only when neededCAN → MCU → custom BLE GATT → Unity plugin
Custom characteristics allow richer telemetry, diagnostics, firmware status, and more controls. They also require scanning, connection management, characteristic handling, Android permissions, and Unity-to-Android integration.89
Use only if: the simulator needs data that cannot be represented cleanly as axes, buttons, hats, or HID feature/output reports. Meta treats BLUETOOTH_CONNECT, BLUETOOTH_SCAN, and BLUETOOTH_ADVERTISE as review-requiring permissions and permits them for third-party devices that cannot otherwise pair through Quest’s Bluetooth interface.12
Not a transport problemUnity remains on the headset
The Quest runs the Android Unity build. The bridge is an input adapter, not a compute host. OpenXR still handles tracked headset/controllers; the heavy-equipment controls enter through Unity’s Input System as a separate device.
Implication: no embedded Unity runtime is needed in the RWC hardware.