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
00001 /** crc.cpp 00002 * 00003 * @license 00004 * MIT License 00005 * 00006 * Copyright (c) 2016 Andrew D Lindsay/Thing Innovations https://thinginnovations.uk 00007 * 00008 * Permission is hereby granted, free of charge, to any person obtaining a copy 00009 * of this software and associated documentation files (the "Software"), to deal 00010 * in the Software without restriction, including without limitation the rights 00011 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 00012 * copies of the Software, and to permit persons to whom the Software is 00013 * furnished to do so, subject to the following conditions: 00014 * 00015 * The above copyright notice and this permission notice shall be included in all 00016 * copies or substantial portions of the Software. 00017 * 00018 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00019 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00020 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 00021 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00022 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00023 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 00024 * SOFTWARE. 00025 * 00026 */ 00027 #define CRC32_POLYNOMIAL 0xEDB88320L 00028 00029 void CRC32Value(unsigned long &CRCval, unsigned char c) 00030 { 00031 ///////////////////////////////////////////////////////////////////////////////////// 00032 //CRC must be initialized as zero 00033 //c is a character from the sequence that is used to form the CRC 00034 //this code is a modification of the code from the Novatel OEM615 specification 00035 ///////////////////////////////////////////////////////////////////////////////////// 00036 unsigned long ulTemp1 = ( CRCval >> 8 ) & 0x00FFFFFFL; 00037 unsigned long ulCRC = ((int) CRCval ^ c ) & 0xff ; 00038 for (int j = 8 ; j > 0; j-- ) 00039 { 00040 if ( ulCRC & 1 ) 00041 { 00042 ulCRC = ( ulCRC >> 1 ) ^ CRC32_POLYNOMIAL; 00043 } 00044 else 00045 { 00046 ulCRC >>= 1; 00047 } 00048 } 00049 CRCval = ulTemp1 ^ ulCRC; 00050 } 00051 00052 /* -------------------------------------------------------------------------- 00053 Calculates the CRC-32 of a block of data all at once 00054 //the CRC is from the complete message (header plus data) 00055 //but excluding (of course) the CRC at the end 00056 -------------------------------------------------------------------------- */ 00057 unsigned long CalculateBlockCRC32( 00058 unsigned long ulCount, /* Number of bytes in the data block */ 00059 unsigned char *ucBuffer ) /* Data block */ 00060 { 00061 ////////////////////////////////////////////////////////////////////// 00062 //the below code tests the CRC32Value procedure used in a markov form 00063 ////////////////////////////////////////////////////////////////////// 00064 unsigned long CRC = 0; 00065 for (int i = 0; i<ulCount; i++) 00066 { 00067 CRC32Value( CRC, *ucBuffer++ ); 00068 } 00069 return CRC; 00070 } 00071 00072 /* 00073 unsigned long CalculateBlockCRC32( 00074 unsigned long ulCount, 00075 unsigned char *ucBuffer ) 00076 { 00077 //////////////////////////////////////////// 00078 //original code from the OEM615 manual 00079 //////////////////////////////////////////// 00080 unsigned long ulTemp1; 00081 unsigned long ulTemp2; 00082 unsigned long ulCRC = 0; 00083 while ( ulCount-- != 0 ) 00084 { 00085 ulTemp1 = ( ulCRC >> 8 ) & 0x00FFFFFFL; 00086 ulTemp2 = CRC32Value( ((int) ulCRC ^ *ucBuffer++ ) & 0xff ); 00087 ulCRC = ulTemp1 ^ ulTemp2; 00088 } 00089 return( ulCRC ); 00090 } 00091 */
Generated on Fri Jul 15 2022 06:11:46 by
1.7.2
