/* * Copyright (c) 2018 Henrik Brix Andersen * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #include #include #ifndef IBEACON_RSSI #define IBEACON_RSSI 0xc8 #endif /* * Set iBeacon demo advertisement data. These values are for * demonstration only and must be changed for production environments! * * UUID: 18ee1516-016b-4bec-ad96-bcb96d166e97 * Major: 0 * Minor: 0 * RSSI: -56 dBm */ static const struct bt_data ad[] = { BT_DATA_BYTES(BT_DATA_FLAGS, BT_LE_AD_NO_BREDR), BT_DATA_BYTES(BT_DATA_MANUFACTURER_DATA, 0x4c, 0x00, /* Apple */ 0x02, 0x15, /* iBeacon */ 0x18, 0xee, 0x15, 0x16, /* UUID[15..12] */ 0x01, 0x6b, /* UUID[11..10] */ 0x4b, 0xec, /* UUID[9..8] */ 0xad, 0x96, /* UUID[7..6] */ 0xbc, 0xb9, 0x6d, 0x16, 0x6e, 0x97, /* UUID[5..0] */ 0x00, 0x00, /* Major */ 0x00, 0x00, /* Minor */ IBEACON_RSSI) /* Calibrated RSSI @ 1m */ }; static void bt_ready(int err) { if (err) { printk("Bluetooth init failed (err %d)\n", err); return; } printk("Bluetooth initialized\n"); /* Start advertising */ err = bt_le_adv_start(BT_LE_ADV_NCONN, ad, ARRAY_SIZE(ad), NULL, 0); if (err) { printk("Advertising failed to start (err %d)\n", err); return; } printk("iBeacon started\n"); } int main(void) { int err; printk("Starting iBeacon Demo\n"); /* Initialize the Bluetooth Subsystem */ err = bt_enable(bt_ready); if (err) { printk("Bluetooth init failed (err %d)\n", err); } return 0; }