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

  • 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


  • Damit sieht es dann so aus:


    [Blockierte Grafik: 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.

  • 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

  • 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

    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;

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



    Klaus

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

  • 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: ;)


    [Blockierte Grafik: http://imagizer.imageshack.us/v2/280x200q90/922/YAMfdu.jpg]


  • 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

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!