kovigor 6 22 мая, 2014 Опубликовано 22 мая, 2014 · Жалоба Это я к тому, что подтягивания чужого софта и тщательный его разбор и анализ для этой конкретной задачи не так уж и трудоемок... Для кого как. Для меня ковыряние в более-менее сложных исходниках Линукса - неподъемная задача. Даже отследить использование переменной по десятку хедеров и паре-тройке Си - файлов - уже большая проблема. У меня же в голове не ЭВМ, а обычные мозги. Задача реализации хоста вполне подъемна, особенно если есть опыт реализации дивайсов. Еще крайне желательно наличие хоть самодельного сниффера, который бы подключался к линиям шины и позволял бы в режиме "магнитофона" записывать, что происходит на шине. Все это у меня было. И, тем не менее, запуск хоста вылился примерно в три месяца тяжелой, упорной работы ... P.S. Не нужно ничего подстраивать. USB - клавиатуры универсальны, если вы не включаете в них всяких дополнительных плюшек, а используете только клавиши. Тогда разбор Report'ов сильно упрощается (тогда клавиатура выступает в качестве так называемого "Boot device"). Так, например, поступает BIOS, которому надо уметь работать с абсолютно любой USB - клавиатурой, и это при том, что его код сильно ограничен как по размерам, так и по сложности. Вот, см. стр. 59 ("Boot Interface Descriptors "): http://www.usb.org/developers/devclass_docs/HID1_11.pdf PS/2 - клавиатуры универсальны тем более. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
undefined 0 22 мая, 2014 Опубликовано 22 мая, 2014 · Жалоба кстати клавиатуры по этому интерфейсу универсальны? В стандартном наборе сканкодов клавиш - да. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 23 мая, 2014 Опубликовано 23 мая, 2014 · Жалоба я пытаюсь сказать что код обслуживания OHCI очень просто, и его нетрудно разобрать чужой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TrueCyrix 0 23 мая, 2014 Опубликовано 23 мая, 2014 · Жалоба Ну товарищи - я в не большом шоке , я думал это будет несколько проще. Значит надо как-то проинициализировать USB, судя по документации для USB-host есть специальная таблица регистров с кучей адресов. Пока разбираюсь, но весьма трудно понимается. Как бы выяснить последовательность действий, что вот нужно для инициализации, как передать/получть данные? Я так понимаю, в клавиатуру надо послать некоторую команду, чтобы та выдала нужные данные. К примеру захотелось мне погасить или зажечь NumLock или CapsLock - надо дать соответствующую команду... может быть поискать какой-нибудь datasheet на клавиатуру? Для меня это очень тёмный лес. :05: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 23 мая, 2014 Опубликовано 23 мая, 2014 · Жалоба Весь прикол в том что вы связались с 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 через контрольную точку по идее не запрещено, но устройство должно их отнакать, и в стандартном драйвере винды такой опции не дали... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 23 мая, 2014 Опубликовано 23 мая, 2014 · Жалоба может быть поискать какой-нибудь datasheet на клавиатуру? Опыт разработки устройств USB у вас есть ? Если нет, читайте спецификацию и книжки. Потом беритесь за описание OHCI и всего того, что написано по USB - подсистеме в документации на ваш МК. Еще раз повторю. Есть серьезная, острая необходимость в использовании именно USB - клавиатуры и есть куча времени на проект ? Если да, разбирайтесь с USB. Если нет - ставьте PS/2. Это я вам говорю как человек, решивший (почти с нуля) аналогичную задачу ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 23 мая, 2014 Опубликовано 23 мая, 2014 · Жалоба Если нет - ставьте PS/2. Это я вам говорю как человек, решивший (почти с нуля) аналогичную задачу ... Все правильно - если усб нужен только ради клавы - целесообразно работать в режиме ps2 и не парить себе мозг на пол-года разбирательством с усб и отлаживанием и исключением глюков, а их будет и немало. Другое дело, если есть еще требования, например работа с флешками и т.п. - тогда да - вгрызайтесь в усб, благо хост совместим с ohci. Это большой плюс в сравнении с теми-же стмками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 23 мая, 2014 Опубликовано 23 мая, 2014 · Жалоба Ну и еще вопросы личного роста... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
undefined 0 23 мая, 2014 Опубликовано 23 мая, 2014 · Жалоба Я так понимаю, в клавиатуру надо послать некоторую команду, чтобы та выдала нужные данные. К примеру захотелось мне погасить или зажечь NumLock или CapsLock - надо дать соответствующую команду... может быть поискать какой-нибудь datasheet на клавиатуру? Для меня это очень тёмный лес. :05: Даташит на USB клавиатуру называется The Device Class Definition for HID. Ищется на USB.org. Там же можно найти "некую команду" в документе USB Specification. В последнем вам надобно в основном 9-ю главу. Я уже запамятовал подробности, но примерная последовательность такая: установить клавиатуре адрес, запросить дескрипторы, установить конфигурацию. Вроде бы все, после этого она должна сканкоды слать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TrueCyrix 0 23 мая, 2014 Опубликовано 23 мая, 2014 · Жалоба Всем большое спасибо за ответы! Я понял, что раньше ничего не понимал. Конечно же меня интересует только клавиатура, а что Вы имеете ввиду под PS/2 ? Взять клавиатуру PS/2 и воткнуть её в USB через переходник PS/2-USB? А работать будет? Ладно... я пока почитаю документ The Device Class Definition for HID который на USB.org, но весьма интересно... значит задаём адрес, запрашиваем дескрипторы, устанвливаем конфигурацию и читаем коды кнопок... - надо как-то всё это осознать. Уверен, у меня будет куча вопросов. :( Только не бросайте меня. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
undefined 0 23 мая, 2014 Опубликовано 23 мая, 2014 · Жалоба Всем большое спасибо за ответы! Я понял, что раньше ничего не понимал. Конечно же меня интересует только клавиатура, а что Вы имеете ввиду под PS/2 ? Взять клавиатуру PS/2 и воткнуть её в USB через переходник PS/2-USB? Для PS2 нужен другой аппаратный интерфейс. Реализуется ногодрыгом портами контроллера общего назначения. Гуглим что нить в духе PS/2 интерфейс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 23 мая, 2014 Опубликовано 23 мая, 2014 · Жалоба Взять клавиатуру PS/2 и воткнуть её в USB через переходник PS/2-USB? Ладно... я пока почитаю документ The Device Class Definition for HID который на USB.org 1. Наоборот, берем клавиатуру USB и через переходник включаем ее в разъем PS/2. 2. Не нужен вам сейчас этот документ. Вам до HID как до неба. Сначала надо хост поднять. Читайте спецификацию USB, спецификацию OHCI и описания на ваш контроллер ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 23 мая, 2014 Опубликовано 23 мая, 2014 · Жалоба 1. Наоборот, берем клавиатуру USB и через переходник включаем ее в разъем PS/2. Сомневаюсь, что таковой существует. Ибо называться он будет: "USB-хост" ;) 2. Не нужен вам сейчас этот документ. Вам до HID как до неба. Сначала надо хост поднять. Читайте спецификацию USB, спецификацию OHCI и описания на ваш контроллер ... Не нужен ТСу хост. Как тут уже здраво посоветовали - ему нужно использовать PS/2. Не уверен, но где-то мельком слышал, что клавы "USB"/"PS/2" при втыкании их в один из этих интерфейсов, определяют куда их воткнули и начинают работать по соотв. интерфейсу. Хотя это надо проверить. В любом случае - PS/2 много проще будет и, если автору надо решать практическую задачу, а не чтобы "наработаться", то имеет смысл остановиться на PS/2. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
undefined 0 23 мая, 2014 Опубликовано 23 мая, 2014 · Жалоба Не уверен, но где-то мельком слышал, что клавы "USB"/"PS/2" при втыкании их в один из этих интерфейсов, определяют куда их воткнули и начинают работать по соотв. интерфейсу. Это про мышки. Они действительно так умеют. Клавиатур с такими переходниками в комплекте не встречал. PS отдельно, USB отдельно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 23 мая, 2014 Опубликовано 23 мая, 2014 · Жалоба Это про мышки. Они действительно так умеют. Клавиатур с такими переходниками в комплекте не встречал. PS отдельно, USB отдельно. Дак нет ничего проще - берете переходник от мышки, усб клаву и втыкаете в разъем ps2 на материнке (розовый). Работает - значит режим поддерживается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться