| /* |
| * Copyright (c) 2017 Intel Corporation |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <zephyr/sys/printk.h> |
| #include <stdlib.h> |
| #include <zephyr/kernel.h> |
| |
| #include <zephyr/shell/shell.h> |
| |
| #include <zephyr/bluetooth/bluetooth.h> |
| #include <zephyr/bluetooth/mesh.h> |
| #include <zephyr/bluetooth/mesh/shell.h> |
| |
| static struct bt_mesh_cfg_cli cfg_cli; |
| |
| #if defined(CONFIG_BT_MESH_DFD_SRV) |
| static struct bt_mesh_dfd_srv dfd_srv; |
| #endif |
| |
| #if defined(CONFIG_BT_MESH_SAR_CFG_CLI) |
| static struct bt_mesh_sar_cfg_cli sar_cfg_cli; |
| #endif |
| |
| #if defined(CONFIG_BT_MESH_PRIV_BEACON_CLI) |
| static struct bt_mesh_priv_beacon_cli priv_beacon_cli; |
| #endif |
| |
| #if defined(CONFIG_BT_MESH_SOL_PDU_RPL_CLI) |
| static struct bt_mesh_sol_pdu_rpl_cli srpl_cli; |
| #endif |
| |
| |
| #if defined(CONFIG_BT_MESH_OD_PRIV_PROXY_CLI) |
| static struct bt_mesh_od_priv_proxy_cli od_priv_proxy_cli; |
| #endif |
| |
| #if defined(CONFIG_BT_MESH_LARGE_COMP_DATA_CLI) |
| struct bt_mesh_large_comp_data_cli large_comp_data_cli; |
| #endif |
| |
| BT_MESH_SHELL_HEALTH_PUB_DEFINE(health_pub); |
| |
| static struct bt_mesh_model root_models[] = { |
| BT_MESH_MODEL_CFG_SRV, |
| BT_MESH_MODEL_CFG_CLI(&cfg_cli), |
| BT_MESH_MODEL_HEALTH_SRV(&bt_mesh_shell_health_srv, &health_pub), |
| BT_MESH_MODEL_HEALTH_CLI(&bt_mesh_shell_health_cli), |
| #if defined(CONFIG_BT_MESH_DFD_SRV) |
| BT_MESH_MODEL_DFD_SRV(&dfd_srv), |
| #else |
| #if defined(CONFIG_BT_MESH_SHELL_DFU_SRV) |
| BT_MESH_MODEL_DFU_SRV(&bt_mesh_shell_dfu_srv), |
| #elif defined(CONFIG_BT_MESH_SHELL_BLOB_SRV) |
| BT_MESH_MODEL_BLOB_SRV(&bt_mesh_shell_blob_srv), |
| #endif |
| #if defined(CONFIG_BT_MESH_SHELL_DFU_CLI) |
| BT_MESH_MODEL_DFU_CLI(&bt_mesh_shell_dfu_cli), |
| #elif defined(CONFIG_BT_MESH_SHELL_BLOB_CLI) |
| BT_MESH_MODEL_BLOB_CLI(&bt_mesh_shell_blob_cli), |
| #endif |
| #endif /* CONFIG_BT_MESH_DFD_SRV */ |
| #if defined(CONFIG_BT_MESH_SHELL_RPR_CLI) |
| BT_MESH_MODEL_RPR_CLI(&bt_mesh_shell_rpr_cli), |
| #endif |
| #if defined(CONFIG_BT_MESH_RPR_SRV) |
| BT_MESH_MODEL_RPR_SRV, |
| #endif |
| |
| #if defined(CONFIG_BT_MESH_SAR_CFG_SRV) |
| BT_MESH_MODEL_SAR_CFG_SRV, |
| #endif |
| #if defined(CONFIG_BT_MESH_SAR_CFG_CLI) |
| BT_MESH_MODEL_SAR_CFG_CLI(&sar_cfg_cli), |
| #endif |
| |
| #if defined(CONFIG_BT_MESH_OP_AGG_SRV) |
| BT_MESH_MODEL_OP_AGG_SRV, |
| #endif |
| #if defined(CONFIG_BT_MESH_OP_AGG_CLI) |
| BT_MESH_MODEL_OP_AGG_CLI, |
| #endif |
| |
| #if defined(CONFIG_BT_MESH_LARGE_COMP_DATA_SRV) |
| BT_MESH_MODEL_LARGE_COMP_DATA_SRV, |
| #endif |
| #if defined(CONFIG_BT_MESH_LARGE_COMP_DATA_CLI) |
| BT_MESH_MODEL_LARGE_COMP_DATA_CLI(&large_comp_data_cli), |
| #endif |
| |
| #if defined(CONFIG_BT_MESH_PRIV_BEACON_SRV) |
| BT_MESH_MODEL_PRIV_BEACON_SRV, |
| #endif |
| #if defined(CONFIG_BT_MESH_PRIV_BEACON_CLI) |
| BT_MESH_MODEL_PRIV_BEACON_CLI(&priv_beacon_cli), |
| #endif |
| #if defined(CONFIG_BT_MESH_OD_PRIV_PROXY_CLI) |
| BT_MESH_MODEL_OD_PRIV_PROXY_CLI(&od_priv_proxy_cli), |
| #endif |
| #if defined(CONFIG_BT_MESH_SOL_PDU_RPL_CLI) |
| BT_MESH_MODEL_SOL_PDU_RPL_CLI(&srpl_cli), |
| #endif |
| #if defined(CONFIG_BT_MESH_OD_PRIV_PROXY_SRV) |
| BT_MESH_MODEL_OD_PRIV_PROXY_SRV, |
| #endif |
| }; |
| |
| static struct bt_mesh_elem elements[] = { |
| BT_MESH_ELEM(0, root_models, BT_MESH_MODEL_NONE), |
| }; |
| |
| static const struct bt_mesh_comp comp = { |
| .cid = CONFIG_BT_COMPANY_ID, |
| .elem = elements, |
| .elem_count = ARRAY_SIZE(elements), |
| }; |
| |
| static void bt_ready(int err) |
| { |
| if (err && err != -EALREADY) { |
| printk("Bluetooth init failed (err %d)\n", err); |
| return; |
| } |
| |
| printk("Bluetooth initialized\n"); |
| |
| err = bt_mesh_init(&bt_mesh_shell_prov, &comp); |
| if (err) { |
| printk("Initializing mesh failed (err %d)\n", err); |
| return; |
| } |
| |
| if (IS_ENABLED(CONFIG_SETTINGS)) { |
| settings_load(); |
| } |
| |
| printk("Mesh initialized\n"); |
| |
| if (bt_mesh_is_provisioned()) { |
| printk("Mesh network restored from flash\n"); |
| } else { |
| printk("Use \"pb-adv on\" or \"pb-gatt on\" to " |
| "enable advertising\n"); |
| } |
| } |
| |
| int main(void) |
| { |
| int err; |
| |
| printk("Initializing...\n"); |
| |
| /* Initialize the Bluetooth Subsystem */ |
| err = bt_enable(bt_ready); |
| if (err && err != -EALREADY) { |
| printk("Bluetooth init failed (err %d)\n", err); |
| } |
| |
| printk("Press the <Tab> button for supported commands.\n"); |
| printk("Before any Mesh commands you must run \"mesh init\"\n"); |
| return 0; |
| } |