-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLogSystem.h
More file actions
143 lines (116 loc) · 3.82 KB
/
Copy pathLogSystem.h
File metadata and controls
143 lines (116 loc) · 3.82 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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#pragma once
//
// Lucky Resistor's Data Logger (Simple Version)
// ---------------------------------------------------------------------------
// (c)2015 by Lucky Resistor. See LICENSE for details.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//
#include <Arduino.h>
#include <RTClib.h>
class Storage;
/// A single log record.
///
class LogRecord
{
public:
/// Create a new log record using the given values.
///
/// @param dateTime The time of the record.
/// @param temperature The temperature in celsius.
/// @param humidity The humidity as percentage 0-100.
///
LogRecord(const DateTime &dateTime, float temperature, float humidity);
/// Create a special null record.
///
/// This records are used in error situations.
///
LogRecord();
/// dtor
///
~LogRecord();
public:
/// Check if this is a null record.
///
bool isNull() const;
/// Get the time of the record.
///
inline DateTime getDateTime() const { return _dateTime; }
/// Get the temperature of the record in celsius.
///
inline float getTemperature() const { return _temperature; }
/// Get the humidity of the record in percent 0-100.
///
inline float getHumidity() const { return _humidity; }
/// Write this record to the serial interface.
///
/// The format is: date/time, temperature, humidity
/// Example: 2015-08-22 12:42:21,80,25
///
void writeToSerial() const;
private:
DateTime _dateTime;
float _temperature;
float _humidity;
};
/// The log system to write and read all sensor data.
///
class LogSystem
{
public:
/// Create a new log system instance.
///
/// @param reservedForConfig The number of bytes reserved for the configuration
/// at the start the storage area.
/// @param storage The storage to use for the log system.
///
LogSystem(uint32_t reservedForConfig, Storage *storage);
/// dtor
///
~LogSystem();
public:
/// Initialize the log system
///
void begin();
/// Get the maximum number of records for the given storage.
///
inline uint32_t maximumNumberOfRecords() const { return _maximumNumberOfRecords; }
/// Get the number of records currently in the storage.
///
inline uint32_t currentNumberOfRecords() const { return _currentNumberOfRecords; }
/// Read a record from the storage.
///
LogRecord getLogRecord(uint32_t index) const;
/// Append a record to the storage.
///
/// This will first zero the record (index+1) if possible, before
/// writing the given record to (index).
///
/// @param logRecord The record to append.
/// @return true on success, false if the storage is full.
///
bool appendRecord(const LogRecord &logRecord);
/// Format the storage.
///
/// This will set the initial two records of the storage area to zero.
/// It is enough to initialize the storage with minimum number of writes.
///
void format();
private:
uint32_t _reservedForConfig;
Storage *_storage;
uint32_t _currentNumberOfRecords;
uint32_t _maximumNumberOfRecords;
};