罗技方向盘套件开发记录

一、项目要求:

捕获罗技G29数据,并进行UDP转发。

 

二、过程:

(一)不安装官方驱动,直接插入USB口,在控制面板的设备页面能找到游戏控制器,打开测试对话框,按钮是有反应的。

于是使用GitHub上的一个封装库SharpDirectInput,发现可以采集到大部分数据,但仍有数据无法采集。

回到控制面板的设备页面,找到游戏控制器测试对话框,也是不支持全部按钮,不支持离合器。估计这个也是用了DirectInput技术。

类似的参考文章:

https://blog.csdn.net/fedora08/article/details/2643873?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-13.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-13.no_search_link

 

(二)使用罗技SDK;

1.安装官方驱动,即LG游戏软件: https://support.logi.com/hc/zh-cn/articles/360025298053 

2.下载官方SDK: https://www.logitechg.com.cn/zh-cn/innovation/developer-lab.html 

打开官方Demo发现无数据出现,而LG游戏软件里面(点上方配置文件里面的测试)有数据出现。经过多台计算机反复实验,必须在拔掉G29USB后,先删除控制面板->设备里面系统默认安装的驱动程序——游戏控制器,有的系统还会多安装一个什么管理器,也要删掉;然后重新安装LG游戏软件。然后插上G29的USB,点击Demo的init,触动G29,即可收到数据。

3.利用提供的SDK进行编程即可收到所有数据。

4.但是,利用官方SDK要保证LG游戏软件始终运行。还有个更大的问题,就是必须保证调用SDK的应用程序窗口始终在最前面。

参考文章:

 

(三)使用winmm.dll接口编程,主要用到的函数:

joyGetDevCaps                  查询指定的游戏杆设备以确定其性能

joyGetNumDevs                  返回系统支持的游戏杆设备的数量

joyGetPos                       查询指定的游戏杆设备的位置和活动性

joyGetPosEx                    查询一个游戏杆设备的位置和它的按扭状态

joyGetThreshold                查询指定的游戏杆设备的当前移动阈值

joyReleaseCapture              释放由JoySetCapture函数设置的在指定游戏杆设备上的捕获

joySetCapture                  发送一个游戏杆消息到指定的窗口

joySetThreshold                设置指定的游戏杆设备的移动阈值

这个待验证

 

(四)经过研究,发现DirectInput技术已经过时,目前用XInput技术

微软的解释:https://docs.microsoft.com/en-us/windows/win32/xinput/xinput-versions

其中提到:XInput is a cross-platform API that has shipped for use on Xbox and Windows. 

可见这是用来在Windows平台上对接Xbox设备的一组API,后面文字提到比DirectInput哪里好。

回到罗技官方售卖页面,发现方向盘套件分为G20和G920两种,前者是PS3\PS4标准,后者是XBox标准。网上查了一下,前者是用在日本游戏机上,后者是用在欧美游戏机上,而前文所述微软的XInput这套API是针对XBox提供的。难道要换成G920吗?

待验证

 

(五)使用其它针对joystick封装好的库

参考文章:https://blog.csdn.net/yu_lei_/article/details/83218744,里面提到Github上面的两个库

SDL - mirror / SDL :这个库比较大,包括joystick在内的多个Direct3D支持,但是看意思也是基于Direct的。
Tasssadar / libenjoy:这个库比较简单,基本是对winmm.dll的封装

两个库下载后顺利编译运行,有待验证

 

上一篇:EasyCVR接入华为视频云系统eSDK过程——设备管理接口的使用


下一篇:Spring捕获AOP抛出的异常