Форум Beholder http://beholder.ru/bb/ | |
Работа пульта ДУ в разных программах http://beholder.ru/bb/viewtopic.php?f=11&t=6081 |
Страница 1 из 9 |
Автор: | igk72 [ 09 янв 2008, 03:23 ] |
Заголовок сообщения: | Работа пульта ДУ в разных программах |
Коротко - все работает. И работает правильно. Прочитайте ниже вот. Пульт видится системой как обычное устройство ввода /dev/input/eventX (где X номер устройства). Как своеобразная клавиатура. У других аналогичных тюнеров также. В Линуксе есть hardware-коды клавиш, и системные коды клавиатурных событий (константы). Так вот hardware-коды клавиш преобразуются в системные константы на основе неких таблиц (расскладок). Для клавиатур все это уже давно отлаженно, прозрачно, и подгружается динамически. Значения констант-событий могут быть 4-х байтные. А вот многими программами воспринимаются только 1 байт!. Для пультов тоже есть такие таблицы, но они внесены жестко в модули ядра. Для каждого типа тюнеров отдельно. Для Beholder тоже такая таблица (в патче видно). И там анаогично другим тюнерам задано преобразование. Многие кнопки (цифры например) на пульте преобразуются в 1-байтовые констаты-события, а некоторые (СH-каналы например) в многобайтные. В этом как раз и проблемка. И конечно программы (tvtime,lirc,X-ы) не понимает такие значения-события. Выхода решения два: 1) применять пакет lirc с настройкой на драйвер dev/input и соответсвуюшим lircd-конфигом. Как настроить lirc читайте сами (или ниже, я дописал для новичков), тем более это легко и везде описано. Готовый файл lircd.conf 2) с помощью программы input--kbd (из пакета input-utils) на старте динамически изменять "расскладку" пульта, так чтобы не было многобайтных клавиатурных событий от пульта. примерно вот так input-kbd -f /etc/input-kbd/beholder `cat /proc/bus/input/devices | grep -2 "i2c-.*/.*/ir0" | grep "H:" | awk '{ sub(/event/, "", $3); print $3}'` >/dev/null 2>&1 расположить можно в /etc/rc.d/rc.local или где еще в зависимости от дистрибутива. Файлы - файл beholder для input-kbd - пакет input-utils Возможно надо так же четко указать чтобы программы не захватывали устройство пульта как еще одну клавиатуру. в Ubunru 9.04 (и не только был такой недочет, но временный). Об этом я тоже писал на форуме http://www.beholder.ru/bb/viewtopic.php?p=48076#48076 Надо создать файл /mnt/files/linux/etc/hal/fdi/lirc.fdi и в нем вот такое: Код: <xml>
<deviceinfo> <device> <match> <merge>true</merge> </match> </device> </deviceinfo> И перегрузитесь (так проще). Настройка lircd - предположим у вас сделано вот так (для Ubuntu/Debian): файл /etc/lirc/hardware.conf и в нем строки REMOTE="BeholdTV" REMOTE_MODULES="" REMOTE_DRIVER="dev/input" REMOTE_DEVICE="" REMOTE_LIRCD_CONF="generic/devinput.conf" REMOTE_LIRCD_ARGS="-d name="*BeholdTV*"" START_LIRCD="true" LOAD_MODULES="false" FORCE_NONINTERACTIVE_RECONFIGURATION="false" START_LIRCMD="" LIRCMD_CONF="" файл /etc/lircd.conf и /etc/lirc/lircd.conf и в них только вот эта значимая строка include "/usr/share/lirc/remotes/generic/devinput.conf" Поясню выделенное красным. Так как в таблице кодов в моделе-драйвере используются только коды-константы ядра линукса, то они же определенны все в файле /usr/share/lirc/remotes/generic/devinput.conf который и нужно указать. Если все же по какой-то причине (не знаю какой) вы решите иметь свой /etc/lirc/lircd.conf то надо пользоваться утилитой irrecord вызывая ее вот так irrecord -H dev/input -d name="*BeholdTV*" /etc/lirc/lircd.conf Следуем указаниям на экране и нажимаем на кнопки, заполняя названия их, Конечно сам демон-служба lirc должен быть остановлен в это время. sudo /etc/init.d/lirc stop Этот способ я лично не рекомендую с современными тюнерами где коды кнопок в таблице все равно имеют значение из ядра линукс, вообщем с устройствами типа dev/input Чтобы оттестировать нужно запустить lircd в режиме терминала. Для этого нужно (первая команда спросит ваш пароль): sudo -i lircd --driver=devinput -d name="*BeholdTV*" --nodaemon и смотрите на вывод строк в терминале. И запустите рядом в соседнем терминале сразу irw и нажимайте кнопки. |
Автор: | Nick_L [ 09 янв 2008, 19:31 ] |
Заголовок сообщения: | Re: Работа кнопок пульта в разных программах |
no flame |
Автор: | Nick_L [ 09 янв 2008, 20:11 ] |
Заголовок сообщения: | Re: Работа кнопок пульта в разных программах |
no flame |
Автор: | Nick_L [ 09 янв 2008, 20:47 ] |
Заголовок сообщения: | Re: Работа кнопок пульта в разных программах |
no flame |
Автор: | Romosyto [ 20 фев 2008, 21:03 ] |
Заголовок сообщения: | |
Здравствуйте! Вот прикрутил себе на Ubuntu 7.10 (ядро 2.6.24) тюнер Beholder 509 FM. Благодаря постам, найденным здесь, поставил софт и все нормально определилось и заработало! Но естесственно пульт работал плохо. Прочитал этот топик. Сделал все как описано в Howto по Fedora (Nick_L), только разве что для убунты. Кнопки на пульте все заработали, но появились 2 проблемки: 1) Для того чтобы tvtime отреагировал на команду нужно нажать кнопку на пульте 2 раза а не один. Кто подскажет, в чем грабли? 2) Для работы пульта я в одном терминале набираю команду lircd --nodaemon --driver=dev/input --device=/dev/input/event3 а в другом терминале irexec Вопрос: как сделать чтоб эти команды запускались при запуске системы? (Ubuntu) |
Автор: | Nick_L [ 21 фев 2008, 11:20 ] |
Заголовок сообщения: | |
no flame |
Автор: | Romosyto [ 21 фев 2008, 13:00 ] |
Заголовок сообщения: | |
Спасибо, автозагрузка заработала, но нажимать кнопки приходится все равно по 2 раза(( Может это связано с тем, что передача кода идет сначала к Lirc, потом к irexec и только потом к tvtime ??? Не знаю че я перемудрил( Могу выложить содержимое файлов чтоб разобраться |
Автор: | igk72 [ 21 фев 2008, 13:57 ] |
Заголовок сообщения: | |
писал(а): Спасибо, автозагрузка заработала, но нажимать кнопки приходится все равно по 2 раза Если не загружать ничего кроме lircd - то при запуске irw кнопки один сразу срабатывают???
Или как? |
Автор: | Romosyto [ 21 фев 2008, 14:31 ] |
Заголовок сообщения: | |
Ну когда я запускаю и lirc и irexec и irw то в логах отображается каждое нажатие кнопки. Вот клацаю Громкость+ первый раз - отображается код и название кнопки, но tvtime 0 реакции, нажимаю кнопку второй раз - опять отображается код и название и tvtime уже раздупляется |
Автор: | Nick_L [ 21 фев 2008, 14:58 ] |
Заголовок сообщения: | |
no flame |
Автор: | Romosyto [ 21 фев 2008, 15:29 ] |
Заголовок сообщения: | |
Содержимое .lircrc: begin prog=irexec button=POWER config=tvtime& config=tvtime-command QUIT repeat=0 end begin prog=irexec button=FUNCTION config=tvtime& config=tvtime-command TOGGLE_FULLSCREEN repeat=0 end begin prog=irexec button=1 config=tvtime& config=tvtime-command CHANNEL_1 repeat=0 end begin prog=irexec button=2 config=tvtime& config=tvtime-command CHANNEL_2 repeat=0 end begin prog=irexec button=3 config=tvtime& config=tvtime-command CHANNEL_3 repeat=0 end begin prog=irexec button=4 config=tvtime& config=tvtime-command CHANNEL_4 repeat=0 end begin prog=irexec button=5 config=tvtime& config=tvtime-command CHANNEL_5 repeat=0 end begin prog=irexec button=6 config=tvtime& config=tvtime-command CHANNEL_6 repeat=0 end begin prog=irexec button=7 config=tvtime& config=tvtime-command CHANNEL_7 repeat=0 end begin prog=irexec button=8 config=tvtime& config=tvtime-command CHANNEL_8 repeat=0 end begin prog=irexec button=9 config=tvtime& config=tvtime-command CHANNEL_9 repeat=0 end begin prog=irexec button=0 config=tvtime& config=tvtime-command CHANNEL_0 repeat=0 end begin prog=irexec button=100 config=tvtime& config=tvtime-command TOGGLE_ASPECT repeat=0 end begin prog=irexec button=INFO config=tvtime& config=tvtime-command DISPLAY_INFO repeat=0 end begin prog=irexec button=SLEEP config=tvtime& config=tvtime-command TOGGLE_PAUSE repeat=0 end begin prog=irexec button=MUTE config=tvtime& config=tvtime-command TOGGLE_MUTE repeat=0 end begin prog=irexec button=VOL+ config=tvtime& config=tvtime-command RIGHT repeat=0 end begin prog=irexec button=VOL- config=tvtime& config=tvtime-command LEFT repeat=0 end begin prog=irexec button=CH+ config=tvtime& config=tvtime-command UP repeat=0 end begin prog=irexec button=CH- config=tvtime& config=tvtime-command DOWN repeat=0 end begin prog=irexec button=UP config=tvtime& config=tvtime-command UP repeat=0 end begin prog=irexec button=DOWN config=tvtime& config=tvtime-command DOWN repeat=0 end begin prog=irexec button=RIGHT config=tvtime& config=tvtime-command RIGHT repeat=0 end begin prog=irexec button=LEFT config=tvtime& config=tvtime-command LEFT repeat=0 end Содержимое /etc/lirc/lircd.conf: # Please make this file available to others # by sending it to <lirc> # # this config file was automatically generated # using lirc-0.8.2(dev/input) on Wed Feb 20 00:31:21 2008 # # contributed by # # brand: /etc/lirc/lircd.conf # model no. of remote control: # devices being controlled by this remote: # begin remote name /etc/lirc/lircd.conf bits 16 eps 30 aeps 100 one 0 0 zero 0 0 pre_data_bits 16 pre_data 0x8001 gap 135997 toggle_bit_mask 0x80010074 begin codes FUNCTION 0x0181 POWER 0x0074 1 0x0002 2 0x0003 3 0x0004 4 0x0005 5 0x0006 6 0x0007 7 0x0008 8 0x0009 9 0x000A 0 0x000B RECALL 0x0081 MENU 0x008B 100 0x019D INFO 0x0166 UP 0x0067 DOWN 0x006C RIGHT 0x006A LEFT 0x0069 OK 0x0160 TV-AV 0x0179 MODE 0x0175 AUDIO 0x0188 SLEEP 0x008E VOL+ 0x0073 VOL- 0x0072 MUTE 0x0071 CH+ 0x0192 CH- 0x0193 end codes end remote Содержимое /etc/lirc/hardware.conf: DRIVER="dev/input" DEVICE="/dev/input/event3" LIRCD_OPTIONS="-H dev/input -d /dev/input/event3" ENABLE_LIRCMD="no" LIRCMD_OPTIONS="" Кстати один прикол...Кнопка Power работает всегда с первого раза))) |
Автор: | Nick_L [ 21 фев 2008, 17:08 ] |
Заголовок сообщения: | |
no flame |
Автор: | Romosyto [ 21 фев 2008, 17:17 ] |
Заголовок сообщения: | |
Щас затестю))) Пасибки... А почему только на POWER ? Что это дает? |
Автор: | Nick_L [ 21 фев 2008, 17:22 ] |
Заголовок сообщения: | |
no flame |
Автор: | Romosyto [ 21 фев 2008, 17:27 ] |
Заголовок сообщения: | |
Понял! Спасибо...А то чето с этими конфигами вааще запутался...Т.е на одну кнопку можно назначить несколько команд? |
Страница 1 из 9 | Часовой пояс: UTC + 3 часа |