Wiki

Outils pour utilisateurs

Outils du site


nova_s_plus

Installation d'une carte DVB-S NOVA-S-PLUS

Objectif

L'objectif de ce tuto est de fournir une méthode détaillée pour installer une carte DVB-S Hauppauge NOVA-S-PLUS avec un lecteur de carte « USB INFINITY Unlimited » pour recevoir les flux satellite de CANALSAT et CANALPLUS. (fonctionne aussi avec un lecteur Tevii usb)

Cette installation a été réalisée sur Mandriva 2008-1 avec le noyau 2.6.24, 2.6.25, 2.6.30 et 2.6.31

Cetutoriel n'est pas pour les débutants. Je vous recommande vivement de prendre connaissance de ce tuto : MythTV et la réception satellite qui fait le point sur le sujet.

Merci de reporter les erreurs et omissions que vous découvrez sur le forum.

Présentation de la carte

« Avec la NOVA-S-Plus dans votre PC, vous pouvez recevoir la télévision et la radio par satellite avec une qualité d'image parfaite et une excellente qualité sonore » nous annonce la plaquette commerciale.

nova-s-plus_board_front.jpg La carte WinTV-NOVA-S-Plus est connectée sur bus PCI, elle intègre un tuner DVB-S, compatible DiSEqC1.0., une entrée vidéo S-Vidéo et composite & audio mini-jack, et est fourni avec une télécommande et un récepteur infrarouge. Elle comprend un circuit de compression MPJEG2 donc les fichiers vidéo fournis seront dans ce format.


http://www.hauppauge.fr/pages/products/data_nova-s-plus.html

http://www.linuxtv.org/wiki/index.php/Hauppauge_WinTV-NOVA-S-Plus

Installation de la carte

La carte NOVA-S-PLUS est reconnu automatiquement par le noyau comme une carte cx88 http://www.linuxtv.org/wiki/index.php/Cx88_devices_(cx2388x)

installez votre carte et vérifiez en taper les séquences suivantes

lspci | grep video
05:02.0 Multimedia video controller: Conexant CX23880/1/2/3 PCI Video and Audio Decoder (rev 05)
dmesg | grep cx88
cx88[0]: subsystem: 0070:9202, board: Hauppauge Nova-S-Plus DVB-S [card=37,autodetected]
cx88[0]: TV tuner type 4, Radio tuner type -1
cx88[0]: hauppauge eeprom: model=92001
input: cx88 IR (Hauppauge Nova-S-Plus  as /class/input/input6
cx88[0]/1: CX88x/0: ALSA support for cx2388x boards
cx88/2: cx2388x MPEG-TS Driver Manager version 0.0.6 loaded
cx88[0]/2: cx2388x 8802 Driver Manager
cx88[0]/2: found at 0000:05:02.2, rev: 5, irq: 23, latency: 64, mmio: 0xfc000000
cx88/2: cx2388x dvb driver version 0.0.6 loaded
cx88/2: registering cx8802 driver, type: dvb access: shared
cx88[0]/2: subsystem: 0070:9202, board: Hauppauge Nova-S-Plus DVB-S [card=37]
cx88[0]/2: cx2388x based DVB/ATSC card
DVB: registering new adapter (cx88[0])
cx88[0]: irq mpeg  [0x100000] ts_err?*
cx88[0]/2-mpeg: general errors: 0x00100000
cx8802_start_dma() Failed. Unsupported value in .mpeg (0x00000001)
cx8802_start_dma() Failed. Unsupported value in .mpeg (0x00000001)

Votre carte est installée et prête à fonctionné. Nous allons pouvoir la tester.

Premier test

Pour tester la carte, nous allons l'intégrer dans Mythtv pour recevoir les chaines non cryptées. Arrêtez le backend et démarrez le myth-setup

Ajouter une carte vidéo, choisissez le type de carte carte d'acquisition DVB,

puis sélectionnez le numéro du périphérique DVB qui correspond à votre carte, son nom doit apparaître sur la ligne du dessous,

puis cliquez dans l'option DISEqC, tapez sur enter et choisir tête de satellite LNB. (Esc pour sortir)

dans options d'enregistrement, mettre le nombre max. d'enregistrements à 1 (le multirec ne fonctionne pas avec le décryptage).

valider cette configuration

ajoutez une source vidéo par exemple canalsat

si vous obtenez un message d'erreur, il faut lancer dans une console mythfilldatabase –manual et répondre aux questions qui vous sont posées

dans la page “connexions”, sélectionnez l'entrée qui correspond à votre carte,

donnez un nom à cette entrée,

sélectionnez la source vidéo “canalsat”

sélectionnez “recherche automatique des chaines”

puis dans la page qui s'ouvre, selectionnez dans l'option “type de balayage:” recherche complète de canaux “scanner un transport” Scanner la fréquence 11509 V 22000 qui contient entre autre Al Jazeera en clair

Si le scan se passe correctement, vous devriez avoir la liste des chaines qui contient la chaine “Al Jazeera” sur le canal 7012

Réglez le canal initial sur “7012” et validez vos choix. Voilà votre carte est programmée et prête pour le test.

relancer le backend

/etc/init.d/mythbackend restart

puis ouvrez le frontend et regardez la télé.

Après quelques secondes, la chaine Al Jazeera apparaît.

Bravo votre carte est opérationnelle pour la réception satellite des chaînes en clair.

Décryptage des chaines

Pour pouvoir décrypter les chaines, il va vous falloir: une carte DVB-S correctement configurée (si vous êtes arrivé jusqu'ici, c'est chose faite), un lecteur de carte externe (puisque la carte NOVA-S-PLUS ne possède pas de connecteur pour raccorder un CAM), une carte d'abonnement valide.

Comment ça fonctionne

Le lecteur de carte ne fournit aucune information, il faut utiliser un logiciel de lecture de carte (newcs dans notre cas), puis un logiciel de décryptage (open-sasc-ng) qui va utiliser les informations fournies par le logiciel lecteur de carte. Au cours de ce processus, un tuner virtuel sera créé et c'est celui que Mythtv utilisera pour visualiser les chaines decryptées.

Paramètrage du lecteur de carte

J'utilise le lecteur de carte INFINITY USB Unlimited qui est compatible avec linux et est capable de lire toutes les cartes d'abonnement. Si vous disposez d'un noyau récent 2.6.27, le lecteur est directement reconnu et le driver est installé. Le driver pour le lecteur de carte Infinity USB Unlimited est intégré dans le noyau 2.6.27 et plus Le module iuu_phoenix peut être configuré pour accélérer la lecture de la carte. Voir dans la documentation du module disponible avec le noyau.

> dmesg | grep iuu
iuu_phoenix 6-2:1.0: IUU Phoenix converter detected
usbcore: registered new interface driver iuu_phoenix
/~/iuu_phoenix-0.8/iuu_phoenix.c: Infinity USB Unlimited Phoenix driver v0.8

Si ce n'est pas le cas, vous allez devoir télécharger le driver et le compiler Il est disponible sur ce site. et dans ce ce forum, vous trouverez une explication en français pour installer le driver.

J'ai utilisé la version 8 car la version 9 semble boguée (d'après certains forums mais je ne souviens plus lesquels), suivez les instructions pour l'installer le driver, c'est sans problème.

Installation du logiciel de lecture de la carte

J'ai utilisé newcs qui a été développé par les DreamBoxiens (qui fonctionne sous linux), il est fourni sous forme de binaire. Il suffit de télécharger le binaire qui vous intéresse et le mettre dans /usr/bin ou /usr/local/bin. Il existe plusieurs fichiers binaires pour chaque configuration de machine (i686, x86-64, …..), ceux qui nous intéressent, sont newcs.i686.usb et newcs.x86_64.usb Vous pouvez télécharger newcs sur ce site.

J'ai utilisé la version 1.65, la version 1.67rc1 ne fonctionne pas avec le noyau 2.6.31

cp /newcs-1..../bin/newcs...... /usr/bin # choisir le binaire qui vous convient
chmod 755 /usr/bin/newcs......

Newcs nécessite un fichier de configuration newcs.xml à mettre dans /etc/

/etc/newcs.xml

<?xml version="1.0"?>
<!--

For setup-issues, look in readme.txt!
If there are other troubles, try different forums or irc channels around :o)

The configfile are NOT case-sensitive, and shouldnt care about dos/unix cr/lf.

** This is the example file for Phoenix Interface.

-->

<newCSconfig>
	<readers name="Card Readers">
		<device>
			<name>Phoenix Interface</name>
			<type>phoenix</type>
			<mhz>368</mhz>
			<node>/dev/infinity</node>
			<parity>even</parity>
			<reset>normal</reset>
			<export>Yes</export>
			<enabled>Yes</enabled>
			<blocksa>No</blocksa>
			<blockua>No</blockua>
			<blockga>No</blockga>
			<crypto-special>No</crypto-special>
			<ipk>0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</ipk>
			<ucpk>0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</ucpk>
			<PTShandshake>No</PTShandshake>
			<carddetect>yes</carddetect>
			<newcamd_port>12000</newcamd_port>
			<autosid>yes</autosid>
			<Seca-PPV>no</Seca-PPV>
			<pincode>0000</pincode>
			<priority>round</priority>
		</device>
	</readers>
	<cache>
			<emm>20</emm>
			<ecm>-1</ecm>
	</cache>	
	<debug>
			<password>NewCSpwd</password>	
			<level>normal</level>
			<type>init</type>
			<output>file</output>
			<logfile>/var/log/newcs.log</logfile>
	</debug>
	<newcamdserver>
			<enabled>Yes</enabled>
			<name>VDR-SC</name>
			<deskey>0102030405060708091011121314</deskey>
			<user>
				<name>dummy</name>
				<password>dummy</password>
				<hostname>localhost</hostname>
				<port>12000</port>
				<au>off</au>
				<sidoverride>on</sidoverride>
				<spider>No</spider>
				<readers>phoenix</readers>
        #<rate>2</rate>
			</user>
	</newcamdserver>
</newCSconfig>

Pour de plus amples renseignements, consultez ce tuto détaillé sur newcs.

créer le fichier de log

touch /var/log/newcs.log
chmod 777 /var/log/newcs.log

Installation du logiciel de décryptage

J'ai utilisé open-sasc-ng. C'est le logiciel qu'il faut pour décrypter les chaînes du satellite. Il faut télécharger open-sasc-ng puis le compiler pour le noyau que vous utilisez. Installez le module dvbloopback, le fichier de configuration et enfin lancer sasc-ng. Voir installer sasc-ng

ATTENTION si vous changez de noyau, vous serez obligé de refaire la compilation de open-sasc-ng

</code> Arrêtez le mythbackend, puis lancer sasc

/etc/init.d/mythbackend stop
cd /usr/local/open-sasc-ng
./sasc-ng -j 0:1 

Si tout c'est bien passé, vous pouvez vérifier que vous avez 2 adapter dans le répertoire /dev/dvb.

Intégration dans MythTV

Rien de bien compliquer à ce niveau là, il faut juste modifier la carte d'acquisition DVB pour la faire pointer sur le tuner virtuel 1 dans notre cas. Et c'est fini.

Vous retournez dans connexions, dvbinput⇒canalsat et vous faites une recherche auto des chaînes sur la fréquence 11856 V 27500 3/4 pour avoir les premières chaînes cryptées de Canalsat. Vous pouvez vérifier que les chaînes scannées ont été ajoutées à la liste des chaînes. Notez le numéros des nouvelles chaînes.

Vous devez relancer le backend pour que les modifications soient prises en compte

/etc/init.d/mythbackend restart

Puis dans le frontend, regardez la télé et vérifiez que vous visualisez les chaînes en clair , puis choisissez une chaîne cryptée (qui soit dans votre abonnement); il faut attendre parfois 5 minutes pour avoir le premier décodage, soyez patient, cette attente est nécessaire pour chaque chaîne la première fois.

ATTENTION il faut bien respecter l'ordre de montage, en premier newcs, puis dvbloopback, puis sasc et enfin le backend. Si vous n'êtes pas sûr de cet ordre, arrêter le backend, et refaites la séquence de montage en manuel

Si tout c'est bien déroulé, il vous reste à scanner toutes les fréquences (environ 500 chaînes vont être créées) ou uniquement les fréquences qui vous intéressent en vous reportant sur le site http://www.lyngsat.com/astra19.html.

Il vous faut à présent lancer mythfilldatabase –manual pour récupération les identifiants xmltv des chaines qui serviront à télécharger les programmes des chaînes.

Lancement automatique

Pour que tout ce petit monde fonctionne correctement au démarrage, il faut respecter les règles suivantes: newcs doit fonctionner et la carte initialiser avant le démarrage de sasc-ng dvbloop doit fonctionner avant que sasc-ng soit lancé sasc-ng doit fonctionner avant que le mythbackend soit lancé mythfrontend ou mythwelcome sera lancé en dernier. Vous devez également vous assurer que les drivers du lecteur infinity et de la carte DVB sont montée toujours au même endroit. Pour cela, je vous recommande de créer 2 rules dans udev créer un fichier de rules pour mythtv [code]cd /etc/udev/rules.d mk 10-mythtv.rules[/code] Editer le fichier créé et ajouter deux lignes du type

# monter le lecteur sous le nom de /dev/infinity
KERNELS=="6-2",  DRIVERS=="usb",  ATTRS{product}=="Infinity USB Unlimited", SYMLINK+="infinity"

# montage nova-s-plus sur adapter 100
SUBSYSTEM=="dvb", ATTRS{subsystem_vendor}=="0x0070", ATTRS{subsystem_device}=="0x9202", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter100/%%s $${K#*.}'", SYMLINK+="%c"

Au lieu de définir des régles de montage, j'ai défini l'ordre montage des cartes dans /etc/modprobe.conf, c'est plus simple et plus sûr, reporter vous ici au paragraphe alternatives

Nous allons créer 2 scripts sascd et newcs qui permettront d'automatiser les taches.

Créer 2 liens pour lancer les scripts

cd /etc/rc5.d
ln -s /etc/init.d/sascd
mv sascd S50sascd
ln -s /etc/init.d/newcs
mv newcs S19newcs

Vous devrez peut-être adapter la position de montage en fonction de votre système. Newcs peut être lancé très tôt, il n'a besoin que du driver iuu, par contre, la position de sascd pourra être ajusté pour fonctionner à tous les démarrages. J'ai un peu tatonner et cette position fonctionne à merveille chez moi (3 secondes pour initialiser newcs et environ 35 sec pour sasc)

Le script sascd est particulièrement puissant et complet, puisqu'il peut installer le module dvbloopback et sasc-ng. Mais il peut aussi monter dans l'ordre désiré les modules des cartes DVB et autres, ou arrêter/lancer le backend.

J'ai utilisé ces possibilités au début puis j'ai abandonné car j'avais des problèmes de synchronisation de montage avec d'autres modules; la télécommande entre autre

/etc/init.d/sascd

#! /bin/bash
#
# sasc-ng and driver management script by opacus
# thanks to xjosh for MapCards routine
# Updated 03-10-08  - version 17.0
#

# IMPORTANT: Copy dvbloopback.ko (or link it) to  /lib/modules/2.6.XX/misc
#            after that run "depmod -a" so the modprobe works without being in the current directory.
#            Two distribution packages must be priorly installed: "screen" and "dvbsnoop"
#
# Depending on your configuration, the script could load, reload or kill sasc-ng, mythtv, vdr and all the associate drivers.
# Link this script as part of your startup default level. Procedure may vary as per your distro.
#

# These are the available commands on the console (please test the script manually before linking it to startup):
# sascd start >> Normal boot start. Starts sasc-ng and optionally mythtv or vdr. Assumes all driver modules preloaded
# sascd restart >> Restarts sasc-ng and optionally mythtv or vdr. Assumes all driver modules preloaded
# sascd stop >> Stops sasc-ng and optionally mythtv or vdr. Unloads all driver modules
# sascd reload >> Restarts sasc-ng and optionally mythtv or vdr. Unloads and reloads all driver modules.
# sascd reload-drivers >> Unloads and reload all driver modules.

## ************* Configuration Section *************** ##
 
ENABLED=1                                     # Change to 1 to enable sasc-ng's script. Change to 0 to disable it.

SCREEN="no"                                 # Change to "yes" to enable starting sasc-ng, myth or vdr thru "screen" command.
                                           # With screen you could get dynamic output using command:
                                           # "screen -r sasc-ng-scr" for sasc-ng or "screen -r addl-scr" for myth or vdr
                                           # Screen is recommended mostly for debugging only.
                                           # You MUST add a daemon option to sasc-ng, vdr and mythtv if SCREEN="no"
                                           # otherwise remove the daemon option if SCREEN="yes"

NAME="sascd"                               # name of this script.
LOOPDRIVER=" dvbloopback"                  # name of dvbloopback module
SASCLIB="LD_LIBRARY_PATH=/usr/local/share/open-sasc-ng/sc/PLUGINS/lib/ "
SASCDIR="/usr/local/share/open-sasc-ng/"           # sasc-ng directory
SASCPRG="sasc-ng"                          # name of sasc-ng program to be started by this  script.
KILLPRGS=" mythbackend "  # programs to be killed when sascd exits

# Add here the startup Options passed to SASC-NG.  Adjust according to your devices.
# DO NOT USE ANY JOIN PARAMETER. This is appended automatically.

# SASCOPTION=" --daemon --sid-allpid --cam-dir=/video/plugins -o --log /var/log/sasc-ng/sasc-ng.log"                   # example for nexus
#SASCOPTION=" --daemon --sid-allpid --cam-dir /etc/camfiles --cam-budget -o --log /var/log/sasc-ng.log"         # example for genpix + budget card + nexus
SASCOPTION=" --daemon --cam-dir=/usr/local/share/open-sasc-ng/sc_files --log /var/log/sasc-ng.log"

# Add here the of name of mythtv or vdr which may be loaded automatically after sasc-ng:

# ADDLPRG="xxxxxxxx"                       # Use xxxxxxxx  if no additional program is to be started
ADDLPRG=""                      # additional program will be started  (choose mythbackend or vdr, but not both)
ADDLDIR="/etc/init.d/"                  # additional program directory
ADDREAL=""

# Add here the startup Options passed to ADDLPRG:

#ADDLOPTIONS=" "                            # If no options, leave at least an empty string.
# ADDLOPTIONS=" -d -Premote -Pprefermenu -Pyaepg -D 1 -v /video " # additional options for vdr
ADDLOPTIONS=" start" # additional options for mythtv.
 

# Add here your dvb card or remote control drivers which may be loaded and unloaded with this script (in addition of  LOOPDRIVER).
# CAUTION: The order of drivers is critical. Drivers with dependants must be at the end of the list
# THE WRONG ORDER OF DRIVERS MAY CRASH YOUR SYSTEM

# Do you have a genpix usb adapter (yes/no) ?
GPADAPTER="no"
GPDRIVERS="dvb_usb_gp8psk"                                                # This is the driver to be loaded.
GPDRIVERSKILL=" dvb-usb-gp8psk dvb-usb dvb-pll dvb-core "                 # These are the v4l modules to be unloaded

# Do you have a Twinhan 1020a budget card (yes/no) ?
BUDGET="no"
BUDGETDRIVERS1="bttv"                                                     # This is the driver1 to be loaded
BUDGETDRIVERS1OPTION="i2c_hw=1 card=0x71"                                 # This driver1 needs special options
BUDGETDRIVERS2="dvb_bt8xx"                                                # This is the driver2 to be loaded
BUDGETDRIVERSKILL=" dvb_bt8xx tuner dst bt878 bttv ir_common compat_ioctl32 
                    btcx_risc tveeprom videodev v4l2_common v4l1_compat          
                    video_buf dvb_core "                                  # These are the v4l modules to be unloaded

# Do you have a digistar 103g budget card (yes/no) ?
DIGIBUDGET="no"
DIGIBUDGETDRIVERS="cx88_dvb"                                              # This is the driver1 to be loaded
DIGIBUDGETDRIVERSKILL=" cx88_dvb cx24123 cx88_vp3054_i2c videobuf_dvb cx8800 cx8802 cx88xx videodev v4l1_compat ir_common compat_ioctl32 v4l2_common videobuf_dma_sg videobuf_core btcx_risc tveeprom"                                                 # These are the v4l modules to be unloaded

# Do you have a Nexus-S card (yes/no) ?
NEXUS="no"
NEXUSDRIVERS="dvb_ttpci"                                                  # This is the driver to be loaded.
NEXUSDRIVERSKILL=" ves1x93 dvb_ttpci stv0299 video_buf saa7146 
    v4l2_common v4l1_compat ttpci_eeprom saa7146_vv videodev dvb_core  "  # These are the v4l modules to be unloaded
# NEXUSDRIVERSKILL=" dvb_ttpci lnbp21 l64781 saa7146_vv video_buf saa7146 ves1820 tda8083 sp8870 stv0297 ves1x93 ttpci_eeprom stv0299 dvb_core "  # These are the kernel modules to be unloaded

# Number of times runsasc will attempt to restart SASC-NG
MAXTRIES=3

# Do you want sascd to monitor sasc-ng continuously (yes/no)?
MONITOR="no"                                                         # <<<< say "yes" only if sascd is started MANUALLY from the console.
# When monitor is "yes", how often sascd will check the status of sasc-ng (in seconds) ?
INTERVAL=20

# Set STARTFLAG to 1 if you want the drivers NOT to be unloaded and reloaded on command "sascd start" or "sascd restart"
# In this case, the script expects the drivers to be priorly loaded on boot-up by udev of by other module loading routines.
# When STARTFLAG=0 all driver modules are unloaded and force reloaded on: "sascd start" and "sascd restart" commands.
# On command "sascd reload" drivers get unloaded and reloaded regardless of STARTFLAG settings.
STARTFLAG=1

# Input your preferred virtual card map order here. If needed add more adapters as dvb[2], dvb[3]...
# This is the virtual adapter order known to mythtv database, regardless of real adapter order.
# As an example if you have two adapters: dvb[0] will always be known to Mythtv as virtual adapter 2, dvb[1] as 3, etc..
# The real adapter order could change but the virtual order stays the same. .
# Initially write any card name here and run the script. After you'll see the correct names printed out, please insert them.
# dvb[0]="ST STV0299 DVB-S"                   # this is a nexus-s card
# dvb[1]="Conexant CX24123/CX24109"           # this is a digistar budget card
# dvb[2]="DST DVB-S"                          # this is a twinhan budget card
# dvb[3]="Genpix 8psk-to-USB2 DVB-S"          # this is genpix-usb adapter

## ******************* End Configuration Section ***************** ##



#Global variables (do not change)
FILENAME=""
RUNFLAG=1
MODULE=""
MODULEOPTION=""
LOOPCOUNT=0
JOINPARM=""
DVBSIZE=2

# Calculate the real-virtual join parameters
MapCards() {
     JOINPARM=""
     JOINPARM=`echo -n "$JOINPARM -j 100:3 -j 0:4"`
      return 1
}

# Test modules for existence
TestModule() {
     grep -qse $MODULE [-_]core /proc/modules
}

# Insert generic modules
LoadModule() {
     local LOOP=0
 
     while (true); do
           if ! TestModule; then
                   if [ $STARTFLAG -eq 0 ]; then
                         if [ $((LOOP+=1)) -le  $MAXTRIES ]; then
                                insmod /usr/local/share/open-sasc-ng/dvbloopback.ko num_adapters=2 >> /var/log/sascd.log
                                sleep 2
                                if TestModule; then
                                      return 1
                                fi
                         else

                                echo "ERROR: Module $MODULE failed insertion after $MAXTRIES tries. Exiting..." | tee -a /var/log/sascd.log
                                exit 1
                         fi
                   else
                         echo "WARNING: Module $MODULE supposed to be loaded before running $NAME. Ignoring adapter..."  | tee -a /var/log/sascd.log
                         return 0
                   fi
           else
                   return 1
           fi
     done
}

# Load all DVBLoopback driver modules needed for your hardware:
LoadDrivers() {
     if [ $STARTFLAG -eq 0 ]; then
          echo -e " `date` Loading all drivers" | tee -a /var/log/sascd.log
     fi
     if (test $BUDGET = "yes"); then
          MODULE=$BUDGETDRIVERS1; MODULEOPTION=$BUDGETDRIVERS1OPTION; LoadModule
          MODULE=$BUDGETDRIVERS2; MODULEOPTION=""; LoadModule
     fi     
     if (test $DIGIBUDGET = "yes"); then
          MODULE=$DIGIBUDGETDRIVERS; MODULEOPTION=""; LoadModule
     fi     
     if (test $NEXUS = "yes"); then
           MODULE=$NEXUSDRIVERS; MODULEOPTION=""; LoadModule
     fi
     if (test $GPADAPTER = "yes"); then
           MODULE=$GPDRIVERS; MODULEOPTION=""; LoadModule
     fi
     sleep 1
     MapCards     # Mapping is done after adapter driver insertion, but before dvbloopback
     sleep 1
     STARTFLAG=0
     MODULE=$LOOPDRIVER;  MODULEOPTION=" num_adapters=$DVBSIZE"; LoadModule 
     return 1 
}

# Unload all DVBLoopback driver modules loaded in LoadDrivers 
UnloadDrivers() {
     if [ $STARTFLAG -eq 0 ]; then
           echo -e " `date` Unloading all drivers"  | tee -a /var/log/sascd.log
           screen -wipe > /dev/null  2>&1
           killall  -q $SASCPRG $KILLPRGS > /dev/null 2>&1
           sleep 1
           rmmod -f $LOOPDRIVER > /dev/null 2>&1
           sleep 1
           if (test $GPADAPTER = "yes"); then
                  rmmod -f $GPDRIVERSKILL > /dev/null 2>&1
             sleep 1
           fi
           if (test $NEXUS = "yes"); then
                  rmmod -f $NEXUSDRIVERSKILL > /dev/null 2>&1
             sleep 1
                  rmmod -f $NEXUSDRIVERSKILL > /dev/null 2>&1
             sleep 1
           fi
           if (test $BUDGET = "yes"); then
                  rmmod -f $BUDGETDRIVERSKILL > /dev/null 2>&1
             sleep 1
           fi   
           if (test $DIGIBUDGET = "yes"); then
                  rmmod -f $DIGIBUDGETDRIVERSKILL > /dev/null 2>&1
             sleep 1
           fi   
     fi
     return 1 
}

# Retry and exit after MAXTRIES
ReloadDrivers() {
      if [ $((LOOPCOUNT+=1)) -le  $MAXTRIES ]; then
           echo " `date` $NAME trying $LOOPCOUNT time(s). Max retries $MAXTRIES" | tee -a /var/log/sascd.log
            UnloadDrivers
            sleep 5
            LoadDrivers
            sleep 5
     else
            echo "ERROR: Something is wrong! $SASCPRG could not be started. Exiting...." | tee -a /var/log/sascd.log
            UnloadDrivers
            sleep 5
#           killall $NAME   
            exit 1
     fi
     return 1
}

# Grep thru ps results and eliminate zombie processes.
CheckStatus() {
     RUNFLAG=0
     if (ps -A ax | grep -v "ps ax" | grep -v grep | grep $FILENAME | grep -v "<defunct>") > /dev/null 2>&1; then
           RUNFLAG=1
     fi
     return 1
}

# Print file status
EchoF() {
    local YESNO=""

    if [ $RUNFLAG -eq 0 ]; then
            YESNO="NOT"
    fi
    if  !(test $MONITOR = "yes"); then   
           echo " `date` <<<<<< $FILENAME is $YESNO running >>>>>" | tee -a /var/log/sascd.log
    fi
    return 1
}

# Retry loop 
RunLoop() {
     local RUNFLAGs=0
     local RUNFLAGa=0
     local LOOP=0

     while (true); do
           sleep 1
           if (test -f $SASCDIR$SASCPRG); then           # check sasc-ng existence
                   FILENAME=$SASCPRG; CheckStatus
                   if  [ $RUNFLAG -eq 1 ]; then
                         RUNFLAGs=1
                       EchoF
                   fi
 

#                  if (test -e $ADDLDIR$ADDLPRG); then    # check addl-prg existence
#                           FILENAME=$ADDLPRG; CheckStatus
#                           if  [ $RUNFLAG -eq 1 ]; then
#                                 RUNFLAGa=1
#                                 if [ $RUNFLAGs -eq 1 ]; then
#                                       EchoF
#                                 fi
#                           fi
#                   else

#                           RUNFLAGa=1
#                   fi

                   if (pidof mythbackend); then
                      FILENAME=$ADDLPRG;
                      echo "pid found"
                      RUNFLAGa=1
                      if [ $RUNFLAGs -eq 1 ]; then
                                       EchoF
                       fi

                   else
                      RUNFLAGa=1
                      echo "no pid found"
                   fi

                   echo "RUNFLAGs>> $RUNFLAGs RUNLGAGa>> $RUNFLAGa"
                   if [ $RUNFLAGs -eq 0 ] || [ $RUNFLAGa -eq 0 ]; then
                           ReloadDrivers
                           sleep 5
                          echo "Starting $SASCLIB $SASCDIR$SASCPRG $SASCOPTION $JOINPARM "  | tee -a /var/log/sascd.log

                          if  (test $SCREEN = "yes"); then
                              # start sasc-ng with screen. Daemon option must not be set
                               eval "screen -D -m -S sasc-ng-scr $SASCLIB $SASCDIR$SASCPRG $SASCOPTION $JOINPARM &"
                          else
                              # start sasc-ng without screen. Daemon option must be set
                              eval "$SASCLIB $SASCDIR$SASCPRG $SASCOPTION $JOINPARM"
                          fi

  #                       if (test -f $ADDLDIR$ADDLPRG) ; then
  #                               sleep 1
  #                               cd $ADDLDIR
  #                               echo "Starting $ADDLDIR$ADDLPRG $ADDLOPTIONS " | tee -a /var/log/sascd.log
  #                               sleep 5
  #                               if  (test $SCREEN = "yes"); then
  #                                    # start myth or vdr with screen. Daemon option must not be set
  #                                    eval "screen -D -m -S addl-scr $ADDLDIR$ADDLPRG $ADDLOPTIONS &"
  #                               else
  #                                    # start myth or vdr without screen. Daemon option must be set
  #                                    eval "$ADDLDIR$ADDLPRG $ADDLOPTIONS"    # start myth or vdr.
  #                               fi
  #                        else
  #                           echo "not starting program ($ADDLDIR$ADDLPRG)"
  #                        fi
                   fi
           else
                  echo "ERROR: file $SASCPRG not found. Exiting..." | tee -a /var/log/sascd.log
                  exit 1;
           fi 
           if  (test $MONITOR = "yes"); then
#                 echo -e "monitoring in progress... checking status again in $INTERVAL sec  n"
                  sleep $INTERVAL
           else
                  if [ $RUNFLAGs -eq 1 ] && [ $RUNFLAGa -eq 1 ]; then
                           exit 0;
                  fi
           fi
     done
}

# Main script
test "$ENABLED" != "0" || exit 0

#if (test $ADDLPRG = "mythbackend"); then
 #    export MYTHCONFDIR=/var/lib/mythtv
#fi

case "$1" in
     start)
          RunLoop
          ;;
     stop)
          STARTFLAG=0
          UnloadDrivers
          ;;
     restart)
          killall  -q $SASCPRG $ADDLPRG $KILLPRG > /dev/null 2>&1
          sleep 5
          RunLoop
          ;;
     reload)
          STARTFLAG=0
          killall  -q $SASCPRG $ADDLPRG $KILLPRG >> /dev/null 2>&1
          sleep 5
          RunLoop
          ;;
     reload-drivers)
          STARTFLAG=0
          killall  -q $SASCPRG $ADDLPRG $KILLPRG > /dev/null 2>&1
          sleep 5
          UnloadDrivers
          sleep 5
          LoadDrivers
          ;;
     *)
          echo "Use: $N {start|stop|restart|reload|reload-drivers}" >&2
          ;;
esac
# killall $NAME
exit 0  

/etc/init.d/newcs

# !/bin/sh
### BEGIN INIT INFO
# Provides:          newcs
# 
                    
                                    
nova_s_plus.txt · Dernière modification: 15/04/2012 par gilles74