Usb hid programming windows

STM Урок 35. HAL. USB. Custom HID

Урок 35

HAL. USB. Custom HID

Продолжаем работать с шиной USB и также продолжаем работать с классом USB HID.

Только сегодня мы уже будем пытаться поработать с классом нестандартным и написать какой-то свой класс HID.

Проект создаём из проекта TEST002. Назовем его USB_DEVICE_CUSTOM_HID. Запустим проект в Cube, ничего не отключаем в т.ч. и таймеры

Включим USB_OTG_FS в режим Device_Only.

В USB Device выбираем Custom Human Interface Device Class (HID)

В Clock Configuration выберем следующие делители (нажмите на картинку для увеличения размера)

В Configuration таймер сделаем немного помедленнее.

Сгенерируем и запустим проект.

Соберем проект и настроим программатор на авторезет.

Прошьем контроллер и увидим, что устройство установилось с ошибкой (код 10).

Прежде чем писать дескрипторы, давайте повторим, каких видов они бывают

Откроем на страничке слева USB Concepts->USB Descriptors

Посмотрим дескрипторы по порядку.

Также скачаем удобную утилиту для формирования дескриптора репорта HID Descriptor Tool на сайте http://www.usb.org/developers/hidpage/

Запустим ее и посмотрим ее способности

В файле usbd_customhid.c посмотрим дескрипторы интерфейса, конфигурации и др.

В файле usbd_custom_hid_if.c мы видим пустой дескриптор репорта.

__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

Напишем дескриптор репорта от нашего устройства.

/* USER CODE BEGIN 0 */

0x06, 0x00, 0xff, // USAGE_PAGE (Generic Desktop)

0x09, 0x01, // USAGE (Vendor Usage 1)

0xa1, 0x01, // COLLECTION (Application)

0x85, 0x01, // REPORT_ID (1)

0x09, 0x01, // USAGE (Vendor Usage 1)

0x15, 0x00, // LOGICAL_MINIMUM (0)

0x25, 0x01, // LOGICAL_MAXIMUM (1)

0x75, 0x08, // REPORT_SIZE (8)

0x95, 0x01, // REPORT_COUNT (1)

0xB1, 0x82, // FEATURE (Data,Var,Abs,Vol)

0x85, 0x01, // REPORT_ID (1)

0x09, 0x01, // USAGE (Vendor Usage 1)

0x91, 0x82, // OUTPUT (Data,Var,Abs,Vol)

0x85, 0x02, // REPORT_ID (2)

0x09, 0x02, // USAGE (Vendor Usage 2)

0x15, 0x00, // LOGICAL_MINIMUM (0)

0x25, 0x01, // LOGICAL_MAXIMUM (1)

0x75, 0x08, // REPORT_SIZE (8)

0x95, 0x01, // REPORT_COUNT (1)

0xB1, 0x82, // FEATURE (Data,Var,Abs,Vol)

0x85, 0x02, // REPORT_ID (2)

0x09, 0x02, // USAGE (Vendor Usage 2)

0x91, 0x82, // OUTPUT (Data,Var,Abs,Vol)

0x85, 0x03, // REPORT_ID (3)

0x09, 0x03, // USAGE (Vendor Usage 3)

0x15, 0x00, // LOGICAL_MINIMUM (0)

0x25, 0x01, // LOGICAL_MAXIMUM (255)

0x75, 0x08, // REPORT_SIZE (8)

0x95, 0x01, // REPORT_COUNT (1)

0xB1, 0x82, // FEATURE (Data,Var,Abs,Vol)

0x85, 0x03, // REPORT_ID (3)

0x09, 0x03, // USAGE (Vendor Usage 3)

0x91, 0x82, // OUTPUT (Data,Var,Abs,Vol)

0x85, 0x04, // REPORT_ID (4)

0x09, 0x04, // USAGE (Vendor Usage 4)

0x15, 0x00, // LOGICAL_MINIMUM (0)

0x25, 0x01, // LOGICAL_MAXIMUM (255)

0x75, 0x08, // REPORT_SIZE (8)

0x95, 0x01, // REPORT_COUNT (1)

0xB1, 0x82, // FEATURE (Data,Var,Abs,Vol)

0x85, 0x04, // REPORT_ID (4)

0x09, 0x04, // USAGE (Vendor Usage 4)

0x91, 0x82, // OUTPUT (Data,Var,Abs,Vol)

0x85, 0x05, // REPORT_ID (5)

0x09, 0x05, // USAGE (Vendor Usage 5)

0x75, 0x08, // REPORT_SIZE (8)

0x95, 0x04, // REPORT_COUNT (4)

0x81, 0x82, // INPUT (Data,Var,Abs,Vol)

0x85, 0x06, // REPORT_ID (6)

0x09, 0x06, // USAGE (Vendor Usage 6)

0x75, 0x08, // REPORT_SIZE (8)

0x95, 0x04, // REPORT_COUNT (4)

0x81, 0x82, // INPUT (Data,Var,Abs,Vol)

/* USER CODE END 0 */

После этого мы видим ошибку в компиляции, потому что нужно изменить размер нашего дескриптора. Изменим его в Cube. Закроем проект и в Configuration USB DEVICE внесем 108.

Опять сгенерируем код, откроем проект, соберем его и прошьем контроллер.

Как мы видим, ошибка (код 10) в диспетчере устройств исчезла.

Также скачаем утилитку USB HID Demonstrator с сайта st.com для удобного просмотра сообщений от девайза, введя в поисковой строке данную строку (USB HID Demonstrator), установим его и запустим. Увидим, что наше самодельное устройство там нашлось и поддерживается. Это уже хорошо.

Настроим утилиту следующим образом

Добавим подключение файла с функциями в main.c

/* USER CODE BEGIN Includes */

Еще добавим переменные

/* USER CODE BEGIN PV */

extern USBD_HandleTypeDef hUsbDeviceFS;

/* USER CODE BEGIN 2 */

/* USER CODE END 2 */

Добавим функцию-обработчик прерываний от таймера.

/* USER CODE BEGIN 4 */

void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim6)

Уберем всё из бесконечного цикла

/* USER CODE BEGIN 3 */

if(HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_0)==GPIO_PIN_SET)

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_RESET);

/* USER CODE END 3 */

Также уберем все из файла

/* USER CODE BEGIN TIM6_DAC_IRQn 0 */

/* USER CODE END TIM6_DAC_IRQn 0 */

/* USER CODE BEGIN TIM6_DAC_IRQn 1 */

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_SET);

/* USER CODE END TIM6_DAC_IRQn 1 */

Также уберем оттуда вот эту переменную

/* USER CODE BEGIN 0 */

extern uint8_t tim6_counter;

/* USER CODE END 0 */

Соберем код. Прошьем контроллер и проверим с помощью утилиты.

В файле usbd_custom_hid_if.c добавим буфер

/* USER CODE BEGIN PRIVATE_VARIABLES */

/* USER CODE END PRIVATE_VARIABLES */

Также внесем изменения в функции

static int8_t CUSTOM_HID_OutEvent_FS (uint8_t event_idx, uint8_t state)

/* USER CODE BEGIN 6 */

USBD_CUSTOM_HID_HandleTypeDef *hhid = (USBD_CUSTOM_HID_HandleTypeDef*)hUsbDeviceFS.pClassData;

for (uint8_t i = 0; i

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);

Читайте также:  Как настроить touch windows

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_RESET);

/* USER CODE END 6 */

Проверим на практике с помощью утилиты.

Смотреть ВИДЕОУРОК (нажмите на картинку)

5 комментариев на “ STM Урок 35. HAL. USB. Custom HID ”

I wrote time callback into while to make an endless loop. I gave 5 ms between the sender. But I can see that the message comes at 100 ms in hid terminal.What is the real speed of HID?How long should I wait between 2 Custom Hıd Messages?

Добрый день.
Скажите, мне кажется Вы не подключили обработчик прерывания (callback) для таймера 6 (tim6).

не нашёл, где оно привязывается к таймеру 6.

Очень хорошая статья.
Заработало сразу.
Большое спасибо.

А, не посмотрел, не из пустого проекта создаём.
Большое спасибо.

Скажите, пожалуйста, а своё GUI на C# возможно самому написать?
Скачал исходники USB HID Demonstrator, но они на С++ (я его хорошо знаю, но С++ от микрософта это та ещё вещь, особенно если графическая).

Более, того при сборке под вижал студию 2015 постоянно пишет – «не та версия windows».
Пробовал и на 7-ке и на 10-ке.

Мой проект осциллографа (GUI) уже начат на c#, не хочется смешивать языки.
Большое спасибо.

Наверно, можно. Я не пишу на C#. Я, наоборот, пользуюсь C++, он как-то ближе к железу и к функциям WinAPI. Можно конечно достучаться до WinAPI и в C#, только кода многовато получится. Зато у данного языка свои плюсы. Он мусор сам за собой чистит.

Большое спасибо на уроки!
Скажите пожалуйста, никак не могу написать свой ГУИ для управления светодиодами и опроса кнопок.
Юзаю libUSB для C# (могу перейти на с++)

Какие ID должны быть в посылках со стороны ПК на МК ?

HID Application Programming Interface (API)

There are three categories of HID APIs: device discovery and setup, data movement, and report creation/interpretation.

Device Discovery and Setup

These HID APIs are used to identify the properties of a HID device and to establish communication with that device. Applications use these APIs to identify a Top Level Collection.

Data Movement

These HID APIs are used to move data between an application and a selected device.

Report Creation and Interpretation

Developers of custom hardware know the size and format of each Report issued by their device. In this case the application can cast the input and output Report buffers to structs and consume the data.

Developers of HID applications intended to communicate with all devices that expose common functionality (for example a music application that must detect when a play button is pressed) may not know the size and format of the HID Reports. This category of application understands certain Top Level Collections and certain usages.

To interpret the Reports received from a device or to create Reports to be sent the application must leverage the Report Descriptor to determine if and where a particular Usage is located in the Reports and (potentially) the units of values in the Reports. In these cases HID parsing is required. Windows provides a HID parser for use by drivers and applications via APIs (HidP_*) that can be used to discover the types of usages supported by a device, determine the state of such usages in a Report, or to build a Report to change the state of a usage in the device.

Usb hid programming windows

Здесь рассмотрено ПО хоста для взаимодействия с устройствами USB HID через одну из программных библиотек. Протокол USB очень сложен, и поэтому обычной практикой работы с ним является использование готовых библиотек подпрограмм (в виде DLL или исходного кода).

Один из вариантов использования интерфейса USB — применение стандартного класса устройств USB HID. Как известно, устройства USB HID очень удобны для подключения пользовательских устройств к компьютеру, так как не требуют написания драйвера, и максимальная скорость обмена с USB HID (64 килобайта/сек) в большинстве случаев оказывается достаточной.

[Краткий обзор библиотек]

Для наглядности библиотеки сведены в таблицу, далее более подробно рассмотрена каждая из библиотек.

Библиотека
Поддерживаемые OS
Автор
Доступность исходного кода
Предпочтительный язык программирования для использования в ПО хоста
Удобство использования по 5-бальной шкале
Ссылка на источник информации
HID.dll Windows Microsoft нет C++ 2 MSDN
AtUsbHid.dll Windows 32-bit Atmel нет C++, Java 5 doc7645.pdf
HID API Windows, Linux, Mac OS X signaleleven, Alan Ott да GCC, C++ 4 hidapi
LibUSB Windows, Linux, FreeBSD, NetBSD, OpenBSD, Darwin, MacOS X libusb.org да GCC, C++ 4 libusb
USB HID Component for Windows C# Windows ?? да C# 4 USB HID C#
JEDI Visual Component Library (JVCL) Windows jvcl.delphi-jedi.org да Delphi7 (Object Pascal) 5 JEDI Visual Component Library
Processing HIDSerialMonitor example Windows, Linux, MacOS X rayshobby.net Да Processing 4 HID-class USB Serial Communication for AVRs using V-USB

Все примеры программ, перечисленные в таблице, Вы можете скачать по ссылке [1].

[HID.dll]

Пример ПО хоста (см. скриншот), которое общается с USB HID через библиотеку HID.dll, имеется в Windows DDK (см., например c:\WINDDK2003\3790.1830\src\wdm\hid\hclient\ для Windows DDK 2003). Сама HID.dll находится в папке %windir%\system32\, и всегда доступна для доступа использующих её программ.

Статью, описывающую пример, см. в [2]. Для того, чтобы скомпилировать пример, Вам нужен Windows DDK любой версии. Писать программу с использованием примера удобнее всего в Visual Studio C++, однако если Вы умеете загружать в память библиотеки DLL и вызывать её функции, то язык и система программирования никакого значения не имеют. Пример ПО хоста не привязан к конкретному USB HID устройству, просто предоставляет интерфейс для получения информации по подключенным устройствам USB HID. Достоинство использования HID.dll в том, что на платформе Windows это наиболее «прямой» метод получения доступа к устройствам USB HID, тогда как остальные библиотеки просто являются обертками над вызовами HID.dll. Недостаток библиотеки — неудобный интерфейс API, отсутствие исходного кода, ограниченное использование — только на операционных системах Windows. Исходный код примера можно взять в Windows DDK или скачать по ссылке [1], см. папку HID.dll\hclient\.

Читайте также:  Вирус загрузочный файлов windows

[HID.dll / hidlibrary.h]

Заголовочный файл, написанный неким XANDER, предоставляющий упрощенный доступ к функциям HID.dll. Цитата из комментария к файлу: «Библиотека для работы с Hid. Написана с применением шаблонов. Она с помощью WINAPI функции LoadLibrary подгружает hid.dll, затем GetProcAddress — вычисляет адреса функций внутри hid.dll. Предоставляет удобный и простой интерфейс для работы с HID. Нашел на http://speleoastronomy.org/elektro/atmega/usingusb.html, дописал функцию IsConnectedDevice().«. Заголовочный файл может использоваться совместно Borland CBuilder, Embarcadero RAD studio XE C++ Builder и другими IDE, поддерживающими шаблоны на языке C++. Пример ПО хоста (автор Обрубов Виталий, [obruboff.ru]), работающий с поворотным энкодером, можно скачать по ссылке [1], см. папку HID.dll\usb-volume-control-USB-HID.

[AtUsbHid.dll]

Библиотека достаточно хорошо документирована, имеет простой интерфейс API для использования. Есть примеры GUI-программ, написанных на C++ и Java, а также пример консольной программы.

У этой библиотеки, к сожалению, есть очень большой недостаток — разработчик (компания Atmel) её давно забросил где-то с 2008 года, и исходного кода не предоставил. Есть поддержка только 32-bit версий Windows, 64-bit версии не поддерживаются.

Удобнее всего программировать в среде Visual Studio, однако если Вы умеете загружать в память библиотеки DLL и вызывать её функции, то язык и система программирования никакого значения не имеют. Демонстрационная программа ПО хоста рассчитана на подключение к USB HID, собранному на основе чипа AVR с аппаратным USB и прошитым соответствующим firmware (например, чип AT90USB162, который установлен на макетной плате AVR-USB162 или AVR-USB162MU). Обзор работы с примером можно найти в [3]. Firmware управляет светодиодами и читает состояние кнопок (светодиоды и кнопки подключены к ножкам чипа AT90USB162). С библиотекой AtUsbHid.dll необязательно использовать именно микроконтроллеры Atmel, можно управлять любыми устройствами USB HID. Достоинство AtUsbHid.dll — простота применения. Недостаток — вместе с программой нужно предоставлять библиотеку AtUsbHid.dll, а также ограниченное использование — только на операционных системах Windows. Исходный код примера ПО хоста (и скомпилированные рабочие бинарники) можно найти на сайте Atmel или скачать по ссылке [1], см. папку AtUsbHid.dll\. Код firmware USB HID (исходники и прошивки) можно найти в папке AtUsbHid.dll\firmware\AVR-USB162 и в папке AtUsbHid.dll\firmware\userial (firmware для макетных плат AVR-USB162 и userial соответственно) архива по ссылке [1]. Для указаний по компиляции и использования примеров firmware читайте соответствующие файлы readme.txt в папках AVR-USB162 и userial. Также см. на сайте Atmel апноут AVR328: USB Generic HID Implementation on megaAVR devices, и статью [14].

[HID API]

Кроссплатформенная библиотека с открытым исходным кодом, хорошо документированная. Самый лучший пример использования (ПО хоста и firmware USB HID для микроконтроллера AT90USB162), который мне удалось найти, это проект lightpack см. [5].

Исходный код примера ПО хоста (и скомпилированные рабочие бинарники) можно скачать по ссылке [1], см. папку hidapi-0.5.2 и папку lightpack. Чтобы скомпилировать ПО хоста lightpack, Вам понадобится среда программирования QT, а чтобы скомпилировать firmware USB HID (для чипа AT90USB162, макетная плата AVR-USB162), понадобится пакет WinAVR. Для указаний по компиляции и использования примеров firmware читайте соответствующие файлы readme.txt.

[LibUSB]

Широко известная кроссплатформенная библиотека, используется во многих коммерческих продуктах. Хорошо документирована, исходный код открыт, примеры кода ПО хоста на ней найти довольно легко. На мой взгляд, самые лучшие примеры есть в составе библиотеки V-USB (см. [6]), причем примеры ПО хоста libusb сопряжены с firmware устройства USB HID (на библиотеке V-USB). Т. е. у Вас есть готовые примеры ПО хоста и готовые примеры устройств USB HID, которые обмениваются с этим ПО хоста данными. Устройства USB HID в библиотеке V-USB рассчитаны на обычные чипы AVR, которые не имеют на борту аппаратного контроллера USB (т. е. протокол USB обрабатывается внутри AVR чипа программно), однако можно написать программу, которая будет работать с любым устройством USB. Примеры ПО хоста рассчитаны на GCC (язык C) или Visual Studio (язык C++), однако если Вы знаете, как загружать в память DLL и вызывать её функции, то нет проблем портировать примеры на любую другую среду программирования (см. [7]). Недостаток библиотеки libusb в том, что для ПО хоста, написанной на ней, под Windows нужна установка самой библиотеки, а также нужна привязка к устройству USB HID специального драйвера фильтра (filter driver). Этот драйвер фильтра устанавливается с помощью специальной утилиты, входящей в состав пакета библиотеки libusb.

Исходный код примеров ПО хоста (и скомпилированные рабочие бинарники) можно скачать по ссылке [1], см. папки libusb\examples\hid-custom-rq\commandline, hid-custom-rq\set-led-gui, hid-data\commandline. Имеется также удобная тест-программа (папка examples\usbtool), показывающая параметры всех подключенных к компьютеру устройств USB (для которых также установлен драйвер фильтра). Код firmware USB HID (исходники и прошивки) можно найти в папках hid-custom-rq\firmware-mega, hid-custom-rq\firmware-tiny, hid-data\firmware, hid-mouse\firmware. Примеры firmware удобно запускать на макетных платах AVR-USB-MEGA16 (микроконтроллер ATmega32). Чтобы скомпилировать ПО хоста, Вам необходим компилятор GCC и набор утилит MinGW (см. [8]), или (для примера hid-custom-rq\set-led-gui) Visual Studio C++. Для указаний по компиляции и использования примеров firmware и ПО хоста читайте соответствующие файлы readme.txt, или см. информацию вики LibUSB [9]. Бинарники LibUSB, достаточные для запуска приложений Windows (в том числе и драйвер фильтра filter driver и мастер по его установке) можно скачать по ссылке [11], см файл с названием наподобие libusb-win32-devel-filter-1.2.5.0.exe (цифры версии могут отличаться).

Читайте также:  Windows phone для айфона

[USB HID Component for Windows C#]

Библиотека с открытым исходным кодом, хорошо документированная (имеется специальный файл подсказки *.CHM), можно использовать только в среде Windows, и удобна только для программ, написанных на C#. Библиотека хороша тем, что к извлечению устройства USB и к моментам передачи данных можно привязать события программы. Библиотеку можно скачать по ссылке [1], см. папку UsbLibraryC#. Для компиляции нужен Visual Studio (хорошо подходит Visual Studio C# 2010 Express, который можно скачать и бесплатно использовать в некоммерческих целях).


См. также описание HID USB Driver / Library for .Net / C# (DLL) [12] для использования в проектах Visual Studio. DLL написана на C#, легко интегрируется в проекты Visual Studio, и имеет простой и понятный программный интерфейс.

[JEDI Visual Component Library (JVCL)]

Библиотека визуальных и невизуальных компонентов для популярной среды разработки Delphi. Пользоваться библиотекой довольно просто, хороший пример использования — конфигуратор устройства USB HID для управления частотой вращения вентиляторов системного блока в зависимости от температуры [15].

Здесь приведен только краткий обзор классов и компонентов JVCL, относящийся к управлению устройствами USB HID.

TJvHidDeviceController предоставляет доступ списку USB контроллеров, отслеживает изменение состояния контроллеров, подключение/отключение устройств.

TJvHidDeviceController:OnDeviceChange — обработчик подключения/отключения устройств.

TJvHidDeviceController:OnEnumerate — получение списка устройств.

TJvHidDevice — предоставляет доступ к конечному USB устройству. В конфигураторе используются только два метода для получения и отправки пакета данных.

TJvHidDevice:GetFeature — получение пакета данных (прием данных от устройства).

TJvHidDevice:SetFeature — отправка пакета данных (передача данных в устройство).

[Processing]

Пример работы с устройством HID (HIDSerialMonitor) предназначен для плат Arduino и USnooBie. В репозитории на GitHub [16] можно найти как готовые скомпилированные бинарники для Linux (32-бит, 64-бит) и для Windows, так и исходный код на языке Processing. Код использует вызовы библиотеки hidapi. Скомпилированные программы и отдельные приложения не требуют никакого дополнительного программного обеспечения.

Программа HIDSerialMonitor нужна как альтернатива Serial Monitor в среде разработки Arduino, это позволяет освободить порт UART микроконтроллера.

Чтобы скомпилировать код самостоятельно, Вам нужно установить Processing (см. сайт processing.org), и скопировать библиотеки (G4P и hiddapi) в папку библиотек Processing. Затем загрузите HIDSerialMonitor.pde в среде разработки Processing и кликните «Run».

[Что нужно, чтобы попробовать]

При таком разнообразии вариантов реализации обмена с устройством USB HID сначала надо определиться с платформой разработки. Например, если Вы пишете на Java, то лучше всего подойдет библиотека Atmel. Если Вы программируете на C#, то лучше выбрать компонент USB HID C#. Больше всего вариантов для выбора у разработчиков, которые программируют на Visual C++.

Затем нужно определиться с выбором устройства USB HID (если еще его у Вас нет). Дешевый и удобный вариант, для которых есть готовые примеры firmware USB HID — это макетные платы AVR-USB162, AVR-USB162MU, AVR-USB-MEGA16 (см. [4]). Для заливки прошивки firmware в эти платы не нужен программатор, firmware заливается в память чипа через USB бутлоадер. Для макетных плат AVR-USB162 и AVR-USB162MU можно взять готовые примеры кода USB HID от Atmel и из библиотеки LUFA (см. [10]), а для макетной платы AVR-USB-MEGA16 — из библиотеки V-USB (см. [6]).

[Ссылки]

1. 130330USBHID.zip — примеры исходного кода, бинарники (.exe) и прошивки firmware, связанные с использованием описанных в статье библиотек.
2. Пример работы с USB HID из Windows DDK.
3. AVR-USB162: где найти рабочие примеры кода firmware и ПО хоста.
4. Макетные платы с интерфейсом USB.
5. Lightpack: система AMBILIGHT на мониторе домашнего компьютера.
6. V-USB, википедия site:ru.wikipedia.org .
7. AVR-USB-MEGA16: управление устройством USB из GCC, Visual Studio CPP, VB6, Python, Delphi.
8. Разработка устройства USB — как начать работу с библиотеками AVR USB (V-USB) и libusb.
9. LibUSB wiki site:libusb.org .
10. LUFA — бесплатная библиотека USB для микроконтроллеров Atmel AVR.
11. libusb-win32 site:sourceforge.net — ссылки на закачку релизов библиотеки libusb.
12. Библиотека HID USB Library для Visual Studio .Net (C#, Visual Basic).
13. LibUsbDotNet site:libusbdotnet.sourceforge.net — порт библиотеки libusb, оформленный в виде классов C# (специально для использования совместно с Microsoft .NET).
14. Работа с Generic HID Class на платформе Windows PC.
15. USB HID регулятор вращения для компьютерных вентиляторов.
16. Rayshobby HIDSerialMonitor Processing host software site:github.com .

Комментарии

Не получается скомпилировать lightpack, установил qt sdk и qt creator. Если сможете опишите процесс компиляции подробнее.

microsin: давно дело было, поэтому попробовать и описать подробно не выйдет. Но поверьте, там описывать нечего — тупо открыл готовый проект и тупо нажал на кнопку компиляции. Даже настройки никакие не менял и не смотрел. Почитайте доку к лайтпаку, там должен быть расписан процесс получения бинарников, и его подводные камни. По крайней мере во всех уважающих себя Open Source проектах так обычно делают.

Оцените статью