00001 #ifndef ESCrcKchipFast_H 00002 #define ESCrcKchipFast_H 00003 00004 class ESCrcKchipFast { 00005 00006 private : 00007 00008 uint32_t crc; 00009 00010 public: 00011 00012 ESCrcKchipFast() { 00013 init(); 00014 reset() ; 00015 }; 00016 00017 void init() { 00018 crc = 0x0ffff ; 00019 } 00020 00021 void reset() { 00022 crc = 0x0ffff ; 00023 } ; 00024 00025 void add(unsigned int data) { 00026 for (int i=0;i<16;i++) 00027 { 00028 if ((crc&0x0001) == (data&0x0001)) 00029 crc=crc>>1; 00030 else 00031 crc=(crc>>1)^0x8408; // flipped 0x1021; 00032 data=(data>>1); 00033 } 00034 }; 00035 00036 uint32_t get_crc() { 00037 return crc ; 00038 }; 00039 00040 bool isCrcOk(unsigned int crcin=0x0000) { 00041 return ((get_crc()==crcin) ? true : false ); 00042 }; 00043 00044 ~ESCrcKchipFast() { } ; 00045 00046 }; 00047 00048 #endif