User Tools

Site Tools


start

This is an old revision of the document!


Ergodex DX1 Open Source Drivers

www.ergodex.com_images_img_0639.jpg

Ergodex created the device in 2005 and released it to the world where it received much praise, especially from left-handed gamers who until now have had to suffer with remapping the keys on every single game they play to the opposite side of the keyboard. Some games, including many popular games, don't even allow keyboard remapping thus forcing their users to struggle to play the games how their narrow minded right-handed developers designed them. The Ergodex is a godsend to left-handed people as it allows you to place up to 50 keys where ever you like on the pad and assign any keys (and macros) to each key and have the pad automatically reconfigure itself depending on the current application in use. It's also great for many other users, for right-handed users it allows you easier (and faster) access to more keys. Many disabled users are also finding it very useful. In fact the device is so good it recevied an award from popular science in 2005 Best of what's new 2005.

Unfortunately Ergodex have not created any drivers for MacOS X or Linux, nor even Windows XP64 bit, now Windows Vista is out and there's still no drivers for these 4 important operating systems! Ergodex will not give ANY information regarding support for these 4 operating systems for which drivers do not exist. Nor will they give ANY information regarding driver updates and new features - not that the existing drivers on Windows XP 32bit don't work, they do, and very well, it's just that we want more from our DX1's than Ergodex seem to be willing to provide.

This site aims to bring together as many developers as possible in order to first document the USB protocol the device uses and second to write new drivers, primarily for Windows XP (32 and 64bit) and Windows Vista (32 and 64bit) while attempting to keep as much of the code as reusable as possible so that it may be used to create MacOS X and Linux drivers too.

This project was started in February 2007, just after the retail release of Windows Vista.

Join In

If you want to help with the project please drop me, hydra, an email at this address: hydra at hydras hyphen world dot com

Or, you can join the #ergodex IRC channel on freenode irc://irc.freenode.net/#ergodex.

If you've not used IRC before then grab a copy of HydraIRC (which I, Hydra, also wrote :-) ), install it, start it, create a profile then click the irc: link above to join the channel or use file/connect and paste in the irc: link from above and click “Ok”. Shortly after you should see a connection to irc.freenode.net being made and then a new window will appear for the channel. If the channel is empty just wait and someone will appear. If you want to page me then just say my name (Hydra) in the channel.

Developer Section

User Section

Hardware

Useful Tools

Here's a list of other open-source projects, the source to which may be very useful when creating the drivers

AutoHotKey - Macro playback, joystick & mouse button events.

Synergy - Cross-platform code for recording and playing back mouse movement and keyboard events over a network.

QLiner hotkeys - More keyboard/mouse related code.

Donations

Donations can be sent to “paypal at hydrairc dot com”. Any amount gladly received and will go towards paying for the hosting of this site.

Many thanks to those that have already donated, your donations have been graciously received - Hydra

Current Status

  • 2009/01/19 - JH

Posted a compiled Mac OSX Intel binary for Rab's Linux driver on the download page. Also instructions on how to compile your own if you're so inclined.

  • 2008/10/06 - Rab

Posted the Linux “driver” that I wrote last year on the download page. It's not all that exciting, but it will allow you to use your DX1 under Linux for most scenarios. It's totally separate from the C++ windows driver being worked on (much simpler, but not as feature rich as the C++ one is aiming for).

  • 2008/03/23 - Hydra

Ok, so i ripped all the startup and shutdown code from my monitoring app today and also gave each CPadDevice it's own thread and figured out why some of the older code i'd written was causing problems.

Now I have the main UI in one thread, the CPadMonitor class in it's own thread (so it can do macro related stuff without the UI thread getting in the way, plus i didn't see an easy way of coupling the ui's main loop with one or more pad's io loops), the pad monitor can spawn any number of pad devices and it owns, starts and stops their threads.

Everything seems to be working ok so far.

I've also figured out why, and equally importantly where i need critical sections in the code and moved some parts of the code around so that i need less of them.

Previously what was happening was i was queuing up commands in one thread while the thread that processed commands was running and screwing around with the command queue. Now the startup commands are queued by the same thread that processes them.

If you remember I'd never written any multi-threaded code and thus knew nothing of how to design them and what all the pitfalls and gotchas are.

I'm much happier about the code now, no horrible hacks anywhere in sight.

Still not happy with the CreateFile() usage of the USB pipes though, it seems i can't prevent the same pipe being opened more than once. Another reason to put the IO code in the driver.

Next I'm going to code device detection routines so that other people can try what i've written so far as currently it's hard coded to use one specific usb port on my machine.

I've updated the Doxygen Documentation on the site which has been generated from today's code, a source code and binaries snapshot is available on request via the Downloads page.

It's good to finally make some progress.

In other news it appears that there seems to have been some financial issues between Ergodex and the developers of the original software which is why there hasn't been an update of the software for a while. It appears that Ergodex are trying to get other developers to work on the code but I certainly wouldn't hold my breath (and if you are those other developers I'd be asking for cash up front if I were you!). This underlines the fact that we need some open-source software so that owners of these wonderful pads can continue to use them forever. Since there are these financial difficulties between the original developers and Ergodex it's highly unlikely that we'll ever see multiple pad support or any new major features (think shift states, etc) from Ergodex. Since I, and others, have been sitting on the fence waiting for something to come from Ergodex, knowing that there's not going to be anything gives us all a reason to get on with writing replacement software.

  • 2008/03/15 - Hydra

Interesting comment from Anon below. Hope that's not the case, and if it is the case perhaps Anon wouldn't mind getting in contact with me?

In the meantime in some bizarre timing coincidence I actually did a spot more work on my open-source drivers today. I basically cleaned up some of the pad monitor shutdown code in vain attempts to solve the threading memory corruption issues and while it's cleaner it's still broken but this time in a different way.

As all the device communication code works perfectly I'm thinking of scrapping the current application and pad monitor code and might just write a single threaded application that can still support multiple DX1 pads. If I don't take this approach I fear I'll never get the drivers written at all.

Even though I've got a new PC I'm still not running Vista or XP64 and still only have one DX1 pad.

If everyone reading this clubs together and donates a few pounds I could buy a second DX1 or a CH-Products Pad which would certainly give me a good reason to spend more time on this project.

  • 2008/03/09 - Anon

Ever wonder why there is no new Ergodex software released? Perhaps it is because they never paid the people that developed the software.

  • 2007/11/16 - Hydra

I really need some decent examples of how to start, suspend and stop threads and send messages from/to worker threads from/to a main task and how to use critical sections in C++. if anyone knows of any good web-sites or can recommend any current books that give a good overview on these topics PLEASE CONTACT ME ASAP!

  • 2007/07/31 - Hydra

Currently on hold until I find some time to learn more about C++/Win32 multi-threading, thread-synchronisation, semaphores, critical sections and who knows what else. Or, until someone submits a patch to help me out. Just ask if you want to help out with my current C++ codebase.

  • 2007/04/05 - Hydra

Looks like I started this project at just the right time as it appears the ergodex.com website is now down and has been for the last 2 days! I better get cracking on these drivers… :) I will probably setup some forums here soon, now that there's (currently) no forums available on the ergodex.com site.

  • 2007/03/16 - Hydra

I'm back from my snowboarding holiday now (which was awesome) and have been loaned a second Ergodex DX1 pad which will allow me to implement and test multiple pad support! Many thanks goes to Richard Veitch for the loan of the second DX1.

  • 2007/02/16 - Hydra

Uploaded the Doxygen Documentation to the site.

  • 2007/02/15 - Hydra

More progress on the Pad Monitor core, some UI interaction and status reporting now in place. Added a screenshot to the new Development Screenshots wiki page.

  • 2007/02/12 - Hydra

Excellent progress made on the Pad Monitor core. I now have the lots of nice C++ OO code written for creating command requests, parsing responses, processing command queues, processing input, raising events based on responses, matching responses to commands, matching responses to commands and raising events based on completed commands. All multi-threaded too! The pad data processing thread is separate from the UI thread, enabling rapid processing of “macro key” presses and releases.

Took apart my Ergodex DX1, took photos and created the What's inside an Ergodex DX1 wiki page.

  • 2007/02/10 - Hydra

Good progress has been made on the design of the pad monitor core.

Some UI code has been written for the Pad Monitor.

C++ code written to build requests for the DX1 pad.

C++ code written to handles responses for the DX1 pad.

C++ code for input steam (including dealing with corrupt data, short reads, etc) has been done.

  • 2007/02/09 - Hydra

Added the Software Components page to the wiki with my ideas on how to implement a software solution that could potentially work with many kinds of HID devices.

  • 2007/02/08 - Hydra

A test driver has been written and works on Windows XP 32bit. Recompiling for XP64, Vista 32 and Vista 64 should not present any problem and will be tested and made available for download soon.

  • 2007/02/07 - Hydra

Completed reverse engineering the parts of USB protocol that are required in order to write drivers.

No information from this site is to be in any commercial projects.

Anyone wanting to use the information from this site for purposes other than the goals of this project should contact the project maintainer first.

All code written will most-likely be licensed under the GPL license.

Images used on this page are copyrighted to their respective owners, if any images are used on this site and shouldn't be please remove them and fill in the edit summary accordingly, provide alternates where possible.

start.1232424482.txt.gz · Last modified: 2009/01/20 05:08 (external edit)