summaryrefslogtreecommitdiff
path: root/arm9/lib/NitroSDK/include/MATH_crc.h
blob: 4f06fa75191d95b7f8f68c4b0c24124a3bf53bb8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#ifndef GUARD_MATH_CRC_H
#define GUARD_MATH_CRC_H

#include "nitro/types.h"

typedef u8 MATHCRC8Context;
typedef u16 MATHCRC16Context;
typedef u32 MATHCRC32Context;

#define MATH_CRC16_CCITT_POLY 0x1021

struct MATHCRC8Table {
    u8 table[256];
};

struct MATHCRC16Table {
    u16 table[256];
};

struct MATHCRC32Table {
    u32 table[256];
};

u32 MATH_CalcCRC32(const struct MATHCRC32Table *table, const void *data, u32 dataLength);
void MATHi_CRC32UpdateRev(const struct MATHCRC32Table *table, MATHCRC32Context *context, const void *input, u32 length);
u16 MATH_CalcCRC16CCITT(const struct MATHCRC16Table *table, const void *data, u32 dataLength);
void MATHi_CRC16Update(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length);
u16 MATH_CalcCRC16(const struct MATHCRC16Table *table, const void *data, u32 dataLength);
void MATHi_CRC16UpdateRev(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length);
u8 MATH_CalcCRC8(const struct MATHCRC8Table *table, const void *data, u32 dataLength);
void MATHi_CRC8Update(const struct MATHCRC8Table *table, MATHCRC8Context *context, const void *input, u32 length);
void MATHi_CRC32InitTableRev(struct MATHCRC32Table *table, u32 poly);
void MATHi_CRC16UpdateRev(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length);
void MATHi_CRC16Update(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length);
void MATHi_CRC16InitTableRev(struct MATHCRC16Table *table, u16 poly);
void MATHi_CRC16InitTable(struct MATHCRC16Table *table, u16 poly);
void MATHi_CRC8Update(const struct MATHCRC8Table *table, MATHCRC8Context *context, const void *input, u32 length);
void MATHi_CRC8InitTable(struct MATHCRC8Table *table, u8 poly);

static inline void MATH_CRC16InitTable(struct MATHCRC16Table * table)
{
    MATHi_CRC16InitTable(table, MATH_CRC16_CCITT_POLY);
}

#endif