Настройка пульта ДУ к тюнеру

Материал из ALT Linux Wiki

Настройка пульта ДУ к тюнеру Xpert TV-PVR Vstream Kworld

Особая благодарность за живое участие в настройке данного тюнера выражается Алексею Шенцеву, без помощи которого пульт не работал бы и по сей день, не говоря уже о появлении этой страницы. А также Михаилу Шигорину за настройку эмуляции oss.

  Данный тюнер был прописан в  /etc/modprobe.d/tv как card=78 tuner=17 radio=1. 

При таких параметрах работало видео и радио. Но не работал пульт ДУ. Даже никаких упоминаний о нем в выводе dmesg | grep bttv не было. Согласно ссылке http://aturov.blogspot.com/2009/02/2.html установлены исходники ядра (пакет kernel-source-2.6.30 в данном случае версия согласно текущего используемого ядра). Из файла /usr/src/kernel/sources/kernel-source-твоё_ядро_/Documentation/video4linux/CARDLIST.bttv взяты названия тюнеров содержащие в описании параметр has_remote = 1.

  После этого ищем номер тв-тюнера в файле CARDLIST.bttv из /usr/share/doc/kernel-doc-std-2.6.30/video4linux
  
  Далее путем перебора:
  #modprobe bttv card=xx (xx — номер тв тюнера)
  #dmesg | grep bttv (смотрим сообщения ядра на предмет IR)

если нет — значит:

  #rmmod bttv

и операция повторяется снова. В данном конктретном случае подошел номер карты указанный по приведенной выше ссылке, то есть card=120.

  dmesg | grep bttv
  [ 8.060770] bttv: driver version 0.9.18 loaded
  [ 8.060777] bttv: using 8 buffers with 2080k (520 pages) each for capture
  [ 8.060830] bttv: Bt8xx card found (0).
  [ 8.075958] bttv 0000:02:07.0: PCI INT A -> Link[LNKB] -> GSI 19 (level, low) -> IRQ 19
  [ 8.075972] bttv0: Bt878 (rev 17) at 0000:02:07.0, irq: 19, latency: 64, mmio: 0xea8fe000
  [ 8.076403] bttv0: using: Conceptronic CONTVFMi [card=120,insmod option]
  [ 8.076406] IRQ 19/bttv0: IRQF_DISABLED is not guaranteed on shared IRQs
  [ 8.076442] bttv0: gpio: en=00000000, out=00000000 in=003fffff [init]
  [ 8.076485] bttv0: tuner type=5
  [ 8.260789] bttv0: audio absent, no audio device found!
  [ 8.261009] bttv0: registered device video0
  [ 8.261046] bttv0: registered device vbi0
  [ 8.261083] bttv0: registered device radio0
  [ 8.261103] bttv0: PLL: 28636363 => 35468950 .. ok
  [ 8.292722] input: bttv IR (card=120) as           
  /devices/pci0000:00/0000:00:0e.0/0000:02:07.0/input/input5

# ls -l /dev/input/*

  crw-r----- 1 root root 13, 64 Dec 11 2010 /dev/input/event0
  crw-r----- 1 root root 13, 65 Dec 11 2010 /dev/input/event1
  crw-r----- 1 root root 13, 66 Dec 11 2010 /dev/input/event2
  crw-r----- 1 root root 13, 67 Dec 11 2010 /dev/input/event3
  crw-r----- 1 root root 13, 68 Dec 11 2010 /dev/input/event4
  crw-rw-r-- 1 root video 13, 69 Dec 11 2010 /dev/input/event5
  crw-r----- 1 root root 13, 70 Dec 11 2010 /dev/input/event6
  crw-r----- 1 root root 13, 63 Dec 11 2010 /dev/input/mice
  crw-r----- 1 root root 13, 32 Dec 11 2010 /dev/input/mouse0
  crw-r----- 1 root root 13, 33 Dec 11 2010 /dev/input/mouse1
  /dev/input/by-id:
  total 0
  lrwxrwxrwx 1 root root 9 Dec 11 2010 usb-A4Tech_USB_Optical_Mouse-event-mouse -> ../event6
  lrwxrwxrwx 1 root root 9 Dec 11 2010 usb-A4Tech_USB_Optical_Mouse-mouse -> ../mouse1
  /dev/input/by-path:
  total 0
  lrwxrwxrwx 1 root root 9 Dec 11 2010 pci-0000:00:02.0-usb-0:2:1.0-event-mouse -> ../event6
  lrwxrwxrwx 1 root root 9 Dec 11 2010 pci-0000:00:02.0-usb-0:2:1.0-mouse -> ../mouse1
  lrwxrwxrwx 1 root root 9 Dec 11 2010 pci-0000:02:07.0-event-ir -> ../event5
  lrwxrwxrwx 1 root root 9 Dec 11 2010 platform-i8042-serio-0-event-kbd -> ../event1
  lrwxrwxrwx 1 root root 9 Dec 11 2010 platform-pcspkr-event-spkr -> ../event2


Теперь пишем в /etc/sysconfig/lircd такое:

  OPT="--driver=devinput --device /dev/input/by-path/pci-0000:02:07.0-event-ir"

Подразумевается, что lirc уже установлен в системе.

Далее

# service lircd restart

После чего

cat /dev/input/by-path/pci-0000:02:07.0-event-ir

и нажимаем кнопки на пульте — должен появится вывод символов в консоль при нажатии. Если рекация на нажатия есть, значит нужно правильно сконфигурировать /etc/lircd.conf Примерно подходящий можно взять отсюда http://ru.gentoo-wiki.com/wiki/HOWTO_lirc или создать самому с помощью irrecord.

# irrecord -n -H dev/input -d /dev/input/event5 /etc/lircd.conf

Нужно будет нажать и удерживать любую клавишу на пульте, например power. В консоли будут появляться точки. Затем будет предложено ввести имя кнопки и нажать enter после чего нажать соответствующую кнопку на пульте и снова enter. И т. д. пока не будут записаны все клавиши. После записи последней снова нажимаем enter и конфиг записан. Для ДУ к данному тюнеру имеем следующий lirc.conf

begin remote
 name  /etc/lircd.conf
 bits           16
 eps            30
 aeps          100
 one             0     0
 zero            0     0
 pre_data_bits   16
 pre_data       0x8001
 gap          51991
 toggle_bit_mask 0x0
     begin codes
         POWER                    0x0074
         SOURCE                   0x00E2
         SCAN                     0x00D9
         MUTE                     0x0071
         TV_FM                    0x0182
         1                        0x0002
         2                        0x0003
         3                        0x0004
         4                        0x0005
         5                        0x0006
         6                        0x0007
         7                        0x0008
         8                        0x0009
         9                        0x000A
         0                        0x000B
         +                        0x0195
         RECALL                   0x018B
         FM_FREQ_UP               0x004E
         FM_FREQ_DOWN             0x004A
         RECORD                   0x00A7
         STOP                     0x0080
         PLAY                     0x00CF
         MINIMIZE                 0x0184
         ZOOM                     0x0174
         CH_UP                    0x0192
         CH_DOWN                  0x0193
         VOL_DOWN                 0x0072
         VOL_UP                   0x0073
         SNAPSHOT                 0x00A4
         MTS                      0x0162
         FUNCTION_LEFT            0x004A
         FUNCTION                 0x008D
         FUNCTION_RIGHT           0x004E
         RESET                    0x00AD
     end codes
 end remote

ПРИ КОПИПАСТЕ ВОЗМОЖНЫ ОШИБКИ.

Перезапускаем lilrcd и запускаем irw после чего жмем кнопки на пульте и смотрим вывод в консоли. Если все правильно сделано, Вы увидите те название нажимаемых кнопок которые вводили при записи с помощью irrecord и соответстующие им коды.

# irw

0000000080010192 00 CH_UP /etc/lircd.conf
0000000080010072 00 VOL_DOWN /etc/lircd.conf
0000000080010193 00 CH_DOWN /etc/lircd.conf
0000000080010006 00 5 /etc/lircd.conf

Далее нужно создать файл /etc/.lircrc Например такой:

begin
   prog = irexec
   button = SCAN
   config = tvtime --device=/dev/video0 --vbidevice=/dev/vbi0 --mixer=/dev/mixer:vol &
   mode = tvtime
end
begin
   prog = irexec
   button = ZOOM
   config = tvtime-command TOGGLE_FULLSCREEN
   end
begin
       prog = irexec
       button = CH_UP
       config = tvtime-command UP
      repeat = 1
end
begin
   prog = irexec
   button = CH_DOWN
   config = tvtime-command DOWN
   repeat = 1
end
begin
   prog = irexec
   button = VOL_UP
   config = tvtime-command RIGHT
   repeat = 2
end
begin
   prog = irexec
   button = VOL_DOWN
   config = tvtime-command LEFT
   repeat = 2
end
begin
   prog = irexec
   button = MUTE
   config = tvtime-command TOGGLE_MUTE
end
begin
   prog  = irexec
   button = 1
   config = tvtime-command CHANNEL_1
end
begin
   prog   = irexec
   button = 2
   config = tvtime-command CHANNEL_2
end
begin
   prog   = irexec
   button = 3
   config = tvtime-command CHANNEL_3
end                                                                                 
begin
   prog = irexec
   button = RESET
   config = tvtime-command QUIT
end
# EOF

ПРИ КОПИПАСТЕ ВОЗМОЖНЫ ОШИБКИ.

Добавить нужного пользователя в группу lirc. Запустить irexec. Для старта irexec при запуске системы добавить следующие строки в ~/.bash_profile

killall irexec
irexec -d ~/.lircrc

Далее пергружаем машину:

# reboot

После запуска наслаждаемся работой пулта ДУ.

Если в TVTime не регулируется звук через пульт, нужно сделать эмуляцию OSS в ALSA.

Создать файл:

cat /etc/modprobe.d/oss

alias sound_slot_0 snd_card_0
alias sound_service_0_0 snd-mixer-oss
alias sound_service_0_1 snd-seq-oss
alias sound_service_0_3 snd-pcm-oss
alias sound_service_0_8 snd-seq-oss
alias sound_service_0_12 snd-pcm-oss

install snd-pcm /sbin/modprobe --first-time --ignore-install snd-pcm && { /sbin/modprobe snd-pcm-oss; /bin/true; }
install snd-pcm-oss /sbin/modprobe --first-time --ignore-install snd-pcm-oss && { /sbin/modprobe snd-seq-oss; /bin/true; }

После перезагрузки должны появиться устройства:

# ls -l /dev/mix*

crw-rw----+ 1 samuray audio 14, 0 Dec 11 2010 /dev/mixer
crw-rw----+ 1 samuray audio 14, 16 Dec 11 2010 /dev/mixer1