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