Como instalar o controle remoto PixelView PlayTV Pro no Linux

Foto www.bttv-gallery.dePassei 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.

Bibliografia

About José Antonio Meira da Rocha

Jornalista, professor das áreas de Editoração e de Mídias Digitais na Universidade Federal de Santa Maria, campus cidade de Frederico Westphalen, Rio Grande do Sul, Brasil. Doutor em Design pelo Programa de Pós-Graduação em Design (PGDesign)/Universidade Federal do Rio Grande do Sul (UFRGS), Porto Alegre, Brasil, 2023. Mestre em Mídias pela UNISINOS, São Leopoldo, RS, Brasil, 2003. Especialista em Informática na Educação, Unisinos, 1976.