pppcompressionplugins/predictorcompression/SRC/FCS.CPP
changeset 0 af10295192d8
equal deleted inserted replaced
-1:000000000000 0:af10295192d8
       
     1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 /**
       
    17  @file FCS.CPP
       
    18 */
       
    19 
       
    20 #include <networking/pppbase.h>
       
    21 
       
    22 /**
       
    23 @internalComponent
       
    24 */
       
    25 static const TUint16 PppFcsTab16[256] =
       
    26 	{
       
    27 	0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
       
    28 	0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
       
    29 	0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
       
    30 	0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
       
    31 	0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
       
    32 	0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
       
    33 	0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
       
    34 	0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
       
    35 	0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
       
    36 	0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
       
    37 	0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
       
    38 	0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
       
    39 	0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
       
    40 	0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
       
    41 	0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
       
    42 	0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
       
    43 	0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
       
    44 	0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
       
    45 	0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
       
    46 	0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
       
    47 	0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
       
    48 	0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
       
    49 	0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
       
    50 	0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
       
    51 	0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
       
    52 	0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
       
    53 	0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
       
    54 	0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
       
    55 	0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
       
    56 	0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
       
    57 	0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
       
    58 	0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
       
    59 	};
       
    60 
       
    61 void TPppFcs16::Calc(const TUint8* aPtr, const TUint8* aEnd)
       
    62 /**
       
    63 Calculate a new FCS given the current FCS and the new data.
       
    64 */
       
    65    {
       
    66    while (aPtr<aEnd)
       
    67        iFcs = (TUint16)((iFcs >> 8) ^ PppFcsTab16[(iFcs ^ *aPtr++) & 0xff]);
       
    68    }
       
    69 
       
    70 /**
       
    71 @internalComponent
       
    72 */
       
    73 static const TUint32 PppFcsTab32[256] =
       
    74 	{
       
    75 	0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
       
    76 	0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
       
    77 	0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
       
    78 	0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
       
    79 	0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
       
    80 	0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
       
    81 	0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
       
    82 	0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
       
    83 	0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
       
    84 	0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
       
    85 	0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
       
    86 	0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
       
    87 	0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
       
    88 	0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
       
    89 	0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
       
    90 	0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
       
    91 	0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
       
    92 	0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
       
    93 	0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
       
    94 	0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
       
    95 	0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
       
    96 	0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
       
    97 	0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
       
    98 	0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
       
    99 	0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
       
   100 	0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
       
   101 	0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
       
   102 	0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
       
   103 	0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
       
   104 	0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
       
   105 	0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
       
   106 	0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
       
   107 	0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
       
   108 	0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
       
   109 	0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
       
   110 	0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
       
   111 	0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
       
   112 	0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
       
   113 	0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
       
   114 	0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
       
   115 	0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
       
   116 	0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
       
   117 	0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
       
   118 	0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
       
   119 	0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
       
   120 	0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
       
   121 	0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
       
   122 	0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
       
   123 	0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
       
   124 	0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
       
   125 	0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
       
   126 	0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
       
   127 	0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
       
   128 	0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
       
   129 	0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
       
   130 	0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
       
   131 	0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
       
   132 	0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
       
   133 	0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
       
   134 	0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
       
   135 	0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
       
   136 	0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
       
   137 	0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
       
   138 	0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
       
   139 	};
       
   140 
       
   141 void TPppFcs32::Calc(const TUint8* aPtr, const TUint8* aEnd)
       
   142 /**
       
   143 Calculate a new FCS given the current FCS and the new data.
       
   144 */
       
   145 	{
       
   146 	while (aPtr<aEnd)
       
   147 	   iFcs = (((iFcs) >> 8) ^ PppFcsTab32[((iFcs) ^ (*aPtr++)) & 0xff]);
       
   148 	}