Hi!
I'm dusting of my old Space Navigator again, and I have several questions, some comments, to either the dev's or anyone else who might know :)
Firstly, 'driver' versions :)
If I look for my device ' Space Navigator' and Win7 64bit, I get:
- 3DxSoftware (64-bit Edition) 3.17.7.
But if you look up 'SpaceMouse wireless', I find:
- 3DxWare 10 for Windows (64-bit) 10.0.19.
Now, I think the latter is what used to be the beta software which has more features? And it does actually also support the Space Navigator? (works fine here :) ).
So, what exactly are these two, what is different between these two? And why is the new/better version only offered for the wireless?
What happend to '3DxConfig' ?? :)
It seems to be gone in 3DxWare 10 for Windows (64-bit) 10.0.19?
I only see it mentioned on the forums :)
As alternative I'm trying to write something to do the same in Java, but I do wonder what happend to it? :)
Joystick emulation configuration:
Is it documented anywhere what all these values mean?
Especially, what is the difference/meaning of min/max for 'input' and 'output'?
I'm interested because I want to make it work for Kerbal Space Program ;)
Which brings me to the next question: Does anyone have any idea what's up between Unity and the Joystick emulation? I get quite erratic values in any unity engine,
but in for example windows joystick calibration things looks fine :)
Comments (Based on 3DxWare 10 for Windows (64-bit) 10.0.19):
- \3Dconnexion\3DxWare\3DxWinCore64\Icons\3dsmax.exe
Do you realize you're distributing copyrighted software from autodesk? ;) I guess someone wanted to grab the icon, and forgot to delete the .exe :)
- \3Dconnexion\3DxWare\3DxWinCore64\Cfg\Inventor.xml
Looks like it has some accidental copy pasted (duplicate) lines with "CurrentButtonBank", twice actually. I'm writing a little parser for the XML files, and it tripped over this :)
Thanks! ^_^
Driver questions and remarks
Moderator: Moderators
Re: Driver questions and remarks
Oh, and a bonus question, in Windows 7 joystick calibration runs like this:
"C:\Windows\system32\rundll32.exe" shell32.dll,Control_RunDLL C:\Windows\system32\joy.cpl
Using <ExecutableName>rundll32.exe</ExecutableName> works, but isn't great, since many things may run as rundll32.exe, any other way to specify the specific (joy.cpl)? :)
Also, can I edit old posts here? I don't seem to find the functionality ;)
"C:\Windows\system32\rundll32.exe" shell32.dll,Control_RunDLL C:\Windows\system32\joy.cpl
Using <ExecutableName>rundll32.exe</ExecutableName> works, but isn't great, since many things may run as rundll32.exe, any other way to specify the specific (joy.cpl)? :)
Also, can I edit old posts here? I don't seem to find the functionality ;)
Re: Driver questions and remarks
Hmm, I've been looking at Unity more (actually downloaded the SDK :), and compiled a example .exe).
Firstly, settings Output.Scale to 0.30 helps, otherwise a very small movement already causes clipping.
Sidenote, if I look at the logging, I see these lines, which are not scaled, correct? I assume so, cause scaling doesn't seem to have any influence.
00000004 23:24:32.382: Device 1: Raw Rot vector: -1 -1 107
00000020 23:24:32.386: SendJoystickEvent: Joystick: buttons=0x0, status=0x0, X=0, Y=0, Z=0, RX=0, RY=0, RZ=127, throttle=0, hat=0x0, force=0
Now with a Output.Scale at 0.30, it seems that:
LOG UNITY
127 -1
.. -1.0 to 0.0
64 0.0
.. 0.0 to 1.0
0 1
.. -1
-127 -1
So it seems the issue is (as suggested in other places) that Unity expects only positive (0 to 127), and the emulator gives full range (-127 to 127).
I hoped that Output.min and Output.max in the XML could solve this, but it seems they do nothing? :) *sad*
Setting them to any value has no effect?
I hoped this would work:
<Output>
<ActionID>HIDJoystick_Rz</ActionID>
<Min>0</Min>
<Max>511.00</Max>
<Scale>0.30</Scale>
<Reversed>true</Reversed>
</Output>
Also, Input.min and Input.max seem to just clip the input value, is that correct? (They don't change the input value, but if the actual input value goes beyond the limits, it stays at the limit).
Hmm, any idea what would work for this? :)
Thanks! :)
Firstly, settings Output.Scale to 0.30 helps, otherwise a very small movement already causes clipping.
Sidenote, if I look at the logging, I see these lines, which are not scaled, correct? I assume so, cause scaling doesn't seem to have any influence.
00000004 23:24:32.382: Device 1: Raw Rot vector: -1 -1 107
00000020 23:24:32.386: SendJoystickEvent: Joystick: buttons=0x0, status=0x0, X=0, Y=0, Z=0, RX=0, RY=0, RZ=127, throttle=0, hat=0x0, force=0
Now with a Output.Scale at 0.30, it seems that:
LOG UNITY
127 -1
.. -1.0 to 0.0
64 0.0
.. 0.0 to 1.0
0 1
.. -1
-127 -1
So it seems the issue is (as suggested in other places) that Unity expects only positive (0 to 127), and the emulator gives full range (-127 to 127).
I hoped that Output.min and Output.max in the XML could solve this, but it seems they do nothing? :) *sad*
Setting them to any value has no effect?
I hoped this would work:
<Output>
<ActionID>HIDJoystick_Rz</ActionID>
<Min>0</Min>
<Max>511.00</Max>
<Scale>0.30</Scale>
<Reversed>true</Reversed>
</Output>
Also, Input.min and Input.max seem to just clip the input value, is that correct? (They don't change the input value, but if the actual input value goes beyond the limits, it stays at the limit).
Hmm, any idea what would work for this? :)
Thanks! :)
Re: Driver questions and remarks
Drat, I tried being sneaky, but this also doesn't work ;)
I guess only one mapping per output axis is picked up :)
Also, seems input min/max is before 'reverse', because each half of the following did exactly what I wanted :)
<Axis>
<Enabled>true</Enabled>
<Input>
<ActionID>HIDMultiAxis_Rz</ActionID>
<Min>0</Min>
<Max>512</Max>
<Deadband>20</Deadband>
</Input>
<Output>
<ActionID>HIDJoystick_Rz</ActionID>
<Min>-512.00</Min>
<Max>511.00</Max>
<Scale>0.60</Scale>
<Reversed>false</Reversed>
</Output>
</Axis>
<Axis>
<Enabled>true</Enabled>
<Input>
<ActionID>HIDMultiAxis_Rz</ActionID>
<Min>0</Min>
<Max>512</Max>
<Deadband>20</Deadband>
</Input>
<Output>
<ActionID>HIDJoystick_Rz</ActionID>
<Min>-512.00</Min>
<Max>511.00</Max>
<Scale>0.60</Scale>
<Reversed>true</Reversed>
</Output>
</Axis>
I guess only one mapping per output axis is picked up :)
Also, seems input min/max is before 'reverse', because each half of the following did exactly what I wanted :)
<Axis>
<Enabled>true</Enabled>
<Input>
<ActionID>HIDMultiAxis_Rz</ActionID>
<Min>0</Min>
<Max>512</Max>
<Deadband>20</Deadband>
</Input>
<Output>
<ActionID>HIDJoystick_Rz</ActionID>
<Min>-512.00</Min>
<Max>511.00</Max>
<Scale>0.60</Scale>
<Reversed>false</Reversed>
</Output>
</Axis>
<Axis>
<Enabled>true</Enabled>
<Input>
<ActionID>HIDMultiAxis_Rz</ActionID>
<Min>0</Min>
<Max>512</Max>
<Deadband>20</Deadband>
</Input>
<Output>
<ActionID>HIDJoystick_Rz</ActionID>
<Min>-512.00</Min>
<Max>511.00</Max>
<Scale>0.60</Scale>
<Reversed>true</Reversed>
</Output>
</Axis>