Форум 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 часа