Osram SFH7770 light & proximity sensor driver.
This file contains functions for initializing and reading data from a Osram SFH7770 light & proximity sensor.
Copyright (c) 2014-2018 Microchip Technology Inc. and its subsidiaries.
#include <asf.h>
Macros | |
#define | SFH7770_DATA_RESOLUTION (16) |
#define | SFH7770_TWI_ADDR (0x38) |
#define | SFH7770_ALS_CONTROL (0x80) /* ambient light sensor control */ |
SFH7770 Register Addresses. More... | |
#define | SFH7770_PS_CONTROL (0x81) /* proximity sensor control */ |
#define | SFH7770_I_LED_1_2 (0x82) /* emitter current - LED1 & 2 */ |
#define | SFH7770_I_LED_3 (0x83) /* emitter control reg 2 */ |
#define | SFH7770_ALS_PS_TRIG (0x84) /* measurement start (trigger mode) */ |
#define | SFH7770_PS_INTERVAL (0x85) /* proximity measurement interval */ |
#define | SFH7770_ALS_INTERVAL (0x86) /* light measurement interval */ |
#define | SFH7770_PART_ID (0x8A) /* part id & revision */ |
#define | SFH7770_MAN_ID (0x8B) /* manufacturer id */ |
#define | SFH7770_ALS_DATA_LSB (0x8C) /* light meas data (low 8 bits) */ |
#define | SFH7770_ALS_DATA_MSB (0x8D) /* light meas data (high 8 bits) */ |
#define | SFH7770_ALS_PS_STATUS (0x8E) /* light/prox measurement status */ |
#define | SFH7770_PS_DATA_LED1 (0x8F) /* proximity meas data (LED1) */ |
#define | SFH7770_PS_DATA_LED2 (0x90) /* proximity meas data (LED2) */ |
#define | SFH7770_PS_DATA_LED3 (0x91) /* proximity meas data (LED3) */ |
#define | SFH7770_INT_SET (0x92) /* interrupt status/control */ |
#define | SFH7770_PS_THR_LED1 (0x93) /* proximity threshold (LED1) */ |
#define | SFH7770_PS_THR_LED2 (0x94) /* proximity threshold (LED2) */ |
#define | SFH7770_PS_THR_LED3 (0x95) /* proximity threshold (LED3) */ |
#define | SFH7770_ALS_UP_THR_LSB (0x96) /* upper light threshold (lsb) */ |
#define | SFH7770_ALS_UP_THR_MSB (0x97) /* upper light threshold (msb) */ |
#define | SFH7770_ALS_LO_THR_LSB (0x98) /* lower light threshold (lsb) */ |
#define | SFH7770_ALS_LO_THR_MSB (0x99) /* lower light threshold (msb) */ |
#define | ALS_MODE_MASK (0x03) /* light sensor mode mask */ |
SFH7770 Register Bit Definitions. More... | |
#define | ALS_MODE_STANDBY (0x00) /* standby mode (default) */ |
#define | ALS_MODE_TRIGGERED (0x02) /* triggered mode */ |
#define | ALS_MODE_FREE_RUNNING (0x03) /* free-running mode */ |
#define | ALS_CONTROL_SW_RESET (0x04) /* software reset */ |
#define | PS_MODE_MASK (0x03) /* proximity sensor mode mask */ |
#define | PS_MODE_STANDBY (0x00) /* standby mode (default) */ |
#define | PS_MODE_TRIGGERED (0x02) /* triggered mode */ |
#define | PS_MODE_FREE_RUNNING (0x03) /* free-running mode */ |
#define | I_LED_5MA (0x00) /* LED current = 5mA */ |
#define | I_LED_10MA (0x01) /* LED current = 10mA */ |
#define | I_LED_20MA (0x02) /* LED current = 20mA */ |
#define | I_LED_50MA (0x03) /* LED current = 50mA (default) */ |
#define | I_LED_100MA (0x04) /* LED current = 100mA */ |
#define | I_LED_150MA (0x05) /* LED current = 150mA */ |
#define | I_LED_200MA (0x06) /* LED current = 200mA */ |
#define | I_LED2_SHIFT (3) /* bit shift for LED2 field */ |
#define | I_LED1_MASK (0x07) /* LED1 pulse current mask */ |
#define | I_LED1_5MA (I_LED_5MA) |
#define | I_LED1_10MA (I_LED_10MA) |
#define | I_LED1_20MA (I_LED_20MA) |
#define | I_LED1_50MA (I_LED_50MA) |
#define | I_LED1_100MA (I_LED_100MA) |
#define | I_LED1_150MA (I_LED_150MA) |
#define | I_LED1_200MA (I_LED_200MA) |
#define | I_LED2_MASK (0x38) /* LED2 pulse current mask */ |
#define | I_LED2_5MA (I_LED_5MA << I_LED2_SHIFT) |
#define | I_LED2_10MA (I_LED_10MA << I_LED2_SHIFT) |
#define | I_LED2_20MA (I_LED_20MA << I_LED2_SHIFT) |
#define | I_LED2_50MA (I_LED_50MA << I_LED2_SHIFT) |
#define | I_LED2_100MA (I_LED_100MA << I_LED2_SHIFT) |
#define | I_LED2_150MA (I_LED_150MA << I_LED2_SHIFT) |
#define | I_LED2_200MA (I_LED_200MA << I_LED2_SHIFT) |
#define | LED_ACTIVE_MASK (0xC0) /* active LED mask */ |
#define | LED_ACTIVE_1 (0x00) /* LED1 active */ |
#define | LED_ACTIVE_1_2 (0x40) /* LED1 & LED2 active */ |
#define | LED_ACTIVE_1_3 (0x80) /* LED1 & LED3 active */ |
#define | LED_ACTIVE_ALL (0xC0) /* all LEDs active */ |
#define | I_LED3_MASK (0x07) /* LED3 pulse current mask */ |
#define | I_LED3_5MA (I_LED_5MA) |
#define | I_LED3_10MA (I_LED_10MA) |
#define | I_LED3_20MA (I_LED_20MA) |
#define | I_LED3_50MA (I_LED_50MA) |
#define | I_LED3_100MA (I_LED_100MA) |
#define | I_LED3_150MA (I_LED_150MA) |
#define | I_LED3_200MA (I_LED_200MA) |
#define | PS_INTERVAL_10MS (0x00) /* 10 msec */ |
#define | PS_INTERVAL_20MS (0x01) /* 20 msec */ |
#define | PS_INTERVAL_30MS (0x02) /* 30 msec */ |
#define | PS_INTERVAL_50MS (0x03) /* 50 msec */ |
#define | PS_INTERVAL_70MS (0x04) /* 70 msec */ |
#define | PS_INTERVAL_100MS (0x05) /* 100 msec (default) */ |
#define | PS_INTERVAL_200MS (0x06) /* 200 msec */ |
#define | PS_INTERVAL_500MS (0x07) /* 500 msec */ |
#define | PS_INTERVAL_1000MS (0x08) /* 1000 msec */ |
#define | PS_INTERVAL_2000MS (0x09) /* 2000 msec */ |
#define | ALS_INTERVAL_100MS (0x00) /* 100 msec */ |
#define | ALS_INTERVAL_200MS (0x01) /* 200 msec */ |
#define | ALS_INTERVAL_500MS (0x02) /* 500 msec (default) */ |
#define | ALS_INTERVAL_1000MS (0x03) /* 1000 msec */ |
#define | ALS_INTERVAL_2000MS (0x04) /* 2000 msec */ |
#define | PART_REV_MASK (0x0F) /* SFH7770 chip revision bit mask */ |
#define | PART_ID_MASK (0xF0) /* SFH7770 chip id bit mask */ |
#define | PART_ID_SHIFT |
#define | SFH7770_PART_ID_VAL (0x90) /* expected chip id field value */ |
#define | SFH7770_PART_REV_VAL |
#define | SFH7770_MAN_ID_VAL (0x03) /* expected manufacturer id value */ |
#define | PS_LED1_DATA (0x01) /* PS LED1 sensor data available */ |
#define | PS_LED1_THRESH |
#define | PS_LED2_DATA (0x04) /* PS LED2 sensor data available */ |
#define | PS_LED2_THRESH |
#define | PS_LED3_DATA (0x10) /* PS LED3 sensor data available */ |
#define | PS_LED3_THRESH |
#define | ALS_DATA (0x40) /* ALS sensor data available */ |
#define | ALS_THRESH (0x80) /* ALS sensor value above threshold */ |
#define | INT_MODE_MASK (0x03) /* interrupt mode enable (2 bits) */ |
#define | INT_MODE_PS (0x01) /* enable interrupt from prox sensor */ |
#define | INT_MODE_ALS (0x02) /* enable interrupt from ALS */ |
#define | INT_OUT_POL |
#define | INT_OUT_MODE |
#define | INT_SOURCE_MASK (0x60) /* interrupt source (2 bits) */ |
#define | INT_SOURCE_ALS (0x00) /* source = ALS */ |
#define | INT_SOURCE_LED1 (0x20) /* source = PS, LED 1 */ |
#define | INT_SOURCE_LED2 (0x40) /* source = PS, LED 2 */ |
#define | INT_SOURCE_LED3 (0x60) /* source = PS, LED 3 */ |
Functions | |
bool | sfh7770_init (sensor_t *, int) |
Osram SFH7770 light & proximity sensor driver initialization. More... | |
#define ALS_CONTROL_SW_RESET (0x04) /* software reset */ |
Referenced by sfh7770_init().
#define ALS_DATA (0x40) /* ALS sensor data available */ |
#define ALS_INTERVAL_1000MS (0x03) /* 1000 msec */ |
#define ALS_INTERVAL_100MS (0x00) /* 100 msec */ |
#define ALS_INTERVAL_2000MS (0x04) /* 2000 msec */ |
#define ALS_INTERVAL_200MS (0x01) /* 200 msec */ |
#define ALS_INTERVAL_500MS (0x02) /* 500 msec (default) */ |
Referenced by sfh7770_init().
#define ALS_MODE_FREE_RUNNING (0x03) /* free-running mode */ |
Referenced by sfh7770_init(), and sfh7770_set_state().
#define ALS_MODE_MASK (0x03) /* light sensor mode mask */ |
SFH7770 Register Bit Definitions.
#define ALS_MODE_STANDBY (0x00) /* standby mode (default) */ |
#define ALS_MODE_TRIGGERED (0x02) /* triggered mode */ |
#define ALS_THRESH (0x80) /* ALS sensor value above threshold */ |
#define I_LED1_100MA (I_LED_100MA) |
#define I_LED1_10MA (I_LED_10MA) |
#define I_LED1_150MA (I_LED_150MA) |
#define I_LED1_200MA (I_LED_200MA) |
#define I_LED1_20MA (I_LED_20MA) |
#define I_LED1_50MA (I_LED_50MA) |
#define I_LED1_5MA (I_LED_5MA) |
#define I_LED1_MASK (0x07) /* LED1 pulse current mask */ |
Referenced by sfh7770_set_current().
#define I_LED2_100MA (I_LED_100MA << I_LED2_SHIFT) |
#define I_LED2_10MA (I_LED_10MA << I_LED2_SHIFT) |
#define I_LED2_150MA (I_LED_150MA << I_LED2_SHIFT) |
#define I_LED2_200MA (I_LED_200MA << I_LED2_SHIFT) |
#define I_LED2_20MA (I_LED_20MA << I_LED2_SHIFT) |
#define I_LED2_50MA (I_LED_50MA << I_LED2_SHIFT) |
#define I_LED2_5MA (I_LED_5MA << I_LED2_SHIFT) |
#define I_LED2_MASK (0x38) /* LED2 pulse current mask */ |
Referenced by sfh7770_set_current().
#define I_LED2_SHIFT (3) /* bit shift for LED2 field */ |
Referenced by sfh7770_init(), and sfh7770_set_current().
#define I_LED3_100MA (I_LED_100MA) |
#define I_LED3_10MA (I_LED_10MA) |
#define I_LED3_150MA (I_LED_150MA) |
#define I_LED3_200MA (I_LED_200MA) |
#define I_LED3_20MA (I_LED_20MA) |
#define I_LED3_50MA (I_LED_50MA) |
#define I_LED3_5MA (I_LED_5MA) |
#define I_LED3_MASK (0x07) /* LED3 pulse current mask */ |
#define I_LED_100MA (0x04) /* LED current = 100mA */ |
#define I_LED_10MA (0x01) /* LED current = 10mA */ |
#define I_LED_150MA (0x05) /* LED current = 150mA */ |
#define I_LED_200MA (0x06) /* LED current = 200mA */ |
#define I_LED_20MA (0x02) /* LED current = 20mA */ |
#define I_LED_50MA (0x03) /* LED current = 50mA (default) */ |
Referenced by sfh7770_init().
#define I_LED_5MA (0x00) /* LED current = 5mA */ |
#define INT_MODE_ALS (0x02) /* enable interrupt from ALS */ |
Referenced by sfh7770_event().
#define INT_MODE_MASK (0x03) /* interrupt mode enable (2 bits) */ |
#define INT_MODE_PS (0x01) /* enable interrupt from prox sensor */ |
Referenced by sfh7770_event().
#define INT_OUT_MODE |
#define INT_OUT_POL |
#define INT_SOURCE_ALS (0x00) /* source = ALS */ |
Referenced by sfh7770_isr().
#define INT_SOURCE_LED1 (0x20) /* source = PS, LED 1 */ |
Referenced by sfh7770_isr().
#define INT_SOURCE_LED2 (0x40) /* source = PS, LED 2 */ |
Referenced by sfh7770_isr().
#define INT_SOURCE_LED3 (0x60) /* source = PS, LED 3 */ |
Referenced by sfh7770_isr().
#define INT_SOURCE_MASK (0x60) /* interrupt source (2 bits) */ |
Referenced by sfh7770_isr().
#define LED_ACTIVE_1 (0x00) /* LED1 active */ |
#define LED_ACTIVE_1_2 (0x40) /* LED1 & LED2 active */ |
#define LED_ACTIVE_1_3 (0x80) /* LED1 & LED3 active */ |
#define LED_ACTIVE_ALL (0xC0) /* all LEDs active */ |
Referenced by sfh7770_init().
#define LED_ACTIVE_MASK (0xC0) /* active LED mask */ |
#define PART_ID_MASK (0xF0) /* SFH7770 chip id bit mask */ |
#define PART_ID_SHIFT |
#define PART_REV_MASK (0x0F) /* SFH7770 chip revision bit mask */ |
#define PS_INTERVAL_1000MS (0x08) /* 1000 msec */ |
#define PS_INTERVAL_100MS (0x05) /* 100 msec (default) */ |
Referenced by sfh7770_init().
#define PS_INTERVAL_10MS (0x00) /* 10 msec */ |
#define PS_INTERVAL_2000MS (0x09) /* 2000 msec */ |
#define PS_INTERVAL_200MS (0x06) /* 200 msec */ |
#define PS_INTERVAL_20MS (0x01) /* 20 msec */ |
#define PS_INTERVAL_30MS (0x02) /* 30 msec */ |
#define PS_INTERVAL_500MS (0x07) /* 500 msec */ |
#define PS_INTERVAL_50MS (0x03) /* 50 msec */ |
#define PS_INTERVAL_70MS (0x04) /* 70 msec */ |
#define PS_LED1_DATA (0x01) /* PS LED1 sensor data available */ |
#define PS_LED1_THRESH |
Referenced by sfh7770_get_proximity(), and sfh7770_isr().
#define PS_LED2_DATA (0x04) /* PS LED2 sensor data available */ |
#define PS_LED2_THRESH |
Referenced by sfh7770_get_proximity(), and sfh7770_isr().
#define PS_LED3_DATA (0x10) /* PS LED3 sensor data available */ |
#define PS_LED3_THRESH |
Referenced by sfh7770_get_proximity(), and sfh7770_isr().
#define PS_MODE_FREE_RUNNING (0x03) /* free-running mode */ |
Referenced by sfh7770_init(), and sfh7770_set_state().
#define PS_MODE_MASK (0x03) /* proximity sensor mode mask */ |
#define PS_MODE_STANDBY (0x00) /* standby mode (default) */ |
Referenced by sfh7770_set_state().
#define PS_MODE_TRIGGERED (0x02) /* triggered mode */ |
#define SFH7770_ALS_CONTROL (0x80) /* ambient light sensor control */ |
SFH7770 Register Addresses.
Referenced by sfh7770_init(), and sfh7770_set_state().
#define SFH7770_ALS_DATA_LSB (0x8C) /* light meas data (low 8 bits) */ |
Referenced by sfh7770_get_light(), and sfh7770_init().
#define SFH7770_ALS_DATA_MSB (0x8D) /* light meas data (high 8 bits) */ |
#define SFH7770_ALS_INTERVAL (0x86) /* light measurement interval */ |
Referenced by sfh7770_init(), and sfh7770_set_rate().
#define SFH7770_ALS_LO_THR_LSB (0x98) /* lower light threshold (lsb) */ |
Referenced by sfh7770_set_threshold().
#define SFH7770_ALS_LO_THR_MSB (0x99) /* lower light threshold (msb) */ |
#define SFH7770_ALS_PS_STATUS (0x8E) /* light/prox measurement status */ |
Referenced by sfh7770_get_proximity().
#define SFH7770_ALS_PS_TRIG (0x84) /* measurement start (trigger mode) */ |
#define SFH7770_ALS_UP_THR_LSB (0x96) /* upper light threshold (lsb) */ |
Referenced by sfh7770_set_threshold().
#define SFH7770_ALS_UP_THR_MSB (0x97) /* upper light threshold (msb) */ |
#define SFH7770_DATA_RESOLUTION (16) |
Referenced by sfh7770_init().
#define SFH7770_I_LED_1_2 (0x82) /* emitter current - LED1 & 2 */ |
Referenced by sfh7770_init(), and sfh7770_set_current().
#define SFH7770_I_LED_3 (0x83) /* emitter control reg 2 */ |
Referenced by sfh7770_init(), and sfh7770_set_current().
#define SFH7770_INT_SET (0x92) /* interrupt status/control */ |
Referenced by sfh7770_event(), and sfh7770_init().
#define SFH7770_MAN_ID (0x8B) /* manufacturer id */ |
#define SFH7770_MAN_ID_VAL (0x03) /* expected manufacturer id value */ |
#define SFH7770_PART_ID (0x8A) /* part id & revision */ |
Referenced by sfh7770_device_id(), and sfh7770_init().
#define SFH7770_PART_ID_VAL (0x90) /* expected chip id field value */ |
Referenced by sfh7770_init().
#define SFH7770_PART_REV_VAL |
Referenced by sfh7770_init().
#define SFH7770_PS_CONTROL (0x81) /* proximity sensor control */ |
Referenced by sfh7770_init(), and sfh7770_set_state().
#define SFH7770_PS_DATA_LED1 (0x8F) /* proximity meas data (LED1) */ |
Referenced by sfh7770_calibrate().
#define SFH7770_PS_DATA_LED2 (0x90) /* proximity meas data (LED2) */ |
Referenced by sfh7770_calibrate().
#define SFH7770_PS_DATA_LED3 (0x91) /* proximity meas data (LED3) */ |
Referenced by sfh7770_calibrate().
#define SFH7770_PS_INTERVAL (0x85) /* proximity measurement interval */ |
Referenced by sfh7770_init(), and sfh7770_set_rate().
#define SFH7770_PS_THR_LED1 (0x93) /* proximity threshold (LED1) */ |
Referenced by sfh7770_calibrate(), sfh7770_get_threshold(), sfh7770_init(), and sfh7770_set_threshold().
#define SFH7770_PS_THR_LED2 (0x94) /* proximity threshold (LED2) */ |
#define SFH7770_PS_THR_LED3 (0x95) /* proximity threshold (LED3) */ |
#define SFH7770_TWI_ADDR (0x38) |
Osram SFH7770 light & proximity sensor driver initialization.
This is the main initialization function for the SFH7770 device.
sensor | Address of a sensor device descriptor. |
resvd | Reserved value. |
References ALS_CONTROL_SW_RESET, ALS_INTERVAL_500MS, ALS_MODE_FREE_RUNNING, sensor_hal::burst_addr, sensor_hal::bus, sensor_desc::drv, sensor_device_t::func, sensor_desc::hal, I_LED2_SHIFT, I_LED_50MA, LED_ACTIVE_ALL, sensor_hal::mcu_sigint, nvram_read(), PS_INTERVAL_100MS, PS_MODE_FREE_RUNNING, sensor_funcs_t::read, sensor_hal::resolution, sensor_bus_get, sensor_bus_put, sensor_bus_write, sensor_irq_connect(), SENSOR_SCALE_one, SENSOR_TYPE_LIGHT, SENSOR_TYPE_PROXIMITY, SENSOR_UNITS_lux, SENSOR_VENDOR_OSRAM, SFH7770_ALS_CONTROL, SFH7770_ALS_DATA_LSB, SFH7770_ALS_INTERVAL, sfh7770_calibrate(), SFH7770_DATA_RESOLUTION, sfh7770_event(), SFH7770_I_LED_1_2, SFH7770_I_LED_3, sfh7770_initialized, SFH7770_INT_SET, sfh7770_ioctl(), sfh7770_isr(), SFH7770_NVRAM_OFFSET, SFH7770_PART_ID, SFH7770_PART_ID_VAL, SFH7770_PART_REV_VAL, SFH7770_PS_CONTROL, SFH7770_PS_INTERVAL, SFH7770_PS_THR_LED1, sfh7770_read(), status, bus_desc_t::status, STATUS_OK, and sensor_desc::type.