AerionInput.NET Version 0.1
by Christian Bayer, chrbayer@minet.uni-jena.de

Free Input Layer for N-Degree-of-Freedom devices. Binary and API Compatible
to the 3D-Connexion COM API.

Dependencies:
- .NET Framework 2.0 (perhaps works with other versions but untested, installer definitely wont work)
- HIDLibrary.NET http://sourceforge.net/projects/hidlibrary/ (included in the binary Release, working copy in SVN)


Supports:
- Aerion or Globefish (working), a 6-Degree-of-Freedom Device developed 
  by the Bauhaus University Weimar (see http://www.uni-weimar.de/cms/medien/vr/research/hci/3d-desktop-interaction/globefish0.html)
- 3DConnexion SpaceNavigator (tested and working, something with the axis mapping is still wrong)
- 3DConnexion SpaceTraveler (will be tested)
- 3DConnexion SpacePilot (untested)
- 3DConnexion SpaceExplorer (untested)
- possibly even more USB based 6-Degree-of-Freedom-Devices

License:
LGPL v2.1

Installation (Binary):
- install .NET Framework 2.0
- copy the Blender Plugin included with the driver in the install folder (3DxNdofBlender.plug)
to your Blender\plugins\ directory (create if not there)
- there is no possibility to install this library parallel to Closed-Source driver as it
claims the same classes in the registry - so they are mutual exclusive if you want. The
library installed last will be used - so if you install the Closed-Source driver after this
one, the Closed-Source driver will be used.

Compatibility:
- Tested and running on Windows 2000, XP 32bit and 64bit and Vista 32bit
- Tested and not running on Windows 98 SE because lack of Unicode support
- untested on Windows 95, and ME

Compiling:
- use VS 2005 (or later) to compile
- import installer/progid_device_register.reg to your registry

Configuration:
- use AerionInputConfig to change application specific profiles
- a new Application supporting these profiles registers itself by calling LoadPreferencesName()
the first time with an application specific string argument (e.g. "Blender")
- now you can choose this string from the field "application profile" in AerionInputConfig and
change the settings for this application
- settings are applied when LoadPreferencesName() is called by the app, so restart the app if in doubt

Recommended settings for the axes and filter functions:
- for use with Aerion and Blender:
	- X/Y/Z translation/rotation scale: 1.0 
	- translation X axis is inverted, so use -1.0
	- translation/rotation threshold: 5
	- filter function: square
- for use with 3DConnexion SpaceNavigator PE and Blender:
	- X/Y/Z translation/rotation scale: 0.2 
	- translation/rotation threshold: 10
	- filter function: cube

- This Library has been tested with Blender 2.44-NDOF and a modified version of the
3DConnexion GPL Blender plugin.
Google Earth seems to be dependent on the running 3DxWare task or something so no avail.
Google Sketchup and Maya 8.5 PLE is just the same.
SecondLife is known to work with both, the Aerion device and the 3DConnexion devices but
do not depend on any drivers (working with DirectX)
NASA WorldWind has been tested unsuccessfully, perhaps we will have to modify the original
(public domain) wrapper class for the 3DConnexion devices.
No other applications have been tested so far but feedback would be appreciated.

This library comes in C# flavor which is somewhat uncommon for something like a driver.
Using C# offered me one great advantage - the usage of the HIDLibrary.NET by 
Roman Reichel which is a dependency of this library. This gave me the opportunity to
develop a free driver replacement very fast and without fiddling around with USB and HID
details and with strict rules on buffers and stuff.
When ported to C++, this library could be ported, too.
Common libs like libusb-win32 or set-up libhid do not provide a proper event interface 
for now (tell me if I am wrong! I will instantly begin to port it!)

So for more speed and less dependencies (.NET-Framework) this lib is targeted to be
converted to VC++ in future. Help for that is very welcome ;)



Known Bugs:
- As an oddity the library is not binary compatible with the original driver for
.NET components - because you cannot load this library with the type library importer classes
as for example NASA WorldWind does (because there is nothing to import -
this project is already .NET). So there are some issues with that I want to provide a example
solution for (based on WorldWind most likely). 

