forked from matth-x/MicroOcpp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGetConfiguration.cpp
More file actions
88 lines (68 loc) · 2.95 KB
/
Copy pathGetConfiguration.cpp
File metadata and controls
88 lines (68 loc) · 2.95 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
// matth-x/ArduinoOcpp
// Copyright Matthias Akstaller 2019 - 2021
// MIT License
#include <Variants.h>
#include <ArduinoOcpp/MessagesV16/GetConfiguration.h>
#include <ArduinoOcpp/Core/Configuration.h>
using ArduinoOcpp::Ocpp16::GetConfiguration;
GetConfiguration::GetConfiguration() {
keys = std::vector<String>();
}
GetConfiguration::~GetConfiguration() {
//keys.clear();
}
const char* GetConfiguration::getOcppOperationType(){
return "GetConfiguration";
}
void GetConfiguration::processReq(JsonObject payload) {
JsonArray requestedKeys = payload["key"];
for (uint16_t i = 0; i < requestedKeys.size(); i++) {
keys.push_back(requestedKeys[i].as<String>());
}
}
DynamicJsonDocument* GetConfiguration::createConf(){
std::shared_ptr<std::vector<std::shared_ptr<AbstractConfiguration>>> configurationKeys;
std::vector<String> unknownKeys;
if (keys.size() == 0){ //return all existing keys
configurationKeys = getAllConfigurations();
} else { //only return keys that were searched using the "key" parameter
configurationKeys = std::make_shared<std::vector<std::shared_ptr<AbstractConfiguration>>>();
for (size_t i = 0; i < keys.size(); i++) {
std::shared_ptr<AbstractConfiguration> entry = getConfiguration(keys.at(i).c_str());
if (entry)
configurationKeys->push_back(entry);
else
unknownKeys.push_back(keys.at(i).c_str());
}
}
size_t capacity = 0;
std::vector<std::shared_ptr<DynamicJsonDocument>> configurationKeysJson;
for (auto confKey = configurationKeys->begin(); confKey != configurationKeys->end(); confKey++) {
std::shared_ptr<DynamicJsonDocument> entry = (*confKey)->toJsonOcppMsgEntry();
if (entry) {
configurationKeysJson.push_back(entry);
capacity += entry->capacity();
}
}
for (auto unknownKey = unknownKeys.begin(); unknownKey != unknownKeys.end(); unknownKey++) {
capacity += unknownKey->length() + 1;
}
capacity += JSON_OBJECT_SIZE(2) //configurationKey, unknownKey
+ JSON_ARRAY_SIZE(configurationKeysJson.size())
+ JSON_ARRAY_SIZE(unknownKeys.size());
DynamicJsonDocument* doc = new DynamicJsonDocument(capacity);
JsonObject payload = doc->to<JsonObject>();
JsonArray jsonConfigurationKey = payload.createNestedArray("configurationKey");
for (size_t i = 0; i < configurationKeys->size(); i++) {
jsonConfigurationKey.add(configurationKeysJson.at(i)->as<JsonObject>());
}
if (unknownKeys.size() > 0) {
if (DEBUG_OUT) Serial.print(F("My unknown keys are: \n"));
JsonArray jsonUnknownKey = payload.createNestedArray("unknownKey");
for (auto unknownKey = unknownKeys.begin(); unknownKey != unknownKeys.end(); unknownKey++) {
if (DEBUG_OUT) Serial.println(*unknownKey);
jsonUnknownKey.add(*unknownKey);
}
}
return doc;
}