/** @file * @brief Button Service sample */ /* * Copyright (c) 2019 Marcio Montenegro * * SPDX-License-Identifier: Apache-2.0 */ #include "button_svc.h" #include #include #include #include #include #include #include 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; }