nixp.ru v3.0

27 мая 2017,
суббота,
03:41:51 MSK

DevOps с компанией «Флант»
NIXdummy написал 25 апреля 2009 года в 12:33 (569 просмотров) Ведет себя как мужчина; открыл 5 тем в форуме, оставил 17 комментариев на сайте.

Вкратце задача такова:

Послать первый сигнал на клавиатуру, чтобы загорелась лампочка. Послать второй — чтобы потухла.

Вопрос: 1. какой сигнал? 2. как посылать?

Теперь подробнее.

Я тут уже писал про кросс-компиляцию для длинковского роутера — так вот, включил я в драйверы клавиатуру. Воткнул в роутер USB-PS/2 переходник — на роутере в файле /proc/bus/usb/devices появляютя новые записи (если надо приведу), в /dev/usb/hid появляются два файла hiddev0 и hiddev1 (на переходнике два разъема PS/2). Как я предполагаю надо послать на hiddev0 какой-то сигнал, чтобы загорелась лампочка, вот только какой и как (cat > /dev/usb/hid/hiddev0 не работает — не знает что такое «>») — на эти два вопроса гугл помалкивает. Помалкивает, в смысле, советует использовать setleds (который у меня не компилится под RTL8650B), выдает ESC последовательности включающие NumLock и т.д. А вот так чтобы конкретно ответить — фиг!

Помогите кто знает. Совсем круто будет если скажете откуда выдрать или как самому написать код программки (в исходнике setleds я так и не нашел).

P.S.: «А зачем тебе это?» Я хочу собрать из этого роутера робота — в USB втыкается клавиатура из которой выдираются лампочки, а вместо них выключатели (релюшки), которые замыкают/размыкают цепь питания мотора игрушечной машинки.

sendmoreinfo

http://www.frogmouth.net/hid-doco/examples/hiddev-misc/write-events.c

Я прошу прощения, но это кажется не совсем «в кассу":

> { 0×0c00b2, «Record (bool)» },

> { 0×0c00b3, «Fast Forward (bool)» },

> { 0×0c00b4, «Rewind (bool)» },

> { 0×0c00b5, «Scan Next Track (bool)» },

> { 0×0c00b6, «Scan Prev Track (bool)» },

на клавиатуру это слабо похоже

sendmoreinfo

почитайте USB HID spec.

DimkaS
P.S.: «А зачем тебе это?» Я хочу собрать из этого роутера робота — в USB втыкается клавиатура из которой выдираются лампочки, а вместо них выключатели (релюшки), которые замыкают/размыкают цепь питания мотора игрушечной машинки.

Я бы повесил микроконтроллер на ком-порт и передавал ему байты стандартным способом. А он бы согласно этим байтам ногами дрыгал.

Другой вариант — использовать параллельный порт. В ядре есть модуль parport. Вроде, он позволяет дрыгать произвольными ногами.

+++

Виноват, упустил, что имеется в виду роутер. Тогда ком-порт скорее всего доступен, но его можно заменить и usb-com переходником. LPT в роутере наверняка отсутствует, но зато могут быть в наличии выводы gpio. Я бы внимательно почитал документацию на процессор, если она доступна.

DimkaS
Я бы повесил микроконтроллер на ком-порт и передавал ему байты стандартным способом. А он бы согласно этим байтам ногами дрыгал.

Другой вариант — использовать параллельный порт. В ядре есть модуль parport. Вроде, он позволяет дрыгать произвольными ногами.

Это все можно сделать — и GPIO там есть, и RS232, и даже LPT, вот только я не этого добиваюсь. А добиваюсь я того, чтобы эту игрушку можно было собрать из наиболее общедоступных компонентов, за наименьшие деньги да еще и с минимумом программирования и пайки. Чтобы можно было взять дешевый Б/У-шный роутер с USB-ой, залить в него мою прошивку, воткнуть старую ненужную клаву (или что-нибудь из распространенного но уже ненужного оборудования) и каким-нибудь образом прикрутить к поломанной машинке. И управлять всем этим делом по вай-фаю.

DimkaS

Имхо, открыть ком-порт ивыкинуть туда байт проще и удобнее, чем огород с клавиатурой. ATMega есть в любом магазине электроники и стоит 50р. Программа будет в пару строчек — принять байт, записать в порт. Плюс возможности у Меги намного больше, чем у трёх диодов из клавы. Если нужна помощь — обращайся.

Вот еще вариант в голову пришёл — есть ключик PCF8574AT, управляемый по I2C. Кое-кто встраивал его в Eee PC для управления дополнительной переферией. Цена — те же 50р.

DimkaS
Имхо, открыть ком-порт ивыкинуть туда байт проще и удобнее, чем огород с клавиатурой. ATMega есть в любом магазине электроники и стоит 50р. Программа будет в пару строчек — принять байт, записать в порт. Плюс возможности у Меги намного больше, чем у трёх диодов из клавы. Если нужна помощь — обращайся.

Вот еще вариант в голову пришёл — есть ключик PCF8574AT, управляемый по I2C. Кое-кто встраивал его в Eee PC для управления дополнительной переферией. Цена — те же 50р.

Можно ATMeg-у, можно еще дюжину разных чипов — и даташиты их есть, и программы, и еще кучу всего…

А вообще возвращаясь к моему вопросу, я так и не понял — здесь нет людей которые знают какой сигнал, на какое устройство и как послать, чтобы на клавиатуре зажегся индикатор?

DimkaS

Если уделить 5 минут гуглу:

http://www.crossplatform.ru/node/345 пункт 9.2

http://martybugs.net/electronics/kbdleds.cgi

DimkaS
Если уделить 5 минут гуглу:

http://www.crossplatform.ru/node/345 пункт 9.2

http://martybugs.net/electronics/kbdleds.cgi

Ну звиняй, гуглил и вот такого не находил — наверно разучился.

А вообще тебе болшой спасиб и мегареспект за ссылки — особенно за первую аккурат то что надо когда подробно расписано элементарное действие — включить лампочку / выключить.

К сожалению я пока это реализовать не могу — споткнулся на драйверах hid и клавиатуры (тоесть «что» и «как» посылать я теперь знаю, а вот «куда»… еще не готово). Первый капризит почему-то — тоесть если я hid вшиваю в ядро иногда при втыкивании USB/PS2, он создает /dev/usb/hid/hiddev0 и соответственно hiddev1; иногда он создает только /dev/usb/hid (без hiddev-ов), а бывает что даже каталог hid не создает. Пробовал собрать модулем — тоже какая-то неразбериха, то нормально загружается, то говорит немогу: SEGMENTATION FAULT или unresolved symbol… Вобщем сейчас я занят воспитанием hid-a.

А с клавой тоже беда — В УПОР не желает собираться — keyboard.c: In function handle_scancode… либо inputdrv.o(.text+0xab0): undefined reference to `handle_scancode’. Причем на гуглах все тока и спрашивают — «что делать, как быть?» либо «а я забил и пошел другим путем».

Вот такие пироги.