/* * Copyright (c) 2020 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ #include static uint8_t mfg_data[] = { 0xff, 0xff, 0x00 }; static const struct bt_data per_adv_ad[] = { BT_DATA(BT_DATA_MANUFACTURER_DATA, mfg_data, 3), }; static const struct bt_data ad[] = { BT_DATA(BT_DATA_NAME_COMPLETE, CONFIG_BT_DEVICE_NAME, sizeof(CONFIG_BT_DEVICE_NAME) - 1), }; int main(void) { struct bt_le_ext_adv *adv; int err; printk("Starting Periodic Advertising Demo\n"); /* Initialize the Bluetooth Subsystem */ err = bt_enable(NULL); if (err) { printk("Bluetooth init failed (err %d)\n", err); return 0; } /* Create a non-connectable advertising set */ err = bt_le_ext_adv_create(BT_LE_EXT_ADV_NCONN, NULL, &adv); if (err) { printk("Failed to create advertising set (err %d)\n", err); return 0; } /* Set advertising data to have complete local name set */ err = bt_le_ext_adv_set_data(adv, ad, ARRAY_SIZE(ad), NULL, 0); if (err) { printk("Failed to set advertising data (err %d)\n", err); return 0; } /* Set periodic advertising parameters */ err = bt_le_per_adv_set_param(adv, BT_LE_PER_ADV_DEFAULT); if (err) { printk("Failed to set periodic advertising parameters" " (err %d)\n", err); return 0; } /* Enable Periodic Advertising */ err = bt_le_per_adv_start(adv); if (err) { printk("Failed to enable periodic advertising (err %d)\n", err); return 0; } while (true) { printk("Start Extended Advertising..."); err = bt_le_ext_adv_start(adv, BT_LE_EXT_ADV_START_DEFAULT); if (err) { printk("Failed to start extended advertising " "(err %d)\n", err); return 0; } printk("done.\n"); for (int i = 0; i < 3; i++) { k_sleep(K_SECONDS(10)); mfg_data[2]++; printk("Set Periodic Advertising Data..."); err = bt_le_per_adv_set_data(adv, per_adv_ad, ARRAY_SIZE(per_adv_ad)); if (err) { printk("Failed (err %d)\n", err); return 0; } printk("done.\n"); } k_sleep(K_SECONDS(10)); printk("Stop Extended Advertising..."); err = bt_le_ext_adv_stop(adv); if (err) { printk("Failed to stop extended advertising " "(err %d)\n", err); return 0; } printk("done.\n"); k_sleep(K_SECONDS(10)); } return 0; }