USB connection – it works!

Done:

  • write a clean joystick interface: 4 axes with 16-bit precision, 12 buttons (no PS3 button yet), and a hat (d-pad). This uses the excellent LUFA framework from Dean Camera.
  • configure an interrupt for the serial reception (great tutorial from Dean Camera)
  • write a RS232-capable emu process (docs).
  • write a new Sixemugui

Sixemugui layout:

Results:

  • 2ms update period = 500Hz update frequency (same as my G500 mouse) – not sure the PS3 can drive a usb device at that speed – not sure running as fast is relevant considering the Linux latency
  • measured worst latency between a usb packet received by the PC from a peripheral (like a mouse) and the usb packet received by the device the joystick is connected to (for easiness, the PC – should be the PS3) is about 4.7ms, average latency is about 3.6ms

Notes:

  • It’s probably better to avoid connecting both the mouse and the USB to serial device to the same usb bus.
  • A kernel with realtime capabilities could probably lower the worst latency.
  • It’s not good to work at a frequency higher than the mouse frequency (no mouse report in the last period => stick is set to the center => jerky movements).
  • The dead zone doesn’t seem to be is proportional to the max absolute axis value.
  • The report period is probably not constant without a realtime kernel (2ms is probably too low considering the Linux latency).
  • For performance reasons, emu & emuclient could be merged in a single process.

Next tasks:

  • build a package

6 Replies to “USB connection – it works!”

  1. Outstanding! I am really looking forward to future updates on this particular idea. I think I might start to redesign the PS3Jailbreak dongle that I built to accommodate a second MCU.

  2. Wikipedia says it's 10-bit because Sony says it's 10-bit. But it's not, it's only 8-bit like the 360 pad. Only motion sensing controls are 10-bits.

    16-bit is probably not required (something like 10 or 12-bit could be enough), but it makes my life easier because it's exactly two bytes.

    I still need to see if this really allows us to reach more positions.

Leave a Reply

Your email address will not be published. Required fields are marked *