Текущее время: 25 июн 2018, 14:40 • Часовой пояс: UTC + 3 часа
Сообщения без ответов | Активные темы

Работа пульта ДУ в разных программах

Начать новую темуОтветить на тему Страница 1 из 9 [ Сообщений: 123 ] На страницу   1, 2, 3, 4, 5 ... 9  След.
Версия для печати Пред. тема | След. тема
АвторСообщение
Сообщение Добавлено: 09 янв 2008, 03:23. Заголовок сообщения:  Работа пульта ДУ в разных программах
Эксперт
Зарегистрирован:
    09 апр 2007, 12:50
Сообщения: 135
Коротко - все работает. И работает правильно.

Прочитайте ниже вот.

Пульт видится системой как обычное устройство ввода /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 и нажимайте кнопки.
Beholder M6 и H6, Linux Debian/Ubuntu
Последний раз редактировалось igk72 03 дек 2009, 04:01, всего редактировалось 3 раз(а).
Профиль ICQ 
Сообщение Добавлено: 09 янв 2008, 19:31. Заголовок сообщения:  Re: Работа кнопок пульта в разных программах
Зарегистрирован:
    09 янв 2008, 19:11
Сообщения: 19
no flame
Последний раз редактировалось Nick_L 16 авг 2008, 23:23, всего редактировалось 1 раз.
Профиль 
Сообщение Добавлено: 09 янв 2008, 20:11. Заголовок сообщения:  Re: Работа кнопок пульта в разных программах
Зарегистрирован:
    09 янв 2008, 19:11
Сообщения: 19
no flame
Последний раз редактировалось Nick_L 16 авг 2008, 23:24, всего редактировалось 1 раз.
Профиль 
Сообщение Добавлено: 09 янв 2008, 20:47. Заголовок сообщения:  Re: Работа кнопок пульта в разных программах
Зарегистрирован:
    09 янв 2008, 19:11
Сообщения: 19
no flame
Последний раз редактировалось Nick_L 16 авг 2008, 23:24, всего редактировалось 1 раз.
Профиль 
Сообщение Добавлено: 20 фев 2008, 21:03. Заголовок сообщения: 
Зарегистрирован:
    03 фев 2008, 23:41
Сообщения: 9
Откуда: Днепропетровск
Здравствуйте! Вот прикрутил себе на 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)
Опыт это то, что получаешь, не получив того что хотел...
Профиль 
Сообщение Добавлено: 21 фев 2008, 11:20. Заголовок сообщения: 
Зарегистрирован:
    09 янв 2008, 19:11
Сообщения: 19
no flame
Последний раз редактировалось Nick_L 16 авг 2008, 23:24, всего редактировалось 1 раз.
Профиль 
Сообщение Добавлено: 21 фев 2008, 13:00. Заголовок сообщения: 
Зарегистрирован:
    03 фев 2008, 23:41
Сообщения: 9
Откуда: Днепропетровск
Спасибо, автозагрузка заработала, но нажимать кнопки приходится все равно по 2 раза(( Может это связано с тем, что передача кода идет сначала к Lirc, потом к irexec и только потом к tvtime ???
Не знаю че я перемудрил( Могу выложить содержимое файлов чтоб разобраться
Опыт это то, что получаешь, не получив того что хотел...
Профиль 
Сообщение Добавлено: 21 фев 2008, 13:57. Заголовок сообщения: 
Эксперт
Зарегистрирован:
    09 апр 2007, 12:50
Сообщения: 135
писал(а):
Спасибо, автозагрузка заработала, но нажимать кнопки приходится все равно по 2 раза
Если не загружать ничего кроме lircd - то при запуске irw кнопки один сразу срабатывают???
Или как?
Beholder M6 и H6, Linux Debian/Ubuntu
Профиль ICQ 
Сообщение Добавлено: 21 фев 2008, 14:31. Заголовок сообщения: 
Зарегистрирован:
    03 фев 2008, 23:41
Сообщения: 9
Откуда: Днепропетровск
Ну когда я запускаю и lirc и irexec и irw то в логах отображается каждое нажатие кнопки. Вот клацаю Громкость+ первый раз - отображается код и название кнопки, но tvtime 0 реакции, нажимаю кнопку второй раз - опять отображается код и название и tvtime уже раздупляется
Опыт это то, что получаешь, не получив того что хотел...
Профиль 
Сообщение Добавлено: 21 фев 2008, 14:58. Заголовок сообщения: 
Зарегистрирован:
    09 янв 2008, 19:11
Сообщения: 19
no flame
Последний раз редактировалось Nick_L 16 авг 2008, 23:25, всего редактировалось 1 раз.
Профиль 
Сообщение Добавлено: 21 фев 2008, 15:29. Заголовок сообщения: 
Зарегистрирован:
    03 фев 2008, 23:41
Сообщения: 9
Откуда: Днепропетровск
Содержимое .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 работает всегда с первого раза)))
Опыт это то, что получаешь, не получив того что хотел...
Профиль 
Сообщение Добавлено: 21 фев 2008, 17:08. Заголовок сообщения: 
Зарегистрирован:
    09 янв 2008, 19:11
Сообщения: 19
no flame
Последний раз редактировалось Nick_L 16 авг 2008, 23:25, всего редактировалось 1 раз.
Профиль 
Сообщение Добавлено: 21 фев 2008, 17:17. Заголовок сообщения: 
Зарегистрирован:
    03 фев 2008, 23:41
Сообщения: 9
Откуда: Днепропетровск
Щас затестю))) Пасибки...
А почему только на POWER ? Что это дает?
Опыт это то, что получаешь, не получив того что хотел...
Профиль 
Сообщение Добавлено: 21 фев 2008, 17:22. Заголовок сообщения: 
Зарегистрирован:
    09 янв 2008, 19:11
Сообщения: 19
no flame
Последний раз редактировалось Nick_L 16 авг 2008, 23:26, всего редактировалось 1 раз.
Профиль 
Сообщение Добавлено: 21 фев 2008, 17:27. Заголовок сообщения: 
Зарегистрирован:
    03 фев 2008, 23:41
Сообщения: 9
Откуда: Днепропетровск
Понял! Спасибо...А то чето с этими конфигами вааще запутался...Т.е на одну кнопку можно назначить несколько команд?
Опыт это то, что получаешь, не получив того что хотел...
Профиль 
Показать сообщения за:  Поле сортировки:    
Начать новую темуОтветить на тему  Страница 1 из 9  [ Сообщений: 123 ]  На страницу   1, 2, 3, 4, 5 ... 9  След.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения
Найти:  
Перейти:  
cron