2015-08-18 2 views
0

Я пытаюсь создать библиотеку python под окнами для платы Flyfish FF32 USB-HID IO (http://www.flyfish-tech.com/FF32/index.php). Для этого я использую pywinusb library, Python 2.7, windows 7.Устройство Pywinusb и Flyfish FF32 под окнами. Pywinusb посылает только нули?

Устройство само работает с предоставленным графическим редактором flyfish. Также при запуске "show_hids" демо от pywinusb устройства видно:

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 

Но при работе следующего, модифицировано демо:

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 объекта отчета (выход ТЕЗИСЫ ДОКЛАД

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 всегда получает массив из 0s.

Для справки. Пакет фыркнула от GUI:

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 

И один из моего сценария:

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 

Кто-нибудь знает, что случилось здесь?

ответ

0

Это устройство странно, 65 байт для отчета не ожидается, поскольку обычно это ограничивается размером конечной точки.

В любом случае, set_raw_data() предполагается использовать в качестве шаблона для параметров «все сразу» HID, поэтому он будет проверять, что вы предоставляете действительный идентификатор отчета и анализируемую информацию (разбор выполняется Windows API).

В вашем случае, если вы хотите послать «что-нибудь» на устройство, до тех пор, как идентификатор отчета приведен в HID дескриптора (первый байт), просто используйте:

report.send(buffer) # this validate buffer[0] matches report id 

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

В обоих случаях вы обходите логику синтаксического анализа отчета, это наиболее эффективные способы отправки данных, обеспечивая меньшую проверку того, что вы отправляете.

+0

Я почти забыл об этом. Благодарю. Сейчас я получаю данные. Только одна коррекция. Мне пришлось сделать отчет [0] .send (buffer) – Dominik