diff --git a/configs/nrf52-pca10040/include/board.h b/configs/nrf52-pca10040/include/board.h index e82fdfc078..b5e8583789 100644 --- a/configs/nrf52-pca10040/include/board.h +++ b/configs/nrf52-pca10040/include/board.h @@ -98,7 +98,19 @@ */ /* Button definitions *******************************************************/ -/* To be provided */ +/* Board supports four buttons. */ + +#define BUTTON_BTN1 0 +#define BUTTON_BTN2 1 +#define BUTTON_BTN3 2 +#define BUTTON_BTN4 3 + +#define NUM_BUTTONS 4 + +#define BUTTON_BTN1_BIT (1 << BUTTON_BTN1) +#define BUTTON_BTN2_BIT (1 << BUTTON_BTN2) +#define BUTTON_BTN3_BIT (1 << BUTTON_BTN3) +#define BUTTON_BTN4_BIT (1 << BUTTON_BTN4) /* UART Pins ****************************************************************/ /* diff --git a/configs/nrf52-pca10040/src/Makefile b/configs/nrf52-pca10040/src/Makefile index 16ac0283b3..0a75a08de3 100644 --- a/configs/nrf52-pca10040/src/Makefile +++ b/configs/nrf52-pca10040/src/Makefile @@ -48,4 +48,8 @@ else CSRCS += nrf52_userleds.c endif +ifeq ($(CONFIG_ARCH_BUTTONS),y) +CSRCS += nrf52_buttons.c +endif + include $(TOPDIR)/configs/Board.mk diff --git a/configs/nrf52-pca10040/src/nrf52-pca10040.h b/configs/nrf52-pca10040/src/nrf52-pca10040.h index 61fccc6915..3a37565311 100644 --- a/configs/nrf52-pca10040/src/nrf52-pca10040.h +++ b/configs/nrf52-pca10040/src/nrf52-pca10040.h @@ -73,7 +73,12 @@ #define GPIO_LED4 (GPIO_OUTPUT | GPIO_VALUE_ONE | GPIO_PIN20) /* Button definitions *******************************************************/ -/* to be provided */ +/* Board supports four buttons. */ + +#define GPIO_BUTTON1 (GPIO_INPUT | GPIO_PULLUP | GPIO_PIN13) +#define GPIO_BUTTON2 (GPIO_INPUT | GPIO_PULLUP | GPIO_PIN14) +#define GPIO_BUTTON3 (GPIO_INPUT | GPIO_PULLUP | GPIO_PIN15) +#define GPIO_BUTTON4 (GPIO_INPUT | GPIO_PULLUP | GPIO_PIN16) /**************************************************************************** * Public Types diff --git a/configs/nrf52-pca10040/src/nrf52_buttons.c b/configs/nrf52-pca10040/src/nrf52_buttons.c new file mode 100644 index 0000000000..fca3a45069 --- /dev/null +++ b/configs/nrf52-pca10040/src/nrf52_buttons.c @@ -0,0 +1,164 @@ +/**************************************************************************** + * configs/nrf52-pca10400/src/nrf52_buttons.c + * + * Copyright (C) 2018 Gregory Nutt. All rights reserved. + * Author: Janne Rosberg + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include + +#include +#include +#include + +#include "nrf52_gpio.h" + +#include "nrf52-pca10040.h" + +#ifdef CONFIG_ARCH_BUTTONS + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +/* Pin configuration for each PCA10400 button. This array is indexed by + * the BUTTON_* definitions in board.h + */ + +static const uint32_t g_buttons[NUM_BUTTONS] = +{ + GPIO_BUTTON1, + GPIO_BUTTON2, + GPIO_BUTTON3, + GPIO_BUTTON4 +}; + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: board_button_initialize + * + * Description: + * board_button_initialize() must be called to initialize button resources. + * After that, board_buttons() may be called to collect the current state + * of all buttons or board_button_irq() may be called to register button + * interrupt handlers. + * + ****************************************************************************/ + +void board_button_initialize(void) +{ + int i; + + /* Configure the GPIO pins as inputs. */ + + for (i = 0; i < NUM_BUTTONS; i++) + { + nrf52_gpio_config(g_buttons[i]); + } +} + +/**************************************************************************** + * Name: board_buttons + ****************************************************************************/ + +uint32_t board_buttons(void) +{ + uint32_t ret = 0; + + /* Check that state of each key */ + + if (!nrf52_gpio_read(g_buttons[BUTTON_BTN1])) + { + ret |= BUTTON_BTN1_BIT; + } + + if (!nrf52_gpio_read(g_buttons[BUTTON_BTN2])) + { + ret |= BUTTON_BTN2_BIT; + } + + if (!nrf52_gpio_read(g_buttons[BUTTON_BTN3])) + { + ret |= BUTTON_BTN3_BIT; + } + + if (!nrf52_gpio_read(g_buttons[BUTTON_BTN4])) + { + ret |= BUTTON_BTN4_BIT; + } + + return ret; +} + +/**************************************************************************** + * Button support. + * + * Description: + * board_button_initialize() must be called to initialize button resources. + * After that, board_buttons() may be called to collect the current state + * of all buttons or board_button_irq() may be called to register button + * interrupt handlers. + * + * After board_button_initialize() has been called, board_buttons() may be + * called to collect the state of all buttons. board_buttons() returns an + * 32-bit bit set with each bit associated with a button. See the + * BUTTON_*_BIT definitions in board.h for the meaning of each bit. + * + * board_button_irq() may be called to register an interrupt handler that + * will be called when a button is depressed or released. The ID value is + * a button enumeration value that uniquely identifies a button resource. + * See the BUTTON_* definitions in board.h for the meaning of enumeration + * value. + * + ****************************************************************************/ + +#ifdef CONFIG_ARCH_IRQBUTTONS +int board_button_irq(int id, xcpt_t irqhandler, FAR void *arg) +{ + int ret = -ENOSYS; + +#warning Missing Implementation! + + return ret; +} +#endif + +#endif /* CONFIG_ARCH_BUTTONS */