如何使用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() # 释放设备资源
关键说明
- Idle请求放在设备打开后、批量数据发送前,严格匹配你的工作流程
- 若设备需要指定报告ID,修改
w_value即可:比如报告ID为0x01,Idle时长0,就设置w_value = 0x0100 - 修复了原代码中
data_2_list未清空、索引未重置的问题,避免多次循环后数据异常 - 添加了设备关闭操作,确保资源正确释放
内容的提问来源于stack exchange,提问作者JayLin1119
相关产品推荐
相关产品推荐

