SpaceNavigator: Mouse/Joystick/Keyboard. Driver Documentation v2.0 Currently I am now using my SpaceNavigator for ALL of my application and/or games and still using it in 3D apps with the original 3DxWare software. I dreamt of it, I hoped for it to appear in my socks for Christmas And no such luck. So, I ve written it myself. A driver for our SpaceNavigator!!!!
Why use a Driver and not just a simple User-Mode application? Or using the 3DConnexion SDK? Some applications or games don t accept hooking up a keyboard, or useing DirectX Input, so with a user-mode app, I m not able to send information the way I want. With a driver, SpaceNavigator doesn t emulate a keyboard/mouse/joystick But IS a keyboard, IS a mouse, and IS a Joystick. In a few words, an HID Device (Human Interface Device) has a HID_Descriptor that tells the OS (Windows) what kind of device it is. This HID_Descriptor resides in the firmware device waiting for the OS to ask for it when initializes. When there is no driver installed, Windows will use the standard HID driver (HIDClass.sys), and assigns the HID_Descriptor to it. The HID_Class driver reads the information from the device and sends it back to Windows. If you install a driver, you can send back a fake HID_Descriptor. In the same way, a HID_Descriptor can tell the OS that the device is a Multi-device. The original HID_Descriptor from SpaceNavigator is a 99% a Joystick one. In fact, it s more than 99%, only 2 bits in the descriptor, who has more than 12000 Bytes, are different I think this is voluntary. Here are the first bytes of this descriptor: /* Space Nav */ 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x08, // USAGE (Undefined) 0xa1, 0x01, // COLLECTION (Application) 0xa1, 0x00, // COLLECTION (Physical) 0x85, 0x01, // REPORT_ID (1) 0x16, 0x0c, 0xfe, // LOGICAL_MINIMUM (-500) 0x26, 0xf4, 0x01, // LOGICAL_MAXIMUM (500) 0x36, 0x00, 0x80, // PHYSICAL_MINIMUM (-32768) 0x46, 0xff, 0x7f, // PHYSICAL_MAXIMUM (32767) The second line: 0x09, 0x08 change it to 0x09, 0x04 and u have a Joystick. With those 2 bits changed, SpaceNavigator is seen as a Joystick without any driver. OK, I want more, I want a bind functions, I want a keyboard, I want a mouse!!!
Let s Go. There are 2 parts in my driver: 1. RBC9-SpaceNav.sys, the driver. 2. RBC9-SpaceNav.exe, a user mode application to create Layout(s) that the driver will use. And if u want, an AutoSwitch feature. NB: there is a Harcoded Layout, used by default if you don t create more layouts. The binds are A. Nav Axe -> Joy Axe and Mouse Move B. Nav Btn -> Joy Btn and Mouse Btn C. Nav Rotation -> Mouse Wheel.
I. Installation IMPORTANT: Don t start the exe until told. Stop the 3DxWare application momentarily. Run RBC9 - SpaceNav.msi and follow the step quiet simple folder to install and nothing more This will install RBC9-SpaceNavigator.exe and copy to your system32 driver directory the RBC9-SpaceNavigator.sys Go to your device manager, select SpaceNavigator If you have multiple HIDs on your computer, check the property info and look for the one with VID_046D&PID_C626.
1. Now right click and select update driver software 2. Select Browse my computer for driver software 3. Select Let me pick.
4. Select RBC9 SpaceNavigator 5. Select Install this driver software anyway
And u should obtain Installation is Complete!
Now, in your device manager, you have 2 new devices, 1. An HID Keyboard device and a HID-Compliant Mouse 2. and in your Game Controllers, a new Joystick. The joystick has 8 axes and 8 buttons. This is in case some game needs Throttle or Slider instead of X Y Z Rotation At this moment the driver is working, and you should be able to move SpaceNavigator around to see the Joystick cursor move, and Button Lights On this is the hardcoded Layout running.
II. Create Layout / Configure : Now u can start RBC9-SpaceNav.exe An Icon should appear in your Systray. Click on it to pop up the Configuration menu «Status», Device Remove, Current Layout. Right Click on it, pop up the menu. The Menu Option: SpaceNavigator Auto: Turn On/Off AutoSwitch, this feature needs the RBC9- SpaceNav.exe running, the driver could do it by itself. o AutoSwitch is a feature that tells the driver with Layout use in function of the Application Focus. o The AutoSwitch will use Layout define for listed applications and go back to the Default Layout for the others. Switch Layout Does what it says Switch to a specific Layout. Edit Layout : Here we Are
EDIT LAYOUT You can create as many Layouts as you want. For Each Layout, u can Bind What you want to what you want. One Axe of SpaceNavigator to One Axe or multiple Axes on the Joystick, in the same time, for this Axe, a mouse move and a Key Hold there is no limitation
A) Create a New Layout : Click on the Add button, a new line with -New Layout- appears at bottom of the Layout list. Click it to rename. (For Each Layout u can choose a Global Deadzone for the Axes.) B) Each Layout have (or not) a list of Exe for the AutoSwitch part. Use Add / Del button, and click to type in the exact name of the application. On the picture I have a Dummy Layout use to turn off all bind when I m in 3Dx software. C) Select the SpaceNavigator Axe/Button u want to bind. NB: u can see value; indicate the actual position of SpaceNavigator Axe. Use it to adjust min / max or Deadzone. D) Click Add under Bind To list
For each Bind u can Invert Axe/Btn, and select the part of the axe to use from SpaceNav. Part position with the Slider and/or Positive/Negative value with the Combo. E) Now select Bind Type : Joy Axe / Joy Btn / Joy POV : choose Axe / Btn to bind on Joystick.
Mouse X / Y : Change the Sensitivity o Mouse Wheel : Choose the repeat delay o Mouse Button : o Switch Layout : The layout u want to switch to o NB: I use this i.e., I bind Alt Key + Tab Key when I push down the SpaceNavigator, so I get the windows Task Switch. I add a bind on the same axe to Switch Layout So When I push, Task Switch come, and the SpaceNav is bind to 3 new functions only. 1) Pull up : leave the task switch and go back to another layout. 2) Left and right rotation : bind to Left Arrow and Right Arrow
Keyboard: You can bind 5 keys into one Bind, if you need more, add a second bind. Each bind could be a Key Press = standard keyboard event. Key Hold = the key is keep press until another bind tell to release. Key Release = A repeat option is available, i.e., in some video app, u can go from frame to frame with left/right arrow. Sometimes press key is enough, if u keep down, but sometimes need to press/release to go on and the speed u do it.. Ok, i create 3 bind on the rotation axe, 1) min 10 max 100 : repeat delay 500 (2 times per second) 2) min 101 max 200 : repeat delay 250. 3) min 201 max 360 : repeat delay 50 With this I have a sensitive control on the frame to frame movement It s an example. Or u can use it as Autofire in some games Apply : Save your Config and quit Layout Editor. Cancel : Forget everything thing you ve changed. Calibrate
Some info : When u are in the Edit Layout screen, the driver stop sending to Joystick Mouse and Keyboard. The driver restart when u leave this screen. The AutoSwitch option is save when u change in the Edit Layout Screen, if u turn on /off in the pop up menu, it will go back to the saved state next restart of the application. The driver load the default layout when it start, so u don t need to run exe if u don t want any autoswitch. U can change layout without using exe application. Pull up and turn left (at end point max value) the space navigator for more than 3 seconds and it will enter in Special mode. The Led flashing indicate this mode. Left Button : go to default Layout. Right Button : go to next Layout. Push down to leave Special mode. Know bugs: Uninstall the driver, (no problem with the application). In the device manager, when the uninstall procedure looks like freeze, u have to move something on the SpaceNavigator to free a thread in the driver. I have a mistake with an event in the IOCTRL routine see later. Have Fun Ced Aka RBC9.