| /* Bluetooth: Mesh Generic OnOff, Generic Level, Lighting & Vendor Models |
| * |
| * Copyright (c) 2018 Vikrant More |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <drivers/gpio.h> |
| |
| #include "app_gpio.h" |
| #include "publisher.h" |
| |
| const struct device *led_device[4]; |
| const struct device *button_device[4]; |
| |
| K_WORK_DEFINE(button_work, publish); |
| |
| static void button_pressed(const struct device *dev, |
| struct gpio_callback *cb, uint32_t pins) |
| { |
| k_work_submit(&button_work); |
| } |
| |
| #define LED0_NODE DT_ALIAS(led0) |
| #define LED1_NODE DT_ALIAS(led1) |
| #define LED2_NODE DT_ALIAS(led2) |
| #define LED3_NODE DT_ALIAS(led3) |
| |
| #define SW0_NODE DT_ALIAS(sw0) |
| #define SW1_NODE DT_ALIAS(sw1) |
| #define SW2_NODE DT_ALIAS(sw2) |
| #define SW3_NODE DT_ALIAS(sw3) |
| |
| void app_gpio_init(void) |
| { |
| static struct gpio_callback button_cb[4]; |
| |
| /* LEDs configuration & setting */ |
| |
| led_device[0] = device_get_binding(DT_GPIO_LABEL(LED0_NODE, gpios)); |
| gpio_pin_configure(led_device[0], DT_GPIO_PIN(LED0_NODE, gpios), |
| DT_GPIO_FLAGS(LED0_NODE, gpios) | |
| GPIO_OUTPUT_INACTIVE); |
| |
| #ifndef ONE_LED_ONE_BUTTON_BOARD |
| led_device[1] = device_get_binding(DT_GPIO_LABEL(LED1_NODE, gpios)); |
| gpio_pin_configure(led_device[1], DT_GPIO_PIN(LED1_NODE, gpios), |
| DT_GPIO_FLAGS(LED1_NODE, gpios) | |
| GPIO_OUTPUT_INACTIVE); |
| |
| led_device[2] = device_get_binding(DT_GPIO_LABEL(LED2_NODE, gpios)); |
| gpio_pin_configure(led_device[2], DT_GPIO_PIN(LED2_NODE, gpios), |
| DT_GPIO_FLAGS(LED2_NODE, gpios) | |
| GPIO_OUTPUT_INACTIVE); |
| |
| led_device[3] = device_get_binding(DT_GPIO_LABEL(LED3_NODE, gpios)); |
| gpio_pin_configure(led_device[3], DT_GPIO_PIN(LED3_NODE, gpios), |
| DT_GPIO_FLAGS(LED3_NODE, gpios) | |
| GPIO_OUTPUT_INACTIVE); |
| #endif |
| /* Buttons configuration & setting */ |
| |
| k_work_init(&button_work, publish); |
| |
| button_device[0] = device_get_binding(DT_GPIO_LABEL(SW0_NODE, gpios)); |
| gpio_pin_configure(button_device[0], DT_GPIO_PIN(SW0_NODE, gpios), |
| GPIO_INPUT | GPIO_INT_DEBOUNCE | |
| DT_GPIO_FLAGS(SW0_NODE, gpios)); |
| gpio_pin_interrupt_configure(button_device[0], |
| DT_GPIO_PIN(SW0_NODE, gpios), |
| GPIO_INT_EDGE_TO_ACTIVE); |
| gpio_init_callback(&button_cb[0], button_pressed, |
| BIT(DT_GPIO_PIN(SW0_NODE, gpios))); |
| gpio_add_callback(button_device[0], &button_cb[0]); |
| |
| #ifndef ONE_LED_ONE_BUTTON_BOARD |
| button_device[1] = device_get_binding(DT_GPIO_LABEL(SW1_NODE, gpios)); |
| gpio_pin_configure(button_device[1], DT_GPIO_PIN(SW1_NODE, gpios), |
| GPIO_INPUT | GPIO_INT_DEBOUNCE | |
| DT_GPIO_FLAGS(SW1_NODE, gpios)); |
| gpio_pin_interrupt_configure(button_device[1], |
| DT_GPIO_PIN(SW1_NODE, gpios), |
| GPIO_INT_EDGE_TO_ACTIVE); |
| gpio_init_callback(&button_cb[1], button_pressed, |
| BIT(DT_GPIO_PIN(SW1_NODE, gpios))); |
| gpio_add_callback(button_device[1], &button_cb[1]); |
| |
| button_device[2] = device_get_binding(DT_GPIO_LABEL(SW2_NODE, gpios)); |
| gpio_pin_configure(button_device[2], DT_GPIO_PIN(SW2_NODE, gpios), |
| GPIO_INPUT | GPIO_INT_DEBOUNCE | |
| DT_GPIO_FLAGS(SW2_NODE, gpios)); |
| gpio_pin_interrupt_configure(button_device[2], |
| DT_GPIO_PIN(SW2_NODE, gpios), |
| GPIO_INT_EDGE_TO_ACTIVE); |
| gpio_init_callback(&button_cb[2], button_pressed, |
| BIT(DT_GPIO_PIN(SW2_NODE, gpios))); |
| gpio_add_callback(button_device[2], &button_cb[2]); |
| |
| button_device[3] = device_get_binding(DT_GPIO_LABEL(SW3_NODE, gpios)); |
| gpio_pin_configure(button_device[3], DT_GPIO_PIN(SW3_NODE, gpios), |
| GPIO_INPUT | GPIO_INT_DEBOUNCE | |
| DT_GPIO_FLAGS(SW3_NODE, gpios)); |
| gpio_pin_interrupt_configure(button_device[3], |
| DT_GPIO_PIN(SW3_NODE, gpios), |
| GPIO_INT_EDGE_TO_ACTIVE); |
| gpio_init_callback(&button_cb[3], button_pressed, |
| BIT(DT_GPIO_PIN(SW3_NODE, gpios))); |
| gpio_add_callback(button_device[3], &button_cb[3]); |
| #endif |
| } |