/* * Copyright (c) 2023 Victor Chavez * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #include LOG_MODULE_REGISTER(ble_backend); 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, LOGGER_BACKEND_BLE_ADV_UUID_DATA) }; static const struct bt_data sd[] = { BT_DATA(BT_DATA_NAME_COMPLETE, CONFIG_BT_DEVICE_NAME, sizeof(CONFIG_BT_DEVICE_NAME) - 1), }; static void start_adv(void) { int err; err = bt_le_adv_start(BT_LE_ADV_CONN_FAST_1, ad, ARRAY_SIZE(ad), sd, ARRAY_SIZE(sd)); if (err) { LOG_ERR("Advertising failed to start (err %d)", err); 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 %s", err, bt_hci_err_to_str(err)); } else { LOG_INF("Connected"); } } static void disconnected(struct bt_conn *conn, uint8_t reason) { LOG_INF("Disconnected, reason 0x%02x %s", reason, bt_hci_err_to_str(reason)); start_adv(); } BT_CONN_CB_DEFINE(conn_callbacks) = { .connected = connected, .disconnected = disconnected, }; static void auth_cancel(struct bt_conn *conn) { char addr[BT_ADDR_LE_STR_LEN]; bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); LOG_INF("Pairing cancelled: %s", addr); } static struct bt_conn_auth_cb auth_cb_display = { .cancel = auth_cancel, }; void backend_ble_hook(bool status, void *ctx) { ARG_UNUSED(ctx); if (status) { LOG_INF("BLE Logger Backend enabled."); } else { LOG_INF("BLE Logger Backend disabled."); } } int main(void) { int err; LOG_INF("BLE LOG Demo"); logger_backend_ble_set_hook(backend_ble_hook, NULL); err = bt_enable(NULL); if (err) { LOG_ERR("Bluetooth init failed (err %d)", err); return 0; } bt_conn_auth_cb_register(&auth_cb_display); start_adv(); while (1) { uint32_t uptime_secs = k_uptime_get_32()/1000U; LOG_INF("Uptime %d secs", uptime_secs); k_sleep(K_MSEC(1000)); } return 0; }