1 /* 2 * Copyright (C) 2019-2020 Alibaba Group Holding Limited 3 */ 4 5 #ifndef _MESH_MODEL_H__ 6 #define _MESH_MODEL_H__ 7 8 #include "api/mesh.h" 9 #include "api/mesh/main.h" 10 11 #if defined(CONFIG_BT_MESH_MODEL_GEN_ONOFF_SRV) 12 #include "sig_model/generic_onoff_srv.h" 13 #endif 14 #if defined(CONFIG_BT_MESH_MODEL_GEN_LEVEL_SRV) 15 #include "sig_model/generic_level_srv.h" 16 #endif 17 #if defined(CONFIG_BT_MESH_MODEL_LIGHT_LIGHTNESS_SRV) 18 #include "sig_model/light_lightness_srv.h" 19 #endif 20 #if defined(CONFIG_BT_MESH_MODEL_LIGHT_CTL_SRV) 21 #include "sig_model/light_ctl_srv.h" 22 #endif 23 24 #if defined(CONFIG_BT_MESH_MODEL_GEN_ONOFF_CLI) 25 #include "sig_model/generic_onoff_cli.h" 26 #endif 27 28 #if defined(CONFIG_BT_MESH_MODEL_GEN_LEVEL_CLI) 29 #include "sig_model/generic_level_cli.h" 30 #endif 31 32 #if defined(CONFIG_BT_MESH_MODEL_LIGHT_LIGHTNESS_CLI) 33 #include "sig_model/light_lightness_cli.h" 34 #endif 35 #if defined(CONFIG_BT_MESH_MODEL_LIGHT_CTL_CLI) 36 #include "sig_model/light_ctl_cli.h" 37 #endif 38 39 #if defined(CONFIG_BT_MESH_MODEL_VENDOR_SRV) 40 #include "vendor/vendor_model_srv.h" 41 #endif 42 43 #if defined(CONFIG_BT_MESH_MODEL_VENDOR_CLI) 44 #include "vendor/vendor_model_cli.h" 45 #endif 46 47 #include "model_bind_ops.h" 48 #include <api/mesh/access.h> 49 50 typedef enum { 51 T_CUR = 0, 52 T_TAR, 53 TYPE_NUM, 54 } _VALUE_TYPE; 55 56 typedef enum { 57 SUCCESS = 0, 58 SET_MIN_FAIL, 59 SET_MAX_FAIL, 60 RFU, 61 } _STATUS_CODES; 62 63 typedef struct _RANGE { 64 _STATUS_CODES code; 65 u16_t range_min; 66 u16_t range_max; 67 } RANGE_STATUS; 68 69 typedef struct { 70 #ifdef CONFIG_BT_MESH_MODEL_GEN_ONOFF_SRV 71 u8_t onoff[TYPE_NUM]; 72 #endif 73 #ifdef CONFIG_BT_MESH_MODEL_GEN_LEVEL_SRV 74 s16_t level[TYPE_NUM]; 75 #endif 76 #ifdef CONFIG_BT_MESH_MODEL_LIGHT_LIGHTNESS_SRV 77 u16_t lightness_linear[TYPE_NUM]; 78 u16_t lightness_actual[TYPE_NUM]; 79 #endif 80 #ifdef CONFIG_BT_MESH_MODEL_LIGHT_CTL_SRV 81 u16_t lightness[TYPE_NUM]; 82 u16_t temp[TYPE_NUM]; 83 u16_t UV[TYPE_NUM]; 84 #endif 85 86 u8_t delay; // unit:5ms 87 u8_t trans; // unit:100ms 88 bt_u32_t trans_start_time; 89 bt_u32_t trans_end_time; 90 s16_t trans_step; 91 struct k_timer delay_timer; 92 struct k_timer trans_timer; 93 bool timerInitFlag; 94 } S_MESH_STATE; 95 96 typedef struct { 97 #ifdef CONFIG_BT_MESH_MODEL_LIGHT_LIGHTNESS_SRV 98 u16_t lightness_actual_default; 99 u16_t lightness_last; 100 RANGE_STATUS lightness_range; 101 #endif 102 #ifdef CONFIG_BT_MESH_MODEL_LIGHT_CTL_SRV 103 uint16_t lightness_default; 104 uint16_t temp_default; 105 uint16_t UV_default; 106 RANGE_STATUS ctl_temp_range; 107 #endif 108 } S_MESH_POWERUP; 109 110 typedef struct { 111 S_MESH_STATE state; 112 S_MESH_POWERUP powerup; 113 } S_ELEM_STATE; 114 115 typedef enum { 116 MESH_SUCCESS = 0, 117 MESH_TID_REPEAT, 118 MESH_ANALYZE_SIZE_ERROR, 119 MESH_ANALYZE_ARGS_ERROR, 120 MESH_SET_TRANSTION_ERROR, 121 } E_MESH_ERROR_TYPE; 122 123 typedef enum { 124 BT_MESH_MODEL_CFG_APP_KEY_ADD = 0x00, 125 BT_MESH_MODEL_CFG_COMP_DATA_STATUS = 0x02, 126 BT_MESH_MODEL_CFG_HEARTBEAT_PUB_STATUS = 0x06, 127 BT_MESH_MODEL_CFG_APPKEY_STATUS = 0x8003, 128 BT_MESH_MODEL_CFG_BEACON_STATUS = 0x800b, 129 BT_MESH_MODEL_CFG_TTL_STATUS = 0x800e, 130 BT_MESH_MODEL_CFG_FRIEND_STATUS = 0x8011, 131 BT_MESH_MODEL_CFG_PROXY_STATUS = 0x8014, 132 BT_MESH_MODEL_CFG_NET_KRP_STATUS = 0x8017, 133 BT_MESH_MODEL_CFG_PUB_STATUS = 0x8019, 134 BT_MESH_MODEL_CFG_SUB_STATUS = 0x801f, 135 BT_MESH_MODEL_CFG_SUB_LIST = 0x802a, 136 BT_MESH_MODEL_CFG_SUB_LIST_VND = 0x802c, 137 BT_MESH_MODEL_CFG_RELAY_STATUS = 0x8028, 138 BT_MESH_MODEL_CFG_HEARTBEAT_SUB_STATUS = 0x803c, 139 BT_MESH_MODEL_CFG_APPKEY_BIND_STATUS = 0x803e, 140 BT_MESH_MODEL_CFG_RST_STATUS = 0x804a, 141 BT_MESH_MODEL_CFG_NET_KEY_STATUS = 0x8044, 142 /*[Genie begin] add by wenbing.cwb at 2021-01-21*/ 143 #ifdef CONFIG_BT_MESH_CTRL_RELAY 144 BT_MESH_MODEL_CFG_CTRL_RELAY_STATUS = 0x8072, 145 #endif 146 /*[Genie end] add by wenbing.cwb at 2021-01-21*/ 147 BT_MESH_MODEL_ONOFF_SET = 0x8202, 148 BT_MESH_MODEL_ONOFF_STATUS = 0x8204, 149 BT_MESH_MODEL_LEVEL_SET = 0x8206, 150 BT_MESH_MODEL_LEVEL_MOVE_SET = 0x820B, 151 BT_MESH_MODEL_LEVEL_STATUS = 0x8208, 152 BT_MESH_MODEL_LEVEL_DELTA_SET = 0x8209, 153 BT_MESH_MODEL_LIGHTNESS_SET = 0x824c, 154 BT_MESH_MODEL_LIGHTNESS_STATUS = 0x824e, 155 BT_MESH_MODEL_LIGHTNESS_LINEAR_SET = 0x8250, 156 BT_MESH_MODEL_LIGHTNESS_LINEAR_STATUS = 0x8252, 157 BT_MESH_MODEL_LIGHTNESS_LAST_STATUS = 0x8254, 158 BT_MESH_MODEL_LIGHTNESS_DEF_STATUS = 0x8256, 159 BT_MESH_MODEL_LIGHTNESS_RANGE_STATUS = 0x8258, 160 BT_MESH_MODEL_LIGHTNESS_DEF_SET = 0x8259, 161 BT_MESH_MODEL_LIGHTNESS_RANGE_SET = 0x825b, 162 BT_MESH_MODEL_LIGHT_CTL_SET = 0x825e, 163 BT_MESH_MODEL_LIGHT_CTL_STATUS = 0x8260, 164 BT_MESH_MODEL_LIGHT_CTL_TEMP_RANGE_STATUS = 0x8263, 165 BT_MESH_MODEL_LIGHT_CTL_TEMP_SET = 0x8264, 166 BT_MESH_MODEL_LIGHT_CTL_TEMP_STATUS = 0x8266, 167 BT_MESH_MODEL_LIGHT_CTL_DEF_STATUS = 0x8268, 168 BT_MESH_MODEL_LIGHT_CTL_DEF_SET = 0x8269, 169 BT_MESH_MODEL_LIGHT_CTL_RANGE_SET = 0x826b, 170 BT_MESH_MODEL_VENDOR_MESSAGES = 0xcf01a8, 171 BT_MESH_MODEL_VENDOR_MESH_AUTOCONFIG = 0xd601a8, 172 BT_MESH_MODEL_VENDOR_MESH_AUTOCONFIG_GET = 0xd701a8, 173 BT_MESH_MODEL_VENDOR_MESH_AUTOCONFIG_STATUS = 0xd801a8, 174 } mesh_model_event_en; 175 176 typedef void (*model_event_cb)(mesh_model_event_en event, void *p_arg); 177 178 typedef struct { 179 void *user_data; 180 uint16_t data_len; 181 } vendor_data; 182 183 typedef struct { 184 uint16_t source_addr; 185 uint16_t dst_addr; 186 struct net_buf_simple *status_data; 187 void *user_data; 188 vendor_data ven_data; 189 } model_message; 190 191 int ble_mesh_model_init(const struct bt_mesh_comp *comp); 192 193 const struct bt_mesh_comp *ble_mesh_model_get_comp_data(); 194 195 int ble_mesh_model_set_cb(model_event_cb event_cb); 196 197 struct bt_mesh_model *ble_mesh_model_find(uint16_t elem_idx, uint16_t mod_idx, uint16_t CID); 198 199 int ble_mesh_model_status_get(uint16_t netkey_idx, uint16_t appkey_idx, uint16_t unicast_addr, 200 struct bt_mesh_model *model, uint32_t op_code); 201 202 void model_event(mesh_model_event_en event, void *p_arg); 203 204 #endif // _MESH_MODEL_H_ 205