Joris Aerts / SDFileSystem

Dependencies:   FATFileSystem

Fork of SDFileSystem by Neil Thiessen

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers CRC7.cpp Source File

CRC7.cpp

00001 /* SD/MMC File System Library
00002  * Copyright (c) 2014 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 "CRC7.h"
00018 
00019 namespace
00020 {
00021 const char m_CRC7Table[] = {
00022     0x00, 0x09, 0x12, 0x1B, 0x24, 0x2D, 0x36, 0x3F,
00023     0x48, 0x41, 0x5A, 0x53, 0x6C, 0x65, 0x7E, 0x77,
00024     0x19, 0x10, 0x0B, 0x02, 0x3D, 0x34, 0x2F, 0x26,
00025     0x51, 0x58, 0x43, 0x4A, 0x75, 0x7C, 0x67, 0x6E,
00026     0x32, 0x3B, 0x20, 0x29, 0x16, 0x1F, 0x04, 0x0D,
00027     0x7A, 0x73, 0x68, 0x61, 0x5E, 0x57, 0x4C, 0x45,
00028     0x2B, 0x22, 0x39, 0x30, 0x0F, 0x06, 0x1D, 0x14,
00029     0x63, 0x6A, 0x71, 0x78, 0x47, 0x4E, 0x55, 0x5C,
00030     0x64, 0x6D, 0x76, 0x7F, 0x40, 0x49, 0x52, 0x5B,
00031     0x2C, 0x25, 0x3E, 0x37, 0x08, 0x01, 0x1A, 0x13,
00032     0x7D, 0x74, 0x6F, 0x66, 0x59, 0x50, 0x4B, 0x42,
00033     0x35, 0x3C, 0x27, 0x2E, 0x11, 0x18, 0x03, 0x0A,
00034     0x56, 0x5F, 0x44, 0x4D, 0x72, 0x7B, 0x60, 0x69,
00035     0x1E, 0x17, 0x0C, 0x05, 0x3A, 0x33, 0x28, 0x21,
00036     0x4F, 0x46, 0x5D, 0x54, 0x6B, 0x62, 0x79, 0x70,
00037     0x07, 0x0E, 0x15, 0x1C, 0x23, 0x2A, 0x31, 0x38,
00038     0x41, 0x48, 0x53, 0x5A, 0x65, 0x6C, 0x77, 0x7E,
00039     0x09, 0x00, 0x1B, 0x12, 0x2D, 0x24, 0x3F, 0x36,
00040     0x58, 0x51, 0x4A, 0x43, 0x7C, 0x75, 0x6E, 0x67,
00041     0x10, 0x19, 0x02, 0x0B, 0x34, 0x3D, 0x26, 0x2F,
00042     0x73, 0x7A, 0x61, 0x68, 0x57, 0x5E, 0x45, 0x4C,
00043     0x3B, 0x32, 0x29, 0x20, 0x1F, 0x16, 0x0D, 0x04,
00044     0x6A, 0x63, 0x78, 0x71, 0x4E, 0x47, 0x5C, 0x55,
00045     0x22, 0x2B, 0x30, 0x39, 0x06, 0x0F, 0x14, 0x1D,
00046     0x25, 0x2C, 0x37, 0x3E, 0x01, 0x08, 0x13, 0x1A,
00047     0x6D, 0x64, 0x7F, 0x76, 0x49, 0x40, 0x5B, 0x52,
00048     0x3C, 0x35, 0x2E, 0x27, 0x18, 0x11, 0x0A, 0x03,
00049     0x74, 0x7D, 0x66, 0x6F, 0x50, 0x59, 0x42, 0x4B,
00050     0x17, 0x1E, 0x05, 0x0C, 0x33, 0x3A, 0x21, 0x28,
00051     0x5F, 0x56, 0x4D, 0x44, 0x7B, 0x72, 0x69, 0x60,
00052     0x0E, 0x07, 0x1C, 0x15, 0x2A, 0x23, 0x38, 0x31,
00053     0x46, 0x4F, 0x54, 0x5D, 0x62, 0x6B, 0x70, 0x79
00054 };
00055 }
00056 
00057 char CRC7(const char* data, int length)
00058 {
00059     //Calculate the CRC7 checksum for the specified data block
00060     char crc = 0;
00061     for (int i = 0; i < length; i++) {
00062         crc = m_CRC7Table[(crc << 1) ^ data[i]];
00063     }
00064 
00065     //Return the calculated checksum
00066     return crc;
00067 }