vlx lib
als_driver.h
- Committer:
- vijaynvr
- Date:
- 2015-02-08
- Revision:
- 0:bc9f26b5dadf
File content as of revision 0:bc9f26b5dadf:
/******************************************************************************* ################################################################################ # (C) STMicroelectronics 2014 # # This program is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License version 2 and only version 2 as # published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more # details. # # You should have received a copy of the GNU General Public License along with # this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # #------------------------------------------------------------------------------ # Imaging Division ################################################################################ ********************************************************************************/ /*! *\file als_driver.h *\brief Application-level methods used by VL6180X for ALS operations. */ #ifndef _ALS_DRIVER #define _ALS_DRIVER #include "definitions.h" #include "common_driver.h" //----------------------------------------------------------------------------- // constant definitions //---------------------------------------------------------------------------- // registers addresses #define IDENTIFICATION_MODEL_ID 0x00 #define IDENTIFICATION_FIRMWARE_REVISION_ID 0x0B #define IDENTIFICATION_MODULE_REV_MAJOR 0x03 #define IDENTIFICATION_MODULE_REV_MINOR 0x04 #define SYSALS_START 0x38 #define SYSALS_THRESH_HIGH 0x3A #define SYSALS_THRESH_LOW 0x3C #define SYSALS_INTERMEASUREMENT_PERIOD 0x3E #define SYSALS_ANALOGUE_GAIN 0x3F #define SYSALS_INTEGRATION_PERIOD 0x40 #define RESULT_ALS_STATUS 0x4E #define RESULT_ALS_VAL 0x50 #define INTERLEAVED_MODE_ENABLE 0x2A3 // SYSALS_START #define ALS_START_SINGLESHOT 0x01 // bit 0 set / bit 1 clear #define ALS_START_CONTINUOUS 0x03 // bit 0 set / bit 1 set #define ALS_STOP 0x00 // bit 0 set / bit 1 don't care // RESULT_ALS_STATUS #define ALS_DEVICE_READY 0x01 #define ALS_ERROR_CODE 0xF0 // covers bits [7:4] #define FW_ALS_RESULT_SCALER 0x120 #define DEFAULT_INTEGRATION_PERIOD 0x64 #define DEFAULT_LUX_RESOLUTION 0.56f #define DEFAULT_ALS_SCALER 1 #define DEFAULT_ALS_GAIN 20 /** * @brief This data type defines range measurment data. */ typedef struct { float_t lux; /**< Light measurement (Lux) */ uint32_t errorStatus; /**< Error status of the current measurement. \n * No Error := 0. \n * Refer to product sheets for other error codes. */ }sensor_AlsData; /*! * *\brief Device setup for ALS parameters. These settings can be applied at any time. The status of operation bit (bit 0) of the SYSALS_START is not important. *\param[in] device_base_address *\retval sensor_error */ sensor_error als_set_dynamic_config(uint8_t device_base_address); /*! *\brief Set Mode and Operation commands in the SYSALS_START register. * * Possible combinations are : \n * ALS_START_SINGLESHOT 0x01 (bit 0 set / bit 1 clear) \n * ALS_START_CONTINUOUS 0x03 (bit 0 set / bit 1 set) \n * ALS_STOP 0x01 (bit 0 set / bit 1 don't care) \n *\param[in] device_base_address *\param[in] mode Mode select/operation command to be written to the SYSALS_START register. *\retval sensor_error */ sensor_error als_set_systemMode(uint8_t device_base_address, uint8_t mode); /*! *\brief Report status of ALS mode-select and Stop/Start. * * Returns a reading of the SYSALS_START register. \n * Possible results are : \n * ALS_START_SINGLESHOT 0x01 (bit 0 set / bit 1 clear) \n * ALS_START_CONTINUOUS 0x03 (bit 0 set / bit 1 set) \n * ALS_STOP 0x01 (bit 0 set / bit 1 don't care) \n *\param[in] device_base_address *\retval uint8_t (unsigned, byte-wide integer) */ uint8_t als_get_systemMode(uint8_t device_base_address); /*! *\brief Report 16-bit result from last ALS operation. * * Accesses the RESULT_ALS_VAL register, to report the latest ALS raw measurement. *\param[in] device_base_address *\retval uint16_t (unsigned, word-wide integer) */ uint16_t als_get_result(uint8_t device_base_address); /*! *\brief Report 16-bit result from last ALS operation. * * Reads the latest ALS measurement and reports to the calling operation in LUX. *\param[in] device_base_address *\retval uint16_t (unsigned, word-wide integer) */ uint16_t als_get_lux(uint8_t device_base_address); /*! *\brief Set min/max ALS thresholds (units?) in SYSALS_THRESH_LOW & SYSALS_THRESH_HIGH registers. *\param[in] device_base_address *\param[in] low_threshold Byte-wide, integer, ALS low threshold to be written to the SYSALS_THRESH_LOW register. *\param[in] high_threshold Byte-wide, integer, ALS high threshold to be written to the SYSALS_THRESH_HIGH register. *\retval sensor_error */ sensor_error als_set_thresholds(uint8_t device_base_address, uint16_t low_threshold, uint16_t high_threshold); /*! *\brief Set ALS high threshold the SYSALS_THRESH_HIGH register. *\param[in] device_base_address *\param[in] threshold Word-wide, integer, ALS high threshold to be written to the SYSALS_THRESH_HIGH register. *\retval sensor_error */ sensor_error als_set_high_threshold(uint8_t device_base_address, uint16_t threshold); /*! *\brief Report ALS high threshold from the SYSALS_THRESH_HIGH register. *\param[in] device_base_address *\retval uint16_t (unsigned, word-wide integer) */ uint16_t als_get_high_threshold(uint8_t device_base_address); /*! *\brief Set ALS low threshold the SYSALS_THRESH_LOW register. *\param[in] device_base_address *\param[in] threshold ALS low threshold to be written to the SYSALS_THRESH_LOW register. *\retval sensor_error */ sensor_error als_set_low_threshold(uint8_t device_base_address, uint16_t threshold); /*! *\brief Report ALS low threshold from the SYSALS_THRESH_LOW register. *\param[in] device_base_address *\retval uint16_t (unsigned, word-wide integer) */ uint16_t als_get_low_threshold(uint8_t device_base_address); /*! *\brief Set ALS intermeasurement period in the SYSALS_INTERMEASUREMENT_PERIOD register. * * Range 10ms-2.55s, 1 code = 10 ms, code 0 = 10ms *\param[in] device_base_address *\param[in] intermeasurement_period: Time delay in ms between measurements in continuous-ALS mode. *\retval sensor_error */ sensor_error als_set_interMeasurement_period(uint8_t device_base_address, uint16_t intermeasurement_period); /*! *\brief Report ALS intermeasurement period from the SYSALS_INTERMEASUREMENT_PERIOD register. * * Range 0-2.55s, 1 code = 10 ms *\param[in] device_base_address *\retval an 16-bit integer as time in ms. */ uint16_t als_get_interMeasurement_period(uint8_t device_base_address); /*! *\brief Set dark/light ALS analogue gains in the SYSALS_ANALOGUE_GAIN register. * * Light gain will be clipped to a maximum value of 7. \n * Dark Gain is frozen at 4. \n * * [2:0] sysals_analogue_gain_light: ALS analogue gain (light channel) \n * 0: ALS Gain = 20 \n * 1: ALS Gain = 10 \n * 2: ALS Gain = 5.0 \n * 3: ALS Gain = 2.5 \n * 4: ALS Gain = 1.67 \n * 5: ALS Gain = 1.25 \n * 6: ALS Gain = 1.0 \n * 7: ALS Gain = 40 (testmode) \n *\param[in] device_base_address *\param[in] light_analogue_gain light gain *\retval sensor_error */ sensor_error als_set_analogue_gain(uint8_t device_base_address, uint8_t light_analogue_gain); /*! *\brief Report ALS analogue gain from the SYSALS_ANALOGUE_GAIN register. *\param[in] device_base_address *\retval an 8-bit integer. */ uint8_t als_get_analogue_gain(uint8_t device_base_address); /*! *\brief Set ALS Integration Period in the SYSALS_INTEGRATION_PERIOD register. *\param[in] device_base_address *\param[in] integration_period Integration period for ALS mode, in ms. 1 code = 1ms [codes (0:464) == (1ms:465ms)] *\retval sensor_error */ sensor_error als_set_integration_period(uint8_t device_base_address, uint16_t integration_period); /*! *\brief Report ALS Integration Period from the SYSALS_INTEGRATION_PERIOD register. *\param[in] device_base_address *\retval a 16-bit integer. */ uint16_t als_get_integration_period(uint8_t device_base_address); /*! *\brief Report ALS Result Status from RESULT_ALS_STATUS register. *\param[in] device_base_address *\retval an 8-bit integer. */ uint8_t als_get_result_status(uint8_t device_base_address); /*! *\brief Report result_ALS_device_ready status in the ALS_RANGE_STATUS register. *\param[in] device_base_address *\retval True if the result_ALS_device_ready bit in the RESULT_ALS_STATUS register is set, otherwise False. */ bool_t als_get_device_ready(uint8_t device_base_address); /*! *\brief Report ALS Result Error Codes from RESULT_ALS_STATUS register. *\param[in] device_base_address *\retval an 8-bit integer. */ uint8_t als_get_result_error_codes(uint8_t device_base_address); /*! *\brief Enable Interleaved Mode. *\param[in] device_base_address *\retval sensor_error */ sensor_error als_set_interleaved_mode(uint8_t device_base_address); /*! *\brief Disable Interleaved Mode. *\param[in] device_base_address *\retval sensor_error */ sensor_error als_clear_interleaved_mode(uint8_t device_base_address); /*! *\brief Report Interleaved Mode. *\param[in] device_base_address *\retval an 8-bit integer. */ uint8_t als_get_interleaved_mode(uint8_t device_base_address); /*! *\brief Set System Interrupt Config GPIO for ALS operations. Returns True a valid command was completed successfully, otherwise False.\n Possible settings are :\n CONFIG_GPIO_INTERRUPT_DISABLED = 0x00 \n CONFIG_GPIO_INTERRUPT_LEVEL_LOW = 0x01 \n CONFIG_GPIO_INTERRUPT_LEVEL_HIGH = 0x02 \n CONFIG_GPIO_INTERRUPT_OUT_OF_WINDOW = 0x03 \n CONFIG_GPIO_INTERRUPT_NEW_SAMPLE_READY = 0x04 \n *\param[in] device_base_address *\param[in] ALS_GPIO_interrupt_config: *\retval sensor_error */ sensor_error als_set_system_interrupt_config_gpio(uint8_t device_base_address, uint8_t ALS_GPIO_interrupt_config); /*! *\brief Report System Interrupt Config GPIO ALS. Returns the ALS-only portion of the SYSTEM_INTERRUPT_CONFIG_GPIO register.\n Possible returns are : \n CONFIG_GPIO_INTERRUPT_DISABLED = 0x00 \n CONFIG_GPIO_INTERRUPT_LEVEL_LOW = 0x01 \n CONFIG_GPIO_INTERRUPT_LEVEL_HIGH = 0x02 \n CONFIG_GPIO_INTERRUPT_OUT_OF_WINDOW = 0x03 \n CONFIG_GPIO_INTERRUPT_NEW_SAMPLE_READY = 0x04 \n *\param[in] device_base_address *\retval Integer */ uint8_t als_get_system_interrupt_config_gpio(uint8_t device_base_address); /*! *\brief Report GPIO Interrupt Result Status for an ALS operation. Returns the ALS-only portion of the RESULT_INTERRUPT_STATUS_GPIO register.\n Possible returns are : \n 0: No threshold events reported \n 1: Level Low threshold event \n 2: Level High threshold event \n 3: Out Of Window threshold event \n 4: New Sample Ready threshold event \n *\param[in] device_base_address *\retval Integer */ uint8_t als_get_result_interrupt_status_gpio(uint8_t device_base_address); /*! *\brief Clear ALS System Interrupt. *\param[in] device_base_address *\retval sensor_error */ sensor_error als_set_system_interrupt_clear(uint8_t device_base_address); /*! *\brief Set history buffer to ALS mode and enable. *\param[in] device_base_address *\retval sensor_error */ sensor_error als_set_history_buffer_mode_enable(uint8_t device_base_address); sensor_error Get_ALS_History_Buffer(uint8_t device_base_address); sensor_error als_set_scaler(uint8_t device_base_address, uint8_t scaler); uint32_t als_get_scaler(uint8_t device_base_address); #endif