You do not need to pair the base stations. Everything works by just placing them in range of the BLE adapter and keep them powered on.
The link box will not help, as it’s only working when you also connect a VIVE HMD to it. Steam will still not detect your lighthouses. Although, I tried with a regular link box, not the VIVE PRO one.
The Python solution (and binary) work out of the box, where for the VS solution you seem to need to enable the setting in Windows to allow the OS to communicate with untrusted devices. There’s a post a few weeks back.
and at the beginning it seems to have some random value, but writing 0, turns off the lighthouse and writing 1 turns it back on. Once written reading from it returns the written value. Interestingly enough this characteristic is explained as “power control: 1 is on”. Which makes sense
The other characteristic is explained as “Mode” and I have suspicion that this could indicate the channel number, but reading it gives some unrelated value (e.g. 0x24).
This is not present on 2001 firmware apparently. I am going to upgrade the firmware once I get hands on Valve’s headset and see how this changes the behavior. The good news is, out of the box, it is possible to power control the bases just fine.
I wonder since this is open source could Pimax include this in Pitool or Pimax Experience so users have one less disappointment to go through when first getting the headset and realizing that their lighthouses don’t turn off as they would expect?
The “problem” is that my implementation targets linux (and uses linux API), so it cannot be simply copied over to Windows except the protocol (which is a bit convoluted for v1 but pretty straightforward for v2). I guess Pimax should be able to port it to Windows (if they want).
I was thinking about it, but then decided for simplicity to keep it separate. I would expect that someone either runs v1 or v2 LHs but not both (as they are not compatible), and therefore can pick the corresponding version. The other reason was that the protocols are not similar at all so there is not much to share between the implementations. So at the end I preferred two rather simple implementations separated.
In general, I wrote both scripts as a demonstration of the principle, so they are easy to use and easy to read (and understand), rather than polished UI app.
EDIT: Just to explain why it is targeting linux - I am running it on my Raspberry Pi .
With open source (as for example anything on GitHub) there is usually a licence, which defines, how you can use the code, or if there is none, you can always ask the author. In my case it really does not matter - I wrote it for a demonstration, hoping someone will make a nice Windows app out of it .