Все привет!), сегодня речь пойдет об USB HID (основа Keil\ARM\Boards\…\…\HID). USB HID (human interface device) class — класс устройств USB для взаимодействия с человеком. Этот класс включает в себя такие устройства как клавиатура, мышь, игровой контроллер. Класс USB HID определен в нескольких документах, предоставляемых USB Implementers Forum, в частности, Рабочей группой по работе с устройствами. Иногда всё-таки приходит время перехода с виртуальных com портов (сюда же CDC), на чистый usb протокол, и надпротокол HID (пользовательский протокол). USB HID характеризуется типом передачи, существует 4 типа передачи:
1. Передача по управлению (USB_ENDPOINT_TYPE_CONTROL 0x00).
2. Передача по прерыванию (USB_ENDPOINT_TYPE_INTERRUPT 0x03).
3. Передачи массивами (USB_ENDPOINT_TYPE_BULK 0x02).
4. Изохронная передача данных (USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01).
И конечными точками (USB_ENDPOINT_IN, USB_ENDPOINT_OUT). Конечная точка это канал для работы с пользовательским интерфейсом. Например у SAM3U4C у него аж 6 штук. Причем каждая конечная точка отличается размером буфера и количеством банков.
Самое главное это правильное описание дескриптора пакета передачи данных, для начала укажем сколько байт мы хотим передать, принять или тоже самое для особенных пакетов данных.
usbdesc.c

Далее необходима описать сам USB дескриптор.

Или можно еще так, делал для себя, когда hidовские полтергейсты недовели мне с ним нормально обмениваться данными.

Далее делаем USB конфигурацию.

Чтобы не запутаться в IN и OUT, есть аналогия с ПК, IN – входные данные в ПК, OUT – выходные данные из ПК.
Сейчас необходимо описать работу конечный точек. Конечную точку номер 1, я буду использовать для записи данных в ПК, конечную точку 2 будем использовать для чтения данных из ПК.
usbuser.c

Наша программа будет принимать данные с ПК и отправлять через USB HID их назад.
Далее скачиваем кросс платформенную либу для USB HID(https://github.com/signal11/hidapi) , и меняем исходник.

Я делаю трижды read и write, чтобы точно гарантировать, что в буфере будет то-что нужно.
Итого:

Всем пока!) продолжим следующий раз.