| /* main.c - Application main entry point */ |
| |
| /* |
| * Copyright (c) 2015-2016 Intel Corporation |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <zephyr/types.h> |
| #include <stddef.h> |
| #include <misc/printk.h> |
| #include <misc/util.h> |
| |
| #include <bluetooth/bluetooth.h> |
| #include <bluetooth/hci.h> |
| |
| #define DEVICE_NAME CONFIG_BLUETOOTH_DEVICE_NAME |
| #define DEVICE_NAME_LEN (sizeof(DEVICE_NAME) - 1) |
| |
| /* |
| * Set Advertisement data. Based on the Eddystone specification: |
| * https://github.com/google/eddystone/blob/master/protocol-specification.md |
| * https://github.com/google/eddystone/tree/master/eddystone-url |
| */ |
| static const struct bt_data ad[] = { |
| BT_DATA_BYTES(BT_DATA_FLAGS, BT_LE_AD_NO_BREDR), |
| BT_DATA_BYTES(BT_DATA_UUID16_ALL, 0xaa, 0xfe), |
| BT_DATA_BYTES(BT_DATA_SVC_DATA16, |
| 0xaa, 0xfe, /* Eddystone UUID */ |
| 0x10, /* Eddystone-URL frame type */ |
| 0x00, /* Calibrated Tx power at 0m */ |
| 0x00, /* URL Scheme Prefix http://www. */ |
| 'z', 'e', 'p', 'h', 'y', 'r', |
| 'p', 'r', 'o', 'j', 'e', 'c', 't', |
| 0x08) /* .org */ |
| }; |
| |
| /* Set Scan Response data */ |
| static const struct bt_data sd[] = { |
| BT_DATA(BT_DATA_NAME_COMPLETE, DEVICE_NAME, DEVICE_NAME_LEN), |
| }; |
| |
| 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), |
| sd, ARRAY_SIZE(sd)); |
| if (err) { |
| printk("Advertising failed to start (err %d)\n", err); |
| return; |
| } |
| |
| printk("Beacon started\n"); |
| } |
| |
| void main(void) |
| { |
| int err; |
| |
| printk("Starting Beacon Demo\n"); |
| |
| /* Initialize the Bluetooth Subsystem */ |
| err = bt_enable(bt_ready); |
| if (err) { |
| printk("Bluetooth init failed (err %d)\n", err); |
| } |
| } |