-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathCborDecoder.h
More file actions
107 lines (88 loc) · 2.41 KB
/
CborDecoder.h
File metadata and controls
107 lines (88 loc) · 2.41 KB
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#ifndef CBORDE_H
#define CBORDE_H
#include "Arduino.h"
#define INT_MAX 2
#define INT_MIN 2
typedef enum {
STATE_TYPE,
STATE_PINT,
STATE_NINT,
STATE_BYTES_SIZE,
STATE_BYTES_DATA,
STATE_STRING_SIZE,
STATE_STRING_DATA,
STATE_ARRAY,
STATE_MAP,
STATE_TAG,
STATE_SPECIAL,
STATE_ERROR
} CborReaderState;
class CborInput {
public:
CborInput(void *data, int size);
~CborInput();
bool hasBytes(unsigned int count);
unsigned char getByte();
unsigned short getShort();
uint32_t getInt();
uint64_t getLong();
void getBytes(void *to, int count);
private:
unsigned char *data;
int size;
int offset;
};
class CborListener {
public:
virtual void OnInteger(int32_t value) = 0;
virtual void OnBytes(unsigned char *data, unsigned int size) = 0;
virtual void OnString(String &str) = 0;
virtual void OnArray(unsigned int size) = 0;
virtual void OnMap(unsigned int size) = 0;
virtual void OnTag(uint32_t tag) = 0;
virtual void OnSpecial(uint32_t code) = 0;
virtual void OnError(const char *error) = 0;
virtual void OnExtraInteger(uint64_t value, int sign) {}
virtual void OnExtraTag(uint64_t tag) {}
virtual void OnExtraSpecial(uint64_t tag) {}
};
class CborDebugListener : public CborListener {
public:
virtual void OnInteger(int32_t value);
virtual void OnBytes(unsigned char *data, unsigned int size);
virtual void OnString(String &str);
virtual void OnArray(unsigned int size);
virtual void OnMap(unsigned int size);
virtual void OnTag(uint32_t tag);
virtual void OnSpecial(uint32_t code);
virtual void OnError(const char *error);
virtual void OnExtraInteger(uint64_t value, int sign);
virtual void OnExtraTag(uint64_t tag);
virtual void OnExtraSpecial(uint64_t tag);
};
class CborReader {
public:
CborReader(CborInput &input);
CborReader(CborInput &input, CborListener &listener);
~CborReader();
void Run();
void SetListener(CborListener &listener);
void GetCborData(String &Cborpackage);
private:
CborListener *listener;
CborInput *input;
CborReaderState state;
unsigned int currentLength;
};
class CborExampleListener : public CborListener {
public:
void OnInteger(int32_t value);
void OnBytes(unsigned char *data, unsigned int size);
void OnString(String &str);
void OnArray(unsigned int size);
void OnMap(unsigned int size) ;
void OnTag(uint32_t tag);
void OnSpecial(uint32_t code);
void OnError(const char *error);
};
#endif