-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmemory.cpp
69 lines (54 loc) · 1.11 KB
/
memory.cpp
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
// (C) 2018-2024 by Folkert van Heusden
// Released under MIT license
#if defined(ESP32)
#include <Arduino.h>
#endif
#include <cstdlib>
#include <cstring>
#include "log.h"
#include "memory.h"
memory::memory(const uint32_t size): size(size)
{
#if defined(ESP32)
DOLOG(info, false, "Memory size (in bytes, decimal): %d", size);
if (psramFound()) {
DOLOG(info, false, "Using PSRAM");
m = reinterpret_cast<uint8_t *>(ps_malloc(size));
reset();
}
else {
m = reinterpret_cast<uint8_t *>(calloc(1, size));
}
#else
m = reinterpret_cast<uint8_t *>(calloc(1, size));
#endif
}
memory::~memory()
{
free(m);
}
void memory::reset()
{
memset(m, 0x00, size);
}
JsonDocument memory::serialize() const
{
JsonDocument j;
j["size"] = size;
JsonDocument ja;
JsonArray ja_work = ja.to<JsonArray>();
for(size_t i=0; i<size; i++)
ja_work.add(m[i]);
j["contents"] = ja;
return j;
}
memory *memory::deserialize(const JsonVariantConst j)
{
size_t size = j["size"];
memory *m = new memory(size);
JsonArrayConst ja = j["contents"].as<JsonArrayConst>();
uint32_t i = 0;
for(auto v: ja)
m->m[i++] = v;
return m;
}