PS Move API
latest
  • Building from Source
  • Pairing
  • Camera
  • Network (Move Daemon)
  • Configuration
  • Navigation Controller
    • Pairing
    • Testing
    • Axes and Buttons
    • Caveats
PS Move API
  • Docs »
  • Navigation Controller
  • Edit on GitHub

Navigation Controller¶

While the “PS Move Navigation Controller” (CECH-ZCS1E) is marketed together with the Move Controller, in reality it’s just a special variant of the SixAxis / DualShock 3 controller with its own PID.

  • Vendor ID: 0x054c (Sony Corp.)
  • Product ID: 0x042f (PlayStation Move navigation controller)

As such, the Navigation Controller does not need a special library for reading, processing and interpreting input events. After pairing, the controller can be used just like a normal gamepad device via the operating system game controller APIs.

Pairing¶

The psmove command-line utility now comes with a new sub-command pair-nav, which will use sixpair to pair a Navigation Controller (as well as a Sixaxis, DS3 and DS4) via USB. sixpair comes from the sixad package, but has been modified to read the Bluetooth Host address from the PS Move API libraries (for cross-platform support):

psmove pair-nav

Just like with the normal pairing function, one can pass an alternative Bluetooth host address to the pairing tool:

psmove pair-nav aa:bb:cc:dd:ee:ff

Testing¶

The easiest way to test the controller is via the jstest tool, which comes in the joystick package on Debian-based systems:

sudo apt install joystick

Assuming the Navigation Controller is the only joystick-style device connected, you can test it with:

jstest /dev/input/js0

There is an example file examples/c/test_navcon.cpp that shows how to use SDL2 to read the navigation controller (this is also built as a program if PSMOVE_BUILD_NAVCON_TEST is enabled in CMake):

test_navcon

Axes and Buttons¶

These values are also exposed in psmove.h as enum PSNav_Button and enum PSNav_Axis for your convenience. However, you are expected to bring your own Joystick-reading library (e.g. SDL2).

  • Analog stick
    • Axis 0 (horizontal, “X”)
    • Axis 1 (vertical, “Y”)
    • Button 7 when pressed (“L3”)
  • Shoulder button (“L1”): Button 4
  • Analog trigger (“L2”):
    • Axis 2 (“Z”)
    • Button 5 when pressed (even just slightly)
  • Cross button: Button 0
  • Circle button: Button 1
  • D-Pad Up: Button 8
  • D-Pad Down: Button 9
  • D-Pad Left: Button 10
  • D-Pad Right: Button 11
  • PS button: Button 6

Caveats¶

On Linux, all inputs work via both USB and Bluetooth. When connecting via USB, you might need to press the PS button for the controller to start reporting.

On macOS, inputs only work over Bluetooth, not via USB. Also, the button assignment is different on macOS (but psmove.h contains definitions for both platforms and will pick the right ones). As a special case, the analog value of the trigger isn’t available on macOS at the moment.

This is not tested at all on Windows, contributions welcome.

Previous

© Copyright 2020, Thomas Perl Revision 5067d192.

Built with Sphinx using a theme provided by Read the Docs.
Read the Docs v: latest
Versions
latest
stable
Downloads
pdf
html
epub
On Read the Docs
Project Home
Builds

Free document hosting provided by Read the Docs.