refactor #2
@ -91,14 +91,25 @@ esp_err_t errMeshOTAInitialize()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(err == ESP_OK)
|
||||||
|
{
|
||||||
|
xReturned = xTaskCreate(vTaskOTAWorker, "vTaskOTAWorker", 8192, NULL, 5, NULL);
|
||||||
|
if(xReturned != pdPASS)
|
||||||
|
{
|
||||||
|
ESP_LOGE(LOG_TAG, "Unable to create the OTA worker task");
|
||||||
|
err = ESP_FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
void vAddNodeToPossibleUpdatableQueue(uint8_t* pu8Data)
|
void vAddNodeToPossibleUpdatableQueue(uint8_t* pu8MAC)
|
||||||
{
|
{
|
||||||
//send payload to node queue
|
//send payload to node queues
|
||||||
mesh_addr_t addrNode;
|
mesh_addr_t addrNode;
|
||||||
memcpy(&addrNode.addr, (uint8_t *)pu8Data, 6); //copy MAC
|
memcpy(&addrNode.addr, (uint8_t *)pu8MAC, 6); //copy MAC
|
||||||
|
|
||||||
if (xQueueSend(queueNodes, &addrNode, portMAX_DELAY) != pdPASS)
|
if (xQueueSend(queueNodes, &addrNode, portMAX_DELAY) != pdPASS)
|
||||||
{
|
{
|
||||||
@ -151,11 +162,37 @@ void vChangeStateOfServerWorker(bool bState) //allow access via function ptn to
|
|||||||
|
|
||||||
void vTaskOTAWorker(void *arg)
|
void vTaskOTAWorker(void *arg)
|
||||||
{
|
{
|
||||||
|
while(true)
|
||||||
|
{
|
||||||
|
|
||||||
|
if((uxQueueSpacesAvailable(queueNodes) - QUEUE_NODES_SIZE) == 0)
|
||||||
|
{
|
||||||
|
//nodes queue is empty
|
||||||
|
ESP_LOGI(LOG_TAG, "nodes queue is empty");
|
||||||
|
|
||||||
|
if(bWantReboot == true)
|
||||||
|
{
|
||||||
|
ESP_LOGI(LOG_TAG, "ESP32 Reboot ...");
|
||||||
|
//vTaskDelay( (1000) / portTICK_PERIOD_MS);
|
||||||
|
//esp_restart();
|
||||||
|
}
|
||||||
|
|
||||||
|
//read OTAMessages queue
|
||||||
|
//if OTA_Version_Response
|
||||||
|
// --> send OTA_Version_Request
|
||||||
|
// --> this version older --> start OTA_Rx --> vAddAllNeighboursToQueue(); //add all existing neighbours to queues
|
||||||
|
// --> this version newer --> start OTA_Tx
|
||||||
|
|
||||||
|
//if not OTA_Version_Response --> do nothing
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
vTaskDelay( (1000) / portTICK_PERIOD_MS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void vTaskServerWorker(void *arg)
|
void vTaskServerWorker(void *arg)
|
||||||
@ -193,8 +230,9 @@ void vTaskServerWorker(void *arg)
|
|||||||
//set want reboot
|
//set want reboot
|
||||||
ESP_LOGI(LOG_TAG, "Updated successfully via HTTPS, set pending reboot");
|
ESP_LOGI(LOG_TAG, "Updated successfully via HTTPS, set pending reboot");
|
||||||
bWantReboot = true;
|
bWantReboot = true;
|
||||||
|
vAddAllNeighboursToQueue(); //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 check
|
vTaskDelay( (SERVER_CHECK_INTERVAL*1000) / portTICK_PERIOD_MS); //sleep till next server checks
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -404,7 +442,7 @@ esp_err_t errExtractVersionNumber(const char* pu8Data, uint32_t* pu32DataLenght,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void vPrintOTAProgress(const uint32_t* const pu32TotalImageSize, const uint32_t* const pu32BytesWritten)
|
void vPrintOTAProgress(const uint32_t* const pu32TotalImageSize, const uint32_t* const pu32BytesWritten)
|
||||||
{
|
{
|
||||||
uint32_t u32Percentage = 0U;
|
uint32_t u32Percentage = 0U;
|
||||||
static uint32_t u32LastPercentage = 0U;
|
static uint32_t u32LastPercentage = 0U;
|
||||||
@ -425,6 +463,29 @@ inline void vPrintOTAProgress(const uint32_t* const pu32TotalImageSize, const ui
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void vAddAllNeighboursToQueue(void)
|
||||||
|
{
|
||||||
|
esp_err_t err = ESP_OK;
|
||||||
|
|
||||||
|
mesh_addr_t addrParent; //addr of parent node
|
||||||
|
mesh_addr_t childrenAddr[CONFIG_MESH_ROUTE_TABLE_SIZE]; //array of children attached to this node
|
||||||
|
uint16_t u16ChildrenSize; //number of children attached to this node
|
||||||
|
|
||||||
|
err = errGetParentNode(&addrParent);
|
||||||
|
|
||||||
|
if(err == ESP_OK)
|
||||||
|
{
|
||||||
|
vAddNodeToPossibleUpdatableQueue(addrParent.addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
ERROR_CHECK(errGetChildren(childrenAddr, &u16ChildrenSize)); //get all children
|
||||||
|
|
||||||
|
for (uint16_t u16Index = 0; u16Index < u16ChildrenSize; u16Index++)
|
||||||
|
{
|
||||||
|
vAddNodeToPossibleUpdatableQueue(childrenAddr[u16Index].addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
esp_err_t esp_mesh_ota_send(mesh_addr_t* dest)
|
esp_err_t esp_mesh_ota_send(mesh_addr_t* dest)
|
||||||
{
|
{
|
||||||
|
@ -160,12 +160,14 @@ esp_err_t errGetParentNode(mesh_addr_t* pMeshParentAddr)
|
|||||||
{
|
{
|
||||||
esp_err_t err = ESP_OK;
|
esp_err_t err = ESP_OK;
|
||||||
|
|
||||||
if(bIsMeshConnected == false)
|
if((bIsMeshConnected == false) || (esp_mesh_is_root()))
|
||||||
{
|
{
|
||||||
|
//this node is not connected or is the root --> this node has no parent
|
||||||
err = ESP_FAIL;
|
err = ESP_FAIL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
//node has parent
|
||||||
memcpy(pMeshParentAddr, &meshParentAddr, sizeof(mesh_addr_t));
|
memcpy(pMeshParentAddr, &meshParentAddr, sizeof(mesh_addr_t));
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
@ -253,7 +255,8 @@ void vTaskReceiveMeshData(void *arg)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
MESH_PACKET_t packet;
|
MESH_PACKET_t packet;
|
||||||
memcpy(&packet, (uint8_t *)rx_buf, sizeof(MESH_PACKET_t));
|
memcpy(&packet, (uint8_t *)rx_buf, sizeof(MESH_PACKET_t)); //parse MESH_PACKET_t
|
||||||
|
memcpy(&packet.meshSenderAddr, &from, sizeof(mesh_addr_t)); //copy sender into packet
|
||||||
|
|
||||||
switch (packet.type)
|
switch (packet.type)
|
||||||
{
|
{
|
||||||
@ -263,19 +266,15 @@ void vTaskReceiveMeshData(void *arg)
|
|||||||
pAppRxHandle(packet.au8Payload, from.addr); //hand over payload and sender of this mesh packet
|
pAppRxHandle(packet.au8Payload, from.addr); //hand over payload and sender of this mesh packet
|
||||||
break;
|
break;
|
||||||
case OTA_Version_Request:
|
case OTA_Version_Request:
|
||||||
ESP_LOGI(LOG_TAG, "recv: OTA_Version_Request");
|
|
||||||
break;
|
|
||||||
case OTA_Version_Respone:
|
case OTA_Version_Respone:
|
||||||
ESP_LOGI(LOG_TAG, "recv: OTA_Version_Respone");
|
|
||||||
break;
|
|
||||||
case OTA_Data:
|
case OTA_Data:
|
||||||
ESP_LOGI(LOG_TAG, "recv: OTA_Data");
|
|
||||||
break;
|
|
||||||
case OTA_ACK:
|
case OTA_ACK:
|
||||||
ESP_LOGI(LOG_TAG, "recv: OTA_ACK");
|
|
||||||
break;
|
|
||||||
case OTA_Complete:
|
case OTA_Complete:
|
||||||
ESP_LOGI(LOG_TAG, "recv: OTA_Complete");
|
//call the rx handle from OTA
|
||||||
|
if(pOTAMessageHandle)
|
||||||
|
{
|
||||||
|
pOTAMessageHandle(&packet);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ESP_LOGE(LOG_TAG, "recv: something");
|
ESP_LOGE(LOG_TAG, "recv: something");
|
||||||
|
@ -41,14 +41,16 @@ bool bNewerVersion(const char* pu8Local, const char* pu8Remote);
|
|||||||
esp_err_t errExtractVersionNumber(const char* pu8Data, uint32_t* pu32DataLenght, char* pc8RemoteVersionNumber);
|
esp_err_t errExtractVersionNumber(const char* pu8Data, uint32_t* pu32DataLenght, char* pc8RemoteVersionNumber);
|
||||||
esp_err_t errFindImageStart(const char* pu8Data, uint32_t* pu32DataLenght, uint32_t* pu32StartOffset);
|
esp_err_t errFindImageStart(const char* pu8Data, uint32_t* pu32DataLenght, uint32_t* pu32StartOffset);
|
||||||
void vPrintOTAProgress(const uint32_t* const pu32TotalImageSize, const uint32_t* const pu32BytesWritten);
|
void vPrintOTAProgress(const uint32_t* const pu32TotalImageSize, const uint32_t* const pu32BytesWritten);
|
||||||
|
void vAddAllNeighboursToQueue(void);
|
||||||
|
|
||||||
//Handler
|
//Handler
|
||||||
void vAddNodeToPossibleUpdatableQueue(uint8_t* pu8Data);
|
void vAddNodeToPossibleUpdatableQueue(uint8_t* pu8MAC);
|
||||||
void vAddOTAControllMessageToQueue(MESH_PACKET_t* puMeshPacket);
|
void vAddOTAControllMessageToQueue(MESH_PACKET_t* puMeshPacket);
|
||||||
void vChangeStateOfServerWorker(bool state);
|
void vChangeStateOfServerWorker(bool state);
|
||||||
|
|
||||||
//Tasks
|
//Tasks
|
||||||
inline void vTaskServerWorker(void *arg);
|
void vTaskServerWorker(void *arg);
|
||||||
|
void vTaskOTAWorker(void *arg);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -95,5 +95,8 @@ void vIPEventHandler(void *arg, esp_event_base_t event_base, int32_t i32EventID,
|
|||||||
|
|
||||||
esp_err_t errSendMeshPacket(mesh_addr_t* pAddrDest, MESH_PACKET_t* pPacket);
|
esp_err_t errSendMeshPacket(mesh_addr_t* pAddrDest, MESH_PACKET_t* pPacket);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* H_MESH_NETWORK */
|
#endif /* H_MESH_NETWORK */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user