Passei anos sem conseguir configurar o controle remoto infravermelho (IR) da placa de TV Prolink PixelView PlayTV Pro no meu GNU/Linux Ubuntu, até que descobri qual era o problema, pesquisando muito pelo Google e usando muita intuição. E com a ajuda dos novos drivers de multimídia desenvolvidos pelo professor brasileiro Mauro Carvalho Chehab .
Editei o arquivo de configurações do módulo Linux bttv:
$ sudo gedit /etc/modprobe.d/bttv.conf
Deixei-o com o seguinte conteúdo:
# i2c alias char-major-89 i2c-devb options i2c-algo-bit bit_test=1 # bttv alias char-major-81 bttv # TV Card Prolink PlayTV Pro options bttv card=139 gpiomask=255 tuner=2 radio=1 adc_crush=0 combfilter=1 full_luma_range=0 gbuffers=32
O truque é dizer que a placa de TV é PlayTV PV-M4900 (placa 139) em vez da Pro revisão 9F (placa 37), como seria o normal. Com isto, o chip receptor de infravermelho Jaesc IRDC357-M é reconhecido pelo módulo (driver) bttv.
Com este ajuste, o log dmesg do Ubuntu reportou:
[22.667341] bttv: driver version 0.9.18 loaded [22.667345] bttv: using 32 buffers with 2080k (520 pages) each for capture [22.667843] bttv: Bt8xx card found (0). [22.667860] bttv 0000:04:02.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [22.667871] bttv0: Bt878 (rev 17) at 0000:04:02.0, irq: 18, latency: 64, mmio: 0xf8ffe000 [22.667980] bttv0: using: Prolink PixelView PlayTV MPEG2 PV-M4900 [card=139,insmod option] [22.668008] bttv0: gpio: en=00000000, out=00000000 in=00ffc0ff [init] [22.668051] bt878 #0 [sw]: Test OK [22.668142] bttv0: tuner type=2 [22.733875] bttv0: audio absent, no audio device found! [22.743357] tuner 0-0061: chip found @ 0xc2 (bt878 #0 [sw]) [22.746928] tuner-simple 0-0061: creating new instance [22.746932] tuner-simple 0-0061: type set to 2 (Philips NTSC (FI1236,FM1236 and compatibles)) [22.747631] bttv0: registered device video0 [22.747658] bttv0: registered device vbi0 [22.747682] bttv0: registered device radio0 [22.747703] bttv0: PLL: 28636363 => 35468950 .. ok [22.751948] Registered IR keymap rc-pixelview [22.752643] input: bttv IR (card=139) as /devices/pci0000:00/0000:00:1e.0/0000:04:02.0/rc/rc0/input4 [22.752753] rc0: bttv IR (card=139) as /devices/pci0000:00/0000:00:1e.0/0000:04:02.0/rc/rc0
Escolhi esta placa específica depois de analisar o código do módulo bttv e verificar que os parâmetros das placas são muito parecidas, mas a PV-M4900 está configurada como tendo controle remoto, e a Pro, não. Necessitei fazer apenas um ajuste em gpiomask:
/* ---- card 0x25 ---------------------------------- */ 894 [BTTV_BOARD_PXELVWPLTVPRO] = { 909 .name = "Prolink PixelView PlayTV pro", 910 .video_inputs = 3, 911 /* .audio_inputs= 1, */ 912 .svhs = 2, 913 .gpiomask = 0xff, 914 .muxsel = MUXSEL(2, 3, 1, 1), 915 .gpiomux = { 0x21, 0x20, 0x24, 0x2c }, 916 .gpiomute = 0x29, 917 .no_msp34xx = 1, 918 .pll = PLL_28, 919 .tuner_type = UNSET, 920 .tuner_addr = ADDR_UNSET, 921 }, 922 /* ---- card 0x8b ---------------------------------- */ 2557 [BTTV_BOARD_PV_M4900] = { 2558 /* Sérgio Fortier */ 2559 .name = "Prolink PixelView PlayTV MPEG2 PV-M4900", 2560 .video_inputs = 3, 2561 /* .audio_inputs= 1, */ 2562 .svhs = 2, 2563 .gpiomask = 0x3f, 2564 .muxsel = MUXSEL(2, 3, 1, 1), 2565 .gpiomux = { 0x21, 0x20, 0x24, 0x2c }, 2566 .gpiomute = 0x29, 2567 .no_msp34xx = 1, 2568 .pll = PLL_28, 2569 .tuner_type = TUNER_YMEC_TVF_5533MF, 2570 .tuner_addr = ADDR_UNSET, 2571 .has_radio = 1, 2572 .has_remote = 1, 2573 },
O comando “sudo cat /proc/bus/input/devices” reportou o seguinte dispositivo de entrada de dados:
I: Bus=0001 Vendor=109e Product=036e Version=0001 N: Name="bttv IR (card=139)" P: Phys=pci-0000:04:02.0/ir0 S: Sysfs=/devices/pci0000:00/0000:00:1e.0/0000:04:02.0/rc/rc0/input4 U: Uniq= H: Handlers=kbd event4 B: PROP=0 B: EV=100013 B: KEY=2c0814 10000400000000 0 402008000 209000002001 1e000000004400 ffc B: MSC=10
Isto significa que o controle remoto PixelView PlayTV Pro é tratado como um teclado.
No terminal, usei o seguinte comando para instalar um testador de eventos:
$ sudo apt-get install evtest
Depois, testei os eventos de entrada de dados:
$ sudo evtest /dev/input/event4
O resultado foi este:
Input driver version is 1.0.1 Input device ID: bus 0x1 vendor 0x109e product 0x36e version 0x1 Input device name: "bttv IR (card=139)" Supported events: Event type 0 (Sync) Event type 1 (Key) Event code 2 (1) Event code 3 (2) Event code 4 (3) Event code 5 (4) Event code 6 (5) Event code 7 (6) Event code 8 (7) Event code 9 (8) Event code 10 (9) Event code 11 (0) Event code 74 (KPMinus) Event code 78 (KPPlus) Event code 113 (Mute) Event code 114 (VolumeDown) Event code 115 (VolumeUp) Event code 116 (Power) Event code 128 (Stop) Event code 141 (Setup) Event code 164 (PlayPause) Event code 167 (Record) Event code 173 (Refresh) Event code 207 (Play) Event code 217 (Search) Event code 226 (Media) Event code 354 (Goto) Event code 372 (Zoom) Event code 386 (Tuner) Event code 388 (Text) Event code 395 (List) Event code 402 (ChannelUp) Event code 403 (ChannelDown) Event code 405 (Last) Event type 20 (Repeat) Testing ... (interrupt to exit)
A partir daí, cada tecla apertada no controle remoto emite códigos. Por exemplo:
Event: time 1289797500.456346, type 1 (Key), code 115 (VolumeUp), value 1 Event: time 1289797500.456350, -------------- Report Sync ------------ Event: time 1289797500.560340, type 1 (Key), code 115 (VolumeUp), value 0 Event: time 1289797500.560343, -------------- Report Sync ------------ Event: time 1289797506.124351, type 1 (Key), code 114 (VolumeDown), value 1 Event: time 1289797506.124356, -------------- Report Sync ------------ Event: time 1289797506.178175, type 1 (Key), code 114 (VolumeDown), value 0 Event: time 1289797506.178180, -------------- Report Sync ------------
Neste ponto, o sistema Gnome já responde às teclas de atalho. O botão de desligar do controle remoto PixelView funciona como o botão de desligar o PC, o botão Scan chama o media player default, o botão Zoom chama o programa de procura de arquivos.
Interrompi o teste com CTRL+C e instalei o LIRC, o Linux Infrared Remote Control (LIRC) , conforme recomenda um post no fórum Ubuntu:
$ sudo apt-get install lirc
Se já estiver instalado, o LIRC pode ser reconfigurado:
$ sudo dpkg-reconfigure lirc
Na primeira tela de configuração, em vez de escolher placa PixelView PlayTV Pro, escolhi “Linux input layer (/dev/input/eventX)”.
Na segunda tela, escolhi “None” porque não tenho emissor de infravermelho ligado ao computador. Na terceira tela, “Custom event interface”, escolhi “/dev/input/by-path/pci-0000:04:02.0-event-ir“, conforme as informações devolvidas por “sudo cat /proc/bus/input/devices”:
S: Sysfs=/devices/pci0000:00/0000:00:1e.0/0000:04:02.0/rc/rc0/input4
No final da configuração, apareceu a mensagem de que tudo estava OK:
* Loading LIRC modules [ OK ] * Starting remote control daemon(s) : LIRC [ OK ]
O trecho que interessa do arquivo /etc/lirc/hardware.conf ficou assim:
#Chosen Remote Control REMOTE="Linux input layer (/dev/input/eventX)" REMOTE_MODULES="" REMOTE_DRIVER="devinput" REMOTE_DEVICE="/dev/input/by-path/pci-0000:04:02.0-event-ir" REMOTE_SOCKET="" REMOTE_LIRCD_CONF="devinput/lircd.conf.devinput" REMOTE_LIRCD_ARGS="" #Chosen IR Transmitter TRANSMITTER="None" TRANSMITTER_MODULES="" TRANSMITTER_DRIVER="" TRANSMITTER_DEVICE="" TRANSMITTER_SOCKET="" TRANSMITTER_LIRCD_CONF="" TRANSMITTER_LIRCD_ARGS=""
O controle pode ser testado com:
$ irw
Que resulta, a cada tecla apertada:
0000000080010002 00 KEY_1 devinput 0000000080010003 00 KEY_2 devinput 0000000080010004 00 KEY_3 devinput 0000000080010192 00 KEY_CHANNELUP devinput 0000000080010193 00 KEY_CHANNELDOWN devinput
As teclas de volume e canal estavam trocadas no transmissor do controle remoto, provavelmente mapeadas pelo módulo do kernel bttv. Configurei as corretas, no LIRC, pelo arquivo /usr/share/lirc/remotes/devinput/lircd.conf.devinput (tive que trocar em duas tabelas diferentes):
KEY_CHANNELDOWN 114 KEY_CHANNELUP 115 KEY_VOLUMEDOWN 0x193 KEY_VOLUMEUP 0x192
Agora só falta configurar os programas compatíveis com LIRC.
Leave a Reply