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-11 22:56:39 +01:00
extern esp_netif_t * netif_sta ;
2021-01-16 18:23:10 +01:00
extern uint8_t u8ownMAC [ 6 ] ;
2021-01-17 23:27:01 +01:00
extern void ( * pOTAChildConnectHandle ) ( uint8_t * ) ;
extern void ( * pChangeStateOfServerWorkerHandle ) ( 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-17 23:27:01 +01:00
esp_err_t errMeshNetworkSetChildConnectedHandle ( void ( * pChildConnectHandleTmp ) ( uint8_t * pu8Data ) ) ;
2021-01-20 21:40:51 +01:00
esp_err_t errMeshNetworkSetAppReceiveHandle ( void ( * pAppRxHandleTmp ) ( uint8_t * pu8Data , uint8_t * pu8Sender ) ) ;
2021-01-17 23:27:01 +01:00
esp_err_t errMeshNetworkSetOTAMessageHandleHandle ( void ( * pOTAMessageHandleTmp ) ( MESH_PACKET_t * puMeshPacket ) ) ;
esp_err_t errMeshNetworkSetChangeStateOfServerWorkerHandle ( void ( * pChangeStateOfServerWorkerHandleTmp ) ( bool bState ) ) ;
2021-01-16 18:23:10 +01:00
2021-01-20 21:40:51 +01:00
bool bMeshNetworkIsRootNode ( void ) ;
bool bMeshNetworkIsNodeNeighbour ( mesh_addr_t * pNode ) ;
bool bMeshNetworkCheckMACEquality ( uint8_t * pu8aMAC , uint8_t * pu8bMAC ) ;
2021-01-18 22:56:42 +01:00
2021-01-20 21:40:51 +01:00
esp_err_t errMeshNetworkStartReceiveTask ( void ) ;
esp_err_t errMeshNetworkGetParentNode ( mesh_addr_t * pMeshParentAddr ) ;
esp_err_t errMeshNetworkGetChildren ( mesh_addr_t * pChildren , uint16_t * pu16ChildrenSize ) ;
esp_err_t errMeshNetworkSendMeshPacket ( mesh_addr_t * pAddrDest , MESH_PACKET_t * pPacket ) ;
2021-01-18 22:56:42 +01:00
2021-01-20 21:40:51 +01:00
void vMeshNetworkTaskReceiveMeshData ( void * arg ) ;
void vMeshNetworkGetOwnAddr ( mesh_addr_t * pMeshOwnAddr ) ;
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