You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by je...@apache.org on 2020/05/14 06:33:14 UTC
[incubator-nuttx] 14/23: stm32: move APDS9960 initialization to
common board logic
This is an automated email from the ASF dual-hosted git repository.
jerpelea pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 562210a9bd834365b74935754af89d9724f43267
Author: Matias Nitsche <mn...@dc.uba.ar>
AuthorDate: Mon May 11 18:28:24 2020 -0300
stm32: move APDS9960 initialization to common board logic
---
boards/arm/stm32/common/include/stm32_apds9960.h | 80 ++++++++++++++++++++++
boards/arm/stm32/common/src/Make.defs | 4 ++
.../src/stm32_apds9960.c | 34 +++++----
boards/arm/stm32/stm32f103-minimum/include/board.h | 6 ++
boards/arm/stm32/stm32f103-minimum/src/Make.defs | 4 --
.../stm32/stm32f103-minimum/src/stm32_bringup.c | 6 +-
.../stm32f103-minimum/src/stm32f103_minimum.h | 16 -----
7 files changed, 111 insertions(+), 39 deletions(-)
diff --git a/boards/arm/stm32/common/include/stm32_apds9960.h b/boards/arm/stm32/common/include/stm32_apds9960.h
new file mode 100644
index 0000000..eed7cf5
--- /dev/null
+++ b/boards/arm/stm32/common/include/stm32_apds9960.h
@@ -0,0 +1,80 @@
+/****************************************************************************
+ * /home/v01d/coding/nuttx_latest/nuttx/boards/arm/stm32/common/include/stm32_apds9960.h
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+#ifndef __STM32_APDS9960_H
+#define __STM32_APDS9960_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#ifdef __cplusplus
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Inline Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_apds9960_initialize
+ *
+ * Description:
+ * Initialize and register the APDS9960 gesture sensor.
+ *
+ * Input Parameters:
+ * devno - The device number, used to build the device path as /dev/gestN
+ * busno - The I2C bus number
+ *
+ * Returned Value:
+ * Zero (OK) on success; a negated errno value on failure.
+ *
+ ****************************************************************************/
+
+int board_apds9960_initialize(int devno, int busno);
+
+#undef EXTERN
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __STM32_APDS9960_H
diff --git a/boards/arm/stm32/common/src/Make.defs b/boards/arm/stm32/common/src/Make.defs
index 53b9345..9a0ab30 100644
--- a/boards/arm/stm32/common/src/Make.defs
+++ b/boards/arm/stm32/common/src/Make.defs
@@ -58,6 +58,10 @@ ifeq ($(CONFIG_SENSORS_HCSR04),y)
CSRCS += stm32_hcsr04.c
endif
+ifeq ($(CONFIG_SENSORS_APDS9960),y)
+ CSRCS += stm32_apds9960.c
+endif
+
DEPPATH += --dep-path src
VPATH += :src
CFLAGS += $(shell $(INCDIR) $(INCDIROPT) "$(CC)" $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)src)
diff --git a/boards/arm/stm32/stm32f103-minimum/src/stm32_apds9960.c b/boards/arm/stm32/common/src/stm32_apds9960.c
similarity index 88%
rename from boards/arm/stm32/stm32f103-minimum/src/stm32_apds9960.c
rename to boards/arm/stm32/common/src/stm32_apds9960.c
index 2c225fa..efd31a7 100644
--- a/boards/arm/stm32/stm32f103-minimum/src/stm32_apds9960.c
+++ b/boards/arm/stm32/common/src/stm32_apds9960.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * boards/arm/stm32/stm32f103-minimum/src/stm32_apds9960.c
+ * boards/arm/stm32/common/src/stm32_apds9960.c
*
* Copyright (C) 2017 Alan Carvalho de Assis. All rights reserved.
* Author: Alan Carvalho de Assis <ac...@gmail.com>
@@ -41,22 +41,19 @@
#include <errno.h>
#include <debug.h>
+#include <stdio.h>
#include <nuttx/spi/spi.h>
#include <nuttx/sensors/apds9960.h>
+#include <arch/board/board.h>
#include "stm32.h"
#include "stm32_i2c.h"
-#include "stm32f103_minimum.h"
-
-#if defined(CONFIG_I2C) && defined(CONFIG_SENSORS_APDS9960)
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
-#define APDS9960_I2C_PORTNO 1 /* On I2C1 */
-
/****************************************************************************
* Public Functions
****************************************************************************/
@@ -77,8 +74,8 @@ struct stm32_apds9960config_s
* Private Function Prototypes
****************************************************************************/
-static int apds9960_irq_attach(FAR struct apds9960_config_s *state, xcpt_t isr,
- FAR void *arg);
+static int apds9960_irq_attach(FAR struct apds9960_config_s *state,
+ xcpt_t isr, FAR void *arg);
/****************************************************************************
* Private Data
@@ -108,8 +105,8 @@ static struct stm32_apds9960config_s g_apds9960config =
/* Attach the APDS-9960 interrupt handler to the GPIO interrupt */
-static int apds9960_irq_attach(FAR struct apds9960_config_s *state, xcpt_t isr,
- FAR void *arg)
+static int apds9960_irq_attach(FAR struct apds9960_config_s *state,
+ xcpt_t isr, FAR void *arg)
{
irqstate_t flags;
@@ -119,7 +116,7 @@ static int apds9960_irq_attach(FAR struct apds9960_config_s *state, xcpt_t isr,
/* Setup interrupt for Falling Edge */
- stm32_gpiosetevent(GPIO_APDS9960_INT, false, true, true, isr, arg);
+ stm32_gpiosetevent(BOARD_APDS9960_GPIO_INT, false, true, true, isr, arg);
leave_critical_section(flags);
@@ -131,33 +128,35 @@ static int apds9960_irq_attach(FAR struct apds9960_config_s *state, xcpt_t isr,
****************************************************************************/
/****************************************************************************
- * Name: stm32_apds9960initialize
+ * Name: board_apds9960_initialize
*
* Description:
* Initialize and register the APDS9960 gesture sensor.
*
* Input Parameters:
- * devpath - The full path to the driver to register. E.g., "/dev/gest0"
+ * devno - The device number, used to build the device path as /dev/gestN
+ * busno - The I2C bus number
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
****************************************************************************/
-int stm32_apds9960initialize(FAR const char *devpath)
+int board_apds9960_initialize(int devno, int busno)
{
FAR struct i2c_master_s *i2c;
+ char devpath[12];
int ret;
sninfo("Initializing APDS9960!\n");
/* Configure the GPIO interrupt */
- stm32_configgpio(GPIO_APDS9960_INT);
+ stm32_configgpio(BOARD_APDS9960_GPIO_INT);
/* Initialize I2C */
- i2c = stm32_i2cbus_initialize(APDS9960_I2C_PORTNO);
+ i2c = stm32_i2cbus_initialize(busno);
if (i2c == NULL)
{
return -ENODEV;
@@ -170,6 +169,7 @@ int stm32_apds9960initialize(FAR const char *devpath)
/* Then register the gesture sensor */
+ snprintf(devpath, 12, "/dev/gest%d", devno);
ret = apds9960_register(devpath, &g_apds9960config.config);
if (ret < 0)
{
@@ -178,5 +178,3 @@ int stm32_apds9960initialize(FAR const char *devpath)
return ret;
}
-
-#endif /* CONFIG_I2C && CONFIG_SENSORS_APDS9960 && CONFIG_STM32_I2C1 */
diff --git a/boards/arm/stm32/stm32f103-minimum/include/board.h b/boards/arm/stm32/stm32f103-minimum/include/board.h
index ced5bcf..3852016 100644
--- a/boards/arm/stm32/stm32f103-minimum/include/board.h
+++ b/boards/arm/stm32/stm32f103-minimum/include/board.h
@@ -230,4 +230,10 @@
#define BOARD_HCSR04_GPIO_TRIG GPIO_HCSR04_TRIG
#define BOARD_HCSR04_FRTIMER 1 /* TIM1 as free running timer */
+/* Pin for APDS-9960 sensor */
+
+#define GPIO_APDS9960_INT (GPIO_INPUT|GPIO_CNF_INFLOAT|GPIO_PORTA|GPIO_PIN0)
+
+#define BOARD_APDS9960_GPIO_INT GPIO_APDS9960_INT
+
#endif /* __BOARDS_ARM_STM32_STM32F103_MINIMUM_INCLUDE_BOARD_H */
diff --git a/boards/arm/stm32/stm32f103-minimum/src/Make.defs b/boards/arm/stm32/stm32f103-minimum/src/Make.defs
index 595056c..bc32755 100644
--- a/boards/arm/stm32/stm32f103-minimum/src/Make.defs
+++ b/boards/arm/stm32/stm32f103-minimum/src/Make.defs
@@ -119,10 +119,6 @@ ifeq ($(CONFIG_LCD_PCD8544),y)
CSRCS += stm32_pcd8544.c
endif
-ifeq ($(CONFIG_SENSORS_APDS9960),y)
- CSRCS += stm32_apds9960.c
-endif
-
ifeq ($(CONFIG_SENSORS_QENCODER),y)
CSRCS += stm32_qencoder.c
endif
diff --git a/boards/arm/stm32/stm32f103-minimum/src/stm32_bringup.c b/boards/arm/stm32/stm32f103-minimum/src/stm32_bringup.c
index fc6c0ac..1a7272a 100644
--- a/boards/arm/stm32/stm32f103-minimum/src/stm32_bringup.c
+++ b/boards/arm/stm32/stm32f103-minimum/src/stm32_bringup.c
@@ -121,6 +121,10 @@
#include "stm32_hcsr04.h"
#endif
+#ifdef CONFIG_SENSORS_APDS9960
+#include "stm32_apds9960.h"
+#endif
+
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
@@ -417,7 +421,7 @@ int stm32_bringup(void)
#ifdef CONFIG_SENSORS_APDS9960
/* Register the APDS-9960 gesture sensor */
- ret = stm32_apds9960initialize("/dev/gest0");
+ ret = board_apds9960_initialize(0, 1);
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: stm32_apds9960initialize() failed: %d\n", ret);
diff --git a/boards/arm/stm32/stm32f103-minimum/src/stm32f103_minimum.h b/boards/arm/stm32/stm32f103-minimum/src/stm32f103_minimum.h
index 0a28f83..ad0ed38 100644
--- a/boards/arm/stm32/stm32f103-minimum/src/stm32f103_minimum.h
+++ b/boards/arm/stm32/stm32f103-minimum/src/stm32f103_minimum.h
@@ -137,10 +137,6 @@
#define GPIO_ZEROCROSS (GPIO_INPUT|GPIO_CNF_INFLOAT|GPIO_PORTA|GPIO_PIN0)
-/* Pin for APDS-9960 sensor */
-
-#define GPIO_APDS9960_INT (GPIO_INPUT|GPIO_CNF_INFLOAT|GPIO_PORTA|GPIO_PIN0)
-
/* SPI chip selects */
#define FLASH_SPI1_CS (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|\
@@ -268,18 +264,6 @@ int stm32_adc_setup(void);
#endif
/****************************************************************************
- * Name: stm32_apds9960initialize
- *
- * Description:
- * Initialize APDS-9960 gesture sensor
- *
- ****************************************************************************/
-
-#ifdef CONFIG_SENSORS_APDS9960
-int stm32_apds9960initialize(FAR const char *devpath);
-#endif
-
-/****************************************************************************
* Name: stm32_spidev_initialize
*
* Description: