hidapi包中write方法执行无响应且返回-1是什么原因?
你当前的操作逻辑存在根本偏差:
- 你打开的
0x045e:0x028e是物理Xbox 360有线手柄,属于纯输入类HID设备,它的轴、按键数值完全由硬件采集后主动上报,上层软件仅能通过read方法读取上报的状态,不能通过write方法覆写硬件的输入状态。 hidapi的write方法是用于向支持下行通信的HID设备发送指令(比如给带震动功能的手柄发送震动参数,给自定义HID外设发送控制指令),你操作的手柄没有对应接收输入状态覆写的HID输出端点,所以write调用始终返回-1,本身就是操作不被支持的标识,和你传入的数组内容无关。
正确实现方案
你要实现向赛车游戏传输自定义方向盘输入信号的需求,应该使用虚拟输入设备方案,而非操作真实物理输入设备:
- Windows平台可安装ViGEmBus驱动,搭配对应Python绑定,直接虚拟出Xbox手柄/方向盘设备,你可以随意设置虚拟设备的轴、按键数值,游戏会直接识别该虚拟设备的输入信号。
- Linux平台可使用
evdev库创建uinput虚拟输入设备,自定义轴量程后直接上报输入事件即可。 - 如果你需要把真实摇杆的输入映射为方向盘输入,正确的流程是:用
hidapi读取真实摇杆的输入值,做自定义转换后写入虚拟输入设备,再将游戏的输入源设置为你创建的虚拟设备即可。
补充说明:你当前使用的hidapi本身没有问题,非常适合与自定义HID外设做双向通信,但不符合模拟输入设备的需求场景。
内容的提问来源于stack exchange,提问作者JeanExtreme002
相关产品推荐
相关产品推荐

