Я бы посадил на прерывание от /dev/usb/hid/hiddev0 обработчик...
К сожалению не знаю, пока, как это сделать...
Может плеер и так кнопки от /dev/usb/hid/hiddev0 понимает? надо только в конфиге поковырять...
Я бы посадил на прерывание от /dev/usb/hid/hiddev0 обработчик...
К сожалению не знаю, пока, как это сделать...
Может плеер и так кнопки от /dev/usb/hid/hiddev0 понимает? надо только в конфиге поковырять...
Last edited by LnrMn; 06-07-2009 at 19:15.
Asus RT-AC66U, Xerox Phaser 3160B, on the shelf RT-N16 (Killed by lightning)
WL-500gPv1 128MB, WL-500W 300MHz/128M, LCD 40x4, DIR-320 8Mb/64MB
WL-700g 128MB, MNV25E2+ and more and more devices. provod.beeline.ru
-------------------------------------------
Computers. Since 1984. First one - "МИР-1"
Ого у меня тоже такой пульт есть от P5W DH Deluxe.
На работе всё равно им не пользуюсь, так что "прихватезирую" его домой.
DIR320-1.9.2.7-d-r2627M
http://www.google.com/search?q=Linux...ия+кнопок+мыши
apt-cache search mouse
...
Package: btnx
Description: daemon for rerouting mouse button events
btnx is a daemon that can be configured to send keyboard and mouse button
combination events when a mouse button is pressed. It can also execute
commands. It provides an easy and quick way to configure mouse buttons to
your liking.
Собирайте.
Или собирайте gpm + libgpm2, и пишите свое приложение для обработки событий gpm.
Вообще, примеров кода для обработки events - масса. Вы искать-то пробовали? Думаю, что нет.
Вот, как пример, близкая к вашей задача:
http://www.linux.org.ru/view-message.jsp?msgid=804527
Вот чуть теории (там же есть масса примеров):
http://www.frogmouth.net/hid-doco/p13.html
Все, что нужно - написать минимальный код, который будет читать из устройства, и писАть на STDOUT/STDERR, и скомпилировать его под платформу (об этом тут есть темы).
Можно и без компиляции - все можно сделать на Perl.
Примеры ищите сами, это не проблема.
© 2008-2013 ABATAPA WL-500gP/128M / Asus RT-N16 / USB Flash / VLAN / PPPoE / VoIP / nShaper / NAS: iStor is607, Sarotech NAS-20, QNap 109 Pro / NFS / Принтер / etc
ABATAPA спасибо!
Искать пробовал, но видимо для меня это пока не по "зубам". Знаний не хватает. Пока есть только желание.
Еще раз спfсибо что откликнулись и указали направление.
С Linux, Shell ... сталкнулся первый раз при покупке роутера
Видимо эта затея затянется..
DIR-320 / WL-500gPv2 / O'Play R1
Уменя что-то подобное...
Мне необходимо некое управление девайсами подключенными к роутеру. Т.е. один из девайсов - колонки, и надо чтобы через них по требованию/событию (например нажатию на кнопку) проигрывался звук.
Так вот, я взял обычную usb клаву, добавил модули на роутер (evdev.o, hid.o, input.o), написал на "с" прототип небольшой проги которая отслеживает нажатия клавиш через "/dev/input/event0" и выполняет необходимые функции/действия.
Если это то что интересует - могу помочь!!!
p.s. Программу отработал на debian, осталось перести на роутер. На днях должен сделать!
Спасибо! было бы очень интересно !!
про колонки если можно по подробнее...
Я тоже не сидел сложа руки почитал немного про Perl и вот набросал
не большую прогу тестовую:
выдает вот это для анализа:Code:#!/opt/bin/perl -w $fdev="/dev/usb/hid/hiddev0"; # IR Remote (ASUS) #$fdev="/dev/input/event0"; # Mouse #$fdev="/opt/usr/mybin"; # My test file open(REMOTE,$fdev) || die "!Error open file: $!\n"; binmode(REMOTE); begin: $df=''; $result = sysread(REMOTE, $df, 64); # $result - real read byte $ascii = unpack("H*",$df); # convert bytes to view hex string print "Read bytes: $result\n"; print " df: $ascii\n"; goto begin; close(REMOTE);
Что интересно мышка может выдавать 16,32 и 48 байт.Code:Read bytes: 8 df: 000000ff06000000 - нажатие Read bytes: 8 df: 000000ff00000000 - отпускание
последнее значение - это когда водишь мышкой и не останавливая нажимаешь кнопки.
вот пример от мышки:
Code:Read bytes: 16 df: de46574a39c60e000200000004000000 Read bytes: 32 df: de46574a75e50e000200000001000000de46574a80e50e0002000100ffffffff Read bytes: 32 df: de46574af8230f000200000001000000de46574a03240f000200010001000000 Read bytes: 48 df: df46574a763f00000100110101000000df46574a873f000002000000ffffffffdf46574a8a3f00000200010001000000 Read bytes: 32 df: df46574a75bc000002000000ffffffffdf46574a80bc00000200010001000000 Read bytes: 32 df: df46574a7b39010002000000ffffffffdf46574a863901000200010001000000 Read bytes: 32 df: df46574ab658010002000000ffffffffdf46574ac25801000200010001000000 Read bytes: 32 df: df46574a3697010002000000ffffffffdf46574a409701000200010001000000 Read bytes: 16 df: df46574a753302000100110100000000
DIR-320 / WL-500gPv2 / O'Play R1
Управление с помощью пульта.
Здесь конечно еще сыровато, но уже работает.Code:#!/opt/bin/perl $k01 = pack("H*","000000ff01000000"); # power $k02 = pack("H*","000000ff06000000"); # key full screen $k03 = pack("H*","000000ff03000000"); # key cpu $k04 = pack("H*","000000ff04000000"); # key zoom $k05 = pack("H*","000000ff0c000000"); # ap-1 trigger $k06 = pack("H*","000000ff0d000000"); # ap-2 trigger $k07 = pack("H*","000000ff05000000"); # ap-3 menu $k08 = pack("H*","000000ff07000000"); # key "+" $k09 = pack("H*","000000ff08000000"); # key << $k10 = pack("H*","000000ff09000000"); # key >|| $k11 = pack("H*","000000ff0a000000"); # key >> $k12 = pack("H*","000000ff0b000000"); # key "-" $fdev="/dev/usb/hid/hiddev0"; # IR Remote (ASUS) #$fdev="/dev/input/event0"; # Mouse #$fdev="/opt/usr/mybin"; # My test file open(REMOTE,$fdev) || die "!Error open file: $!\n"; binmode(REMOTE); begin: $df=''; sysread(REMOTE, $df, 64); SWITCH: { if ($df eq $k01 ) { print " k01\n"; system "ez-setup"; last SWITCH; } # здесь вызов внешней команды (исполняемого скрипта) и т. п. if ($df eq $k02 ) { print " k02\n"; last SWITCH; } if ($df eq $k03 ) { print " k03\n"; last SWITCH; } if ($df eq $k04 ) { print " k04\n"; last SWITCH; } if ($df eq $k05 ) { print " k05\n"; last SWITCH; } if ($df eq $k06 ) { print " k06\n"; last SWITCH; } if ($df eq $k07 ) { print " k07\n"; last SWITCH; } if ($df eq $k08 ) { print " k08\n"; last SWITCH; } if ($df eq $k09 ) { print " k09\n"; last SWITCH; } if ($df eq $k10 ) { print " k10\n"; last SWITCH; } if ($df eq $k11 ) { print " k11\n"; last SWITCH; } if ($df eq $k12 ) { print " k12\n"; last SWITCH; } } goto begin; close(REMOTE);
Кнопкой K1 я вызываю для примера внешний скрипт EZ-SETUP,
в котором у меня прописано переключение между USB модемом и WAN.
После того как все отлажено можно подправить post-mount
....
# установка драйверов
insmod /opt/modules/input.o
insmod /opt/modules/evdev.o
insmod /opt/modules/hid.o
# загрузка программы управления
/opt/../remote.pl - путь к этому файлу
flashfs save && flashfs commit && flashfs enable
reboot
Все работает, Ура!!!
Еще раз большое спасибо ABATAPA !
з.ы.
PERL оказывается не плохой язык!
можно чудесные вещи писать.
DIR-320 / WL-500gPv2 / O'Play R1
© 2008-2013 ABATAPA WL-500gP/128M / Asus RT-N16 / USB Flash / VLAN / PPPoE / VoIP / nShaper / NAS: iStor is607, Sarotech NAS-20, QNap 109 Pro / NFS / Принтер / etc
Подключил USB клавиатуру к роутеру. Установил драйвер
http://wl500g.googlecode.com/files/modules-1.9.2.7-d-r381.tgz
Как зажечь/потушить NumLook, CapsLook, Scrooll на клаве?
Читать нажатия кнопок получаетсяCode:insmod /opt/input.o insmod /opt/evdev.o insmod /opt/hid.o
Code:cat /dev/input/event0
Здесь народ ещё и пульт д/у от Asus'a подключал ...
Да, а если поставить ещё и маленький дисплей-
монитор, то получится мини-комп на линухе ...
Видел, вот тут http://wl500g.info/showthread.php?t=20307
Но меня интересует именно управление лампочками - что бы управлять чем-нибудь. В написании USB драйвера на линукс для своего устройства не силен, поэтому и использую плату клавиутары.
ASUS 500 gP V1 1.9.2.7-10
Интересный подход.... хм... Управлять всего тремя лампочками на плате клавиатуры. А чего так мало??
А вообще мне попадалось... Надо погуглить команды клавиатуры.
Code:ED Set status LED's - This command can be used to turn on and off the Num Lock, Caps Lock & Scroll Lock LED's. After sending ED, keyboard will reply with ACK (FA) and wait for another byte which determines their status. Bit 0 controls the Scroll Lock, bit 1 the Num Lock and bit 2 the Caps lock. Bits 3 to 7 are ignored. EE Echo - upon sending an echo command to the keyboard, the keyboard should reply with an echo (EE). F0 Set scan code set. Upon sending F0, keyboard will reply with ACK (FA) and wait for another byte, 01-03 which determines the scan code used. Sending 00 as the second byte will return the scan code set currently in use. F3 Set typematic repeat rate. Keyboard will acknowledge command with FA and wait for a second byte, which determines the typematic repeat rate. F4 Keyboard enable - clears the keyboard's output buffer, enables keyboard scanning and returns an acknowledgment. F5 Keyboard disable - resets the keyboard, disables keyboard scanning and returns an acknowledgment. FE Resend - upon receipt of the re-send command, the keyboard will re-transmit the last byte sent. FF Reset - resets the keyboard.
Last edited by LnrMn; 04-08-2009 at 20:01.
Asus RT-AC66U, Xerox Phaser 3160B, on the shelf RT-N16 (Killed by lightning)
WL-500gPv1 128MB, WL-500W 300MHz/128M, LCD 40x4, DIR-320 8Mb/64MB
WL-700g 128MB, MNV25E2+ and more and more devices. provod.beeline.ru
-------------------------------------------
Computers. Since 1984. First one - "МИР-1"
включение Num Lock
echo -en '\0000\0000\0000\0000\0000\0000\0000\0000\0021\000 0\0000\0000\0001\0000\0000\0000' > /dev/input/event0
включение Caps Lock
echo -en '\0000\0000\0000\0000\0000\0000\0000\0000\0021\000 0\0001\0000\0001\0000\0000\0000' > /dev/input/event0
включение Scroll Lock
echo -en '\0000\0000\0000\0000\0000\0000\0000\0000\0021\000 0\0002\0000\0001\0000\0000\0000' > /dev/input/event0
выключение Num Lock
echo -en '\0000\0000\0000\0000\0000\0000\0000\0000\0021\000 0\0000\0000\0000\0000\0000\0000' > /dev/input/event0
выключение Caps Lock
echo -en '\0000\0000\0000\0000\0000\0000\0000\0000\0021\000 0\0001\0000\0000\0000\0000\0000' > /dev/input/event0
выключение Scroll Lock
echo -en '\0000\0000\0000\0000\0000\0000\0000\0000\0021\000 0\0002\0000\0000\0000\0000\0000' > /dev/input/event0
форумный движек вставил пробел между нулями, этот пробел надо в команде удалить