This is an automated email from the ASF dual-hosted git repository.
xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new c08987a03fa sensors/bh1745nuc: Add a uORB color sensor driver.
c08987a03fa is described below
commit c08987a03fa2b563c372133254241c061fc28fa9
Author: raiden00pl <[email protected]>
AuthorDate: Wed May 31 19:46:21 2023 +0200
sensors/bh1745nuc: Add a uORB color sensor driver.
Add a uORB RGB driver for the Rohm BH1745NUC, reporting the raw 16-bit
RGB counts on sensor_rgb<n>. The cxd56xx SCU driver stays as is and the
legacy prototypes are now exposed only for it.
Assisted-by: Claude:claude-fable-5-1
Signed-off-by: raiden00pl <[email protected]>
---
Documentation/os/drivers/special/sensors.rst | 1 +
.../os/drivers/special/sensors/bh1745nuc.rst | 24 +
.../os/drivers/special/sensors/sensors_uorb.rst | 1 +
drivers/sensors/CMakeLists.txt | 4 +
drivers/sensors/Kconfig | 16 +
drivers/sensors/Make.defs | 4 +
drivers/sensors/bh1745nuc_uorb.c | 519 +++++++++++++++++++++
include/nuttx/sensors/bh1745nuc.h | 34 +-
8 files changed, 599 insertions(+), 4 deletions(-)
diff --git a/Documentation/os/drivers/special/sensors.rst
b/Documentation/os/drivers/special/sensors.rst
index 3746eabe4a1..7202a0b8e0c 100644
--- a/Documentation/os/drivers/special/sensors.rst
+++ b/Documentation/os/drivers/special/sensors.rst
@@ -47,3 +47,4 @@ tool for monitoring sensor activity at runtime.
sensors/lis2mdl.rst
sensors/l86xxx.rst
sensors/gnss_lowerhalf.rst
+ sensors/bh1745nuc.rst
diff --git a/Documentation/os/drivers/special/sensors/bh1745nuc.rst
b/Documentation/os/drivers/special/sensors/bh1745nuc.rst
new file mode 100644
index 00000000000..9e945a293d0
--- /dev/null
+++ b/Documentation/os/drivers/special/sensors/bh1745nuc.rst
@@ -0,0 +1,24 @@
+=========
+BH1745NUC
+=========
+
+Rohm BH1745NUC color sensor on I2C,
+:doc:`uORB </os/drivers/special/sensors/sensors_uorb>` interface.
+
+Configuration
+=============
+
+- ``CONFIG_SENSORS_BH1745NUC``
+- ``CONFIG_BH1745NUC_I2C_FREQUENCY``
+
+Usage
+=====
+
+.. code-block:: c
+
+ #include <nuttx/sensors/bh1745nuc.h>
+
+ int bh1745nuc_register_uorb(int devno, FAR struct i2c_master_s *i2c,
+ uint8_t addr);
+
+Registers ``sensor_rgb<devno>`` with the raw 16-bit RGB counts.
diff --git a/Documentation/os/drivers/special/sensors/sensors_uorb.rst
b/Documentation/os/drivers/special/sensors/sensors_uorb.rst
index 2c544b675c4..aac5f02ba59 100644
--- a/Documentation/os/drivers/special/sensors/sensors_uorb.rst
+++ b/Documentation/os/drivers/special/sensors/sensors_uorb.rst
@@ -544,6 +544,7 @@ Implemented Drivers
- :doc:`adxl362`
- :doc:`adxl367`
- :doc:`adxl372`
+- :doc:`bh1745nuc`
- bh1749nuc
- bme680
- bmi088
diff --git a/drivers/sensors/CMakeLists.txt b/drivers/sensors/CMakeLists.txt
index 7feffa58860..98c60c073ce 100644
--- a/drivers/sensors/CMakeLists.txt
+++ b/drivers/sensors/CMakeLists.txt
@@ -189,6 +189,10 @@ if(CONFIG_SENSORS)
endif()
endif()
+ if(CONFIG_SENSORS_BH1745NUC)
+ list(APPEND SRCS bh1745nuc_uorb.c)
+ endif()
+
if(CONFIG_SENSORS_BH1750FVI)
list(APPEND SRCS bh1750fvi.c)
endif()
diff --git a/drivers/sensors/Kconfig b/drivers/sensors/Kconfig
index 24ac665427a..2214e296b93 100644
--- a/drivers/sensors/Kconfig
+++ b/drivers/sensors/Kconfig
@@ -243,6 +243,22 @@ endif # SENSORS_BH1749NUC_UORB
endif # SENSORS_BH1749NUC
+config SENSORS_BH1745NUC
+ bool "Rohm BH1745NUC Color Sensor support"
+ default n
+ select I2C
+ ---help---
+ Enable driver support for the Rohm BH1745NUC color sensor.
+
+if SENSORS_BH1745NUC
+
+config BH1745NUC_I2C_FREQUENCY
+ int "BH1745NUC I2C frequency"
+ default 400000
+ range 1 400000
+
+endif # SENSORS_BH1745NUC
+
config SENSORS_BH1750FVI
bool "Rohm BH1750FVI Ambient Light Sensor support"
default n
diff --git a/drivers/sensors/Make.defs b/drivers/sensors/Make.defs
index 4aa17cb0eb5..02cbdbdf6f6 100644
--- a/drivers/sensors/Make.defs
+++ b/drivers/sensors/Make.defs
@@ -197,6 +197,10 @@ else
endif
endif
+ifeq ($(CONFIG_SENSORS_BH1745NUC),y)
+ CSRCS += bh1745nuc_uorb.c
+endif
+
ifeq ($(CONFIG_SENSORS_BH1750FVI),y)
CSRCS += bh1750fvi.c
endif
diff --git a/drivers/sensors/bh1745nuc_uorb.c b/drivers/sensors/bh1745nuc_uorb.c
new file mode 100644
index 00000000000..4f8540184a4
--- /dev/null
+++ b/drivers/sensors/bh1745nuc_uorb.c
@@ -0,0 +1,519 @@
+/****************************************************************************
+ * drivers/sensors/bh1745nuc_uorb.c
+ *
+ * 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.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <nuttx/nuttx.h>
+#include <nuttx/kmalloc.h>
+#include <nuttx/mutex.h>
+#include <nuttx/random.h>
+#include <nuttx/signal.h>
+#include <nuttx/i2c/i2c_master.h>
+#include <nuttx/sensors/sensor.h>
+#include <nuttx/sensors/bh1745nuc.h>
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Registers */
+
+#define BH1745NUC_SYSTEM_CONTROL (0x40)
+#define BH1745NUC_MODE_CONTROL1 (0x41)
+#define BH1745NUC_MODE_CONTROL2 (0x42)
+#define BH1745NUC_MODE_CONTROL3 (0x44)
+#define BH1745NUC_RED_DATA_LSB (0x50)
+#define BH1745NUC_RED_DATA_MSB (0x51)
+#define BH1745NUC_GREEN_DATA_LSB (0x52)
+#define BH1745NUC_GREEN_DATA_MSB (0x53)
+#define BH1745NUC_BLUE_DATA_LSB (0x54)
+#define BH1745NUC_BLUE_DATA_MSB (0x55)
+#define BH1745NUC_CLEAR_DATA_LSB (0x56)
+#define BH1745NUC_CLEAR_DATA_MSB (0x57)
+#define BH1745NUC_DINT_DATA_LSB (0x58)
+#define BH1745NUC_DINT_DATA_MSB (0x59)
+#define BH1745NUC_INTERRUPT (0x60)
+#define BH1745NUC_PERSISTENCE (0x61)
+#define BH1745NUC_TH_LSB (0x62)
+#define BH1745NUC_TH_MSB (0x63)
+#define BH1745NUC_TL_LSB (0x64)
+#define BH1745NUC_TL_MSB (0x65)
+#define BH1745NUC_MANUFACTURER_ID (0x92)
+
+/* ID values */
+
+#define BH1745NUC_MANUFACTID (0xe0)
+#define BH1745NUC_PARTID (0x0b)
+
+/* SYSTEM_CONTROL bits */
+
+#define BH1745NUC_SYSTEM_CONTROL_PART_ID_MASK (0x3f)
+#define BH1745NUC_SYSTEM_CONTROL_INT_RESET (1 << 6)
+#define BH1745NUC_SYSTEM_CONTROL_SW_RESET (1 << 7)
+
+/* MODE_CONTROL1 bits */
+
+#define BH1745NUC_MODE_CONTROL1_MEAS_TIME160MS (0x00)
+#define BH1745NUC_MODE_CONTROL1_MEAS_TIME320MS (0x01)
+#define BH1745NUC_MODE_CONTROL1_MEAS_TIME640MS (0x02)
+#define BH1745NUC_MODE_CONTROL1_MEAS_TIME1280MS (0x03)
+#define BH1745NUC_MODE_CONTROL1_MEAS_TIME2560MS (0x04)
+#define BH1745NUC_MODE_CONTROL1_MEAS_TIME5120MS (0x05)
+
+/* MODE_CONTROL2 bits */
+
+#define BH1745NUC_MODE_CONTROL2_ADC_GAIN_X1 (0x00)
+#define BH1745NUC_MODE_CONTROL2_ADC_GAIN_X2 (0x01)
+#define BH1745NUC_MODE_CONTROL2_ADC_GAIN_X16 (0x02)
+#define BH1745NUC_MODE_CONTROL2_RGBC_EN (1 << 4)
+#define BH1745NUC_MODE_CONTROL2_VALID (1 << 7)
+
+/* MODE_CONTROL3 must always hold this value */
+
+#define BH1745NUC_MODE_CONTROL3_VAL (0x02)
+
+/* Measurement time used by this driver and the matching VALID poll */
+
+#define BH1745NUC_MEAS_TIME_US (160000)
+#define BH1745NUC_VALID_POLL_US (10000)
+#define BH1745NUC_VALID_RETRIES (2 * BH1745NUC_MEAS_TIME_US / \
+ BH1745NUC_VALID_POLL_US)
+
+/* Burst read of RED, GREEN, BLUE and CLEAR data */
+
+#define BH1745NUC_DATA_BYTES (8)
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+struct bh1745nuc_dev_s
+{
+ struct sensor_lowerhalf_s lower; /* Lower-half sensor driver */
+ FAR struct i2c_master_s *i2c; /* I2C interface */
+ mutex_t lock; /* Serialize device access */
+ uint8_t addr; /* I2C address */
+ bool enabled; /* Sensor activated */
+ unsigned long interval; /* Polling interval in us */
+};
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+static int bh1745nuc_read_reg(FAR struct bh1745nuc_dev_s *priv,
+ uint8_t regaddr, FAR uint8_t *regval);
+static int bh1745nuc_read_regs(FAR struct bh1745nuc_dev_s *priv,
+ uint8_t regaddr, FAR uint8_t *regvals,
+ int len);
+static int bh1745nuc_write_reg(FAR struct bh1745nuc_dev_s *priv,
+ uint8_t regaddr, uint8_t regval);
+static int bh1745nuc_checkid(FAR struct bh1745nuc_dev_s *priv);
+static int bh1745nuc_measure(FAR struct bh1745nuc_dev_s *priv,
+ FAR struct sensor_rgb *rgb);
+
+/* Sensor lower-half operations */
+
+static int bh1745nuc_activate(FAR struct sensor_lowerhalf_s *lower,
+ FAR struct file *filep, bool enable);
+static int bh1745nuc_set_interval(FAR struct sensor_lowerhalf_s *lower,
+ FAR struct file *filep,
+ FAR uint32_t *period_us);
+static int bh1745nuc_fetch(FAR struct sensor_lowerhalf_s *lower,
+ FAR struct file *filep, FAR char *buffer,
+ size_t buflen);
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static const struct sensor_ops_s g_bh1745nuc_ops =
+{
+ .activate = bh1745nuc_activate,
+ .set_interval = bh1745nuc_set_interval,
+ .fetch = bh1745nuc_fetch,
+};
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: bh1745nuc_read_reg
+ ****************************************************************************/
+
+static int bh1745nuc_read_reg(FAR struct bh1745nuc_dev_s *priv,
+ uint8_t regaddr, FAR uint8_t *regval)
+{
+ return bh1745nuc_read_regs(priv, regaddr, regval, 1);
+}
+
+/****************************************************************************
+ * Name: bh1745nuc_read_regs
+ *
+ * Description:
+ * Read a block of registers. The BH1745NUC auto-increments the register
+ * address on multi-byte reads.
+ *
+ ****************************************************************************/
+
+static int bh1745nuc_read_regs(FAR struct bh1745nuc_dev_s *priv,
+ uint8_t regaddr, FAR uint8_t *regvals,
+ int len)
+{
+ struct i2c_config_s config;
+
+ config.frequency = CONFIG_BH1745NUC_I2C_FREQUENCY;
+ config.address = priv->addr;
+ config.addrlen = 7;
+
+ return i2c_writeread(priv->i2c, &config, ®addr, 1, regvals, len);
+}
+
+/****************************************************************************
+ * Name: bh1745nuc_write_reg
+ ****************************************************************************/
+
+static int bh1745nuc_write_reg(FAR struct bh1745nuc_dev_s *priv,
+ uint8_t regaddr, uint8_t regval)
+{
+ struct i2c_config_s config;
+ uint8_t buf[2];
+
+ config.frequency = CONFIG_BH1745NUC_I2C_FREQUENCY;
+ config.address = priv->addr;
+ config.addrlen = 7;
+
+ buf[0] = regaddr;
+ buf[1] = regval;
+
+ return i2c_write(priv->i2c, &config, buf, 2);
+}
+
+/****************************************************************************
+ * Name: bh1745nuc_checkid
+ *
+ * Description:
+ * Read and verify the BH1745NUC manufacturer and part ID
+ *
+ ****************************************************************************/
+
+static int bh1745nuc_checkid(FAR struct bh1745nuc_dev_s *priv)
+{
+ uint8_t id = 0;
+ int ret;
+
+ ret = bh1745nuc_read_reg(priv, BH1745NUC_MANUFACTURER_ID, &id);
+ if (ret < 0)
+ {
+ return ret;
+ }
+
+ if (id != BH1745NUC_MANUFACTID)
+ {
+ snerr("ERROR: Wrong manufacturer ID: 0x%02x\n", id);
+ return -ENODEV;
+ }
+
+ ret = bh1745nuc_read_reg(priv, BH1745NUC_SYSTEM_CONTROL, &id);
+ if (ret < 0)
+ {
+ return ret;
+ }
+
+ if ((id & BH1745NUC_SYSTEM_CONTROL_PART_ID_MASK) != BH1745NUC_PARTID)
+ {
+ snerr("ERROR: Wrong part ID: 0x%02x\n", id);
+ return -ENODEV;
+ }
+
+ return OK;
+}
+
+/****************************************************************************
+ * Name: bh1745nuc_measure
+ *
+ * Description:
+ * Wait for a completed RGBC measurement and read the RGB channels.
+ * The channel values are the raw 16-bit ADC counts.
+ *
+ ****************************************************************************/
+
+static int bh1745nuc_measure(FAR struct bh1745nuc_dev_s *priv,
+ FAR struct sensor_rgb *rgb)
+{
+ uint8_t data[BH1745NUC_DATA_BYTES];
+ uint8_t regval;
+ uint16_t r;
+ uint16_t g;
+ uint16_t b;
+ int retries = BH1745NUC_VALID_RETRIES;
+ int ret;
+
+ /* Wait for new data. Reading MODE_CONTROL2 clears the VALID bit. */
+
+ do
+ {
+ ret = bh1745nuc_read_reg(priv, BH1745NUC_MODE_CONTROL2, ®val);
+ if (ret < 0)
+ {
+ return ret;
+ }
+
+ if (regval & BH1745NUC_MODE_CONTROL2_VALID)
+ {
+ break;
+ }
+
+ nxsig_usleep(BH1745NUC_VALID_POLL_US);
+ }
+ while (--retries);
+
+ if (retries == 0)
+ {
+ snerr("ERROR: BH1745NUC measurement timeout\n");
+ return -ETIMEDOUT;
+ }
+
+ /* Burst read RED, GREEN, BLUE and CLEAR data */
+
+ ret = bh1745nuc_read_regs(priv, BH1745NUC_RED_DATA_LSB, data,
+ BH1745NUC_DATA_BYTES);
+ if (ret < 0)
+ {
+ return ret;
+ }
+
+ r = (uint16_t)data[1] << 8 | data[0];
+ g = (uint16_t)data[3] << 8 | data[2];
+ b = (uint16_t)data[5] << 8 | data[4];
+
+ add_sensor_randomness(r ^ g ^ b);
+
+ rgb->timestamp = sensor_get_timestamp();
+ rgb->r = sensor_data_itof(r);
+ rgb->g = sensor_data_itof(g);
+ rgb->b = sensor_data_itof(b);
+
+ return OK;
+}
+
+/****************************************************************************
+ * Name: bh1745nuc_activate
+ ****************************************************************************/
+
+static int bh1745nuc_activate(FAR struct sensor_lowerhalf_s *lower,
+ FAR struct file *filep, bool enable)
+{
+ FAR struct bh1745nuc_dev_s *priv =
+ container_of(lower, FAR struct bh1745nuc_dev_s, lower);
+ int ret;
+
+ nxmutex_lock(&priv->lock);
+
+ if (enable)
+ {
+ /* 160ms measurement time */
+
+ ret = bh1745nuc_write_reg(priv, BH1745NUC_MODE_CONTROL1,
+ BH1745NUC_MODE_CONTROL1_MEAS_TIME160MS);
+ if (ret < 0)
+ {
+ goto errout;
+ }
+
+ /* Enable RGBC measurement with x16 gain */
+
+ ret = bh1745nuc_write_reg(priv, BH1745NUC_MODE_CONTROL2,
+ BH1745NUC_MODE_CONTROL2_RGBC_EN |
+ BH1745NUC_MODE_CONTROL2_ADC_GAIN_X16);
+ if (ret < 0)
+ {
+ goto errout;
+ }
+
+ /* MODE_CONTROL3 must be set to 0x02 */
+
+ ret = bh1745nuc_write_reg(priv, BH1745NUC_MODE_CONTROL3,
+ BH1745NUC_MODE_CONTROL3_VAL);
+ if (ret < 0)
+ {
+ goto errout;
+ }
+ }
+ else
+ {
+ /* Stop RGBC measurement */
+
+ ret = bh1745nuc_write_reg(priv, BH1745NUC_MODE_CONTROL2, 0);
+ if (ret < 0)
+ {
+ goto errout;
+ }
+ }
+
+ priv->enabled = enable;
+
+errout:
+ nxmutex_unlock(&priv->lock);
+ return ret;
+}
+
+/****************************************************************************
+ * Name: bh1745nuc_set_interval
+ ****************************************************************************/
+
+static int bh1745nuc_set_interval(FAR struct sensor_lowerhalf_s *lower,
+ FAR struct file *filep,
+ FAR uint32_t *period_us)
+{
+ FAR struct bh1745nuc_dev_s *priv =
+ container_of(lower, FAR struct bh1745nuc_dev_s, lower);
+
+ priv->interval = *period_us;
+ return OK;
+}
+
+/****************************************************************************
+ * Name: bh1745nuc_fetch
+ ****************************************************************************/
+
+static int bh1745nuc_fetch(FAR struct sensor_lowerhalf_s *lower,
+ FAR struct file *filep, FAR char *buffer,
+ size_t buflen)
+{
+ FAR struct bh1745nuc_dev_s *priv =
+ container_of(lower, FAR struct bh1745nuc_dev_s, lower);
+ struct sensor_rgb rgb;
+ int ret;
+
+ if (buflen != sizeof(rgb))
+ {
+ return -EINVAL;
+ }
+
+ nxmutex_lock(&priv->lock);
+
+ if (!priv->enabled)
+ {
+ ret = -EACCES;
+ goto errout;
+ }
+
+ ret = bh1745nuc_measure(priv, &rgb);
+ if (ret < 0)
+ {
+ goto errout;
+ }
+
+ memcpy(buffer, &rgb, sizeof(rgb));
+ ret = sizeof(rgb);
+
+errout:
+ nxmutex_unlock(&priv->lock);
+ return ret;
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: bh1745nuc_register_uorb
+ *
+ * Description:
+ * Register the BH1745NUC color sensor as a uORB device.
+ *
+ * Input Parameters:
+ * devno - The device number, used to build the device path.
+ * i2c - The I2C bus driver instance.
+ * addr - The I2C address of the BH1745NUC.
+ *
+ * Returned Value:
+ * Zero (OK) on success; a negated errno value on failure.
+ *
+ ****************************************************************************/
+
+int bh1745nuc_register_uorb(int devno, FAR struct i2c_master_s *i2c,
+ uint8_t addr)
+{
+ FAR struct bh1745nuc_dev_s *priv;
+ int ret;
+
+ DEBUGASSERT(i2c != NULL);
+
+ priv = kmm_zalloc(sizeof(struct bh1745nuc_dev_s));
+ if (priv == NULL)
+ {
+ snerr("ERROR: Failed to allocate BH1745NUC instance\n");
+ return -ENOMEM;
+ }
+
+ priv->i2c = i2c;
+ priv->addr = addr;
+ priv->interval = 1000000;
+ priv->lower.ops = &g_bh1745nuc_ops;
+ priv->lower.type = SENSOR_TYPE_RGB;
+ nxmutex_init(&priv->lock);
+
+ /* Probe the device */
+
+ ret = bh1745nuc_checkid(priv);
+ if (ret < 0)
+ {
+ snerr("ERROR: Failed to identify BH1745NUC: %d\n", ret);
+ goto errout;
+ }
+
+ /* Reset the device to a known state */
+
+ ret = bh1745nuc_write_reg(priv, BH1745NUC_SYSTEM_CONTROL,
+ BH1745NUC_SYSTEM_CONTROL_SW_RESET |
+ BH1745NUC_SYSTEM_CONTROL_INT_RESET);
+ if (ret < 0)
+ {
+ snerr("ERROR: Failed to reset BH1745NUC: %d\n", ret);
+ goto errout;
+ }
+
+ ret = sensor_register(&priv->lower, devno);
+ if (ret < 0)
+ {
+ snerr("ERROR: Failed to register BH1745NUC driver: %d\n", ret);
+ goto errout;
+ }
+
+ sninfo("BH1745NUC registered\n");
+ return OK;
+
+errout:
+ nxmutex_destroy(&priv->lock);
+ kmm_free(priv);
+ return ret;
+}
diff --git a/include/nuttx/sensors/bh1745nuc.h
b/include/nuttx/sensors/bh1745nuc.h
index 793e35665b7..bdee1152fbd 100644
--- a/include/nuttx/sensors/bh1745nuc.h
+++ b/include/nuttx/sensors/bh1745nuc.h
@@ -29,7 +29,8 @@
#include <nuttx/config.h>
-#if defined(CONFIG_I2C) && (defined(CONFIG_SENSORS_BH1745NUC) ||
defined(CONFIG_SENSORS_BH1745NUC_SCU))
+#if defined(CONFIG_I2C) && (defined(CONFIG_SENSORS_BH1745NUC) || \
+ defined(CONFIG_SENSORS_BH1745NUC_SCU))
/****************************************************************************
* Pre-processor Definitions
@@ -39,8 +40,10 @@
/* Prerequisites:
*
- * CONFIG_BH1745NUC
- * Enables support for the BH1745NUC driver
+ * CONFIG_SENSORS_BH1745NUC
+ * Enables support for the BH1745NUC uORB driver
+ * CONFIG_SENSORS_BH1745NUC_SCU
+ * Enables support for the BH1745NUC SCU character driver (cxd56xx)
*/
/****************************************************************************
@@ -58,6 +61,7 @@ extern "C"
{
#endif
+#ifdef CONFIG_SENSORS_BH1745NUC_SCU
/****************************************************************************
* Name: bh1745nuc_init
*
@@ -96,10 +100,32 @@ int bh1745nuc_init(FAR struct i2c_master_s *i2c, int port);
int bh1745nuc_register(FAR const char *devpath, int minor,
FAR struct i2c_master_s *i2c, int port);
+#endif /* CONFIG_SENSORS_BH1745NUC_SCU */
+
+#ifdef CONFIG_SENSORS_BH1745NUC
+/****************************************************************************
+ * Name: bh1745nuc_register_uorb
+ *
+ * Description:
+ * Register the BH1745NUC color sensor as a uORB device.
+ *
+ * Input Parameters:
+ * devno - The device number, used to build the device path.
+ * i2c - The I2C bus driver instance.
+ * addr - The I2C address of the BH1745NUC.
+ *
+ * Returned Value:
+ * Zero (OK) on success; a negated errno value on failure.
+ *
+ ****************************************************************************/
+
+int bh1745nuc_register_uorb(int devno, FAR struct i2c_master_s *i2c,
+ uint8_t addr);
+#endif /* CONFIG_SENSORS_BH1745NUC */
#ifdef __cplusplus
}
#endif
-#endif /* CONFIG_I2C && CONFIG_BH1745NUC */
+#endif /* CONFIG_I2C && (SENSORS_BH1745NUC || SENSORS_BH1745NUC_SCU) */
#endif /* __INCLUDE_NUTTX_SENSORS_BH1745NUC_H */