Neue Struktur für NetCeiver Software

  • Mein Vorschlag sollte keine Änderung des Verhaltens verursachen, sondern lediglich die Warnung entfernen.


    Die Warnung kommt, weil die Definition von "true" geändert wird.

    Man muss lediglich die alten Definitionen entfernen und nicht einfach "drüber" definieren, ist man die Warnungen los. (War bei mir zumindest immer der Fall.)


    Es fehlt IMHO also nur ein #undef vor dem erneuten #define.

    Und das #ifdef davor ist nur zur Sicherheit, falls sich mal was ändert und es nicht definiert sein sollte.

    Gruss
    SHF


  • Vielleicht ist das eine gute Gelegenheit das mal als Issue für die Library zu führen. Ich finde die optimale Lösung wäre wenn man die defines durch ein Include von stdbool.h ersetzen könnte. Im Prinzip könnte ich auch mal einen Branch so vorbereiten zum Testen.


    Wenn das "bool" nur für logische Operationen genutzt wird, dann ist der Wert von "true" nämlich eigentlich egal. Außerdem müsste man erstmal prüfen ob "!false" nicht auch eine "1" ist. Oft ist das so. Ich erinnere mich da aber noch an gewisse BASIC Dialekte zurück wo "true" tatsächlich mit "-1" belegt war.

  • Mal ein paar Gedanken zu dem "bool"-Thema. Ich hab grad mal ein bisschen durch den Sourcecode gegrept und es scheint als wären das die einzigen drei "bool" die in "libnetceiver" genutzt werden: https://github.com/vdr-project…62888/lib/mld.h#L285-L288


    Und: Soweit ich das beurteilen kann werden die im Sourcecode gar nicht belegt. Was ich allerdings jetzt auf die Schnelle nicht beurteilen kann, ist, ob die Struktur "conf" irgendwo im Protokoll binär über's Netz geht. Wenn dem so ist, dann wäre die Abfolge der Bytes kritisch. Wenn nicht, dann könnte man die drei "bool" einfach rauslöschen. In jedem Fall sollte es aber gehen die drei statt mit "bool" mit "int" zu deklarieren. Die Abfolge würde sich dabei nicht ändern und wie gesagt: Im Code werden die drei ohnehin nicht genutzt.


    Eigentlich hatte ich gar nicht vor "libmcli" so tief zu analysieren. Idee war eigentlich: Lass mal so viel wie möglich auf dem Stand "never touch a running system".


  • Qualifiziert bestenfalls als "übler Hack" aber libnetceiver kompiliert nach wie vor und die doppelten Definitionen sind so definitiv raus.


    Die struct behält so erstmal das gleiche Layout. Die fraglichen Einträge habe ich aber bewusst auch umbenannt damit man merkt ob doch irgendwer darauf zugreift.


    netcv2dvbip kompiliert so sicher nicht mehr, aber da hab ich keine Schmerzen damit an den richtigen Stellen einfach "stdbool.h" zu includen.


    FALLS die Bytefolge in der struct kritisch sein SOLLTE, dann wäre hier (in mld.h) "stdbool.h" keine Option. Das "bool" aus "stdbool.h" ist ein Byte lang während in mld.h auf "int" definiert wurde (was 4 Byte lang ist).

  • fein fein -- habe ich mal getestet - jetzt bauen auch die /tools hier auch aus den Root-Verzeichnis

    Warning gibts aber immer noch viele :/ :S 8)

    (VDR) NUC11PAH & GEEKOM MINI-IT11-11. Generation * BM2LTS * DD NET S2 Max * NC * (Sound) Cinebar Lux Set * (Stream) Apple TV 4K (2022) *

    (Light) PHILIPS Hue Play HDMI Sync Box & Gradient Lightstrip * (OLED TV) LG OLED65G29LA

  • Teste mal den aktuellen Stand. Ja, ich hab leider tatsächlich noch so ein "#define bool" übersehen. In der Version 0.0.5 sollten jetzt aber alle raus sein.


    Bis auf die eine Stelle, an der ich nicht sicher bin wegen der "struct" wird aktuell kein "bool" intern genutzt und ich sehe keinen Grund wozu eine "Treiber-Library" so eine Definition mitbringen sollte. Ich fixe dann später noch "netcv2dvbip". Das baut nämlich fest auf diese eingebauten "bool-Typen" und braucht jetzt eine Anpassung.

  • :) :)  :thumbup:

    (VDR) NUC11PAH & GEEKOM MINI-IT11-11. Generation * BM2LTS * DD NET S2 Max * NC * (Sound) Cinebar Lux Set * (Stream) Apple TV 4K (2022) *

    (Light) PHILIPS Hue Play HDMI Sync Box & Gradient Lightstrip * (OLED TV) LG OLED65G29LA

  • An "netcv2dvbip" musste ich nichtmal etwas anpassen. Dort wird ein C++-Compiler genutzt welcher einen "bool"-Datentyp dann schon mitbringt. Neu definiert wird "bool" trotzdem: https://github.com/vdr-project…ip/blob/master/misc.h#L10 Aber an der Stelle frage ich jetzt nicht mehr nach dem Grund. Die "warning" ist mir an der Stelle dann lange gut. Davon abgesehen das es beim Kompilieren des Projekts ohnehin auch andere (gravierendere) Warnungen wirft.

  • Hmm, 'bool' in C-code zu verwenden ist so eine Art von Vergehen. Warum 'C', wenn man doch eher den Luxus von C++ möchte?


    Wenn man das möchte, dann ist der Wechsel auf C++ sinnvoller.

    Ansonsten bleibt man bei den fast gleichen Integer Konstrukten, die ebenso gut lesbar sind (-> kein inhaltlicher Nachteil!).


    Oder erfordert im Makefile C99 (im Fall von gcc ja eher höher, weil es dort den Sprung auf C11 mit gcc-5.5(?) gab) plus stdbool.h, was alle aktuellen compiler kennen, und denkt daran, dass im Hintergrund _Bool anstelle von bool gemeint ist und 'true' und 'false' ebenso nur #define's sind. Was passiert, wenn ein solches #define true bei einem Compiler (plus pre processor) gar nicht definiert ist??


    Code
    #if true
       // (foo bar)
    #endif

    Falls hier 'true' nicht definiert ist, ergibt sich ein ganz kleiner Wechsel des Programm Ablaufes...



    Aus so einem Konstrukt Daten mit einem selbstdefinierten "bool" zu einem Zweitrechner zu senden/empfangen macht dann die Sache um so schlimmer.



    Aber das kennen wir doch alltäglich von unendlichen Zeichenkodierungen. UTF-8 vs ISO8859.....

  • Ich habe gestern zu kompliziert gedacht, (!0) muss einen festen Integerwert ergeben, sonst ginge int i=(!0); nicht.


    Meine gestrige Vermutung der Autor wollte das Verhalten von if (i) und if (i == true) angleichen, ist falsch. Das kann nie gehen, da true ja nur ein Integerzahlenwert ist.


    (!0) ist 1. Das sagt schon mein ganz altes C-Buch, das sollte also eigentlich mit jedem Compiler gehen.

    D.h. die Definition ist mit der in der stdbool.h faktisch identisch, man kann also einfach auf stdbool.h umstellen.


    Wirklich geschickt ist die Definition !false aber nicht, das ist zumindest unnötig verwirrend. Und nachher hat man dann doch auf irgend einem exotischen System Ärger ...


    ... was aber auch für das #ifdef true und #ifdef false gilt.

    Es funktioniert bei mir wie es soll. Aber wenn man es mit einem Tag Abstand sieht, sieht es echt schräg aus.

    Gruss
    SHF


  • Leider funktionieren die Netceiver Tools im Zusammenhang mit lftp nicht mehr.

    Könnt ihr Wissenden bitte mal einen Blick drauf werfen...

    Ich vermute dass entweder Änderungen am default Verhalten von lftp oder Ubuntu oder der Umbau an mcli, zur "Disfunktion" der Netceivertools geführt haben.


    Liebe Grüße g ;)

    NCV6dvbS2+Alphacrypt+ORF, BM2LTS4.4 NUC11i3 NVMe+HDD, BM2LTS2.94.4 AVG1 T7400 SSD+HDD NvidiaGT720

  • Leider funktionieren die Netceiver Tools im Zusammenhang mit lftp nicht mehr.

    Könnt ihr Wissenden bitte mal einen Blick drauf werfen...

    Ich vermute dass entweder Änderungen am default Verhalten von lftp oder Ubuntu oder der Umbau an mcli, zur "Disfunktion" der Netceivertools geführt haben.


    das war der letzte Stand


    (VDR) NUC11PAH & GEEKOM MINI-IT11-11. Generation * BM2LTS * DD NET S2 Max * NC * (Sound) Cinebar Lux Set * (Stream) Apple TV 4K (2022) *

    (Light) PHILIPS Hue Play HDMI Sync Box & Gradient Lightstrip * (OLED TV) LG OLED65G29LA

  • Was "lftp" hier bemängelt ist ja eigentlich recht klar kommuniziert. Scheinbar ist es möglich lftp ohne IPv6 zu kompilieren, was hier auch getan wurde. Auf jeden Fall ist IPv6 bis in den FTP Client zwingend erforderlich. Der NetCeiver hat ausschließlich eine IPv6-Adresse.


    Es gab auch weitere Probleme mit lftp weshalb mehr oder weniger der empfohlene Client letztlich wieder tnftp war. Der muss aber auch zwingend so konfiguriert sein das er IPv6 unterstützt. Ich hatte das bei Arch vor vielen Jahren mal als Bug gemeldet, was ignoriert wurde. Aus diesem Grund gibt es für Arch https://aur.archlinux.org/packages/tnftp6


    Viel weiter werde ich aber nicht helfen können. Ich hatte nochmal Zeit in das Netceiver-Thema gesteckt weil ein guter Freund von mir einen voll ausgestatteten NetCeiver gekauft hat und wir den irgendwie sauber nutzbar machen wollten. Das hat auch halbwegs funktioniert aber dann ist der NetCeiver plötzlich komplett ausgefallen. Auch die LEDs geben keine Auskunft. Das Ding ist einfach mausetot ohne feststellbare Ursache. Nachdem jetzt schon so viel Zeit in das Thema geflossen ist, war mein Vorschlag er soll sich bei Kleinanzeigen oder so nach einer neuen Hauptplatine umschauen in die man die 3 Doppeltuner stecken könnte. Ob er den Weg geht weiß ich nicht. Eventuell wäre es hier auch an der Zeit auf etwas "modernes" zu wechseln.

  • Danke. Es gibt sicher noch NCVs zu kaufen. Ich könnte ev. Kontakt herstellen. Was am NCV f. mich einfach 1a ist, ist die Multitransponerunterstüzung, womit man so wie wir ÖSIs einfach die ORF KArte in ein CAM in den NCV steckt und alle Clients die Streams dekodiert bekommen.


    Zurück zum lftp. D.h. cinfo muss "nur" den IPV6 support beim builden berücksichtigen ?

    Liebe Grüße g ;)

    NCV6dvbS2+Alphacrypt+ORF, BM2LTS4.4 NUC11i3 NVMe+HDD, BM2LTS2.94.4 AVG1 T7400 SSD+HDD NvidiaGT720

  • Zurück zum lftp. D.h. cinfo muss "nur" den IPV6 support beim builden berücksichtigen ?


    Wie macht man das?

    (VDR) NUC11PAH & GEEKOM MINI-IT11-11. Generation * BM2LTS * DD NET S2 Max * NC * (Sound) Cinebar Lux Set * (Stream) Apple TV 4K (2022) *

    (Light) PHILIPS Hue Play HDMI Sync Box & Gradient Lightstrip * (OLED TV) LG OLED65G29LA

  • M-Reimer

    - was müsste bitte geändert werden um bei LFTP IPv6 support zu bekommen

    - Weshalb trägt mcli 9 devices ein. im mcli.conf sind 3 eingetregen und der Netceiver hat insg. 6

    setup.conf: PrimaryDVB = 9


    Liebe Grüße g ;)

    NCV6dvbS2+Alphacrypt+ORF, BM2LTS4.4 NUC11i3 NVMe+HDD, BM2LTS2.94.4 AVG1 T7400 SSD+HDD NvidiaGT720

  • Ich hatte den NetCeiver bei einem guten Kumpel, der 30 km entfernt wohnt, in Betrieb gehabt. Ich hab den mit Hilfe hier aus dem Board irgendwie zum Laufen gebracht. Zunächst mit minisatip und dann mit gleichen Einstellungen mit dem mcli Plugin. Meine Möglichkeiten, noch etwas nachzuvollziehen, tendieren aber gegen Null. Wie schon erwähnt habe ich keinen funktionsfähigen NetCeiver mehr. Ich selber habe und hatte nie Interesse am NetCeiver. Das war eine Idee des Vaters meines Kumpels, welcher den NetCeiver entgegen meinen Rat dann "spontan" bestellt hatte. Bei den Preisen "guter" Sat>IP Server glaube ich am ehesten das da jetzt wieder PC-Hardware mit eingebauten Tunern hinkommt. Oder ein ARM mit PCI-Express um bestehende Tuner stecken zu können.


    Ich glaube "lftp" wurde ursprünglich eingebaut um einen "gängigeren" FTP Client zu nutzen. Allerdings gab es dann zumindest in einem Fall ein Problem das mit lftp nicht lösbar ist: https://github.com/vdr-projects/libnetceiver/issues/1


    Schon aus diesen Grund würde ich empfehlen nicht lftp sondern tnftp zu nutzen und wie der mit IPv6 konfiguriert wird steht hier: https://aur.archlinux.org/cgit…it/tree/PKGBUILD?h=tnftp6

  • ich habe s mal für das nächste Image neu gebaut mit IPv6

    (VDR) NUC11PAH & GEEKOM MINI-IT11-11. Generation * BM2LTS * DD NET S2 Max * NC * (Sound) Cinebar Lux Set * (Stream) Apple TV 4K (2022) *

    (Light) PHILIPS Hue Play HDMI Sync Box & Gradient Lightstrip * (OLED TV) LG OLED65G29LA

    Einmal editiert, zuletzt von cinfo ()

  • mcli:

    Danke M-Reimer .

    Nochmal zu den 9 registrierten mcli devices und dazu dass das Primary-DVB device nun lt. setup.conf wieder mal=9 ist.

    Damals schrieb  pbrb

    Da hat sich was im Plugin-Start geändert, so daß sich mcli nicht vordrängelt...was zu anderen Übelkeiten führen konnte...besser ist es, wenn softdevice als primary device ganz vorne steht.

    Hast du denn daran was geändert ? Weil das PrimaryDVB ist beim alten mcli 0.97 (ohne der netceiverlib) immer =1 gewesen.


    ftp: Hab hier mal kurz die Historie zusammengefasst

    Wir hatten ja den lftp eingebaut, weil der ftp die -q (timeout) Option nicht mehr unterstütz hatte. Siehe hier.

    Ab dem Zeitpunkt nutzen wir den lftp mit dem switch switch --netcvupdate-use-lftp im mcli.conf


    Dann hatte M-Reimer 2023 ein Prob bei lftp bez. der -R Option gemeldet und @Pbiering kommentiert:

    site exec reboot -d 5 has to be pushed to background by the FTP server as otherwise blocking the client. Strangewise lftp is not proper supporting "&" (it throws itself - the client - somehow in the background), but found that tnftp client is working well.


    Aktuell ist es so dass als default client tftp genutzt wird. ACHTUNG ob beim ftp die -q(timout) Option wieder funkt wissen wir nicht !

    Unten der Codeauszug von ncvupdate der 2021 wegen dem nicht mehr funktionierenden -q beim ftp zum Einbau des lftp geführt hat

    Der lftp funkt ja aktuell wegen dem IPv6 Thema aber möglicherweise auch beim -R nicht mehr.


    cinfo. Weil du oben Folgendes gepostet hast !

    configure: === Configuration results ===configure: Package: tnftpd


    Der tftp funkt ja bez. IPv6. Wir brauchen es aber beim Build des lftp.


    Hier hab ich bez lftp u IPv6 was gefunden.

    Ev. ist das der Build switch: #if INET6 && defined(HAVE_IFADDRS_H)


    oder ist das gesetzt --disable-ipv6


    und das nicht  --enable-ipv6 + IPv6 support



    Liebe Grüße g ;)

    NCV6dvbS2+Alphacrypt+ORF, BM2LTS4.4 NUC11i3 NVMe+HDD, BM2LTS2.94.4 AVG1 T7400 SSD+HDD NvidiaGT720

    13 Mal editiert, zuletzt von gggggg ()

  • wir nutzen die aktuelle Version von Lftp, diese unterstützt auch IPv6

    lftp Version (4.9.2-1build1)


    Lftp ist ein Werkzeug für das Abrufen von Dateien. Es unterstützt die Protokolle FTP, HTTP, FISH, SFTP, HTTPS, FTPS sowohl unter IPv4 als auch unter IPv6.

    (VDR) NUC11PAH & GEEKOM MINI-IT11-11. Generation * BM2LTS * DD NET S2 Max * NC * (Sound) Cinebar Lux Set * (Stream) Apple TV 4K (2022) *

    (Light) PHILIPS Hue Play HDMI Sync Box & Gradient Lightstrip * (OLED TV) LG OLED65G29LA

Jetzt mitmachen!

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