罗技方向盘套件开发记录(二)

一、背景:

提供的输入管理软件(以下称软件)转发以下三种数据:
按钮组合模块,罗技G29方向盘数据,JC6000的手柄数据。

二、问题描述:
软件采用罗技官方提供的SDK获取数据,当软件成为非前景窗体(活动窗体)时,无法接收罗技G29方向盘数据。

三、解决问题的尝试:
1.使用罗技官方提供的测试软件,经测试,同样不能在DEMO软件失去焦点的情况下收到数据;
2.卸载LG官方驱动,使用系统自带驱动,在控制面板->设备和打印机-G29设备的属性测试页面中测试设备输入,不能在失去焦点的情况下收到数据;
3.使用Windows平台的DirectInput/Xinput技术方案,不能在失去焦点的情况下收到数据;
4.使用成熟的跨平台(Window/WindowRT/Linux/Android)的媒体/游戏开发库SDL进行开发,仍然不能在失去焦点的情况下收到数据。

四、原因分析:
方向盘与键盘、鼠标一样,同属于输入设备,其输入必然指向当前窗体。试想同时打开Word和Excel软件,用户敲击键盘后,一定是当前处于活动的窗体接收到键盘的输入数据,鼠标操作也是如此。作为游戏输入设备的方向盘,也必然只对当前游戏程序起作用,不可能同时控制当前游戏程序和另外一个未获得焦点的游戏程序。为何项目中的按钮组合和JC6000手柄可以接收到数据?这两类数据是通过网络通道传输,而每个IP和本机端口的组合是一个单独的通道,所以它们可以在后台自由的传输数据,这与方向盘的原理是不一样的。

五、结论与改进:

1. 从项目分工的逻辑上来看,由用户直接交互的程序直接读取方向盘数据更为合理。一是因为它在整个功能实现的生命周期将一直获得焦点,二是如此可以减少中转的时间和系统资源消耗,可以做到零延迟。
2. 当然,从操作系统底层来看,作为直接与方向盘硬件交互的设备驱动层是得到这些数据的,只是直接读设备驱动层的数据在没有官方文档的情况下,绕路较远,工作量激增,加上前期没有相关技术积累,开发周期无法控制。作为一个变通的办法,尝试从USB接口的思路来解决。因为Joystick也是HID设备,对HID的读写是有比较成熟的方案的。

这个问题留到下一章解决。
 

posted @ 2021-10-17 21:08  闪亮的敦敦  Views(666)  Comments(0)    收藏  举报