1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/drivers/apds99xx/include/apds99xx_regs.h
2020-03-11 14:21:47 +01:00

139 lines
6.2 KiB
C

/*
* Copyright (C) 2018 Gunar Schorcht
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @ingroup drivers_apds99xx
* @brief Register definitions for Broadcom APDS99XX proximity and ambient light sensor
* @author Gunar Schorcht <gunar@schorcht.net>
* @file
* @{
*/
#ifndef APDS99XX_REGS_H
#define APDS99XX_REGS_H
#ifdef __cplusplus
extern "C"
{
#endif
/**
* @name Register addresses
* @{
*/
#if MODULE_APDS9960
#define APDS99XX_REG_BASE (0x80) /**< Register base address is 0x80 */
#else
#define APDS99XX_REG_BASE (0xa0) /**< Register base address for autoincrement is 0xa0 */
#endif
#define APDS99XX_REG_ENABLE (APDS99XX_REG_BASE + 0x00) /**< Enable states and interrupts */
#define APDS99XX_REG_ATIME (APDS99XX_REG_BASE + 0x01) /**< ALS timing register */
#if MODULE_APDS9900 || MODULE_APDS9901 || MODULE_APDS9930
#define APDS99XX_REG_PTIME (APDS99XX_REG_BASE + 0x02) /**< Proximity timing register */
#endif
#define APDS99XX_REG_WTIME (APDS99XX_REG_BASE + 0x03) /**< Wait timing register */
#define APDS99XX_REG_AILTL (APDS99XX_REG_BASE + 0x04) /**< ALS interrupt low threshold low byte */
#define APDS99XX_REG_AILTH (APDS99XX_REG_BASE + 0x05) /**< ALS interrupt low threshold high byte */
#define APDS99XX_REG_AIHTL (APDS99XX_REG_BASE + 0x06) /**< ALS interrupt high threshold low byte */
#define APDS99XX_REG_AIHTH (APDS99XX_REG_BASE + 0x07) /**< ALS interrupt high threshold high byte */
#if !MODULE_APDS9960
#define APDS99XX_REG_PILTL (APDS99XX_REG_BASE + 0x08) /**< PRX interrupt low threshold low byte */
#endif
#define APDS99XX_REG_PILTH (APDS99XX_REG_BASE + 0x09) /**< PRX interrupt low threshold high byte */
#if !MODULE_APDS9960
#define APDS99XX_REG_PIHTL (APDS99XX_REG_BASE + 0x0a) /**< PRX interrupt high threshold low byte */
#endif
#define APDS99XX_REG_PIHTH (APDS99XX_REG_BASE + 0x0b) /**< PRX interrupt high threshold high byte */
#define APDS99XX_REG_PERS (APDS99XX_REG_BASE + 0x0c) /**< Interrupt persistence filters */
#define APDS99XX_REG_CONFIG (APDS99XX_REG_BASE + 0x0d) /**< Configuration register (one) */
#define APDS99XX_REG_PPCOUNT (APDS99XX_REG_BASE + 0x0e) /**< Proximity pulse count */
#define APDS99XX_REG_CONTROL (APDS99XX_REG_BASE + 0x0f) /**< Control */
#define APDS99XX_REG_ID (APDS99XX_REG_BASE + 0x12) /**< Device ID */
#define APDS99XX_REG_STATUS (APDS99XX_REG_BASE + 0x13) /**< Device status */
#define APDS99XX_REG_CDATAL (APDS99XX_REG_BASE + 0x14) /**< Clear channel / Ch0 ADC data low byte */
#define APDS99XX_REG_CDATAH (APDS99XX_REG_BASE + 0x15) /**< Clear channel / Ch0 ADC data high byte */
#if MODULE_APDS9900 || MODULE_APDS9901 || MODULE_APDS9930
#define APDS99XX_REG_IRDATAL (APDS99XX_REG_BASE + 0x16) /**< Ch1(IR) ADC data low byte */
#define APDS99XX_REG_IRDATAH (APDS99XX_REG_BASE + 0x17) /**< Ch1(IR) ADC data high byte */
#define APDS99XX_REG_PDATAL (APDS99XX_REG_BASE + 0x18) /**< Proximity ADC data low byte */
#define APDS99XX_REG_PDATAH (APDS99XX_REG_BASE + 0x19) /**< Proximity ADC data high byte */
#endif
#if MODULE_APDS9950 || MODULE_APDS9960
#define APDS99XX_REG_RDATAL (APDS99XX_REG_BASE + 0x16) /**< Red channel data low byte */
#define APDS99XX_REG_RDATAH (APDS99XX_REG_BASE + 0x17) /**< Red channel data high byte */
#define APDS99XX_REG_GDATAL (APDS99XX_REG_BASE + 0x18) /**< Green channel data low byte */
#define APDS99XX_REG_GDATAH (APDS99XX_REG_BASE + 0x19) /**< Green channel data high byte */
#define APDS99XX_REG_BDATAL (APDS99XX_REG_BASE + 0x1a) /**< Blue channel data low byte */
#define APDS99XX_REG_BDATAH (APDS99XX_REG_BASE + 0x1b) /**< Blue channel data high byte */
#endif
#if MODULE_APDS9950
#define APDS99XX_REG_PDATAL (APDS99XX_REG_BASE + 0x1c) /**< Proximity ADC data low byte */
#define APDS99XX_REG_PDATAH (APDS99XX_REG_BASE + 0x1d) /**< Proximity ADC data high byte */
#endif
#if MODULE_APDS9960
#define APDS99XX_REG_PDATA (APDS99XX_REG_BASE + 0x1c) /**< Proximity ADC data (only one byte) */
#endif
#define APDS99XX_REG_CLI_CMD (0xe7) /**< Clear ALS and proximity interrupt command */
/** @} */
/**
* @name Register structure definitions
* @{
*/
/* Enable states and interrupts register (APDS99XX_REG_ENABLE) */
#define APDS99XX_REG_GEN (0x40) /**< Gesture Enable */
#define APDS99XX_REG_PIEN (0x20) /**< Proximity Interrupt Enable */
#define APDS99XX_REG_AIEN (0x10) /**< ALS Interrupt Enable */
#define APDS99XX_REG_WEN (0x08) /**< Wait Enable */
#define APDS99XX_REG_PEN (0x04) /**< Proximity Detect Enable */
#define APDS99XX_REG_AEN (0x02) /**< ALS Enable */
#define APDS99XX_REG_PON (0x01) /**< Power ON */
/* Device status register (APDS99XX_REG_STATUS) */
#define APDS99XX_REG_CPSAT (0x80) /**< Clear Photodiode Saturation */
#define APDS99XX_REG_PGSAT (0x40) /**< Analog saturation event occurred */
#define APDS99XX_REG_PINT (0x20) /**< Proximity Interrupt */
#define APDS99XX_REG_AINT (0x10) /**< ALS Interrupt */
#define APDS99XX_REG_GINT (0x04) /**< Gesture Interrupt */
#define APDS99XX_REG_PVALID (0x02) /**< Proximity Valid */
#define APDS99XX_REG_AVALID (0x01) /**< ALS Valid */
/** Control register (APDS99XX_REG_CONTROL) */
#define APDS99XX_REG_PDRIVE (0xc0) /**< LED Drive Strength */
#if !MODULE_APDS9960
#define APDS99XX_REG_PDIODE (0x30) /**< Proximity Diode Select */
#endif
#define APDS99XX_REG_PGAIN (0x0c) /**< Proximity Gain Control */
#define APDS99XX_REG_AGAIN (0x03) /**< ALS (and Color) Gain Control */
/** Configuration register (APDS99XX_REG_CONFIG) */
#define APDS99XX_REG_WLONG (0x02) /**< Wait Long */
/** Interrupt persistence filter register (APDS99XX_REG_PERS) */
#define APDS99XX_REG_PPERS (0xf0) /**< Proximity Interrupt persistence. */
#define APDS99XX_REG_APERS (0x0f) /**< ALS Interrupt persistence. */
#if MODULE_APDS9960
/** Proximity pulse count register (APDS99XX_REG_PPCOUNT) for APDS9960 only */
#define APDS99XX_REG_PPLEN (0xc0) /**< Proximity Pulse Length */
#define APDS99XX_REG_PPULSE (0x3f) /**< Proximity Pulse Count */
#endif
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* APDS99XX_REGS_H */
/** @} */