Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of CRC by
crc.cpp
- Committer:
- SomeRandomBloke
- Date:
- 2016-02-02
- Revision:
- 2:53b7db1f47ea
- Parent:
- 1:ec8513f94d23
- Child:
- 3:599d283e5a44
File content as of revision 2:53b7db1f47ea:
#define CRC32_POLYNOMIAL 0xEDB88320L
void CRC32Value(unsigned long &CRCval, unsigned char c)
{
/////////////////////////////////////////////////////////////////////////////////////
//CRC must be initialized as zero
//c is a character from the sequence that is used to form the CRC
//this code is a modification of the code from the Novatel OEM615 specification
/////////////////////////////////////////////////////////////////////////////////////
unsigned long ulTemp1 = ( CRCval >> 8 ) & 0x00FFFFFFL;
unsigned long ulCRC = ((int) CRCval ^ c ) & 0xff ;
for (int j = 8 ; j > 0; j-- )
{
if ( ulCRC & 1 )
{
ulCRC = ( ulCRC >> 1 ) ^ CRC32_POLYNOMIAL;
}
else
{
ulCRC >>= 1;
}
}
CRCval = ulTemp1 ^ ulCRC;
}
/* --------------------------------------------------------------------------
Calculates the CRC-32 of a block of data all at once
//the CRC is from the complete message (header plus data)
//but excluding (of course) the CRC at the end
-------------------------------------------------------------------------- */
unsigned long CalculateBlockCRC32(
unsigned long ulCount, /* Number of bytes in the data block */
unsigned char *ucBuffer ) /* Data block */
{
//////////////////////////////////////////////////////////////////////
//the below code tests the CRC32Value procedure used in a markov form
//////////////////////////////////////////////////////////////////////
unsigned long CRC = 0;
for (int i = 0; i<ulCount; i++)
{
CRC32Value( CRC, *ucBuffer++ );
}
return CRC;
}
/*
unsigned long CalculateBlockCRC32(
unsigned long ulCount,
unsigned char *ucBuffer )
{
////////////////////////////////////////////
//original code from the OEM615 manual
////////////////////////////////////////////
unsigned long ulTemp1;
unsigned long ulTemp2;
unsigned long ulCRC = 0;
while ( ulCount-- != 0 )
{
ulTemp1 = ( ulCRC >> 8 ) & 0x00FFFFFFL;
ulTemp2 = CRC32Value( ((int) ulCRC ^ *ucBuffer++ ) & 0xff );
ulCRC = ulTemp1 ^ ulTemp2;
}
return( ulCRC );
}
*/
