Some time ago, SpaceTec IMC created a unique and powerful input device named the Spaceball Avenger, descended from a series of high-end CAD controllers and eventually giving rise to the SpaceOrb 360. Looking something like a squat boomerang with six buttons clustering the right side and a rubber-coated ball jutting presumptuously from the left, the SpaceOrb allowed true six-degrees-of-freedom control to any supporting games with a precise range of motion. Nothing quite like it had ever been seen in the computer games arena.
I was fortunate enough to see the SpaceOrb at the 1996 Computer Games Developers' Conference, where they had erected a tiny booth showing the orb off; it was running one of the Descent games, and I was captivated. While my sense of control was completely shot, the possibilities seemed immense; with a quick twist of the wrist and slight application of pressure, I was able to perform maneuvers which normally required coordinated motion of multiple fingers, several buttons, and more manual dexterity than I had.
Without question, I was interested, and signed up for their developers' program, intending to use the orb in a game I was loosely designing, tentatively named "Halberd".
Halberd never saw the light of day, unfortunately, and it wasn't until several years later that I went ahead and purchased an orb for my own use. In the years to follow, the orb would be seen, largely, as a commercial failure. Spacetec IMC was absorbed by Labtec, who was then acquired by Logitech and spun back off as 3dConnexion. With orb advocates growing fewer, and the orb languishing in the marketplace, WDM-compliant drivers never materialized for Windows 2000. When Windows XP arrived as the next de facto home operating system, the future of the orb seemed doomed.
More to the point, it meant that I couldn't use my favorite controller any more. And I hate to see good technology abandoned.
On a lark, I began poking around the Microsoft Windows Device Development kit, and discovered that they included source code for several drivers--such as hidgame.sys, a driver for enumerating standard gameport devices and making them look like HID (human input device) drivers, or mouser.sys, a driver for enumerating serial mice and setting them up as normal mouse devices. With luck and a bit of duct tape, I figured that I might, just maybe, be able to get a driver working, and posted a querulous message on a SpaceOrb user community bulletin board to that effect. Never mind that I hadn't touched C/C++ in over a year or so, had been working with Linux almost exclusively for the past two years, and had never once written anything resembling a device driver.
What followed was about four weeks of frenetic development, explosive feature sets, and the most active user community I've seen, and what it resulted in is hidsporb.sys, a kernel-mode device driver which treats the SpaceOrb as a standard HID device and, if anything, offers more configurability than ever, with such advanced features as chording to provide a virtual 16 buttons, user-configurable axis mapping, sensitivity curves, gain, a "press-for-precision-mode" feature, and the ability for zealous users to create and upload their own axis response curves. With mouse and keyboard emulation slated for upcoming versions, I believe this to be one of the more advanced user interface devices out there--minus, unfortunately, a glossy user interface. We must take these things one part at a time.
The SpaceOrb community has been an immense source of support and encouragement throughout all this. I have invested a fair amount of my time in this driver, and I personally believe that this, the first release version, is the finest driver I am able to create at this time. It is probably not without faults; time will tell. But now I give it to you.
What you do with it is of interest to us all.
Next >>> | ||
Requirements |