1 /* 2 * Copyright (C) 2015-2017 Alibaba Group Holding Limited 3 */ 4 5 #ifndef __CheckSumUtils_h__ 6 #define __CheckSumUtils_h__ 7 8 #include <stdint.h> 9 #include <stdbool.h> 10 #include <stdlib.h> 11 #include <stdio.h> 12 13 /******************CRC-8 XMODEM x8+x5+x4+1****************************** 14 15 *******************************************************************************/ 16 17 typedef struct { 18 uint8_t crc; 19 } CRC8_Context; 20 21 /** 22 * @brief initialize the CRC8 Context 23 * 24 * @param inContext holds CRC8 result 25 * 26 * @retval none 27 */ 28 void CRC8_Init( CRC8_Context *inContext ); 29 30 31 /** 32 * @brief Caculate the CRC8 result 33 * 34 * @param inContext holds CRC8 result during caculation process 35 * @param inSrc input data 36 * @param inLen length of input data 37 * 38 * @retval none 39 */ 40 void CRC8_Update( CRC8_Context *inContext, const void *inSrc, size_t inLen ); 41 42 43 /** 44 * @brief output CRC8 result 45 * 46 * @param inContext holds CRC8 result 47 * @param outResutl holds CRC8 final result 48 * 49 * @retval none 50 */ 51 void CRC8_Final( CRC8_Context *inContext, uint8_t *outResult ); 52 /** 53 * @} 54 */ 55 56 57 58 /******************CRC-16/XMODEM x16+x12+x5+1****************************** 59 60 *******************************************************************************/ 61 62 /** 63 * @brief caculate the CRC16 result for each byte 64 * 65 * @param crcIn The context to save CRC16 result. 66 * @param byte each byte of input data. 67 * 68 * @retval return the CRC16 result 69 */ 70 71 72 typedef struct { 73 uint16_t crc; 74 } CRC16_Context; 75 76 /** 77 * @brief initialize the CRC16 Context 78 * 79 * @param inContext holds CRC16 result 80 * 81 * @retval none 82 */ 83 void CRC16_Init( CRC16_Context *inContext ); 84 85 86 /** 87 * @brief Caculate the CRC16 result 88 * 89 * @param inContext holds CRC16 result during caculation process 90 * @param inSrc input data 91 * @param inLen length of input data 92 * 93 * @retval none 94 */ 95 void CRC16_Update( CRC16_Context *inContext, const void *inSrc, size_t inLen ); 96 97 98 /** 99 * @brief output CRC16 result 100 * 101 * @param inContext holds CRC16 result 102 * @param outResutl holds CRC16 final result 103 * 104 * @retval none 105 */ 106 void CRC16_Final( CRC16_Context *inContext, uint16_t *outResult ); 107 108 /** 109 * @} 110 */ 111 112 /** 113 * @} 114 */ 115 #endif //__CheckSumUtils_h__ 116 117 118