esp8266: split twin callback for device settings and ease ESP WD

This commit is contained in:
Oguz Bastemur 2019-06-21 11:16:17 -07:00
Родитель 589979a237
Коммит 22ae8b80d7
2 изменённых файлов: 17 добавлений и 9 удалений

Просмотреть файл

@ -213,13 +213,15 @@ int getHubHostName(IOTContextInternal* internal, const char* dpsEndpoint,
int retval = 0;
if ((retval = _getOperationId(internal, dpsEndpoint, scopeId, deviceId,
*authHeader, *operationId, NULL)) == 0) {
WAITMS(5000);
WAITMS(2500);
IOTC_LOG(F("- iotc.dps : getting host name..."));
WAITMS(2500);
for (int i = 0; i < 5; i++) {
retval = _getOperationId(internal, dpsEndpoint, scopeId, deviceId,
*authHeader, *operationId, hostName);
if (retval == 0) break;
WAITMS(3000);
IOTC_LOG(F("- iotc.dps : getting host name...")); // re-trigger WD
}
}

Просмотреть файл

@ -334,19 +334,25 @@ static void deviceTwinGetStateCallback(AzureIOT::StringBuffer &topicName,
return;
}
jsobject_t desired;
jsobject_t desired, outDesired, outReported;
jsobject_initialize(&desired, *payload, payload.getLength());
for (unsigned i = 0, count = jsobject_get_count(&desired); i < count;
i += 2) {
char *itemName = jsobject_get_name_at(&desired, i);
if (itemName != NULL && itemName[0] != '$') {
callDesiredCallback(internal, topicName, itemName, payload);
if (jsobject_get_object_by_name(&desired, "desired", &outDesired) != -1 &&
jsobject_get_object_by_name(&desired, "reported", &outReported) != -1) {
callDesiredCallback(internal, topicName, "twin", payload);
} else {
for (unsigned i = 0, count = jsobject_get_count(&desired); i < count;
i += 2) {
char *itemName = jsobject_get_name_at(&desired, i);
if (itemName != NULL && itemName[0] != '$') {
callDesiredCallback(internal, topicName, itemName, payload);
}
if (itemName) IOTC_FREE(itemName);
}
if (itemName) IOTC_FREE(itemName);
}
jsobject_free(&outReported);
jsobject_free(&desired);
jsobject_free(&outDesired);
}
void handlePayload(char *msg, unsigned long msg_length, char *topic,