1 /* 2 * Copyright (C) 2019-2020 Alibaba Group Holding Limited 3 */ 4 5 #ifndef __MESH_NODE 6 #define __MESH_NODE 7 8 #include <stdio.h> 9 #include <mesh_model/mesh_model.h> 10 #include "mesh_provisioner.h" 11 12 #define DEVICE_NAME_MAX_LENGTH 28 13 #define RSSI_BEACON_REPORT_PERIOD 1000 //ms 14 #define DEF_ADD_APPKEY_DELAY (300) 15 #define DEF_ADD_APPKEY_TIMEOUT (5 * 1000) 16 #define DEF_AUTOCONFIG_STORE_CHECK_TIMEOUT (1 * 1000) 17 #define DEF_AUTOCONFIG_STORE_CHECK_RETRY 40 18 #define DEF_ADD_APPKEY_RETRY 10 19 20 typedef struct { 21 uint16_t prim_unicast; 22 uint8_t element_num; 23 } mesh_node_local_t; 24 25 26 typedef enum { 27 BT_MESH_EVENT_NODE_REST, 28 BT_MESH_EVENT_NODE_PROV_COMP, 29 BT_MESH_EVENT_NODE_OOB_INPUT_NUM, 30 BT_MESH_EVENT_NODE_OOB_INPUT_STRING, 31 } mesh_prov_event_en; 32 33 typedef enum { 34 BT_MESH_AUTO_CONFIG_SUCCEED, 35 BT_MESH_AUTO_CONFIG_NOT_START, 36 BT_MESH_AUTO_CONFIG_START, 37 BT_MESH_AUTO_CONFIG_FAILD, 38 }meah_auto_config_status_en; 39 40 typedef enum { 41 BT_MESH_STATUS_SUCCEED, 42 BT_MESH_STATUS_ERR, 43 } status_faild_en; 44 45 typedef void (*prov_event_cb)(mesh_prov_event_en event, void *p_arg); 46 47 typedef void (*attn_cb)(void); 48 49 typedef struct { 50 attn_cb att_on; 51 attn_cb att_off; 52 }health_srv_cb; 53 54 typedef enum { 55 ACTION_NULL, 56 ACTION_NUM, 57 ACTION_STR, 58 }oob_action_en; 59 60 typedef enum { 61 PROVISIONER, 62 NODE, 63 }node_role_en; 64 65 typedef struct { 66 uint8_t* static_oob_data; 67 oob_action_en input_action; 68 uint8_t input_max_size; 69 oob_action_en output_action; 70 uint8_t output_max_size; 71 }oob_method; 72 73 typedef struct { 74 provisioner_config_t config; 75 uint16_t local_sub; 76 uint16_t local_pub; 77 } provisioner_node; 78 79 typedef struct { 80 node_role_en role; 81 #ifdef CONFIG_BT_MESH_PROVISIONER 82 provisioner_node *provisioner_config; 83 #endif 84 uint8_t dev_uuid[16]; 85 uint8_t dev_name[DEVICE_NAME_MAX_LENGTH]; 86 model_event_cb user_model_cb; 87 prov_event_cb user_prov_cb; 88 #ifdef BT_MESH_BEACON_RSSI_REPORT 89 uint8_t rssi_report_enable; 90 #endif 91 health_srv_cb *health_cb; 92 oob_method node_oob; 93 } node_config_t; 94 95 typedef struct { 96 uint16_t sub_addr; 97 }model_auto_config_t; 98 99 100 int ble_mesh_node_init(node_config_t *param); 101 int ble_mesh_node_OOB_input_num(uint32_t num); 102 int ble_mesh_node_OOB_input_string(const char *str); 103 104 105 #ifdef CONFIG_BT_MESH_PROVISIONER 106 int ble_mesh_node_appkey_add(uint16_t netkey_idx,uint16_t appkey_idx,uint16_t unicast_addr); 107 int ble_mesh_node_model_autoconfig(uint16_t netkey_idx,uint16_t appkey_idx, uint16_t unicast_addr, model_auto_config_t auto_conf); 108 #endif 109 110 #endif 111