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 .
*/
2021-01-11 22:56:39 +01:00
# 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"
2021-01-20 20:55:33 +01:00
# include "nvs_flash.h"
2021-01-11 22:56:39 +01:00
# 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-11 22:56:39 +01:00
2021-01-16 00:23:02 +01:00
struct meshPacket
2021-01-11 22:56:39 +01:00
{
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
2021-01-14 23:08:45 +01:00
OTA_Version_Request , //send own version in payload
2021-01-19 12:36:21 +01:00
OTA_Version_Response , //send own version in payload
2021-01-14 23:08:45 +01:00
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
2021-01-14 23:08:45 +01:00
} 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-11 22:56:39 +01:00
} ;
2021-01-16 00:23:02 +01:00
typedef struct meshPacket MESH_PACKET_t ;
2021-01-11 22:56:39 +01:00
2021-01-20 20:55:33 +01:00
# 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 ) ) ; \
} \
} \
2021-01-11 22:56:39 +01:00
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-11 22:56:39 +01:00
2021-01-20 21:40:51 +01:00
esp_err_t errMeshNetworkInitialize ( void ) ;
esp_err_t errMeshNetworkInitializeWiFi ( void ) ;
2021-01-11 22:56:39 +01:00
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 ) ;
2021-01-21 11:43:09 +01:00
bool bMeshNetworkCheckMacEquality ( const uint8_t * const cpcu8aMAC , const uint8_t * const cpcu8bMAC ) ;
2021-01-18 22:56:42 +01:00
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-18 22:56:42 +01:00
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 ) ;
2021-01-18 22:56:42 +01:00
2021-01-11 22:56:39 +01:00
# endif /* H_MESH_NETWORK */
2021-01-16 18:23:10 +01:00