From e40fae408c0204ea76add9ed2a8edf8e80e67800 Mon Sep 17 00:00:00 2001 From: Alan Carvalho de Assis Date: Thu, 24 Aug 2023 18:38:19 -0300 Subject: [PATCH] stm32f7/common: Add light sensor BH1750 --- .../arm/stm32f7/common/include/stm32_bh1750.h | 80 +++++++++++++++++ boards/arm/stm32f7/common/src/CMakeLists.txt | 4 + boards/arm/stm32f7/common/src/Make.defs | 4 + boards/arm/stm32f7/common/src/stm32_bh1750.c | 87 +++++++++++++++++++ 4 files changed, 175 insertions(+) create mode 100644 boards/arm/stm32f7/common/include/stm32_bh1750.h create mode 100644 boards/arm/stm32f7/common/src/stm32_bh1750.c diff --git a/boards/arm/stm32f7/common/include/stm32_bh1750.h b/boards/arm/stm32f7/common/include/stm32_bh1750.h new file mode 100644 index 0000000000..08902de8b8 --- /dev/null +++ b/boards/arm/stm32f7/common/include/stm32_bh1750.h @@ -0,0 +1,80 @@ +/**************************************************************************** + * boards/arm/stm32f7/common/include/stm32_bh1750.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 __BOARDS_ARM_STM32F7_COMMON_INCLUDE_STM32_BH1750_H +#define __BOARDS_ARM_STM32F7_COMMON_INCLUDE_STM32_BH1750_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +/**************************************************************************** + * 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_bh1750_initialize + * + * Description: + * Initialize and register the BH1750FVI Ambient Light driver. + * + * Input Parameters: + * devno - The device number, used to build the device path as /dev/lightN + * busno - The I2C bus number + * + * Returned Value: + * Zero (OK) on success; a negated errno value on failure. + * + ****************************************************************************/ + +int board_bh1750_initialize(int devno, int busno); + +#undef EXTERN +#ifdef __cplusplus +} +#endif + +#endif /* __BOARDS_ARM_STM32F7_COMMON_INCLUDE_STM32_BH1750_H */ diff --git a/boards/arm/stm32f7/common/src/CMakeLists.txt b/boards/arm/stm32f7/common/src/CMakeLists.txt index 4022020395..83950411c3 100644 --- a/boards/arm/stm32f7/common/src/CMakeLists.txt +++ b/boards/arm/stm32f7/common/src/CMakeLists.txt @@ -20,4 +20,8 @@ set(SRCS) +if(CONFIG_SENSORS_BH1750FVI) + list(APPEND SRCS stm32_bh1750.c) +endif() + target_sources(board PRIVATE ${SRCS}) diff --git a/boards/arm/stm32f7/common/src/Make.defs b/boards/arm/stm32f7/common/src/Make.defs index 97e58060c3..e041bb9625 100644 --- a/boards/arm/stm32f7/common/src/Make.defs +++ b/boards/arm/stm32f7/common/src/Make.defs @@ -20,6 +20,10 @@ ifeq ($(CONFIG_ARCH_BOARD_COMMON),y) +ifeq ($(CONFIG_SENSORS_BH1750FVI),y) + CSRCS += stm32_bh1750.c +endif + DEPPATH += --dep-path src VPATH += :src CFLAGS += ${INCDIR_PREFIX}$(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)src diff --git a/boards/arm/stm32f7/common/src/stm32_bh1750.c b/boards/arm/stm32f7/common/src/stm32_bh1750.c new file mode 100644 index 0000000000..bf101e3f72 --- /dev/null +++ b/boards/arm/stm32f7/common/src/stm32_bh1750.c @@ -0,0 +1,87 @@ +/**************************************************************************** + * boards/arm/stm32f7/common/src/stm32_bh1750.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 + +#include +#include +#include + +#include +#include +#include + +#include "stm32_i2c.h" + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: stm32_bh1750initialize + * + * Description: + * Initialize and register the BH1750FVI Ambient Light driver. + * + * Input Parameters: + * devno - The device number, used to build the device path as /dev/lightN + * busno - The I2C bus number + * + * Returned Value: + * Zero (OK) on success; a negated errno value on failure. + * + ****************************************************************************/ + +int board_bh1750_initialize(int devno, int busno) +{ + struct i2c_master_s *i2c; + char devpath[16]; + int ret; + + sninfo("Initializing BH1750FVI!\n"); + + /* Initialize I2C */ + + i2c = stm32_i2cbus_initialize(busno); + if (!i2c) + { + return -ENODEV; + } + + /* Then register the ambient light sensor */ + + snprintf(devpath, sizeof(devpath), "/dev/light%d", devno); + ret = bh1750fvi_register(devpath, i2c, BH1750FVI_I2C_ADDR); + if (ret < 0) + { + snerr("ERROR: Error registering BH1750FVI\n"); + } + + return ret; +} +