首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pywinusb和Flyfish FF32设备在窗口下。派温乌斯只派了零?

Pywinusb和Flyfish FF32设备在窗口下。派温乌斯只派了零?
EN

Stack Overflow用户
提问于 2015-08-18 10:55:43
回答 1查看 611关注 0票数 0

我正试图在windows下为Flyfish FF32 USB板(http://www.flyfish-tech.com/FF32/index.php)创建python库。我正在使用pywinusb库,Python2.7,windows 7。

设备本身也可以使用飞鱼GUI提供的服务。在从pywinusb设备运行"show_hids“演示时也是可见的:

代码语言:javascript
复制
HID device (vID=0x04d8, pID=0xf8b9, v=0x0032); FLYFISH TECHNOLOGIES; FF32, Path: \\?\hid#vid_04d8&pid_f8b9#a&135de629&1&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}

  Path:      \\?\hid#vid_04d8&pid_f8b9#a&135de629&1&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}

  Instance:  HID\VID_04D8&PID_F8B9\A&135DE629&1&0000

  Port (ID): 2460

  Port (str):USB\VID_04D8&PID_F8B9\9&815F95E&0&3

HID device documentation report
===============================

Top Level Details
-----------------

Manufacturer String:    FLYFISH TECHNOLOGIES
Product Sting:          FF32
Serial Number:          ?

Vendor ID:              0x04d8
Product ID:             0xf8b9
Version number:         0x0032

Device Path:            \\?\hid#vid_04d8&pid_f8b9#a&135de629&1&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
Device Instance Id:     HID\VID_04D8&PID_F8B9\A&135DE629&1&0000
Parent Instance Id:     2460

Top level usage:        Page=0xff00, Usage=0x01
Usage identification:   Unknown Page/usage
Link collections:       1 collection(s)

Reports
-------

Input Report
~~~~~~~~~~~~
Length:     65 byte(s)
Buttons:    1 button(s)
Values:     0 value(s)

Output Report
~~~~~~~~~~~~~
length:     65 byte(s)
Buttons:    1 button(s)
Values:     0 value(s)

Feature Report
~~~~~~~~~~~~~
Length:     0 byte(s)
Buttons:    0 button(s)
Values:     0 value(s)

*** Input Caps ***

    Usage Range 1~64 (0x1~0x40), Page 0xff00 (Vendor-defined)
        bit_field: 0
        data_index_max: 63
        data_index_min: 0
        designator_max: 0
        designator_min: 0
        is_absolute: 1
        is_alias: 0
        is_button: True
        is_designator_range: 0
        is_range: 1
        is_string_range: 0
        is_value: False
        link_collection: 0
        link_usage: 1 (0x1)
        link_usage_page: 65280 (0xff00)
        report_id: 0
        string_max: 0
        string_min: 0

*** Output Caps ***

    Usage Range 1~64 (0x1~0x40), Page 0xff00 (Vendor-defined)
        bit_field: 0
        data_index_max: 63
        data_index_min: 0
        designator_max: 0
        designator_min: 0
        is_absolute: 1
        is_alias: 0
        is_button: True
        is_designator_range: 0
        is_range: 1
        is_string_range: 0
        is_value: False
        link_collection: 0
        link_usage: 1 (0x1)
        link_usage_page: 65280 (0xff00)
        report_id: 0
        string_max: 0
        string_min: 0

但在运行以下程序时,请修改演示:

代码语言:javascript
复制
import pywinusb.hid as hid
from time import sleep


def sample_handler(data):
    print("Raw data: {0}".format(data))

filter = hid.HidDeviceFilter(vendor_id = 0x04d8, product_id = 0xf8b9)

hid_device = filter.get_devices()
device = hid_device[0]
device.open()
target_usage = hid.get_full_usage_id(0xff00, 1)
device.set_raw_data_handler(sample_handler)

report = device.find_output_reports()
print(report[0])

buffer = [0x00]*65
buffer[0] = 0
buffer[1] = 0x13


report[0].set_raw_data(buffer)
report[0].send()
sleep(1)

device.close()

执行输出: HID报表对象(输出回复器)

代码语言:javascript
复制
t, id=0x00), 63 items included
Raw data: [0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]

我没有得到预期的供应商信息。我安装了USB嗅探软件,结果发现无论我在缓冲区中放了什么,FF32总是得到0的数组。

以供参考。从GUI中嗅出的包:

代码语言:javascript
复制
80 00 09 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 18 f1 6d 0b 80 fa ff ff
02 00 00 00 40 00 00 00 75 9f b6 0b 80 f8 ff ff
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*13* 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

还有我剧本里的一个:

代码语言:javascript
复制
80 00 09 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 18 f1 6d 0b 80 fa ff ff
02 00 00 00 40 00 00 00 41 57 87 05 80 f8 ff ff
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

有人知道这里出了什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-14 20:09:15

这个设备很奇怪,报表的65个字节是不需要的,因为这通常受到端点大小的限制。

无论如何,set_raw_data()将被用作“立即”隐藏使用设置的模板,因此它将验证您提供有效的报告id和可解析信息(由Windows进行解析)。

在这种情况下,如果您想向设备发送“任何东西”,只要报表id列在HID描述符(第一个字节)中,只需使用:

代码语言:javascript
复制
report.send(buffer) # this validate buffer[0] matches report id

device.send_output_report(buffer) # this will send anything to your device

在这两种情况下,您都绕过了报表解析逻辑,这是发送数据的最有效方法,因为它们为您发送的内容提供了较少的验证。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32070457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档