Posts by Basic.Master

    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
    Slot 1: ==> Date Time (4)
     	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.