Стандарты USB не говорят ничего конкретного о клавиатурах, мышах и т. Д. В любой версии.
Это стандарт HID, который делает. Структура отчета с шестью ключами и модификаторами действительно была предназначена только для того, чтобы упростить жизнь BIOS (чтобы им не приходилось анализировать дескрипторы отчетов), но стала фактическим «стандартом» для клавиатур, несмотря ни на что. Однако стандарт HID позволяет создавать всевозможные отчеты, и все основные ОС поддерживают его полностью, поэтому нет необходимости в дополнительных драйверах.
Другое ограничение заключается в том, что низкоскоростной пакет данных USB может быть не более 8 байтов. Отчет может быть больше, но его отправка занимает много времени. Стандарт USB позволяет только низкоскоростному устройству отправлять один пакет каждые 10 мс (на конечную точку). ОС обычно подталкивает это до 8 мс, то есть 125 Гц (без взломов). Потребовалось до 16 мс, чтобы получить ключ к хозяину, это было бы дерьмом! Таким образом, у нас была стадия производителей, пытающихся получить больше от низкоскоростных микросхем, чем они могут реально справиться, с помощью трюков, таких как множественные конечные точки и т. Д. :(
Полноскоростной USB освобождает эти ограничения. Каждый пакет может иметь размер 64 байта и может отправляться каждые 1 мс (опять же, для каждой конечной точки). Это позволяет полностью использовать стандарт HID.
Наконец, НКРО не делается только ради этого. Для выполнения полного NKRO требуется только один бит на ключ, а не один байт, и не нужно рассматривать модификаторы как особый случай. Таким образом, клавиатура может отправлять, например, 104 клавиши всего за 13 байтов - при использовании другой схемы 13 байтов будут управлять только 11 КРО (11 клавиш + модификаторы + один зарезервированный байт). Конечно, это все еще много ключей, но это гораздо менее элегантный метод (и все же «not-6KRO», поэтому он все еще может быть несовместим с тупыми хостами).