69 lines
1.1 KiB
C++
69 lines
1.1 KiB
C++
// (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;
|
|
}
|