Real Name: André-John Mas
Because of my interest in 3D input devices I decided to purchase myself, a serial based, Spaceball 5000. I chose this model because it had a spherical grip and was in a suitable price range for the hobby developer, when bought off eBay. Having a serial based deviced was not an issue, since I already had a PL2303 based USB to RS232 adaptor and the an appropriate driver (http://sourceforge.net/projects/osx-pl2303/). The problem was that there were no drivers for my operating system (MacOS X), and the communication protocol was not document anywhere that I had access to. I had found some source for the Spaceball 3003 and the Spaceball 4000, but a forum I came across indicated that the communication protocol was not the same for the Spaceball 5000.
The first thing I tried was running the ‘screen’ tool from the command line to see what was being sent to the computer. Doing this revealed that data for the key presses were being sent back to the computer, but no information on the ball movement. Further research on the web confirmed that the ball would not sent back any data until it was initialised.
The solution to my problem was to somehow know what communication was being performed in a normal scenario. To do this I got out my old Windows PC, running MS Windows 2000, downloaded and installed the driver. After confirming that it was working I got myself a copy of ‘portmon’ from Microsoft. Running portmon after reconnecting the Spaceball allowed me to see what initial handshake was being performed and what data it was being sent back.
Follows are the details on what I found out, but it is far from complete.
Serial port configuration: 9600 baud, parity: none, word length: 8
A packet starts with a packet type id, is terminated by byte of value 13 (carriage return). The length of the packet depends on the packet type.
- Send request: vQ
- Response: v SPACEBALL Version 8.20 3Dconnexion GmbH 05/11/02
Readying the ball
- Send requests: m3, q00, pAA, n?
- Response: none
- Send request: none
- Response: k000
- Send request: none
- Response: dH000H000H000H000H000H000