refactor #2
@ -67,7 +67,7 @@ esp_err_t errMeshOTAInitialize()
|
|||||||
}
|
}
|
||||||
|
|
||||||
ERROR_CHECK(errMeshNetworkSetChildConnectedHandle(vAddNodeToPossibleUpdatableQueue));
|
ERROR_CHECK(errMeshNetworkSetChildConnectedHandle(vAddNodeToPossibleUpdatableQueue));
|
||||||
ERROR_CHECK(errMeshNetworkSetOTAMessageHandleHandle(vAddOTAControllMessageToQueue));
|
ERROR_CHECK(errMeshNetworkSetOTAMessageHandleHandle(vAddOtaMessageToQueue));
|
||||||
ERROR_CHECK(errMeshNetworkSetChangeStateOfServerWorkerHandle(vChangeStateOfServerWorker));
|
ERROR_CHECK(errMeshNetworkSetChangeStateOfServerWorkerHandle(vChangeStateOfServerWorker));
|
||||||
|
|
||||||
if(err == ESP_OK)
|
if(err == ESP_OK)
|
||||||
@ -121,7 +121,7 @@ void vAddNodeToPossibleUpdatableQueue(uint8_t* pu8MAC)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void vAddOTAControllMessageToQueue(MESH_PACKET_t* puMeshPacket)
|
void vAddOtaMessageToQueue(MESH_PACKET_t* puMeshPacket)
|
||||||
{
|
{
|
||||||
//send ota packet to packet queue
|
//send ota packet to packet queue
|
||||||
if (xQueueSend(queueMessageOTA, puMeshPacket, portMAX_DELAY) != pdPASS)
|
if (xQueueSend(queueMessageOTA, puMeshPacket, portMAX_DELAY) != pdPASS)
|
||||||
@ -455,7 +455,7 @@ esp_err_t errOTAMeshMaster(bool* pbNewOTAImage, mesh_addr_t* pMeshNodeAddr)
|
|||||||
else if (err == ESP_OK)
|
else if (err == ESP_OK)
|
||||||
{
|
{
|
||||||
//received from wrong node or type --> back to queue
|
//received from wrong node or type --> back to queue
|
||||||
vAddOTAControllMessageToQueue(&sOTAMessage);
|
vAddOtaMessageToQueue(&sOTAMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -674,10 +674,33 @@ esp_err_t errSendOTAVersionResponse(mesh_addr_t* pMeshReceiverAddr)
|
|||||||
pBootPartition = esp_ota_get_boot_partition(); //get boot partition (that will booted after reset), not the running partition
|
pBootPartition = esp_ota_get_boot_partition(); //get boot partition (that will booted after reset), not the running partition
|
||||||
ERROR_CHECK(esp_ota_get_partition_description(pBootPartition, &bootPartitionDesc)); //get metadate of partition
|
ERROR_CHECK(esp_ota_get_partition_description(pBootPartition, &bootPartitionDesc)); //get metadate of partition
|
||||||
memcpy(&packet.au8Payload, &bootPartitionDesc.version, 12); //copy local version to OTA_Version_Response packet
|
memcpy(&packet.au8Payload, &bootPartitionDesc.version, 12); //copy local version to OTA_Version_Response packet
|
||||||
|
|
||||||
|
ESP_LOGI(LOG_TAG, "Send OTA_Version_Response to 0x%x", pMeshReceiverAddr->addr[5]);
|
||||||
|
|
||||||
err = errSendMeshPacket(pMeshReceiverAddr, &packet);
|
err = errSendMeshPacket(pMeshReceiverAddr, &packet);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void vClearOtaMessageQueue(mesh_addr_t* pMeshNodeAddr)
|
||||||
|
{
|
||||||
|
MESH_PACKET_t sMeshPacket; //packet for sending and receiving
|
||||||
|
for (uint32_t u32Index = 0; (u32Index < QUEUE_MESSAGE_OTA_SIZE); u32Index++) //loop through all OTA messages
|
||||||
|
{
|
||||||
|
if (xQueueReceive(queueMessageOTA, &sMeshPacket, 0) == pdTRUE)
|
||||||
|
{
|
||||||
|
if(!(bCheckMACEquality(sMeshPacket.meshSenderAddr.addr, pMeshNodeAddr->addr)))
|
||||||
|
{
|
||||||
|
//received OTA message is NOT from pMeshNodeAddr --> keep it in queue
|
||||||
|
vAddOtaMessageToQueue(&sMeshPacket);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ESP_LOGI(LOG_TAG, "Removed type %i from node 0x%x", sMeshPacket.type, pMeshNodeAddr->addr[5]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}//end OTA message loop
|
||||||
|
}
|
||||||
|
|
||||||
esp_err_t errSendOTAVersionRequest(mesh_addr_t* pMeshReceiverAddr)
|
esp_err_t errSendOTAVersionRequest(mesh_addr_t* pMeshReceiverAddr)
|
||||||
{
|
{
|
||||||
esp_err_t err = ESP_OK;
|
esp_err_t err = ESP_OK;
|
||||||
@ -746,7 +769,7 @@ esp_err_t errOTAMeshTransmit(mesh_addr_t* pMeshNodeAddr)
|
|||||||
// if(uxQueueSpacesAvailable(queueMessageOTA) < QUEUE_MESSAGE_OTA_SIZE)
|
// if(uxQueueSpacesAvailable(queueMessageOTA) < QUEUE_MESSAGE_OTA_SIZE)
|
||||||
// {
|
// {
|
||||||
//queue not empty
|
//queue not empty
|
||||||
if (xQueueReceive(queueMessageOTA, &sMeshPacket, ((3000) / portTICK_PERIOD_MS)) != pdTRUE)
|
if (xQueueReceive(queueMessageOTA, &sMeshPacket, ((OTA_MESH_TIMEOUT) / portTICK_PERIOD_MS)) != pdTRUE)
|
||||||
{
|
{
|
||||||
ESP_LOGE(LOG_TAG, "Unable to receive OTA Messages from queue");
|
ESP_LOGE(LOG_TAG, "Unable to receive OTA Messages from queue");
|
||||||
err = ESP_FAIL;
|
err = ESP_FAIL;
|
||||||
@ -768,14 +791,14 @@ esp_err_t errOTAMeshTransmit(mesh_addr_t* pMeshNodeAddr)
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
//receives wrong OTA message type from node --> back to queue
|
//receives wrong OTA message type from node --> back to queue
|
||||||
//vAddOTAControllMessageToQueue(&sMeshPacket);
|
//vAddOtaMessageToQueue(&sMeshPacket);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (err == ESP_OK)
|
else if (err == ESP_OK)
|
||||||
{
|
{
|
||||||
//received from wrong node --> back to queue
|
//received from wrong node --> back to queue
|
||||||
vAddOTAControllMessageToQueue(&sMeshPacket);
|
vAddOtaMessageToQueue(&sMeshPacket);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
}
|
}
|
||||||
@ -798,6 +821,7 @@ esp_err_t errOTAMeshTransmit(mesh_addr_t* pMeshNodeAddr)
|
|||||||
}
|
}
|
||||||
u32SegmentCounter++;
|
u32SegmentCounter++;
|
||||||
}//end of partition segment loop
|
}//end of partition segment loop
|
||||||
|
vClearOtaMessageQueue(pMeshNodeAddr);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -826,7 +850,7 @@ esp_err_t errOTAMeshReceive(bool* pbNewOTAImage, mesh_addr_t* pMeshNodeAddr)
|
|||||||
//if(uxQueueSpacesAvailable(queueMessageOTA) < QUEUE_MESSAGE_OTA_SIZE)
|
//if(uxQueueSpacesAvailable(queueMessageOTA) < QUEUE_MESSAGE_OTA_SIZE)
|
||||||
// {
|
// {
|
||||||
//queue not empty
|
//queue not empty
|
||||||
if (xQueueReceive(queueMessageOTA, &sMeshPacket, ((3000) / portTICK_PERIOD_MS)) != pdTRUE)
|
if (xQueueReceive(queueMessageOTA, &sMeshPacket, ((OTA_MESH_TIMEOUT) / portTICK_PERIOD_MS)) != pdTRUE)
|
||||||
{
|
{
|
||||||
ESP_LOGE(LOG_TAG, "Unable to receive OTA Messages from queue");
|
ESP_LOGE(LOG_TAG, "Unable to receive OTA Messages from queue");
|
||||||
err = ESP_FAIL;
|
err = ESP_FAIL;
|
||||||
@ -856,14 +880,14 @@ esp_err_t errOTAMeshReceive(bool* pbNewOTAImage, mesh_addr_t* pMeshNodeAddr)
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
//receives wrong OTA message type from node --> back to queue
|
//receives wrong OTA message type from node --> back to queue
|
||||||
//vAddOTAControllMessageToQueue(&sMeshPacket);
|
//vAddOtaMessageToQueue(&sMeshPacket);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (err == ESP_OK)
|
else if (err == ESP_OK)
|
||||||
{
|
{
|
||||||
//received from wrong node --> back to queue
|
//received from wrong node --> back to queue
|
||||||
vAddOTAControllMessageToQueue(&sMeshPacket);
|
vAddOtaMessageToQueue(&sMeshPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }
|
/* }
|
||||||
@ -927,5 +951,6 @@ esp_err_t errOTAMeshReceive(bool* pbNewOTAImage, mesh_addr_t* pMeshNodeAddr)
|
|||||||
//not all OTA segments received --> abort this OTA process
|
//not all OTA segments received --> abort this OTA process
|
||||||
ERROR_CHECK(esp_ota_abort(otaHandle));
|
ERROR_CHECK(esp_ota_abort(otaHandle));
|
||||||
}
|
}
|
||||||
|
vClearOtaMessageQueue(pMeshNodeAddr);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -136,7 +136,6 @@ bool bCheckMACEquality(uint8_t* pu8aMAC, uint8_t* pu8bMAC)
|
|||||||
bRet = true; //last byte differs 1 ore less
|
bRet = true; //last byte differs 1 ore less
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
return bRet;
|
return bRet;
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
#define OTA_HTTPS_SEGMENT_SIZE 2048U
|
#define OTA_HTTPS_SEGMENT_SIZE 2048U
|
||||||
#define OTA_PROGRESS_LOG_INTERVAL 7U
|
#define OTA_PROGRESS_LOG_INTERVAL 7U
|
||||||
#define OTA_MESH_SEGMENT_SIZE MESH_NETWORK_PAYLOAD_SIZE
|
#define OTA_MESH_SEGMENT_SIZE MESH_NETWORK_PAYLOAD_SIZE
|
||||||
#define OTA_MESH_TIMEOUT 400U //in ms
|
#define OTA_MESH_TIMEOUT 20000U //in ms
|
||||||
|
|
||||||
#define ERROR_CHECK(x) if (err == ESP_OK) \
|
#define ERROR_CHECK(x) if (err == ESP_OK) \
|
||||||
{ \
|
{ \
|
||||||
@ -59,10 +59,11 @@ void vPrintOTAProgress(const uint32_t* const pu32TotalImageSize, const uint32_t*
|
|||||||
void vAddAllNeighboursToQueue(void);
|
void vAddAllNeighboursToQueue(void);
|
||||||
esp_err_t errSendOTAVersionResponse(mesh_addr_t* meshReceiverAddr);
|
esp_err_t errSendOTAVersionResponse(mesh_addr_t* meshReceiverAddr);
|
||||||
esp_err_t errSendOTAVersionRequest(mesh_addr_t* meshReceiverAddr);
|
esp_err_t errSendOTAVersionRequest(mesh_addr_t* meshReceiverAddr);
|
||||||
|
void vClearOtaMessageQueue(mesh_addr_t* pMeshNodeAddr);
|
||||||
|
|
||||||
//Handler
|
//Handler
|
||||||
void vAddNodeToPossibleUpdatableQueue(uint8_t* pu8MAC);
|
void vAddNodeToPossibleUpdatableQueue(uint8_t* pu8MAC);
|
||||||
void vAddOTAControllMessageToQueue(MESH_PACKET_t* puMeshPacket);
|
void vAddOtaMessageToQueue(MESH_PACKET_t* puMeshPacket);
|
||||||
void vChangeStateOfServerWorker(bool state);
|
void vChangeStateOfServerWorker(bool state);
|
||||||
|
|
||||||
//Tasks
|
//Tasks
|
||||||
|
Loading…
Reference in New Issue
Block a user