Lighthouse V1 Manager

1、用法

Windows 10 升级到 2004 之后会因为这个 Bug 导致 SteamVR 无法正确控制 HTC 的两个基站。在苦等一个月依旧等不到 M$ 和 V 社的补丁,只能自己想办法解决。目前网络上有现成的 Lighthouse V2 Manager 但无奈自己家境贫寒只用得起一代基站,所以干脆自己改写了一个,放在 GitHub 上。

执行下列命令会自动搜索基站并在桌面创建两个图标:

python .\lighthouse-v1-manager.py discover -cs

discover

启动基站:

wake_up

休眠基站:

stand_by

2、一些细节

多数人应该跟我一样,两个基站分别设置成了 B 模式和 C 模式,两者是主从结构,只有 B 启动了,C 才会跟着启动,如果 B 进入了休眠模式,那么 C 也会跟着休眠。

所以理论上我们只需要控制 B 模式的基站就能实现对另一个基站的启停,但是问题是:我们无法通过基站的蓝牙协议拿到基站当前所处的模式,所以我选择的方法是,只要检测到基站,无视模式,直接启停。

此外,一代基站其实本身并没有提供直接休眠的指令,相反,所有的电源控制指令都是用于唤醒基站的,但同时它也允许发送者提供一个睡眠超时参数,我们可以把这个参数设置得足够短,就可以实现「休眠」的效果。

基站提供了三种指令来控制电源:

指令 / SN 号 Default ID Real ID
0x1200 不休眠 不休眠
0x1201 60s 自动休眠 60s 自动休眠
0x1202 特定时候休眠,期间不允许修改休眠时间 特定时间休眠,期间允许修改休眠时间

所以对应有几种电源管理方案:

  1. 0x1201 或者 0x1202 + 真实 ID 启动后,定期发送指令来延长休眠时间,比如 lhbsv1_pimax 使用的就是这套方案。程序需要常驻后台,但优点是关机后基站也会自动休眠。
  2. 0x1200 启动后,0x1202 + 真实 ID + 比较短的休眠时间让基站快速休眠。优点是程序不需要长期常驻后台。

这两个都是比较理想的方案,但是会有一个比较头疼的问题,设备的 ID 没法通过常规方式获得,要么从设备背后拿到 ID 后手动录入程序,要么先让 SteamVR 识别一次基站,从 SteamVR 的基站数据库文件 lighthouse.db 读取。

两种解决办法都有比较多的前置条件,虽然我都实现了但总归不太喜欢,所以最后选择了一种折中的方案:

  1. 0x1200 启动,0x1201 + 默认 ID 休眠,只不过执行之后需要等待 60s。

对我个人来说等就等吧,谁也不会闲着没事盯着基站看。

3、参考资料