Update der DVB-T2 Transponderdaten für GetSignalStrength() und GetSignalQuality()

  • In meiner channels.conf sind bei den DVB-T2 Sendern die Transponderdaten z.B. für Modulation, Inversion und Coderate(FEC) immer noch so eingetragen wie sie von w_scan beim Sendersuchlauf als default verwendet wurden, also QPSK, INVERSION_AUTO oder FEC_AUTO.

    Wenn ich es richtig sehe, werden diese Werte von vdr nicht aktualisiert, weil sie in der NIT für DVB-T2 einfach nicht vorhanden sind.


    Meine Idee ist nun, sich diese fehlenden Angaben nach einem erfolgreichen LOCK direkt vom Frontend zu holen.


    Dazu habe ich in dvbdevice.c eine Funktion GetFrontend erstellt in der diese Daten mit FE_GET_PROPERTIES abgefragt werden und dann mit channel.SetTransponderData übernommen werden sollten.


    Dem ist aber leider nicht so. im Log sehe ich zwar die Aktualisierungsmeldung mit Alt-Neu, aber im Kanal-Editor oder vdr-femon sind die Werte unverändert, in der channels.conf sowieso.

    Meine C++ Kenntnisse sind eher bescheiden, und vielleicht bin ja auch ganz auf dem Holzweg.

    Hier der Code als Patch:

    Falls jemand dazu eine Idee oder bessere Lösung hat wäre ich dankbar!


    Helmut

  • Der Name 'GetFrontend' äußerst verwirrend, bei dieser Bezeichnung würde man erwarten ein Handle zu einem Frontend o.ä. zu bekommen. Solltest du ändern, vielleicht GetFrontendProperties oder so..

    Das Prinzip selbst wird u.U. funktionieren, aber nicht mit jeder DVB Karte.



    Ansonsten überschreibst du eine lokale Kopie des aktuellen Senders dieses Devices in cDvbDevice anstelle des Kanals der Kanalliste.

    Damit liefern dann das dvb device und die Kanalliste unterschiedliche Informationen.



    Diese folgende Änderung erscheint mir totaler Unsinn zu sein. Ohne Lock wird GetFrontend() falsche Informationen liefern.

    Hättest du wirklich die Kanalliste überschrieben, wäre der Kanal danach ungültig.


  • Hallo wirbel,

    danke fürs drüberschauen.


    Einen verständlicheren Funktionsnamen kann man sicher wählen.

    Das mit der lokale Kopie habe ich auch vermutet, nur - wie bekommt man das dann in die aktuelle (interne?) Kanalliste?

    Ich habe es gestern Abend nicht mehr durchschaut, wahrscheinlich war es schon zu spät.


    Die Stelle des Aufrufs sollte schon passen - es gibt hier ja den FE_HAS_LOCK. Was ich hier vor dem Aufruf prüfe ist, ob ich vom tunerStatus 'tsTuned' durchgefallen bin oder ob er vorher schon 'tsLocked' war. Nur beim Übergang von Tuned zu Locked werden die Frontend-Parameter abgefragt. Also genau einmal entweder nach einem Kanalwechsel oder wenn ein verlorengengener Lock wieder hergestellt wurde.

  • Besser wäre es, die Parameter von SETCMD() mit den aktuellen Werten aus der lokalen Kopie des Kanals in cDvbDevice zu initialisieren, nicht mit Null.



    Nur wenn sich einer dieser Werte nach dem ioctl geändert hat (vorher/nachher): LOCK_CHANNELS_READ nutzen, pointer auf channels holen und in loop alle Kanäle dieses Transponders suchen && updaten. Danach auch noch lokale Kopien in allen devices updaten.

  • Hier nun der aktualisierten Patch nach.

    Funktioniert bei mir nun auch mit Update der channels.conf (wird nach 10 Minuten geschrieben).


    wirbel - bei SETCMD() und dem ioctl FE_GET_PROPERTY genügt 0 als Parameter. Der Treiber überschreibt diesen wert immer mit dem Wert aus seinem dtv_property_cache.

    Auf die Kanalliste greife ich mit GetChannelsWrite() zu - so wie es z.B. auch in nit.c geschieht.


    Auch wird nur die Kopie im aktuellen Device aktualisiert da das erste Device, das den Lock auf einen Tranponder bekommt sofort die Parameter aktualisiert. Eigentlcih kann dann kein ein weiteres Device alte Werte haben (Ok - theoretisch schon, nämllich wenn das als erstes auf den Tranponder zugreifende Device den Lock erst nach einem zweiten bekommt - eher unwahrscheinlich aber auch kein wirkliches Problem).


    Ein zweiter Patch ist für den Kerneltreiber des si2168 damit die Paramerter dort auch wirklich aktualisiert werden.

    Den brauche ich für meinen August T230 Stick.

  • Welchen Vorteil bringt denn dieser Patch in der Praxis?


    Wenn die betreffenden Daten nicht in der NIT drin sind, und man diejenigen, die momentan tatsächlich verwendet werden, in die channels.conf einträgt, läuft man dann nicht Gefahr, den Kanal nicht mehr tunen zu können, wenn der Sender einen Parameter verändert, ihn in der NIT aber weiterhin nicht angibt?


    Klaus

  • This is a bit unrelated, but IIRC the VDR doesn't detect new T2 transponders and I was looking into it years ago, but never got it finalized. However, I found a work-in-progress patch on my disk that might pinpoint the problem.

  • Hallo Klaus,

    Welchen Vorteil bringt denn dieser Patch in der Praxis?

    Ich verwende Modulation und Coderate/FEC für die Ermittlung der Referenzwerte zur Berechnung von SIgnalstärke und Signalqualität nach dem Standard von Nordig an den sich offensichtlich auch viele Hersteller von DVB-Receiver halten.

    Ein Wert von "auto" hilft hier nicht.


    Hier die Dokumentation: https://nordig.org/specifications/

    Die Berechnung für DVB-T/T2 ist ziemlich einfach und ich habe es bei mir mit einem Patch im VDR-2.3.8 eingebaut.

    (Ich verwende aber nur die SSI genau nach Nordig, den SQI habe ich etwas "gespreizt", da er sonst eigentlcih immerl 100% anzeigt).

    Wenn die betreffenden Daten nicht in der NIT drin sind, und man diejenigen, die momentan tatsächlich verwendet werden, in die channels.conf einträgt, läuft man dann nicht Gefahr, den Kanal nicht mehr tunen zu können, wenn der Sender einen Parameter verändert, ihn in der NIT aber weiterhin nicht angibt?


    Hier hast du vielleicht nicht unrecht - und ich hab ehrlich gesagt an diese Möglichkeit gar nicht gedacht.

    Das würde aber umgekehrt bedeuten, das alle Parameter die nich in der NIT sind bei DVB-T2 immer auf "auto" gesetzt sein müssten.

    ---

    Ich zuvor versucht meinem Astrometa DVB-T2/DAB USB-Stick zu verwirren und die Parameter von Modulation, Coderate, Inversion auf verschiedeste unmögliche Werte gesetzt.

    Zu meiner Überraschung hat das aber keine Auswirkung, es gab immer wieder einen Lock auf den Sender. Ich nehme an, das der Demodulator von sich aus versucht die richtigen Parameter zu finden. und daher wären Änderungen durch den Provider auch ohne Folgen. Vielleicht kann das jemand mit anderer Hardware auch bestätigen.
    ---

    Ich habe den Patch übrigens etwas adaptiert - er werden nur Sender mit der gleichen Stream-Id aktualisiert.

    Vielleicht sollte die Aktualisierung auch nur ausgeführt werden, wenn Setup.UpdateChannels > 5 ist.


    Helmut

  • Wenn die tatsächlichen Werte nur für die Berechnung der Signalstärke und -qualität benötigt werden, dann wäre es doch sinnvoller, diese in den Funktionen cDvbTuner::GetSignalStrength() bzw. cDvbTuner::GetSignalQuality() zu holen, oder?


    Klaus

  • Wenn die tatsächlichen Werte nur für die Berechnung der Signalstärke und -qualität benötigt werden, dann wäre es doch sinnvoller, diese in den Funktionen cDvbTuner::GetSignalStrength() bzw. cDvbTuner::GetSignalQuality() zu holen, oder?


    Ja natürlich, es würde dafür vollkommen genügen.
    Der Vorteil die tatsächlich eingestellten Parameter "permanent" in die Kanalliste zu übernehmen ist für mich der, dass man z.B. über femon-plugin diese Info auch angezeigt bekommt.


    Die aktuellen DVB-T2 Teiber verwenden übrigens nur die Parameter "Bandbreite" und "Stream-ID", alle übrigen Einstellungen werden offenbar vom Demodulator direkt aus dem TS-Signal ermittelt und ev. vorhandene Einträge in der channels.conf haben auf das Tuning keinen Einfluss.


    Helmut
     

  • ...and a reminder that any Nordig specific implementation should be hidden behind a proper standard compliance: Setup.StandardCompliance==STANDARD_NORDIG

    May be a dumb question (i do not have much knowledge of compliance regulations) - what should be the meaning of this setup entry and why should it be implemented ? Is the intension to conditionaly execute some parts of code or is it only informational ?

    As far as i know this is an open Standard and free to use.


    Beside this, only the usage of some code-fragments or algos does not automaticaly make it complient to anything. So this setup entry could be missleading.


    Helmut

  • Hi Helmut,


    Rolf is absolutely correct here, if parts of Nordig standard are used somewhere in VDR (or its Plugins), those parts should be hidden behind a setup switch (with a default to not using them!) or a country code setting.

    Especially, because they are not used in Germany. VDR should be based *only* on the DVB standards otherwise.


    Nordig is used in Denmark, Finland, Iceland, Norway and Sweden - nowhere else.


    Beside that, i think this one is wrong:

    "Die aktuellen DVB-T2 Teiber verwenden übrigens nur die Parameter "Bandbreite" und "Stream-ID", alle übrigen Einstellungen werden offenbar vom Demodulator direkt aus dem TS-Signal ermittelt"


    It depends on your demodulator hardware in use, known demod register values (and therefore NDAs for driver developers) and the specific driver implementation in use. This behaviour may also change between driver versions or driver compilations (vendor vs linux main tree). Implementing such a behaviour in VDR that may use *wrong* tuning settings may break tuning or cause undefined behaviour. For most demods 'AUTO' or correct settings as default should be ok - nothing else. And AUTO may be unsupported. Its not to be expected in a software, that a demod with wrong settings still works.

  • Hallo wirbel,

    Rolf is absolutely correct here,

    yes, my fault - i should have (re-)read the vdr documentation before asking questions.

    But is the SSI/SQI representation really country-specific? And if, is there any DVB complient way to do this?

    Implementing such a behaviour in VDR that may use *wrong* tuning settings may break tuning or cause undefined behaviour.

    You are right. I only checked the T2 drivers in the current kernel sources. That is a too simple sight.

    It is the best i leave channel config untouched and implement the FE_GET_PROPERTY ioctl's at the places where they are needed.


    Thank's for your explanations.

    Helmut

  • Zitat

    But is the SSI/SQI representation really country-specific?


    I guess this is not specified at all in DVB specs, as such calculations require for terrestrial transmissions a few design choices which are specific to local requirements.

  • Well, you were referring to Nordig standard earlier.

    Yes, but only to explain from where i have my "wisdom". In the meantime i understand your generally reminder about Nordig. Thank you.

    such calculations require for terrestrial transmissions a few design choices which are specific to local requirements.

    Sounds more complicated than i thought (and looks so easy at Nordig).


    Anyway, as the current vdr supports DVB API 5 (i upgraded from vdr-2.2.0 only 2 or 3 month ago) i thought it was the right time to implement more general and hardware independent SSI/SQI indicators. But the missing, but required transponder parameters for DVB-T2 leaded to the start of this thread.


    Is it usus to remove improper attachments from the thread or can they still remain?


    Helmut


    BTW: if Rolf does'n mind, we could switch back to german.

  • HelmutB : falls du vor hast, entsprechende Änderungen in cDvbTuner::GetSignalStrength() bzw. cDvbTuner::GetSignalQuality() zu machen, wäre es gut, wenn du mir den Patch bald schicken würdest, da ich mich im "Endspurt" zur Version 2.3.9 - und damit zur 2.4.0 - befinde, und das dann ganz gerne noch mit reinnehmen würde.


    Klaus