10static const char *
const TAG =
"zephyr_ble_server";
12static struct k_work advertise_work;
14#define DEVICE_NAME CONFIG_BT_DEVICE_NAME
15#define DEVICE_NAME_LEN (sizeof(DEVICE_NAME) - 1)
17static const struct bt_data AD[] = {
18 BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)),
19 BT_DATA(BT_DATA_NAME_COMPLETE, DEVICE_NAME, DEVICE_NAME_LEN),
22static const struct bt_data SD[] = {
24 BT_DATA_BYTES(BT_DATA_UUID128_ALL, 0x84, 0xaa, 0x60, 0x74, 0x52, 0x8a, 0x8b, 0x86, 0xd3, 0x4c, 0xb7, 0x1d, 0x1d,
29const struct bt_le_adv_param *
const ADV_PARAM = BT_LE_ADV_CONN;
31static void advertise(
struct k_work *work) {
32 int rc = bt_le_adv_stop();
34 ESP_LOGE(TAG,
"Advertising failed to stop (rc %d)", rc);
37 rc = bt_le_adv_start(
ADV_PARAM, AD, ARRAY_SIZE(AD), SD, ARRAY_SIZE(SD));
39 ESP_LOGE(TAG,
"Advertising failed to start (rc %d)", rc);
42 ESP_LOGI(TAG,
"Advertising successfully started");
45static void connected(
struct bt_conn *conn, uint8_t err) {
47 ESP_LOGE(TAG,
"Connection failed (err 0x%02x)", err);
49 ESP_LOGI(TAG,
"Connected");
53static void disconnected(
struct bt_conn *conn, uint8_t reason) {
54 ESP_LOGI(TAG,
"Disconnected (reason 0x%02x)", reason);
55 k_work_submit(&advertise_work);
58static void bt_ready(
int err) {
60 ESP_LOGE(TAG,
"Bluetooth failed to initialise: %d", err);
62 k_work_submit(&advertise_work);
67 .connected = connected,
68 .disconnected = disconnected,
72 k_work_init(&advertise_work, advertise);
84 int rc = bt_enable(bt_ready);
86 ESP_LOGE(TAG,
"Bluetooth enable failed: %d", rc);
92 struct k_work_sync
sync;
93 k_work_cancel_sync(&advertise_work, &
sync);