DirectInput 和 XUSB 设备

Windows 上的 XUSB 驱动程序为 XINPUT DLL 实现了内核模式接口。 为了给使用 DirectInput API 和通用控制器设备的旧版游戏提供良好的体验,驱动程序还导出一个人机接口设备 (HID) 类接口,该接口由 DirectInput 选取。 我们根据原始 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
方向键的向上、向下、向左、向右 顶帽控制器 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
BACK 按钮 7 0x09 0x07
START 按钮 8 0x09 0x08
LSB(左摇杆按钮) 按钮 9 0x09 0x09
RSB(右摇杆按钮) 按钮 10 0x09 0x0A

注意

(*):将其组合起来,以便 Z 表现出大多数游戏进行旋转所需的居中行为;这确实意味着无法通过 DirectInput 和 HID 查看所有可能的扳机组合值。

街机摇杆/街机板

这是围绕街机摇杆控制器设计的映射,作为游戏手柄 HID 使用类型公开。 街机板非常类似于街机摇杆,但外形较小。 这些设计用报告最小和最大轴值的数字按钮取代了模拟左扳机和右扳机。

控制 HID 用法名称 使用情况页面 用法 ID
方向键的向上、向下、向左、向右 顶帽控制器 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
BACK 按钮 7 0x09 0x07
START 按钮 8 0x09 0x08
左扳机 按钮 9 0x09 0x09
右扳机 按钮 10 0x09 0x0A

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

滚轮

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

控件 HID 用法名称 使用情况页面 用法 ID
滚轮(左摇杆 X) X 0x01 0x30
加速踏板(右扳机)+ 制动踏板(左扳机) Z* 0x01 0x32
方向键的向上、向下、向左、向右 顶帽控制器 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
LSB(左摇杆按钮) 按钮 7 0x09 0x07
RSB(右摇杆按钮) 按钮 8 0x09 0x08
BACK 按钮 9 0x09 0x09
START 按钮 10 0x09 0x0A

注意

(*):将其组合起来,以便 Z 表现出大多数游戏进行制动和加速控制所需的居中行为;这确实意味着无法通过 DirectInput 查看所有可能的踏板组合值。

飞行杆

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

控制 用法名称 使用情况页面 用法 ID
飞行杆(左摇杆) X, Y 0x01 0x30,0x31
POV 帽(右摇杆) Rx,Ry 0x01 0x33,0x34
油门(右扳机) Z 0x01 0x32
方向舵(左扳机) Rz 0x01 0x35
方向键的向上、向下、向左、向右 顶帽控制器 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
BACK 按钮 7 0x09 0x07
START 按钮 8 0x09 0x08
LSB(左摇杆按钮) 按钮 9 0x09 0x09
RSB(右摇杆按钮) 按钮 10 0x09 0x0A

注意

这基于最终的飞行杆设计。 由于这与早期的飞行杆定义不同,因此许多设备都有支持新旧型号的模式开关。 此映射采用新型号。