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