WinTV-CI / Cinergy-USB-CI und ddci2

  • An alle die diesen USB-CI Adapter noch irgendwo herumliegen haben:


    Ich habe im Jänner ein gebrauchtes Gerät in die Hände bekommen und mich gefragt ob es auch unter Linux verwendbar ist.
    Leider nicht - wie bald festgestellt habe.
    Es hat mich aber doch interessiert wie das Ding funktioniert da es ja nicht nur unter Windows sondern auch mit EyeTV unter OSX laufen soll
    .
    Nach den Informationen und USB-Logs von hier "http://www.bsc-bvba.be/linux/dvb/", den guten Programmbeispielen von Cypress für den USB-Controller von hier "http://www.cypress.com/products/ez-usb-fx2lp" und der etwas genaueren Betrachtung der vefügbaren Windows-Treiber von Hauppauge und Terratec habe doch einiges herausgefunden und nun ein Perl-Script erstellt, das mit einen CA-Modul kommunizieren kann und am Ende das CAM-Menü darstellt.


    Wer es ausprobieren möchte, hier eine kurze Anleitung:
    ( alles läuft bei mir in einem Terminal-Fenster, vermutlich nur als root. Ich benutze Gentoo, 32-bit,
    ich habe noch kurz ein paar Kommentare in die Scripts eingefügt - leider mit einigen Schreibfehlern wie ich gerade sehe )


    1) WintvCI.tar.gz in beliebiges Verzeichis entpacken
    2) im Unterordner "firmware" das Perl-script "WintvCI_extract_firmware.pl" ausführen
    es werden insgesamt 9 firmware-files erstellt - 5 aus wintvci, 4 aus USB2CI - jeweils eine EZ-USB Code-Banker firmware
    und 3 bzw. 4 CI-firmwares für die jeweilige Hardware Revisionen
    3) In das Hauptverzeichnis "WintvCI" wechseln
    3) Wintv-CI an den USB-port anschließen und CA-Module einstecken
    4) das Script "WintvCI_load_firmware.pl" aus führen - die passende Firmware wird nun geladen
    5) nun dass Hauptprogramm "WintvCI.pl" starten


    Es laufen nun ca. 10 Sekunden die Ausgaben der REQUESTS und REPLYS zwischen CAM und Hostprogramm,
    danach sollte das CAM-Hauptmenü (MMI) aufgelistet sein.
    Nun kann mit den Tasten 0-9 ausgwählt werden,"0" bzw. alle anderen Eingaben gehen wieder eine Ebene höher bzw. beenden schliesslich das Programm.Es kann auch jederzeit mit "Ctrl-C" abgebrochen werden,
    Ich habe es mit 3 verschiedenen CAMs getestet und es lief soweit korrekt, ich habe nur einmal eine Sprache eingestellt die ich dann nicht mehr lesen konnte - also hier vielleicht nichts ändern und im Zweifelsfall mit "0" aussteigen.


    Für das tatschlche Dekodieren fehlt dem Script natürlich der echten TS-Stream der - soweit ich es verstehe - über die beiden verfügbaren Isochronen USB-Interface Endpunkte 3 und 4 geschrieben bzw. gelesen wird, sowie die entsprechenden CA_PMT Nachrichten an das CAM.
    Dazu fehlt mir aber im Augenblick das entsprechende Know-How.


    Das ganze sollte natürlich auch in einen Kenel Treiber verwandelt werden, die Funktionen der Firmware wären alle in den Perl-Scripten enthalten.
    Aber auch hier fehlt mir noch der Durchblick wie ich es richtig angehen soll.
    Vielleicht hat hier im Forum ja jemand Anregungen oder besseres Fachwissen.


    Schöne Grüße
    Helmut

  • Hi,


    sehr interessant.


    Ich hab noch irgendwo auf meinem Dachboden ein Mascom CI Programmer.
    Soweit ich weiß, sind die baugleich zu den WinTV-CI's.
    Ich werde den mal rauskramen. Wenn der kompatibel ist, würde ich dich gerne unterstützen.


    Gruß
    Karl

  • Hallo Karl,


    die beiden sripte WintvCI_load_firmware.pl und WintvCI.pl kennen nur die USB Product:Vendor IDs für die Hauppauge WIntv-ci mit 2040:1100 und für Terratec Cinergy CI mit 1BOD;5F0F.
    Wenn keine der beiden gefunden wird beenden sich die Programme.

    Wenn sich der Mascom Programmer mit anderer USB ID meldet (lsusb) ersetze probeweise die Werte.von Hauppauge mit deinen Werten (kommt in jedem script jeweisl nur einmal vor).


    LG
    Helmut

    HelmutB passed unfortunately away on July 21, 2022 ... RIP 🖤

  • Nach den Anfängen mit Perl-Scripten habe ich Sommer begonnen daraus einem Kernel Treiber zu basteln.

    Mit Hilfe des vdr-plugin-ddci2 ist es mit heute tatsächlich gelungen die HD-Programme des ORF über DVB-T2 auf meinem alten Notebook unverschlüsselt wiederzugeben.

    Der Treiber ist noch ziemlich instabil, z.B. beim Senderwechsel kommen unkorrigierbare USB-timeouts beim ca-device, aber grundsätzlich scheint es zu funktionieren.


    Ich habe jetzt nur ein paar screenshots, den Code werde ich morgen oder übermorgen hochladen.


    Die verwendete Hardware:

    Sony Vaio-SZ 1,6 Ghz, August T230 DVB-T2 USB-Stick mit Miniantenne, Wintv-USB-CI Adapter und ein SimpliTV CA-Modul.


    Falls jemand den USB-Ci Adapter nicht kennt - hier ein alter Artikel aus 2007

    https://www.pcwelt.de/news/Pay…-von-Hauppauge-80727.html

    oder hier (PDF)

    http://terratec.ultron.info/Re…_USB_TechnicalData_DE.pdf


    Vielleicht wäre dieses Thema nun in VDR-HArdware/Allgemein besser aufgehoben.

  • So, hier nun der Quellen für den Kerneltreiber.

    Es ist der Stand von Vorgestern, ich habe nur ein paar nicht verwendete Codeblöcke entfernt.

    Ich habe es auch noch einmal kurz getestet - das Umschalten von FTA zu verschlüsselt funktioniert eigentlich zuverlässig, aber genau so zuverlässig kommt es beim Zurückschalten im Control-Interface (ca) zu einem USB Timeout - immer beim Versuch von VDR die entsprechende CA_PMT Nachricht zu senden.

    Der Treiber ist noch sehr unfertig und hat sicher noch mehr Fehler als den oben beschriebenen.

    Er loggt auch relativ viel mit - das kann man derzeit nicht global ausschalten, nur an den entsprechenden Stelen auskommentieren.

    Mir ist eigentlich auch nicht ganz klar wo und wie ich die verschieden „locks“ und „waits“ richtig verwende. Vielleicht liegt es auch daran.

    Auf jeden Fall war aber selbst überrasche als ich plötzlich ein klares Bild bekommen habe.


    Vielleicht hat dazu irgendjemand eine Idee oder Anregungen.

    LG

  • Nachdem ich mich eine Zeilang mehr mit anderen Dingen beschäftigt habe hier nun ein Update des Kernel Treibers für das USB-CI.

    Um die Probleme durch blockierte Control USB-Endpunkte wegzubekommen, war das genaue Timing beim übertragender der TS-Daten herauszufinden, das hat auch etwas gedauert.

    Jetzt nach einem Kurztest sieht aber alles ganz gut aus, Kanalwechsel etc. ist nun ohne Fehler möglich.


    Im Anhang auch ein Logfile das die Infos ab dem anschließen des CI, den start des vdr und einigen Kanalwechsel (bei CA_PMT) auf verschlüsselte Kanäle zeigt.


    Helmut


    Edit:

    Das Kernel Modul heißt nun wintv-usb2ci

    Edit2:

    Ein paar Fotos wie es im Betrieb aussieht


  • Super, dass an dem Treiber doch noch weitergearbeitet wird! Hint: Mach 'n GitHub Projekt daraus, macht das Codemanagement einfacher und ermöglicht anderen, bei Problemen direkt Fixes beizusteuern. Und Du kannst immernoch über die ganzen "magischen URIs" von GitHub Code-Tarballs bereitstellen, wenn es was zu testen gibt :)

    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)

  • Bei meinen Tests mit MCD konnte ich über Sat zumindest 3 HD Programme (MPEG-2) gleichzeitig entschlüsseln - das waren wenn ich mich richtig erinnere so ca. 30 bis 35 Mbit/s.

    2 DVB-T2 HD-Programme (H.264) mit 10-15Mbit/s sind auch kein Problem.


    Das Limit nach den Angaben im USB-descriptor wären ca. 48 Mbit/s (maxPacketSize: 4*188 = 752 bytes).

    Dieses Limit könnt aber durch einen relativ einfachen Firmware Patch auch auf z.B. 60 Mbit/s angehoben werden - falls die CI-Hardware dann auch noch mitspielt.


    Helmut

  • Hier noch ein kurzer Nachtrag - ich habe inzwischen den Datendurchsatz mit einem kleinen Perl-script auch getestet und komme ziemlich gut an das Limit von 48 Mbit/s. (Script als zip im Anhang).

    Code
    gentoo2 ~/bin/wintvci # ./ci_throughput.pl
    Writing to '/dev/dvb/adapter0/sec0' in blocks of 3840 TS (721920 bytes) for 20 seconds ...
    Bitrate OUT(629760 TS): 47.23 Mbit/s
    Bitrate IN (626390 TS): 46.98 Mbit/s


    Helmut

  • Ich habe es unter anderem auch mit einer AlphaCrypt Classic 3.28, GiGa-TwinCam 1.40 und SimpltTV Irdeto (beide SMIT) getested un habe diesen Fehler noch nie gesehen.

    Im deinem Log sieht man, das der Fehler beim Read gleich nach dem Write des Configuration-Registers auftritt (mit dem das CI Interface ausgewählt wird).

    .

    Normalerweise dauert dieser WRITE_COR Befehl je nach CAM zwischen 200ms und 750ms. Dein Fehler kommt aber schon nach 64ms - also sehr wahrscheinlich bevor die Konfiguration überhaupt abgeschlossen ist.

    Ich kann es mir erst am Abend genauer ansehen, aber versuchsweise kannst du in der Funktion WriteExchange() zwischehn Write und Read eine kleine Verzögerung - z.B. 0,5s - einbauen.


    Helmut

    HelmutB passed unfortunately away on July 21, 2022 ... RIP 🖤

  • Ja, die dbox Kompatibilität gibt es in den Experten Einstellungen. EIN/AUS macht bei der Initialisierung bei mir aber keinen Unterschied.

    Könntest du noch in wintv-ci-pcmcia.c die Zeilen 80 und 81 auskommentieren und die Ausgabe posten.

    Code: wintv-ci-pcmcia.c
        memset(&c_v1,0,sizeof(c_v1));
    
        print_hex_dump(KERN_DEBUG, " CIS : ", DUMP_PREFIX_OFFSET, 16, 1,
                cis, size, 1);
    
        for (i = 0, i_todo = size; i_todo; i = i_next) {

    das sieht dann so aus:

    Code
    Jan 30 22:39:29 gentoo2 kernel: wintv_usb2ci: cam_state_set       : 04 -> 05
    Jan 30 22:39:29 gentoo2 kernel:  CIS : 00000000: 1d 04 00 db 08 ff 1c 03 00 08 ff 15 15 05 00 53  ...............S
    Jan 30 22:39:29 gentoo2 kernel:  CIS : 00000010: 43 4d 00 44 56 42 20 43 41 20 4d 6f 64 75 6c 65  CM.DVB CA Module
    Jan 30 22:39:29 gentoo2 kernel:  CIS : 00000020: 00 ff 20 04 ff ff 01 00 1a 15 01 0f fe 01 01 c0  .. .............
    Jan 30 22:39:29 gentoo2 kernel:  CIS : 00000030: 0e 41 02 44 56 42 5f 43 49 5f 56 31 2e 30 30 1b  .A.DVB_CI_V1.00.
    Jan 30 22:39:29 gentoo2 kernel:  CIS : 00000040: 11 c9 41 19 37 55 4e 5e 1d 56 aa 60 20 03 03 50  ..A.7UN^.V.` ..P
    Jan 30 22:39:29 gentoo2 kernel:  CIS : 00000050: ff ff 1b 25 cf 04 09 37 55 4d 5d 1d 56 22 c0 09  ...%...7UM].V"..
    Jan 30 22:39:29 gentoo2 kernel:  CIS : 00000060: 44 56 42 5f 48 4f 53 54 00 c1 0e 44 56 42 5f 43  DVB_HOST...DVB_C
    Jan 30 22:39:29 gentoo2 kernel:  CIS : 00000070: 49 5f 4d 4f 44 55 4c 45 00 14 00 ff              I_MODULE....
    Jan 30 22:39:29 gentoo2 kernel: wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 0: SCM

    Helmut

    HelmutB passed unfortunately away on July 21, 2022 ... RIP 🖤

  • Hi,

    hier der output

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

Jetzt mitmachen!

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