
A wire harness promoting proper dental hygiene.
I don’t pretend to be a master of wire lacing. To be honest this is my first attempt but I am thoroughly pleased with the results. I was inspired by a recent article by Keith Neufeld in which he showed off his x0xb0x Wiring Harnesses.
This is my latest arcade joystick build incorporating my recent teensy++ based controller. Locating resources on the web describing the art of wire harness lacing can be tricky as it doesn’t seem to be a popular practice but I found a decent writeup here. The wires on my controller are 24 gauge so the thick string Keith used would have been overkill. Instead I opted for waxed dental floss to wrap the wires (tip: waxed is important as it helps the knots stay tight).
Continue to view picture of complete harness

Teensy++ on a breakout board
It’s no secret the PS3 will work with most USB HID gamepads or joysticks. However the Home button is something special. If you connect your sixaxis controller to your PC and monitor button presses, the Home button comes up as button number 13. If you then create a standard gamepad with the same button mapping, the PS3 will refuse to recognize the Home button.
After some tracing of the USB traffic from an official Madcatz Street Fighter IV FightStick I was able to come up with a solution! There are 8 bytes transfered during the enumeration phase, just after the device sends it’s report descriptor. Mimicking the same exchange results in the Home button functioning correctly when button 13 is pressed.
I used the amazingly awesome Teensy++ development board after being inspired by this guys work. I also used the report descriptor from Toodles UPCB project which appears to come from the SEGA VIRTUA STICK. This descriptor is very similar to the one from the Madcatz controller, except their is one endpoint instead of two which simplifies things somewhat.
I also created a shield (pictured above) which brings several pins on the Teensy to convenient screw terminals.
Source code and Eagle files are available in a git repository. Code is licensed under the GPL v3 and the PCB design is distributed under a Creative Commons license Attribution-ShareAlike 2.5.

Terminal reference
This document can be printed onto transparency for exposing your pre-sensitized copper clad. To use this for toner transfer, be sure to mirror the image first.
And a compiled version of the code in ihex. This is for the teensy++ 2.0. The code might work with other versions of the teensy, but a re-compile will be required.
I built this board several months ago. It’s a USB gamepad circuit with 6 buttons mapped to correlate with the standard layout of a Street Fighter IV FightStick for the PS3.

Gamepad Circuit Board

Export from EagleCAD with terminal labels
It’s based on another design by Raphaël Assénat.
You’ll find the source code and Eagle files here, both licensed under the GPL.
PS: It’ll also work just fine on a Window/Linux/Mac OS X computer as well since all operating systems come with drivers for USB HID gamepads.
Came across this handy little hack today googlin around the internetz. On several occasions I’ve had the need to get the full device and report descriptors from an attached USB device. Today was another one of those occasions. If you run lsusb with the -v flag you will get a nice verbose output, but if you locate the section that contains the report descriptor you’ll be welcomed with a typical Linux friendly message: ** UNAVAILABLE **.

OH NOOZ!!1!
I thought to myself, self: “certainly there must be some way to tame this beast?”. Wouldn’t you know it, there certainly is.
Continue Reading »
A year or so ago I wrote out some instructions detailing how to make SignatureTool.jar work in Unix type systems. Soon after I got word that somewhere around JDE 4.6 or JDE 4.7, RIM actually fixed the mistake in the sigtool. Sadly they missed one.
If you attempt to sign a .cod file larger than 64KB (ie: contains sibling files or child files or whatever files) then you will likely get a file created in your current working directory that looks something like kd8m34jkf/my_lame_app-1.cod. When you load the file to the device it will result in an error of some sort. The fix for this is relatively simple. Read on for the details.
Continue Reading »
It’s 10:00pm EST, Jan. 28th and RIM’s signing servers have been down for the last sixty minutes. This wouldn’t be such an issue if the rest of the BlackBerry development tool suite wasn’t such a steaming pile of crap! Quite literally the only component that works – is the compiler.
The simulator doesn’t sim and the signing tool doesn’t sign. These two issues cause a serious problem.
First the simulator. If you take an OS 4.3.1 simulator and a device also running OS 4.3.1 the two will behave very differently in a few subtle, but important ways. My gripe is localized to the mmapi api (handles audio/video playback). Long story short, the simulator can’t be trusted so we have to debug device/OS idiosyncrasies on the device itself.
But hold on a second. The signing servers aren’t working so I can’t debug on the device in all it’s developer friendly glory with lack of usable debugger and lack of even something as simple as a means to read text written to freaking standard output!
Thank you RIM! Thank you for wasting my valuable time. Thank you for reminding me that no amount of money can justify writing software for this platform any longer.
(10:30, signing servers still not working)

jQTemplate in action
Some time ago I started a little experiment to see what this whole “Web 2.0″ development thing was all about. The goal of the experiment was to develop a simple application without the help of any server side web framework, and instead use JSON as a data interchange format. All HTML, CSS, and JavaScript should be cleanly separated.
Cleanly separating the HTML from the JavaScript posed a challenge and thus jQTemplate was born. The concept is simple: write snippets of HTML code with annotations (in the form of special XML attributes) that can be used to transform the snippet into elements in the DOM.
The result I think is actually quite nice, and I love me some pretty code!

Assembled controller
This is mainly a show and tell post. What we have here is a NES controller that has been converted into a USB HID device. This means it can be connected to a computer without installing any drivers (Linux, Mac OS X, and Windows XP).
The circuit, PCB design, and firmware for the Atmega8 micro-controller are courtesy of Raphaël Assénat. His website is a veritable cornucopia of awesome circuitry. And the best part? All of his work is fully documented and provided for use under the GPL license where applicable.
Now the show part is over, time for the tell.
Continue Reading »
In a previous post I listed 4 key items needed for BlackBerry development:
- Rapc compiler
- Signature tool
- Simulator
- Javaloader
At the time of writing the first two worked fine. The third, Simulator, is if’y at best. And the fourth was just not possible.
Until now. In late December, a saviour by the name of Nicolas Vivien dropped by the barry mailing list to let everyone know that he was hard at work on reverse engineering the Javaloader USB protocol. Within a few weeks he had developed a proof of concept that enabled users to load cod files to the BlackBerry.
Since then several developers (including myself) have chipped in to implement all of the crucial aspects of the Javaloader needed for day-to-day use.
Continue Reading »
Just a quick update on the Arduino LCD Library (bring it to version 0.3). I have worked many hours to iron out all the bugs in the code that checks the LCD modules busy flag. This is the part of the LCD modules controller that tells the arduino it’s in the middle of an internal operation.
Hopefully this fixes the sporadic behavior people have reported with their LCD’s. It certainly fixes the problem with the two LCD’s I have tested.
I also added a schematic to the package. It just outlines where to connect VCC, GND and where to put the 10K pot.