Вот есть такая книжка "Программирование на аппаратном уровне" Владимира Кулакова:
Клавиатура и мышь по классификации принятой для устройств USB, относятся к группе человеко-машинного интерфейса (HID).
....
Код класса для устройств, принадлежащих группе HID, имеет значение 03h. Мышь и клавиатура участвуют в начальной загрузке компьютера, поэтому их
относят к подклассу загрузочных устройств, который обозначается кодом 01H. Код протокола для клавиатуры имеет значение 01h, для мыши -02h.
Пакет данных о текущем состоянии устройства HID именуется рапортом. Мышь передает хосту рапорты в режиме передачи по прерываниям. Тк мышь является загрузочным
устройством начальный участок рапорта стандартизирован:
байт 0 - содержит информацию о соcтоянии клавиш
байт 1 - значение перемещения по оси Х
байт 2 - значение перемещения по оси У
Назначение остальных байтов определяеься изготовителем (для трехкоординатных устройств Z обычно в 3-м байте).
..........
Структура байта 0 стандартизирована не полностью:
бит 0 - состояние клавиши 1 (0-отпущена 1-нажата)
бит 1 - -\\- 2
бит 2 - -\\- 3
бит 3-7 - по усмотрению изготовителя
По самой спецификации USB (1.0) можно глянуть на osdev.ru.