# Prüfsumme im Native Mode

Die Prüfsumme für die Dateiübertragung mithilfe von Native Mode-Befehlen wird über eine standardmäßige 16-Bit-CRC-Prüfung (Cyclical Redundancy Check) ermittelt. Nachfolgend ist der Algorithmus zur Berechnung der CRC-Prüfsumme aufgeführt. In diesem Beispiel handelt es sich bei der variablen CRC-Prüfsumme um eine 16-Bit-Ganzzahl ohne Vorzeichen und das Eingabe-Byte umfasst 8 Bit.

1. CRC auf 0 setzen.
2. Das nächste Byte aus dem Datenstrom abrufen.

3. Das höchstwertige Bit der CRC-Prüfsumme sowie das Eingabe-Byte vergleichen, und dann wie folgt vorgehen:

   Wenn beide gleich sind, CRC um 1 Bit nach links verschieben.

   Wenn ein Bit 0 und das andere Bit 1 ist, CRC um 1 Bit nach links verschieben und XOR-Operation mit 4129.

4. Das Eingabe-Byte um 1 Bit nach links verschieben.
5. Wenn das Eingabe-Byte nicht 8 Mal verschoben wurde, weiter bei Schritt 3.
6. Wenn im Datenstrom noch Bytes übrig sind, weiter mit Schritt 2.

Eine theoretische Erläuterung dieses Algorithmus finden Sie im Buch „Numerical Recipes in C:The Art of Scientific Computing.1 Press, William H., et al. Cambridge, MA: Cambridge University Press, 1992, 896–901“.
Nachfolgend ist eine C-Funktion aufgeführt, mit der CRC bitweise berechnet wird:

    unsigned short CalculateCRC(char* buffer, int size)
    {
      unsigned short cword = 0;
      unsigned short ch;
      int i,j;
      for (i = 0; i < size; i++) {
        ch = buffer[i] << 8;
        for (j = 0; j < 8; j++) {
          if ((ch & 0x8000) ^ (cword & 0x8000)) {
            cword = (cword << 1) ^ 4129;
          }
          else {
            cword <<= 1;
          }
          ch <<= 1;
        }
      }
      return cword;
    }

Das Vision-System berechnet die Prüfsumme einer übertragenen Datei aus den ASCII-Zeichenwerten des hexadezimalen codierten Dateiinhalts. Beispiel:

Dateiinhalt | 0xAB 0xCD 0xEF 0x01
ASCII-Darstellung | ABCDEF01
Zu überprüfende Byte-Werte | 0x41 0x42 0x43 0x44 0x45 0x46 0x30 0x31

Diese Codierung für Dateiübertragungen über Native Mode-Befehle fügt nach jeweils 80 sichtbaren Zeichen eine Sequenz aus einem Wagenrücklauf und einem Zeilenvorschub hinzu.