]>
cvs.zerfleddert.de Git - proxmark3-svn/blob - common/crc.h
eb91196bdf7beb944ca9b540981fcf8685fc8b23
   1 //----------------------------------------------------------------------------- 
   2 // This code is licensed to you under the terms of the GNU GPL, version 2 or, 
   3 // at your option, any later version. See the LICENSE.txt file for the text of 
   5 //----------------------------------------------------------------------------- 
   6 // Generic CRC calculation code. 
   7 //----------------------------------------------------------------------------- 
  19         uint32_t initial_value
; 
  24 /* Initialize a crc structure. order is the order of the polynom, e.g. 32 for a CRC-32 
  25  * polynom is the CRC polynom. initial_value is the initial value of a clean state. 
  26  * final_xor is XORed onto the state before returning it from crc_result(). */ 
  27 extern void crc_init(crc_t 
*crc
, int order
, uint32_t polynom
, uint32_t initial_value
, uint32_t final_xor
); 
  29 /* Update the crc state. data is the data of length data_width bits (only the the 
  30  * data_width lower-most bits are used). 
  32 extern void crc_update(crc_t 
*crc
, uint32_t data
, int data_width
); 
  34 /* Clean the crc state, e.g. reset it to initial_value */ 
  35 extern void crc_clear(crc_t 
*crc
); 
  37 /* Get the result of the crc calculation */ 
  38 extern uint32_t crc_finish(crc_t 
*crc
); 
  40 // Calculate CRC-8/Maxim checksum 
  41 int CRC8Maxim(uint8_t *buff
, size_t size  
); 
  43 /* Static initialization of a crc structure */ 
  44 #define CRC_INITIALIZER(_order, _polynom, _initial_value, _final_xor) { \ 
  45         .state = ((_initial_value) & ((1L<<(_order))-1)), \ 
  47         .polynom = (_polynom), \ 
  48         .initial_value = (_initial_value), \ 
  49         .final_xor = (_final_xor), \ 
  50         .mask = ((1L<<(_order))-1) }