Вкратце задача такова:
Послать первый сигнал на клавиатуру, чтобы загорелась лампочка. Послать второй — чтобы потухла.
Вопрос: 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 втыкается клавиатура из которой выдираются лампочки, а вместо них выключатели (релюшки), которые замыкают/размыкают цепь питания мотора игрушечной машинки.
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
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)» },
на клавиатуру это слабо похоже
почитайте USB HID spec.
Я бы повесил микроконтроллер на ком-порт и передавал ему байты стандартным способом. А он бы согласно этим байтам ногами дрыгал.
Другой вариант — использовать параллельный порт. В ядре есть модуль parport. Вроде, он позволяет дрыгать произвольными ногами.
+++
Виноват, упустил, что имеется в виду роутер. Тогда ком-порт скорее всего доступен, но его можно заменить и usb-com переходником. LPT в роутере наверняка отсутствует, но зато могут быть в наличии выводы gpio. Я бы внимательно почитал документацию на процессор, если она доступна.
Это все можно сделать — и GPIO там есть, и RS232, и даже LPT, вот только я не этого добиваюсь. А добиваюсь я того, чтобы эту игрушку можно было собрать из наиболее общедоступных компонентов, за наименьшие деньги да еще и с минимумом программирования и пайки. Чтобы можно было взять дешевый Б/У-шный роутер с USB-ой, залить в него мою прошивку, воткнуть старую ненужную клаву (или что-нибудь из распространенного но уже ненужного оборудования) и каким-нибудь образом прикрутить к поломанной машинке. И управлять всем этим делом по вай-фаю.
Имхо, открыть ком-порт ивыкинуть туда байт проще и удобнее, чем огород с клавиатурой. ATMega есть в любом магазине электроники и стоит 50р. Программа будет в пару строчек — принять байт, записать в порт. Плюс возможности у Меги намного больше, чем у трёх диодов из клавы. Если нужна помощь — обращайся.
Вот еще вариант в голову пришёл — есть ключик PCF8574AT, управляемый по I2C. Кое-кто встраивал его в Eee PC для управления дополнительной переферией. Цена — те же 50р.
Можно ATMeg-у, можно еще дюжину разных чипов — и даташиты их есть, и программы, и еще кучу всего…
А вообще возвращаясь к моему вопросу, я так и не понял — здесь нет людей которые знают какой сигнал, на какое устройство и как послать, чтобы на клавиатуре зажегся индикатор?
Если уделить 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’. Причем на гуглах все тока и спрашивают — «что делать, как быть?» либо «а я забил и пошел другим путем».
Вот такие пироги.