Pagina 1 di 1

TvCard saa7134 - Script per trovare type e tuner number

Inviato: martedì 9 novembre 2010, 0:17
da Alkatron
Dovendo installare una tvcard abbastanza vecchia, una empire enjoy tv, maverick non me la riconosceva, o meglio la riconosceva ma non me la impostava correttamente.

La scheda è basata sul chip saa71xx quindi dovendo scorrermi tutti i card type e i tuner number ho fatto questo script in python (in allegato) che li scorre in automatico uno per volta e lancia tvtime in modo da permettere di verificare se quelle impostazioni sono corrette.

Fornisce anche un output riguardo i moduli da rimuovere chiedendoci conferma

Per la lista dei type e dei tuner ho semplicemente elaborato i 2 file
http://www.kernel.org/doc/Documentation ... ST.saa7134
http://www.kernel.org/doc/Documentation ... LIST.tuner
creando 2 liste in cardlist.py

Come si vede dalle variabili iniziali è facilmente configurabile sia sul modulo che sull'intervallo di valori da provare

Si deve lanciare come root

Codice: Seleziona tutto

# python tvcard_scan.py
e una volta partito si usa:

Invio per accettare il default [y]
n per uscire

In tvtime
i cambia l'imput source
esc esce da tvtime

Codice: Seleziona tutto

import cardlist, subprocess

MODULO = 'saa7134'
# Card scan
CARD_FROM = 0
CARD_TO = len(cardlist.cardno)
# Tuner scan
TUNR_FROM = 0
TUNR_TO =len(cardlist.trnr)

def runCommand(cmd):
	_p= subprocess.Popen(cmd, shell=True,stdout = subprocess.PIPE, stderr = subprocess.PIPE)
	_out, _err = _p.communicate()
	return _out, _err

def ModRmv(_mod):
	while True:
		if raw_input('Remove %s ? ([y]/n)' % (_mod) ) =='n': return
		cmd ='rmmod ' + _mod
		_out, _err = runCommand(cmd)
		if _err > '':
			print _err
			_modfthr = _err.split()[-1].split(',')[0]
			ModRmv(_modfthr)
		else:
			return

def ModLoad(_mod, _card, _turner):
	cmd= 'modprobe %s card=%s tuner=%s' % (_mod, _card, _turner)	
	_out, _err = runCommand(cmd)
	if _err > '':
		print _err

def TryTv():
	cmd= 'tvtime' 	
	_out, _err = runCommand(cmd)
	print _out
	if _err > '':
		print _err

def main():
	for _crd in range(CARD_FROM, CARD_TO):
		for _trnr in range(TUNR_FROM, TUNR_TO):
			_msg = '*' * 80 + '\n'
			_msg += 'Card :%s ----- %s \n' % (_crd, cardlist.cardno[_crd])
			_msg += 'Turner :%s ----- %s \n' % (_trnr, cardlist.trnr[_trnr])
			_msg += '*' * 80 + '\n'
			print _msg
			ModRmv(MODULO)
			ModLoad(MODULO, _crd, _trnr)
			TryTv()
			_msg = 'Next? ([y]/n) '
			if raw_input(_msg) == 'n':return 0
	return 0

if __name__ == '__main__':
	main()