Привет, ГТ.
В одном из моих прошлых посты (в частности о клавиатуре SteelSeries Apex M800) monah_tuk задал в комментариях интересный вопрос: как реализовано НКРО (n-keyroller, одновременное нажатие нескольких клавиш) в USB-клавиатурах.
Этот вопрос меня заинтересовал, и когда я копнул глубже.
В общем, там такие авгиевы конюшни, что информации хватило на целый пост, пусть и небольшой.
Казалось бы, USB 2.0 даже в низкоскоростном режиме обеспечивает передачу до 1500 Кб в секунду (около 185 Кб/с), в чем проблема с передачей нажатий клавиш? Но это не так просто.
Чтобы понять, какие проблемы есть у USB-подключения, нам придется углубиться в историю, и немного в конструкцию клавиатуры.
Проблемы с опрокидыванием: ореолы
Допустим, у вас есть клавиатура со стандартными клавишами 104/105. В идеале, чтобы получить 100% точную информацию о том, какие клавиши нажаты, вам понадобится на 1 «провода» больше, чем кнопок: 104/105 проводов от кнопок, и одна общая «земля».Конечно, такая разводка будет сложной и дорогой, поэтому во многих недорогих клавиатурах используется так называемая внутренняя разводка.
«матрица» — совокупность пересекающихся горизонтальных и вертикальных контактов.
Контроллер сканирует каждый столбец, обнаруживает сигнал, начинает сканирование «строк» и рассчитывает нажатую клавишу.
В случае, если вы нажмете, скажем, S и G и захотите добавить какую-то третью клавишу в другой ряд, контроллер уже не сможет определить, какая из строк была закрыта: в лучшем случае Нет обнаружит один из трёх, в худшем случае - из-за особенностей проводки нарисует ещё четвёртый, который вы не нажимали.
Это называется ореолом.
Лечить такое поведение можно различными уловками в области проводки: самые популярные комбинации развешиваются на разных «линиях»; Функциональным клавишам, которые часто являются элементами горячих клавиш, выделены отдельные строки.
Схема подключения остается довольно простой, но Нет 5+КРО редко встречается на дорогих клавиатурах – обычно дело ограничивается 3-4 одновременно нажатыми клавишами.
Кроме того, контроллер может блокировать «соседей» по блоку, чтобы убрать «ненужные» операции.
То есть формально клавиатура может поддерживать 6KRO, и честно позволять одновременно нажимать CTRL+AWFBNM, но не позволяет нажимать AWSD, ограничиваясь срабатыванием типа WAS или WDS. Вы можете проверить свою клавиатуру, используя это: куски .
У него есть некоторые ограничения, но они связаны с тем, что система перехватит нажатие кнопки раньше браузера.
Например, Print Screen или Alt+Tab сработают до того, как страница сможет их «поймать».
Сейчас эта страшная (с точки зрения эксплуатации) «дешевая» система практически полностью вытеснена чуть более сложной, «открытой» матрицей, однако экземпляры все еще встречаются, особенно часто во всяких «однодолларах».
комплектные клавиатуры, идущие в комплекте с компьютером «из коробок».
В более дорогих (часто игровых или бизнес-клавиатурах) используются более сложные схемы, несколько контроллеров, отдельные соединения, многослойные печатные платы, в общем, различные подходы, которые уменьшают или полностью устраняют ореолы, но приводят к удорожанию клавиатуры.
устройство.
С потенциальными аппаратными проблемами НКРО мы разобрались, перейдем к программным.
Клавиатуры с разъемом USB
Основным общим разъемом для подключения клавиатуры и мыши к USB был PS/2. Вот круглый:Прелесть ее заключалась в том, что при соблюдении всех стандартов можно было работать и мышкой, и клавиатурой от одного разъема и сплиттера, а устройства ввода сами генерировали прерывание и отправляли информацию о нажатии кнопок/движении курсора.
Там можно даже лицом по клавиатуре перевернуться, если все правильно разложено, и ролловер не упирается в аппаратные возможности клавиатуры — клавиатура отправит все, что «читает» контроллер.
К сожалению, у PS/2 были и свои недостатки (такие как проблемы с Plug’n’Play и неудобный разъем), а повсеместное распространение USB привело к тому, что периферия PS/2 была практически полностью вытеснена с рынка.
Однако существуют вполне современные платы с USB 3.0 и двумя(!) PS/2:
Совмещенные порты, кстати, за счет особенностей распиновки (общее питание, разные контакты data+/data- для мыши и клавиатуры) также позволяют подключить оба устройства через один порт с помощью переходника:
Проблемы НКРО по USB: виноват USB HID
Для управления клавиатурами через USB до загрузки системы (т. е.в BIOS/UEFI) используется стандартный драйвер HID, который был разработан для обеспечения максимально широкой поддержки клавиатур и USB-хостов.
Класс USB HID описывает устройства таким образом, чтобы стандартная реализация USB-хоста и USB-устройства могли взаимодействовать без установки специальных драйверов.
Типичная клавиатура (предназначенная для поддержки стандарта USB HID) использует выходной (от USB-хоста) поток данных (конечную точку стека USB) для получения информации о состоянии индикаторов (Num/Caps/Scroll Lock) и входной поток (с клавиатуры, «входящий» для USB-хоста) для отправки информации о нажатых клавишах.
Если вы следуете самой строгой спецификации USB HID v1.11, которая поддерживает режим загрузки USB (и позволяет использовать USB-клавиатуру для входа и работы в BIOS), то клавиатура будет отправлять прерывания ЦП каждый раз, когда USB-хост опрашивает его, независимо от того, изменилось ее состояние или нет. Таким образом, работа клавиатур PS/2 «эмулируется» с минимальными накладными расходами.
При этом клавиатура работает по стандарту USB 1.1 (иногда 2.0) Low-speed, а частота опроса порта составляет 100 Гц.
В этом режиме максимальная длина пакетов по USB составляет 8 байт, а отправляются они раз в 10 мс.
Один из байтов зарезервирован, так что для клавиатуры остается 7 байт, т.е.
достаточно для кодирования нажатия любой клавиши-модификатора и шести других.
Оказывается, клавиатура работает в режиме 6-КРО, а он стандартен для большинства USB-клавиатур.
Меньше можно сделать (иногда сознательно, иногда нет, из-за ореолов и заеданий клавиш), больше - только в нарушение спецификации USB HID. После загрузки система может увеличить частоту опроса USB-порта, загрузить специальный драйвер, который позволит работать, скажем, мультимедийным клавишам и макросам.
Реализации NKRO на USB
Обход ограничений USB HID, по сути, бывает двух видов.В первом случае клавиатура обнаруживается фирменным ПО, переключается в какой-то специальный режим и отправляет данные от контроллера напрямую драйверу, который затем связывается с системой.
Обратной стороной этого решения является так называемая задержка ввода: задержка ввода.
Опросив друзей, я нашел только одну клавиатуру, которая позволяла нажимать 10 клавиш при подключении по USB: махровую китайскую нонейм с «игровым» дизайном.
Хозяин живет аж в Иркутске, поэтому неудивительно, что такая вещь была у него одного.
Второе решение подкупает своей простотой и изобретательностью, но по сути является костылем:
Спасибо за скриншот MyFearGear , такая штука была замечена за Logitech G710+
Клавиатура просто отображается в системе как несколько HID-устройств, каждое из которых имеет свой собственный 6KRO. Быстрый опрос друзей с просьбой указать модель клавиатуры и прислать такой скриншот показал, что этот «хак» тоже используется Логитек , И А4тех , И пума , И SteelSeries - в общем, всем, кто нашел НКРО в описании клавиатур, подключаемых через USB.
Внимание! Прежде чем тестировать клавиатуру, убедитесь, что к вам не подключена какая-нибудь модная многокнопочная USB-мышь (даже беспроводная).
Поскольку все многокнопочное великолепие может также претендовать на «дополнительную» клавиатуру.
Заключение
Собственно, это все.Почти все производители выбрали «костыльный» метод, который работает и не создает никаких проблем пользователю, и честный (ну относительно честный) НКРО на USB достижим.
Теги: #Гаджеты #Периферия #клавиатура #usb #клавиатуры #клавиатуры #PS2 #NKRO #*kro #6kro
-
Уязвимости Сервера, Замедляющие Чтение
19 Oct, 24 -
Во Что Играют Айтишники?
19 Oct, 24 -
Электронная Книга Как Дисплей
19 Oct, 24 -
Тв О Фрейде
19 Oct, 24