OTA Tx and Rx over Mesh

This commit is contained in:
2021-01-19 22:19:30 +01:00
parent 94aa8751cb
commit 57c71c401c
4 changed files with 253 additions and 109 deletions

View File

@ -22,6 +22,7 @@
#define SERVER_CHECK_INTERVAL 30 //in seconds
#define OTA_HTTPS_SEGMENT_SIZE 2048U
#define OTA_PROGRESS_LOG_INTERVAL 7U
#define OTA_MESH_SEGMENT_SIZE MESH_NETWORK_PAYLOAD_SIZE
#define ERROR_CHECK(x) if (err == ESP_OK) \
{ \
@ -32,17 +33,28 @@
} \
} \
enum otaMeshRole
{
Transmitter,
Receiver
};
typedef enum otaMeshRole OTA_MESH_ROLE_t;
esp_err_t errMeshOTAInitialize();
esp_err_t errOTAHTTPS(bool* pbNewOTAImage);
esp_err_t errOTAMeshSlave(bool* pbNewOTAImage);
esp_err_t errOTAMeshMaster(bool* pbNewOTAImage, mesh_addr_t* pMeshNodeAddr);
esp_err_t errOTAMeshTransmit(mesh_addr_t* pMeshNodeAddr);
esp_err_t errOTAMeshReceive(bool* pbNewOTAImage, mesh_addr_t* pMeshNodeAddr);
//helper functions
bool bNewerVersion(const char* pu8Local, const char* pu8Remote);
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);
void vPrintOTAProgress(const uint32_t* const pu32TotalImageSize, const uint32_t* const pu32BytesWritten);
void vPrintOTAProgress(const uint32_t* const pu32TotalImageSize, const uint32_t* const pu32BytesWritten, OTA_MESH_ROLE_t eRole);
void vAddAllNeighboursToQueue(void);
esp_err_t errSendOTAVersionResponse(mesh_addr_t* meshReceiverAddr);
esp_err_t errSendOTAVersionRequest(mesh_addr_t* meshReceiverAddr);

View File

@ -46,6 +46,7 @@
#define CONFIG_MESH_ROUTE_TABLE_SIZE 50
#endif
#define MESH_NETWORK_PAYLOAD_SIZE 1024U
struct meshPacket
{
@ -56,9 +57,10 @@ struct meshPacket
OTA_Version_Response, //send own version in payload
OTA_Data, //send image segment
OTA_ACK, //ack image segment
OTA_Complete //signal end of image
OTA_Complete, //signal end of image
OTA_Abort //abort OTA process
} type;
uint8_t au8Payload[1024];
uint8_t au8Payload[MESH_NETWORK_PAYLOAD_SIZE];
mesh_addr_t meshSenderAddr;
};