Перейти к содержанию
    

Это я к тому, что подтягивания чужого софта и тщательный его разбор и анализ для этой конкретной задачи не так уж и трудоемок...

Для кого как. Для меня ковыряние в более-менее сложных исходниках Линукса - неподъемная задача. Даже отследить использование переменной по десятку хедеров и паре-тройке Си - файлов - уже большая проблема. У меня же в голове не ЭВМ, а обычные мозги.

Задача реализации хоста вполне подъемна, особенно если есть опыт реализации дивайсов. Еще крайне желательно наличие хоть самодельного сниффера, который бы подключался к линиям шины и позволял бы в режиме "магнитофона" записывать, что происходит на шине. Все это у меня было. И, тем не менее, запуск хоста вылился примерно в три месяца тяжелой, упорной работы ...

 

P.S. Не нужно ничего подстраивать. USB - клавиатуры универсальны, если вы не включаете в них всяких дополнительных плюшек, а используете только клавиши. Тогда разбор Report'ов сильно упрощается (тогда клавиатура выступает в качестве так называемого "Boot device"). Так, например, поступает BIOS, которому надо уметь работать с абсолютно любой USB - клавиатурой, и это при том, что его код сильно ограничен как по размерам, так и по сложности. Вот, см. стр. 59 ("Boot Interface Descriptors "):

 

http://www.usb.org/developers/devclass_docs/HID1_11.pdf

 

PS/2 - клавиатуры универсальны тем более.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

кстати клавиатуры по этому интерфейсу универсальны?

 

В стандартном наборе сканкодов клавиш - да.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну товарищи - я в не большом шоке :wacko: , я думал это будет несколько проще. Значит надо как-то проинициализировать USB, судя по документации для USB-host есть специальная таблица регистров с кучей адресов. Пока разбираюсь, но весьма трудно понимается. Как бы выяснить последовательность действий, что вот нужно для инициализации, как передать/получть данные? Я так понимаю, в клавиатуру надо послать некоторую команду, чтобы та выдала нужные данные. К примеру захотелось мне погасить или зажечь NumLock или CapsLock - надо дать соответствующую команду... может быть поискать какой-нибудь datasheet на клавиатуру? Для меня это очень тёмный лес. :05:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Весь прикол в том что вы связались с USB - это самоописываемый интерфейс, в этом был смысл. Ведь те кто пишет виндус не читают даташиты на все клавиатуры:)...

Принцип работы HID устройств такой: Они обмениваются репортами, формат репорта описан в дескрипторах. Когда происходит подключение устройства к хосту, хост инициализирует серию запросов по которым определяет что за устройство, подбирает к нему драйверы если надо, получает формат данных что оно выдает.

 

Для HID есть целая таблица с тем какие данные бывают, абсолютные, относительные, в репортах задаются диапазоны и так далее. Так что работая с USB клавиатурой, которая по сути HID (не берем супер навороченные), вам все равно как она устроена, у вас будет для всех все одинаково.

 

USB устройство надо отметить имеет несколько сущностей, то есть когда вы включаете его, в дескрипторах вам сообщается сколько ваще вариантов есть. Среди них будет обязательно один стандартный, если клава навороченная и нужен ей свой драйвер, то будет и такой вариант, и хост сможет выбрать по какому варианту работать.

 

Так вот возвращаясь к HID

в нем определены

IN репорт, OUT репорт, Feature репорт.

В USB все всегда со стороны хоста мериют, так что OUT репорт - это передача данных в HID, в клавиатуре его может не быть

IN репорт - это данные от устройства, через них вам будут из клавиатуры слать код нажатой кнопки.

 

Feature - это свойства, это штука двунаправленная, ее можно как задать, так и считать, состояние feature может менять как хост так и устройство, обычно через него на клавах зажигают диодики что нажат капс лок и так далее, или же там стоит флаг что он нажат.

 

Чтобы это точно узнать, надо опросить клавиатуру и считать дискрипторы ее репортов.

 

 

Отчеты могут поступать в 3 режимах, по изменению состояния или по таймеру с заданным интервалом или по запросу от хоста, но это только для фичей.. In репорт запросить вроде как нельзя, если я не ошибаюсь... Также как фича отчет не придет по инициативе устройства... но тут 100% гарантии не дам, давно я с этим ковырялся...

 

----------

обманул маленько

 

InReport идет через входную интерапт точку, или через контрольную

 

OutReport

FeatureReport

идут через контрольную точку, или через опциональную выходную интерапт точку, если ее нет, то только через контрольную по инициации хоста.

 

OutReport можно только послать

InReport можно только запросить

FeatureReport можно и послать и запросить

 

запрашивать OutReport или посылать InReport через контрольную точку по идее не запрещено, но устройство должно их отнакать, и в стандартном драйвере винды такой опции не дали...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

может быть поискать какой-нибудь datasheet на клавиатуру?

Опыт разработки устройств USB у вас есть ? Если нет, читайте спецификацию и книжки. Потом беритесь за описание OHCI и всего того, что написано по USB - подсистеме в документации на ваш МК.

Еще раз повторю. Есть серьезная, острая необходимость в использовании именно USB - клавиатуры и есть куча времени на проект ? Если да, разбирайтесь с USB. Если нет - ставьте PS/2. Это я вам говорю как человек, решивший (почти с нуля) аналогичную задачу ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если нет - ставьте PS/2. Это я вам говорю как человек, решивший (почти с нуля) аналогичную задачу ...

 

Все правильно - если усб нужен только ради клавы - целесообразно работать в режиме ps2 и не парить себе мозг на пол-года разбирательством с усб и отлаживанием и исключением глюков, а их будет и немало.

Другое дело, если есть еще требования, например работа с флешками и т.п. - тогда да - вгрызайтесь в усб, благо хост совместим с ohci. Это большой плюс в сравнении с теми-же стмками.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так понимаю, в клавиатуру надо послать некоторую команду, чтобы та выдала нужные данные. К примеру захотелось мне погасить или зажечь NumLock или CapsLock - надо дать соответствующую команду... может быть поискать какой-нибудь datasheet на клавиатуру? Для меня это очень тёмный лес. :05:

 

Даташит на USB клавиатуру называется The Device Class Definition for HID. Ищется на USB.org. Там же можно найти "некую команду" в документе USB Specification. В последнем вам надобно в основном 9-ю главу. Я уже запамятовал подробности, но примерная последовательность такая: установить клавиатуре адрес, запросить дескрипторы, установить конфигурацию. Вроде бы все, после этого она должна сканкоды слать.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем большое спасибо за ответы! Я понял, что раньше ничего не понимал. Конечно же меня интересует только клавиатура, а что Вы имеете ввиду под PS/2 ? Взять клавиатуру PS/2 и воткнуть её в USB через переходник PS/2-USB? А работать будет?

Ладно... я пока почитаю документ The Device Class Definition for HID который на USB.org, но весьма интересно... значит задаём адрес, запрашиваем дескрипторы, устанвливаем конфигурацию и читаем коды кнопок... - надо как-то всё это осознать. Уверен, у меня будет куча вопросов. :( Только не бросайте меня.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем большое спасибо за ответы! Я понял, что раньше ничего не понимал. Конечно же меня интересует только клавиатура, а что Вы имеете ввиду под PS/2 ? Взять клавиатуру PS/2 и воткнуть её в USB через переходник PS/2-USB?

 

Для PS2 нужен другой аппаратный интерфейс. Реализуется ногодрыгом портами контроллера общего назначения. Гуглим что нить в духе PS/2 интерфейс.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Взять клавиатуру PS/2 и воткнуть её в USB через переходник PS/2-USB?

 

Ладно... я пока почитаю документ The Device Class Definition for HID который на USB.org

1. Наоборот, берем клавиатуру USB и через переходник включаем ее в разъем PS/2.

 

2. Не нужен вам сейчас этот документ. Вам до HID как до неба. Сначала надо хост поднять. Читайте спецификацию USB, спецификацию OHCI и описания на ваш контроллер ...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Наоборот, берем клавиатуру USB и через переходник включаем ее в разъем PS/2.

Сомневаюсь, что таковой существует. Ибо называться он будет: "USB-хост" ;)

 

2. Не нужен вам сейчас этот документ. Вам до HID как до неба. Сначала надо хост поднять. Читайте спецификацию USB, спецификацию OHCI и описания на ваш контроллер ...

Не нужен ТСу хост. Как тут уже здраво посоветовали - ему нужно использовать PS/2.

Не уверен, но где-то мельком слышал, что клавы "USB"/"PS/2" при втыкании их в один из этих интерфейсов, определяют куда их воткнули и

начинают работать по соотв. интерфейсу. Хотя это надо проверить.

В любом случае - PS/2 много проще будет и, если автору надо решать практическую задачу, а не чтобы "наработаться",

то имеет смысл остановиться на PS/2.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не уверен, но где-то мельком слышал, что клавы "USB"/"PS/2" при втыкании их в один из этих интерфейсов, определяют куда их воткнули и начинают работать по соотв. интерфейсу.

Это про мышки. Они действительно так умеют. Клавиатур с такими переходниками в комплекте не встречал. PS отдельно, USB отдельно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это про мышки. Они действительно так умеют. Клавиатур с такими переходниками в комплекте не встречал. PS отдельно, USB отдельно.

Дак нет ничего проще - берете переходник от мышки, усб клаву и втыкаете в разъем ps2 на материнке (розовый). Работает - значит режим поддерживается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...