[Patch] Common Interface - Ressource Date-Time - UTC-Offset abgeschnitten

  • Hallo,
    habe mich mal angemeldet, weil ich in der Implementierung der Date-Time-Ressource im CI-Host einen Bug gefunden habe:


    Wenn über die Ressource Datum/Zeit angefragt werden, antwortet der CI-Host ja mit Datum/Zeit plus dem UTC-Offset in Minuten. Das Ganze ist in einer Struktur von 7 Byte verpackt, die im VDR mit einem struct nachgebildet wird.
    Das Problem ist: Im Speicher belegt das struct dann 8 Byte, weil das 16bit-Feld für den UTC-Offset an einer 2-Byte-Grenze ausgerichtet wird; entsprechend liegt im Speicher vor diesem Feld ein zusätzliches Padding-Byte (0x7F im Beispiel unten). Nachher bei SendData werden dann 7 Byte ab struct-Anfang ausgegeben; dabei entfällt durch das Padding-Byte dann das LSB vom UTC-Offset und ein falscher Wert wird übertragen (inwiefern sich das in der Praxis auswirkt, sei mal dahingestellt).


    Beispiel:

    Code
    1. Slot 1: ==> Date Time (4)
    2. 1: --> 00 01 A0 10 01 90 02 00 04 9F 84 41 07 DD 60 17 04 38 7F 00


    Angehängt ist ein Patch, der den Bug behebt, bezogen auf die Version 2.0.5. Statt in einem struct wird die Antwort jetzt in einem Bytearray zusammengebaut.
    (Die beiden 16bit-Werte Jahr und Offset könnte man theoretisch noch vorberechnen, damit man die jeweilige Berechnung nicht pro Byte macht.)


    Edit: Die Vorberechnung ist sogar Pflicht, weil man die Variable nachher in einem Schritt einsetzen muss, damit nach htons die korrekte Bytereihenfolge zum Tragen kommt; also Version 2.
    Edit 2: Ohne Zwischenvariable geht das auch; (letzte) Version 3.

  • Danke
    Nur so rein intressehalber könnte/ist das der Auslöser für:
    http://www.vdr-portal.de/board…-wird-nicht-mehr-erkannt/


    sein ???


  • Noch einfacher müsste es doch so gehen:

    Code
    1. #pragma pack(1)
    2. struct tTime { uint16_t mjd; uint8_t h, m, s; short offset; };
    3. #pragma pack()


    Klaus


  • Nur so rein intressehalber könnte/ist das der Auslöser für:
    http://www.vdr-portal.de/board…-wird-nicht-mehr-erkannt/


    sein ???


    Das Problem dort war offensichtlich in der CAM-Firmware. Mit der V3.27 klappt es wieder anstandslos.
    Warum es allerdings bei der vorherigen FW-Version mit VDR nicht ging, mit dem TV-Gerät aber schon, kann ich mir auch nicht erklären.


    Klaus