Skip to content

Commit 2d85c19

Browse files
committed
Implement SD Logging with config (slow!)
1 parent d1e9179 commit 2d85c19

9 files changed

+97
-8
lines changed

BoxConfig.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ String BoxConfig::getAsJson() {
7070
wifiDoc["ssid"] = wifiCfg->ssid;
7171
wifiDoc["password"] = wifiCfg->password;
7272

73+
JsonObject logDoc = doc.createNestedObject("log");
74+
ConfigLog* logCfg = &_config.log;
75+
logDoc["sdLog"] = logCfg->sdLog;
76+
7377
serializeJson(doc, json);
7478
return json;
7579
}
@@ -102,6 +106,10 @@ bool BoxConfig::setFromJson(String json) {
102106
strncpy(&wifiCfg->ssid[0], wifiDoc["ssid"].as<char*>(), sizeof(wifiCfg->ssid));
103107
strncpy(&wifiCfg->password[0], wifiDoc["password"].as<char*>(), sizeof(wifiCfg->password));
104108

109+
JsonObject logDoc = doc["log"];
110+
ConfigLog* logCfg = &_config.log;
111+
logCfg->sdLog = logDoc["sdLog"].as<bool>();
112+
105113
// Convert old config version to latest one.
106114
if (_config.version != CONFIG_ACTIVE_VERSION) {
107115
switch (_config.version) {
@@ -142,4 +150,7 @@ void BoxConfig::_initializeConfig() {
142150
#ifdef WIFI_PASS
143151
strcpy(wifi->password, WIFI_PASS);
144152
#endif
153+
154+
ConfigLog* log = &_config.log;
155+
log->sdLog = false;
145156
}

BoxConfig.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55
#include "ConfigStructures.h"
66
#include "BoxSD.h"
77

8-
#define BOXCONFIG_JSON_SIZE 447 //Size from https://arduinojson.org/v6/assistant/
8+
9+
#define BOXCONFIG_JSON_SIZE 489
10+
//{"version":255,"battery":{"voltageFactor":4294967295,"voltageChargerFactor":4294967295,"lowAdc":65535,"criticalAdc":65535,"sleepMinutes":255},"buttonEars":{"longPressMs":65535,"veryLongPressMs":65535},"wifi":{"ssid":"12345678901234567890123456789012","password":"1234567890123456789012345678901234567890123456789012345678901234"},"log":{"sdLog":false}}
11+
//Size from https://arduinojson.org/v6/assistant/
912

1013
class BoxConfig {
1114
public:

BoxSD.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "BoxSD.h"
22

33
void BoxSD::begin() {
4+
_initialized = false;
45
Log.info("Initialize SD card");
56
int result = FatFs.begin();
67
if (!result) {
@@ -10,12 +11,17 @@ void BoxSD::begin() {
1011

1112
Log.info(" Capacity: %iMB", FatFs.capacity()/1024);
1213
Log.info(" Free: %iMB", FatFs.free()/1024);
14+
_initialized = true;
1315
}
1416

1517
void BoxSD::loop() {
1618

1719
}
1820

21+
bool BoxSD::isInitialized() {
22+
return _initialized;
23+
}
24+
1925
void BoxSD::webJsonListDir(WebServer* webServer, char* directory) {
2026
DirFs dir;
2127
if (dir.openDir(directory)) {

BoxSD.h

+3
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,11 @@ class BoxSD {
1111
begin(),
1212
loop();
1313

14+
bool isInitialized();
15+
1416
void webJsonListDir(WebServer* webServer, char* directory);
1517
private:
18+
bool _initialized = false;
1619
};
1720

1821
#endif

ConfigStructures.h

+5-4
Original file line numberDiff line numberDiff line change
@@ -25,25 +25,26 @@ typedef struct {
2525

2626
typedef struct {
2727
char ssid[32];
28-
char spacer1[32];
2928
char password[64];
30-
char spacer2[64];
3129

3230
bool dhcp;
3331
ConfigIP ip;
3432
ConfigIP subnet;
3533
ConfigIP dns;
36-
char spacer3[16];
3734

3835
char hostname[32];
39-
char spacer4[128];
4036
} ConfigWifi;
4137

38+
typedef struct {
39+
bool sdLog;
40+
} ConfigLog;
41+
4242
typedef struct {
4343
uint8_t version;
4444
ConfigBattery battery;
4545
ConfigButtonEars buttonEars;
4646
ConfigWifi wifi;
47+
ConfigLog log;
4748
} ConfigStruct;
4849

4950
#endif

Hackiebox.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ void Hackiebox::setup() {
99
//reset box?!
1010
}
1111

12-
Log.init(LOG_LEVEL_VERBOSE, 115200/*, &logStream*/);
12+
Log.init(LOG_LEVEL_VERBOSE, 115200, &logStreamSd);
1313
Log.info("Booting Hackiebox, Free MEM=%ib...", freeMemory());
1414

1515
Wire.begin();

Hackiebox.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323
#include "WrapperWiFi.h"
2424
#include "WrapperWebServer.h"
2525

26-
#include "LogStream.h"
26+
#include "LogStreamSd.h"
27+
#include "LogStreamSse.h"
2728

2829
class Hackiebox {
2930
public:
@@ -52,7 +53,8 @@ class Hackiebox {
5253
WrapperWiFi boxWiFi;
5354
WrapperWebServer webServer;
5455

55-
LogStream logStream;
56+
LogStreamSd logStreamSd;
57+
LogStreamSse logStreamSse;
5658

5759
private:/*
5860
typedef void (*fAPPWDTDevCallbk)();

LogStreamSd.cpp

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#include "LogStreamSd.h"
2+
3+
#include "WrapperWebServer.h"
4+
#include "Hackiebox.h"
5+
6+
#include <Logging.h>
7+
8+
size_t LogStreamSd::write(uint8_t character) {
9+
write(&character, 1);
10+
}
11+
size_t LogStreamSd::write(const uint8_t *buffer, size_t size) {
12+
if (!Config.get()->log.sdLog)
13+
return 0;
14+
if (!Box.boxSD.isInitialized())
15+
return 0;/*
16+
if (!_isOpen) {
17+
Log.enableAdditionalLogger(false);
18+
Log.info("LogStreamSd::!_isOpen");
19+
Log.enableAdditionalLogger(true);
20+
_isOpen = _file.open("/revvox/logging.log", FA_OPEN_APPEND | FA_WRITE);
21+
if (!_isOpen)
22+
return 0;
23+
}*/
24+
_isOpen = _file.open("/revvox/logging.log", FA_OPEN_APPEND | FA_WRITE);
25+
if (!_isOpen)
26+
return 0;
27+
uint32_t result = _file.write((void*)buffer, (uint32_t)size);
28+
_file.close();
29+
return result;
30+
}
31+
32+
size_t LogStreamSd::println() {
33+
size_t result = print("\r\n");
34+
/*
35+
if (_isOpen) {
36+
_file.close();
37+
_isOpen = false;
38+
}*/
39+
return result;
40+
}

LogStreamSd.h

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#ifndef LogStreamSd_h
2+
#define LogStreamSd_h
3+
4+
#include <Stream.h>
5+
#include <FatFs.h>
6+
7+
class LogStreamSd : public Stream {
8+
public:
9+
size_t println();
10+
11+
size_t write(uint8_t character);
12+
size_t write(const uint8_t *buffer, size_t size);
13+
int available() {};
14+
int read(){};
15+
void flush(){};
16+
int peek(){};
17+
18+
private:
19+
FileFs _file;
20+
bool _isOpen = false;
21+
};
22+
23+
#endif

0 commit comments

Comments
 (0)