Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenff_crc.c
Go to the documentation of this file.
00001 /***************************************************************************** 00002 * FullFAT - High Performance, Thread-Safe Embedded FAT File-System * 00003 * Copyright (C) 2009 James Walmsley (james@worm.me.uk) * 00004 * * 00005 * This program is free software: you can redistribute it and/or modify * 00006 * it under the terms of the GNU General Public License as published by * 00007 * the Free Software Foundation, either version 3 of the License, or * 00008 * (at your option) any later version. * 00009 * * 00010 * This program is distributed in the hope that it will be useful, * 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 00013 * GNU General Public License for more details. * 00014 * * 00015 * You should have received a copy of the GNU General Public License * 00016 * along with this program. If not, see <http://www.gnu.org/licenses/>. * 00017 * * 00018 * IMPORTANT NOTICE: * 00019 * ================= * 00020 * Alternative Licensing is available directly from the Copyright holder, * 00021 * (James Walmsley). For more information consult LICENSING.TXT to obtain * 00022 * a Commercial license. * 00023 * * 00024 * See RESTRICTIONS.TXT for extra restrictions on the use of FullFAT. * 00025 * * 00026 * Removing the above notice is illegal and will invalidate this license. * 00027 ***************************************************************************** 00028 * See http://worm.me.uk/fullfat for more information. * 00029 * Or http://fullfat.googlecode.com/ for latest releases and the wiki. * 00030 *****************************************************************************/ 00031 00042 #include "ff_crc.h" 00043 00044 00045 static const FF_T_UINT32 crc32_table[256] = { 00046 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 00047 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 00048 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 00049 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 00050 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 00051 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 00052 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 00053 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 00054 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 00055 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 00056 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, 00057 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, 00058 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 00059 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 00060 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, 00061 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 00062 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 00063 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 00064 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 00065 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, 00066 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 00067 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 00068 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, 00069 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 00070 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 00071 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 00072 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, 00073 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 00074 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 00075 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 00076 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 00077 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 00078 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 00079 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 00080 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 00081 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 00082 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 00083 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 00084 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 00085 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 00086 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 00087 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 00088 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D 00089 }; 00090 00091 FF_T_UINT32 FF_GetCRC32(FF_T_UINT8 *pbyData, FF_T_UINT32 stLength) { 00092 00093 register FF_T_UINT32 crc = 0xFFFFFFFF; 00094 00095 while(stLength--) { 00096 crc = ((crc >> 8) & 0x00FFFFFF) ^ crc32_table[(crc^*pbyData++) & 0x000000FF]; 00097 } 00098 00099 return (crc ^ 0xFFFFFFFF); 00100 } 00101 00102 00103 00104 00105 static const FF_T_UINT8 crc16_table_low[256] = 00106 { 00107 0x000, 0x0c1, 0x081, 0x040, 0x001, 0x0c0, 0x080, 0x041, 00108 0x001, 0x0c0, 0x080, 0x041, 0x000, 0x0c1, 0x081, 0x040, 00109 0x001, 0x0c0, 0x080, 0x041, 0x000, 0x0c1, 0x081, 0x040, 00110 0x000, 0x0c1, 0x081, 0x040, 0x001, 0x0c0, 0x080, 0x041, 00111 0x001, 0x0c0, 0x080, 0x041, 0x000, 0x0c1, 0x081, 0x040, 00112 0x000, 0x0c1, 0x081, 0x040, 0x001, 0x0c0, 0x080, 0x041, 00113 0x000, 0x0c1, 0x081, 0x040, 0x001, 0x0c0, 0x080, 0x041, 00114 0x001, 0x0c0, 0x080, 0x041, 0x000, 0x0c1, 0x081, 0x040, 00115 0x001, 0x0c0, 0x080, 0x041, 0x000, 0x0c1, 0x081, 0x040, 00116 0x000, 0x0c1, 0x081, 0x040, 0x001, 0x0c0, 0x080, 0x041, 00117 0x000, 0x0c1, 0x081, 0x040, 0x001, 0x0c0, 0x080, 0x041, 00118 0x001, 0x0c0, 0x080, 0x041, 0x000, 0x0c1, 0x081, 0x040, 00119 0x000, 0x0c1, 0x081, 0x040, 0x001, 0x0c0, 0x080, 0x041, 00120 0x001, 0x0c0, 0x080, 0x041, 0x000, 0x0c1, 0x081, 0x040, 00121 0x001, 0x0c0, 0x080, 0x041, 0x000, 0x0c1, 0x081, 0x040, 00122 0x000, 0x0c1, 0x081, 0x040, 0x001, 0x0c0, 0x080, 0x041, 00123 0x001, 0x0c0, 0x080, 0x041, 0x000, 0x0c1, 0x081, 0x040, 00124 0x000, 0x0c1, 0x081, 0x040, 0x001, 0x0c0, 0x080, 0x041, 00125 0x000, 0x0c1, 0x081, 0x040, 0x001, 0x0c0, 0x080, 0x041, 00126 0x001, 0x0c0, 0x080, 0x041, 0x000, 0x0c1, 0x081, 0x040, 00127 0x000, 0x0c1, 0x081, 0x040, 0x001, 0x0c0, 0x080, 0x041, 00128 0x001, 0x0c0, 0x080, 0x041, 0x000, 0x0c1, 0x081, 0x040, 00129 0x001, 0x0c0, 0x080, 0x041, 0x000, 0x0c1, 0x081, 0x040, 00130 0x000, 0x0c1, 0x081, 0x040, 0x001, 0x0c0, 0x080, 0x041, 00131 0x000, 0x0c1, 0x081, 0x040, 0x001, 0x0c0, 0x080, 0x041, 00132 0x001, 0x0c0, 0x080, 0x041, 0x000, 0x0c1, 0x081, 0x040, 00133 0x001, 0x0c0, 0x080, 0x041, 0x000, 0x0c1, 0x081, 0x040, 00134 0x000, 0x0c1, 0x081, 0x040, 0x001, 0x0c0, 0x080, 0x041, 00135 0x001, 0x0c0, 0x080, 0x041, 0x000, 0x0c1, 0x081, 0x040, 00136 0x000, 0x0c1, 0x081, 0x040, 0x001, 0x0c0, 0x080, 0x041, 00137 0x000, 0x0c1, 0x081, 0x040, 0x001, 0x0c0, 0x080, 0x041, 00138 0x001, 0x0c0, 0x080, 0x041, 0x000, 0x0c1, 0x081, 0x040, 00139 }; 00140 00141 static const FF_T_UINT8 crc16_table_high[256] = 00142 { 00143 0x000, 0x0c0, 0x0c1, 0x001, 0x0c3, 0x003, 0x002, 0x0c2, 00144 0x0c6, 0x006, 0x007, 0x0c7, 0x005, 0x0c5, 0x0c4, 0x004, 00145 0x0cc, 0x00c, 0x00d, 0x0cd, 0x00f, 0x0cf, 0x0ce, 0x00e, 00146 0x00a, 0x0ca, 0x0cb, 0x00b, 0x0c9, 0x009, 0x008, 0x0c8, 00147 0x0d8, 0x018, 0x019, 0x0d9, 0x01b, 0x0db, 0x0da, 0x01a, 00148 0x01e, 0x0de, 0x0df, 0x01f, 0x0dd, 0x01d, 0x01c, 0x0dc, 00149 0x014, 0x0d4, 0x0d5, 0x015, 0x0d7, 0x017, 0x016, 0x0d6, 00150 0x0d2, 0x012, 0x013, 0x0d3, 0x011, 0x0d1, 0x0d0, 0x010, 00151 0x0f0, 0x030, 0x031, 0x0f1, 0x033, 0x0f3, 0x0f2, 0x032, 00152 0x036, 0x0f6, 0x0f7, 0x037, 0x0f5, 0x035, 0x034, 0x0f4, 00153 0x03c, 0x0fc, 0x0fd, 0x03d, 0x0ff, 0x03f, 0x03e, 0x0fe, 00154 0x0fa, 0x03a, 0x03b, 0x0fb, 0x039, 0x0f9, 0x0f8, 0x038, 00155 0x028, 0x0e8, 0x0e9, 0x029, 0x0eb, 0x02b, 0x02a, 0x0ea, 00156 0x0ee, 0x02e, 0x02f, 0x0ef, 0x02d, 0x0ed, 0x0ec, 0x02c, 00157 0x0e4, 0x024, 0x025, 0x0e5, 0x027, 0x0e7, 0x0e6, 0x026, 00158 0x022, 0x0e2, 0x0e3, 0x023, 0x0e1, 0x021, 0x020, 0x0e0, 00159 0x0a0, 0x060, 0x061, 0x0a1, 0x063, 0x0a3, 0x0a2, 0x062, 00160 0x066, 0x0a6, 0x0a7, 0x067, 0x0a5, 0x065, 0x064, 0x0a4, 00161 0x06c, 0x0ac, 0x0ad, 0x06d, 0x0af, 0x06f, 0x06e, 0x0ae, 00162 0x0aa, 0x06a, 0x06b, 0x0ab, 0x069, 0x0a9, 0x0a8, 0x068, 00163 0x078, 0x0b8, 0x0b9, 0x079, 0x0bb, 0x07b, 0x07a, 0x0ba, 00164 0x0be, 0x07e, 0x07f, 0x0bf, 0x07d, 0x0bd, 0x0bc, 0x07c, 00165 0x0b4, 0x074, 0x075, 0x0b5, 0x077, 0x0b7, 0x0b6, 0x076, 00166 0x072, 0x0b2, 0x0b3, 0x073, 0x0b1, 0x071, 0x070, 0x0b0, 00167 0x050, 0x090, 0x091, 0x051, 0x093, 0x053, 0x052, 0x092, 00168 0x096, 0x056, 0x057, 0x097, 0x055, 0x095, 0x094, 0x054, 00169 0x09c, 0x05c, 0x05d, 0x09d, 0x05f, 0x09f, 0x09e, 0x05e, 00170 0x05a, 0x09a, 0x09b, 0x05b, 0x099, 0x059, 0x058, 0x098, 00171 0x088, 0x048, 0x049, 0x089, 0x04b, 0x08b, 0x08a, 0x04a, 00172 0x04e, 0x08e, 0x08f, 0x04f, 0x08d, 0x04d, 0x04c, 0x08c, 00173 0x044, 0x084, 0x085, 0x045, 0x087, 0x047, 0x046, 0x086, 00174 0x082, 0x042, 0x043, 0x083, 0x041, 0x081, 0x080, 0x040, 00175 }; 00176 00177 /***************************************************************************** 00178 * Description: Function to 16 bit CRC check a block of memory 00179 00180 * 00181 * Parameters: pbyData - Pointer to the source data 00182 * stLength - The length to CRC 00183 * 00184 * Return value: The 16 bit CRC value 00185 * 00186 *****************************************************************************/ 00187 00188 FF_T_UINT16 FF_GetCRC16(FF_T_UINT8 *pbyData, FF_T_UINT32 stLength) { 00189 FF_T_UINT8 bTableValue; 00190 FF_T_UINT16 wCRC = 0; 00191 00192 while (stLength--) { 00193 bTableValue = (FF_T_UINT8)((wCRC & 0x00FF) ^ *pbyData++); 00194 wCRC = (FF_T_UINT16)(((crc16_table_high[bTableValue]) << 8) 00195 + (crc16_table_low[bTableValue] ^ ((wCRC >> 8) & 0x00FF))); 00196 } 00197 00198 return wCRC; 00199 } 00200 00201 00202 static const FF_T_UINT8 crc8_table[256] = 00203 { 00204 0, 94, 188, 226, 97, 63, 221, 131, 00205 194, 156, 126, 32, 163, 253, 31, 65, 00206 157, 195, 33, 127, 252, 162, 64, 30, 00207 95, 1, 227, 189, 62, 96, 130, 220, 00208 35, 125, 159, 193, 66, 28, 254, 160, 00209 225, 191, 93, 3, 128, 222, 60, 98, 00210 190, 224, 2, 92, 223, 129, 99, 61, 00211 124, 34, 192, 158, 29, 67, 161, 255, 00212 70, 24, 250, 164, 39, 121, 155, 197, 00213 132, 218, 56, 102, 229, 187, 89, 7, 00214 219, 133, 103, 57, 186, 228, 6, 88, 00215 25, 71, 165, 251, 120, 38, 196, 154, 00216 101, 59, 217, 135, 4, 90, 184, 230, 00217 167, 249, 27, 69, 198, 152, 122, 36, 00218 248, 166, 68, 26, 153, 199, 37, 123, 00219 58, 100, 134, 216, 91, 5, 231, 185, 00220 140, 210, 48, 110, 237, 179, 81, 15, 00221 78, 16, 242, 172, 47, 113, 147, 205, 00222 17, 79, 173, 243, 112, 46, 204, 146, 00223 211, 141, 111, 49, 178, 236, 14, 80, 00224 175, 241, 19, 77, 206, 144, 114, 44, 00225 109, 51, 209, 143, 12, 82, 176, 238, 00226 50, 108, 142, 208, 83, 13, 239, 177, 00227 240, 174, 76, 18, 145, 207, 45, 115, 00228 202, 148, 118, 40, 171, 245, 23, 73, 00229 8, 86, 180, 234, 105, 55, 213, 139, 00230 87, 9, 235, 181, 54, 104, 138, 212, 00231 149, 203, 41, 119, 244, 170, 72, 22, 00232 233, 183, 85, 11, 136, 214, 52, 106, 00233 43, 117, 151, 201, 74, 20, 246, 168, 00234 116, 42, 200, 150, 21, 75, 169, 247, 00235 182, 232, 10, 84, 215, 137, 107, 53 00236 }; 00237 00238 /***************************************************************************** 00239 * Description: Function to CRC check a block of memory 00240 * 00241 * Parameters: pbyData - Pointer to the source data 00242 * stLength - The length to CRC 00243 * 00244 * Return value: The 8 bit CRC value 00245 * 00246 *****************************************************************************/ 00247 00248 FF_T_UINT8 FF_GetCRC8(FF_T_UINT8 *pbyData, FF_T_UINT32 stLength) { 00249 FF_T_UINT8 byCRC = 0, byData; 00250 while (stLength--) { 00251 byData = *pbyData++; 00252 byCRC = crc8_table[(byCRC ^ byData)]; 00253 } 00254 return byCRC; 00255 } Generated on Fri May 25 2012 04:32:35 for ReactOS by
1.7.6.1
|