While I am by no means a serious gamer, I did spend my childhood years playing games like Wolfenstien, Wing Commander, and later Descent. As much as I loved the 3D game evolution, I was never satisfied with the control mechanisms available at the time.
During the 90's a company called SpaceTec released a product called the SpaceOrb 360. The controller I had been looking for was finally here. Unfortunately, being a student at the time I could not afford one. Nor would my father buy one for me (I'll speak to you about that later dad)
(Spacetec SpaceOrb 360)
Fast forward to 2010. Thanks to the wonders on the Internet and eBay, i found one NOS (new old stock) and promptly purchased it. Couple of weeks later and I finally had the controller I always wanted in my hands (yes I know it's a bit sad). However, nothing is ever as simple as you may wish. In the intervening years, computer hardware and software have moved on quite a bit. In my case this meant that a serial connection was required (which my PC does not have). On its own that would not be a show stopper. But in addition to needing a serial port, the device also required drivers. Drivers that have not been developed or working since Windows 95 (or maybe Windows 98, i can't remember). Lack of drivers is a bit more difficult a problem to solve.
Enter Vic Putz. Vic also wanted to be able to use his SpaceOrb on modern computers. Thankfully he decided to do something about it. His initial attempt was to create a Win32 HID minidriver known as "hidsporb". While it did work he was never 100% happy with it. And in the end it would not work on Windows Vista or 7 without some major rework (anybody who has done any Windows driver development will understand).
Not one to give up, he came up with a new (and in my opinion, ingenious) solution. Instead of trying to create the driver in user mode, he decided to create the driver in hardware.
No that is not a typo.
What Vic did was to create a circuit (more on that later) that emulates a HID device. Specifically either a mouse and keyboard, or a joystick. The net result is that you have a device in Windows that practically any game came use for control. To quote Vic:
"And what you get is a hot-pluggable USB orb, six axes, 16 buttons with chording. And the best thing, folks--it JUST WORKS. You plug it in, you get an orb. You unplug it, orb goes away. It's a hot-pluggable USB device just like we always wanted."
The actually hardware that he used was an Arduino Diecimila with a custom shield (Arduino speak for a daughter board). The beauty of the solution is that by using a programable microprocessor, it becomes very easy to modify the configuration that is being presented to Windows. If you want to invert the vertical axis, or if you want to configure all 16 possible buttons to particular key strokes (I think macros may even be possible) you can. And because it's all done in hardware, if you want to take your SpaceOrb around to a mates place and use it on his machine, you only need to unplug it and take it with you. No driver or special software required (it's all built into Windows).
(The assembled OrbShield)
Now, the reason i actually started writing this post was to document a particular problem I was having, in case anyone else finds themselves in the same situation. What I was finding, after everything was built, plugged in, and programmed, was that nothing happened (queue dramatic music). Windows would see the HID device, but none of the inputs on the SpaceOrb were registering. When I couldn't find anything wrong with the circuit I had assembled, i decided to test the SpaceOrb with an old Windows XP laptop and the hidsporb driver. Thankfully that worked. So I knew I didn't have a dead SpaceOrb. The next step was to go over the circuit again with a fine tooth comb (or in my case, a multimeter). Again I couldn't find anything wrong. So I decided to put it off to one side and work on another project of mine (more on that another time).
Some time later I decided to have another go. This time while i was performing some tests I noticed sometime odd (or rather hot). Specifically the MAX233 chip. This chip is responsible for converting the signal to/from serial (rs232). In my case i found this chip was getting exceptionally hot (enough to leave a blister on my finger). So I swapped the chip with a new one. And in a very anticlimactic finish, everything started working. (The MAX233 can be seen in the above image. Its the long black chip in the lower center part of the board).
(The OrbShield mounted on an Arduino Uno)
I'm still not sure what caused the chip to fail (whether it was just DOA, or whether I let the magic blue smoke out), but at least the fix was easy and cheap (replacement chips are only a couple of dollars). The reason i wanted to document this was that it wasn't until I just happened to put my finger on the chip that I found out what was wrong. Hopefully if someone else has the same problem, they will find this and save themselves some time and frustration.
More information on the OrbShield can be found at:
Please feel free to leave a comment if you have any questions or feedback.