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

AutoHotKeys - 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

  • 2007/02/07 - Hydra

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

  • 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/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/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/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/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/16 - Hydra

Uploaded the Doxygen Documentation to the 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/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/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/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!

  • 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.

  • 2008/03/15 - Hydra

Interesting comment from Anon above. 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.

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.1205623296.txt.gz · Last modified: 2008/03/16 00:21 (external edit)