Zum Inhalt

Arinc429ScreenBuffer.BuildDifferentialMessage

Eigenschaft Wert
Modul Inet
Klasse Arinc429ScreenBuffer
Typ Function
Sichtbarkeit Public
Datei Inet/Arinc429ScreenBuffer.vb

Beschreibung

Erstellt die differentielle Binaernachricht im VB6 PageHandle.cls-Format, die nur den geaenderten Bereich des Bildschirmpuffers enthaelt. Der 18-Byte-Header beinhaltet Magic-Bytes ("EF"), die Captain/FO-Kennung (0x76 bzw. 0x7A), die Startposition und die Anzahl der Aenderungen. Danach folgen die CNTRL-Bytes und Zeichenbytes des geaenderten Bereichs. Bei keinen ausstehenden Aenderungen wird ein leeres Array zurueckgegeben.

Signatur

Public Function BuildDifferentialMessage(isCaptain As Boolean) As Byte()

Parameter

Name Typ Beschreibung Standard
isCaptain Boolean True fuer Captain-MCDU (Byte 2 = 0x76), False fuer FO-MCDU (Byte 2 = 0x7A) --

Rueckgabewert

Typ Beschreibung
Byte() Binaere Nachricht (18 + 2*changeCount Bytes) bereit fuer Arinc429UdpSender.SendMessage; leeres Array wenn keine Aenderungen

Ablaufdiagramm

flowchart TD
    A[Start] --> B{"HasChanges()?"}
    B -- Nein --> C["Return leeres Array"]
    B -- Ja --> D["changeCount = _lastChange - _firstChange + 1"]
    D --> E["totalLength = 18 + 2 * changeCount"]
    E --> F["18-Byte Header schreiben: Magic, CPT/FO-Byte, Startpos, Count"]
    F --> G["CNTRL-Bytes ab Index 18 kopieren"]
    G --> H["Char-Bytes ab Index 18+changeCount kopieren"]
    H --> I["Logger.Trace mit Nachrichtendetails"]
    I --> J["Return message"]
    C --> K[Ende]
    J --> K

Aufgerufen von

Modul Sub/Function Kontext
Mcdu McduActor.RenderActivePage Erzeugt die Binaernachricht nach dem Seitenrendering fuer den UDP-Versand

Ruft auf

Modul Sub/Function Kontext
Inet Arinc429ScreenBuffer.HasChanges Prueft ob Aenderungen vorliegen
System Array.Copy Kopiert CNTRL- und Zeichenbytes in die Nachricht
NLog Logger.Trace Protokolliert Nachrichtendetails

Beispiel

Dim buffer As New Arinc429ScreenBuffer()

' Einige Zeichen schreiben
buffer.WriteString(0, 0, "INIT A", McduColor.White, McduFont.Large)

' Differentielle Nachricht fuer Captain-MCDU erstellen
Dim msg As Byte() = buffer.BuildDifferentialMessage(isCaptain:=True)
' msg enthaelt 18 + 2*6 = 30 Bytes (Header + 6 CNTRL + 6 Char)

' Nach Versand Dirty-Range zuruecksetzen
buffer.ResetDirtyRange()

Aenderungshistorie

Version Datum Aenderung
1.0 2026-04-16 Erstdokumentation