forked from vitotai/BrewPiLess
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBrewLogger.h
More file actions
214 lines (168 loc) · 4.79 KB
/
BrewLogger.h
File metadata and controls
214 lines (168 loc) · 4.79 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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
#ifndef BrewLogger_H
#define BrewLogger_H
#include <FS.h>
#if defined(ESP32)
#if UseLittleFS
#include <LittleFS.h>
#else
#include <SPIFFS.h>
#endif
#endif
extern FS& FileSystem;
#include "BPLSettings.h"
#include "TimeKeeper.h"
#define LOG_VERSION 0x6
#define INVALID_RECOVERY_TIME 0xFF
#define INVALID_TEMPERATURE -250
#define INVALID_GRAVITY -1
#define LOG_PATH "/log"
#define LogBufferSize 1024
// Log tags
#define PeriodTag 0xF0
#define StateTag 0xF1
#define EventTag 0xF2
#define CorrectionTempTag 0xF3
#define ModeTag 0xF4
#define TargetPsiTag 0xF5
#define TimeSyncTag 0xF6
#define FillTag 0xF7
#define OriginGravityTag 0xF8
#define CalibrationPointTag 0xF9
#define IgnoredCalPointMaskTag 0xFA
#define SpecificGravityTag 0xFB
#define HumidityTag 0xFC
#define HumiditySetTag 0xFD
#define ResumeBrewTag 0xFE
#define StartLogTag 0xFF
#define INVALID_TEMP_INT 0x7FFF
#define INVALID_GRAVITY_INT 0x7FFF
#define VolatileDataHeaderSize 7
#if EnableDHTSensorSupport
#define VolatileHeaderSize ( VolatileDataHeaderSize*2 + 18)
#else
#define VolatileHeaderSize ( VolatileDataHeaderSize*2 + 16)
#endif
#define OrderBeerSet 0
#define OrderBeerTemp 1
#define OrderFridgeTemp 2
#define OrderFridgeSet 3
#define OrderRoomTemp 4
#define OrderExtTemp 5
//#define OrderGravity 6
//#define OrderTiltAngle 7
// use one for Graviyt or Tilt only.
// when in calibrating, record only Tilt
// else record gravity only
#define OrderGravityInfo 6
#define OrderPressure 7
#define NumberDataBitMask 8
#define TiltEncode(g) (uint16_t)(100.0 * (g) + 0.5)
#define INVALID_TILT_ANGLE 0x7FFF
#define GravityEncode(g) (uint16_t)(10000.0 * (g) + 0.5)
#define GravityDecode(a) (float)(a)/10000.0
#define PlatoEncode(g) (uint16_t)(100.0 * (g) + 0.5)
#define PlatoDecode(a) (float)(a)/100.0
#define HighOctect(a) (uint8_t)((a)>>8)
#define LowOctect(a) (uint8_t)((a)&0xFF)
#define INVALID_PRESSURE_INT 0x7FFF
#define PressureEncode(p) (((p)>125 || (p)<-50)? INVALID_PRESSURE_INT:(int16_t)(10.0 * ((p) + 100 )+ 0.5))
#define PressureDecode(p) (float)(p)/10.0
class BrewLogger
{
public:
BrewLogger(void);
bool begin(void);
String fsinfo(void);
const char* currentLog(void);
String loggingStatus(void);
void rmLog(int index);
bool isLogging(void){ return _recording; }
bool startSession(const char *filename,bool calibrating);
void endSession(void);
bool resumeSession();
void loop(void);
void logData(void);
size_t beginCopyAfter(size_t last);
size_t read(uint8_t *buffer, size_t maxLen, size_t index);
void getFilePath(char* buf,int index);
// read data
size_t volatileDataOffset(void);
size_t volatileDataAvailable(size_t start,size_t offset);
size_t readVolatileData(uint8_t *buffer, size_t maxLen, size_t index);
// add data
void addGravity(float gravity,bool isOg=false);
void addAuxTemp(float temp);
void addTiltAngle(float tilt);
void addCorrectionTemperature(float temp);
void addTiltInWater(float tilt,float reading);
bool isCalibrating(void){ return _calibrating;}
void addIgnoredCalPointMask(uint32_t mask);
//format file system
void onFormatFS(void);
private:
size_t _fsspace;
uint32_t _chartTime;
uint32_t _lastTempLog;
uint32_t _resumeLastLogTime;
uint32_t _trackedTime;
bool _recording;
bool _calibrating;
size_t _logIndex;
size_t _savedLength;
size_t _lastRead;
char _logBuffer[LogBufferSize];
File _logFile;
// brewpi specific info
uint8_t _mode;
uint8_t _state;
bool _usePlato;
uint16_t _iTempData[5];
uint16_t _extTemp;
uint16_t _extGravity;
uint16_t _extOriginGravity;
uint16_t _extTileAngle;
int16_t _lastPressureReading;
// for circular buffer
int _logHead;
uint32_t _headTime;
uint32_t _startOffset;
bool _sendHeader;
uint32_t _sendOffset;
FileIndexes *_pFileInfo;
uint8_t _targetPsi;
#if EnableDHTSensorSupport
uint8_t _lastHumidity;
uint8_t _savedHumidityValue;
uint8_t _lastHumidityTarget;
uint8_t _savedHumidityTarget;
#endif
uint16_t _headData[VolatileDataHeaderSize];
void _resetTempData(void);
void _checkspace(void);
void _volatileHeader(char *buf);
void _startLog(bool fahrenheit,bool calibrating);
void _startVolatileLog(void);
int _availableBufferSpace(void);
void _dropData(void);
int _volatileLoggingAlloc(int size);
int _allocByte(byte size);
void _writeBuffer(int idx,uint8_t data);
void _commitData(int idx,int len);
void _addOgRecord(uint16_t og);
void _addSgRecord(uint16_t sg);
void _addGravityRecord(bool isOg, uint16_t gravity);
#if EnableDHTSensorSupport
void _addHumidityRecord(uint8_t humidity);
void _addHumidityTargetRecord(uint8_t target);
#endif
void _addModeRecord(char mode);
uint32_t _addResumeTag(void);
void _addTimeSyncTag(void);
void _addStateRecord(char state);
uint16_t _convertTemperature(float temp);
void _addTargetPsiRecord(void);
void _loadIdxFile(void);
void _saveIdxFile(void);
};
extern BrewLogger brewLogger;
#endif