![]() |
|
Suma de prueba |
|
|
Si la longitud del mensaje es inferior a 100 bytes, la suma s0 se calculará a partir de los bytes de todo el paquete. Si el mensaje contiene 100 o más bytes, s0 se calculará a partir del primero y los últimos 50 bytes del mensaje.
En ambos casos el byte de suma de prueba (checksum) debe inicializarse con 0. La suma de prueba se calcula para
checksum = 0xff - s0
unsigned char checksum( const unsigned char* payload, unsigned int payloadLength ) const { unsigned char s0 = 0;
if( payloadLength < 100 ) { for( int i = 0; i < payloadLength; ++i ) { s0 += payload[i]; } } else { for( int i = 0; i < 50; ++i ) { s0 += payload[i]; } for( int i = payloadLength-1; i >= payloadLength - 50; --i ) { s0 += payload[i]; } }
return ( 0xFF - s0 ); }
Para verificar si el paquete ha sido transmitido correctamente, los bytes de todo el mensaje serán acumulados al byte de suma s1 si la longitud del mensaje es inferior a 100 bytes. Si contiene 100 bytes o más, s1 se calcula a partir del primero y los últimos 50 bytes del mensaje.
El paquete es correcto si
s1 = 0xFF |