ble_mesh: add events for configuration server model
This commit is contained in:
parent
a32c72a1b2
commit
a302d210b9
18 changed files with 735 additions and 573 deletions
|
@ -610,28 +610,135 @@ typedef enum {
|
|||
ESP_BLE_MESH_CFG_CLIENT_EVT_MAX,
|
||||
} esp_ble_mesh_cfg_client_cb_event_t;
|
||||
|
||||
/** Parameter of Config AppKey Add */
|
||||
/**
|
||||
* @brief Configuration Server model related context.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
uint16_t app_idx; /*!< AppKey Index of the Config AppKey Add */
|
||||
} esp_ble_mesh_cfg_srv_app_key_add_cb_t;
|
||||
uint16_t element_addr; /*!< Element Address */
|
||||
uint16_t pub_addr; /*!< Publish Address */
|
||||
uint16_t app_idx; /*!< AppKey Index */
|
||||
bool cred_flag; /*!< Friendship Credential Flag */
|
||||
uint8_t pub_ttl; /*!< Publish TTL */
|
||||
uint8_t pub_period; /*!< Publish Period */
|
||||
uint8_t pub_retransmit; /*!< Publish Retransmit */
|
||||
uint16_t company_id; /*!< Company ID */
|
||||
uint16_t model_id; /*!< Model ID */
|
||||
} esp_ble_mesh_state_change_cfg_mod_pub_set_t;
|
||||
|
||||
/** Parameters of Config Model Subscription Add */
|
||||
typedef struct {
|
||||
uint16_t element_addr; /*!< Element Address */
|
||||
uint16_t sub_addr; /*!< Subscription Address */
|
||||
uint16_t company_id; /*!< Company ID */
|
||||
uint16_t model_id; /*!< Model ID */
|
||||
} esp_ble_mesh_state_change_cfg_model_sub_add_t;
|
||||
|
||||
/** Parameters of Config Model Subscription Delete */
|
||||
typedef struct {
|
||||
uint16_t element_addr; /*!< Element Address */
|
||||
uint16_t sub_addr; /*!< Subscription Address */
|
||||
uint16_t company_id; /*!< Company ID */
|
||||
uint16_t model_id; /*!< Model ID */
|
||||
} esp_ble_mesh_state_change_cfg_model_sub_delete_t;
|
||||
|
||||
/** Parameters of Config NetKey Add */
|
||||
typedef struct {
|
||||
uint16_t net_idx; /*!< NetKey Index */
|
||||
uint8_t net_key[16]; /*!< NetKey */
|
||||
} esp_ble_mesh_state_change_cfg_netkey_add_t;
|
||||
|
||||
/** Parameters of Config NetKey Update */
|
||||
typedef struct {
|
||||
uint16_t net_idx; /*!< NetKey Index */
|
||||
uint8_t net_key[16]; /*!< NetKey */
|
||||
} esp_ble_mesh_state_change_cfg_netkey_update_t;
|
||||
|
||||
/** Parameter of Config NetKey Delete */
|
||||
typedef struct {
|
||||
uint16_t net_idx; /*!< NetKey Index */
|
||||
} esp_ble_mesh_state_change_cfg_netkey_delete_t;
|
||||
|
||||
/** Parameters of Config AppKey Add */
|
||||
typedef struct {
|
||||
uint16_t net_idx; /*!< NetKey Index */
|
||||
uint16_t app_idx; /*!< AppKey Index */
|
||||
uint8_t app_key[16]; /*!< AppKey */
|
||||
} esp_ble_mesh_state_change_cfg_appkey_add_t;
|
||||
|
||||
/** Parameters of Config AppKey Update */
|
||||
typedef struct {
|
||||
uint16_t net_idx; /*!< NetKey Index */
|
||||
uint16_t app_idx; /*!< AppKey Index */
|
||||
uint8_t app_key[16]; /*!< AppKey */
|
||||
} esp_ble_mesh_state_change_cfg_appkey_update_t;
|
||||
|
||||
/** Parameters of Config AppKey Delete */
|
||||
typedef struct {
|
||||
uint16_t net_idx; /*!< NetKey Index */
|
||||
uint16_t app_idx; /*!< AppKey Index */
|
||||
} esp_ble_mesh_state_change_cfg_appkey_delete_t;
|
||||
|
||||
/** Parameters of Config Model App Bind */
|
||||
typedef struct {
|
||||
uint16_t element_addr; /*!< Element Address */
|
||||
uint16_t app_idx; /*!< AppKey Index */
|
||||
uint16_t company_id; /*!< Company ID */
|
||||
uint16_t model_id; /*!< Model ID */
|
||||
} esp_ble_mesh_state_change_cfg_model_app_bind_t;
|
||||
|
||||
/** Parameters of Config Model App Unbind */
|
||||
typedef struct {
|
||||
uint16_t element_addr; /*!< Element Address */
|
||||
uint16_t app_idx; /*!< AppKey Index */
|
||||
uint16_t company_id; /*!< Company ID */
|
||||
uint16_t model_id; /*!< Model ID */
|
||||
} esp_ble_mesh_state_change_cfg_model_app_unbind_t;
|
||||
|
||||
/** Parameters of Config Key Refresh Phase Set */
|
||||
typedef struct {
|
||||
uint16_t net_idx; /*!< NetKey Index */
|
||||
uint8_t kr_phase; /*!< New Key Refresh Phase Transition */
|
||||
} esp_ble_mesh_state_change_cfg_kr_phase_set_t;
|
||||
|
||||
/**
|
||||
* @brief Configuration Server Model received message union
|
||||
* @brief Configuration Server model state change value union
|
||||
*/
|
||||
typedef union {
|
||||
esp_ble_mesh_cfg_srv_app_key_add_cb_t app_key_add; /*!< The Config AppKey Add event value */
|
||||
} esp_ble_mesh_cfg_server_common_cb_param_t;
|
||||
/**
|
||||
* The recv_op in ctx can be used to decide which state is changed.
|
||||
*/
|
||||
esp_ble_mesh_state_change_cfg_mod_pub_set_t mod_pub_set; /*!< Config Model Publication Set */
|
||||
esp_ble_mesh_state_change_cfg_model_sub_add_t mod_sub_add; /*!< Config Model Subscription Add */
|
||||
esp_ble_mesh_state_change_cfg_model_sub_delete_t mod_sub_delete; /*!< Config Model Subscription Delete */
|
||||
esp_ble_mesh_state_change_cfg_netkey_add_t netkey_add; /*!< Config NetKey Add */
|
||||
esp_ble_mesh_state_change_cfg_netkey_update_t netkey_update; /*!< Config NetKey Update */
|
||||
esp_ble_mesh_state_change_cfg_netkey_delete_t netkey_delete; /*!< Config NetKey Delete */
|
||||
esp_ble_mesh_state_change_cfg_appkey_add_t appkey_add; /*!< Config AppKey Add */
|
||||
esp_ble_mesh_state_change_cfg_appkey_update_t appkey_update; /*!< Config AppKey Update */
|
||||
esp_ble_mesh_state_change_cfg_appkey_delete_t appkey_delete; /*!< Config AppKey Delete */
|
||||
esp_ble_mesh_state_change_cfg_model_app_bind_t mod_app_bind; /*!< Config Model App Bind */
|
||||
esp_ble_mesh_state_change_cfg_model_app_unbind_t mod_app_unbind; /*!< Config Model App Unbind */
|
||||
esp_ble_mesh_state_change_cfg_kr_phase_set_t kr_phase_set; /*!< Config Key Refresh Phase Set */
|
||||
} esp_ble_mesh_cfg_server_state_change_t;
|
||||
|
||||
/** Configuration Server Model callback parameters */
|
||||
/**
|
||||
* @brief Configuration Server model callback value union
|
||||
*/
|
||||
typedef union {
|
||||
esp_ble_mesh_cfg_server_state_change_t state_change; /*!< ESP_BLE_MESH_CFG_SERVER_STATE_CHANGE_EVT */
|
||||
} esp_ble_mesh_cfg_server_cb_value_t;
|
||||
|
||||
/** Configuration Server model callback parameters */
|
||||
typedef struct {
|
||||
esp_ble_mesh_model_t *model; /*!< Pointer to the server model structure */
|
||||
esp_ble_mesh_msg_ctx_t ctx; /*!< The context of the received message */
|
||||
esp_ble_mesh_cfg_server_common_cb_param_t status_cb; /*!< The received configuration message callback values */
|
||||
esp_ble_mesh_model_t *model; /*!< Pointer to the server model structure */
|
||||
esp_ble_mesh_msg_ctx_t ctx; /*!< Context of the received message */
|
||||
esp_ble_mesh_cfg_server_cb_value_t value; /*!< Value of the received configuration messages */
|
||||
} esp_ble_mesh_cfg_server_cb_param_t;
|
||||
|
||||
/** This enum value is the event of Configuration Server Model */
|
||||
/** This enum value is the event of Configuration Server model */
|
||||
typedef enum {
|
||||
ESP_BLE_MESH_CFG_SERVER_RECV_MSG_EVT,
|
||||
ESP_BLE_MESH_CFG_SERVER_STATE_CHANGE_EVT,
|
||||
ESP_BLE_MESH_CFG_SERVER_EVT_MAX,
|
||||
} esp_ble_mesh_cfg_server_cb_event_t;
|
||||
|
||||
|
|
|
@ -288,6 +288,11 @@ static void btc_ble_mesh_config_client_callback(esp_ble_mesh_cfg_client_cb_param
|
|||
|
||||
LOG_DEBUG("%s", __func__);
|
||||
|
||||
/* If corresponding callback is not registered, event will not be posted. */
|
||||
if (!btc_profile_cb_get(BTC_PID_CONFIG_CLIENT)) {
|
||||
return;
|
||||
}
|
||||
|
||||
msg.sig = BTC_SIG_API_CB;
|
||||
msg.pid = BTC_PID_CONFIG_CLIENT;
|
||||
msg.act = act;
|
||||
|
@ -687,6 +692,11 @@ static void btc_ble_mesh_config_server_callback(esp_ble_mesh_cfg_server_cb_param
|
|||
|
||||
LOG_DEBUG("%s", __func__);
|
||||
|
||||
/* If corresponding callback is not registered, event will not be posted. */
|
||||
if (!btc_profile_cb_get(BTC_PID_CONFIG_SERVER)) {
|
||||
return;
|
||||
}
|
||||
|
||||
msg.sig = BTC_SIG_API_CB;
|
||||
msg.pid = BTC_PID_CONFIG_SERVER;
|
||||
msg.act = act;
|
||||
|
@ -709,8 +719,8 @@ void bt_mesh_config_server_cb_evt_to_btc(u8_t evt_type,
|
|||
}
|
||||
|
||||
switch (evt_type) {
|
||||
case BTC_BLE_MESH_EVT_CONFIG_SERVER_RECV_MSG:
|
||||
act = ESP_BLE_MESH_CFG_SERVER_RECV_MSG_EVT;
|
||||
case BTC_BLE_MESH_EVT_CONFIG_SERVER_STATE_CHANGE:
|
||||
act = ESP_BLE_MESH_CFG_SERVER_STATE_CHANGE_EVT;
|
||||
break;
|
||||
default:
|
||||
LOG_ERROR("%s, Unknown config server event type %d", __func__, evt_type);
|
||||
|
@ -726,8 +736,8 @@ void bt_mesh_config_server_cb_evt_to_btc(u8_t evt_type,
|
|||
cb_params.ctx.recv_dst = ctx->recv_dst;
|
||||
|
||||
if (val && len) {
|
||||
length = (len <= sizeof(cb_params.status_cb)) ? len : sizeof(cb_params.status_cb);
|
||||
memcpy(&cb_params.status_cb, val, length);
|
||||
length = (len <= sizeof(cb_params.value)) ? len : sizeof(cb_params.value);
|
||||
memcpy(&cb_params.value, val, length);
|
||||
}
|
||||
|
||||
btc_ble_mesh_config_server_callback(&cb_params, act);
|
||||
|
|
|
@ -361,6 +361,11 @@ static void btc_ble_mesh_generic_client_callback(esp_ble_mesh_generic_client_cb_
|
|||
|
||||
LOG_DEBUG("%s", __func__);
|
||||
|
||||
/* If corresponding callback is not registered, event will not be posted. */
|
||||
if (!btc_profile_cb_get(BTC_PID_GENERIC_CLIENT)) {
|
||||
return;
|
||||
}
|
||||
|
||||
msg.sig = BTC_SIG_API_CB;
|
||||
msg.pid = BTC_PID_GENERIC_CLIENT;
|
||||
msg.act = act;
|
||||
|
@ -684,6 +689,11 @@ static void btc_ble_mesh_generic_server_callback(esp_ble_mesh_generic_server_cb_
|
|||
|
||||
LOG_DEBUG("%s", __func__);
|
||||
|
||||
/* If corresponding callback is not registered, event will not be posted. */
|
||||
if (!btc_profile_cb_get(BTC_PID_GENERIC_SERVER)) {
|
||||
return;
|
||||
}
|
||||
|
||||
msg.sig = BTC_SIG_API_CB;
|
||||
msg.pid = BTC_PID_GENERIC_SERVER;
|
||||
msg.act = act;
|
||||
|
|
|
@ -229,6 +229,11 @@ static void btc_ble_mesh_health_client_callback(esp_ble_mesh_health_client_cb_pa
|
|||
|
||||
LOG_DEBUG("%s", __func__);
|
||||
|
||||
/* If corresponding callback is not registered, event will not be posted. */
|
||||
if (!btc_profile_cb_get(BTC_PID_HEALTH_CLIENT)) {
|
||||
return;
|
||||
}
|
||||
|
||||
msg.sig = BTC_SIG_API_CB;
|
||||
msg.pid = BTC_PID_HEALTH_CLIENT;
|
||||
msg.act = act;
|
||||
|
@ -545,6 +550,11 @@ static void btc_ble_mesh_health_server_callback(esp_ble_mesh_health_server_cb_pa
|
|||
|
||||
LOG_DEBUG("%s", __func__);
|
||||
|
||||
/* If corresponding callback is not registered, event will not be posted. */
|
||||
if (!btc_profile_cb_get(BTC_PID_HEALTH_SERVER)) {
|
||||
return;
|
||||
}
|
||||
|
||||
msg.sig = BTC_SIG_API_CB;
|
||||
msg.pid = BTC_PID_HEALTH_SERVER;
|
||||
msg.act = act;
|
||||
|
|
|
@ -205,6 +205,11 @@ static void btc_ble_mesh_lighting_client_callback(esp_ble_mesh_light_client_cb_p
|
|||
|
||||
LOG_DEBUG("%s", __func__);
|
||||
|
||||
/* If corresponding callback is not registered, event will not be posted. */
|
||||
if (!btc_profile_cb_get(BTC_PID_LIGHTING_CLIENT)) {
|
||||
return;
|
||||
}
|
||||
|
||||
msg.sig = BTC_SIG_API_CB;
|
||||
msg.pid = BTC_PID_LIGHTING_CLIENT;
|
||||
msg.act = act;
|
||||
|
@ -496,6 +501,11 @@ static void btc_ble_mesh_lighting_server_callback(esp_ble_mesh_lighting_server_c
|
|||
|
||||
LOG_DEBUG("%s", __func__);
|
||||
|
||||
/* If corresponding callback is not registered, event will not be posted. */
|
||||
if (!btc_profile_cb_get(BTC_PID_LIGHTING_SERVER)) {
|
||||
return;
|
||||
}
|
||||
|
||||
msg.sig = BTC_SIG_API_CB;
|
||||
msg.pid = BTC_PID_LIGHTING_SERVER;
|
||||
msg.act = act;
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -450,6 +450,11 @@ static void btc_ble_mesh_sensor_client_callback(esp_ble_mesh_sensor_client_cb_pa
|
|||
|
||||
LOG_DEBUG("%s", __func__);
|
||||
|
||||
/* If corresponding callback is not registered, event will not be posted. */
|
||||
if (!btc_profile_cb_get(BTC_PID_SENSOR_CLIENT)) {
|
||||
return;
|
||||
}
|
||||
|
||||
msg.sig = BTC_SIG_API_CB;
|
||||
msg.pid = BTC_PID_SENSOR_CLIENT;
|
||||
msg.act = act;
|
||||
|
@ -823,6 +828,11 @@ static void btc_ble_mesh_sensor_server_callback(esp_ble_mesh_sensor_server_cb_pa
|
|||
|
||||
LOG_DEBUG("%s", __func__);
|
||||
|
||||
/* If corresponding callback is not registered, event will not be posted. */
|
||||
if (!btc_profile_cb_get(BTC_PID_SENSOR_SERVER)) {
|
||||
return;
|
||||
}
|
||||
|
||||
msg.sig = BTC_SIG_API_CB;
|
||||
msg.pid = BTC_PID_SENSOR_SERVER;
|
||||
msg.act = act;
|
||||
|
|
|
@ -207,6 +207,11 @@ static void btc_ble_mesh_time_scene_client_callback(esp_ble_mesh_time_scene_clie
|
|||
|
||||
LOG_DEBUG("%s", __func__);
|
||||
|
||||
/* If corresponding callback is not registered, event will not be posted. */
|
||||
if (!btc_profile_cb_get(BTC_PID_TIME_SCENE_CLIENT)) {
|
||||
return;
|
||||
}
|
||||
|
||||
msg.sig = BTC_SIG_API_CB;
|
||||
msg.pid = BTC_PID_TIME_SCENE_CLIENT;
|
||||
msg.act = act;
|
||||
|
@ -400,6 +405,11 @@ static void btc_ble_mesh_time_scene_server_callback(esp_ble_mesh_time_scene_serv
|
|||
|
||||
LOG_DEBUG("%s", __func__);
|
||||
|
||||
/* If corresponding callback is not registered, event will not be posted. */
|
||||
if (!btc_profile_cb_get(BTC_PID_TIME_SCENE_SERVER)) {
|
||||
return;
|
||||
}
|
||||
|
||||
msg.sig = BTC_SIG_API_CB;
|
||||
msg.pid = BTC_PID_TIME_SCENE_SERVER;
|
||||
msg.act = act;
|
||||
|
|
|
@ -63,7 +63,7 @@ void bt_mesh_config_client_cb_evt_to_btc(u32_t opcode, u8_t evt_type,
|
|||
void btc_ble_mesh_config_server_cb_handler(btc_msg_t *msg);
|
||||
|
||||
typedef enum {
|
||||
BTC_BLE_MESH_EVT_CONFIG_SERVER_RECV_MSG,
|
||||
BTC_BLE_MESH_EVT_CONFIG_SERVER_STATE_CHANGE,
|
||||
BTC_BLE_MESH_EVT_CONFIG_SERVER_MAX,
|
||||
} btc_ble_mesh_config_server_evt_t;
|
||||
|
||||
|
|
|
@ -472,10 +472,14 @@ static void app_key_add(struct bt_mesh_model *model,
|
|||
return;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_BLE_MESH_FAST_PROV)
|
||||
bt_mesh_config_server_cb_evt_to_btc(BTC_BLE_MESH_EVT_CONFIG_SERVER_RECV_MSG,
|
||||
model, ctx, (u8_t *)&key_app_idx, sizeof(u16_t));
|
||||
#endif
|
||||
if (status == STATUS_SUCCESS) {
|
||||
bt_mesh_cfg_server_state_change_t change = {0};
|
||||
change.cfg_appkey_add.net_idx = key_net_idx;
|
||||
change.cfg_appkey_add.app_idx = key_app_idx;
|
||||
memcpy(change.cfg_appkey_add.app_key, buf->data, 16);
|
||||
bt_mesh_config_server_cb_evt_to_btc(BTC_BLE_MESH_EVT_CONFIG_SERVER_STATE_CHANGE,
|
||||
model, ctx, (const u8_t *)&change, sizeof(change));
|
||||
}
|
||||
}
|
||||
|
||||
static void app_key_update(struct bt_mesh_model *model,
|
||||
|
@ -501,6 +505,15 @@ static void app_key_update(struct bt_mesh_model *model,
|
|||
if (bt_mesh_model_send(model, ctx, &msg, NULL, NULL)) {
|
||||
BT_ERR("%s, Unable to send Config AppKey Status", __func__);
|
||||
}
|
||||
|
||||
if (status == STATUS_SUCCESS) {
|
||||
bt_mesh_cfg_server_state_change_t change = {0};
|
||||
change.cfg_appkey_update.net_idx = key_net_idx;
|
||||
change.cfg_appkey_update.app_idx = key_app_idx;
|
||||
memcpy(change.cfg_appkey_update.app_key, buf->data, 16);
|
||||
bt_mesh_config_server_cb_evt_to_btc(BTC_BLE_MESH_EVT_CONFIG_SERVER_STATE_CHANGE,
|
||||
model, ctx, (const u8_t *)&change, sizeof(change));
|
||||
}
|
||||
}
|
||||
|
||||
struct unbind_data {
|
||||
|
@ -577,6 +590,14 @@ send_status:
|
|||
if (bt_mesh_model_send(model, ctx, &msg, NULL, NULL)) {
|
||||
BT_ERR("%s, Unable to send Config AppKey Status", __func__);
|
||||
}
|
||||
|
||||
if (status == STATUS_SUCCESS) {
|
||||
bt_mesh_cfg_server_state_change_t change = {0};
|
||||
change.cfg_appkey_delete.net_idx = key_net_idx;
|
||||
change.cfg_appkey_delete.app_idx = key_app_idx;
|
||||
bt_mesh_config_server_cb_evt_to_btc(BTC_BLE_MESH_EVT_CONFIG_SERVER_STATE_CHANGE,
|
||||
model, ctx, (const u8_t *)&change, sizeof(change));
|
||||
}
|
||||
}
|
||||
|
||||
/* Index list length: 3 bytes for every pair and 2 bytes for an odd idx */
|
||||
|
@ -1124,6 +1145,21 @@ static void mod_pub_set(struct bt_mesh_model *model,
|
|||
send_status:
|
||||
send_mod_pub_status(model, ctx, elem_addr, pub_addr, vnd, mod,
|
||||
status, mod_id);
|
||||
|
||||
if (status == STATUS_SUCCESS && mod->pub) {
|
||||
bt_mesh_cfg_server_state_change_t change = {0};
|
||||
change.cfg_mod_pub_set.elem_addr = elem_addr;
|
||||
change.cfg_mod_pub_set.pub_addr = mod->pub->addr;
|
||||
change.cfg_mod_pub_set.app_idx = mod->pub->key;
|
||||
change.cfg_mod_pub_set.cred_flag = mod->pub->cred;
|
||||
change.cfg_mod_pub_set.ttl = mod->pub->ttl;
|
||||
change.cfg_mod_pub_set.period = mod->pub->period;
|
||||
change.cfg_mod_pub_set.transmit = mod->pub->retransmit;
|
||||
change.cfg_mod_pub_set.cid = vnd ? mod->vnd.company : 0xFFFF;
|
||||
change.cfg_mod_pub_set.mod_id = vnd ? mod->vnd.id : mod->id;
|
||||
bt_mesh_config_server_cb_evt_to_btc(BTC_BLE_MESH_EVT_CONFIG_SERVER_STATE_CHANGE,
|
||||
model, ctx, (const u8_t *)&change, sizeof(change));
|
||||
}
|
||||
}
|
||||
|
||||
#if CONFIG_BLE_MESH_LABEL_COUNT > 0
|
||||
|
@ -1447,6 +1483,16 @@ static void mod_sub_add(struct bt_mesh_model *model,
|
|||
send_status:
|
||||
send_mod_sub_status(model, ctx, status, elem_addr, sub_addr,
|
||||
mod_id, vnd);
|
||||
|
||||
if (status == STATUS_SUCCESS) {
|
||||
bt_mesh_cfg_server_state_change_t change = {0};
|
||||
change.cfg_mod_sub_add.elem_addr = elem_addr;
|
||||
change.cfg_mod_sub_add.sub_addr = sub_addr;
|
||||
change.cfg_mod_sub_add.cid = vnd ? mod->vnd.company : 0xFFFF;
|
||||
change.cfg_mod_sub_add.mod_id = vnd ? mod->vnd.id : mod->id;
|
||||
bt_mesh_config_server_cb_evt_to_btc(BTC_BLE_MESH_EVT_CONFIG_SERVER_STATE_CHANGE,
|
||||
model, ctx, (const u8_t *)&change, sizeof(change));
|
||||
}
|
||||
}
|
||||
|
||||
static void mod_sub_del(struct bt_mesh_model *model,
|
||||
|
@ -1513,6 +1559,16 @@ static void mod_sub_del(struct bt_mesh_model *model,
|
|||
send_status:
|
||||
send_mod_sub_status(model, ctx, status, elem_addr, sub_addr,
|
||||
mod_id, vnd);
|
||||
|
||||
if (status == STATUS_SUCCESS) {
|
||||
bt_mesh_cfg_server_state_change_t change = {0};
|
||||
change.cfg_mod_sub_delete.elem_addr = elem_addr;
|
||||
change.cfg_mod_sub_delete.sub_addr = sub_addr;
|
||||
change.cfg_mod_sub_delete.cid = vnd ? mod->vnd.company : 0xFFFF;
|
||||
change.cfg_mod_sub_delete.mod_id = vnd ? mod->vnd.id : mod->id;
|
||||
bt_mesh_config_server_cb_evt_to_btc(BTC_BLE_MESH_EVT_CONFIG_SERVER_STATE_CHANGE,
|
||||
model, ctx, (const u8_t *)&change, sizeof(change));
|
||||
}
|
||||
}
|
||||
|
||||
static void mod_sub_overwrite(struct bt_mesh_model *model,
|
||||
|
@ -2177,6 +2233,12 @@ static void net_key_add(struct bt_mesh_model *model,
|
|||
}
|
||||
|
||||
send_net_key_status(model, ctx, idx, STATUS_SUCCESS);
|
||||
|
||||
bt_mesh_cfg_server_state_change_t change = {0};
|
||||
change.cfg_netkey_add.net_idx = sub->net_idx;
|
||||
memcpy(change.cfg_netkey_add.net_key, sub->keys[0].net, 16);
|
||||
bt_mesh_config_server_cb_evt_to_btc(BTC_BLE_MESH_EVT_CONFIG_SERVER_STATE_CHANGE,
|
||||
model, ctx, (const u8_t *)&change, sizeof(change));
|
||||
}
|
||||
|
||||
static void net_key_update(struct bt_mesh_model *model,
|
||||
|
@ -2246,6 +2308,12 @@ static void net_key_update(struct bt_mesh_model *model,
|
|||
bt_mesh_net_beacon_update(sub);
|
||||
|
||||
send_net_key_status(model, ctx, idx, STATUS_SUCCESS);
|
||||
|
||||
bt_mesh_cfg_server_state_change_t change = {0};
|
||||
change.cfg_netkey_update.net_idx = sub->net_idx;
|
||||
memcpy(change.cfg_netkey_update.net_key, sub->keys[1].net, 16);
|
||||
bt_mesh_config_server_cb_evt_to_btc(BTC_BLE_MESH_EVT_CONFIG_SERVER_STATE_CHANGE,
|
||||
model, ctx, (const u8_t *)&change, sizeof(change));
|
||||
}
|
||||
|
||||
static void hb_pub_disable(struct bt_mesh_cfg_srv *cfg)
|
||||
|
@ -2298,6 +2366,13 @@ static void net_key_del(struct bt_mesh_model *model,
|
|||
|
||||
send_status:
|
||||
send_net_key_status(model, ctx, del_idx, status);
|
||||
|
||||
if (status == STATUS_SUCCESS) {
|
||||
bt_mesh_cfg_server_state_change_t change = {0};
|
||||
change.cfg_netkey_delete.net_idx = sub->net_idx;
|
||||
bt_mesh_config_server_cb_evt_to_btc(BTC_BLE_MESH_EVT_CONFIG_SERVER_STATE_CHANGE,
|
||||
model, ctx, (const u8_t *)&change, sizeof(change));
|
||||
}
|
||||
}
|
||||
|
||||
static void net_key_get(struct bt_mesh_model *model,
|
||||
|
@ -2503,6 +2578,16 @@ send_status:
|
|||
if (bt_mesh_model_send(model, ctx, &msg, NULL, NULL)) {
|
||||
BT_ERR("%s, Unable to send Config Model App Bind Status", __func__);
|
||||
}
|
||||
|
||||
if (status == STATUS_SUCCESS) {
|
||||
bt_mesh_cfg_server_state_change_t change = {0};
|
||||
change.cfg_mod_app_bind.elem_addr = elem_addr;
|
||||
change.cfg_mod_app_bind.app_idx = key_app_idx;
|
||||
change.cfg_mod_app_bind.cid = vnd ? mod->vnd.company : 0xFFFF;
|
||||
change.cfg_mod_app_bind.mod_id = vnd ? mod->vnd.id : mod->id;
|
||||
bt_mesh_config_server_cb_evt_to_btc(BTC_BLE_MESH_EVT_CONFIG_SERVER_STATE_CHANGE,
|
||||
model, ctx, (const u8_t *)&change, sizeof(change));
|
||||
}
|
||||
}
|
||||
|
||||
static void mod_app_unbind(struct bt_mesh_model *model,
|
||||
|
@ -2549,6 +2634,16 @@ send_status:
|
|||
if (bt_mesh_model_send(model, ctx, &msg, NULL, NULL)) {
|
||||
BT_ERR("%s, Unable to send Config Model App Unbind Status", __func__);
|
||||
}
|
||||
|
||||
if (status == STATUS_SUCCESS) {
|
||||
bt_mesh_cfg_server_state_change_t change = {0};
|
||||
change.cfg_mod_app_unbind.elem_addr = elem_addr;
|
||||
change.cfg_mod_app_unbind.app_idx = key_app_idx;
|
||||
change.cfg_mod_app_unbind.cid = vnd ? mod->vnd.company : 0xFFFF;
|
||||
change.cfg_mod_app_unbind.mod_id = vnd ? mod->vnd.id : mod->id;
|
||||
bt_mesh_config_server_cb_evt_to_btc(BTC_BLE_MESH_EVT_CONFIG_SERVER_STATE_CHANGE,
|
||||
model, ctx, (const u8_t *)&change, sizeof(change));
|
||||
}
|
||||
}
|
||||
|
||||
#define KEY_LIST_LEN (CONFIG_BLE_MESH_MODEL_KEY_COUNT * 2)
|
||||
|
@ -2857,6 +2952,12 @@ static void krp_set(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx,
|
|||
}
|
||||
|
||||
send_krp_status(model, ctx, idx, sub->kr_phase, STATUS_SUCCESS);
|
||||
|
||||
bt_mesh_cfg_server_state_change_t change = {0};
|
||||
change.cfg_kr_phase_set.net_idx = idx;
|
||||
change.cfg_kr_phase_set.kr_phase = phase;
|
||||
bt_mesh_config_server_cb_evt_to_btc(BTC_BLE_MESH_EVT_CONFIG_SERVER_STATE_CHANGE,
|
||||
model, ctx, (const u8_t *)&change, sizeof(change));
|
||||
}
|
||||
|
||||
static u8_t hb_log(u16_t val)
|
||||
|
|
|
@ -65,6 +65,149 @@ extern const struct bt_mesh_model_op bt_mesh_cfg_srv_op[];
|
|||
BLE_MESH_MODEL(BLE_MESH_MODEL_ID_CFG_SRV, \
|
||||
bt_mesh_cfg_srv_op, NULL, srv_data)
|
||||
|
||||
typedef union {
|
||||
struct {
|
||||
u8_t beacon;
|
||||
} cfg_beacon_set;
|
||||
struct {
|
||||
u8_t ttl;
|
||||
} cfg_default_ttl_set;
|
||||
struct {
|
||||
u8_t gatt_proxy;
|
||||
} cfg_gatt_proxy_set;
|
||||
struct {
|
||||
u8_t relay;
|
||||
u8_t retransmit;
|
||||
} cfg_relay_set;
|
||||
struct {
|
||||
u16_t elem_addr;
|
||||
u16_t pub_addr;
|
||||
u16_t app_idx;
|
||||
bool cred_flag;
|
||||
u8_t ttl;
|
||||
u8_t period;
|
||||
u8_t transmit;
|
||||
u16_t cid;
|
||||
u16_t mod_id;
|
||||
} cfg_mod_pub_set;
|
||||
struct {
|
||||
u16_t elem_addr;
|
||||
u8_t pub_addr[16];
|
||||
u16_t app_idx;
|
||||
bool cred_flag;
|
||||
u8_t ttl;
|
||||
u8_t period;
|
||||
u8_t transmit;
|
||||
u16_t cid;
|
||||
u16_t mod_id;
|
||||
} cfg_mod_pub_va_set;
|
||||
struct {
|
||||
u16_t elem_addr;
|
||||
u16_t sub_addr;
|
||||
u16_t cid;
|
||||
u16_t mod_id;
|
||||
} cfg_mod_sub_add;
|
||||
struct {
|
||||
u16_t elem_addr;
|
||||
u8_t sub_addr[16];
|
||||
u16_t cid;
|
||||
u16_t mod_id;
|
||||
} cfg_mod_sub_va_add;
|
||||
struct {
|
||||
u16_t elem_addr;
|
||||
u16_t sub_addr;
|
||||
u16_t cid;
|
||||
u16_t mod_id;
|
||||
} cfg_mod_sub_delete;
|
||||
struct {
|
||||
u16_t elem_addr;
|
||||
u8_t sub_addr[16];
|
||||
u16_t cid;
|
||||
u16_t mod_id;
|
||||
} cfg_mod_sub_va_delete;
|
||||
struct {
|
||||
u16_t elem_addr;
|
||||
u16_t sub_addr;
|
||||
u16_t cid;
|
||||
u16_t mod_id;
|
||||
} cfg_mod_sub_overwrite;
|
||||
struct {
|
||||
u16_t elem_addr;
|
||||
u8_t sub_addr[16];
|
||||
u16_t cid;
|
||||
u16_t mod_id;
|
||||
} cfg_mod_sub_va_overwrite;
|
||||
struct {
|
||||
u16_t elem_addr;
|
||||
u16_t cid;
|
||||
u16_t mod_id;
|
||||
} cfg_mod_sub_delete_all;
|
||||
struct {
|
||||
u16_t net_idx;
|
||||
u8_t net_key[16];
|
||||
} cfg_netkey_add;
|
||||
struct {
|
||||
u16_t net_idx;
|
||||
u8_t net_key[16];
|
||||
} cfg_netkey_update;
|
||||
struct {
|
||||
u16_t net_idx;
|
||||
} cfg_netkey_delete;
|
||||
struct {
|
||||
u16_t net_idx;
|
||||
u16_t app_idx;
|
||||
u8_t app_key[16];
|
||||
} cfg_appkey_add;
|
||||
struct {
|
||||
u16_t net_idx;
|
||||
u16_t app_idx;
|
||||
u8_t app_key[16];
|
||||
} cfg_appkey_update;
|
||||
struct {
|
||||
u16_t net_idx;
|
||||
u16_t app_idx;
|
||||
} cfg_appkey_delete;
|
||||
struct {
|
||||
u16_t net_idx;
|
||||
u8_t identity;
|
||||
} cfg_node_identity_set;
|
||||
struct {
|
||||
u16_t elem_addr;
|
||||
u16_t app_idx;
|
||||
u16_t cid;
|
||||
u16_t mod_id;
|
||||
} cfg_mod_app_bind;
|
||||
struct {
|
||||
u16_t elem_addr;
|
||||
u16_t app_idx;
|
||||
u16_t cid;
|
||||
u16_t mod_id;
|
||||
} cfg_mod_app_unbind;
|
||||
struct {
|
||||
u8_t frnd;
|
||||
} cfg_friend_set;
|
||||
struct {
|
||||
u16_t net_idx;
|
||||
u8_t kr_phase;
|
||||
} cfg_kr_phase_set;
|
||||
struct {
|
||||
u16_t dst;
|
||||
u8_t count;
|
||||
u8_t period;
|
||||
u8_t ttl;
|
||||
u16_t feat;
|
||||
u16_t net_idx;
|
||||
} cfg_hb_pub_set;
|
||||
struct {
|
||||
u16_t src;
|
||||
u16_t dst;
|
||||
u8_t period;
|
||||
} cfg_hb_sub_set;
|
||||
struct {
|
||||
u8_t transmit;
|
||||
} cfg_net_transmit_set;
|
||||
} bt_mesh_cfg_server_state_change_t;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
|
|
@ -149,7 +149,7 @@ static void gen_onoff_set(struct bt_mesh_model *model,
|
|||
}
|
||||
tid = net_buf_simple_pull_u8(buf);
|
||||
|
||||
if (bt_mesh_server_get_optional(model, buf, &trans_time, &delay, &optional)) {
|
||||
if (bt_mesh_server_get_optional(model, ctx, buf, &trans_time, &delay, &optional)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -327,7 +327,7 @@ static void gen_level_set(struct bt_mesh_model *model,
|
|||
level = (s16_t) net_buf_simple_pull_le16(buf);
|
||||
tid = net_buf_simple_pull_u8(buf);
|
||||
|
||||
if (bt_mesh_server_get_optional(model, buf, &trans_time, &delay, &optional)) {
|
||||
if (bt_mesh_server_get_optional(model, ctx, buf, &trans_time, &delay, &optional)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -423,7 +423,7 @@ static void gen_delta_set(struct bt_mesh_model *model,
|
|||
delta = (s32_t)net_buf_simple_pull_le32(buf);
|
||||
tid = net_buf_simple_pull_u8(buf);
|
||||
|
||||
if (bt_mesh_server_get_optional(model, buf, &trans_time, &delay, &optional)) {
|
||||
if (bt_mesh_server_get_optional(model, ctx, buf, &trans_time, &delay, &optional)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -545,7 +545,7 @@ static void gen_move_set(struct bt_mesh_model *model,
|
|||
delta = (s16_t) net_buf_simple_pull_le16(buf);
|
||||
tid = net_buf_simple_pull_u8(buf);
|
||||
|
||||
if (bt_mesh_server_get_optional(model, buf, &trans_time, &delay, &optional)) {
|
||||
if (bt_mesh_server_get_optional(model, ctx, buf, &trans_time, &delay, &optional)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1090,7 +1090,7 @@ static void gen_power_level_set(struct bt_mesh_model *model,
|
|||
power = net_buf_simple_pull_le16(buf);
|
||||
tid = net_buf_simple_pull_u8(buf);
|
||||
|
||||
if (bt_mesh_server_get_optional(model, buf, &trans_time, &delay, &optional)) {
|
||||
if (bt_mesh_server_get_optional(model, ctx, buf, &trans_time, &delay, &optional)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -110,6 +110,7 @@ u8_t bt_mesh_get_default_trans_time(struct bt_mesh_model *model);
|
|||
int bt_mesh_get_light_lc_trans_time(struct bt_mesh_model *model, u8_t *trans_time);
|
||||
|
||||
int bt_mesh_server_get_optional(struct bt_mesh_model *model,
|
||||
struct bt_mesh_msg_ctx *ctx,
|
||||
struct net_buf_simple *buf,
|
||||
u8_t *trans_time, u8_t *delay,
|
||||
bool *optional);
|
||||
|
|
|
@ -236,7 +236,7 @@ static void light_lightness_set(struct bt_mesh_model *model,
|
|||
actual = net_buf_simple_pull_le16(buf);
|
||||
tid = net_buf_simple_pull_u8(buf);
|
||||
|
||||
if (bt_mesh_server_get_optional(model, buf, &trans_time, &delay, &optional)) {
|
||||
if (bt_mesh_server_get_optional(model, ctx, buf, &trans_time, &delay, &optional)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -348,7 +348,7 @@ static void light_lightness_linear_set(struct bt_mesh_model *model,
|
|||
linear = net_buf_simple_pull_le16(buf);
|
||||
tid = net_buf_simple_pull_u8(buf);
|
||||
|
||||
if (bt_mesh_server_get_optional(model, buf, &trans_time, &delay, &optional)) {
|
||||
if (bt_mesh_server_get_optional(model, ctx, buf, &trans_time, &delay, &optional)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -774,7 +774,7 @@ static void light_ctl_set(struct bt_mesh_model *model,
|
|||
return;
|
||||
}
|
||||
|
||||
if (bt_mesh_server_get_optional(model, buf, &trans_time, &delay, &optional)) {
|
||||
if (bt_mesh_server_get_optional(model, ctx, buf, &trans_time, &delay, &optional)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1022,7 +1022,7 @@ static void light_ctl_temp_set(struct bt_mesh_model *model,
|
|||
return;
|
||||
}
|
||||
|
||||
if (bt_mesh_server_get_optional(model, buf, &trans_time, &delay, &optional)) {
|
||||
if (bt_mesh_server_get_optional(model, ctx, buf, &trans_time, &delay, &optional)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1377,7 +1377,7 @@ static void light_hsl_set(struct bt_mesh_model *model,
|
|||
saturation = net_buf_simple_pull_le16(buf);
|
||||
tid = net_buf_simple_pull_u8(buf);
|
||||
|
||||
if (bt_mesh_server_get_optional(model, buf, &trans_time, &delay, &optional)) {
|
||||
if (bt_mesh_server_get_optional(model, ctx, buf, &trans_time, &delay, &optional)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1618,7 +1618,7 @@ static void light_hsl_hue_set(struct bt_mesh_model *model,
|
|||
hue = net_buf_simple_pull_le16(buf);
|
||||
tid = net_buf_simple_pull_u8(buf);
|
||||
|
||||
if (bt_mesh_server_get_optional(model, buf, &trans_time, &delay, &optional)) {
|
||||
if (bt_mesh_server_get_optional(model, ctx, buf, &trans_time, &delay, &optional)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1719,7 +1719,7 @@ static void light_hsl_sat_set(struct bt_mesh_model *model,
|
|||
saturation = net_buf_simple_pull_le16(buf);
|
||||
tid = net_buf_simple_pull_u8(buf);
|
||||
|
||||
if (bt_mesh_server_get_optional(model, buf, &trans_time, &delay, &optional)) {
|
||||
if (bt_mesh_server_get_optional(model, ctx, buf, &trans_time, &delay, &optional)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1994,7 +1994,7 @@ static void light_xyl_set(struct bt_mesh_model *model,
|
|||
y = net_buf_simple_pull_le16(buf);
|
||||
tid = net_buf_simple_pull_u8(buf);
|
||||
|
||||
if (bt_mesh_server_get_optional(model, buf, &trans_time, &delay, &optional)) {
|
||||
if (bt_mesh_server_get_optional(model, ctx, buf, &trans_time, &delay, &optional)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2434,7 +2434,7 @@ static void light_lc_light_onoff_set(struct bt_mesh_model *model,
|
|||
onoff = net_buf_simple_pull_u8(buf);
|
||||
tid = net_buf_simple_pull_u8(buf);
|
||||
|
||||
if (bt_mesh_server_get_optional(model, buf, &trans_time, &delay, &optional)) {
|
||||
if (bt_mesh_server_get_optional(model, ctx, buf, &trans_time, &delay, &optional)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -127,6 +127,7 @@ int bt_mesh_get_light_lc_trans_time(struct bt_mesh_model *model, u8_t *trans_tim
|
|||
}
|
||||
|
||||
int bt_mesh_server_get_optional(struct bt_mesh_model *model,
|
||||
struct bt_mesh_msg_ctx *ctx,
|
||||
struct net_buf_simple *buf,
|
||||
u8_t *trans_time, u8_t *delay,
|
||||
bool *optional)
|
||||
|
@ -142,6 +143,14 @@ int bt_mesh_server_get_optional(struct bt_mesh_model *model,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Currently we only get optional msg info which dst is set to a unicast address */
|
||||
if (!BLE_MESH_ADDR_IS_UNICAST(ctx->recv_dst)) {
|
||||
*trans_time = 0U;
|
||||
*delay = 0U;
|
||||
*optional = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* No optional fields are available */
|
||||
if (buf->len == 0x00) {
|
||||
if (model->id == BLE_MESH_MODEL_ID_LIGHT_LC_SRV) {
|
||||
|
@ -193,6 +202,11 @@ bool bt_mesh_is_server_recv_last_msg(struct bt_mesh_last_msg_info *last,
|
|||
{
|
||||
*now = k_uptime_get();
|
||||
|
||||
/* Currently we only compare msg info which dst is set to a unicast address */
|
||||
if (!BLE_MESH_ADDR_IS_UNICAST(dst)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (last->tid == tid && last->src == src && last->dst == dst &&
|
||||
(*now - last->timestamp <= K_SECONDS(6))) {
|
||||
return true;
|
||||
|
@ -204,6 +218,11 @@ bool bt_mesh_is_server_recv_last_msg(struct bt_mesh_last_msg_info *last,
|
|||
void bt_mesh_server_update_last_msg(struct bt_mesh_last_msg_info *last,
|
||||
u8_t tid, u16_t src, u16_t dst, s64_t *now)
|
||||
{
|
||||
/* Currently we only update msg info which dst is set to a unicast address */
|
||||
if (!BLE_MESH_ADDR_IS_UNICAST(dst)) {
|
||||
return;
|
||||
}
|
||||
|
||||
last->tid = tid;
|
||||
last->src = src;
|
||||
last->dst = dst;
|
||||
|
|
|
@ -620,7 +620,7 @@ static void scene_recall(struct bt_mesh_model *model,
|
|||
}
|
||||
tid = net_buf_simple_pull_u8(buf);
|
||||
|
||||
if (bt_mesh_server_get_optional(model, buf, &trans_time, &delay, &optional)) {
|
||||
if (bt_mesh_server_get_optional(model, ctx, buf, &trans_time, &delay, &optional)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -704,14 +704,14 @@ static void example_ble_mesh_config_server_cb(esp_ble_mesh_cfg_server_cb_event_t
|
|||
__func__, event, param->ctx.recv_op, param->ctx.addr);
|
||||
|
||||
switch (event) {
|
||||
case ESP_BLE_MESH_CFG_SERVER_RECV_MSG_EVT:
|
||||
case ESP_BLE_MESH_CFG_SERVER_STATE_CHANGE_EVT:
|
||||
switch (param->ctx.recv_op) {
|
||||
case ESP_BLE_MESH_MODEL_OP_APP_KEY_ADD:
|
||||
ESP_LOGI(TAG, "Config Server get Config AppKey Add");
|
||||
err = example_handle_config_app_key_add_evt(param->status_cb.app_key_add.app_idx);
|
||||
err = example_handle_config_app_key_add_evt(param->value.state_change.appkey_add.app_idx);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "%s: Failed to bind app_idx 0x%04x with non-config models",
|
||||
__func__, param->status_cb.app_key_add.app_idx);
|
||||
__func__, param->value.state_change.appkey_add.app_idx);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -716,14 +716,14 @@ static void example_ble_mesh_config_server_cb(esp_ble_mesh_cfg_server_cb_event_t
|
|||
__func__, event, param->ctx.recv_op, param->ctx.addr);
|
||||
|
||||
switch (event) {
|
||||
case ESP_BLE_MESH_CFG_SERVER_RECV_MSG_EVT:
|
||||
case ESP_BLE_MESH_CFG_SERVER_STATE_CHANGE_EVT:
|
||||
switch (param->ctx.recv_op) {
|
||||
case ESP_BLE_MESH_MODEL_OP_APP_KEY_ADD:
|
||||
ESP_LOGI(TAG, "Config Server get Config AppKey Add");
|
||||
err = example_handle_config_app_key_add_evt(param->status_cb.app_key_add.app_idx);
|
||||
err = example_handle_config_app_key_add_evt(param->value.state_change.appkey_add.app_idx);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "%s: Failed to bind app_idx 0x%04x with non-config models",
|
||||
__func__, param->status_cb.app_key_add.app_idx);
|
||||
__func__, param->value.state_change.appkey_add.app_idx);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue