blob: 72a5e18f7b698f811348d2b5ff204b8a5fa5d01f [file] [log] [blame]
/** @file
* @brief Button Service sample
*/
/*
* Copyright (c) 2019 Marcio Montenegro <mtuxpe@gmail.com>
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "button_svc.h"
#include <zephyr/kernel.h>
#include <zephyr/logging/log.h>
#include <zephyr/bluetooth/bluetooth.h>
#include <zephyr/bluetooth/hci.h>
#include <zephyr/bluetooth/conn.h>
#include <zephyr/bluetooth/uuid.h>
#include <zephyr/bluetooth/gatt.h>
LOG_MODULE_REGISTER(button_svc);
static const struct gpio_dt_spec button = GPIO_DT_SPEC_GET(DT_ALIAS(sw0), gpios);
static struct gpio_callback gpio_cb;
int button_init(gpio_callback_handler_t handler)
{
int ret;
if (!device_is_ready(button.port)) {
LOG_ERR("Error: button GPIO device %s is not ready",
button.port->name);
return -ENODEV;
}
ret = gpio_pin_configure_dt(&button, GPIO_INPUT);
if (ret != 0) {
LOG_ERR("Error %d: can't configure button on GPIO %s pin %d",
ret, button.port->name, button.pin);
return ret;
}
gpio_init_callback(&gpio_cb, handler, BIT(button.pin));
gpio_add_callback(button.port, &gpio_cb);
ret = gpio_pin_interrupt_configure_dt(&button, GPIO_INT_EDGE_TO_ACTIVE);
if (ret != 0) {
LOG_ERR("Error %d: can't configure button interrupt on "
"GPIO %s pin %d", ret, button.port->name, button.pin);
return ret;
}
return 0;
}