BT_MESH_NODE_TTL_EXECUTE, req->data,
sizeof(bluetooth_mesh_node_ttl_info_t));
break;
+ case MESH_OPCODE_CONFIG_MODEL_SUB_ADD:
+ case MESH_OPCODE_CONFIG_MODEL_SUB_DELETE:
+ case MESH_OPCODE_CONFIG_MODEL_SUB_DELETE_ALL:
+ case MESH_OPCODE_CONFIG_MODEL_SUB_OVERWRITE:
+ /* Send event with timeout */
+ __bt_mesh_handle_pending_dev_config_request_info(
+ BLUETOOTH_ERROR_TIMEOUT,
+ BT_MESH_MODEL_CONFIG_GROUP_SUB, req->data,
+ sizeof(bluetooth_mesh_model_configure_t));
+ break;
+ case MESH_OPCODE_CONFIG_MODEL_SUB_VIRT_ADD:
+ case MESH_OPCODE_CONFIG_MODEL_SUB_VIRT_DELETE:
+ case MESH_OPCODE_CONFIG_MODEL_SUB_VIRT_OVERWRITE:
+ /* Send event with timeout */
+ __bt_mesh_handle_pending_dev_config_request_info(
+ BLUETOOTH_ERROR_TIMEOUT,
+ BT_MESH_MODEL_CONFIG_VIRTUAL_GROUP_SUB, req->data,
+ sizeof(bluetooth_mesh_model_configure_t));
+ break;
default:
break;
}
{
GVariant *param = NULL;
GVariantBuilder *builder = NULL;
+ char *net_uuid;
int i;
if (BLUETOOTH_ERROR_NONE == result) {
-
- if (evt->appkeylist_count) {
- builder = g_variant_builder_new(G_VARIANT_TYPE("aq"));
- for (i = 0; i < evt->appkeylist_count; i++)
- g_variant_builder_add(builder, "q", *evt->appkey_list[i]);
-
- param = g_variant_new("(isqiui(aq))", result, evt->net_uuid,
- evt->primary_unicast, evt->elem_index, evt->model,
- evt->appkeylist_count, builder);
-
- g_variant_builder_unref(builder);
- }
+ builder = g_variant_builder_new(G_VARIANT_TYPE("aq"));
+ BT_INFO("Mesh: Total AppKeys bound to model [%d]",
+ evt->appkeylist_count);
+ BT_INFO("Mesh: Network [%s]", evt->net_uuid);
+ for (i = 0; i < evt->appkeylist_count; i++)
+ g_variant_builder_add(builder, "q", *evt->appkey_list[i]);
+ net_uuid = g_strdup(evt->net_uuid);
+ param = g_variant_new("(isqiui(aq))", result, net_uuid,
+ evt->primary_unicast, evt->elem_index, evt->model,
+ evt->appkeylist_count, builder);
+
+ g_variant_builder_unref(builder);
/* Send event */
_bt_send_event(BT_MESH_EVENT,
param);
if (evt->appkeylist_count) {
- /* Free List data */
for (int i = 0; i < evt->appkeylist_count; i++)
g_free(evt->appkey_list[i]);
+
g_free(evt->appkey_list);
}
+ /* Free List data */
+ g_free(net_uuid);
}
}
param = g_variant_new("(iv)", result, out_var);
_bt_send_event(BT_MESH_EVENT,
- BLUETOOTH_EVENT_MESH_NODE_MODEL_APPKEY_BIND,
+ BLUETOOTH_EVENT_MESH_MODEL_APPKEY_BIND,
param);
}
}
event = (bluetooth_mesh_model_configure_t*) param;
req = (bluetooth_mesh_model_configure_t*)req_info->user_data;
+ BT_INFO("Mesh: Event Network [%s] Req Network [%s]",
+ event->net_uuid, req->net_uuid);
+
+ BT_INFO("Mesh: Event Unicast [0x%4.4x] Req Unicast [0x%4.4x]",
+ event->primary_unicast, req->primary_unicast);
if (!g_strcmp0(req->net_uuid, event->net_uuid) &&
req->primary_unicast == event->primary_unicast) {
req->sub_addr = event->sub_addr;
+ BT_INFO("Mesh: Send event for Model Subscription");
/* Send Event */
__bt_mesh_send_model_subscription_configure_event(
BLUETOOTH_EVENT_MESH_MODEL_SUBSCRIPTION_CONFGURED,
event = (bluetooth_mesh_model_configure_t*) param;
req = (bluetooth_mesh_model_configure_t*)req_info->user_data;
+ BT_INFO("Mesh: Event Network [%s] Req Network [%s]",
+ event->net_uuid, req->net_uuid);
+ BT_INFO("Mesh: Event Unicast [0x%4.4x] Req Unicast [0x%4.4x]",
+ event->primary_unicast, req->primary_unicast);
if (!g_strcmp0(req->net_uuid, event->net_uuid) &&
req->primary_unicast == event->primary_unicast) {
/* Send Event */
bluetooth_mesh_model_configure_t *param,
const struct mesh_config_cmd *cmd)
{
+ BT_INFO("Mesh: Model Subscription Event: Request [%d]", cmd->opcode);
switch (cmd->opcode) {
/* Fall through */
case MESH_OPCODE_CONFIG_MODEL_SUB_ADD:
case MESH_OPCODE_CONFIG_MODEL_SUB_OVERWRITE:
case MESH_OPCODE_CONFIG_MODEL_SUB_DELETE_ALL:
/* Model Bind/UnBind Event */
+ BT_INFO("Mesh: Handle Event for Request: BT_MESH_MODEL_CONFIG_GROUP_SUB");
__bt_mesh_handle_pending_dev_config_request_info(result,
- BT_MESH_MODEL_CONFIG_GROUP_SUB, ¶m,
+ BT_MESH_MODEL_CONFIG_GROUP_SUB, param,
sizeof(bluetooth_mesh_model_configure_t));
break;
case MESH_OPCODE_CONFIG_MODEL_SUB_VIRT_ADD:
case MESH_OPCODE_CONFIG_MODEL_SUB_VIRT_DELETE:
case MESH_OPCODE_CONFIG_MODEL_SUB_VIRT_OVERWRITE:
+ BT_INFO("Mesh: Handle Event for Request: BT_MESH_MODEL_CONFIG_VIRTUAL_GROUP_SUB");
__bt_mesh_handle_pending_dev_config_request_info(result,
- BT_MESH_MODEL_CONFIG_VIRTUAL_GROUP_SUB, ¶m,
+ BT_MESH_MODEL_CONFIG_VIRTUAL_GROUP_SUB, param,
sizeof(bluetooth_mesh_model_configure_t));
break;
default:
/* Extract Period */
param.period = data[7];
+ if (!cmd)
+ break;
if (cmd->opcode == MESH_OPCODE_CONFIG_MODEL_PUB_GET)
__bt_mesh_handle_pending_dev_config_request_info(result,
BT_INFO("\nNode %4.4x Subscription status %s\n",
event->source, __mesh_status_to_string(data[0]));
+ if (data[0] != MESH_STATUS_SUCCESS)
+ result = BLUETOOTH_ERROR_INTERNAL;
+
+ if (!cmd) {
+ BT_INFO("Mesh: Command not found!!");
+ break;
+ }
+
ele_addr = l_get_le16(data + 1);
addr = l_get_le16(data + 3);
BT_INFO("Element Addr\t%4.4x\n", ele_addr);
+ BT_INFO("Message Source Addr\t%4.4x\n", event->source);
if (data_len == 9) {
/* vendor Model */
param.sub_addr = addr;
param.model = mod_id;
BT_INFO("Subscr Addr\t%4.4x\n", addr);
- __mesh_handle_model_subscription_event(result, ¶m, cmd);
+ BT_INFO("Model ID\t%4.4x\n", mod_id);
+
+ if (cmd)
+ __mesh_handle_model_subscription_event(result, ¶m, cmd);
+
break;
}
case MESH_OPCODE_CONFIG_DEFAULT_TTL_STATUS: {
BLUETOOTH_MESH_NETWORK_UUID_STRING_LENGTH + 1);
BT_INFO("Node %4.4x: Model App status %s\n", event->source,
__mesh_status_to_string(data[0]));
+
+ if (data[0] != MESH_STATUS_SUCCESS)
+ result = BLUETOOTH_ERROR_INTERNAL;
+
elem_addr = l_get_le16(data + 1);
app_idx = l_get_le16(data + 3);
BT_INFO("\tNetKey %u (0x%3.3x)", net_idx, net_idx);
if (data[0] != 0)
- break;
+ result = BLUETOOTH_ERROR_INTERNAL;
if (!cmd)
break;
param.netkey_idx = net_idx;
param.is_netkey = true;
+ BT_INFO("Mesh: Resp recvd from node unicast [0x%4.4x]", event->source);
if (cmd->opcode == MESH_OPCODE_NETKEY_ADD) {
BT_INFO("Mesh: Resp recvd: MESH_OPCODE_NETKEY_ADD");
- if (!_bt_mesh_network_save_remote_node_netkey(
- event->net_uuid.uuid, event->source, net_idx)) {
- result = BLUETOOTH_ERROR_INTERNAL;
- BT_INFO("Failed to save node Netkey!");
+ if (result == BLUETOOTH_ERROR_NONE) {
+ if (!_bt_mesh_network_save_remote_node_netkey(
+ event->net_uuid.uuid, event->source, net_idx)) {
+ result = BLUETOOTH_ERROR_INTERNAL;
+ BT_INFO("Failed to save node Netkey!");
+ }
}
param.op = BLUETOOTH_MESH_NODE_KEY_ADD;
} else if (cmd->opcode == MESH_OPCODE_NETKEY_DELETE) {
- if (!_bt_mesh_network_delete_remote_node_netkey(
- event->net_uuid.uuid, event->source, net_idx)) {
- result = BLUETOOTH_ERROR_INTERNAL;
- BT_INFO("Failed to delete node Netkey!");
+ BT_INFO("Mesh: Resp recvd: MESH_OPCODE_NETKEY_DELETE");
+ if (result == BLUETOOTH_ERROR_NONE) {
+ if (!_bt_mesh_network_delete_remote_node_netkey(
+ event->net_uuid.uuid, event->source, net_idx)) {
+ result = BLUETOOTH_ERROR_INTERNAL;
+ BT_INFO("Failed to delete node Netkey!");
+ }
}
param.op = BLUETOOTH_MESH_NODE_KEY_DELETE;
} else if (cmd->opcode == MESH_OPCODE_NETKEY_UPDATE) {
BT_INFO("AppKey\t%u (0x%3.3x)\n", app_idx, app_idx);
if (data[0] != MESH_STATUS_SUCCESS)
- break;
+ result = BLUETOOTH_ERROR_INTERNAL;
if (!cmd)
break;
if (cmd->opcode == MESH_OPCODE_APPKEY_ADD) {
BT_INFO("Mesh: Resp recvd: MESH_OPCODE_APPKEY_ADD");
- if (!_bt_mesh_network_save_remote_node_appkey(
- event->net_uuid.uuid, event->source,
- net_idx, app_idx)) {
- result = BLUETOOTH_ERROR_INTERNAL;
- BT_INFO("Failed to save node Appkey!");
+ if (result == BLUETOOTH_ERROR_NONE) {
+ if (!_bt_mesh_network_save_remote_node_appkey(
+ event->net_uuid.uuid, event->source,
+ net_idx, app_idx)) {
+ result = BLUETOOTH_ERROR_INTERNAL;
+ BT_INFO("Failed to save node Appkey!");
+ }
}
param.op = BLUETOOTH_MESH_NODE_KEY_ADD;
} else if (cmd->opcode == MESH_OPCODE_APPKEY_DELETE) {
BT_INFO("Mesh: Resp recvd: MESH_OPCODE_APPKEY_DELETE");
- if (!_bt_mesh_network_delete_remote_node_appkey(
- event->net_uuid.uuid, event->source,
- net_idx, app_idx)) {
- result = BLUETOOTH_ERROR_INTERNAL;
- BT_INFO("Failed to delete node Appkey!");
+ if (result == BLUETOOTH_ERROR_NONE) {
+ if (!_bt_mesh_network_delete_remote_node_appkey(
+ event->net_uuid.uuid, event->source,
+ net_idx, app_idx)) {
+ result = BLUETOOTH_ERROR_INTERNAL;
+ BT_INFO("Failed to delete node Appkey!");
+ }
}
param.op = BLUETOOTH_MESH_NODE_KEY_DELETE;
} else if (cmd->opcode == MESH_OPCODE_APPKEY_UPDATE) {
return BLUETOOTH_ERROR_DEVICE_BUSY;
}
+ BT_INFO("Mesh: group Subscription Req: [%d]", req->op);
if (req->op != BLUETOOTH_MESH_MODEL_SUB_DELETE_ALL) {
+ BT_INFO("Mesh: group Subscription Addr [0x%2.2x]", req->sub_addr);
+
/* Subscriptio address sanity check */
- if ((!MESH_IS_GROUP(req->sub_addr) ||
- MESH_IS_ALL_NODES(req->sub_addr)) ||
+ if (!MESH_IS_GROUP(req->sub_addr) ||
MESH_IS_VIRTUAL(req->sub_addr)) {
- BT_ERR("Mesh: Bad subscription address %x\n",
+ BT_ERR("Mesh: Bad subscription address [0x%2.2x\n]",
req->sub_addr);
return BLUETOOTH_ERROR_INVALID_PARAM;
}
- }
+ } else
+ BT_INFO("Mesh: group Subscription Req: Delete All");
+ _bt_mesh_util_convert_string_to_hex(req->net_uuid,
+ strlen(req->net_uuid), net_uuid.uuid, 16);
/* Get Subnet index of the remote node for TX encryption */
netkey_idx = _bt_mesh_node_get_subnet_idx(net_uuid.uuid,
req->primary_unicast);
if (netkey_idx == MESH_NET_IDX_INVALID)
return BLUETOOTH_ERROR_INTERNAL;
- _bt_mesh_util_convert_string_to_hex(req->net_uuid,
- strlen(req->net_uuid), net_uuid.uuid, 16);
if (req->op == BLUETOOTH_MESH_MODEL_SUB_ADD)
opcode = MESH_OPCODE_CONFIG_MODEL_SUB_ADD;
data_len = _bt_mesh_util_opcode_set(opcode, buffer);
+ BT_INFO("Mesh: Group Subscription Primary unicast [0x%2.2x]",
+ req->primary_unicast);
/* Element Address */
l_put_le16((req->primary_unicast + req->elem_index),
buffer + data_len);
data_len += 2;
}
+ BT_INFO("Mesh: Group Subscription Model ID [0x%4.4x]", req->model);
/* Insert Model ID */
if (req->model >= 0xFFFF0000) {
/* 1st 2 octet Company ID is 0xFFFF means, it is BT SIG Model*/
return BLUETOOTH_ERROR_INTERNAL;
}
+ BT_INFO("Mesh: Group Subscription Command sent successfully");
/* Queue the request with timeout */
__bt_mesh_add_request(opcode, req->primary_unicast,
net_uuid.uuid,
_bt_mesh_util_convert_string_to_hex(req->net_uuid,
strlen(req->net_uuid), net_uuid.uuid, 16);
+ BT_INFO("Mesh: Virtual Group Subscription Req: [%d] Group Addr [0x%2.2x]",
+ req->op, req->sub_addr);
+
if (req->op != BLUETOOTH_MESH_MODEL_SUB_DELETE_ALL) {
/* Subscription address sanity check */
- if ((MESH_IS_GROUP(req->sub_addr) ||
- MESH_IS_ALL_NODES(req->sub_addr)) ||
+ if (MESH_IS_GROUP(req->sub_addr) ||
!(MESH_IS_VIRTUAL(req->sub_addr))) {
- BT_ERR("Mesh: Bad Virtual subscription address %x\n",
+ BT_ERR("Mesh: Bad Virtual Group subscription address [0x%2.2x\n]",
req->sub_addr);
return BLUETOOTH_ERROR_INVALID_PARAM;
}
- }
+ } else
+ BT_INFO("Mesh: Virtual Group Subscription Req: Delete All");
/* Get Subnet index of the remote node for TX encryption */
netkey_idx = _bt_mesh_node_get_subnet_idx(net_uuid.uuid,
return BLUETOOTH_ERROR_INTERNAL;
if (req->op == BLUETOOTH_MESH_MODEL_SUB_ADD)
- opcode = MESH_OPCODE_CONFIG_MODEL_SUB_ADD;
+ opcode = MESH_OPCODE_CONFIG_MODEL_SUB_VIRT_ADD;
else if (req->op == BLUETOOTH_MESH_MODEL_SUB_DELETE)
- opcode = MESH_OPCODE_CONFIG_MODEL_SUB_DELETE;
- else if (req->op == BLUETOOTH_MESH_MODEL_SUB_DELETE_ALL)
- opcode = MESH_OPCODE_CONFIG_MODEL_SUB_DELETE_ALL;
+ opcode = MESH_OPCODE_CONFIG_MODEL_SUB_VIRT_DELETE;
else if (req->op == BLUETOOTH_MESH_MODEL_SUB_OVERWRITE)
- opcode = MESH_OPCODE_CONFIG_MODEL_SUB_OVERWRITE;
+ opcode = MESH_OPCODE_CONFIG_MODEL_SUB_VIRT_OVERWRITE;
/* Check pending request */
if (_bt_mesh_check_pending_request(opcode,
data_len += 16;
}
+ BT_INFO("Mesh: Virtual Group Subscription Model ID [0x%4.4x]", req->model);
/* Insert Model ID */
if (req->model >= 0xFFFF0000) {
/* 1st 2 octet Company ID is 0xFFFF means, it is BT SIG Model*/
return BLUETOOTH_ERROR_INTERNAL;
}
+ BT_INFO("Mesh: Virtual Group Subscription Command sent successfully");
/* Queue the request with timeout */
__bt_mesh_add_request(opcode, req->primary_unicast,
net_uuid.uuid,
_bt_mesh_util_convert_string_to_hex(req->net_uuid, strlen(req->net_uuid), net_uuid.uuid, 16);
- if (req->pub_addr > MESH_ALL_NODES_ADDRESS)
- return BLUETOOTH_ERROR_INVALID_PARAM;
-
+ if (req->pub_addr == MESH_ALL_NODES_ADDRESS)
+ BT_INFO("Mesh: Setting Publication to ALL Node Address");
if (!MESH_IS_GROUP(req->pub_addr) && !MESH_IS_VIRTUAL(req->pub_addr) &&
req->pub_addr != MESH_UNASSIGNED_ADDRESS) {