Analyzing the DSC Protocol with Audacity
Before disassembling the controller (mostly due to a lack of a long neck screwdriver) I decided to take a short adventure into figuring out what the mysterious DSC port on the controller actually did. A quick search of Google yielded only two mentions of DSC with respect to RC toys; the first being a DSC-to-USB converter so that one could play their favorite driving simulator using an RC controller. Not exactly what I wanted. The second was a thread on some RC-enthusiast forum talking about how to use DSC to control an RC airplane over a wire to debug potential transmitter issues. If hacking the controller proved to be unsucessful, perhaps we could use a wireless module on the arduino located on the car and roll our own controller over wifi, while still interfacing with the existing on-board motor controller.
Fortunately, the DSC port used a standard 3.5mm TRS connection, the same as what is used by all consumer-grade headphones. Recalling a post that I had seen some months ago that talked about IR analysis for a TV remote using a simple IR LED attached to an audio plug which was then captured using Audacity, I decided to follow in the same vain and connect the controller to the audio input of my computer and record what happened with Audacity.
As it turns out, the DSC protocol is delightfully simple. As illustrated in the figure below, a message is simply a set of four 0.38ms pulses with a variable gap between the pulses. The gap between the first and second pulses indicates the speed, 0.80ms for full forward, 1.30ms for full reverse. The gap between the second and third pulses determines the directionality, 0.80ms for left and 1.30ms for right. The gap between the third and fourth pulses appears to be the refernence timing; when the controller is idle the time between the all of the pulses are equal.