55 lines
1.3 KiB
C
55 lines
1.3 KiB
C
/** @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 (!gpio_is_ready_dt(&button)) {
|
|
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;
|
|
}
|