DirectInput 和 XUSB 设备

Windows 上的 XUSB 驱动程序实现 XINPUT DLL 的内核模式接口。 为了为将 DirectInput API 与通用控制器设备配合使用的旧游戏提供良好的体验,驱动程序还会导出 DirectInput 选取的 Human Interface Device (HID) 类接口。 我们根据原始 XINPUT 版本的一组游戏应用程序中的典型行为选择了 XUSB 到 HID 的映射,并更新了较新的子类型的映射。 本主题介绍映射。

人机接口设备 (HID)

HID 标准是通用串行总线(USB)委员会(最初由Microsoft提出的标准),用于通用化输入设备的协议。 它由字节代码描述语言组成,可以表达游戏板、鼠标、游戏杆、限制和陆路控件以及多轴控制器。 由于此标准已通用化,因此编写使用任意设备输入的软件可能很困难。 因此,对于以游戏为中心的 DirectInput API,我们开发了一种特定的类型子映射,以鼓励硬件制造商通过其驱动程序提供支持。

重要

还可以通过 RawInput API 访问 HID 输入设备,并通过低级别 HID API 处理输入报告,但振动反馈不适用于 DirectInput

映射

XUSB 驱动程序为设备实现 XUSB 类接口和 HID 类接口,以支持 XINPUT 和 DirectInput 用法。 此映射基于 XUSB 子类型信息。 驱动程序实现四组不同的映射。

XUSB 子类型 映射
XINPUT_DEVSUBTYPE_GAMEPAD (子类型 1) 游戏板
XINPUT_DEVSUBTYPE_WHEEL (子类型 2) 轮子
XINPUT_DEVSUBTYPE_ARCADE_STICK (子类型 3) 街机摇杆/街机板
XINPUT_DEVSUBTYPE_FLIGHT_STICK (子类型 4) 飞行摇杆
XINPUT_DEVSUBTYPE_DANCE_PAD (子类型 5) 任何新子类型的默认值
XINPUT_DEVSUBTYPE_GUITAR (子类型 6) 吉他
XINPUT_DEVSUBTYPE_GUITAR_ALTERNATE (子类型 7)
XINPUT_DEVSUBTYPE_DRUM_KIT (子类型 8)
XINPUT_DEVSUBTYPE_GUITAR_BASS (子类型 11)
XINPUT_DEVSUBTYPE_ARCADE_PAD (子类型 19)

注意

以下 HID 映射是静态的。 这意味着,即使设备功能报告指示不支持特定按钮或轴,映射仍将包含它,但始终报告状态或中心值。

游戏板

这是默认映射,围绕标准游戏板设计,并作为 游戏板 HID 使用类型公开。

控制 HID 用法名称 使用情况页 使用情况 ID
左摇杆 X、Y 0x01 0x30、0x31
右摇杆 Rx、Ry 0x01 0x33,0x34
左触发器 + 右触发器 Z* 0x01 0x32
D-Pad 向上、向下、向左、向右 Hat Switch 0x01 0x39
一个 按钮 1 0x09 0x01
B 按钮 2 0x09 0x02
X 按钮 3 0x09 0x03
Y 按钮 4 0x09 0x04
LB (左保险杠) 按钮 5 0x09 0x05
RB (右保险杠) 按钮 6 0x09 0x06
返回 按钮 7 0x09 0x07
开始 按钮 8 0x09 0x08
LSB (左摇杆按钮) 按钮 9 0x09 0x09
RSB (右摇杆按钮) 按钮 10 0x09 0x0A

注意

\: 这组合在一起,使 Z 呈现大多数游戏预期旋转的中心行为;这意味着无法通过 directInput 和 HID 查看所有可能的触发器组合值。

街机摇杆/街机板

这是围绕街机摇杆控制器设计的映射,作为 游戏板 HID 使用类型公开。 街机板非常类似于街机摇杆,但在较小的外形规格中。 这些设计将模拟左触发器和右触发器替换为数字按钮,用于报告最小和最大轴值。

控制 HID 用法名称 使用情况页 使用情况 ID
D-Pad 向上、向下、向左、向右 Hat Switch 0x01 0x39
一个 按钮 1 0x09 0x01
B 按钮 2 0x09 0x02
X 按钮 3 0x09 0x03
Y 按钮 4 0x09 0x04
LB (左保险杠) 按钮 5 0x09 0x05
RB (右保险杠) 按钮 6 0x09 0x06
返回 按钮 7 0x09 0x07
开始 按钮 8 0x09 0x08
左触发器 按钮 9 0x09 0x09
右触发器 按钮 10 0x09 0x0A

这些设备可能或可能不支持其他控件,但这些控件不受 HID 映射公开:左摇杆、右摇杆、LSB(左摇杆按钮)和 RSB(右摇杆按钮)。

轮子

此映射围绕赛车方向盘设计,并作为 游戏板 HID 使用类型公开。

控制 HID 用法名称 使用情况页 使用情况 ID
滚轮 (左摇杆 X) X 0x01 0x30
加速器踏板 (右扳机) + 刹车踏板 (左扳机) Z* 0x01 0x32
D-Pad 向上、向下、向左、向右 Hat Switch 0x01 0x39
一个 按钮 1 0x09 0x01
B 按钮 2 0x09 0x02
X 按钮 3 0x09 0x03
Y 按钮 4 0x09 0x04
LB (左保险杠) 按钮 5 0x09 0x05
RB (右保险杠) 按钮 6 0x09 0x06
LSB (左摇杆按钮) 按钮 7 0x09 0x07
RSB (右摇杆按钮) 按钮 8 0x09 0x08
返回 按钮 9 0x09 0x09
开始 按钮 10 0x09 0x0A

注意

•:这组合在一起,使 Z 显示大多数游戏预期为刹车和加速器控件预期的居中行为:这意味着不可能通过 DirectInput查看所有可能的踏板组合值。

飞行摇杆

此映射围绕飞行杆设计,并作为 游戏杆 HID 使用类型公开。

控制 用法名称 使用情况页 使用情况 ID
飞行棒 (左摇杆) X、Y 0x01 0x30、0x31
POV 帽子 (右摇杆) Rx、Ry 0x01 0x33,0x34
限制(右触发器) Z 0x01 0x32
陆克(左扳机) Rz 0x01 0x35
D-Pad 向上、向下、向左、向右 Hat Switch 0x01 0x39
主要武器 (A) 按钮 1 0x09 0x01
辅助武器 (B) 按钮 2 0x09 0x02
X 按钮 3 0x09 0x03
Y 按钮 4 0x09 0x04
LB (左保险杠) 按钮 5 0x09 0x05
RB (右保险杠) 按钮 6 0x09 0x06
返回 按钮 7 0x09 0x07
开始 按钮 8 0x09 0x08
LSB (左摇杆按钮) 按钮 9 0x09 0x09
RSB (右摇杆按钮) 按钮 10 0x09 0x0A

注意

这是基于最终飞行棒设计。 由于这不同于早期飞行摇杆定义,因此许多设备都有一个支持旧模型和新模型的模式开关。 此映射假定新模型。