Patch für Multi-Frontend Devices

  • Das Thema wurde hier für die TBS 5520SE begonnen, gilt aber auch für die TBS 6590 und alle sonstigen DVB-Karten, die mehrere Frontends haben, von denen aber zu einer Zeit immer nur eines benutzt werden kann. Ich fange daher für Entwicklung und Test dieses Patches einen neuen Thread an.


    Der beiliegende Patch verändert das Device-Handling so, dass für den Fall, dass es in einem adapterX mehrere frontend0,1,... gibt, aber nur ein demux0 und kein demux1, nur *ein* cDvbDevice angelegt wird, dessen cDvbTuner dann aber mehrere cDvbFrontends hat. Zwischen den cDvbFrontends wird je nach Bedarf umgeschaltet.


    Da ich keine solche DVB-Karte habe, habe ich zum Testen in dem Adapter meiner DVB-S/DVB-S2 Karte einen Symlink von frontend1 nach frontend0 angelegt

    Code
    1. crw-rw---- 1 root video 212, 0 21. Okt 13:21 demux0
    2. crw-rw---- 1 root video 212, 1 21. Okt 13:21 dvr0
    3. crw-rw---- 1 root video 212, 3 21. Okt 13:21 frontend0
    4. lrwxrwxrwx 1 root root 9 20. Okt 14:55 frontend1 -> frontend0
    5. crw-rw---- 1 root video 212, 2 21. Okt 13:21 net0

    und in Zeile 1929 die Abfrage

    Code
    1. if (frontend == 0 && Props[0].u.buffer.data[i] != SYS_DVBS || frontend == 1 && Props[0].u.buffer.data[i] != SYS_DVBS2)

    eingefügt, womit zumindest die Erkennung der Situation funktioniert (diese Zeile ist defaultmäßig auskommentiert).

    Leider klappt das Tuning in dieser Umgebung nach einen Wechsel des Frontends bei mir nicht mehr.

    Da ich nicht weiß, ob das nur in diesem speziellen Fall nicht geht, oder ob es ein prinzipielles Problem ist, würde ich jetzt gerne diejenigen von euch, die so eine Multi-Frontend-Karte haben, bitten den Patch mal zu testen. Es wäre auch nett, wenn Leute, die sich mit LinuxDVB besser auskennen, sich das anschauen um zu prüfen, ob das Umschalten der Frontends überhaupt so richtig ist, oder ob ich da etwas falsch mache.


    Es wird hiermit nur die grundsätzliche Funktionsfähigkeit eines Multi-Frontend-Devices hergestellt. In einer nächsten Ausbaustufe kommt dann noch dazu, dass Devices, die kein Signal haben, ausgelassen werden. Das ist aber ein generelles Thema, das auch Single-Frontend-Devices betrifft, und daher zum jetztigen Zeitpunkt nicht relevant.


    Klaus

  • >> dass Devices, die kein Signal haben, ausgelassen werden.


    Wäre gut, wenn diese devices nicht 'ausgelassen werden', sondern nur in der Liste der Prioritäten an das Ende rutschen.

    So würden devices mit teilweisen Problemen noch verfügbar bleiben.

  • Ich habe mir gestern den Patch angesehen - und ich hoffe, auch verstanden.

    Neu ist, dass fd_frontend jetzt von DvbTuner verwaltet wird und dei Funktion cDvbTuner::ProvidesFrontend(const cChannel *Channel, bool Activate),

    wo im Fall von "Activate" das aktuelle frontend geschlossen und das neue geöffnet wird.


    !!!!

    weil ich gerade den Patch wieder ansehe - hier in cDvbTuner::ProvidesFrontend():

    !!!!


    + dvbFrontend->Close();

    + dvbFrontend = dvbFrontends[i];

    + fd_frontend = dvbFrontend->Open(); **** offnet doch wieder das alte frontend

    + frontend = i; **** weil die neue frontendnummer erst jetzt gesetzt wird


    Helmut

  • Ich konnte es schon jetzt testen und das Umschalten zwischen den beiden Frontends (3Sat<->3Sat-HD) funktioniert bei mir zuerst 3 mal wie geplant, doch bei einem weiteren Umschalten kommt eine Fehlermeldung.

    Code: Start
    1. Oct 22 20:49:02 asus vdr[15773]: [15789] reading EPG data from /var/cache/vdr/epg.data
    2. Oct 22 20:49:02 asus vdr[15773]: [15773] DVB API version is 0x050A (VDR was built with 0x050A)
    3. Oct 22 20:49:02 asus vdr[15773]: [15773] frontend 0/0 provides DVB-S2,DSS with QPSK ("STV090x Multistandard")
    4. Oct 22 20:49:02 asus vdr[15773]: [15773] frontend 0/1 provides DVB-S,DSS with QPSK ("STV090x Multistandard")
    5. Oct 22 20:49:02 asus vdr[15773]: [15773] cTimeMs: using monotonic clock (resolution is 1 ns)
    6. Oct 22 20:49:02 asus vdr[15773]: [15773] found 1 DVB device



    Im Anhang noch das ganze Log.

    Helmut

  • Jetzt habe ich im gepatchten dvbdevice.c, nachgesehen. Zeile 1787 bezieht sich auf DvbOpen(), die beiden anderen auf GetSignalStrength und GetSignalQuality.

    Der DvbOpen Fehler ist wahrscheinlich wegen der Simulation eines 2. Frontends entstanden - alle nutzen ja das gleiche Device und Open() war diesmal vermutlich schneller als Close().


    Der Fehler ist bis jetzt nur einmal aufgetreten, im Übrigen funktioniert der Patch bei mir.


    Helmut

  • Möglicherweise ist mein System etwas schneller, so dass das bei mir mit höherer Wahrscheinlichkeit passiert.

    Ich meine mich allerdings zu erinnern, zwischen dem Close() und Open() schon mal ein cCondWait::Sleep(500) eingebaut zu haben, was aber nicht gebracht hat. Aber ich werde das nochmal verifizieren.


    Klaus

  • Es kommt auch bei meinem schon älteren ION-330 doch relativ leicht zu einem Open() Fehler.

    Könnte man es vielleicht Close() und Open() durch eine Abfrage eines Rückgabewerts von Close() "serialisieren" damit diese beiden Funktionen nicht paralell ausgeführt werden können? Ich versuche es einmal.


    Helmut

  • close(fd_frontend) liefert bei mir immer 0 zurück. Und das Open() würde über DvbOpen() einen Fehler melden, wenn es schiefgeht.

    Aus VDR-Sicht funktioniert also sowohl das Schließen als auch das nachfolgende Öffnen des Frontends, und trotzdem klappt das Tuning nicht.


    Klaus

  • Für den Test benutze ich nur eine (dual) DVB-S-Karte, und davon nur den ersten Adapter.

    Das erste Tunen nach dem Start von VDR funktioniert immer. Sobald das Frontend gewechselt wird (wobei das hier ja nur heißt, das eine und einzige Frontend zu schließen und gleich wieder zu öffnen) geht nichts mehr. Auch nicht nach einem Wechsel "zurück".


    Klaus

  • Hinweis: wie ich gerade gelernt habe, hat die TBS 6590 zwei Eingänge (F-Buchsen), an die jeweils entweder ein DVB-S oder ein DVB-T/C Kabel angeschlossen werden kann. Die Karte implementiert zwei Adapter mit jeweils zwei Frontends, wobei adapter[01]/frontend0 für DVB-T/C und adapter[01]/frontend1 für DVB-S zuständig ist. Man kann also, wenn man reine DVB-S bzw. DVB-T/C Kabel anschließt, mit einem Adapter nur entweder DVB-S oder DVB-T/C empfangen, aber nicht zwischen beiden hin und her schalten.


    Mein Patch geht in der momentanen Form davon aus, dass die beiden Frontends eines Adapters immer das jeweilige Signal bekommen und damit ein Umschalten des Frontends zwischen DVB-S und DVB-T/C umschaltet.


    Denkbar wäre evtl. das DVB-S und DVB-T/C Signal über ein Koppelglied auf *ein* Kabel zu führen und dieses an die Karte anzuschließen, um somit beide Übertragungsarten mit einem Adapter empfangen zu können.


    Das aktuelle Problem mit dem Umschalten des Frontends dürfte damit aber nichts zu tun haben, daher möchte ich das erstmal zuverlässig lösen. Es muss schließlich möglich sein, das (selbe) Frontend zu schließen und gleich wieder zu öffnen.


    Klaus

  • Hi,


    "DVB-S und DVB-T/C Signal über ein Koppelglied auf *ein* Kabel zu führen" kann funktionieren zb DVB-S+DVB-T2 (hab ich hier) bei DVB-C + DVB-T2 geht das wahrscheinlich nicht ohne ein Relais oder entsprechende Filter. Die Kombination DVB-S + DVB-C geht bei nicht da ich hier auch noch MOCA 2.0 Adapter am DVB-C Kabel habe. Das größere Problem sind mehrere Kombi Karten DVB-C/T2 (DD ein Anschluss 2 Tuner) and denen entweder DVB-C oder DVB-T2 angeschlossen ist und man im VDR das delivery system per Karte/Frontend nicht festlegen kann.


    CU

    9000h

    Es ist eagl in wlehcer Reiehnfogle die Bchustebaen in Woeretrn vokrmomen. Huapstache der estre und leztte Bchustbae sitmmen.

  • Die TBS-6522 ist im Inneren ziemlich ident zur TBS-6590, nur ohne CI's. Sie hat dafür aber für alle 4 Tuner einen eigenen Antenneneingang.

    Falls alle Kabel angeschlossen sind kann man dann bei beiden Adaptern zwischen Sat und T/C umschalten.


    Helmut