ngomes wrote:Why 3Dconnexion devices are not reporting that they are HID joysticks, having absolute axes with specific ranges and deadzones!?
As above, 3Dconnexion hardware products are "HID multi-axis controllers". This is an USB Implementers Forum standard (refer to the "HID usage tables" doc).
I am pretty aware that "HID multi-axis controller" is proper name for this device purpose, however the existing APIs and existing application usually expects the device to be a joystick, or at least to be a device having absolute axes, which SpacePilot is in fact from construction/hardware point of view. But SpacePilot does not state that via USB HID, what makes it unusable/not-detectable for existing applications and APIs handling joysticks.
ngomes wrote:(2) it DOES not report its axis to be absolute
It does not and that's unfortunate. When the first 3D mice with USB were developed, not all platforms (Windows, Mac, Linux) had the same support for the HID standard. The "mis-reporting" of relative/absolute is a legacy of that time.
It is fixable via firmware upgrade? Isn't it?
This is main issue here I believe. Regardless the project I work on is supposed to run on Linux & Windows, I work on Mac myself.
Surprisingly Mac handles SpacePilot (having no drivers) perfectly, it scales the axis values to full signed 16-bit range (as expected in most input APIs), reading and scaling somehow those -/+500 range using data sent by the device itself, regardless it does report axes to be relative. Moreover axes are coming back always to ZERO, so no deadzones here. I presume Mac is doing some smart calibration under the hood. But in case of Linux and Windows it is much worse...
ngomes wrote:next I need to find out empirically the ranges and deadzones
Why "empirically"? Range should be reported back as +/500. Dead-zone is zero (device sends no data until value > 0). Can you tell us the device firmware version?
Here in Windows and Linux unfortunately there's no way to return those -/+500 using HID API. So I need to hardcode them into the application, which is not the way I like.
Moreover Windows and Linux HID API sends non-zero (close-zero) values when I let the device go (untouched), those values sometimes are quite high like ~20-30, sometimes lower, but still should be zero (they are zero on Mac, but not in Windows/Linux). That's why I refer it as deadzone, and something that has to be empirically tested.
In contradiction to Mac which calibrates the devices pretty well, Windows and Linux direct HID APIs suffer those deadzones, and I have absolutely no clue where those came from. Also I have no clue how Mac gets those -/+500 from the device, while I tried using ABSRANGE queries using Windows and Linux and they always fail, maybe because SpacePilot logically have NO absolute axes.
Regarding firmware version I have no idea. I am not using Windows drivers for the device. I've read in KB that I shall call technical support for firmware upgrade tool assistance, so called them but the technician said most I can do is install Windows software and calibrate the device. But since I am using directly HID API, calibration that takes effect only at high level 3Dconnexion API won't change a thing. Moreover he said Linux is unsupported platform, which is pretty bad since it will be main platform for the project.
So I am pretty lost, why Mac handles this devices pretty well without drivers, but Windows & Linux suffer unpredictable deadzones.
Altogether software I am writing is supposed to handle any input (joystick) device well, and such device should be replaceable without any problem. Therefore I don't want to hardcode any calibration/deadzone information of particular device (such as SpacePilot) into it. So the user of the software can use any joystick device he want to. While SpacePilot is just a choice for the input device for first deployment of the software.
ngomes wrote:Maybe someone can enlighten me on what makes SpacePilot so special that it cannot report itself as a joystick to the OS, and let other application or games use it as regular joystick!?
I do have a few conspiracy theories about that, but not want to troll over here
![Wink :wink:](./images/smilies/icon_wink.gif)
Joysticks are normally two-axes devices. 3D mice are six-axes. At a basic level they are similar devices (motion sensor/actuator, keyboard, display).
I think you can hardly find joystick nowadays that have less than four axes. Most of them have four, five, or even more.
For flight sim joysticks 1st is roll and 2nd is pitch, 3rd is yaw (a rudder), 4th is throttle. Usually there are extra 5,6 axes for small hat for moving the view.
Game consoles such as PS or XBOX do have two analog sticks, so 4 axes. Plus PS have extra two throttle analog buttons (extra 2 axes), which makes six.
What makes a difference for SpacePilot is construction and purpose, but IMHO from logical point of view it is much more a joystick, than a mouse.