You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pywinusb发送Idle请求?HID设备控制技术问询

使用pywinusb发送HID Idle请求

你可以通过pywinusb发送HID标准的Set Idle控制请求来实现Idle请求的发送,以下是具体实现步骤和修改后的代码:

核心原理

HID的Set Idle是标准控制请求,参数定义完全符合HID规范:

  • bmRequestType: 0x21(主机到设备,类请求,目标为接口)
  • bRequest: 0x0A(Set Idle请求的固定代码)
  • wValue: 高字节为报告ID(无报告ID则填0),低字节为Idle时长(0表示无限期Idle)
  • wIndex: 目标HID接口的编号
  • 数据段: 无(不需要额外数据)

修改后的代码

import pywinusb.hid as HID
import time

v_id = 0x047a
p_id = 0x1004
i=0
count_line=0
data_2_list=[]
all_devices = HID.HidDeviceFilter(vendor_id = v_id).get_devices()
print(all_devices)
device = all_devices[0]
device.open()

# 发送Set Idle请求
bm_request_type = 0x21
b_request = 0x0A
w_value = 0x0000  # 报告ID为0,Idle时长0(无限)
w_index = device.get_interface_number()
device.send_control_transfer(bm_request_type, b_request, w_value, w_index, None)

my_file=open("demofile2.txt","r")
data_lines=my_file.readlines()
for data_line in data_lines:
    count_line+=1
    data=data_line.replace("\n","")
    data_2_str_list=data.split(",")
    data_2_list.clear()  # 清空列表避免数据累积
    i=0  # 重置索引,避免循环异常
    while i<len(data_2_str_list):
        data_2_list.append(int(data_2_str_list[i],16))
        i+=1
    print(data_2_list)
    device.send_output_report(data_2_list)
    time.sleep(0.05)
print(count_line)
device.close()  # 释放设备资源

关键说明

  1. Idle请求放在设备打开后、批量数据发送前,严格匹配你的工作流程
  2. 若设备需要指定报告ID,修改w_value即可:比如报告ID为0x01,Idle时长0,就设置w_value = 0x0100
  3. 修复了原代码中data_2_list未清空、索引未重置的问题,避免多次循环后数据异常
  4. 添加了设备关闭操作,确保资源正确释放

内容的提问来源于stack exchange,提问作者JayLin1119

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:35:45