Пытаясь понять USB, используя C - PullRequest
3 голосов
/ 27 сентября 2011

Я искал эти ответы, но безуспешно :( Я работал с устройством RFID из Китая, поэтому я почти ничего не знаю об этом. Я пытаюсь написать программу (на самом деле я пытаюсь использоватьвзаимодействовать с ним. Когда кто-то переходит на RFID-устройство, устройство печатает цифры, например, HID-клавиатуру, а затем нажимает клавишу ввода и ждет следующего (я использую Windows 7, кстати). Мои вопросыэто:

  1. Помимо знания VID (идентификатор поставщика) и PID (идентификатор продукта). Есть ли что-то еще, что мне нужно знать об устройстве, чтобы начать чтение с него.

  2. В примере, который я видел, перед чтением устройства программа-пример программы сначала записала на устройство, отправив 8 байтов в массиве (байты [8]), причем каждый байт чем-то напоминает [0]= 60, [1] = 0, [2] = 20 и т. Д. Когда устройство перестает считываться, оно также отправляет несколько стоп-байтов. Может ли кто-нибудь объяснить мне это немного подробнее, если это необходимо, и шэти байты запуска / остановки являются специфическими для устройства, или это обычная вещь запуска / остановки с USB?

  3. Кто-нибудь знает какой-нибудь хороший, простой источник (или приложение), который установлендо того, что я хотел бы сделать?

Ответы на любые вопросы приветствуются, спасибо.

Ответы [ 2 ]

3 голосов
/ 27 сентября 2011

Прежде чем пытаться частично реконструировать базовый протокол USB, вы можете прочитать (открыть) спецификацию USB (см. http://www.usb.org/)) и ознакомиться с ключевыми словами (конечная точка, URB, каналы) и принципами управления / объемных данных. /isochronous/interrupt-transfers).

Мне очень понравилась реализация linux-usb, так как она просто реализована и легко читается: linux / include / usb.h.

Для адресации USB-устройств из пользовательского пространства вы можете использовать libusb (существует для Windows и Linux). Таким образом, вы можете получить доступ к USB-устройствам без написания драйвера ядра.

1 голос
/ 28 сентября 2011

Если ваш RFID-ридер действительно представляет собой виртуальную USB HID-клавиатуру, вы можете просто зарегистрироваться в RawInput и прослушивать данные.В этом случае вы действительно не заботитесь об аппаратном обеспечении ниже, и я думаю, что кто-то уже ответил здесь, как это сделать.

Если этот подход не работает, это означает, что ваш считыватель RFID не являетсядействительно USB HID клавиатурное устройство, и вам следует попросить вашего поставщика драйвер или структуру данных, передаваемых через USB.

Если вы не можете найти ни драйвер, ни какие-либо технические характеристики, в этом случае вы должны запуститьсделать обратный инжиниринг на вашем USB-устройстве.Одним из инструментов, с которого вы можете начать, является USBView.exe от Microsoft, вы можете найти его в Windows Driver Kit - исходный код, вы просто создаете его и получаете приложение.После этого вы должны попытаться получить структуру USB-дескриптора и проанализировать ее, вы найдете там много ценной информации, которая поможет вам понять, как отправляются данные.

Как вы видите множество Ifs ...

...