Windows 上的 XUSB 驱动程序实现 XINPUT DLL 的内核模式接口。 为了为将 DirectInput API 与通用控制器设备配合使用的旧游戏提供良好的体验,驱动程序还会导出 DirectInput 选取的 Human Interface Device (HID) 类接口。 我们根据原始 XINPUT 版本的一组游戏应用程序中的典型行为选择了 XUSB 到 HID 的映射,并更新了较新的子类型的映射。 本主题介绍映射。
人机接口设备 (HID)
HID 标准是通用串行总线(USB)委员会(最初由Microsoft提出的标准),用于通用化输入设备的协议。 它由字节代码描述语言组成,可以表达游戏板、鼠标、游戏杆、限制和陆路控件以及多轴控制器。 由于此标准已通用化,因此编写使用任意设备输入的软件可能很困难。 因此,对于以游戏为中心的 DirectInput API,我们开发了一种特定的类型子映射,以鼓励硬件制造商通过其驱动程序提供支持。
- HID v1.11 的 USB 设备类定义
重要
还可以通过 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 |
街机摇杆/街机板
这是围绕街机摇杆控制器设计的映射,作为 游戏板 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 |
注意
这是基于最终飞行棒设计。 由于这不同于早期飞行摇杆定义,因此许多设备都有一个支持旧模型和新模型的模式开关。 此映射假定新模型。