1 /*---------------------------------------------------------------------------*
2 Project: TwlSDK - MATH - include
3 File: math/dgt.h
4
5 Copyright 2003-2008 Nintendo. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Date:: $
14 $Rev:$
15 $Author:$
16 *---------------------------------------------------------------------------*/
17
18 #ifndef NITRO_MATH_CHECKSUM_H_
19 #define NITRO_MATH_CHECKSUM_H_
20
21 #include <nitro/misc.h>
22 #include <nitro/types.h>
23
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27
28 //----------------------------------------------------------------------------
29 // Constant Definitions
30 //----------------------------------------------------------------------------
31
32 //----------------------------------------------------------------------------
33 // Type Definitions
34 //----------------------------------------------------------------------------
35
36 typedef u16 MATHChecksum16Context;
37 typedef MATHChecksum16Context MATHChecksum8Context;
38
39 //----------------------------------------------------------------------------
40 // Function Declarations
41 //----------------------------------------------------------------------------
42
43 /*****************************************************************************/
44 /* Checksum16 */
45 /*****************************************************************************/
46
47 /*---------------------------------------------------------------------------*
48 Name: MATH_Checksum16Init
49
50 Description: Used to request the 16bit Checksum value.
51 Initializes the MATHChecksum16Context structure.
52
53 Arguments: context MATHChecksum16Context structure
54 init: Initial value of CRC.
55
56 Returns: None.
57 *---------------------------------------------------------------------------*/
MATH_Checksum16Init(MATHChecksum16Context * context)58 static inline void MATH_Checksum16Init(MATHChecksum16Context * context)
59 {
60 *context = 0;
61 }
62
63 /*---------------------------------------------------------------------------*
64 Name: MATH_Checksum16Update
65
66 Description: Updates the 16bit Checksum value with added data.
67
68 Arguments: context MATHChecksum16Context structure
69 input: Pointer to input data.
70 length: Length of input data.
71
72 Returns: None.
73 *---------------------------------------------------------------------------*/
74 void MATH_Checksum16Update(MATHChecksum16Context * context, const void *input, u32 length);
75
76 /*---------------------------------------------------------------------------*
77 Name: MATH_Checksum16GetHash
78
79 Description: Gets the final Checksum value.
80
81 Arguments: context MATHChecksum16Context structure
82
83 Returns: Calculation result
84 *---------------------------------------------------------------------------*/
MATH_Checksum16GetHash(MATHChecksum16Context * context)85 static inline u16 MATH_Checksum16GetHash(MATHChecksum16Context * context)
86 {
87 return (u16)(~(*context));
88 }
89
90 /*---------------------------------------------------------------------------*
91 Name: MATH_CalcChecksum16
92
93 Description: Calculates the 16bit Checksum.
94
95 Arguments: data: Pointer to input data.
96 dataLength: Length of input data.
97
98 Returns: Checksum value.
99 *---------------------------------------------------------------------------*/
100 u16 MATH_CalcChecksum16(const void *data, u32 dataLength);
101
102
103 /*****************************************************************************/
104 /* Checksum8 */
105 /*****************************************************************************/
106
107 /*---------------------------------------------------------------------------*
108 Name: MATH_Checksum8Init
109
110 Description: Used to request the 8bit Checksum value.
111 Initializes the MATHChecksum8Context structure.
112
113 Arguments: context MATHChecksum8Context structure
114 init: Initial value of CRC.
115
116 Returns: None.
117 *---------------------------------------------------------------------------*/
MATH_Checksum8Init(MATHChecksum8Context * context)118 static inline void MATH_Checksum8Init(MATHChecksum8Context * context)
119 {
120 *context = 0;
121 }
122
123 /*---------------------------------------------------------------------------*
124 Name: MATH_Checksum8Update
125
126 Description: Updates the 8-bit Checksum value with added data.
127
128 Arguments: context MATHChecksum8Context structure
129 input: Pointer to input data.
130 length: Length of input data.
131
132 Returns: None.
133 *---------------------------------------------------------------------------*/
134 void MATH_Checksum8Update(MATHChecksum8Context * context, const void *input, u32 length);
135
136 /*---------------------------------------------------------------------------*
137 Name: MATH_Checksum8GetHash
138
139 Description: Gets the final Checksum value.
140
141 Arguments: context MATHChecksum8Context structure
142
143 Returns: Calculation result
144 *---------------------------------------------------------------------------*/
MATH_Checksum8GetHash(MATHChecksum8Context * context)145 static inline u8 MATH_Checksum8GetHash(MATHChecksum8Context * context)
146 {
147 u32 sum = *context;
148 sum = (sum >> 8) + (sum & 0xff);
149 sum += (sum >> 8);
150
151 return (u8)(~sum);
152 }
153
154 /*---------------------------------------------------------------------------*
155 Name: MATH_CalcChecksum8
156
157 Description: Calculates the 8-bit Checksum.
158
159 Arguments: data: Pointer to input data.
160 dataLength: Length of input data.
161
162 Returns: Checksum value
163 *---------------------------------------------------------------------------*/
164 u8 MATH_CalcChecksum8(const void *data, u32 dataLength);
165
166
167
168 #ifdef __cplusplus
169 }/* extern "C" */
170 #endif
171
172 /* NITRO_MATH_CHECKSUM_H_ */
173 #endif
174