/* * Copyright (c) 2017 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #include #include #include 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 #if defined(CONFIG_BT_MESH_BRG_CFG_CLI) static struct bt_mesh_brg_cfg_cli brg_cfg_cli; #endif BT_MESH_SHELL_HEALTH_PUB_DEFINE(health_pub); static const 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, health_srv_meta), 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 #if defined(CONFIG_BT_MESH_BRG_CFG_SRV) BT_MESH_MODEL_BRG_CFG_SRV, #endif #if defined(CONFIG_BT_MESH_BRG_CFG_CLI) BT_MESH_MODEL_BRG_CFG_CLI(&brg_cfg_cli), #endif }; static const 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 \"prov pb-adv on\" or \"prov 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 button for supported commands.\n"); printk("Before any Mesh commands you must run \"mesh init\"\n"); return 0; }