salta alla navigazione

Schede Tv modulo SAA7134 + lirc + Linux kernel 2.6.x 16 dicembre 2006 - 0:30

Inviato da Antonio De Luci (imu) in : Debian, Guide, Kernel, Linux, Lirc, O.S. Revolution , trackback

telecomando linux

Aggiornamento di una mia guida di qualche tempo fa, ancora funzionante, per schede tv con chip SAA7134, testata su Terratec Cinergy 600/400 , FlyTv Platinum FM 35,Pinnacle PCTV 110i.

I kernel di default installati con le varie distro in circolazione, Debian, Ubuntu per citarne due dovrebbero funzionare senza toccare nulla, se qualcuno ama rifarselo adesso gli dico le opzioni da settare per avere tutto funzionante:

Impostazioni del kernel :

Linux Kernel Configuration -> Device Drivers --->

Multimedia devices --->

<M> Video For Linux
[*]   Enable Video For Linux API 1 compatible Layer

Video Capture Adapters --->

[*] Autoselect pertinent encoders/decoders and other helper chips
<M> Philips SAA7134 support
<M>  Philips SAA7134 DMA audio support

I2C support --->

 I2C support
   I2C device interface

Input device support --->

[*] Event interface
---   Input Device Drivers

Controllo dopo l’avvio del sistema

$ dmesg | grep saa

saa7130/34: v4l2 driver version 0.2.14 loaded
found at 0000:02:06.0, rev: 240, irq: 16, latency: 32, mmio: 0xf3025000
subsystem: 5168:0214, board: LifeView FlyTV Platinum FM / Gold [card=54,autodetected]
board init: gpio is 31400
input: saa7134 IR (LifeView FlyTV Plat as /class/input/input2
i2c eeprom 00: 68 51 14 02 10 28 ff ff ff ff ff ff ff ff ff ff
i2c eeprom 10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
i2c eeprom 20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
i2c eeprom 30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
i2c eeprom 40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
i2c eeprom 50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
i2c eeprom 60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
i2c eeprom 70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
tuner 0-004b: chip found @ 0x96 (saa7133[0])
saa7133[0]: registered device video0 [v4l2]
saa7133[0]: registered device vbi0
saa7133[0]: registered device radio0

ed anche

saa7134 ALSA driver for DMA sound loaded
saa7133[0]/alsa: saa7133[0] at 0xf3025000 irq 16 registered as card -1

ed anche

$ lspci | grep -i saa
02:06.0 Multimedia controller: Philips Semiconductors SAA7133/SAA7135 Video Broadcast Decoder (rev f0)

Se non avete queste cose magari provate a dare in un terminale :

$ sudo modprobe saa7134 saa7134-alsa

e aggiungeteli in /etc/modules per avviarli all’avvio del sistema.

A questo punto installiamo qualche programma tv :

$ sudo apt-get install tvtime

Seguite la procedura di configurazione di debconf,vi elenco le risposte in ordine per l’Italia:

Configurazione in corso di tvtime

  1. PAL
  2. Europe
  3. /dev/video0
  4. /dev/vbi0
  5. yes
  6. -10

Adesso per vedere la tv aprite tvtime e dal menu che esce con il click destro trovate la voce channel management-> scan channels for signal, fatelo finire e riavviare tvtime, adesso potete vedere la tv:

tvtime

tvtime

tvtime

Purtroppo senza cavetto audio non si sente una mazza , qui sfruttiamo il modulo saa7134-alsa, innanzitutto aprite il mixer ( per chi ha gnome cliccate due volte sull’icona del volume), poi date:

file -> Cambia Dispositivo -> SAA7134

mixer gnome

Sulla prima scheda mettete su mute i due “canali in” , video potete ignorarlo

mixer gnome

Sulla seconda sheda, deselezionate i due canali Capture in .

mixer gnome

Ora vi chiederete come mai avvio tvtime e non sento nulla ugualmente? Semplice perchè tvtime ancora cerca il dispositivo audio ” dsp ” mentre noi abbiamo con quel modulo creato un altro dispositivo ” dsp1″ quindi se qualcuno sa come far capire a sto testone di programma che deve usare dsp1 puo’ inviare una segalazione, per il momento in rete si trova uno stratagemma, usare tvtime per riprodurre la Tv ed usare sox per riprodurre l’audio.

Quindi se non lo avete già fatto installiamo sox :

$ sudo apt-get install sox

poi creamoci uno script in modo da avviarli assieme:

$ sudo vim /usr/bin/audiotv

dentro mettiamoci queste righe :

#!/bin/sh
sox -c 2 -s -w -r 32000 -t ossdsp /dev/dsp1 -t ossdsp -w -r 32000 /dev/dsp &
tvtime --mixer=/dev/mixer:pcm
wait tvtime
t=`pidof sox`;
kill $t;

rendiamolo eseguibile :

$ sudo chmod 755 /usr/bin/audiotv

Ora siete a cavallo, potete lanciarlo da terminale o inserirlo nel menù di gnome ;) .

Telecomando

Ora passiamo al telecomando, come sistemarlo con il nostro lirc, intanto fate un controllo su quale device dobbiamo usare con :

$ cat /proc/bus/input/devices

scorrete la lista e trovate qualcosa di simile al mio vi evidenzio le voci importanti:

I: Bus=0001 Vendor=5168 Product=0214 Version=0001
N: Name="saa7134 IR (LifeView FlyTV Plat"
P: Phys=pci-0000:02:06.0/ir0
S: Sysfs=/class/input/input2
H: Handlers=kbd event2
B: EV=100003
B: KEY=c0304 310000 0 0 0 0 0 0 2 1e0000 0 0 10000ffc

Più che perfetto, ora che sappiamo il device possiamo installare lirc e configurare il nostro telecomando basta un semplice :

$ sudo apt-get install lirc

Ora seguite la configurazione di lirc imposta da debconf, ma non servirà a molto tanto i file li dobbiamo ricreare da capo, visto che la nostra scheda non è nella lista, fregatevene altamente ;) , appena finito uscirà un odioso output per avvisare che lirc non è configurato correttamente, ma già lo sapevano.
Passiamo alla configurazione vera è propria , intanto stoppiamo lirc :
sudo /etc/init.d/lirc stop

Rimuovete i driver della scheda tv :

$ sudo modprobe -r saa7134_alsa
$ sudo modprobe -r saa7134

Avviamo il debug sul modulo saa7134
$ sudo modprobe saa7134 ir_debug=1
Apriamo un terminale e controlliamo il debug premendo i tasti :

$ sudo tail -f /var/log/syslog
saa7133[0]/ir: build_key gpio=0xc71400 mask=0xec00000 data=3
saa7133[0]/ir: build_key gpio=0x2071400 mask=0xec00000 data=4
saa7133[0]/ir: build_key gpio=0x2471400 mask=0xec00000 data=5
saa7133[0]/ir: build_key gpio=0x4071400 mask=0xec00000 data=8

Perfetto funziona ora creamo il nostro file di configurazione per associarlo al lircd.conf , useremo un programma che si chiama irrecord
da manuale che vi invito a leggere daremo i seguenti parametri
Driver da usare
-H dev/input
device trovatro precedentemente
-d dev/input/event2
directory e nome del file da creare
/tmp/lircd.conf
Per un totale di :
$ irrecord -H dev/input -d /dev/input/event2 /tmp/lircd.conf
avremo il seguente output omettero tutta la pappardella iniziale

irrecord - application for recording IR-codes for usage with lirc
Copyright (C) 1998,1999 Christoph Bartelmus(lirc@bartelmus.de)
[...]
[...]
Press RETURN to continue.

date invio e vi esce questa scritta dove inizia la vera e propria configurazione, miraccomando tenete premuto un tasto qualsiasi vedrete avanzare i puntini sullo schermo finche non vi chiede di inserire il nome del tasto da configurare,e subito dopo tenete premuto il tasto per associarlo al nome, dopo l’ultimo vostro pulsante date ENTER per terminare e salvare il file.

Hold down an arbitrary button.
...................................................................................................
Found gap length: 207590
Now enter the names for the buttons.
Please enter the name for the next button (press to finish recording)

ora dobbiamo schiacciare i pulsanti del telecomando uno per volta e inserire il nome e premere ENTER (sulla tastiera) , questa operazione va ripetuta per tutti i tasti, avete a disposizione dopo ENTER 10 secondi dopo di che il programma chiude la ricezione e salva il file, vi consiglio di usare per i nomi le stesse voci riportate sul telecomando in uso.

[...]
[...]
[...]
Please enter the name for the next button (press to finish recording)
ch-
Now hold down button "ch-".
Please enter the name for the next button (press to finish recording)
###PREMIAMO ENTER
Checking for toggle bit.
Please press an arbitrary button repeatedly as fast as possible (don't hold
it down!).
irrecord: no data for 10 secs, aborting
No toggle bit found.
Successfully written config file.

Ora vi faccio vedere il mio file appena creato:


# Please make this file available to others
# by sending it to
#
# this config file was automatically generated
# using lirc-0.8.0(userspace) on Sat Dec 16 20:55:01 2006
#
# contributed by
#
# brand:                       /tmp/FlytvPlatinum
# model no. of remote control:
# devices being controlled by this remote:
#

begin remote

  name  /tmp/FlytvPlatinum
  bits           16
  eps            30
  aeps          100

  one             0     0
  zero            0     0
  pre_data_bits   16
  pre_data       0x8001
  gap          207583
  toggle_bit      0

      begin codes
          power                    0x0074
          air/catv                 0x0175
          video                    0x0189
          audio                    0x0188
          avsource                 0x0182
          fullscreen               0x0174
          stereo                   0x0170
          mute                     0x0071
          recall                   0x0081
          enter                    0x001C
          vol+                     0x0073
          vol-                     0x0072
          ch+                      0x0192
          ch-                      0x0193
          0                        0x000B
          1                        0x0002
          2                        0x0003
          3                        0x0004
          4                        0x0005
          5                        0x0006
          6                        0x0007
          7                        0x0008
          8                        0x0009
          9                        0x000A
      end codes

end remote

Ora questo file lo spostiamo, sovrascrivendo se esiste l’omonimo
$ sudo cp /tmp/lirc.conf /etc/lirc/lircd.conf

Ora non resta che modificare il file /etc/lirc/hardware.conf in questo modo :

$ sudo vim /etc/lirc/hardware.conf

# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS="-d /dev/input/event2"

#Don't start lircmd even if there seems to be a good config file
START_LIRCMD=false

#Try to load appropriate kernel modules
LOAD_MODULES=false

# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="dev/input"
# If DEVICE is set to /dev/lirc and devfs is in use /dev/lirc/0 will be
# automatically used instead
DEVICE="/dev/lirc"
#MODULES="lirc_dev lirc_gpio"

# Default configuration files for your hardware if any
LIRCD_CONF="/etc/lirc/lircd.conf"
#LIRCMD_CONF="life-view/lircmd.conf.flyvideo"
MODULES="UNCONFIGURED"
LIRCMD_CONF="UNCONFIGURED"

a questo punto lirc è pronto per ricevere i nostri comandi ma manca ancora qualcosa dobbiamo crearci il file ~/.lircrc che posizionato nella nostra home viene letto dal demone lirc che fa un confronto del file precedentemente creato con i comandi posti su questo associati ai tasti.

Configurazione ~/.lircrc

La configurazione di questo file purtroppo cambia da programma a programma anche se lirc usa sempre irexec per inviare i vari input, dobbiamo fare attenzione che il comando abbia il nome uguale a quello assegnato nel file creato precedentemente /etc/lirc/lircd.conf. La sintassi del file è semplice

begin #inizio
prog = mythtv #programma
button = air/catv #pulsante
config = Esc #comando
end #fine

Vi elenco qualche trucchetto per crearci da noi questo file avviando quei comandi redirigerete output in un file in modo da avere la lista delle possibili opzioni da usare per crearsi la configurazione, basterà aprirli con un qualsiasi editor, attenzione a tvtime che è l’unico dei programmi che usa se stesso per comandarsi tvtime-command, come si dice è praticamente autonomo :D .

tvtime
$ tvtime-command >tvtime-command

esempio per tvtime

begin #inizio
prog = irexec#programma
button = fullscreen#pulsante
config = tvtime-command MIXER_UP#comando
end #fine

mplayer
$ mplayer -input cmdlist > mplayer_cmd_lirc

Adesso avete tutto a disposizione, basterà crearsi il ~/.lircrc , attenzione al punto è un file nascosto, e riavviare il sistema così da avere, il modulo saa7134 e lircd avviati.

Commenti»

1. mag@ - 23 dicembre 2007- 15:18

@imu
garzie ancora per i consigli
sembra tutto ok, la sb16 sono riuscito a farla andare però ancora non sento la tv, ma ci riusciro!!
la risposta ai controlli che mi hai consigliato è questo e sembra tutto appasto
crw-rw—- 1 root audio 14, 3 2007-12-22 09:20 /dev/dsp
crw-rw—- 1 root audio 14, 19 2007-12-22 01:26 /dev/dsp1
buone feste!!!!!!!

Usa Mozilla Firefox Mozilla Firefox 2.0.0.11 con Ubuntu Linux Ubuntu Linux
2. imu - 23 dicembre 2007- 15:29

@mag@
Allora è un problema di mixer, ti consiglio di fare un ulteriore modifica allo script per la parte relativa a sox che alle volte porta sfasamenti nell’audio, devo ancora inserirla nella guida lo script :

    #!/bin/sh

    #Starts TVTime:
    /usr/bin/tvtime &
    PROCIDTVTIME=`pgrep tvtime`
    TESTETV=`pgrep tvtime`

    #while tvtime is working do:
    while [ $TESTETV -eq $PROCIDTVTIME ]; do
    #sox -q -w -r 32000 -t ossdsp /dev/dsp1 -t ossdsp /dev/dsp & #this causes a delay
    arecord -D hw:1,0 -r 32000 -c 2 -f S16_LE | aplay & #em teste
    sleep 4m #wait 4 minutes
    #killall -9 sox
    killall -9 arecord
    killall -9 aplay
    TESTETV=`pgrep tvtime`
    done

l’unica cosa la parter hw:1,0 puo’ variare quindi devi scoprire il tuo device.

Usa Debian IceWeasel Debian IceWeasel 2.0.0.11 con Debian GNU/Linux Debian GNU/Linux
3. Max+ - 15 febbraio 2008- 17:29

Sistema Linux(Arch)
Release 2.6.24
macchina X86-64

ASUS Wifi-TV
chips: Marvell 88W8335 WiFi chip, Marvell 88w030-NNp1, and a few TV chips (saa7131e, tda8275ac1, tda10046)
tuner:
connectors: Analog TV in, DVB-T in, Svideo/composite, Wifi Ariel Port, Wifi Activity Light
pcb: WIFI.TV Rev. 1.01 N13219 D33005
box has a part number of 90-C1TD10-00EAY

saa7133[0]: found at 0000:01:01.0, rev: 208, irq: 66, latency: 64, mmio: 0xd7ddb000
saa7133[0]: subsystem: 1043:8188, board: ASUS TV-FM 7135 [card=53,insmod option]
saa7133[0]: board init: gpio is 0
saa7133[0]: i2c eeprom 00: 43 10 88 81 54 20 1c 00 43 43 a9 1c 55 d2 b2 92
saa7133[0]: i2c eeprom 10: 00 01 22 00 ff 20 ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom 20: 01 40 01 03 03 01 01 03 08 ff 00 38 ff ff ff ff
saa7133[0]: i2c eeprom 30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom 40: ff 21 00 c2 96 10 03 32 15 08 ff ff ff ff ff ff
saa7133[0]: i2c eeprom 50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom 60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom 70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

from INF:
%33Hybrid.DeviceDesc%=3xHybrid,PCI\VEN_1131&DEV_7133&SUBSYS_81881043
%33Analog.DeviceDesc%=3xHybrid,PCI\VEN_1131&DEV_7133&SUBSYS_818C1043
; Setting FM radio of the Silicon tuner via SIF (GPIO 21 in use/ 5.5MHz)
HKR, “Audio”, “FM Radio IF”,0×00010001,0×729555
33Hybrid.DeviceDesc = “ASUS Tiger Hybrid TV Capture Device”
33Analog.DeviceDesc = “ASUS Tiger Analog TV Capture Device”

Usa Unbranded Firefox Unbranded Firefox 2.0.0.12 con Linux Linux
4. Max+ - 15 febbraio 2008- 17:33

Gradirei sapere se hai soluzioni per insallazione/riconoscimento della scheda TV-FM
inviata nel precedente mssaggio.
Grazie

Usa Unbranded Firefox Unbranded Firefox 2.0.0.12 con Linux Linux
5. Luciano - 12 marzo 2008- 0:00

Ciao, bellissimo il tuo tutorial mi è stato davvero utile..
Volevo chiederti una cosa..

Io ho una pinnacle PCTV 310i, e supporta la tv digitale terrestre, anche la tua scheda supporta il DVB-t? se si sei riuscito ad utilizzare il tuner per il digitale? io ci sto provando ma i device che ho sotto /dev/dvb/ secondo tvtime non sono dei tuner.

Grazie in anticipo per una risposta.

Lucio.

Usa Mozilla Firefox Mozilla Firefox 2.0.0.12 con Ubuntu Linux Ubuntu Linux
6. Antonio De Luci (imu) - 12 marzo 2008- 2:09

@Luciano
Questa non è DVB-T ma solo analogica. Se la tua Crea correttamente i device non usare tvtime, ma usa dei player per DVB tipo kaffeine, gxine …

Usa Debian IceWeasel Debian IceWeasel 2.0.0.12 con Debian GNU/Linux Debian GNU/Linux
7. Luciano - 13 marzo 2008- 23:42

Io ci sto provando.. ma non riesco proprio a fargli trovare i canali… ho addirittura aggiunto le frequenze della mia zona : http://www.dgtvi.it/dgtvi/copertura.aspx?TRS_ID=1550000&PROVID=77&CITYID=5914&CS=1

ma niente… mi sa che sbaglio qualcosa :(

grazie lo stesso per l’aiuto ma se ti viene qualcosa in mente fammelo sapere ;)

Usa Mozilla Firefox Mozilla Firefox 2.0.0.12 con Ubuntu Linux Ubuntu Linux
8. Antonio De Luci (imu) - 14 marzo 2008- 1:26

@Luciano
Sinceramente ho usato una sola tv DVB-T con Linux, certo ho aspettato 6 mesi ed oltre per usarla comunque, ho dopo aver caricato i driver ho installato e avviato kaffeine (in rete lo consigliano in tanti) sono andato in “canali” ed ho avviato lo scan. Semplicemente fantastico il risultato ne ha trovati tantissimi e li vedo perfettamente. Morale della favola non ho editato nulla per vedere le stazioni tutto effettuato tramite gui. Di più non posso dirti.

Usa Debian IceWeasel Debian IceWeasel 2.0.0.12 con Debian GNU/Linux Debian GNU/Linux
9. sito - 30 aprile 2008- 1:31

Volevo sapere se c’è ancora il problema dell’audio, anzi, so che c’è ancora ma se qualcuno sta pensando di risolverlo.
Questa guida avrà qualche anno, ma i problemi rimangono gli stessi per certe cose!

Usa Mozilla Firefox Mozilla Firefox 3.0b5 con Linux Linux
10. White - 2 maggio 2008- 13:46

ho installato tvtime ed è partito tutto (audio e telecomando) senza nessuna configurazione. C’è un problema: se avvio tvtime senza privilegi di root e riordino i canali, al successivo riavvio li ritrovo sparsi. Avviandolo invece come root rimane tutto memorizzato. Il problema sta nel fatto che come root sento un fruscio assurdo nell’audio e come utente normale invece sento correttamente. Qualcuno ha idea di come risolvere? Grazie e complimenti per la guida!

Usa Mozilla Firefox Mozilla Firefox 3.0b5 con Linux Linux
11. White - 2 maggio 2008- 14:05

Già risolto!
Dai che fra un po’ il pc va in salotto…non vedo l’ora!

Usa Mozilla Firefox Mozilla Firefox 3.0b5 con Linux Linux
12. Marcelo Meyer - 4 maggio 2008- 16:07

Ciao,

Ho una PCTV Analog PCI, qho seguito il tu tuotrial ma non funziona l’IR.
Tutti i passaggio van bebe finche non provo $ sudo modprobe saa7134 ir_debug=1, Poi quando provo a lanciare l’irrecord mi da di continuo i seguenti messaggi:

irrecord: could not reset tty
irrecord: could not init hardware (lircd runnin ? –> close it, check permissions)

lircd è attivo. Ho cercato su google per l’errore ma non ho trovato nessuna risposta coerente.
Provando a premere i tasti sul telecomando e verificando con sudo tail -f /var/log/syslog non succede nulla. Penso che non stia trasmettendo nulla. Per l’errore del irrecord hai qualche idea? Grazie in anticipo.

Poi in teoria quando fai un

Usa Mozilla Firefox Mozilla Firefox 2.0.0.14 con Windows Windows XP
13. Antonio De Luci (imu) - 4 maggio 2008- 16:12

@Marcelo Meyer
Infatti “lircd” deve essere inattivo te lo dice pure “(lircd running ? –> close it, check permissions):
$ sudo /etc/init.d/lirc stop

Usa Debian IceWeasel Debian IceWeasel 2.0.0.14 con Debian GNU/Linux Debian GNU/Linux
14. Hybrid Pro Stick PCTV Pinnacle (330e ID 2304:0226) « Tox87's Blog - 1 giugno 2009- 8:56

[...] telecomando procederemo facendo ne più ne meno dei passi descritti nella mia vecchia guida sulla scheda tv saa7134, comunque per correttezza e maggiore chiarezza riporto i [...]

Usa WordPress WordPress MU
15. Max - 17 settembre 2009- 20:55

Che dire…. servirebbe ancora l’aiutino. (dal 15/2/2008)

ASUS Wifi-TV
chips: Marvell 88W8335 WiFi chip, Marvell 88w030-NNp1, and a few TV chips (saa7131e, tda8275ac1, tda10046)
tuner:
connectors: Analog TV in, DVB-T in, Svideo/composite, Wifi Ariel Port, Wifi Activity Light
pcb: WIFI.TV Rev. 1.01 N13219 D33005
box has a part number of 90-C1TD10-00EAY

saa7133[0]: found at 0000:01:01.0, rev: 208, irq: 66, latency: 64, mmio: 0xd7ddb000
saa7133[0]: subsystem: 1043:8188, board: ASUS TV-FM 7135 [card=53,insmod option]
saa7133[0]: board init: gpio is 0
saa7133[0]: i2c eeprom 00: 43 10 88 81 54 20 1c 00 43 43 a9 1c 55 d2 b2 92
saa7133[0]: i2c eeprom 10: 00 01 22 00 ff 20 ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom 20: 01 40 01 03 03 01 01 03 08 ff 00 38 ff ff ff ff
saa7133[0]: i2c eeprom 30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom 40: ff 21 00 c2 96 10 03 32 15 08 ff ff ff ff ff ff
saa7133[0]: i2c eeprom 50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom 60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
saa7133[0]: i2c eeprom 70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

Usa Debian IceWeasel Debian IceWeasel 3.0.6 con Debian GNU/Linux Debian GNU/Linux