So I’ve been researching into how it all works and figured to keep the info in one thread, so people interested in development can read here.
First of all this is the general way of communication between Steam and the headset:
Steam system <-> pvr_driver.dll <-> LibPVRClient64.dll <-> pi_server.exe <-> headset
So how it works is that SteamVR, upon opening, tries to load all drivers that it finds in its C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers directory. This is where the pvr_driver.dll is located and this is how Steam loads this PIMAX driver. The driver dll dynamically loads “LibPVRClient64.dll” which is located in your windows directory. This dll contains RPC code that searches for a RPC server, located at “\pipe\pvr_api”. This pipe is opened by pi_server.exe, which thus functions as a server to the LibPVRClient dll. The pi_server communicates with the headset.
So in short, for Steam to function, all you need is that pi_server to be running, the pvr_driver in the windows directory and the LibPVRClient dll in your windows directory.
Version 1.1.x uses a different communication method between the server as v1.2.x, so you can’t mix the v1.1.x server with the v1.2.x client for example (v1.1.x uses for example shared file mapping which is not used in v1.2.x)
About the driver itself: the driver needs to expose a ‘driverfactory function’ to Steam, which in turn exposes 2 methods that Steam uses. There are example drivers out there, from “OSVR” (Open Source VR) which explain it very well:
In fact, Pimax is based on this Open source driver too ! So it should be possible to modify the Source code to get it going with Pimax.
Anyway, I’ll keep updating this thread with any relevant info that I find.