/* main.c - Application main entry point */ /* * Copyright (c) 2023 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #include #include #include #include "common.h" LOG_MODULE_DECLARE(ead_peripheral_sample, CONFIG_BT_EAD_LOG_LEVEL); /* * Get button configuration from the devicetree sw0 alias. This is mandatory. */ #define SW0_NODE DT_ALIAS(sw0) #if !DT_NODE_HAS_STATUS(SW0_NODE, okay) #error "Unsupported board: sw0 devicetree alias is not defined" #endif static const struct gpio_dt_spec button = GPIO_DT_SPEC_GET_OR(SW0_NODE, gpios, {0}); static struct gpio_callback button_cb_data; extern int run_peripheral_sample(int get_passkey_confirmation(struct bt_conn *conn)); static struct k_poll_signal button_pressed_signal; static void button_pressed(const struct device *dev, struct gpio_callback *cb, uint32_t pins) { LOG_DBG("Button pressed..."); k_poll_signal_raise(&button_pressed_signal, 0); k_sleep(K_SECONDS(1)); k_poll_signal_reset(&button_pressed_signal); } static int get_passkey_confirmation(struct bt_conn *conn) { int err; printk("Confirm passkey by pressing button at %s pin %d...\n", button.port->name, button.pin); await_signal(&button_pressed_signal); err = bt_conn_auth_passkey_confirm(conn); if (err) { LOG_DBG("Failed to confirm passkey."); return -1; } printk("Passkey confirmed.\n"); return 0; } static int setup_btn(void) { int ret; k_poll_signal_init(&button_pressed_signal); if (!gpio_is_ready_dt(&button)) { LOG_ERR("Error: button device %s is not ready", button.port->name); return -1; } ret = gpio_pin_configure_dt(&button, GPIO_INPUT); if (ret != 0) { LOG_ERR("Error %d: failed to configure %s pin %d", ret, button.port->name, button.pin); return -1; } ret = gpio_pin_interrupt_configure_dt(&button, GPIO_INT_EDGE_TO_ACTIVE); if (ret != 0) { LOG_ERR("Error %d: failed to configure interrupt on %s pin %d", ret, button.port->name, button.pin); return -1; } gpio_init_callback(&button_cb_data, button_pressed, BIT(button.pin)); gpio_add_callback(button.port, &button_cb_data); LOG_DBG("Set up button at %s pin %d", button.port->name, button.pin); return 0; } int main(void) { int err; err = setup_btn(); if (err) { return 0; } LOG_DBG("Starting peripheral sample..."); (void)run_peripheral_sample(get_passkey_confirmation); return 0; }