Beispiel #1
0
//! @brief Calculate crc over framing data packet.
static uint16_t calculate_framing_crc16(framing_data_packet_t * packet, const uint8_t * data)
{
    uint16_t crc16;

    // Initialize the CRC16 information
    crc16_data_t crcInfo;
    crc16_init(&crcInfo);

    // Run CRC on all header bytes besides the CRC field
    crc16_update(&crcInfo, (uint8_t *)&packet->header.startByte, sizeof(framing_data_packet_t) - sizeof(uint16_t));

    // Continue running CRC on any payload bytes
    crc16_update(&crcInfo, data, packet->length);

    // Finalize the CRC calculations
    crc16_finalize(&crcInfo, &crc16);

    return crc16;
}
Beispiel #2
0
/* mode    = 0/1/2  0=init, 1=update, 2=finalize */
uint32_t update_crc_ne(uint32_t old_crc, int crclen, void *data, int datasiz, int datalen, int mode)
{
  uint32_t seed=old_crc;
  uint32_t new_crc;
  crc16_t crc16;
  crc24_t crc24;
  crc32_t crc32;
  unsigned int mask=0 ;
  int data_len=datasiz*datalen ;
  
  new_crc = seed ;
    
  if( (*little_endian) & (datasiz>1)){  /* multibyte tokens on little endian machine */
    mask = datasiz-1 ; /* 0/1/3/7 magic mask to get stitching order count on little endian machines */
  }
  if (crclen==16) {
    crc16 = seed & 0xFFFF ;
    if(mode==0) crc16 = crc16_init() ;
    crc16 = crc16_update_le(crc16, (const unsigned char *) data, data_len, mask) ;
    if(mode==2) crc16 = crc16_finalize(crc16) ;
    new_crc = crc16 ;
  } else if (crclen==24) {
    crc24 = seed & 0xFFFFFF ;
    if(mode==0) crc24 = crc24_init() ;
    crc24 = crc24_update_le(crc24, (const unsigned char *) data, data_len, mask) ;
    if(mode==2) crc24 = crc24_finalize(crc24) ;
    new_crc = crc24 ;
  } else if (crclen==32) {
    crc32 = seed & 0xFFFFFFFF ;
    if(mode==0) crc32 = crc32_init() ;
    crc32 = crc32_update_le(crc32, (const unsigned char *) data, data_len, mask) ;
    if(mode==2) crc32 = crc32_finalize(crc32) ;
    new_crc = crc32 ;
  } else {
    new_crc = seed ;
  }
  return new_crc;
}