Skip to content

Commit

Permalink
Port examples and test to arduinojson beta
Browse files Browse the repository at this point in the history
  • Loading branch information
BlackEdder committed Dec 6, 2018
1 parent d3c8aef commit 2e485d8
Show file tree
Hide file tree
Showing 8 changed files with 148 additions and 14 deletions.
23 changes: 21 additions & 2 deletions examples/logClient/logClient.ino
Original file line number Diff line number Diff line change
Expand Up @@ -19,20 +19,33 @@ size_t logServerId = 0;

// Send message to the logServer every 10 seconds
Task myLoggingTask(10000, TASK_FOREVER, []() {
DynamicJsonBuffer jsonBuffer;
JsonObject& msg = jsonBuffer.createObject();
#if ARDUINOJSON_VERSION_MAJOR==6
DynamicJsonDocument jsonBuffer;
JsonObject msg = jsonBuffer.to<JsonObject>();
#else
DynamicJsonBuffer jsonBuffer;
JsonObject& msg = jsonBuffer.createObject();
#endif
msg["topic"] = "sensor";
msg["value"] = random(0, 180);

String str;
#if ARDUINOJSON_VERSION_MAJOR==6
serializeJson(msg, str);
#else
msg.printTo(str);
#endif
if (logServerId == 0) // If we don't know the logServer yet
mesh.sendBroadcast(str);
else
mesh.sendSingle(logServerId, str);

// log to serial
#if ARDUINOJSON_VERSION_MAJOR==6
serializeJson(msg, Serial);
#else
msg.printTo(Serial);
#endif
Serial.printf("\n");
});

Expand All @@ -58,8 +71,14 @@ void receivedCallback( uint32_t from, String &msg ) {
Serial.printf("logClient: Received from %u msg=%s\n", from, msg.c_str());

// Saving logServer
#if ARDUINOJSON_VERSION_MAJOR==6
DynamicJsonDocument jsonBuffer;
DeserializationError error = deserializeJson(jsonBuffer, msg);
JsonObject root = jsonBuffer.as<JsonObject>();
#else
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(msg);
#endif
if (root.containsKey("topic")) {
if (String("logServer").equals(root["topic"].as<String>())) {
// check for on: true or false
Expand Down
17 changes: 15 additions & 2 deletions examples/logServer/logServer.ino
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,30 @@ void receivedCallback( uint32_t from, String &msg );

// Send my ID every 10 seconds to inform others
Task logServerTask(10000, TASK_FOREVER, []() {
DynamicJsonBuffer jsonBuffer;
JsonObject& msg = jsonBuffer.createObject();
#if ARDUINOJSON_VERSION_MAJOR==6
DynamicJsonDocument jsonBuffer;
JsonObject msg = jsonBuffer.to<JsonObject>();
#else
DynamicJsonBuffer jsonBuffer;
JsonObject& msg = jsonBuffer.createObject();
#endif
msg["topic"] = "logServer";
msg["nodeId"] = mesh.getNodeId();

String str;
#if ARDUINOJSON_VERSION_MAJOR==6
serializeJson(msg, str);
#else
msg.printTo(str);
#endif
mesh.sendBroadcast(str);

// log to serial
#if ARDUINOJSON_VERSION_MAJOR==6
serializeJson(msg, Serial);
#else
msg.printTo(Serial);
#endif
Serial.printf("\n");
});

Expand Down
16 changes: 15 additions & 1 deletion examples/namedMesh/namedMesh.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,15 @@ class namedMesh : public painlessMesh {
namedMesh() {
receivedCallback = [this](uint32_t from, String &msg) {
// Try to parse it.. Need to test it with non json function
#if ARDUINOJSON_VERSION_MAJOR==6
DynamicJsonDocument jsonBuffer;
DeserializationError error = deserializeJson(jsonBuffer, msg);
JsonObject root = jsonBuffer.as<JsonObject>();
#else
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(msg);
if (root.success() && root.containsKey("topic") &&
#endif
if (root.containsKey("topic") &&
String("nameBroadCast").equals(root["topic"].as<String>())) {
nameMap[from] = root["name"].as<String>();
} else {
Expand Down Expand Up @@ -52,11 +58,19 @@ class namedMesh : public painlessMesh {
[this]() {
String msg;
// Create arduinoJson msg
#if ARDUINOJSON_VERSION_MAJOR==6
DynamicJsonDocument jsonBuffer;
JsonObject root = jsonBuffer.to<JsonObject>();
root["topic"] = "nameBroadCast";
root["name"] = this->getName();
serializeJson(root, msg);
#else
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
root["topic"] = "nameBroadCast";
root["name"] = this->getName();
root.printTo(msg);
#endif
this->sendBroadcast(msg);
}
);
Expand Down
3 changes: 2 additions & 1 deletion src/painlessMeshConnection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -541,7 +541,8 @@ void ICACHE_FLASH_ATTR MeshConnection::handleMessage(String &buffer, uint32_t re

#if ARDUINOJSON_VERSION_MAJOR==6
DynamicJsonDocument jsonBuffer;
DeserializationError error = deserializeJson(jsonBuffer, buffer.c_str());
jsonBuffer.nestingLimit = 255;
DeserializationError error = deserializeJson(jsonBuffer, buffer);
if (error) {
staticThis->debugMsg(ERROR, "meshRecvCb(): parseObject() failed. total_length=%d, data=%s<--\n", buffer.length(), buffer.c_str());
return;
Expand Down
31 changes: 29 additions & 2 deletions test/basic/basic.ino
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,13 @@ void test_approxNoNodes() {

void test_jsonnodeid() {
uint32_t mx = 0 - 1;
#if ARDUINOJSON_VERSION_MAJOR==6
DynamicJsonDocument jsonBuffer;
JsonObject root = jsonBuffer.to<JsonObject>();
#else
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
#endif
root["test"] = mx;
TEST_ASSERT_EQUAL(root["test"], mx);
TEST_ASSERT(String(mx).equals(root["test"].as<String>()));
Expand Down Expand Up @@ -127,9 +132,14 @@ void test_subRooted() {
void test_parseNodeSyncRoot() {
// Test passing subconnection json correctly picks top level root
auto conn = std::make_shared<MeshConnection>();
DynamicJsonBuffer buf;
auto str = "{}";
#if ARDUINOJSON_VERSION_MAJOR==6
DynamicJsonDocument buf;
JsonObject obj = buf.to<JsonObject>();
#else
DynamicJsonBuffer buf;
auto& obj = buf.createObject();
#endif
obj["subs"] = "{}";
TEST_ASSERT(!painlessmesh::parseNodeSyncRoot(conn, obj));

Expand Down Expand Up @@ -159,14 +169,31 @@ void test_buildPackage_root() {
String msg = "subs";
String pkg;
pkg = mesh.buildMeshPackage(1, 2, NODE_SYNC_REQUEST, msg);
#if ARDUINOJSON_VERSION_MAJOR==6
DynamicJsonDocument jsonBuffer;
DeserializationError error = deserializeJson(jsonBuffer, pkg);
if (error) {
return;
}
JsonObject jsonObj = jsonBuffer.as<JsonObject>();
#else
DynamicJsonBuffer jsonBuffer;
auto& jsonObj = jsonBuffer.parseObject(pkg);
#endif
TEST_ASSERT(!jsonObj.containsKey("root"));

mesh.setRoot();
pkg = mesh.buildMeshPackage(1, 2, NODE_SYNC_REQUEST, msg);
jsonBuffer;
#if ARDUINOJSON_VERSION_MAJOR==6
DynamicJsonDocument jsonBuffer;
DeserializationError error = deserializeJson(jsonBuffer, pkg);
if (error) {
return;
}
JsonObject jsonObj2 = jsonBuffer.as<JsonObject>();
#else
auto& jsonObj2 = jsonBuffer.parseObject(pkg);
#endif
TEST_ASSERT(jsonObj2.containsKey("root"));
TEST_ASSERT(jsonObj2["root"].as<bool>());
}
Expand Down
34 changes: 29 additions & 5 deletions test/debugNode/debugNode.ino
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,14 @@ painlessMesh mesh;
String state;
void collectData() {
state = "";

#if ARDUINOJSON_VERSION_MAJOR==6
DynamicJsonDocument jsonBuffer;
JsonObject stateObj = jsonBuffer.to<JsonObject>();
#else
DynamicJsonBuffer jsonBuffer;
JsonObject& stateObj = jsonBuffer.createObject();
#endif
stateObj["nodeId"] = mesh.getNodeId();
#ifdef ESP32
stateObj["hardware"] = "ESP32";
Expand All @@ -51,15 +57,28 @@ void collectData() {

stateObj["isRoot"] = mesh.isRoot();
stateObj["isRooted"] = mesh.isRooted();

String subs = mesh.subConnectionJson();
#if ARDUINOJSON_VERSION_MAJOR==6
DynamicJsonDocument subsBuffer;
subsBuffer.nestingLimit = 255;
DeserializationError error = deserializeJson(subsBuffer, subs);
if (error) {
return;
}
JsonArray subsArr = subsBuffer.as<JsonArray>();
#else
DynamicJsonBuffer subsBuffer;
JsonArray& subsArr = jsonBuffer.parseArray(subs, 255);
if (subsArr.success())
stateObj["subs"] = subsArr;
//else
JsonArray& subsArr = subsBuffer.parseArray(subs, 255);
if (!subsArr.success())
return;
#endif
stateObj["subs"] = subsArr;
stateObj["subsOrig"] = subs;
JsonArray& connections = stateObj.createNestedArray("connections");
stateObj["csize"] = mesh._connections.size();
#if ARDUINOJSON_VERSION_MAJOR==6
#else
JsonArray& connections = stateObj.createNestedArray("connections");
for(auto && conn : mesh._connections) {
JsonObject& connection = connections.createNestedObject();
connection["nodeId"] = conn->nodeId;
Expand All @@ -69,7 +88,12 @@ void collectData() {
connection["rooted"] = conn->rooted;
connection["subs"] = conn->subConnections;
}
#endif
#if ARDUINOJSON_VERSION_MAJOR==6
serializeJsonPretty(stateObj, state);
#else
stateObj.prettyPrintTo(state);
#endif
}

Task taskGatherState( TASK_SECOND * 30, TASK_FOREVER, &collectData); // start with a one second interval
Expand Down
15 changes: 14 additions & 1 deletion test/echoNode/echoNode.ino
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,13 @@ size_t logServerId = 0;
// Send message to the logServer every 10 seconds
Task myLoggingTask(10000, TASK_FOREVER, []() {
if (logServerId != 0) {
#if ARDUINOJSON_VERSION_MAJOR==6
DynamicJsonDocument jsonBuffer;
JsonObject msg = jsonBuffer.to<JsonObject>();
#else
DynamicJsonBuffer jsonBuffer;
JsonObject& msg = jsonBuffer.createObject();
#endif
msg["topic"] = "nodeStatus";
msg["nodeId"] = mesh.getNodeId();
msg["subs"] = mesh.subConnectionJson();
Expand Down Expand Up @@ -54,9 +59,17 @@ void loop() {
void receivedCallback( uint32_t from, String &msg ) {
Serial.printf("echoNode: Received from %u msg=%s\n", from, msg.c_str());
mesh.sendSingle(from, msg);

#if ARDUINOJSON_VERSION_MAJOR==6
DynamicJsonDocument jsonBuffer;
DeserializationError error = deserializeJson(jsonBuffer, msg);
if (error) {
return;
}
JsonObject root = jsonBuffer.as<JsonObject>();
#else
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(msg);
#endif
if (root.containsKey("topic")) {
if (String("logServer").equals(root["topic"].as<String>())) {
// check for on: true or false
Expand Down
23 changes: 23 additions & 0 deletions test/network/network.ino
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,17 @@ void receivedCallback(uint32_t from, String &msg) {
}

void nodeStatusReceivedCallback(uint32_t from, String &msg) {
#if ARDUINOJSON_VERSION_MAJOR==6
DynamicJsonDocument jsonBuffer;
DeserializationError error = deserializeJson(jsonBuffer, msg);
if (error) {
return;
}
JsonObject root = jsonBuffer.as<JsonObject>();
#else
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(msg);
#endif
if (root.containsKey("topic")) {
if (String("nodeStatus").equals(root["topic"].as<String>())) {
lastNodeStatus = msg;
Expand All @@ -93,8 +102,17 @@ void test_received_equals_expected() {

void test_node_status() {
Serial.printf("Status: %s\n", lastNodeStatus.c_str());
#if ARDUINOJSON_VERSION_MAJOR==6
DynamicJsonDocument jsonBuffer;
DeserializationError error = deserializeJson(jsonBuffer, lastNodeStatus);
if (error) {
return;
}
JsonObject root = jsonBuffer.as<JsonObject>();
#else
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(lastNodeStatus);
#endif
uint32_t t = root["time"];
// Time delay within 50ms
if (t > lastNSReceived) {
Expand Down Expand Up @@ -126,8 +144,13 @@ void logMessages() {
}

Task logServerTask(10000, TASK_FOREVER, []() {
#if ARDUINOJSON_VERSION_MAJOR==6
DynamicJsonDocument jsonBuffer;
JsonObject msg = jsonBuffer.to<JsonObject>();
#else
DynamicJsonBuffer jsonBuffer;
JsonObject& msg = jsonBuffer.createObject();
#endif
msg["topic"] = "logServer";
msg["nodeId"] = mesh.getNodeId();

Expand Down

0 comments on commit 2e485d8

Please sign in to comment.