Mesh: Add API for group message communication 00/240700/1
authorAbhay Agarwal <ay.agarwal@samsung.com>
Mon, 10 Aug 2020 13:02:26 +0000 (18:32 +0530)
committerAbhay Agarwal <ay.agarwal@samsung.com>
Mon, 10 Aug 2020 13:05:09 +0000 (18:35 +0530)
This patch introduces an API which can be used to
send/receive group messages.

Change-Id: I64d63126db38f8cd7f826b41e0aa904cb92217ac
Signed-off-by: Abhay Agarwal <ay.agarwal@samsung.com>
include/bluetooth_internal.h
src/bluetooth-mesh.c

index f255de5..494734f 100644 (file)
@@ -5059,6 +5059,27 @@ int bt_mesh_model_send_msg(bt_mesh_model_h model,
 /**
  * @internal
  * @ingroup CAPI_NETWORK_BLUETOOTH_MESH_MODULE
+ * @brief Send Group message originated by a local mesh model.
+ *
+ * @param: in: group, group handle to which message to be sent
+ * @param: in: appkey, appkey to encrypt mesh message
+ * appkey must be valid for corresponding model, i.e
+ * appkey must be bound to the model
+ * @param: in: msg_params, opcode and the message to be sent
+ * @param: in: callback, callback to be called for msg response
+ *
+ * @see bt_mesh_model_msg_params_s
+ *
+ * @since_tizen 6.0
+ * @privlevel platform
+ */
+int bt_mesh_group_send_msg(bt_mesh_group_h group,
+       bt_mesh_appkey_h appkey, bt_mesh_model_msg_params_s *msg_params,
+       bt_mesh_model_msg_cb callback, void *user_data);
+
+/**
+ * @internal
+ * @ingroup CAPI_NETWORK_BLUETOOTH_MESH_MODULE
  * @brief Create a Mesh group with a given group address in the Local Network
  *
  * @since_tizen 6.0
index 8742cc9..00b5ec5 100644 (file)
@@ -2906,6 +2906,62 @@ int bt_mesh_model_send_msg(bt_mesh_model_h model,
        return BT_ERROR_NONE;
 }
 
+int bt_mesh_group_send_msg(bt_mesh_group_h group,
+       bt_mesh_appkey_h appkey, bt_mesh_model_msg_params_s *msg_params,
+       bt_mesh_model_msg_cb callback, void *user_data)
+{
+       int error_code = BT_ERROR_NONE;
+       bt_mesh_group_s *group_s;
+       bt_mesh_network_s *network_s;
+       bt_mesh_appkey_s *appkey_s;
+       bluetooth_mesh_model_msg_t req;
+
+       FUNC_ENTRY;
+       BT_CHECK_MESH_SUPPORT();
+       BT_CHECK_MESH_INIT_STATUS();
+       BT_CHECK_INPUT_PARAMETER(group);
+       BT_CHECK_INPUT_PARAMETER(appkey);
+       BT_CHECK_INPUT_PARAMETER(msg_params);
+       BT_CHECK_INPUT_PARAMETER(callback);
+
+       group_s = (bt_mesh_group_s*) group;
+       BT_MESH_VALIDATE_HANDLE(group_s, group_list);
+
+       appkey_s = (bt_mesh_appkey_s*) appkey;
+       BT_MESH_VALIDATE_HANDLE(appkey_s, appkey_list);
+
+       network_s = (bt_mesh_network_s*) group_s->parent;
+       BT_MESH_VALIDATE_HANDLE(network_s, networks);
+
+       BT_INFO("Mesh: Model msg opcode: 0x%2.2X",msg_params->opcode);
+
+       memset(&req, 0x00, sizeof(bluetooth_mesh_model_msg_t));
+       g_strlcpy(req.net_uuid, network_s->uuid, 33);
+       req.primary_unicast = group_s->addr;
+       req.appkey_idx = appkey_s->appkey_index;
+       req.opcode = msg_params->opcode;
+
+       if (msg_params->data) {
+               BT_INFO("Mesh: Group msg strlen %zd message: %s",
+               strlen(msg_params->data), msg_params->data);
+
+               req.msg_len = strlen(msg_params->data);
+               g_strlcpy(req.msg, msg_params->data, sizeof(msg_params->data) + 1);
+       } else {
+               req.msg_len = 0;
+       }
+
+       error_code = _bt_get_error_code(bluetooth_mesh_model_send_msg(&req));
+       if (error_code != BT_ERROR_NONE) {
+               BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(error_code), error_code);
+               return error_code;
+       }
+
+       FUNC_EXIT;
+       _bt_set_cb(BT_EVENT_MESH_NODE_MODEL_EXECUTE_MSG_COMPLETED, callback, user_data);
+       return BT_ERROR_NONE;
+}
+
 int bt_mesh_network_foreach_groups(bt_mesh_network_h network,
                bt_mesh_network_group_info_cb callback, void *user_data)
 {