| /* |
| * Copyright (c) 2017-2018 Nordic Semiconductor ASA |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <stdlib.h> |
| #include <string.h> |
| #include <zephyr.h> |
| #include <shell/shell.h> |
| #include <sys/printk.h> |
| #include <sys/byteorder.h> |
| |
| #include <bluetooth/hci.h> |
| #include <bluetooth/hci_vs.h> |
| #include <bluetooth/conn.h> |
| |
| #include "../host/hci_core.h" |
| |
| #if defined(CONFIG_BT_HCI_MESH_EXT) |
| int cmd_mesh_adv(const struct shell *sh, size_t argc, char *argv[]) |
| { |
| struct net_buf *buf; |
| int err; |
| |
| if (argc < 2) { |
| return -EINVAL; |
| } |
| |
| if (!strcmp(argv[1], "on")) { |
| struct bt_hci_cp_mesh_advertise *cp; |
| |
| buf = bt_hci_cmd_create(BT_HCI_OP_VS_MESH, |
| sizeof(struct bt_hci_cp_mesh) + |
| sizeof(*cp)); |
| if (!buf) { |
| return -ENOBUFS; |
| } |
| |
| net_buf_add_u8(buf, BT_HCI_OC_MESH_ADVERTISE); |
| |
| /* TODO: fetch and fill cmdline params */ |
| cp = net_buf_add(buf, sizeof(*cp)); |
| cp->adv_slot = 0U; |
| cp->own_addr_type = 0x01; |
| memset(&cp->random_addr, 0, sizeof(bt_addr_t)); |
| cp->ch_map = 0x07; |
| cp->tx_power = 0; |
| cp->min_tx_delay = 0U; |
| cp->max_tx_delay = 0x32; |
| cp->retx_count = 0x07; |
| cp->retx_interval = 0x00; |
| cp->scan_delay = 0x0a; |
| cp->scan_duration = sys_cpu_to_le16(0x0064); |
| cp->scan_filter = 0x00; |
| cp->data_len = 0U; |
| memset(cp->data, 0, sizeof(cp->data)); |
| } else if (!strcmp(argv[1], "off")) { |
| struct bt_hci_cp_mesh_advertise_cancel *cp; |
| |
| buf = bt_hci_cmd_create(BT_HCI_OP_VS_MESH, |
| sizeof(struct bt_hci_cp_mesh) + |
| sizeof(*cp)); |
| if (!buf) { |
| return -ENOBUFS; |
| } |
| |
| net_buf_add_u8(buf, BT_HCI_OC_MESH_ADVERTISE_CANCEL); |
| |
| cp = net_buf_add(buf, sizeof(*cp)); |
| cp->adv_slot = 0U; |
| } else { |
| return -EINVAL; |
| } |
| |
| err = bt_hci_cmd_send_sync(BT_HCI_OP_VS_MESH, buf, NULL); |
| |
| return err; |
| } |
| #endif /* CONFIG_BT_HCI_MESH_EXT */ |