Обзор HID-драйверов

Рассматриваются общие принципы функционирования HID-драйверов

Список подразделов:

Общая структура подсистемы ввода
Внутреннее устройство HID-драйвера
Компоненты HID-драйвера
Общий принцип работы HID-драйвера
Способы компоновки драйверов

Общая структура подсистемы ввода

┌───────────────────────────┐ │ │ │ Устройство ввода ◂───────────────────────┐ │ │ │ └─────────────▴─────────────┘ │ │ │ ┌─────────────┴─────────────┐ │ Не HID-совместимое │ │ │ устройство │ HID-драйвер (devh-*) │ │ │ │ │ └─────────────▴─────────────┘ │ │ │ ┌─────────────┴─────────────┐ ┌─────────────┴─────────────┐ │ │ │ │ │ HID-менеджер (io-hid) ◂─── * ───┤ Драйвер ввода (devi-*) ◂───▸ /dev/??? (standalone-режим) │ │ │ │ └───────────────────────────┘ ▲ └─────────────▴─────────────┘ │ │ │ ┌─────────────▾─────────────┐ Интерфейс libhiddi ─────┘ │ │ │ Оконная оболочка Photon │ │ │ └───────────────────────────┘

Внутреннее устройство HID-драйвера

Компоненты HID-драйвера

HID-драйвер состоит из нескольких компонентов:

Их взаимное расположение в архитектуре имеет вид:

┌─────────────┐ │ │ │ Клиент │ │ │ └──────▴──────┘ │◂────────── HID пакеты ┌──────▴──────┐ │ │ │ io-hid │ │ │ └──────▴──────┘ │ * ◂─────── Форматированные данные │ ┌──────────────▴───▾────────▴───────┐ │ devh-*.so │ │ │ │ ┌──────────▾─────────┐ │ │ │ │ │ │ │ │ │ io_hid_dll_entry_t │ │ │ │ │ │ │ │ │ └────────────────────┘ │ │ │ │ │ │ ┌───────────────────────▾───┐ │ │ │ │ │ │ │ io_hid_registrant_funcs_t │ │ │ │ │ │ │ └───────────────────────────┘ │ └──────────────────▴────────────────┘ │ * ◂─────── Неформатированные данные │ ┌──────▾──────┐ │ │ │ Устройство │ │ │ └─────────────┘

Общий принцип работы HID-драйвера

┌────────────┐ ┌──────────┐ ┌──────────┐ ┌────────────┐ ┌──────────┐ │ Hardware │ │ devh-* │ │ io-hid │ │ devi-hid │ │ Клиент │ └─────┬──────┘ └─────┬────┘ └─────┬────┘ └──────┬─────┘ └─────┬────┘ │ │ │ │ │ │ │ Регистрация │ │ │ │ ├────────────────────────────▸│ │ │ │ │ │ │ │ │ ├──┐ │ │ │ │ │ │ Регистрация │ │ │ │ │ │ обработчиков прерываний │ │ │ │ │◂─┘ │ │ │ │ Прерывание │ │ │ │ ├──────────────▸│ Отправка HID-report │ │ │ │ │ с помощью send_report() │ Передача │ │ │ ├────────────────────────────▸│ HID-report │ │ │ │ ├─────────────▸│ enqueue_packet() │ │ │ │ ├───────────────────▸│ │ │ │ │ │

Способы компоновки драйверов

Конфигурация io-hid определяется в момент запуска драйвера и определяется его параметрами.

Тематические ссылки:

io-hid




Предыдущий раздел: Библиотека разработки HID-драйверов