Клавиатура не нуждается в каком-либо сигнале от компьютера, только питание, верно? ИЛИ нужно ли принимать и отправлять сигналы?
Изменить: я не ожидал, что этот вопрос вызовет такой большой интерес! Я спросил об этом, потому что мечтал создать doohickey, который дублирует сигнал, чтобы клавиатура могла отправлять одно и то же письмо на два компьютера одновременно. Поскольку (из того, что я могу разглядеть в ответах), компьютер активно управляет клавиатурой, как и любое другое устройство, это явно невозможно. Ничего страшного, так как практически у меня не было навыков, чтобы его построить!
Ответы:
Из спецификации « Определение класса устройства для устройств интерфейса пользователя (HID)» версии 11.1 :
Чтобы изменить индикаторы клавиатуры, клавиатура принимает команду для этого. Таким образом, это не устройство «только для ввода» (то есть оно выводит данные только на хост).
Это, как говорится, есть процесс согласования и перечисления со всеми USB-устройствами, которые требуют обратной связи между хостом и устройством. У вас не может быть «только для чтения» USB-устройства.
Даже до USB контроллер клавиатуры ПК принимал команды, потому что он делал несколько вещей, кроме чтения клавиатуры ( ссылка ):
источник
So it is not an "input-only" device (meaning it only outputs data to the host)
что меня смущаетЛюбое устройство USB независимо от его класса требует двунаправленной связи для работы . Каждое USB-устройство (или функция с точки зрения спецификации USB) представлено в виде набора конечных точек, которые можно рассматривать как буферы, которые принимают или принимают данные. Однако даже конечные точки, которые могут только отправлять данные, ждут специального пакета, называемого токеном, прежде чем они смогут ответить:
(изображение отсюда , серые прямоугольники представляют USB-хост, белые прямоугольники представляют USB-функцию)
Таким образом, даже так называемые передачи прерываний выполняются, когда хост USB опрашивает подключенные устройства, используя пакеты токенов. Отличие регулярных (массовых) передач от прерываний заключается в том, что время опроса мало и гарантируется в последнем случае. Тем не менее, все переводы инициируются хостом.
источник
Этот вопрос отражает распространенное заблуждение, что USB-устройства «отправляют» что-то на ПК самостоятельно, когда нажимается клавиша (или движется мышь), поэтому так много внимания. Фактически, USB-устройства ничего не отправляют, пока не получат соответствующий запрос от хоста. Единственным исключением является процесс пробуждения от зависшего устройства.
Хотя на первый взгляд USB выглядит просто, на самом деле его функционирование довольно сложное. Любое новое USB-устройство должно быть «перечислено», прежде чем оно начнет функционировать. Последовательность следующая:
После подключения клавиатуры порт хоста получает сигнал «состояние соединения» (для сигналов LS клавиша D- ВЫСОКО ВЫТЯЖИТСЯ от клавиатуры).
Затем хост переводит порт в режим «сброса порта», и USB PHY (драйвер физического уровня) отправляет «USB_RESET» по линиям D + / D- (обе линии приводятся в действие НИЗКИЙ в течение предписанного промежутка времени). Некоторая информация о «сбросе порта» для устройств FS / HS может быть найдена здесь .
Затем хост начинает выводить пакеты границы кадра с интервалом 1 мс. Для низкоскоростных (LS) устройств, таких как обычная проводная клавиатура, это просто импульсы «поддержания активности», в то время как для FS генерируются специальные пакеты SOF - начало кадра. Эти пакеты поддерживают устройство в активном режиме и не позволяют ему переходить в режим SUSPEND с низким энергопотреблением.
Затем начинается «перечисление». Хост отправляет запрос на получение дескриптора устройства. Запрос отправляется на «канал по умолчанию» с адресом устройства «0». [В настоящее время существует только одно такое устройство - клавиатура, поскольку все другие устройства на шине уже должны иметь свои индивидуально назначенные адреса USB]
Клавиатура возвращает запрошенную информацию, поэтому хост сможет определить, какой драйвер следует загрузить.
Хост отправляет транзакцию, требующую, чтобы устройство изменило свой адрес по умолчанию на новый назначенный адрес.
Затем хост начинает новый раунд связи с устройством, теперь по новому назначенному адресу. Все остальные устройства игнорируют эту связь, потому что она не адресована им.
Хост может прочитать намного больше информации из нескольких других дескрипторов и в конечном итоге выбрать «конфигурацию устройства». На этом завершается процесс перечисления.
В зависимости от класса устройства USB, хост начинает связь с устройством. В случае клавиатуры хост периодически отправляет запрос «IN», опрашивая устройство (даже если этот периодический канал называется каналом прерывания). Если на клавиатуре нажата / нажата какая-либо клавиша, клавиатура вернет эту информацию. Если нет, данные не будут возвращены в драйвер устройства.
Короче говоря, каждое USB-устройство должно получать уникальный адрес от USB-хоста, и двум USB-хостам будет сложно обмениваться данными с устройством - коллизия шин, несоответствие адресов, случайный перехват данных нажатия клавиш и т. Д. Протокол USB делает невозможным обмен данными. устройство между двумя USB-хостами.
источник
If keyboard has any key pressed/depressed, the keyboard will return this information
- как тогда появятся призрачные ключи? У меня сложилось впечатление, что клавиатуры должны отправлять события нажатия клавиш и нажатия клавиш, что объясняет, почему если пропустить событие нажатия клавиш, у вас будут призрачные клавиши ...Как объяснили другие ответы, USB требует двунаправленной связи как часть его работы. PS / 2, хотя и разрешает двунаправленную связь, не требует его для отправки ключей на компьютер, но требует установки светодиодных индикаторов клавиатуры.
Теоретически, вы можете создать устройство для дублирования сигнала PS / 2 и отправки его на второй компьютер, а также сбрасывать любые команды с компьютеров, чтобы иметь возможность отправлять нажатия клавиш на несколько компьютеров, но светодиоды клавиатуры не будут реагировать на состояния num lock, caps lock и scroll lock (или любое другое изменение состояния светодиодов, например, в Linux светодиодные индикаторы клавиатуры иногда используются для альтернативных целей).
Я не уверен, насколько сложным будет такой проект. Прошло много времени с тех пор, как я работал с PS / 2, поэтому я не знаю, можно ли просто соединить пару проводов / разъемов или вам понадобится активное устройство (например, микроконтроллер), чтобы передавать команды в одном направлении, но отбрасывать их в другом. Если у вас был микроконтроллер, вы могли бы даже сделать устройство таким, чтобы оно могло интерпретировать светодиодные команды клавиатуры и «комбинировать» их для отображения (например, длительное мигание индикатора, если он включен на компьютере один, но выключение на компьютере два, короткая вспышка светодиод, если он включен на компьютере два, но выключен на компьютере один, светодиод горит постоянно, если он включен на обоих компьютерах, и светодиод выключен, если он выключен на обоих компьютерах). Это было бы более продвинутым, хотя.
Кроме того, если ваша цель состоит в том, чтобы иметь возможность управлять одним компьютером с другого компьютера или двумя компьютерами с одного рабочего стола, или чем-то еще, вы можете рассмотреть следующие вопросы:
источник
До клавиатур USB клавиатуры PS / 2 использовали гораздо более простой протокол, где можно подключить одну клавиатуру к двум устройствам и заставить ее работать. Простое Y-соединение - это все, что требуется.
Старые USB-клавиатуры все еще имеют встроенный режим эмуляции PS / 2; Использование одного из этих фиолетовых переходников позволяет подключить его к порту PS / 2 на задней панели компьютера. Таким образом, если на двух компьютерах используется соединительный кабель USB-PS / 2, тогда фиолетовый адаптер на клавиатуре USB вполне может сработать.
Более новые USB-клавиатуры отказались от прежнего режима PS / 2, поэтому в этом случае работать не будут.
источник