Рассматриваются общие принципы функционирования HID-драйверов
┌───────────────────────────┐ │ │ │ Устройство ввода ◂───────────────────────┐ │ │ │ └─────────────▴─────────────┘ │ │ │ ┌─────────────┴─────────────┐ │ Не HID-совместимое │ │ │ устройство │ HID-драйвер (devh-*) │ │ │ │ │ └─────────────▴─────────────┘ │ │ │ ┌─────────────┴─────────────┐ ┌─────────────┴─────────────┐ │ │ │ │ │ HID-менеджер (io-hid) ◂─── * ───┤ Драйвер ввода (devi-*) ◂───▸ /dev/??? (standalone-режим) │ │ │ │ └───────────────────────────┘ ▲ └─────────────▴─────────────┘ │ │ │ ┌─────────────▾─────────────┐ Интерфейс libhiddi ─────┘ │ │ │ Оконная оболочка Photon │ │ │ └───────────────────────────┘
HID-драйвер состоит из нескольких компонентов:
Их взаимное расположение в архитектуре имеет вид:
┌─────────────┐ │ │ │ Клиент │ │ │ └──────▴──────┘ │◂────────── HID пакеты ┌──────▴──────┐ │ │ │ io-hid │ │ │ └──────▴──────┘ │ * ◂─────── Форматированные данные │ ┌──────────────▴───▾────────▴───────┐ │ devh-*.so │ │ │ │ ┌──────────▾─────────┐ │ │ │ │ │ │ │ │ │ io_hid_dll_entry_t │ │ │ │ │ │ │ │ │ └────────────────────┘ │ │ │ │ │ │ ┌───────────────────────▾───┐ │ │ │ │ │ │ │ io_hid_registrant_funcs_t │ │ │ │ │ │ │ └───────────────────────────┘ │ └──────────────────▴────────────────┘ │ * ◂─────── Неформатированные данные │ ┌──────▾──────┐ │ │ │ Устройство │ │ │ └─────────────┘
┌────────────┐ ┌──────────┐ ┌──────────┐ ┌────────────┐ ┌──────────┐ │ Hardware │ │ devh-* │ │ io-hid │ │ devi-hid │ │ Клиент │ └─────┬──────┘ └─────┬────┘ └─────┬────┘ └──────┬─────┘ └─────┬────┘ │ │ │ │ │ │ │ Регистрация │ │ │ │ ├────────────────────────────▸│ │ │ │ │ │ │ │ │ ├──┐ │ │ │ │ │ │ Регистрация │ │ │ │ │ │ обработчиков прерываний │ │ │ │ │◂─┘ │ │ │ │ Прерывание │ │ │ │ ├──────────────▸│ Отправка HID-report │ │ │ │ │ с помощью send_report() │ Передача │ │ │ ├────────────────────────────▸│ HID-report │ │ │ │ ├─────────────▸│ enqueue_packet() │ │ │ │ ├───────────────────▸│ │ │ │ │ │
Конфигурация io-hid определяется в момент запуска драйвера и определяется его параметрами.
Предыдущий раздел: Библиотека разработки HID-драйверов