Skip to content

Commit d77a477

Browse files
authored
Merge pull request #239 from VIPnytt/refactor-memory-management
Refactor memory management to use std::vector
2 parents 21de860 + 3ae6f57 commit d77a477

7 files changed

Lines changed: 38 additions & 47 deletions

File tree

firmware/src/extensions/HomeAssistantExtension.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,11 @@ void HomeAssistantExtension::begin()
8888
}
8989
}
9090
const size_t length = measureJson(*discovery);
91-
uint8_t *payload = new uint8_t[length];
92-
serializeJson(*discovery, payload, length);
91+
std::vector<uint8_t> payload(length + 1);
92+
serializeJson(*discovery, payload.data(), length + 1);
9393
delete discovery;
9494
discovery = nullptr;
95-
Mqtt->client.publish(discoveryTopic.c_str(), 0, true, payload, length);
96-
delete[] payload;
95+
Mqtt->client.publish(discoveryTopic.c_str(), 0, true, payload.data(), length);
9796
}
9897

9998
void HomeAssistantExtension::handle()

firmware/src/extensions/MqttExtension.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,9 @@ void MqttExtension::onDisconnect(espMqttClientTypes::DisconnectReason reason)
9292
void MqttExtension::onTransmit(const JsonDocument &doc, const char *const source)
9393
{
9494
const size_t length = measureJson(doc);
95-
uint8_t *payload = new uint8_t[length + 1];
96-
serializeJson(doc, reinterpret_cast<char *>(payload), length + 1);
97-
client.publish(std::string("frekvens/" HOSTNAME "/").append(source).c_str(), doc["event"].isUnbound() ? 0 : 2, false, payload, length);
98-
delete[] payload;
95+
std::vector<char> payload(length + 1);
96+
serializeJson(doc, payload.data(), length + 1);
97+
client.publish(std::string("frekvens/" HOSTNAME "/").append(source).c_str(), doc["event"].isUnbound() ? 0 : 2, false, reinterpret_cast<const uint8_t *>(payload.data()), length);
9998
}
10099

101100
#endif // EXTENSION_MQTT

firmware/src/extensions/PlaylistExtension.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,13 @@ void PlaylistExtension::configure()
2323
if (Storage.isKey("modes"))
2424
{
2525
const size_t length = Storage.getBytesLength("modes");
26-
uint8_t *buffer = new uint8_t[length];
27-
Storage.getBytes("modes", buffer, length);
26+
std::vector<uint8_t> buffer(length);
27+
Storage.getBytes("modes", buffer.data(), length);
2828
Storage.end();
29-
deserializeJson(doc, buffer, length);
30-
delete[] buffer;
31-
for (JsonVariantConst item : doc.as<JsonArrayConst>())
29+
deserializeJson(doc, buffer.data(), length);
30+
JsonArrayConst modes = doc.as<JsonArrayConst>();
31+
playlist.reserve(modes.size());
32+
for (JsonVariantConst item : modes)
3233
{
3334
PlaylistExtension::Mode mode;
3435
mode.duration = item["duration"].as<uint16_t>();
@@ -147,13 +148,12 @@ void PlaylistExtension::setPlaylist(std::vector<PlaylistExtension::Mode> modes)
147148
playlist.push_back(mode);
148149
}
149150
const size_t length = measureJson(doc);
150-
uint8_t *buffer = new uint8_t[length + 1];
151-
serializeJson(doc, reinterpret_cast<char *>(buffer), length + 1);
151+
std::vector<uint8_t> buffer(length + 1);
152+
serializeJson(doc, reinterpret_cast<char *>(buffer.data()), length + 1);
152153
Preferences Storage;
153154
Storage.begin(name);
154-
Storage.putBytes("modes", buffer, length + 1);
155+
Storage.putBytes("modes", buffer.data(), length + 1);
155156
Storage.end();
156-
delete[] buffer;
157157
transmit();
158158
}
159159

firmware/src/extensions/ServerSentEventsExtension.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,9 @@ void ServerSentEventsExtension::begin()
2323
void ServerSentEventsExtension::onTransmit(const JsonDocument &doc, const char *const source)
2424
{
2525
const size_t length = measureJson(doc);
26-
char *payload = new char[length + 1];
27-
serializeJson(doc, payload, length + 1);
28-
client->send(payload, source);
29-
delete[] payload;
26+
std::vector<char> payload(length + 1);
27+
serializeJson(doc, payload.data(), length + 1);
28+
client->send(payload.data(), source);
3029
}
3130

3231
void ServerSentEventsExtension::onConnect(AsyncEventSourceClient *client)
@@ -35,10 +34,9 @@ void ServerSentEventsExtension::onConnect(AsyncEventSourceClient *client)
3534
for (const JsonPairConst &pair : doc.as<JsonObjectConst>())
3635
{
3736
const size_t length = measureJson(pair.value());
38-
char *payload = new char[length + 1];
39-
serializeJson(pair.value(), payload, length + 1);
40-
client->send(payload, pair.key().c_str());
41-
delete[] payload;
37+
std::vector<char> payload(length + 1);
38+
serializeJson(pair.value(), payload.data(), length + 1);
39+
client->send(payload.data(), pair.key().c_str());
4240
}
4341
}
4442

firmware/src/extensions/WebSocketExtension.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,9 @@ void WebSocketExtension::onTransmit(const JsonDocument &doc, const char *const s
2727
JsonDocument _doc;
2828
_doc[source] = doc;
2929
const size_t length = measureJson(_doc);
30-
char *payload = new char[length + 1];
31-
serializeJson(_doc, payload, length + 1);
32-
server->textAll(payload, length);
33-
delete[] payload;
30+
std::vector<char> payload(length + 1);
31+
serializeJson(_doc, payload.data(), length + 1);
32+
server->textAll(payload.data(), length);
3433
}
3534

3635
void WebSocketExtension::onEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len)
@@ -41,10 +40,9 @@ void WebSocketExtension::onEvent(AsyncWebSocket *server, AsyncWebSocketClient *c
4140
{
4241
const JsonDocument doc = Device.getTransmits();
4342
const size_t length = measureJson(doc);
44-
char *payload = new char[length + 1];
45-
serializeJson(doc, payload, length + 1);
46-
client->text(payload, length);
47-
delete[] payload;
43+
std::vector<char> payload(length + 1);
44+
serializeJson(doc, payload.data(), length + 1);
45+
client->text(payload.data(), length);
4846
}
4947
break;
5048
case AwsEventType::WS_EVT_DATA:

firmware/src/services/ConnectivityService.cpp

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,9 @@ void ConnectivityService::initStation()
115115
if (Storage.isKey("Wi-Fi"))
116116
{
117117
const size_t _length = Storage.getBytesLength("Wi-Fi");
118-
uint8_t *_buffer = new uint8_t[_length];
119-
Storage.getBytes("Wi-Fi", _buffer, _length);
120-
deserializeJson(doc, _buffer, _length);
121-
delete[] _buffer;
118+
std::vector<char> _buffer(_length);
119+
Storage.getBytes("Wi-Fi", _buffer.data(), _length);
120+
deserializeJson(doc, _buffer.data(), _length);
122121
}
123122
wifi_config_t config;
124123
if (!esp_wifi_get_config(wifi_interface_t::WIFI_IF_STA, &config))
@@ -137,11 +136,10 @@ void ConnectivityService::initStation()
137136
doc[WIFI_SSID] = WIFI_KEY;
138137
}
139138
const size_t length = measureJson(doc);
140-
uint8_t *buffer = new uint8_t[length + 1];
141-
serializeJson(doc, reinterpret_cast<char *>(buffer), length + 1);
142-
Storage.putBytes("Wi-Fi", buffer, length + 1);
139+
std::vector<uint8_t> buffer(length + 1);
140+
serializeJson(doc, reinterpret_cast<char *>(buffer.data()), length + 1);
141+
Storage.putBytes("Wi-Fi", buffer.data(), length + 1);
143142
Storage.end();
144-
delete[] buffer;
145143
for (const JsonPairConst &credentials : doc.as<JsonObjectConst>())
146144
{
147145
multi.addAP(credentials.key().c_str(), credentials.value().as<const char *>());
@@ -292,19 +290,18 @@ void ConnectivityService::transmit()
292290
if (Storage.isKey("saved"))
293291
{
294292
const size_t len = Storage.getBytesLength("saved");
295-
uint8_t *buf = new uint8_t[len];
296-
Storage.getBytes("saved", buf, len);
293+
std::vector<uint8_t> buf(len);
294+
Storage.getBytes("saved", buf.data(), len);
297295
Storage.end();
298296
JsonDocument _saved;
299-
if (!deserializeJson(_saved, buf, len))
297+
if (!deserializeJson(_saved, buf.data(), len))
300298
{
301299
JsonArray saved = doc["saved"].to<JsonArray>();
302300
for (const JsonPairConst &credentials : _saved.as<JsonObjectConst>())
303301
{
304302
saved.add(credentials.key());
305303
}
306304
}
307-
delete[] buf;
308305
}
309306
else
310307
{

firmware/src/services/DisplayService.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ DisplayService::Orientation DisplayService::getOrientation() const
141141

142142
void DisplayService::setOrientation(Orientation orientation)
143143
{
144-
uint8_t _pixel[GRID_COLUMNS * GRID_ROWS];
144+
std::vector<uint8_t> _pixel(GRID_COLUMNS * GRID_ROWS);
145145
switch ((orientation - this->orientation + 4) % 4)
146146
{
147147
case Orientation::deg180:
@@ -168,7 +168,7 @@ void DisplayService::setOrientation(Orientation orientation)
168168
return;
169169
}
170170
ESP_LOGI(name, "orientation %d°", orientation * 90);
171-
memcpy(pixel, _pixel, sizeof(_pixel));
171+
memcpy(pixel, _pixel.data(), _pixel.size());
172172
this->orientation = orientation;
173173
#if GRID_COLUMNS == GRID_ROWS
174174
ratio = this->orientation % 2

0 commit comments

Comments
 (0)