Nrko на usb. проблемы и костыли при их решениях

Nrko на usb. проблемы и костыли при их решениях

Здравствуй, GT. В одном из моих прошлых постов (в частности, про клавиатуру SteelSeries Apex M800) юзернеймmonah_tuk задал занимательный вопрос в комментариях: как реализуется NKRO (n-key rollover, одновременное зажатие нескольких клавиш) в USB-клавиатурах. Этот вопрос меня заинтересовал, а в то время, когда я копнул поглубже… В общем, в том месте такие авгиевы конюшни, что на целый пост информации хватило, пускай и небольшой.
Смотрите кроме этого: Обладатели аккумуляторная Pixel C жалуются на неприятности с Wi-Fi

На официальном форуме помощи пользователей планшета Pixel C от Гугл стремительными темпами растёт новая ветка дискуссии, которая посвящена неполадкам в работе устройства с Wi-Fi. Многие обладатели планшетного компьютера отмечают, что при постепенном удалении от маршрутизатора скорость отдачи остаётся стабильной, но скорость загрузки быстро падает. Действенного ответа данной неприятности обладателям Pixel C отыскать так и не удалось.Сотрудники команды помощи Гугл уже успели отписаться в соответствующей ветке форума.

Казалось бы, USB 2.0 кроме того в режиме Low-speed снабжает передачу до 1500 КБит в секунду (порядка 185 КБайт/с.), в чём неприятность передать нажатия клавиш? Но не всё так легко.Дабы разобраться с тем, какие конкретно неприятности у USB-подключения, нам нужно будет покопаться в истории, и мало — в конструкции клавиатуры. Неприятности rollover’а: ghostingДопустим, у вас имеется клавиатура со стандартными 104/105 клавишами.

В совершенном случае, для получения 100% точной информации о том, какие конкретно клавиши зажаты, вам пригодится на 1 «проводок» больше, чем имеется кнопок: 104/105 проводов от кнопок, и одна неспециализированная «почва». Очевидно, такая разводка будет сложна и дорога, исходя из этого многие недорогие клавиатуры используют в т.н. «матрицу» — комплект пересекающихся горизонтальных и вертикальных контактов. Контроллер сканирует любой столбец, обнаруживает сигнал, начинает сканировать «строки» и вычисляет надавленную клавишу.

В случае, если вы нажимаете, скажем, S и G контроллер уже не имеет возможности сообщить, какая из линий была замкнута: в лучшем случае найдёт одну из двух, в нехорошем — из-за изюминок разводки нарисует какую-нибудь третью, которую вы не нажимали. Это именуется ghosting. Лечится подобное поведение разными хитростями в области разводки: самые популярные сочетания вешаются на различные «линии», функциональным клавишам, каковые довольно часто являются элементами хоткеев, назначаются отдельные линии.

Разводка остаётся достаточно простой, но в недорогих клавиатурах редко видится 5+аккумуляторная — в большинстве случаев дело ограничивается 3-4 в один момент зажатыми клавишами. Помимо этого, контроллер может блокировать «соседей» по блоку, дабы убрать «лишние» срабатывания. Другими словами формально клавиатура может поддерживать 6KRO, и честно позволять нажать CTRL+AWFBNM в один момент, но не позволять зажать AWSD, ограничиваясь срабатыванием вида WAS либо WDS.Проверить собственную клавиатуру вы имеете возможность посредством вот таковой штуки.

У неё имеется кое-какие ограничения, но они обусловлены тем, что совокупность перехватит нажатие кнопки раньше, чем браузер. К примеру, Print Screen либо Alt+Tab отработают раньше, чем страничка сможет их «поймать».на данный момент эта страшная (с позиций работы) «недорогая» совокупность полностью вытеснена мало более сложной, «открытой» матрицей, но, экземпляры до сих пор видятся, в особенности довольно часто во всяких «однодолларовых» комплектных клавиатурах, каковые идут вдовесок к компьютеру «из коробки».В более дорогих (обычно, игровых либо бизнес-клавиатурах) употребляются более сложные схемы, пара контроллеров, личное подключение, многослойные печатные платы, в общем, разные подходы, каковые уменьшают или полностью убирают ghosting, но приводят к росту цены устройства.

С потенциальными аппаратными проблемами NKRO мы разобрались, переходим к софтвёрным.Клавиатуры до USBОсновным распространённым разъёмом для мышки и подключения клавиатуры до USB был PS/2. Вот таковой, кругленький:Его прелесть заключалась в том, что при соблюдении всех стандартов с одного разъёма и разветвителя возможно было трудиться и с мышью, и с клавиатурой, а ещё сами устройства ввода генерировали прерывание и отправляли данные о надавленных кнопках / перемещении курсора.

В том месте хоть лицом по клавиатуре катайся, в случае если всё разведено грамотно, и rollover не упирается в аппратные возможности клавиатуры — клавиатура пошлёт всё, что «прочтёт» контроллер.К сожалению, у PS/2 были и недочёты (наподобие неприятностей с Plug’n’Play и неудобного разъёма), да и повсеместное распространение USB стало причиной тому, что PS/2 периферия была полностью вытеснена с рынка. Однако, видятся в полной мере современные материнки с USB 3.0 и двумя(!) PS/2:Комбинированные порты, кстати, благодаря изюминкам распиновки (неспециализированное питание, различные pin’ы для data+/data- у клавиатуры и мыши), разрешают кроме этого подключить оба устройства через один порт посредством переходника:Неприятности NKRO на USB: во всём виноват USB HID Для работы клавиатур через USB до загрузки совокупности (другими словами в BIOS / UEFI) употребляется обычный HID-драйвер, что был создан для максимально широкой помощи клавиатур и USB-хостов.

Класс USB HID обрисовывает устройства так, дабы стандартная реализация USB-хоста и USB-устройства имели возможность взаимодействовать без установки особых драйверов. Простая клвиатура (созданная с помощью USB HID стандарта) применяет выходной (исходящий от USB-хоста) поток данных (endpoint USB-стэка) чтобы получить информацию о состоянии индикаторов (Num / Caps / Scroll Lock), и входной поток (исходящий от клавиатуры, «входящий» для USB-хоста) для отправки информации о надавленных клавишах.В случае если направляться самая строгой спецификации USB HID v1.11, которая поддеживает режим USB Boot (и разрешает применять USB-клавиатуру для входа в BIOS и работы в нём), то клваиатура будет отправлять пррывания на CPU любой раз, как USB-хост будет опрашивать её, независимо от того, изменилось её состояние либо нет.

Так «эмулируется» работа PS/2 клавиатур минимальными издержками. В этом случае клавиатура трудится по стандарту USB 1.1 (время от времени 2.0) Low-speed, а частота опроса порта образовывает 100 Гц. В данном режиме большая протяженность пакета на USB равна 8 байтам, а отправляются они раз в 10 мс.

Один из байтов зарезервирован, так что на работу клавиатуры остаётся 7 байт, т.е. количество достаточное, дабы закодировать нажатие любой клавиши-модификатора и ещё шести вторых. Окажется, кто клавиатура трудится в режиме 6-KRO, и он есть стандартным для большинства USB-клавиатур. Сделать меньше — возможно (время от времени осознанно, время от времени — нет, из-за ghosting’а и key jamming’а), больше — лишь с нарушением спецификации USB HID.

Уже по окончании загрузки совокупность может расширить частоту опроса USB-порта, загрузить особый драйвер, что разрешит трудиться, скажем, макросам и мультимедийным клавишам. Реализации NKRO на USBОбходы ограничений USB HID, фактически, видятся двух видов. В первом случае клавиатура обнаруживается фирменным ПО, переводится в какой-нибудь особый режим и отправляет эти с контроллера напрямую в драйвер, а тот уже общается с совокупностью.

Минус для того чтобы решения — возрастает т.н. input lag: задержка ввода. Опросив друзей, отыскал лишь одну клавиатуру, которая разрешила надавить 10 клавиш при подключении по USB: махровый китайский ноунейм с закосом под «игровую». Обладатель живёт аж в Иркутстке, так что не страно, что лишь у него нашлась такая вещь.

Второе ответ подкупает собственной бесхитростностью и простотой, но по сути есть палкой: За скриншот спасибоMyFearGear, такую штуку увидели за Logitech G710+Клавиатура совокупности несколькими HID-устройствами, каждое из которых имеет собственные 6KRO. Беглый опрос привычных прося указать модель клавиатуры и отправить таковой скриншот продемонстрировал, что этим «хаком» пользуются и Logitech, и A4tech, и Cougar, и SteelSeries — в общем все, у кого нашлось NKRO в описании клавиатур, подключащихся по USB.Внимание!

Перед тем как контролировать собственную клавиатуру, убедитесь, что у вас не подключена какая-нибудь навороченная многокнопочная USB-мышь (кроме того по беспроводному каналу). Так как всё многокнопочное великолепие совершенно верно так же может притворяться «лишними» клавиатурами. ЗаключениеСобственно, на этом всё.

Практически все производители выбрали «костыльный», но трудящийся и не создающих пользователю особенных неприятностей способ, и честный (ну, относительно честный) NKRO на USB достижим.

Случайная статья:

Александр Федоров: Может всю жизнь \


Похожие статьи:

Комментирование и размещение ссылок запрещено.

Обсуждение закрыто.