diff --git a/components/mesh_ota/Mesh_OTA.c b/components/mesh_ota/Mesh_OTA.c index a2394e0..699f5d9 100644 --- a/components/mesh_ota/Mesh_OTA.c +++ b/components/mesh_ota/Mesh_OTA.c @@ -161,7 +161,6 @@ void vMeshOtaTaskServerWorker(void *arg) //set want reboot ESP_LOGI(LOG_TAG, "Updated successfully via HTTPS, set pending reboot"); bWantReboot = true; - vMeshOtaUtilAddAllNeighboursToQueue(); //add all existing neighbours to queue (aparent will not be added because this node is the root) } vTaskDelay( (SERVER_CHECK_INTERVAL*1000) / portTICK_PERIOD_MS); //sleep till next server checks } @@ -181,6 +180,7 @@ void vMeshOtaTaskOTAWorker(void *arg) esp_err_t err = ESP_OK; bool bNewOTAImage; //true if a new ota image was downloaded and validated mesh_addr_t meshNodeAddr; //node that should be checked for ota update + BaseType_t xReturned; while(true) { @@ -189,25 +189,30 @@ void vMeshOtaTaskOTAWorker(void *arg) if((uxQueueSpacesAvailable(queueNodes) - QUEUE_NODES_SIZE) == 0) { - //nodes queue is empty - if((bWantReboot == true) && (OTA_ALLOW_REBOOT == 1)) + ESP_LOGI(LOG_TAG, "//nodes queue is empty"); + + xReturned = xSemaphoreTake(bsOTAProcess, portMAX_DELAY); //wait for binary semaphore that allows to start the OTA process + if((xReturned == pdTRUE) && (bWantReboot == true) && (OTA_ALLOW_REBOOT == 1)) { ESP_LOGE(LOG_TAG, "ESP32 Reboot ..."); vTaskDelay( (1000) / portTICK_PERIOD_MS); esp_restart(); } + xSemaphoreGive(bsOTAProcess); //free binary semaphore, this allows other tasks to start the OTA process ERROR_CHECK(errMeshOtaSlaveEndpoint(&bNewOTAImage)); } else { - //queue not empty + ESP_LOGI(LOG_TAG, "//queue not empty %i", (uxQueueSpacesAvailable(queueNodes) - QUEUE_NODES_SIZE)); if (xQueueReceive(queueNodes, &meshNodeAddr, ((100) / portTICK_PERIOD_MS)) != pdTRUE) { ESP_LOGE(LOG_TAG, "Unable to receive OTA Messages from Queue"); err = ESP_FAIL; } + ESP_LOGI(LOG_TAG, "//handle node %x", meshNodeAddr.addr[5]); + ERROR_CHECK(errMeshOtaMasterEndpoint(&bNewOTAImage, &meshNodeAddr)); if (err != ESP_OK) diff --git a/components/mesh_ota/Mesh_OTA_Partition_Access.c b/components/mesh_ota/Mesh_OTA_Partition_Access.c index a545b11..8a6e63f 100644 --- a/components/mesh_ota/Mesh_OTA_Partition_Access.c +++ b/components/mesh_ota/Mesh_OTA_Partition_Access.c @@ -89,6 +89,7 @@ esp_err_t errMeshOtaPartitionAccessHttps(bool* const cpbNewOTAImage) if(err == ESP_OK) { *cpbNewOTAImage = true; //image validated + vMeshOtaUtilAddAllNeighboursToQueue(); //add all existing neighbours to queue (aparent will not be added because this node is the root) } } else diff --git a/components/mesh_ota/Mesh_OTA_Util.c b/components/mesh_ota/Mesh_OTA_Util.c index c6ec2db..712329f 100644 --- a/components/mesh_ota/Mesh_OTA_Util.c +++ b/components/mesh_ota/Mesh_OTA_Util.c @@ -328,17 +328,24 @@ void vMeshOtaUtilClearOtaMessageQueue(const mesh_addr_t* const cpcMeshNodeAddr) void vMeshOtaUtilClearNeighboursQueue(const mesh_addr_t* const cpcMeshNodeAddr) { mesh_addr_t sNode; //packet for sending and receiving - for (uint32_t u32Index = 0; (u32Index < QUEUE_MESSAGE_OTA_SIZE); u32Index++) //loop through all OTA messages + for (uint32_t u32Index = 0; (u32Index < QUEUE_NODES_SIZE); u32Index++) //loop through all node queue { if (xQueueReceive(queueNodes, &sNode, 0) == pdTRUE) { - if(!(bMeshNetworkCheckMacEquality(sNode.addr, cpcMeshNodeAddr->addr))) + if((bMeshNetworkCheckMacEquality(sNode.addr, cpcMeshNodeAddr->addr))) { - //node is NOT cpcMeshNodeAddr --> keep it in queue - vMeshOtaUtilAddNodeToPossibleUpdatableQueue(cpcMeshNodeAddr->addr); + ESP_LOGI(LOG_TAG, "REMOVE_NODE: remove node %x", sNode.addr[5]); } + else + { + ESP_LOGI(LOG_TAG, "//node is NOT cpcMeshNodeAddr: %i --> keep it in queue", sNode.addr[5]); + vMeshOtaUtilAddNodeToPossibleUpdatableQueue(sNode.addr); + } + + }else{ + ESP_LOGI(LOG_TAG, "REMOVE_NODE: queue leer"); } - }//end OTA message loop + }//end nodes } /** @@ -361,7 +368,7 @@ void vMeshOtaUtilAddNodeToPossibleUpdatableQueue(const uint8_t* const cpcu8MAC) } else { - ESP_LOGD(LOG_TAG, "added node \"%x:%x:%x:%x:%x:%x\" to possible updatable queue", addrNode.addr[0], addrNode.addr[1], addrNode.addr[2], addrNode.addr[3], addrNode.addr[4], addrNode.addr[5]); + ESP_LOGI(LOG_TAG, "added node \"%x:%x:%x:%x:%x:%x\" to possible updatable queue", addrNode.addr[0], addrNode.addr[1], addrNode.addr[2], addrNode.addr[3], addrNode.addr[4], addrNode.addr[5]); } } diff --git a/components/mesh_ota/include/Mesh_OTA.h b/components/mesh_ota/include/Mesh_OTA.h index a16e47e..d28421f 100644 --- a/components/mesh_ota/include/Mesh_OTA.h +++ b/components/mesh_ota/include/Mesh_OTA.h @@ -18,8 +18,8 @@ #include "HTTPS_Client.h" #define ERASE_NVS //erase non volatile storage if full -#define QUEUE_NODES_SIZE 10 -#define QUEUE_MESSAGE_OTA_SIZE 10 +#define QUEUE_NODES_SIZE 20 +#define QUEUE_MESSAGE_OTA_SIZE 20 #define SERVER_CHECK_INTERVAL 30 //in seconds #define OTA_HTTPS_SEGMENT_SIZE 2048U #define OTA_PROGRESS_LOG_INTERVAL 7U diff --git a/main/Blinky_LED.h b/main/Blinky_LED.h index c75948d..909d5d4 100644 --- a/main/Blinky_LED.h +++ b/main/Blinky_LED.h @@ -20,7 +20,7 @@ #include "Mesh_OTA.h" -#define NEW_VERSION +//#define NEW_VERSION #define GPIO_BOOT_BTN 0 //GPIO0 (Boot BTN) #define GPIO_LED_BLUE 2 //GPIO2 (internal blue LED in DevKit V1.0) diff --git a/sdkconfig b/sdkconfig index 3c40aa7..50ef1cf 100644 --- a/sdkconfig +++ b/sdkconfig @@ -32,7 +32,7 @@ CONFIG_APP_COMPILE_TIME_DATE=y # CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set # CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set CONFIG_APP_PROJECT_VER_FROM_CONFIG=y -CONFIG_APP_PROJECT_VER="0.0.7" +CONFIG_APP_PROJECT_VER="0.0.26" CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16 # end of Application manager