Implement driver for nreal Air
I've started to implement a driver for the nreal Air glasses. It does only utilize the device as headset so it's possible to use its orientation in an application. Other functionality is still quite limited because it's based on reverse-engineering rather than open documentation. It is also based on my latest efforts writing a custom user-space driver for Linux.
What still needs to be done:
-
The brightness of the display should be requested on startup and maybe also adjustable during runtime. -
The device allows a 3D mode (stereo rendering for each lense/display). This requires a newer firmware (announcement of this feature was 18th of July from Xreal). However it only works with some compositors yet (more information here). -
The driver might fail on reading data from the sensor interface because there's still IMU data stacked up from ealier runs. That needs to be cleared properly. -
If the display is used in 2D mode it should probably not tell the application to render in each eye separate as typical for VR applications. That needs to be adjusted. -
The coordinate system might be wrong. That needs to be checked. Currently it's matching my custom driver, I think. -
Accessing the hid devices requires additional permissions out of the box. There could udev rules get installed with Monado to fix that (monado/utilities/xr-hardware!25 (merged)).
What would still be neat to have:
-
Use imu_noises
from the original calibration data and apply the proper values (for example gyroscope-noise per temperature) from the ICM-42688-P datasheet (can be found here).
Also I'm not sure whether the driver should require the display to be activated (as implemented in my first commit) or not for usage. Might be something to discuss. Currently it's definitely possible to switch on/off the display during runtime via its button. But it needs to be on during startup.
I will mark it as ready when I think it should get merged. But the MR might be good for early feedback.