Интерпретация вывода Python HIDAPI - PullRequest
0 голосов
/ 16 мая 2018

Я хотел бы прочитать строку со сканера USB HID с Python на OS X. Приведенный ниже пример является моей отправной точкой, и я смог адаптировать код для своего сканера: я смог выполнить команду:h.open () успешно распечатывает строки производителя и продукта. коды сканирования были проверены с помощью EVDEV со сканером.

Задача заключается в интерпретации возвращенных данных и сопоставлении их со строкой ascii.

Это сообщениепредоставляет пример кода Python HIDAPI :

 from __future__ import print_function

import hid
import time

print("Opening the device")

h = hid.device()
h.open(1118, 2048) # A Microsoft wireless combo keyboard & mouse

print("Manufacturer: %s" % h.get_manufacturer_string())
print("Product: %s" % h.get_product_string())
print("Serial No: %s" % h.get_serial_number_string())

try:
    while True:
        d = h.read(64)
        if d:
            print('read: "{}"'.format(d))
finally:
    print("Closing the device")
    h.close()

$ sudo python try.py вывод:

Opening the device
Manufacturer: Microsoft
Product: Microsoft® Nano Transceiver v2.0
Serial No: None
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 0, 0, 0, 0, 0, 0]"

--8<-- snip lots of repeated lines --8<--

read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 21, 0, 0, 0, 0, 0]"
read: "[0, 0, 21, 0, 0, 0, 0, 0]"
read: "[0, 0, 21, 0, 0, 0, 0, 0]"
read: "[0, 0, 21, 0, 0, 0, 0, 0]"
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 4, 0, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 0, 0, 0, 0, 0]"
read: "[0, 0, 4, 0, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 7, 0, 0, 0]"
read: "[0, 0, 4, 9, 7, 0, 0, 0]"
read: "[0, 0, 7, 0, 0, 0, 0, 0]"
^Closing the device
Traceback (most recent call last):
  File "try.py", line 17, in <module>
    d = h.read(64)
KeyboardInterrupt

Вопросы

Мне не удалось найти хорошие примеры (как найденные с EVDEV ).Любая ссылка на эквивалент будет невероятно полезной. Трудно интерпретировать вывод без хорошей документации. h.read () возвращает список

  1. Почему для h.read () выбрано 64?

    d = h.read (64)

Когда 64 заменяется на число от 1,2,3 ... 8, количество элементов в спискета же.9 или более результатов - список из 8 элементов.

Почему переменная 'd' является выходным списком из 8 элементов?(8 нигде не указано)

print ('read: "{}"'. Format (d))

Что представляет собой каждый напечатанный список вывода?1 напечатанный символ?

Что каждый столбец в списке вывода представляет \ кодировать?

Есть ли опубликованная таблица, которая отображает числа вклавиатура?

Я с нетерпением жду ответов: Если у вас есть опыт использования HIDAPI (особенно с Python), пожалуйста, укажите это в своем ответе.Войдите в двойной бонусный раунд для опыта HID-сканера

1 Ответ

0 голосов
/ 19 октября 2018

Вам необходимо прочитать и понять спецификации USB HID.

Hid Specs

Нажмите кнопку поиска и просмотрите документы.Это наиболее важно: «Определение класса устройства для HID 1.11». См. Также документы «Страница использования».

Каждое устройство отправляет HID-дескриптор, который точно описывает каждый бит в отчете.Поэтому для интерпретации отчета ваш код может либо проанализировать дескриптор (api), либо вы можете вручную назначить байты / биты для структуры (не рекомендуется, поскольку она работает только для хорошо известных устройств).

...