ich habe für das S.N.A.P. Protocoll von hth.com eine serielle Übertragung geschrieben.
Nur habe ich Fehler in der Checksummenberechnung.
Laut Doc. soll für den String "SNAP " die Checksumme 0x11 herauskommen.
Laut Doc. soll für den String "SNAP " die Checksumme 0xb2 herauskommen.
Meine Routine gibt aber 0xe und 0x6 raus.
Hier der Code:
Code: Alles auswählen
unsigned char SNAP_Serial::getCheckSum8BitCRC_CITT ( unsigned char *pointer )
{
unsigned char crcPolynominal = 0x18; // X^8+X^5+X^4+1
unsigned char crc = 0x0;
int Size;
Size = 4; // zu Testzwecken drin, da ich hard "SNAP" und "snap" übergebe
for (int i = 0; i < Size ; i++ )
{
crc = crc ^ *( pointer + ( long ) i );
for ( int j = 0; j < 8; j++ )
{
if ( crc & (unsigned char) 0x1 )
crc = ( crc >> 1 ) ^ crcPolynominal;
else
crc = ( crc >> 1 );
}
}
return ( crc );
}
Und laut Wiki Seite ist dieser Code wohl richtig. Nicht der schnellste (da keine Tabelle verwendet wird), aber das wäre danach dran, wenn nötig.
Gruss R.