2 * Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved
4 * @author: Anupam Roy <anupam.r@samsung.com>
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
20 #include "bluetooth-api.h"
21 #include "bt-internal-types.h"
23 #include "bt-common.h"
24 #include "bt-request-sender.h"
25 #include "bt-event-handler.h"
27 #include "bluetooth-mesh-api.h"
29 #define BLUETOOTH_MESH_NETWORK_NAME_STRING_MAX 100
30 #define BLUETOOTH_MESH_TOKEN_STRING_MAX 100
32 BT_EXPORT_API int bluetooth_mesh_init(mesh_cb_func_ptr cb,
38 BT_ERR("callback is NULL");
39 return BLUETOOTH_ERROR_INVALID_PARAM;
43 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
45 ret = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_INIT,
46 in_param1, in_param2, in_param3, in_param4, &out_param);
48 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
50 if (ret != BLUETOOTH_ERROR_NONE &&
51 ret != BLUETOOTH_ERROR_ALREADY_INITIALIZED) {
52 BT_ERR("Fail to init the mesh in bt-service");
56 ret = _bt_init_event_handler();
58 if (ret != BLUETOOTH_ERROR_NONE &&
59 ret != BLUETOOTH_ERROR_ALREADY_INITIALIZED) {
60 BT_ERR("Fail to init the event handler");
64 _bt_set_user_data(BT_MESH, (void *)cb, user_data);
66 /* Register All events */
67 ret = _bt_register_event(BT_MESH_EVENT, (void *)cb, user_data);
68 if (ret != BLUETOOTH_ERROR_NONE &&
69 ret != BLUETOOTH_ERROR_ALREADY_INITIALIZED) {
70 _bt_deinit_event_handler();
74 BT_INFO("Mesh: Event registsred");
75 return BLUETOOTH_ERROR_NONE;
78 BT_EXPORT_API int bluetooth_mesh_deinit(void)
82 _bt_unregister_event(BT_MESH_EVENT);
83 _bt_set_user_data(BT_MESH, NULL, NULL);
86 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
88 ret = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_DEINIT,
89 in_param1, in_param2, in_param3, in_param4, &out_param);
91 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
93 if (ret != BLUETOOTH_ERROR_NONE) {
94 BT_ERR("Fail to init the mesh in bt-service");
98 return BLUETOOTH_ERROR_NONE;
101 BT_EXPORT_API int bluetooth_mesh_network_unload(bluetooth_mesh_network_t *network)
105 BT_CHECK_PARAMETER(network, return);
108 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
110 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
112 BT_INFO("Mesh: Network Unload");
113 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_UNLOAD,
114 in_param1, in_param2, in_param3, in_param4, &out_param);
115 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
120 BT_EXPORT_API int bluetooth_mesh_network_destroy(bluetooth_mesh_network_t *network)
124 BT_CHECK_PARAMETER(network, return);
127 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
129 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
131 BT_INFO("Mesh: Network Destroy");
132 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_DESTROY,
133 in_param1, in_param2, in_param3, in_param4, &out_param);
134 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
139 BT_EXPORT_API int bluetooth_mesh_node_reset(bluetooth_mesh_node_info_t *node)
143 BT_CHECK_PARAMETER(node, return);
146 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
148 g_array_append_vals(in_param1, node, sizeof(bluetooth_mesh_node_info_t));
150 BT_INFO("Mesh: Reset the Node");
151 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NODE_RESET,
152 in_param1, in_param2, in_param3, in_param4, &out_param);
153 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
158 BT_EXPORT_API int bluetooth_mesh_network_create(
159 const char *net_name, bluetooth_mesh_node_t *node,
160 uint16_t total_models, bluetooth_mesh_model_t **models,
161 bluetooth_mesh_network_t *network)
164 char network_name[BLUETOOTH_MESH_NETWORK_NAME_STRING_MAX+1];
166 BT_CHECK_PARAMETER(net_name, return);
167 BT_CHECK_PARAMETER(node, return);
168 BT_CHECK_PARAMETER(models, return);
171 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
173 g_array_append_vals(in_param1, node, sizeof(bluetooth_mesh_node_t));
175 g_strlcpy(network_name, net_name, sizeof(network_name));
176 g_array_append_vals(in_param2, network_name,
177 BLUETOOTH_MESH_NETWORK_NAME_STRING_MAX);
179 for (int i = 0; i < total_models; i++)
180 g_array_append_vals(in_param3, models[i],
181 sizeof(bluetooth_mesh_model_t));
183 result = _bt_send_request(BT_BLUEZ_SERVICE,
184 BT_MESH_NETWORK_CREATE,
185 in_param1, in_param2, in_param3,
186 in_param4, &out_param);
188 if (result == BLUETOOTH_ERROR_NONE) {
189 *network = g_array_index(out_param,
190 bluetooth_mesh_network_t, 0);
193 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
198 BT_EXPORT_API int bluetooth_mesh_network_load(
200 bluetooth_mesh_network_t *network)
203 char token_string[BLUETOOTH_MESH_TOKEN_STRING_MAX + 1];
205 BT_CHECK_PARAMETER(token, return);
206 BT_CHECK_PARAMETER(network, return);
209 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
211 g_strlcpy(token_string, token, sizeof(token_string));
212 g_array_append_vals(in_param1, token_string, BLUETOOTH_MESH_TOKEN_STRING_MAX);
214 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_LOAD,
215 in_param1, in_param2, in_param3, in_param4, &out_param);
217 if (result == BLUETOOTH_ERROR_NONE) {
218 *network = g_array_index(out_param,
219 bluetooth_mesh_network_t, 0);
222 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
227 BT_EXPORT_API int bluetooth_mesh_network_scan(
228 bluetooth_mesh_network_t *network,
229 bluetooth_mesh_scan_param_t *scan_param)
233 BT_CHECK_PARAMETER(network, return);
234 BT_CHECK_PARAMETER(scan_param, return);
237 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
239 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
241 g_array_append_vals(in_param2, scan_param, sizeof(bluetooth_mesh_scan_param_t));
243 BT_INFO("Mesh:Start Scan, time [%u]", scan_param->scan_time);
244 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_SCAN,
245 in_param1, in_param2, in_param3, in_param4, &out_param);
246 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
251 BT_EXPORT_API int bluetooth_mesh_network_cancel_scan(
252 bluetooth_mesh_network_t *network)
256 BT_CHECK_PARAMETER(network, return);
259 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
261 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
263 BT_INFO("Mesh: Cancel Scan");
264 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_CANCEL_SCAN,
265 in_param1, in_param2, in_param3, in_param4, &out_param);
266 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
271 BT_EXPORT_API int bluetooth_mesh_network_set_capabilities(
272 bluetooth_mesh_network_t *network,
273 bluetooth_mesh_provisioner_caps_t *caps)
277 BT_CHECK_PARAMETER(network, return);
278 BT_CHECK_PARAMETER(caps, return);
281 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
283 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
285 g_array_append_vals(in_param2, caps, sizeof(bluetooth_mesh_provisioner_caps_t));
287 BT_INFO("Mesh: Set Provisioner capabilities");
288 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_SET_CAPABILITIES,
289 in_param1, in_param2, in_param3, in_param4, &out_param);
290 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
295 BT_EXPORT_API int bluetooth_mesh_network_provision_device(
296 bluetooth_mesh_provisioning_request_t *req)
299 bt_user_info_t *user_info;
301 BT_CHECK_PARAMETER(req, return);
303 user_info = _bt_get_user_data(BT_MESH);
304 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
307 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
309 g_array_append_vals(in_param1, req,
310 sizeof(bluetooth_mesh_provisioning_request_t));
312 BT_INFO("Mesh: Set Provision Device");
313 result = _bt_send_request_async(BT_BLUEZ_SERVICE,
314 BT_MESH_NETWORK_PROVISION_DEVICE,
315 in_param1, in_param2, in_param3, in_param4,
316 user_info->cb, user_info->user_data);
318 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
323 BT_EXPORT_API int bluetooth_mesh_authentication_reply(int auth_type,
324 const char *auth_val, gboolean reply)
328 char auth_string[BLUETOOTH_MESH_AUTH_VALUE_LENGTH_MAX];
330 BT_CHECK_PARAMETER(auth_val, return);
333 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
335 g_strlcpy(auth_string, auth_val,
336 sizeof(auth_string));
337 g_array_append_vals(in_param1,
338 &auth_type, sizeof(int));
339 g_array_append_vals(in_param2, auth_string,
340 BLUETOOTH_MESH_AUTH_VALUE_LENGTH_MAX);
341 g_array_append_vals(in_param3, &reply, sizeof(gboolean));
343 BT_INFO("Mesh: Set Provisioner Authentication Reply");
344 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_AUTHENTICATION_REPLY,
345 in_param1, in_param2, in_param3, in_param4, &out_param);
347 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
352 BT_EXPORT_API int bluetooth_mesh_network_set_name(
353 bluetooth_mesh_network_t *network)
357 BT_CHECK_PARAMETER(network, return);
360 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
362 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
364 BT_INFO("Mesh:Set Network Name");
365 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_SET_NAME,
366 in_param1, in_param2, in_param3, in_param4, &out_param);
367 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
372 BT_EXPORT_API int bluetooth_mesh_network_add_netkey(
373 bluetooth_mesh_network_t *network,
374 uint16_t *netkey_idx)
378 BT_CHECK_PARAMETER(network, return);
379 BT_CHECK_PARAMETER(netkey_idx, return);
382 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
384 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
386 BT_INFO("Mesh:Set Create Subnetwork key");
387 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_ADD_NETKEY,
388 in_param1, in_param2, in_param3, in_param4, &out_param);
389 if (result == BLUETOOTH_ERROR_NONE)
390 *netkey_idx = g_array_index(out_param, guint16, 0);
391 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
396 BT_EXPORT_API int bluetooth_mesh_network_delete_netkey(
397 bluetooth_mesh_network_t *network,
402 BT_CHECK_PARAMETER(network, return);
405 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
407 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
408 g_array_append_vals(in_param2, &netkey_idx, sizeof(guint16));
410 BT_INFO("Mesh: Delete Subnetwork key");
411 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_DELETE_NETKEY,
412 in_param1, in_param2, in_param3, in_param4, &out_param);
413 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
418 BT_EXPORT_API int bluetooth_mesh_network_update_netkey(
419 bluetooth_mesh_network_t *network,
424 BT_CHECK_PARAMETER(network, return);
427 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
429 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
430 g_array_append_vals(in_param2, &netkey_idx, sizeof(guint16));
432 BT_INFO("Mesh: Update Subnetwork key");
433 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_UPDATE_NETKEY,
434 in_param1, in_param2, in_param3, in_param4, &out_param);
435 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
440 BT_EXPORT_API int bluetooth_mesh_network_add_appkey(
441 bluetooth_mesh_network_t *network,
442 uint16_t netkey_index,
443 uint16_t *appkey_index)
447 BT_CHECK_PARAMETER(network, return);
448 BT_CHECK_PARAMETER(appkey_index, return);
451 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
453 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
454 g_array_append_vals(in_param2, &netkey_index, sizeof(guint16));
456 BT_INFO("Mesh: Create AppKey");
457 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_ADD_APPKEY,
458 in_param1, in_param2, in_param3, in_param4, &out_param);
460 if (result == BLUETOOTH_ERROR_NONE)
461 *appkey_index = g_array_index(out_param, guint16, 0);
462 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
467 BT_EXPORT_API int bluetooth_mesh_network_update_appkey(
468 bluetooth_mesh_network_t *network,
469 uint16_t netkey_index, uint16_t appkey_index)
473 BT_CHECK_PARAMETER(network, return);
476 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
478 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
479 g_array_append_vals(in_param2, &netkey_index, sizeof(guint16));
480 g_array_append_vals(in_param3, &appkey_index, sizeof(guint16));
482 BT_INFO("Mesh:BTAPI: Update AppKey");
483 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_UPDATE_APPKEY,
484 in_param1, in_param2, in_param3, in_param4, &out_param);
486 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
491 BT_EXPORT_API int bluetooth_mesh_network_delete_appkey(bluetooth_mesh_network_t *network,
492 uint16_t netkey_index, uint16_t appkey_index)
496 BT_CHECK_PARAMETER(network, return);
499 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
501 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
502 g_array_append_vals(in_param2, &netkey_index, sizeof(guint16));
503 g_array_append_vals(in_param3, &appkey_index, sizeof(guint16));
505 BT_INFO("Mesh: Delete AppKey");
506 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_DELETE_APPKEY,
507 in_param1, in_param2, in_param3, in_param4, &out_param);
509 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
514 BT_EXPORT_API int bluetooth_mesh_network_get_all_nodes(
515 bluetooth_mesh_network_t *network,
518 int result = BLUETOOTH_ERROR_NONE;
521 bluetooth_mesh_node_info_t *info;
523 BT_CHECK_PARAMETER(network, return);
524 BT_CHECK_PARAMETER(nodes, return);
527 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
529 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
531 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_GET_NODES,
532 in_param1, in_param2, in_param3, in_param4, &out_param);
534 if (result == BLUETOOTH_ERROR_NONE) {
535 if (out_param == NULL) {
536 BT_ERR("Mesh: out_param is NULL");
537 result = BLUETOOTH_ERROR_INTERNAL;
539 size = (out_param->len) / sizeof(bluetooth_mesh_node_info_t);
541 for (i = 0; i < size; i++) {
542 bluetooth_mesh_node_info_t *data;
544 info = &g_array_index(out_param,
545 bluetooth_mesh_node_info_t, i);
547 data = g_memdup(info, sizeof(bluetooth_mesh_node_info_t));
548 g_ptr_array_add(*nodes, (gpointer)data);
553 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
558 BT_EXPORT_API int bluetooth_mesh_element_get_all_models(
559 bluetooth_mesh_network_t *network,
560 uint16_t node_addr, int elem_idx,
563 int result = BLUETOOTH_ERROR_NONE;
567 BT_CHECK_PARAMETER(network, return);
568 BT_CHECK_PARAMETER(models, return);
571 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
573 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
574 g_array_append_vals(in_param2, &node_addr, sizeof(guint16));
575 g_array_append_vals(in_param3, &elem_idx, sizeof(int));
577 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_ELEMENT_GET_MODELS,
578 in_param1, in_param2, in_param3, in_param4, &out_param);
580 if (result == BLUETOOTH_ERROR_NONE) {
581 if (out_param == NULL) {
582 BT_ERR("Mesh: out_param is NULL");
583 result = BLUETOOTH_ERROR_INTERNAL;
585 size = (out_param->len) / sizeof(guint32);
586 BT_INFO("Mesh: Total Models found in Element [%d]", size);
588 for (i = 0; i < size; i++) {
590 uint32_t *model_ptr = NULL;
592 model_obj = g_array_index(out_param,
595 model_ptr = g_memdup(&model_obj, sizeof(guint32));
596 g_ptr_array_add(*models, (gpointer)model_ptr);
601 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
606 BT_EXPORT_API int bluetooth_mesh_node_browse_vendor_features(
607 bluetooth_mesh_node_features_t *req)
610 bt_user_info_t *user_info;
612 BT_CHECK_PARAMETER(req, return);
614 user_info = _bt_get_user_data(BT_MESH);
615 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
618 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
620 g_array_append_vals(in_param1, req, sizeof(bluetooth_mesh_node_features_t));
622 BT_INFO("Mesh: Browse Vendor features of Node");
623 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_MESH_NODE_GET_VENDOR_FEATURES,
624 in_param1, in_param2, in_param3, in_param4,
625 user_info->cb, user_info->user_data);
627 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
632 BT_EXPORT_API int bluetooth_mesh_browse_remote_node(
633 bluetooth_mesh_node_discover_t *req)
636 bt_user_info_t *user_info;
638 BT_CHECK_PARAMETER(req, return);
640 user_info = _bt_get_user_data(BT_MESH);
641 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
644 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
646 g_array_append_vals(in_param1, req, sizeof(bluetooth_mesh_node_discover_t));
648 BT_INFO("Mesh: Browse remote Node");
649 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_MESH_NODE_BROWSE,
650 in_param1, in_param2, in_param3, in_param4,
651 user_info->cb, user_info->user_data);
653 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
658 BT_EXPORT_API int bluetooth_mesh_node_ttl_execute(
659 bluetooth_mesh_node_ttl_info_t *req)
662 bt_user_info_t *user_info;
664 BT_CHECK_PARAMETER(req, return);
666 user_info = _bt_get_user_data(BT_MESH);
667 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
670 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
672 g_array_append_vals(in_param1, req, sizeof(bluetooth_mesh_node_ttl_info_t));
674 BT_INFO("Mesh: Node TTL Execute");
675 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_MESH_NODE_TTL_EXECUTE,
676 in_param1, in_param2, in_param3, in_param4,
677 user_info->cb, user_info->user_data);
679 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
684 BT_EXPORT_API int bluetooth_mesh_model_configure_appkey(
685 bluetooth_mesh_model_configure_t *req)
688 bt_user_info_t *user_info;
690 BT_CHECK_PARAMETER(req, return);
692 user_info = _bt_get_user_data(BT_MESH);
693 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
696 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
698 g_array_append_vals(in_param1, req, sizeof(bluetooth_mesh_model_configure_t));
700 BT_INFO("Mesh: Node Model Configure AppKey");
701 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_MESH_MODEL_CONFIGURE_APPKEY,
702 in_param1, in_param2, in_param3, in_param4,
703 user_info->cb, user_info->user_data);
705 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
710 BT_EXPORT_API int bluetooth_mesh_model_send_msg(
711 bluetooth_mesh_model_msg_t *req)
714 bt_user_info_t *user_info;
716 BT_CHECK_PARAMETER(req, return);
718 user_info = _bt_get_user_data(BT_MESH);
719 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
722 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
724 g_array_append_vals(in_param1, req, sizeof(bluetooth_mesh_model_msg_t));
726 BT_INFO("Mesh: Node Model Send Msg");
727 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_MESH_MODEL_EXECUTE_MSG,
728 in_param1, in_param2, in_param3, in_param4,
729 user_info->cb, user_info->user_data);
731 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
736 BT_EXPORT_API int bluetooth_mesh_node_configure_key(
737 bluetooth_mesh_key_configure_t *req)
740 bt_user_info_t *user_info;
742 BT_CHECK_PARAMETER(req, return);
744 user_info = _bt_get_user_data(BT_MESH);
745 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
748 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
750 g_array_append_vals(in_param1, req, sizeof(bluetooth_mesh_key_configure_t));
752 BT_INFO("Mesh:BTAPI: Node Key Configure");
753 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_MESH_NODE_CONFIGURE_KEY,
754 in_param1, in_param2, in_param3, in_param4,
755 user_info->cb, user_info->user_data);
757 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
762 BT_EXPORT_API int bluetooth_mesh_network_get_all_groups(
763 bluetooth_mesh_network_t *network,
766 int result = BLUETOOTH_ERROR_NONE;
767 bluetooth_mesh_network_group_info_t *info;
771 BT_CHECK_PARAMETER(network, return);
772 BT_CHECK_PARAMETER(groups, return);
775 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
777 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
779 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_GET_GROUPS,
780 in_param1, in_param2, in_param3, in_param4, &out_param);
782 if (result == BLUETOOTH_ERROR_NONE) {
783 if (out_param == NULL) {
784 BT_ERR("Mesh: out_param is NULL");
785 result = BLUETOOTH_ERROR_INTERNAL;
787 size = (out_param->len) / sizeof(bluetooth_mesh_network_group_info_t);
790 BT_INFO("Mesh: No Groups created for the network");
792 BT_INFO("Mesh: Total groups [%d]", size);
793 for (i = 0; i < size; i++) {
794 bluetooth_mesh_network_group_info_t *grp_info = NULL;
796 info = &g_array_index(out_param,
797 bluetooth_mesh_network_group_info_t, i);
798 BT_INFO("Mesh: Group addr [0x%2.2x]", info->group_addr);
799 BT_INFO("Mesh: Group is Virtual [%s]", info->is_virtual ? "YES" : "NO");
800 BT_INFO("Mesh: Group net UUID[%s]", info->net_uuid);
801 if (info->is_virtual)
802 BT_INFO("Mesh: Virual Label UUID [%s]", info->label_uuid);
803 grp_info = g_memdup(info,
804 sizeof(bluetooth_mesh_network_group_info_t));
805 g_ptr_array_add(*groups, (gpointer)grp_info);
810 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
815 BT_EXPORT_API int bluetooth_mesh_network_get_all_netkey(
816 bluetooth_mesh_network_t *network,
819 int result = BLUETOOTH_ERROR_NONE;
823 BT_CHECK_PARAMETER(network, return);
824 BT_CHECK_PARAMETER(netkeys, return);
827 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
829 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
831 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_GET_NETKEYS,
832 in_param1, in_param2, in_param3, in_param4, &out_param);
834 if (result == BLUETOOTH_ERROR_NONE) {
835 if (out_param == NULL) {
836 BT_ERR("Mesh: out_param is NULL");
837 result = BLUETOOTH_ERROR_INTERNAL;
839 size = (out_param->len) / sizeof(guint16);
842 BT_ERR("Mesh: No netkeys created for the network");
843 result = BLUETOOTH_ERROR_NOT_FOUND;
846 for (i = 0; i < size; i++) {
847 uint16_t netkey_index;
848 uint16_t *netkey_idx = NULL;
850 netkey_index = g_array_index(out_param,
853 netkey_idx = g_memdup(&netkey_index, sizeof(guint16));
854 g_ptr_array_add(*netkeys, (gpointer)netkey_idx);
859 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
864 BT_EXPORT_API int bluetooth_mesh_netkey_get_all_appkey(
865 bluetooth_mesh_network_t *network,
869 int result = BLUETOOTH_ERROR_NONE;
873 BT_CHECK_PARAMETER(network, return);
874 BT_CHECK_PARAMETER(appkeys, return);
877 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
879 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
880 g_array_append_vals(in_param2, &netkey_idx, sizeof(guint16));
882 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_GET_APPKEYS,
883 in_param1, in_param2, in_param3, in_param4, &out_param);
885 if (result == BLUETOOTH_ERROR_NONE) {
886 if (out_param == NULL) {
887 BT_ERR("Mesh: out_param is NULL");
888 result = BLUETOOTH_ERROR_INTERNAL;
890 size = (out_param->len) / sizeof(guint16);
893 BT_ERR("Mesh: No Appkeys created for the NetKey in the network");
895 for (i = 0; i < size; i++) {
896 uint16_t appkey_index;
897 uint16_t *appkey_idx = NULL;
899 appkey_index = g_array_index(out_param,
902 appkey_idx = g_memdup(&appkey_index, sizeof(guint16));
903 g_ptr_array_add(*appkeys, (gpointer)appkey_idx);
908 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
913 BT_EXPORT_API int bluetooth_mesh_node_get_all_netkeys(
914 bluetooth_mesh_node_discover_t *node,
917 int result = BLUETOOTH_ERROR_NONE;
921 BT_CHECK_PARAMETER(node, return);
922 BT_CHECK_PARAMETER(netkeys, return);
925 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
927 g_array_append_vals(in_param1, node, sizeof(bluetooth_mesh_node_discover_t));
929 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NODE_GET_NETKEYS,
930 in_param1, in_param2, in_param3, in_param4, &out_param);
932 if (result == BLUETOOTH_ERROR_NONE) {
933 if (out_param == NULL) {
934 BT_ERR("Mesh: out_param is NULL");
935 result = BLUETOOTH_ERROR_INTERNAL;
937 size = (out_param->len) / sizeof(guint16);
939 for (i = 0; i < size; i++) {
940 uint16_t netkey_index;
941 uint16_t *netkey_idx = NULL;
943 netkey_index = g_array_index(out_param,
946 netkey_idx = g_memdup(&netkey_index, sizeof(guint16));
947 g_ptr_array_add(*netkeys, (gpointer)netkey_idx);
952 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
957 BT_EXPORT_API int bluetooth_mesh_node_get_all_appkeys(
958 bluetooth_mesh_node_discover_t *req, GPtrArray **appkeys)
960 int result = BLUETOOTH_ERROR_NONE;
964 BT_CHECK_PARAMETER(req, return);
965 BT_CHECK_PARAMETER(appkeys, return);
968 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
970 g_array_append_vals(in_param1, req, sizeof(bluetooth_mesh_node_discover_t));
972 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NODE_GET_APPKEYS,
973 in_param1, in_param2, in_param3, in_param4, &out_param);
975 if (result == BLUETOOTH_ERROR_NONE) {
976 if (out_param == NULL) {
977 BT_ERR("Mesh: out_param is NULL");
978 result = BLUETOOTH_ERROR_INTERNAL;
980 size = (out_param->len) / sizeof(guint16);
982 for (i = 0; i < size; i++) {
983 uint16_t appkey_index;
984 uint16_t *appkey_idx = NULL;
986 appkey_index = g_array_index(out_param,
989 appkey_idx = g_memdup(&appkey_index, sizeof(guint16));
990 g_ptr_array_add(*appkeys, (gpointer)appkey_idx);
995 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
1000 BT_EXPORT_API int bluetooth_mesh_model_get_all_appkeys(
1001 bluetooth_mesh_model_configure_t *req)
1004 bt_user_info_t *user_info;
1006 BT_CHECK_PARAMETER(req, return);
1008 user_info = _bt_get_user_data(BT_MESH);
1009 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
1012 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
1014 g_array_append_vals(in_param1, req, sizeof(bluetooth_mesh_model_configure_t));
1016 BT_INFO("Mesh:Node Model Get AppKey List ");
1017 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_MESH_MODEL_GET_APPKEY_LIST,
1018 in_param1, in_param2, in_param3, in_param4,
1019 user_info->cb, user_info->user_data);
1021 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
1025 BT_EXPORT_API int bluetooth_mesh_model_set_publication(
1026 bluetooth_mesh_model_configure_t *req)
1029 bt_user_info_t *user_info;
1031 BT_CHECK_PARAMETER(req, return);
1033 user_info = _bt_get_user_data(BT_MESH);
1034 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
1037 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
1039 g_array_append_vals(in_param1, req, sizeof(bluetooth_mesh_model_configure_t));
1041 BT_INFO("Mesh: Model Set Publication");
1042 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_MESH_MODEL_SET_PUBLICATION,
1043 in_param1, in_param2, in_param3, in_param4,
1044 user_info->cb, user_info->user_data);
1046 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
1050 BT_EXPORT_API int bluetooth_mesh_model_get_publication(
1051 bluetooth_mesh_model_configure_t *req)
1054 bt_user_info_t *user_info;
1056 BT_CHECK_PARAMETER(req, return);
1058 user_info = _bt_get_user_data(BT_MESH);
1059 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
1062 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
1064 g_array_append_vals(in_param1, req, sizeof(bluetooth_mesh_model_configure_t));
1066 BT_INFO("Mesh:BTAPI: Model Get Publication");
1067 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_MESH_MODEL_GET_PUBLICATION,
1068 in_param1, in_param2, in_param3, in_param4,
1069 user_info->cb, user_info->user_data);
1071 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
1075 BT_EXPORT_API int bluetooth_mesh_model_get_subscriptopn_list(
1076 bluetooth_mesh_model_configure_t *req)
1079 bt_user_info_t *user_info;
1081 BT_CHECK_PARAMETER(req, return);
1083 user_info = _bt_get_user_data(BT_MESH);
1084 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
1087 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
1089 g_array_append_vals(in_param1, req, sizeof(bluetooth_mesh_model_configure_t));
1091 BT_INFO("Mesh:BTAPI: Model Get Subscription List ");
1092 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_MESH_MODEL_GET_SUBSCRIPTION_LIST,
1093 in_param1, in_param2, in_param3, in_param4,
1094 user_info->cb, user_info->user_data);
1096 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
1100 BT_EXPORT_API int bluetooth_mesh_network_remove_group(
1101 bluetooth_mesh_network_t *network,
1102 bluetooth_mesh_network_group_info_t *req)
1106 BT_CHECK_PARAMETER(network, return);
1107 BT_CHECK_PARAMETER(req, return);
1110 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
1112 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
1113 g_array_append_vals(in_param2, req, sizeof(bluetooth_mesh_network_group_info_t));
1115 BT_INFO("Mesh: Remove Group Request");
1116 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_REMOVE_GROUP,
1117 in_param1, in_param2, in_param3, in_param4, &out_param);
1119 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
1124 BT_EXPORT_API int bluetooth_mesh_network_create_group(
1125 bluetooth_mesh_network_t *network, bool is_virtual,
1126 uint16_t grp_addr, bluetooth_mesh_network_group_info_t *info)
1130 BT_CHECK_PARAMETER(network, return);
1131 BT_CHECK_PARAMETER(info, return);
1134 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
1136 g_array_append_vals(in_param1, network, sizeof(bluetooth_mesh_network_t));
1137 g_array_append_vals(in_param2, &is_virtual, sizeof(gboolean));
1138 g_array_append_vals(in_param3, &grp_addr, sizeof(guint16));
1140 BT_INFO("Mesh: Create Group Request");
1141 result = _bt_send_request(BT_BLUEZ_SERVICE, BT_MESH_NETWORK_CREATE_GROUP,
1142 in_param1, in_param2, in_param3, in_param4, &out_param);
1144 if (result == BLUETOOTH_ERROR_NONE) {
1145 *info = g_array_index(out_param,
1146 bluetooth_mesh_network_group_info_t, 0);
1148 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
1153 BT_EXPORT_API int bluetooth_mesh_model_configure_group_sub(
1154 bluetooth_mesh_model_configure_t *req)
1157 bt_user_info_t *user_info;
1159 BT_CHECK_PARAMETER(req, return);
1161 user_info = _bt_get_user_data(BT_MESH);
1162 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
1165 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
1167 g_array_append_vals(in_param1, req, sizeof(bluetooth_mesh_model_configure_t));
1169 BT_INFO("Mesh:Model Group Subscription Request");
1170 result = _bt_send_request_async(BT_BLUEZ_SERVICE, BT_MESH_MODEL_CONFIG_GROUP_SUB,
1171 in_param1, in_param2, in_param3, in_param4,
1172 user_info->cb, user_info->user_data);
1174 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
1178 BT_EXPORT_API int bluetooth_mesh_model_configure_virtual_group_sub(
1179 bluetooth_mesh_model_configure_t *req)
1182 bt_user_info_t *user_info;
1184 BT_CHECK_PARAMETER(req, return);
1186 user_info = _bt_get_user_data(BT_MESH);
1187 retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL);
1190 BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
1192 g_array_append_vals(in_param1, req, sizeof(bluetooth_mesh_model_configure_t));
1194 BT_INFO("Mesh: Model Virtual Group Subscription Request");
1195 result = _bt_send_request_async(BT_BLUEZ_SERVICE,
1196 BT_MESH_MODEL_CONFIG_VIRTUAL_GROUP_SUB,
1197 in_param1, in_param2, in_param3, in_param4,
1198 user_info->cb, user_info->user_data);
1200 BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);