make OTA work with ArduinoJson 6.x

This commit is contained in:
Links
2023-05-01 14:48:18 +02:00
parent a4f13a1410
commit 22dff6598f

View File

@ -56,8 +56,8 @@ bool ws_conn = false;
void greetings_(){ void greetings_(){
StaticJsonDocument<200> doc; StaticJsonDocument<200> doc;
doc["type"] = "greetings"; doc["type"] = "greetings";
doc["mac"] = WiFi.macAddress(); doc["mac"] = WiFi.macAddress().c_str();
doc["ip"] = WiFi.localIP().toString(); doc["ip"] = WiFi.localIP().toString().c_str();
doc["version"] = version; doc["version"] = version;
doc["name"] = name; doc["name"] = name;
doc["chip"] = chip; doc["chip"] = chip;
@ -70,7 +70,7 @@ void greetings_(){
void register_(){ void register_(){
StaticJsonDocument<200> doc; StaticJsonDocument<200> doc;
doc["type"] = "register"; doc["type"] = "register";
doc["mac"] = WiFi.macAddress(); doc["mac"] = WiFi.macAddress().c_str();
char data[200]; char data[200];
serializeJson(doc, data); serializeJson(doc, data);
@ -87,9 +87,8 @@ typedef struct {
void OTA_RESPONSES(JsonDocument &msg){ void OTA_RESPONSES(JsonDocument &msg){
USE_SERIAL.print(F("[WSc] OTA mode: ")); USE_SERIAL.print(F("[WSc] OTA mode: "));
const char* go = "go"; String val = msg["value"];
const char* ok = "ok"; if(val == "go") {
if(strncmp( msg["value"], go, strlen(go)) == 0 ) {
USE_SERIAL.print(F("go\n")); USE_SERIAL.print(F("go\n"));
SketchSize = int(msg["size"]); SketchSize = int(msg["size"]);
maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000; maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000;
@ -100,12 +99,12 @@ void OTA_RESPONSES(JsonDocument &msg){
Update.printError(Serial); Update.printError(Serial);
ESP.restart(); ESP.restart();
} }
} else if (strncmp( msg["value"], ok, strlen(ok)) == 0) { } else if (val == "ok") {
USE_SERIAL.print(F("OK\n")); USE_SERIAL.print(F("OK\n"));
register_(); register_();
} else { } else {
USE_SERIAL.print(F("unknown value : ")); USE_SERIAL.print(F("unknown value : "));
USE_SERIAL.print(msg["value"].as<char>()); USE_SERIAL.print(val);
USE_SERIAL.print(F("\n")); USE_SERIAL.print(F("\n"));
} }
} }
@ -146,9 +145,10 @@ void text(uint8_t * payload, size_t length){
// Handle each TYPE of message // Handle each TYPE of message
int b = 0; int b = 0;
String t = doc_in["type"];
for( b=0 ; b<nrOfResponses ; b++ ) for( b=0 ; b<nrOfResponses ; b++ )
{ {
if( strncmp(doc_in["type"], responses[b].type, strlen(responses[b].type)) == 0 ) { if(t == responses[b].type) {
responses[b].func(doc_in); responses[b].func(doc_in);
} }
} }