/* * Copyright (c) 2012-2014 Wind River Systems, Inc. * Copyright (c) 2020 Prevas A/S * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #define LOG_LEVEL LOG_LEVEL_DBG #include LOG_MODULE_REGISTER(smp_bt_sample); static struct k_work advertise_work; static const struct bt_data ad[] = { BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)), BT_DATA_BYTES(BT_DATA_UUID128_ALL, 0x84, 0xaa, 0x60, 0x74, 0x52, 0x8a, 0x8b, 0x86, 0xd3, 0x4c, 0xb7, 0x1d, 0x1d, 0xdc, 0x53, 0x8d), }; static const struct bt_data sd[] = { BT_DATA(BT_DATA_NAME_COMPLETE, CONFIG_BT_DEVICE_NAME, sizeof(CONFIG_BT_DEVICE_NAME) - 1), }; static void advertise(struct k_work *work) { int rc; bt_le_adv_stop(); rc = bt_le_adv_start(BT_LE_ADV_CONN, ad, ARRAY_SIZE(ad), sd, ARRAY_SIZE(sd)); if (rc) { LOG_ERR("Advertising failed to start (rc %d)", rc); return; } LOG_INF("Advertising successfully started"); } static void connected(struct bt_conn *conn, uint8_t err) { if (err) { LOG_ERR("Connection failed (err 0x%02x)", err); } else { LOG_INF("Connected"); } } static void disconnected(struct bt_conn *conn, uint8_t reason) { LOG_INF("Disconnected (reason 0x%02x)", reason); k_work_submit(&advertise_work); } BT_CONN_CB_DEFINE(conn_callbacks) = { .connected = connected, .disconnected = disconnected, }; static void bt_ready(int err) { if (err != 0) { LOG_ERR("Bluetooth failed to initialise: %d", err); } else { k_work_submit(&advertise_work); } } void start_smp_bluetooth_adverts(void) { int rc; k_work_init(&advertise_work, advertise); rc = bt_enable(bt_ready); if (rc != 0) { LOG_ERR("Bluetooth enable failed: %d", rc); } }