forked from arduino-libraries/ArduinoIoTCloud
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCBORDecoder.h
86 lines (69 loc) · 3.22 KB
/
CBORDecoder.h
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
//
// This file is part of ArduinoCloudThing
//
// Copyright 2019 ARDUINO SA (http://www.arduino.cc/)
//
// This software is released under the GNU General Public License version 3,
// which covers the main part of ArduinoCloudThing.
// The terms of this license can be found at:
// https://www.gnu.org/licenses/gpl-3.0.en.html
//
// You can be released from the requirements of the above licenses by purchasing
// a commercial license. Buying such a license is mandatory if you want to modify or
// otherwise use the software for commercial activities involving the Arduino
// software without disclosing the source code of your own applications. To purchase
// a commercial license, send an email to [email protected].
//
#ifndef ARDUINO_CBOR_CBOR_DECODER_H_
#define ARDUINO_CBOR_CBOR_DECODER_H_
/******************************************************************************
INCLUDE
******************************************************************************/
#include <Arduino.h>
#undef max
#undef min
#include <list>
#include "../property/PropertyContainer.h"
/******************************************************************************
CLASS DECLARATION
******************************************************************************/
class CBORDecoder
{
public:
/* decode a CBOR payload received from the cloud */
static void decode(PropertyContainer & property_container, uint8_t const * const payload, size_t const length, bool isSyncMessage = false);
private:
CBORDecoder() { }
CBORDecoder(CBORDecoder const &) { }
enum class MapParserState {
EnterMap,
MapKey,
UndefinedKey,
BaseVersion,
BaseName,
BaseTime,
Name,
Value,
StringValue,
BooleanValue,
Time,
LeaveMap,
Complete,
Error
};
static MapParserState handle_EnterMap(CborValue * map_iter, CborValue * value_iter);
static MapParserState handle_MapKey(CborValue * value_iter);
static MapParserState handle_UndefinedKey(CborValue * value_iter);
static MapParserState handle_BaseVersion(CborValue * value_iter, CborMapData & map_data);
static MapParserState handle_BaseName(CborValue * value_iter, CborMapData & map_data);
static MapParserState handle_BaseTime(CborValue * value_iter, CborMapData & map_data);
static MapParserState handle_Name(CborValue * value_iter, CborMapData & map_data, PropertyContainer & property_container);
static MapParserState handle_Value(CborValue * value_iter, CborMapData & map_data);
static MapParserState handle_StringValue(CborValue * value_iter, CborMapData & map_data);
static MapParserState handle_BooleanValue(CborValue * value_iter, CborMapData & map_data);
static MapParserState handle_Time(CborValue * value_iter, CborMapData & map_data);
static MapParserState handle_LeaveMap(CborValue * map_iter, CborValue * value_iter, CborMapData & map_data, PropertyContainer & property_container, String & current_property_name, unsigned long & current_property_base_time, unsigned long & current_property_time, bool const is_sync_message, std::list<CborMapData> & map_data_list);
static bool ifNumericConvertToDouble(CborValue * value_iter, double * numeric_val);
static double convertCborHalfFloatToDouble(uint16_t const half_val);
};
#endif /* ARDUINO_CBOR_CBOR_DECODER_H_ */