Tuner Signalwerte via neuem API ermitteln

  • Scheint wohl am Treiber zu liegen.

    Mit einem anderen Treiber gibt dvb-fe-tool folgendes aus:

    BTW:
    Was ist das für eine Frequenz?

    Code
    FREQUENCY = 4293575296
  • Ich hab das jetzt mal eingebaut (siehe Patch).
    Für Debug-Ausgaben können die Zeilen

    //#define DEBUG_SIGNALSTRENGTH
    //#define DEBUG_SIGNALQUALITY

    aktiviert werden.

    ....

    Wohin gehen die Debug-Ausgaben? Ich habe es mal aktiviert, aber im Syslog sehe ich keinen Unterschied. :(

  • Bis der Bug im Treiber gefixt ist

    Hast du Ralph schon informiert?
    Oder mag nst aktiv werden? :O
    Oder soll ich was tun (obwohl ich mich da wieder erst einarbeiten müsste)? :angst

    LG,
    Jasmin

    VDR Info

    VDR1: yaVDR 0.6.1, MSI 785GTM-E45 mit AMD Sempron 140, 1GB RAM, ASUS EN210/512MB, Disk 1TB, Attric, Cine S2 6.5 mit CI, ddci2 1.0.5, VDR 2.3.8 Test Version
    VDR2: yaVDR 0.6.1, ASUS P8H77-V LE mit Intel Pentium G2120, 4GB RAM, ASUS GT610/2GB, Disk 4TB, Y.A.R.D.2, Octopus Twin CI + DuoFlex S2 + Duoflex S2 v4 mit CI, ddci2 1.0.5, VDR 2.2.0

    Plugins: |ddci2 CI-Support für DD/L4M für VDR 2.x.y |
    Treiber: |dddvb-linux-kernel Linux kernel tree with integrated DDDVB driver package |
    Treiber DKMS: |media-build-dkms DKMS for the above mentioned drivers (Forum) |

  • Die Debug-Ausgaben gehen nach stderr.

    Bis der Bug im Treiber gefixt ist kannst du in cDvbTuner::GetSignalStrength() vor Zeile 614 ("return Signal;") folgendes einfügen:

    if (Signal > 0) Signal = -Signal;

    Klaus

    Damit sieht es dann so aus:

    [Blocked Image: http://imagizer.imageshack.us/v2/280x200q90/924/GA6BRw.jpg]

    Code
    vdr01_64 ~ # dvb-fe-tool -a1 -m -c5
    WARNING  Ignoring device /dev/dvb/adapter0/ci0
    WARNING  Ignoring device /dev/dvb/adapter0/ci1
    Lock   (0x1f) Signal= -9,32dBm C/N= 14,60dB postBER= 0
    Lock   (0x1f) Signal= -9,32dBm C/N= 14,50dB postBER= 0
    Lock   (0x1f) Signal= -9,32dBm C/N= 14,50dB postBER= 0
    Lock   (0x1f) Signal= -9,32dBm C/N= 14,50dB postBER= 0
    Lock   (0x1f) Signal= -9,32dBm C/N= 14,60dB postBER= 0
    ERROR    FE_SET_VOLTAGE: Die Operation ist nicht erlaubt
    vdr01_64 ~ #
  • der workaround müßte in dB1000toPercent() oder vor den Aufruf von db1000toPercent, z.B. so
    Am Ende vor dem return fügt das sonst einen neuen Bug ein, falls scale == FE_SCALE_RELATIVE.


    +int dB1000toPercent(int dB1000, int Low, int High)
    +{
    + if (dB1000 > 0)
    + dB1000 = - dB1000;
    +
    + // Convert the given value, which is in 1/1000 dBm, to a percentage in the
    + // range 0..100. Anything below Low is considered 0%, and anything above
    + // High counts as 100%.
    + if (dB1000 < Low)

    Und der Treiber gibt einen 64bit signed anstelle von int (32bit) zurück.
    Wäre sicherer wenn diese Funktion mit int64_t arbeitet.

    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler


    to spoil
    verderben
    beschädigen
    plündern
    behindern
    berauben
    vereiteln
    rauben
    zerstören [fig.] [verderben, verunstalten]
    vergällen
    verhageln [fig.]

  • Sollte es in dem Patch von Klaus nicht "if (Signal < 0)" heißen. Oder gleich Signal = abs(Signal) ?

    VDR: Thermaltake DH102, Asus M3N78-PRO AMD 4850e, GT 220 passiv, 1x Mystique SaTiX-S2 Dual

  • Ok, der Wert scheint negativ zu sein, also Signal = - abs(Signal)

    VDR: Thermaltake DH102, Asus M3N78-PRO AMD 4850e, GT 220 passiv, 1x Mystique SaTiX-S2 Dual

  • Man sollte einfach nicht unter Alkoholeinfluß Code schreiben ;-).

    Was ich hier geschrieben hatte war natürlich Quatsch, denn damit wird ja der Prozentwert invertiert.

    In dB1000toPercent macht es aber auch keinen Sinn, da das für CNR auch mit positiven Werten aufgerufen wird.

    Das hier sollte ein gangbarer Workaround sein:

    Klaus


  • Nur um Verwirrung zu vermeiden: der Nutzer nst ist seit einiger Zeit daran die Treiber für die aktuellen DD Karten in den Kernel zu bringen: Treiber der Cine-CTv6/DDBridge/CI in den Kernel integrieren

    Meine VDRs

    VDR 1: Intel DH67BL, Celeron 540, 4 GB Ram, POV Geforce GT 1030, Ubuntu 24.04 (yavdr-ansible), VDR 2.7.4, CIR-Empfänger
    VDR 2: Acer Revo 3610, Pinnacle PCTV SAT 452e, Medion X10, yaVDR 0.6
    Client 1: Raspberry Pi 2, Ubuntu 22.04 (yavdr-ansible), VDR 2.6.1

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hast du Ralph schon informiert?
    Oder mag nst aktiv werden? :O


    Ralph wird passende Register-Doku (dürfte am interessantesten sein), passende Hardware und 'ne DVB-S(2) Empfangsanlage haben, und ist obendrein Autor des Codes, das sollte von ihm gefixt werden.

    Ich kann hier nicht viel machen, ausser Probleme mit der Code-Logik zu flicken, nehme aber gerne Patches in Form von Pullrequests via GitHub in die Kernel-Sourcen mit (das einsortieren in alle betroffenen Branches mache ich dann schon). Als Tipp - Wer das Thema verfolgen mag:
    drivers/media/dvb-frontends/stv0910.c: static int read_signal_strength(...) ermittelt und liefert die SIgnalstärke. Da gibts aktuell noch ein Vorzeichenproblem, welches dieser Commit fixen könnte, das müsste aber jemand anderes mit passender Hardware verifizieren.

    Server: Gigabyte P35-DS4, Intel Core2Duo E6850, 4GB DDR2-RAM (Headless), Gentoo Linux x86_64 / Kernel 4.16.7 / DD CineCTv6+DuoFlex C/T/T2+DuoFlex C/C2/T/T2 w/Kernel Stock Drivers / TVHeadend-GIT-3356759d8

    HTPC: ASRock J5005-ITX (Intel Pentium Silver J5005, 1.5GHz), 8GB SO-DDR4, Intel UHD Graphics 605 in Antec Fusion Remote Black+SoundGraph iMON LCD ( 0038 ), Kodi v18 Leia
    SW: Kodi Krypton+Leia auf allerlei Gerätchen (HTPC: VAAPI+HD-Audio+LCDproc addon / Ubuntu Bionic 18.04 (x86_64), RPi2, NVIDIA Shield Android TV, Wetek Play 1@LibreELEC/NAND, Tablets, Smartphones, Win/Mac/Linux Desktops)

  • >> Das hier sollte ein gangbarer Workaround sein:

    Du müsstest das erste Argument von dB1000toPercent invertieren, nicht das Ergebnis, ansonsten laufen diese Vergleiche ins Leere:

    + if (dB1000 < Low)
    + return 0;
    + if (dB1000 > High)
    + return 100;

    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler


    to spoil
    verderben
    beschädigen
    plündern
    behindern
    berauben
    vereiteln
    rauben
    zerstören [fig.] [verderben, verunstalten]
    vergällen
    verhageln [fig.]

  • O Mann, manchmal ist das Brett vorm Kopf einfach zu dick ;-).

    Klaus

  • Das ist 1:1 die Lösung die ich vorgeschlagen hätte..

    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler


    to spoil
    verderben
    beschädigen
    plündern
    behindern
    berauben
    vereiteln
    rauben
    zerstören [fig.] [verderben, verunstalten]
    vergällen
    verhageln [fig.]

  • Nur bauen lässt sich der VDR mit dem letzten Patch nicht mehr. :(

    Code
    vdr01_64 vdr-2.3.3 # make
    g++ -Werror=overloaded-virtual -Wno-parentheses -march=core-avx2 -O2 -pipe -g -ggdb -O0 -D__STDC_CONSTANT_MACROS -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -fPIC -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DREMOTE_KBD -DLIRC_DEVICE="/var/run/lirc/lircd" -DVIDEODIR="/video" -DCONFDIR="/etc/vdr" -DARGSDIR="/etc/vdr/conf.d" -DCACHEDIR="/var/cache/vdr" -DRESDIR="/etc/vdr" -DPLUGINDIR="/usr/lib/vdr/plugins" -DLOCDIR="/etc/vdr/locale" -I/usr/include/freetype2 -I/usr/include/linux/dvb -o dvbdevice.o dvbdevice.c
    dvbdevice.c: In Elementfunktion »int cDvbTuner::GetSignalStrength() const«:
    dvbdevice.c:602:113: Fehler: expected »)« before »;« token
                case FE_SCALE_DECIBEL:  Signal = dB1000toPercent(-(abs(Props[0].u.st.stat[0].svalue), -95000, -20000); // TODO use different values for DVB-S, -T, -C?
                                                                                                                     ^
    make: *** [Makefile:124: dvbdevice.o] Fehler 1
    vdr01_64 vdr-2.3.3 #
  • Nur bauen lässt sich der VDR mit dem letzten Patch nicht mehr.

    Ich vermute, hinter .svalue fehlt eine zweite "runde Klammer zu".


    CafeDelMar

    EDIT: Also so:

    Code
    --- dvbdevice.c 2017-04-06 19:02:35.000000000 +0200+++ dvbdevice.c 2017-04-08 20:07:02.971746204 +0200
    @@ -599,7 +599,7 @@
           int Signal = 0;;
           if (Props[0].u.st.len > 0) {
              switch (Props[0].u.st.stat[0].scale) {
    -           case FE_SCALE_DECIBEL:  Signal = dB1000toPercent(Props[0].u.st.stat[0].svalue, -95000, -20000); // TODO use different values for DVB-S, -T, -C?
    +           case FE_SCALE_DECIBEL:  Signal = dB1000toPercent(-(abs(Props[0].u.st.stat[0].svalue)), -95000, -20000); // TODO use different values for DVB-S, -T, -C?
                                        break;
                case FE_SCALE_RELATIVE: Signal = 100 * Props[0].u.st.stat[0].uvalue / 0xFFFF;                                     break;
  • Zu funktionieren schneit es aber: ;)

    [Blocked Image: http://imagizer.imageshack.us/v2/280x200q90/922/YAMfdu.jpg]

    dvb-fe-tool -v -a1 -f0 -m -c5
  • Streng genommen ist die öffnende Klammer vor dem 'abs' eine zuviel.
    Diesmal aber auch hier testweise übersetzt:


    Sorry, hatte das nur nebenbei mit einem Auge schnell hingekritzelt und nicht selber ausprobiert - sollte man nicht machen...

    Klaus

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!