blob: cc544a7c6a2c84c08b20d2d7fb4139a3d4fa248c [file] [log] [blame]
/* Bluetooth: Mesh Generic OnOff, Generic Level, Lighting & Vendor Models
*
* Copyright (c) 2018 Vikrant More
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/drivers/gpio.h>
#include "app_gpio.h"
#include "publisher.h"
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)
#ifdef ONE_LED_ONE_BUTTON_BOARD
#define NUM_LED_NUM_BUTTON 1
#else
#define NUM_LED_NUM_BUTTON 4
#endif
const struct gpio_dt_spec led_device[NUM_LED_NUM_BUTTON] = {
GPIO_DT_SPEC_GET(LED0_NODE, gpios),
#ifndef ONE_LED_ONE_BUTTON_BOARD
GPIO_DT_SPEC_GET(LED1_NODE, gpios),
GPIO_DT_SPEC_GET(LED2_NODE, gpios),
GPIO_DT_SPEC_GET(LED3_NODE, gpios),
#endif
};
const struct gpio_dt_spec button_device[NUM_LED_NUM_BUTTON] = {
GPIO_DT_SPEC_GET(SW0_NODE, gpios),
#ifndef ONE_LED_ONE_BUTTON_BOARD
GPIO_DT_SPEC_GET(SW1_NODE, gpios),
GPIO_DT_SPEC_GET(SW2_NODE, gpios),
GPIO_DT_SPEC_GET(SW3_NODE, gpios),
#endif
};
void app_gpio_init(void)
{
static struct gpio_callback button_cb[4];
int i;
/* LEDs configuration & setting */
for (i = 0; i < ARRAY_SIZE(led_device); i++) {
if (!device_is_ready(led_device[i].port)) {
return;
}
gpio_pin_configure_dt(&led_device[i], GPIO_OUTPUT_INACTIVE);
}
/* Buttons configuration & setting */
k_work_init(&button_work, publish);
for (i = 0; i < ARRAY_SIZE(button_device); i++) {
if (!device_is_ready(button_device[i].port)) {
return;
}
gpio_pin_configure_dt(&button_device[i], GPIO_INPUT);
gpio_pin_interrupt_configure_dt(&button_device[i],
GPIO_INT_EDGE_TO_ACTIVE);
gpio_init_callback(&button_cb[i], button_pressed,
BIT(button_device[i].pin));
gpio_add_callback(button_device[i].port, &button_cb[i]);
}
}