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 |