Fixed version not to issue warning messages. Original: Revision 26:8f15aa3b052b by Dieter Graef. https://developer.mbed.org/users/DieterGraef/code/SDFileSystem/

Dependencies:   FATFileSystem

Dependents:   F746_AudioPlayerSD F746_SD_WavPlayer F746_SD_GraphicEqualizer_ren0620 F746_SD_TextFile_RW ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers SDCRC.cpp Source File

SDCRC.cpp

00001 /* SD/MMC File System Library
00002  * Copyright (c) 2016 Neil Thiessen
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *     http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 
00017 #include "SDCRC.h"
00018 
00019 namespace SDCRC
00020 {
00021 
00022 namespace
00023 {
00024 const char m_Crc7Table[] = {
00025     0x00, 0x09, 0x12, 0x1B, 0x24, 0x2D, 0x36, 0x3F,
00026     0x48, 0x41, 0x5A, 0x53, 0x6C, 0x65, 0x7E, 0x77,
00027     0x19, 0x10, 0x0B, 0x02, 0x3D, 0x34, 0x2F, 0x26,
00028     0x51, 0x58, 0x43, 0x4A, 0x75, 0x7C, 0x67, 0x6E,
00029     0x32, 0x3B, 0x20, 0x29, 0x16, 0x1F, 0x04, 0x0D,
00030     0x7A, 0x73, 0x68, 0x61, 0x5E, 0x57, 0x4C, 0x45,
00031     0x2B, 0x22, 0x39, 0x30, 0x0F, 0x06, 0x1D, 0x14,
00032     0x63, 0x6A, 0x71, 0x78, 0x47, 0x4E, 0x55, 0x5C,
00033     0x64, 0x6D, 0x76, 0x7F, 0x40, 0x49, 0x52, 0x5B,
00034     0x2C, 0x25, 0x3E, 0x37, 0x08, 0x01, 0x1A, 0x13,
00035     0x7D, 0x74, 0x6F, 0x66, 0x59, 0x50, 0x4B, 0x42,
00036     0x35, 0x3C, 0x27, 0x2E, 0x11, 0x18, 0x03, 0x0A,
00037     0x56, 0x5F, 0x44, 0x4D, 0x72, 0x7B, 0x60, 0x69,
00038     0x1E, 0x17, 0x0C, 0x05, 0x3A, 0x33, 0x28, 0x21,
00039     0x4F, 0x46, 0x5D, 0x54, 0x6B, 0x62, 0x79, 0x70,
00040     0x07, 0x0E, 0x15, 0x1C, 0x23, 0x2A, 0x31, 0x38,
00041     0x41, 0x48, 0x53, 0x5A, 0x65, 0x6C, 0x77, 0x7E,
00042     0x09, 0x00, 0x1B, 0x12, 0x2D, 0x24, 0x3F, 0x36,
00043     0x58, 0x51, 0x4A, 0x43, 0x7C, 0x75, 0x6E, 0x67,
00044     0x10, 0x19, 0x02, 0x0B, 0x34, 0x3D, 0x26, 0x2F,
00045     0x73, 0x7A, 0x61, 0x68, 0x57, 0x5E, 0x45, 0x4C,
00046     0x3B, 0x32, 0x29, 0x20, 0x1F, 0x16, 0x0D, 0x04,
00047     0x6A, 0x63, 0x78, 0x71, 0x4E, 0x47, 0x5C, 0x55,
00048     0x22, 0x2B, 0x30, 0x39, 0x06, 0x0F, 0x14, 0x1D,
00049     0x25, 0x2C, 0x37, 0x3E, 0x01, 0x08, 0x13, 0x1A,
00050     0x6D, 0x64, 0x7F, 0x76, 0x49, 0x40, 0x5B, 0x52,
00051     0x3C, 0x35, 0x2E, 0x27, 0x18, 0x11, 0x0A, 0x03,
00052     0x74, 0x7D, 0x66, 0x6F, 0x50, 0x59, 0x42, 0x4B,
00053     0x17, 0x1E, 0x05, 0x0C, 0x33, 0x3A, 0x21, 0x28,
00054     0x5F, 0x56, 0x4D, 0x44, 0x7B, 0x72, 0x69, 0x60,
00055     0x0E, 0x07, 0x1C, 0x15, 0x2A, 0x23, 0x38, 0x31,
00056     0x46, 0x4F, 0x54, 0x5D, 0x62, 0x6B, 0x70, 0x79
00057 };
00058 
00059 const unsigned short m_Crc16Table[256] = {
00060     0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
00061     0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
00062     0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
00063     0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
00064     0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
00065     0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
00066     0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
00067     0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
00068     0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
00069     0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
00070     0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
00071     0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
00072     0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
00073     0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
00074     0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
00075     0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
00076     0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
00077     0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
00078     0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
00079     0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
00080     0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
00081     0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
00082     0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
00083     0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
00084     0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
00085     0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
00086     0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
00087     0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
00088     0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
00089     0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
00090     0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
00091     0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
00092 };
00093 }
00094 
00095 char crc7(const char* data, int length)
00096 {
00097     //Calculate the CRC7 checksum for the specified data block
00098     char crc = 0;
00099     for (int i = 0; i < length; i++) {
00100         crc = m_Crc7Table[(crc << 1) ^ data[i]];
00101     }
00102 
00103     //Return the calculated checksum
00104     return crc;
00105 }
00106 
00107 unsigned short crc16(const char* data, int length)
00108 {
00109     //Calculate the CRC16 checksum for the specified data block
00110     unsigned short crc = 0;
00111     for (int i = 0; i < length; i++) {
00112         crc = (crc << 8) ^ m_Crc16Table[((crc >> 8) ^ data[i]) & 0x00FF];
00113     }
00114 
00115     //Return the calculated checksum
00116     return crc;
00117 }
00118 
00119 }