LINUX.ORG.RU

Траблы с пультом gotview(usb) и lirc


0

0

Купил (и черт меня дернул?) этот замечтательный пульт. Состояит из usb инфракрасника на проводке и собственно пульта. Думал будет удобней MPD с дивана рулить. Ага! 2 раза! В винде работает замечательно: распознается как HID клава и мышка, виндовые(!) _комбинации_ клавиш ловятся самой вендой все пашет, то что мне надо перелавливается Mkey и все в ажуре.

В линуксе все чуточку сложнее. Ну как HID устройство оно распозналось после первой перезагрузки (make bzImage...) emerge lirc прошел без ошибок. Скормил irrecord'у /dev/input/event0 (который HID) поклацал кнопочки. Получил конфиг. Запускаю lircd - стартует без ошибок. Запускаю irw, жму кнопочки... 3/4 кнопок генерят не 1 а 2-4 сканкода. Т.е. когда я жму например "music" я получаю нажатие 3-х кнопок вместо одной.

Как можно сказать лирцу, что это просто очень длинная (хмм..) кнопка? Или как представить нажатие нескольких кнопок, как одной специфической (F-117, F-119)?

Иксов на компьютере нет (соотв. кде, амарок, хммс, и иже с ними некатят) комп служит домашним гейтом, вот хочу его еще музыкальным центром пригрузить.

anonymous

Вобщем путем гугления, курения док от лирца и травы написал хаутушку. Админы - если хотите можите добавить это в Фак. А заодно в gentoo-wiki, и в сборники анекдотов.

Настройка пульта GoTView (USB) Пульт подключается в USB порт и распознается как HID устройство - клавиатура и мышь. Изначально пульт предназначался для работы в Windows, и соответственно посылал виндовые комбинации клавиш.

1) Ядро. В "Device Drivers"->"USB support" поставить галку напртив "USB Human Interface Device (full HID) support" А в "Device Drivers"-> "Input device support" - "Event interface" make bzImage modules modules_install install. Перегружаемся После перезагрузки из под рута делаем # cat /proc/bus/input/devices

I: Bus=0003 Vendor=0419 Product=0001 Version=0100 N: Name="Holtek Wheel Mouse" P: Phys=usb-0000:02:01.1-1/input0 S: Sysfs=/class/input/input2 H: Handlers=kbd mouse0 event1 B: EV=120007 B: KEY=c0000 400 0 0 7001f 0 18000 1e8 4000c004 e09effdf 1cfffff ffffffff fffffffe B: REL=103 B: LED=1f

Ага! Вот оно наше счастье. Нажимаем на пульте кнопочку "close"? оказываемся в 4-й консоли. Значит девайс работает нормально. Если сейчас запустить #showkey -s и понажимать кнопочки на пульте, то можно получить много всяких интересных сканкодов. Табличка получится примерно такая: keyboard main scancode power tv\dvr ALT+CTRL+SHIFT+2 50 print ALT+CTRL+SHIFT+H 72 close ALT+F4 music ALT+CTRL+SHIFT+3 51 pictures ALT+CTRL+SHIFT+4 52 videos ALT+CTRL+SHIFT+5 53 dvd\menu ALT+CTRL+SHIFT+1 49

up UP ARROW 38 down DOWN ARROW 40 left LEFT ARROW 37 right RIGHT ARROW 39 back BACKSPACE 8 OK ENTER 13 tab TAB 9 previews CTRL+B 66 play\pause CTRL+P 80 next CTRL+F 70 rew CTRL+SHIFT+B 66 stop CTRL+S 83 fwd CTRL+SHIFT+F 70 vol+ 175 vol- 174 home ALT+CTRL+SHIFT+HOME 36 ch+ PAGE UP 33 ch- PAGE DOWN 34 mute 173 rec CTRL+R 82 toggle 123 0…9 0 to 9 48…57 shuffle ALT+CTRL+SHIFT+F 70 repeat ALT+CTRL+SHIFT+B 66 (табличка взята с http://www.gotview.ru/board/viewtopic.php?t=2250&start=0&postdays=0&a... Там она приведена для Win, так что сканкоды не совпадают. Но нам нужны только комбинации клавиш, хотя их можно вычислить и эксперементально.)

anonymous
()
Ответ на: комментарий от anonymous

(Удалите плиз вторую мессагу!)
Вобщем путем гугления, курения док от лирца и травы написал хаутушку.
Админы - если хотите можите добавить это в Фак. А заодно в gentoo-wiki, и в сборники анекдотов. 

	Настройка пульта GoTView (USB)
Пульт подключается в USB порт и распознается как HID устройство - клавиатура и мышь. 
Изначально пульт предназначался для работы в Windows, и соответственно посылал 
виндовые комбинации клавиш. 

1)	Ядро. В "Device Drivers"->"USB support" поставить галку напртив "USB Human 
Interface Device (full HID) support" 
А в "Device Drivers"-> "Input device support" - "Event interface"
make bzImage modules modules_install install. Перегружаемся
После перезагрузки из под рута делаем
# cat /proc/bus/input/devices

I: Bus=0003 Vendor=0419 Product=0001 Version=0100
N: Name="Holtek Wheel Mouse"
P: Phys=usb-0000:02:01.1-1/input0
S: Sysfs=/class/input/input2
H: Handlers=kbd mouse0 event1
B: EV=120007
B: KEY=c0000 400 0 0 7001f 0 18000 1e8 4000c004 e09effdf 1cfffff ffffffff fffffffe
B: REL=103
B: LED=1f

Ага! Вот оно наше счастье. Нажимаем на пульте кнопочку "close"? оказываемся в 4-й 
консоли. Значит девайс работает нормально. Если сейчас запустить #showkey -s и 
понажимать кнопочки на пульте, то можно получить много всяких интересных сканкодов.
Табличка получится примерно такая:
            keyboard        main scancode 
power                  
tv\dvr         ALT+CTRL+SHIFT+2     50 
print          ALT+CTRL+SHIFT+H     72 
close          ALT+F4        
music          ALT+CTRL+SHIFT+3     51 
pictures       ALT+CTRL+SHIFT+4     52 
videos         ALT+CTRL+SHIFT+5     53 
dvd\menu       ALT+CTRL+SHIFT+1     49 

up         UP ARROW         38 
down           DOWN ARROW           40 
left           LEFT ARROW           37 
right          RIGHT ARROW          39 
                
back           BACKSPACE        8 
OK         ENTER            13 
                
tab        TAB              9 
previews       CTRL+B           66 
play\pause     CTRL+P           80 
next           CTRL+F           70 
rew        CTRL+SHIFT+B         66 
                
stop           CTRL+S           83 
fwd        CTRL+SHIFT+F         70 
vol+                        175 
vol-                        174 
home           ALT+CTRL+SHIFT+HOME  36 
ch+        PAGE UP          33 
ch-        PAGE DOWN        34 
mute                        173 
rec        CTRL+R           82 
toggle                      123 
0…9        0 to 9           48…57 
shuffle        ALT+CTRL+SHIFT+F     70 
repeat         ALT+CTRL+SHIFT+B     66
(табличка взята с 
http://www.gotview.ru/board/viewtopic.php?t=2250&start=0&postdays=0&
postorder=asc&highlight= 
Там она приведена для Win, так что сканкоды не совпадают. Но нам нужны только
комбинации клавиш, хотя их можно вычислить и эксперементально.)

anonymous
()
Ответ на: комментарий от anonymous

2) Установка и настройка lircd.
Скачиваем исходники лирца (lirc.org). Распаковываем, делаем 
./configure --with-driver=devinput
make 
make install
Лирц установлен. Теперь нам надо его настроить. Готового lircd.conf (коды 
кнопок пульта) на сайте нет. Значит будим делать его сами. Нам понадобится 
irrecord, который собственно и служит для создания конфигов. Запускаем его так:
irrecord -d /dev/input/event1 /etc/lircd.conf
Где /dev/input/event1 мы подсмотрели в /proc/bus/input/devices, а 
/etc/lircd.conf - наш будущий файл конфигурации.
Внимательно читаем ту белиберду что написана на экране, жмем Enter 
на Клаве. Жмем кнопочки на пульте. После определения gap (у меня почему 
то он определялся через раз) вводим на обычной клаве название нашей клавиши 
(как ее будут звать в конфиге). Для начала определим те клавиши которые генерят 
1 скан-код. Это: ok, back, up, down, left, right, tab, 0…9, ch+/-, vol+/-, mute, power. 
Получается что то вроде этого:
===
Please enter the name for the next button (press <ENTER> to finish recording)
OK
Now hold down button "OK".
irrecord: devinput_rec
irrecord: time 1149262589.359967  type 1  code 28  value 1
irrecord: code 8001001c
irrecord: devinput_decode
===
Где code 28 - это сканкод клавиши Enter (Можно убедится посмотрев свой файл 
раскладки. У меня это /usr/share/keymaps/i386/qwerty/ru4.map.gz. )А 8001001c - 
код инфракрасной кнопки - так как ее видит лирц. 
Думаю с добавлением этих кнопок в файл конфигурации думаю проблем не возникнет. 
Теперь перейдем к настройке клавиш генерящих несколько сканкодов. Например 
кнопочка play/pause (CTRL+P). Жмем Enter вместо имени очередной кнопки? Прерывая
тем самым процесс создания конфиг файла. Сохраняем полученый конфиг (на всякий
случай). Запускаем irrecord заново:
irrecord -d /dev/input/event1 lircov # 
lircov - просто временный файл. Нам он вообще ненужен, его потом можно удалить.
На запрос Hold down an arbitrary button жмем кнопочку play на пульте. 
Получается пот такая фигня:
===
irrecord: devinput_rec
irrecord: time 1149263380.461073  type 1  code 29  value 1
irrecord: code 8001001d
irrecord: devinput_rec
irrecord: time 1149263380.461090  type 1  code 25  value 1
irrecord: code 80010019
irrecord: devinput_rec
irrecord: time 1149263380.461095  type 0  code 0  value 0
irrecord: code 00000000
irrecord: devinput_rec
irrecord: time 1149263380.541070  type 1  code 29  value 0
irrecord: code 0001001d
irrecord: devinput_rec
irrecord: time 1149263380.541084  type 1  code 25  value 0
irrecord: code 00010019
irrecord: devinput_rec
irrecord: time 1149263380.541090  type 0  code 0  value 0
irrecord: code 00000000
===
Нажата кнопка со сканкодом 29, потом 25, потом пустой символ, отпущена 29, 
отпущена 25. Согласно /usr/share/keymaps/i386/qwerty/ru4.map.gz (это у меня 
такой файл раскладки, у вас он может быть и другой) клавиша со сканкодом 29 -
 Control, 25 - P.  Открываем наш файл lircd.conf для редактирования, в секцию
codes рядом с нашими клавишами добавляем:
[IR]CTRL	0x8001001D
[IR]_P	0x00010019
Опять запускаем irrecord, жмем следующую кнопку например tv/dvr(ALT+CTRL+SHIFT+2)
Получаем ее сканкоды, добавляем их в lircd.conf. Повторяем до тех пор пока 
не будут определены все кнопки на пульте.
Lircd.conf должен выглядеть примерно так:

anonymous
()
Ответ на: комментарий от anonymous

===

begin remote

  name  lircov
  bits           32
  eps        30
  aeps          100

  one         0     0
  zero        0     0
  gap          132631
  toggle_bit      0


      begin codes
        [IR]power           0x8001008E

        [IR]PageUP          0x80010068
        [IR]PageDown        0x8001006D
        [IR]CTRL            0x8001001D
        [IR]SHIFT           0x8001002a
        [IR]ALT             0x80010038

        [IR]HOME        0x00010066

        [IR]ENTER            0x8001001C
        [IR]TAB              0x8001000F
        [IR]F4  0x0001003e

        [IR]_H  0x00010023

        [IR]_P  0x00010019
        [IR]_S  0x0001001f
        [IR]_F  0x80010021
        [IR]_B  0x00010030
        [IR]_R  0x00010013

        [IR]NUM_1            0x80010002
        [IR]NUM_2            0x80010003
        [IR]NUM_3            0x80010004
        [IR]NUM_4            0x80010005
        [IR]NUM_5            0x80010006
        [IR]NUM_6            0x80010007
        [IR]NUM_7            0x80010008
        [IR]NUM_8            0x80010009
        [IR]NUM_9            0x8001000A
        [IR]NUM_0            0x8001000B
        [IR]BACK              0x00010073

      end codes
end remote
===

Теперь запускаем lircd:
lircd -d /dev/input/event1 /etc/lircd.conf
И ничего не происходит. Принажатии кнопки плей плеер музыrу не играет. 
Небеспокойтесь, счас все будит хорошо. Совсем. Всем.
Сначала проверим как работают наши кнопочки. Запускаем irw - программка 
которая читает вывод с lircd и кидает его в stdout. После запуска жмем кнопочки:
===
#irw
000000008001001d 00 [IR]CTRL lircov
0000000080010021 00 [IR]_F lircov
000000008001001d 00 [IR]CTRL lircov
0000000000010019 00 [IR]_P lircov
0000000080010004 00 [IR]NUM_3 lircov
0000000080010003 00 [IR]NUM_2 lircov
0000000080010002 00 [IR]NUM_1 lircov
===

anonymous
()
Ответ на: комментарий от anonymous

Так, кнопочки нажимаются. Теперь надо настроить демоненка, который будит ловить нажатия кнопок на пульте, и выполнять соответствующие действия. Идет в комплекте с lircd интересная программка irexec. Ее файл настроек называется .lircrc и лежит в ~/. Формат файла такой:

begin имя-режима begin ... end ... end имя-режима Внутри блока могут быть использованы следующие директивы: " prog = имя клиентской программы, к которой относится данный блок " remote = имя приемника (по умолчанию - *, т.е. любой) " button = имя клавиши " repeat = что делать, если клавиша нажата несколько раз (0 - игнорировать повторы, иначе учитывать каждое n-е нажатие) " config = строка, передаваемая приложению (если задано несколько директив config, то значение каждой строки передается приложению по очереди; непечатные символы записываются как в C - \n или \xFF) Причем что очень важно для нас в одной секции можно указать несколько button. Вот вполне рабочий кусок файла: === begin prog = irexec button = [IR]CTRL button = [IR]_P config = mpc toggle& > /dev/null flags = mode end ===

Программа irexec Принажатии Ctrl+P (play на пульте) должна запустить mpc toggle& > /dev/null

mpc - это консольный командный клиент для MusicPlayerDaemon которым я пользуюсь, параметр toggle для него как раз и означает play/pause. Если нам нужно указать вторую кнопку - добавляем в файл еще один begin &#8230; end и так 41 раз (на пульте gotview 41 кнопка)

Когда запущен один lircd стандартные сочетания клавиш работают (по кнопочке close(Alt+F4) попадаем в 4-ю консоль), но когда запущен irw или irexec lircd захватывает /dev/input/eventX и стандартные комбинации перестают работать.

P.S. Сий документ написал Гончаров Николай(fenist). Я не несу ответственности если вы пытаясь настроить свой пульт по этой хау-тушке взорвете местную АЭС! Если кому надо - распостраняйте под GPL. Одним куском постится незахотело, пришлось порезать.

anonymous
()
Ответ на: комментарий от anonymous

Так, кнопочки нажимаются. Теперь надо настроить демоненка, который будит
 ловить нажатия кнопок на пульте, и выполнять соответствующие действия. 
Идет в комплекте с lircd интересная программка irexec. Ее файл настроек 
называется .lircrc и лежит в ~/. Формат файла такой: 

begin имя-режима
  begin
    ...
  end
  ...
end имя-режима
Внутри блока могут быть использованы следующие директивы: 
"	prog = имя клиентской программы, к которой относится данный блок
"	remote = имя приемника (по умолчанию - *, т.е. любой)
"	button = имя клавиши
"	repeat = что делать, если клавиша нажата несколько раз (0 - игнорировать
 повторы, иначе учитывать каждое n-е нажатие)
"	config = строка, передаваемая приложению (если задано несколько директив
 config, то значение каждой строки передается приложению по очереди; непечатные
 символы записываются как в C - \n или \xFF)
Причем что очень важно для нас в одной секции можно указать несколько button.
Вот вполне рабочий кусок файла:
===
begin
        prog = irexec
        button = [IR]CTRL
        button = [IR]_P
        config = mpc toggle& > /dev/null
        flags = mode
end
===

Программа irexec
Принажатии Ctrl+P (play на пульте) должна запустить mpc toggle& > /dev/null

mpc - это консольный командный клиент для MusicPlayerDaemon которым я пользуюсь,
 параметр toggle для него как раз и означает play/pause.
Если нам нужно указать вторую кнопку - добавляем в файл еще один begin &#8230; end и
 так 41 раз (на пульте gotview 41 кнопка)

Когда запущен один lircd стандартные сочетания клавиш работают (по кнопочке 
close(Alt+F4) попадаем в 4-ю консоль), но когда запущен irw или irexec lircd
 захватывает /dev/input/eventX и стандартные комбинации перестают работать.

P.S. Сий документ написал Гончаров Николай(fenist). Я не несу ответственности если
вы пытаясь настроить свой пульт по этой хау-тушке взорвете местную АЭС! Если кому надо - распостраняйте под GPL.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.