DirectInput手柄Windows环境下震动实现
背景
近期项目里面有个需求,需要在控制终端上安装摇杆,且需要通过震动反馈设备的某些重要运行状态。自以为机智的自己在万能的某宝买了一个飞行摇杆,带震动反馈,DInput接口,结果是踩坑的开始。
Windows下手柄分为两类,XInput和DirectInput,XInput主要是Xbox系列手柄,比较贵,亲儿子;市面上大多杂牌的手柄都只支持DirectInput。查阅官方文档:xinput and directinput 心凉了半截:The vibration effects will not be available,意思就是directinput不再支持手柄震动了。不过directInput有一个directInputEffect,从文档看是力反馈,论坛说也能拿来做震动,因此先用directInput做一下尝试。
1.direcrInput手柄震动控制
1.1运行环境
环境搭建就不再赘述,主要就是选一个win10的tool kit,已经集成了directx。Qt是项目中用于界面搭建的环境。
(1)windows 10 1903
(2)Qt 5.9
1.2代码实现
github 上有比较完整的 QGameController,能够实现手柄的识别、各参数的读取,封装比较完整,但是没有手柄震动的驱动。本着不重复造轮子的原则,从这个开源项目开始进行代码实现。
DWORD dwAxisX = DIJOFS_X; //一个震动电机
LONG lDirecX = 0;
DIPERIODIC diPeriodic;
ZeroMemory(&diPeriodic, sizeof(DIPERIODIC));
DICONSTANTFORCE diConstantForce;
ZeroMemory(&diConstantForce, sizeof(DICONSTANTFORCE));
DIEFFECT diEffect; // general parameters
// set up the effect structure itself
diEffect.dwSize = sizeof(DIEFFECT);
diEffect.dwFlags =<