Suma de prueba

Previous  home  Next   

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