ESP32-Mesh-OTA/components/mesh_ota/include/Mesh_Network.h

121 lines
4.5 KiB
C
Raw Normal View History

2021-01-21 11:11:37 +01:00
/**
* @file Mesh_Network.h
* @brief Mesh network layer used by OTA and APP
* @author Hendrik Schutter, init based in ESP32-IDE code
* @date 20.01.2021
*
* Additional Infos: Start network and send and receive data.
*/
#ifndef H_MESH_NETWORK
#define H_MESH_NETWORK
#include <string.h>
#include "esp_wifi.h"
#include "esp_system.h"
#include "esp_event.h"
#include "esp_log.h"
#include "esp_mesh.h"
#include "esp_mesh_internal.h"
#include "nvs_flash.h"
#ifndef CONFIG_MESH_MESSAGE_SIZE
#define CONFIG_MESH_MESSAGE_SIZE 1500
#endif
#ifndef CONFIG_MESH_TOPOLOGY
#define CONFIG_MESH_TOPOLOGY MESH_TOPO_TREE
#endif
#ifndef CONFIG_MESH_MAX_LAYER
#define CONFIG_MESH_MAX_LAYER 6
#endif
#ifndef CONFIG_MESH_ID
#define CONFIG_MESH_ID "00, 00, 00, 00, 00, 00"
#endif
#ifndef CONFIG_MESH_AP_AUTHMODE
#define CONFIG_MESH_AP_AUTHMODE WIFI_AUTH_WPA2_PSK
#endif
#ifndef CONFIG_MESH_AP_CONNECTIONS
#define CONFIG_MESH_AP_CONNECTIONS 6
#endif
#ifndef CONFIG_MESH_AP_PASSWD
#define CONFIG_MESH_AP_PASSWD "MAP_PASSWD"
#endif
#ifndef CONFIG_MESH_CHANNEL
#define CONFIG_MESH_CHANNEL 0
#endif
#ifndef CONFIG_MESH_ROUTER_SSID
#define CONFIG_MESH_ROUTER_SSID "ROUTER_SSID"
#endif
#ifndef CONFIG_MESH_ROUTER_PASSWD
#define CONFIG_MESH_ROUTER_PASSWD "ROUTER_PASSWD"
#endif
#ifndef CONFIG_MESH_ROUTE_TABLE_SIZE
#define CONFIG_MESH_ROUTE_TABLE_SIZE 50
#endif
2021-01-19 22:19:30 +01:00
#define MESH_NETWORK_PAYLOAD_SIZE 1024U
2021-01-16 00:23:02 +01:00
struct meshPacket
{
2021-01-16 18:23:10 +01:00
enum otaMeshPacketType
2021-01-16 00:23:02 +01:00
{
2021-01-16 18:23:10 +01:00
APP_Data, //data for application
OTA_Version_Request, //send own version in payload
2021-01-19 12:36:21 +01:00
OTA_Version_Response, //send own version in payload
OTA_Data, //send image segment
OTA_ACK, //ack image segment
2021-01-19 22:19:30 +01:00
OTA_Complete, //signal end of image
OTA_Abort //abort OTA process
} type;
2021-01-19 22:19:30 +01:00
uint8_t au8Payload[MESH_NETWORK_PAYLOAD_SIZE];
2021-01-17 23:27:01 +01:00
mesh_addr_t meshSenderAddr;
};
2021-01-16 00:23:02 +01:00
typedef struct meshPacket MESH_PACKET_t;
#define ERROR_CHECK(x) if (err == ESP_OK) \
{ \
err = (x); \
if (err != ESP_OK) \
{ \
ESP_LOGE(LOG_TAG, "%s failed with error: 0x%x -> %s", #x, err, esp_err_to_name(err)); \
} \
} \
extern bool bIsMeshConnected;
extern int32_t i32MeshLayer;
2021-01-16 18:23:10 +01:00
extern mesh_addr_t meshParentAddr;
2021-01-20 22:39:18 +01:00
extern esp_netif_t* pNetifSta;
2021-01-16 18:23:10 +01:00
extern uint8_t u8ownMAC[6];
2021-01-20 22:39:18 +01:00
extern void (*pOTAChildConnectHandle)(const uint8_t* const);
extern void (*pChangeStateOfServerWorkerHandle)(const bool );
2021-01-20 21:40:51 +01:00
esp_err_t errMeshNetworkInitialize(void);
esp_err_t errMeshNetworkInitializeWiFi(void);
esp_err_t errMeshNetworkInitializeRouter(mesh_cfg_t* cfg);
2021-01-20 22:39:18 +01:00
esp_err_t errMeshNetworkSetChildConnectedHandle(void (*pChildConnectHandleTmp)(const uint8_t* const cpcu8Data));
esp_err_t errMeshNetworkSetAppReceiveHandle(void (*pAppRxHandleTmp)(const uint8_t* const cpcu8Data, const uint8_t* const cpcu8Sender));
esp_err_t errMeshNetworkSetOTAMessageHandleHandle(void (*pOTAMessageHandleTmp)(const MESH_PACKET_t* const cpcuMeshPacket));
esp_err_t errMeshNetworkSetChangeStateOfServerWorkerHandle(void (*pChangeStateOfServerWorkerHandleTmp)(const bool cbState));
2021-01-16 18:23:10 +01:00
2021-01-20 21:40:51 +01:00
bool bMeshNetworkIsRootNode(void);
2021-01-20 22:39:18 +01:00
bool bMeshNetworkIsNodeNeighbour(const mesh_addr_t* const cpcNode);
bool bMeshNetworkCheckMACEquality(const uint8_t* const cpcu8aMAC, const uint8_t* const cpcu8bMAC);
2021-01-20 21:40:51 +01:00
esp_err_t errMeshNetworkStartReceiveTask(void);
2021-01-20 22:39:18 +01:00
esp_err_t errMeshNetworkGetParentNode(mesh_addr_t* const cpMeshParentAddr);
esp_err_t errMeshNetworkGetChildren(mesh_addr_t* const cpChildren, uint16_t* const cpu16ChildrenSize);
esp_err_t errMeshNetworkSendMeshPacket(const mesh_addr_t* const cpcAddrDest, const MESH_PACKET_t* const cpcPacket);
2021-01-20 21:40:51 +01:00
void vMeshNetworkTaskReceiveMeshData(void *arg);
2021-01-20 22:39:18 +01:00
void vMeshNetworkGetOwnAddr(mesh_addr_t* const cpMeshOwnAddr);
2021-01-20 21:40:51 +01:00
void vMeshNetworkIpEventHandler(void *arg, esp_event_base_t event_base, int32_t i32EventID, void *vpEventData);
void vMeshNetworkMeshEventHandler(void *arg, esp_event_base_t event_base, int32_t i32EventID, void* vpEventData);
#endif /* H_MESH_NETWORK */
2021-01-16 18:23:10 +01:00