vlx lib

common_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 common_driver.h
 *\brief Application-level methods used for generic, system or identification operations.
 */

#ifndef _RANGE_DRIVER
#define _RANGE_DRIVER

#include "definitions.h"
#include "platform.h"
//-----------------------------------------------------------------------------
// module imports
//-----------------------------------------------------------------------------

// "circle_types.h" included for following definition :
//#ifndef __cplusplus
//typedef enum {FALSE = 0, TRUE = !FALSE} bool;
//#endif


//-----------------------------------------------------------------------------
// constant definitions
//-----------------------------------------------------------------------------

// API Version Strings
#define API_MAJOR_VERSION                      01
#define API_MINOR_VERSION                      00
#define API_BUILD_NUMBER                       00
#define API_CODE_REVISION                      1590

// register addresses
#define SYSTEM_MODE_GPIO0                      0x10
#define SYSTEM_MODE_GPIO1                      0x11
#define SYSTEM_HISTORY_CTRL                    0x12
#define SYSTEM_INTERRUPT_CONFIG_GPIO           0x14
#define SYSTEM_INTERRUPT_CLEAR                 0x15
#define SYSTEM_FRESH_OUT_OF_RESET              0x16
#define SYSTEM_GROUPED_PARAMETER_HOLD          0x17

#define RESULT_INTERRUPT_STATUS_GPIO           0x4F

#define PAD_I2C_CONFIG                         0x13D

#define I2C_SLAVE_DEVICE_ADDRESS               0x212

#define SYSTEM_FATAL_ERROR_CODE                0x290
#define SYSTEM_FATAL_ERROR_STATUS              0x291



// PAD_I2C_CONFIG
#define I2C_1v2_PAD_VOLTAGE                    0x01
#define I2C_2v8_PAD_VOLTAGE                    0x02

// SYSTEM_INTERRUPT_CONFIG_GPIO
#define CONFIG_GPIO_INTERRUPT_DISABLED         0x00
#define CONFIG_GPIO_INTERRUPT_LEVEL_LOW        0x01
#define CONFIG_GPIO_INTERRUPT_LEVEL_HIGH       0x02
#define CONFIG_GPIO_INTERRUPT_OUT_OF_WINDOW    0x03
#define CONFIG_GPIO_INTERRUPT_NEW_SAMPLE_READY 0x04

// SYSTEM_MODE_GPIOx
#define GPIOx_MODE_SELECT_RANGING              0x00
#define GPIOx_MODE_SELECT_ALS                  0x01

#define GPIOx_POLARITY_SELECT_OFF              0x00
#define GPIOx_POLARITY_SELECT_ON               0x01
#define GPIOx_POLARITY_SELECT_CLEARED          0xDF

#define GPIOx_MODE_SELECT                      0x01
#define GPIOx_POLARITY_SELECT                  0x20

#define GPIOx_SELECT_OFF                       0x00
#define GPIOx_SELECT_MEASURE_READY             0x01
#define GPIOx_SELECT_THRESHOLD_OUTPUT          0x02
#define GPIOx_SELECT_BLANK_IN                  0x03
#define GPIOx_SELECT_BLANK_OUT                 0x04
#define GPIOx_SELECT_START_STOP                0x05
#define GPIOx_SELECT_DISABLED                  0x06
#define GPIOx_SELECT_COMBINED_THRESHOLD_OUTPUT 0x07
#define GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT     0x08

// SYSTEM_HISTORY_CTRL
#define HISTORY_BUFFER_ENABLE                  0x01
#define HISTORY_BUFFER_DISABLE                 0x00

#define HISTORY_BUFFER_ENABLED                 0x01
#define HISTORY_BUFFER_MODE                    0x02
#define HISTORY_BUFFER_CLEARED                 0x04

#define HISTORY_BUFFER_RANGING_MODE            0x00
#define HISTORY_BUFFER_ALS_MODE                0x01

// SYSTEM_INTERRUPT_CLEAR
#define INTERRUPT_CLEAR_RANGING                0x01
#define INTERRUPT_CLEAR_ALS                    0x02
#define INTERRUPT_CLEAR_ERROR                  0x04

// RESULT_INTERRUPT_STATUS_GPIO
#define RES_INT_STAT_GPIO_NO_ERROR             0x00
#define RES_INT_STAT_GPIO_LOW_LEVEL_THRESHOLD  0x01
#define RES_INT_STAT_GPIO_HIGH_LEVEL_THRESHOLD 0x02
#define RES_INT_STAT_GPIO_OUT_OF_WINDOW        0x03
#define RES_INT_STAT_GPIO_NEW_SAMPLE_READY     0x04


//-----------------------------------------------------------------------------
// global variable declarations
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// method definitions
//-----------------------------------------------------------------------------

/*!
 *
 */
sensor_error common_initialise(uint8_t device_base_address);

/*!
 *\brief Device setup for Ranging and ALS operations.\n
 *
 * To apply these settings the operation bits (bit 0) in the SYSRANGE_START SYSALS_START Registers must be cleared. \n
 *
 *\param[in] device_base_address
 *\retval sensor_error
 */
sensor_error common_set_static_config(uint8_t device_base_address);

/*!
 *\brief Report device Identification Info.
 *
 * Return the contents of the Identification block registers, in the following order : \n
 *
 * IDENTIFICATION_MODEL_ID \n
 * IDENTIFICATION_MODEL_REV_MAJOR \n
 * IDENTIFICATION_MODEL_REV_MINOR \n
 * IDENTIFICATION_MODULE_REV_MAJOR \n
 * IDENTIFICATION_MODULE_REV_MINOR \n
 * IDENTIFICATION_NVM_REVISION_ID \n
 * IDENTIFICATION_MASK_REVISION_ID \n
 * IDENTIFICATION_month \n
 * IDENTIFICATION_year \n
 * IDENTIFICATION_phase \n
 * IDENTIFICATION_day \n
 * IDENTIFICATION_time \n
 * IDENTIFICATION_code \n
 * IDENTIFICATION_FIRMWARE_REVISION_ID\n
 *\param[in] device_base_address
 *\retval List
 */
sensor_error common_get_identification(uint8_t device_base_address);

/*!
 *\brief Set Device I2C Base Address.
 *
 * Uses I2C_Slave_Device_address register at 0x0212. Can be over-written by a value read from NVM. \n
 * Defaults to 0x52 (8-bit address)/0x29 (7-bit). Register reports a 7-bit value. \n
 *\param[in] device_base_address
 *\param[in] i2c_base_address 8-bit I2C Slave device base address.
 *\retval sensor_error
 */
sensor_error common_set_i2c_base_address(uint8_t device_base_address, uint32_t i2c_base_address);

/*!
 *\brief Set I2C Pad Voltage.
 *
 * I2C Pad External Bus Supply voltage (applies to both pads). Can be overridden by a value read from in NVM. \n
 *
 * Possible values are : \n
 *     I2C_1v8_PAD_VOLTAGE = 0x01 \n
 *     I2C_2v8_PAD_VOLTAGE = 0x02 \n
 *\param[in] device_base_address
 *\param[in] pad_voltage I2C Pad External Bus Supply voltage.
 *\retval sensor_error
 */
sensor_error common_set_i2c_pad_voltage(uint8_t device_base_address, uint8_t pad_voltage);

/*!
 *\brief Report I2C Pad Voltage.
 *
 * I2C Pad External Bus Supply voltage.
 * Possible values are : \n
 *     I2C_1v8_PAD_VOLTAGE = 0x01 \n
 *     I2C_2v8_PAD_VOLTAGE = 0x02 \n
 *\param[in] device_base_address
 *\retval Integer
 */
uint8_t common_get_i2c_pad_voltage(uint8_t device_base_address);

/*!
 *\brief Set GPIO0 Mode.
 *
 * Possible values for mode are : \n
 *   GPIOx_MODE_SELECT_RANGING = 0x00 \n
 *   GPIOx_MODE_SELECT_ALS     = 0x01 \n
 *
 * Possible settings for select are : \n
 *   GPIOx_SELECT_OFF = 0x00 \n
 *   GPIOx_SELECT_MEASURE_READY = 0x01 \n
 *   GPIOx_SELECT_DISABLED = 0x06 \n
 *   GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT = 0x08 \n
 *
 * Possible settings for polarity are : \n
 *   GPIOx_POLARITY_SELECT_OFF = 0x00 \n
 *   GPIOx_POLARITY_SELECT_ON = 0x01 \n
 *\param[in] device_base_address
 *\param[in] mode Operating mode to be selected.
 *\param[in] select
 *\param[in] polarity
 *\retval sensor_error
 */
sensor_error common_set_system_mode_gpio0(uint8_t device_base_address, uint8_t mode, uint8_t select, uint8_t polarity);

/*!
 *\brief Set GPIO0 Mode.
 *
 * Possible values for mode are : \n
 *     GPIOx_MODE_SELECT_RANGING = 0x00 \n
 *     GPIOx_MODE_SELECT_ALS     = 0x01 \n
 *\param[in] device_base_address
 *\param[in] mode: Operating mode to be selected.
 *\retval sensor_error
 */
sensor_error common_set_gpio0_mode(uint8_t device_base_address, uint8_t mode);

/*!
 *\brief Report GPIO0 Mode.

    Possible results are : \n
     GPIOx_MODE_SELECT_RANGING = 0x00 \n
     GPIOx_MODE_SELECT_ALS     = 0x01 \n
 *\param[in] device_base_address
 *\retval Integer
*/
uint8_t common_get_gpio0_mode(uint8_t device_base_address);

/*!
 *\brief Set GPIO0 function configuration.

    Possible settings are : \n
      GPIOx_SELECT_OFF = 0x00 \n
      GPIOx_SELECT_MEASURE_READY = 0x01 \n
      GPIOx_SELECT_THRESHOLD_OUTPUT = 0x02 \n
      GPIOx_SELECT_BLANK_IN = 0x03 \n
      GPIOx_SELECT_BLANK_OUT = 0x04 \n
      GPIOx_SELECT_START_STOP = 0x05 \n
      GPIOx_SELECT_DISABLED = 0x06 \n
      GPIOx_SELECT_COMBINED_THRESHOLD_OUTPUT = 0x07 \n
      GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT = 0x08 \n
 *\param[in] device_base_address
 *\param[in] select:
 *\retval sensor_error
*/
sensor_error common_set_gpio0_select(uint8_t device_base_address, uint8_t select);

/*!
 *\brief Report GPIO0 functional configuration.

    Possible results are : \n
      GPIOx_SELECT_OFF = 0x00 \n
      GPIOx_SELECT_MEASURE_READY = 0x01 \n
      GPIOx_SELECT_THRESHOLD_OUTPUT = 0x02 \n
      GPIOx_SELECT_BLANK_IN = 0x03 \n
      GPIOx_SELECT_BLANK_OUT = 0x04 \n
      GPIOx_SELECT_START_STOP = 0x05 \n
      GPIOx_SELECT_DISABLED = 0x06 \n
      GPIOx_SELECT_COMBINED_THRESHOLD_OUTPUT = 0x07 \n
      GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT = 0x08 \n
 *\param[in] device_base_address
 *\retval Integer
*/
uint8_t common_get_gpio0_select(uint8_t device_base_address);

/*!
 *\brief Set GPIO0 Polarity.

    Possible settings are : \n
      GPIOx_POLARITY_SELECT_OFF = 0x00 \n
      GPIOx_POLARITY_SELECT_ON = 0x01 \n
 *\param[in] device_base_address
 *\param[in] polarity:
 *\retval sensor_error
*/
sensor_error common_set_gpio0_polarity(uint8_t device_base_address, uint8_t polarity);

/*!
 *\brief Report GPIO0 Polarity.
 *
 * Report the status of the GPIO_0 Polarity select bit in SYSTEM_MODE_GPIO0 register. \n
 *\param[in] device_base_address
 *\retval Boolean
*/
bool_t common_get_gpio0_polarity(uint8_t device_base_address);

/*!
 *\brief Set GPIO1 Mode.

    Possible values for mode are : \n
      GPIOx_MODE_SELECT_RANGING = 0x00 \n
      GPIOx_MODE_SELECT_ALS     = 0x01 \n

    Possible settings for select are : \n
      GPIOx_SELECT_OFF = 0x00 \n
      GPIOx_SELECT_MEASURE_READY = 0x01 \n
      GPIOx_SELECT_DISABLED = 0x06 \n
      GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT = 0x08 \n

    Possible settings for polarity are : \n
      GPIOx_POLARITY_SELECT_OFF = 0x00 \n
      GPIOx_POLARITY_SELECT_ON = 0x01 \n
 *\param[in] device_base_address
 *\param[in] mode: Operating mode to be selected.
 *\param[in] select:
 *\param[in] polarity:
 *\retval sensor_error
*/
sensor_error common_set_system_mode_gpio1(uint8_t device_base_address, uint8_t mode, uint8_t select, uint8_t polarity);

/*!
 *\brief Set GPIO1 Mode.

  Possible mode settings are : \n
     GPIOx_MODE_SELECT_RANGING = 0x00 \n
     GPIOx_MODE_SELECT_ALS     = 0x01 \n
 *\param[in] device_base_address
 *\param[in] mode:
 *\retval sensor_error
*/
sensor_error common_set_gpio1_mode(uint8_t device_base_address, uint8_t mode);

/*!
 *\brief Report GPIO1 Mode.

    Possible results are : \n
      GPIOx_MODE_SELECT_RANGING = 0x00 \n
      GPIOx_MODE_SELECT_ALS     = 0x01 \n
 *\param[in] device_base_address
 *\retval Integer
*/
uint8_t common_get_gpio1_mode(uint8_t device_base_address);

/*!
 *\brief Set GPIO1 functional configuration.

    Possible settings are : \n
      GPIOx_SELECT_OFF = 0x00 \n
      GPIOx_SELECT_MEASURE_READY = 0x01 \n
      GPIOx_SELECT_THRESHOLD_OUTPUT = 0x02 \n
      GPIOx_SELECT_BLANK_IN = 0x03 \n
      GPIOx_SELECT_BLANK_OUT = 0x04 \n
      GPIOx_SELECT_START_STOP = 0x05 \n
      GPIOx_SELECT_DISABLED = 0x06 \n
      GPIOx_SELECT_COMBINED_THRESHOLD_OUTPUT = 0x07 \n
      GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT = 0x08 \n
 *\param[in] device_base_address
 *\param[in] select:
 *\retval sensor_error
*/
sensor_error common_set_gpio1_select(uint8_t device_base_address, uint8_t select);

/*!
 *\brief Report GPIO1 functional configuration.

    Possible results are : \n
      GPIOx_SELECT_OFF = 0x00 \n
      GPIOx_SELECT_MEASURE_READY = 0x01 \n
      GPIOx_SELECT_THRESHOLD_OUTPUT = 0x02 \n
      GPIOx_SELECT_BLANK_IN = 0x03 \n
      GPIOx_SELECT_BLANK_OUT = 0x04 \n
      GPIOx_SELECT_START_STOP = 0x05 \n
      GPIOx_SELECT_DISABLED = 0x06 \n
      GPIOx_SELECT_COMBINED_THRESHOLD_OUTPUT = 0x07 \n
      GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT = 0x08 \n
 *\param[in] device_base_address
 *\retval Integer
*/
uint8_t common_get_gpio1_select(uint8_t device_base_address);

/*!
 *\brief Set GPIO1 Polarity.

      GPIOx_POLARITY_SELECT_OFF = 0x00 \n
      GPIOx_POLARITY_SELECT_ON = 0x01 \n
 *\param[in] device_base_address
 *\param[in] polarity:
 *\retval sensor_error
*/
sensor_error common_set_gpio1_polarity(uint8_t device_base_address, uint8_t polarity);

/*!
 *\brief Report GPIO1 Polarity.

    Report the status of the GPIO_0 Polarity select bit in SYSTEM_MODE_GPIO0 register.
 *\param[in] device_base_address
 *\retval Boolean
*/
bool_t common_get_gpio1_polarity(uint8_t device_base_address);

/*!
 *\brief Set History Buffer Enable.

    Possible settings are : \n
      HISTORY_BUFFER_ENABLE = 0x01 \n
      HISTORY_BUFFER_DISABLE = 0x00 \n
 *\param[in] device_base_address
 *\param[in] history_buffer_enable:
 *\retval sensor_error
*/
sensor_error common_set_history_buffer_enable(uint8_t device_base_address, uint8_t history_buffer_enable);

/*!
 *\brief Report History Buffer Enable status.

    Returns True if the command completes successfully, otherwise False.\n
 *\param[in] device_base_address
 *\retval Boolean
*/
bool_t common_get_history_buffer_enable(uint8_t device_base_address);

/*!
 *\brief Set History Buffer Mode.

    Possible modes are : \n
      HISTORY_BUFFER_RANGING_MODE = 0x00 \n
      HISTORY_BUFFER_ALS_MODE = 0x01 \n
 *\param[in] device_base_address
 *\param[in] history_buffer_mode:
 *\retval sensor_error
*/
sensor_error common_set_history_buffer_mode(uint8_t device_base_address, uint8_t history_buffer_mode);

/*!
 *\brief Report History Buffer Mode.

    Returns the contents of the SYSTEM_HISTORY_CTRL register. \n
    Possible values are : \n
      HISTORY_BUFFER_RANGING_MODE = 0x00 \n
      HISTORY_BUFFER_ALS_MODE = 0x01 \n
 *\param[in] device_base_address
 *\retval Integer
*/
uint8_t common_get_history_buffer_mode(uint8_t device_base_address);

/*!
 *\brief Clear history buffer (mode not cleared)
 *\param[in] device_base_address
 *\retval sensor_error
*/
sensor_error common_set_history_buffer_clear(uint8_t device_base_address);

/*!
 *\brief Report History Buffer Clear status.
 *
 * Returns True if the SYSTEM_HISTORY_CTRL register is cleared, otherwise False. \n
 *\param[in] device_base_address
 *\retval Boolean
*/
bool_t common_get_history_buffer_clear(uint8_t device_base_address);

/*!
 *\brief Clear 'Error' System Interrupt.
 *\param[in] device_base_address
 *\retval sensor_error
*/
sensor_error common_set_system_interrupt_clear_error(uint8_t device_base_address);

/*!
 *\brief Report GPIO Interrupt Error Result Status.

    Returns the Error flag portion of the RESULT_INTERRUPT_STATUS_GPIO register. \n
    Possible returns are : \n
    0: No error reported \n
    1: Laser Safety Error \n
    2: PLL error (either PLL1 or PLL2) \n
    3: Measurement error \n
 *\param[in] device_base_address
 *\retval Integer
*/
uint8_t common_get_error_result_interrupt_status_gpio(uint8_t device_base_address);

/*!
 *\brief Clear System Fresh Out Of Reset flag.
 *
 * The fresh out of reset bit defaults to 1 at boot-up. The user can set this to 0 after initial boot and then use this flag to check for reset conditions.
 *\param[in] device_base_address
 *\retval sensor_error
*/
sensor_error common_clear_system_fresh_out_of_reset(uint8_t device_base_address);

/*!
 *\brief Report System Fresh Out Of Reset status.
 *
 * Returns True if the SYSTEM_FRESH_OUT_OF_RESET register status is set, otherwise False. \n
 *\param[in] device_base_address
 *\retval Boolean
*/
bool_t common_get_system_fresh_out_of_reset(uint8_t device_base_address);

/*!
 *\brief Set System Group Parameter Hold flag.

    The grouped_parameter_hold flag is set to indicate that device data is being updated. \n
    0: Data is stable - user is safe to copy. \n
    1: Data being updated - user not safe to copy. \n
 *\param[in] device_base_address
 *\retval sensor_error
*/
sensor_error common_set_system_group_parameter_hold(uint8_t device_base_address);

/*!
 *\brief Clear System Group Parameter Hold flag.

    The grouped_parameter_hold flag is set to indicate that device data is being updated. \n
    0: Data is stable - user is safe to copy. \n
    1: Data being updated - user not safe to copy. \n
 *\param[in] device_base_address
 *\retval sensor_error
*/
sensor_error common_clear_system_group_parameter_hold(uint8_t device_base_address);

/*!
 *\brief Report System Fatal Error Code flag status.
 *
 * Returns the contents of the SYSTEM_FATAL_ERROR_CODE register, which is written to when a fatal error occurs.
 *\param[in] device_base_address
 *\retval Integer
*/
uint8_t common_get_system_fatal_error_code(uint8_t device_base_address);

/*!
 *\brief Report System Fatal Error Status.

    Returns the contents of the SYSTEM_FATAL_ERROR_STATUS register, which is written to when a fatal error occurs.\n

    Read Only HW status bit, set high when a 1 is written into FATAL_ERROR_CODE. \n
    Checked by FW on bootup to ascertain device status. Can only be rest by a main Go2 reset. \n
 *\param[in] device_base_address
 *\retval Integer
*/
uint8_t common_get_system_fatal_error_status(uint8_t device_base_address);

/*!
 *\brief Report System Health.
 *
 * A combination of fresh_from_reset, fatal_error and laser safety checks
 *\param[in] device_base_address
 *\retval Integer. A combined system health flag.
*/
uint8_t common_get_system_health_check(uint8_t device_base_address);

#endif