/**
******************************************************************************
* @file veml6030.h
* @author MCD Application Team
* @brief VEML6030 header driver file
******************************************************************************
* @attention
*
*
© Copyright (c) 2021 STMicroelectronics.
* All rights reserved.
*
* This software component is licensed by ST under BSD 3-Clause license,
* the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef VEML6030_H
#define VEML6030_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "veml6030_reg.h"
#include
/** @addtogroup BSP
* @{
*/
/** @addtogroup Components
* @{
*/
/** @addtogroup VEML6030
* @{
*/
/** @defgroup VEML6030_Exported_Types
* @{
*/
typedef int32_t (*VEML6030_Init_Func)(void);
typedef int32_t (*VEML6030_DeInit_Func)(void);
typedef int32_t (*VEML6030_GetTick_Func)(void);
typedef int32_t (*VEML6030_Delay_Func)(uint32_t);
typedef int32_t (*VEML6030_WriteReg_Func)(uint16_t, uint16_t, uint8_t*, uint16_t);
typedef int32_t (*VEML6030_ReadReg_Func)(uint16_t, uint16_t, uint8_t*, uint16_t);
typedef int32_t (*VEML6030_IsReady_Func)(uint16_t, uint32_t);
typedef struct
{
VEML6030_Init_Func Init;
VEML6030_DeInit_Func DeInit;
uint16_t ReadAddress;
uint16_t WriteAddress;
VEML6030_IsReady_Func IsReady;
VEML6030_WriteReg_Func WriteReg;
VEML6030_ReadReg_Func ReadReg;
VEML6030_GetTick_Func GetTick;
} VEML6030_IO_t;
typedef struct
{
VEML6030_IO_t IO;
veml6030_ctx_t Ctx;
uint8_t IsInitialized;
uint8_t IsContinuous;
uint8_t IsStarted;
} VEML6030_Object_t;
typedef struct
{
uint8_t NumberOfChannels; /*!< Max: LIGHT_SENSOR_MAX_CHANNELS */
uint8_t FlickerDetection; /*!< Not available: 0, Available: 1 */
uint8_t Autogain; /*!< Not available: 0, Available: 1 */
} VEML6030_Capabilities_t;
typedef struct
{
int32_t (*Init)(VEML6030_Object_t *);
int32_t (*DeInit)(VEML6030_Object_t *);
int32_t (*ReadID)(VEML6030_Object_t *, uint32_t *);
int32_t (*GetCapabilities)(VEML6030_Object_t *, VEML6030_Capabilities_t *);
int32_t (*SetExposureTime)(VEML6030_Object_t *, uint32_t);
int32_t (*GetExposureTime)(VEML6030_Object_t *, uint32_t *);
int32_t (*SetGain)(VEML6030_Object_t *, uint8_t, uint32_t);
int32_t (*GetGain)(VEML6030_Object_t *, uint8_t, uint32_t *);
int32_t (*SetInterMeasurementTime)(VEML6030_Object_t *, uint32_t);
int32_t (*GetInterMeasurementTime)(VEML6030_Object_t *, uint32_t *);
int32_t (*Start)(VEML6030_Object_t *, uint32_t);
int32_t (*Stop)(VEML6030_Object_t *);
int32_t (*StartFlicker)(VEML6030_Object_t *, uint8_t, uint8_t);
int32_t (*StopFlicker)(VEML6030_Object_t *);
int32_t (*GetValues)(VEML6030_Object_t *, uint32_t *);
int32_t (*SetControlMode)(VEML6030_Object_t *, uint32_t, uint32_t);
}VEML6030_Drv_t;
/**
* @}
*/
/** @defgroup VEML6030_Exported_Constants
* @{
*/
/* VEML6030 error codes */
#define VEML6030_OK (0)
#define VEML6030_ERROR (-1)
#define VEML6030_INVALID_PARAM (-2)
/* softowre ID */
#define VEML6030_ID (0x6030U)
/**
* @brief VEML6030 Features Parameters
*/
/* VEML6030 Channel */
#define VEML6030_ALS_CHANNEL (0U)
#define VEML6030_WHITE_CHANNEL (1U)
#define VEML6030_MAX_CHANNELS (2U) /*!< Number of channels of the device */
/* VEML6030 capture modes */
#define VEML6030_MODE_CONTINUOUS (1U)
/* VEML6030 interrupt */
#define VEML6030_INT_TH_NONE 0U
#define VEML6030_INT_TH_LOW 1U
#define VEML6030_INT_TH_HIGH 2U
/* VEML6030 I2C ADDRESS */
#define VEML6030_I2C_READ_ADD 0x21
#define VEML6030_I2C_WRITE_ADD 0x20
/* VEML6030 Refresh Time (Intermesurment Time) definitions */
/* VEML6030’s refresh time can be determined by Power Saving Mode (PSM) and the Integration Time (ALS_IT) */
/* The tow first LSB bits of each refresh time first byte definition represent the integration time */
/* The tow first MSB bits of each refresh time first byte definition represent the Power saving Mode */
#define VEML6030_REFRESH_TIME_600 (0x00U)
#define VEML6030_REFRESH_TIME_700 (0x01U)
#define VEML6030_REFRESH_TIME_900 (0x02U)
#define VEML6030_REFRESH_TIME_1100 (0x04U)
#define VEML6030_REFRESH_TIME_1200 (0x05U)
#define VEML6030_REFRESH_TIME_1300 (0x03U)
#define VEML6030_REFRESH_TIME_1400 (0x06U)
#define VEML6030_REFRESH_TIME_1800 (0x07U)
#define VEML6030_REFRESH_TIME_2100 (0x08U)
#define VEML6030_REFRESH_TIME_2200 (0x09U)
#define VEML6030_REFRESH_TIME_2400 (0x0AU)
#define VEML6030_REFRESH_TIME_2800 (0x0BU)
#define VEML6030_REFRESH_TIME_4100 (0x0CU)
#define VEML6030_REFRESH_TIME_4200 (0x0DU)
#define VEML6030_REFRESH_TIME_4400 (0x0EU)
#define VEML6030_REFRESH_TIME_4800 (0x0FU)
/* driver structure */
extern VEML6030_Drv_t VEML6030_Driver;
/**
* @}
*/
/** @addtogroup VEML6030_Exported_Functions VEML6030 Exported Functions
* @{
*/
int32_t VEML6030_RegisterBusIO(VEML6030_Object_t *pObj, VEML6030_IO_t *pIO);
int32_t VEML6030_Init(VEML6030_Object_t *pObj);
int32_t VEML6030_DeInit(VEML6030_Object_t *pObj);
int32_t VEML6030_ReadID(VEML6030_Object_t *pObj, uint32_t *pId);
int32_t VEML6030_SetExposureTime(VEML6030_Object_t *pObj, uint32_t ExposureTime);
int32_t VEML6030_GetExposureTime(VEML6030_Object_t *pObj, uint32_t *pExposureTime);
int32_t VEML6030_GetCapabilities(VEML6030_Object_t *pObj, VEML6030_Capabilities_t *pCapabilities);
int32_t VEML6030_SetGain(VEML6030_Object_t *pObj, uint8_t Channel, uint32_t Gain);
int32_t VEML6030_GetGain(VEML6030_Object_t *pObj, uint8_t Channel, uint32_t *Gain);
int32_t VEML6030_SetInterMeasurementTime(VEML6030_Object_t *pObj, uint32_t InterMeasurementTime);
int32_t VEML6030_GetInterMeasurementTime(VEML6030_Object_t *pObj, uint32_t *InterMeasurementTime);
int32_t VEML6030_Start(VEML6030_Object_t *pObj, uint32_t);
int32_t VEML6030_Stop(VEML6030_Object_t *pObj);
int32_t VEML6030_GetValues(VEML6030_Object_t *, uint32_t *Values);
int32_t VEML6030_StartFlicker(VEML6030_Object_t *pObj, uint8_t Channel, uint8_t OutputMode);
int32_t VEML6030_StopFlicker(VEML6030_Object_t *pObj);
int32_t VEML6030_SetControlMode(VEML6030_Object_t *pObj, uint32_t ControlMode, uint32_t Value);
int32_t VEML6030_SetPowerSavingMode(VEML6030_Object_t *pObj, uint32_t PowerMode);
int32_t VEML6030_GetPowerSavingMode(VEML6030_Object_t *pObj, uint32_t *pPowerMode);
int32_t VEML6030_SetPersistence(VEML6030_Object_t *pObj, uint32_t Persistence);
int32_t VEML6030_GetPersistence(VEML6030_Object_t *pObj, uint32_t *Persistence);
int32_t VEML6030_GetWhiteValues(VEML6030_Object_t *pObj, uint32_t *Values);
/* interrupt Mangement Functions */
int32_t VEML6030_SetHighThreshold(VEML6030_Object_t *pObj , uint16_t Threshold);
int32_t VEML6030_GetHighThreshold(VEML6030_Object_t *pObj , uint32_t *Threshold);
int32_t VEML6030_SetLowThreshold(VEML6030_Object_t *pObj , uint16_t Threshold);
int32_t VEML6030_GetLowThreshold(VEML6030_Object_t *pObj , uint32_t *Threshold);
int32_t VEML6030_GetIntStatus(VEML6030_Object_t *pObj,uint32_t *status);
int32_t VEML6030_Disable_IT(VEML6030_Object_t *pObj);
int32_t VEML6030_Enable_IT(VEML6030_Object_t *pObj);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* VEML6030_H */
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/