00001
00002 #include <CrcCheck.hh>
00003 #include <Log.hh>
00004
00005
00006
00007
00008 using namespace std;
00009
00010
00011
00012
00013
00014 CrcCheck::CrcCheck()
00015 :crc(0xffff)
00016 {
00017 FILE_LOG(logDEBUG ) << hex << "CrcCheck constructeur CRC[0x" << crc << "]" << endl;
00018 init();
00019 }
00020
00021
00022 CrcCheck::~CrcCheck()
00023 {
00024 }
00025
00026
00027 void CrcCheck::compute(ui16 value)
00028 {
00029
00030
00031
00032
00033 ui16 first = ( crc & 0x00FF ) << 8;
00034
00035 ui16 index = ( crc & 0xFF00 ) >> 8;
00036
00037 index = index ^ value;
00038
00039 if ( index > keys.size() ) { crc = 0; return ; }
00040
00041 ui16 second = keys[index];
00042
00043 crc = first ^ second ;
00044
00045 }
00046
00047
00048
00049 void CrcCheck::init()
00050 {
00051 keys.push_back(0x0000);
00052 keys.push_back(0x1021);
00053 keys.push_back(0x2042);
00054 keys.push_back(0x3063);
00055 keys.push_back(0x4084);
00056 keys.push_back(0x50A5);
00057 keys.push_back(0x60C6);
00058 keys.push_back(0x70E7);
00059 keys.push_back(0x8108);
00060 keys.push_back(0x9129);
00061 keys.push_back(0xA14A);
00062 keys.push_back(0xB16B);
00063 keys.push_back(0xC18C);
00064 keys.push_back(0xD1AD);
00065 keys.push_back(0xE1CE);
00066 keys.push_back(0xF1EF);
00067 keys.push_back(0x1231);
00068 keys.push_back(0x0210);
00069 keys.push_back(0x3273);
00070 keys.push_back(0x2252);
00071 keys.push_back(0x52B5);
00072 keys.push_back(0x4294);
00073 keys.push_back(0x72F7);
00074 keys.push_back(0x62D6);
00075 keys.push_back(0x9339);
00076 keys.push_back(0x8318);
00077 keys.push_back(0xB37B);
00078 keys.push_back(0xA35A);
00079 keys.push_back(0xD3BD);
00080 keys.push_back(0xC39C);
00081 keys.push_back(0xF3FF);
00082 keys.push_back(0xE3DE);
00083 keys.push_back(0x2462);
00084 keys.push_back(0x3443);
00085 keys.push_back(0x0420);
00086 keys.push_back(0x1401);
00087 keys.push_back(0x64E6);
00088 keys.push_back(0x74C7);
00089 keys.push_back(0x44A4);
00090 keys.push_back(0x5485);
00091 keys.push_back(0xA56A);
00092 keys.push_back(0xB54B);
00093 keys.push_back(0x8528);
00094 keys.push_back(0x9509);
00095 keys.push_back(0xE5EE);
00096 keys.push_back(0xF5CF);
00097 keys.push_back(0xC5AC);
00098 keys.push_back(0xD58D);
00099 keys.push_back(0x3653);
00100 keys.push_back(0x2672);
00101 keys.push_back(0x1611);
00102 keys.push_back(0x0630);
00103 keys.push_back(0x76D7);
00104 keys.push_back(0x66F6);
00105 keys.push_back(0x5695);
00106 keys.push_back(0x46B4);
00107 keys.push_back(0xB75B);
00108 keys.push_back(0xA77A);
00109 keys.push_back(0x9719);
00110 keys.push_back(0x8738);
00111 keys.push_back(0xF7DF);
00112 keys.push_back(0xE7FE);
00113 keys.push_back(0xD79D);
00114 keys.push_back(0xC7BC);
00115 keys.push_back(0x48C4);
00116 keys.push_back(0x58E5);
00117 keys.push_back(0x6886);
00118 keys.push_back(0x78A7);
00119 keys.push_back(0x0840);
00120 keys.push_back(0x1861);
00121 keys.push_back(0x2802);
00122 keys.push_back(0x3823);
00123 keys.push_back(0xC9CC);
00124 keys.push_back(0xD9ED);
00125 keys.push_back(0xE98E);
00126 keys.push_back(0xF9AF);
00127 keys.push_back(0x8948);
00128 keys.push_back(0x9969);
00129 keys.push_back(0xA90A);
00130 keys.push_back(0xB92B);
00131 keys.push_back(0x5AF5);
00132 keys.push_back(0x4AD4);
00133 keys.push_back(0x7AB7);
00134 keys.push_back(0x6A96);
00135 keys.push_back(0x1A71);
00136 keys.push_back(0x0A50);
00137 keys.push_back(0x3A33);
00138 keys.push_back(0x2A12);
00139 keys.push_back(0xDBFD);
00140 keys.push_back(0xCBDC);
00141 keys.push_back(0xFBBF);
00142 keys.push_back(0xEB9E);
00143 keys.push_back(0x9B79);
00144 keys.push_back(0x8B58);
00145 keys.push_back(0xBB3B);
00146 keys.push_back(0xAB1A);
00147 keys.push_back(0x6CA6);
00148 keys.push_back(0x7C87);
00149 keys.push_back(0x4CE4);
00150 keys.push_back(0x5CC5);
00151 keys.push_back(0x2C22);
00152 keys.push_back(0x3C03);
00153 keys.push_back(0x0C60);
00154 keys.push_back(0x1C41);
00155 keys.push_back(0xEDAE);
00156 keys.push_back(0xFD8F);
00157 keys.push_back(0xCDEC);
00158 keys.push_back(0xDDCD);
00159 keys.push_back(0xAD2A);
00160 keys.push_back(0xBD0B);
00161 keys.push_back(0x8D68);
00162 keys.push_back(0x9D49);
00163 keys.push_back(0x7E97);
00164 keys.push_back(0x6EB6);
00165 keys.push_back(0x5ED5);
00166 keys.push_back(0x4EF4);
00167 keys.push_back(0x3E13);
00168 keys.push_back(0x2E32);
00169 keys.push_back(0x1E51);
00170 keys.push_back(0x0E70);
00171 keys.push_back(0xFF9F);
00172 keys.push_back(0xEFBE);
00173 keys.push_back(0xDFDD);
00174 keys.push_back(0xCFFC);
00175 keys.push_back(0xBF1B);
00176 keys.push_back(0xAF3A);
00177 keys.push_back(0x9F59);
00178 keys.push_back(0x8F78);
00179 keys.push_back(0x9188);
00180 keys.push_back(0x81A9);
00181 keys.push_back(0xB1CA);
00182 keys.push_back(0xA1EB);
00183 keys.push_back(0xD10C);
00184 keys.push_back(0xC12D);
00185 keys.push_back(0xF14E);
00186 keys.push_back(0xE16F);
00187 keys.push_back(0x1080);
00188 keys.push_back(0x00A1);
00189 keys.push_back(0x30C2);
00190 keys.push_back(0x20E3);
00191 keys.push_back(0x5004);
00192 keys.push_back(0x4025);
00193 keys.push_back(0x7046);
00194 keys.push_back(0x6067);
00195 keys.push_back(0x83B9);
00196 keys.push_back(0x9398);
00197 keys.push_back(0xA3FB);
00198 keys.push_back(0xB3DA);
00199 keys.push_back(0xC33D);
00200 keys.push_back(0xD31C);
00201 keys.push_back(0xE37F);
00202 keys.push_back(0xF35E);
00203 keys.push_back(0x02B1);
00204 keys.push_back(0x1290);
00205 keys.push_back(0x22F3);
00206 keys.push_back(0x32D2);
00207 keys.push_back(0x4235);
00208 keys.push_back(0x5214);
00209 keys.push_back(0x6277);
00210 keys.push_back(0x7256);
00211 keys.push_back(0xB5EA);
00212 keys.push_back(0xA5CB);
00213 keys.push_back(0x95A8);
00214 keys.push_back(0x8589);
00215 keys.push_back(0xF56E);
00216 keys.push_back(0xE54F);
00217 keys.push_back(0xD52C);
00218 keys.push_back(0xC50D);
00219 keys.push_back(0x34E2);
00220 keys.push_back(0x24C3);
00221 keys.push_back(0x14A0);
00222 keys.push_back(0x0481);
00223 keys.push_back(0x7466);
00224 keys.push_back(0x6447);
00225 keys.push_back(0x5424);
00226 keys.push_back(0x4405);
00227 keys.push_back(0xA7DB);
00228 keys.push_back(0xB7FA);
00229 keys.push_back(0x8799);
00230 keys.push_back(0x97B8);
00231 keys.push_back(0xE75F);
00232 keys.push_back(0xF77E);
00233 keys.push_back(0xC71D);
00234 keys.push_back(0xD73C);
00235 keys.push_back(0x26D3);
00236 keys.push_back(0x36F2);
00237 keys.push_back(0x0691);
00238 keys.push_back(0x16B0);
00239 keys.push_back(0x6657);
00240 keys.push_back(0x7676);
00241 keys.push_back(0x4615);
00242 keys.push_back(0x5634);
00243 keys.push_back(0xD94C);
00244 keys.push_back(0xC96D);
00245 keys.push_back(0xF90E);
00246 keys.push_back(0xE92F);
00247 keys.push_back(0x99C8);
00248 keys.push_back(0x89E9);
00249 keys.push_back(0xB98A);
00250 keys.push_back(0xA9AB);
00251 keys.push_back(0x5844);
00252 keys.push_back(0x4865);
00253 keys.push_back(0x7806);
00254 keys.push_back(0x6827);
00255 keys.push_back(0x18C0);
00256 keys.push_back(0x08E1);
00257 keys.push_back(0x3882);
00258 keys.push_back(0x28A3);
00259 keys.push_back(0xCB7D);
00260 keys.push_back(0xDB5C);
00261 keys.push_back(0xEB3F);
00262 keys.push_back(0xFB1E);
00263 keys.push_back(0x8BF9);
00264 keys.push_back(0x9BD8);
00265 keys.push_back(0xABBB);
00266 keys.push_back(0xBB9A);
00267 keys.push_back(0x4A75);
00268 keys.push_back(0x5A54);
00269 keys.push_back(0x6A37);
00270 keys.push_back(0x7A16);
00271 keys.push_back(0x0AF1);
00272 keys.push_back(0x1AD0);
00273 keys.push_back(0x2AB3);
00274 keys.push_back(0x3A92);
00275 keys.push_back(0xFD2E);
00276 keys.push_back(0xED0F);
00277 keys.push_back(0xDD6C);
00278 keys.push_back(0xCD4D);
00279 keys.push_back(0xBDAA);
00280 keys.push_back(0xAD8B);
00281 keys.push_back(0x9DE8);
00282 keys.push_back(0x8DC9);
00283 keys.push_back(0x7C26);
00284 keys.push_back(0x6C07);
00285 keys.push_back(0x5C64);
00286 keys.push_back(0x4C45);
00287 keys.push_back(0x3CA2);
00288 keys.push_back(0x2C83);
00289 keys.push_back(0x1CE0);
00290 keys.push_back(0x0CC1);
00291 keys.push_back(0xEF1F);
00292 keys.push_back(0xFF3E);
00293 keys.push_back(0xCF5D);
00294 keys.push_back(0xDF7C);
00295 keys.push_back(0xAF9B);
00296 keys.push_back(0xBFBA);
00297 keys.push_back(0x8FD9);
00298 keys.push_back(0x9FF8);
00299 keys.push_back(0x6E17);
00300 keys.push_back(0x7E36);
00301 keys.push_back(0x4E55);
00302 keys.push_back(0x5E74);
00303 keys.push_back(0x2E93);
00304 keys.push_back(0x3EB2);
00305 keys.push_back(0x0ED1);
00306 keys.push_back(0x1EF0);
00307
00308 }