vlx lib

Committer:
vijaynvr
Date:
Sun Feb 08 14:26:51 2015 +0000
Revision:
0:bc9f26b5dadf
working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vijaynvr 0:bc9f26b5dadf 1 /*******************************************************************************
vijaynvr 0:bc9f26b5dadf 2 ################################################################################
vijaynvr 0:bc9f26b5dadf 3 # (C) STMicroelectronics 2014
vijaynvr 0:bc9f26b5dadf 4 #
vijaynvr 0:bc9f26b5dadf 5 # This program is free software; you can redistribute it and/or modify it under
vijaynvr 0:bc9f26b5dadf 6 # the terms of the GNU General Public License version 2 and only version 2 as
vijaynvr 0:bc9f26b5dadf 7 # published by the Free Software Foundation.
vijaynvr 0:bc9f26b5dadf 8 #
vijaynvr 0:bc9f26b5dadf 9 # This program is distributed in the hope that it will be useful, but WITHOUT
vijaynvr 0:bc9f26b5dadf 10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
vijaynvr 0:bc9f26b5dadf 11 # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
vijaynvr 0:bc9f26b5dadf 12 # details.
vijaynvr 0:bc9f26b5dadf 13 #
vijaynvr 0:bc9f26b5dadf 14 # You should have received a copy of the GNU General Public License along with
vijaynvr 0:bc9f26b5dadf 15 # this program; if not, write to the Free Software Foundation, Inc.,
vijaynvr 0:bc9f26b5dadf 16 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
vijaynvr 0:bc9f26b5dadf 17 #
vijaynvr 0:bc9f26b5dadf 18 #------------------------------------------------------------------------------
vijaynvr 0:bc9f26b5dadf 19 # Imaging Division
vijaynvr 0:bc9f26b5dadf 20 ################################################################################
vijaynvr 0:bc9f26b5dadf 21 ********************************************************************************/
vijaynvr 0:bc9f26b5dadf 22
vijaynvr 0:bc9f26b5dadf 23
vijaynvr 0:bc9f26b5dadf 24 /**
vijaynvr 0:bc9f26b5dadf 25 * @file high_level_api.cpp
vijaynvr 0:bc9f26b5dadf 26 *
vijaynvr 0:bc9f26b5dadf 27 * Copyright (C) 2014 ST MicroElectronics
vijaynvr 0:bc9f26b5dadf 28 *
vijaynvr 0:bc9f26b5dadf 29 * @brief High level interface definition for device, providing methods for basic
vijaynvr 0:bc9f26b5dadf 30 * ranging.
vijaynvr 0:bc9f26b5dadf 31 *
vijaynvr 0:bc9f26b5dadf 32 */
vijaynvr 0:bc9f26b5dadf 33
vijaynvr 0:bc9f26b5dadf 34 #include "vl6180x_high_level_api.h"
vijaynvr 0:bc9f26b5dadf 35 #include "definitions.h"
vijaynvr 0:bc9f26b5dadf 36 #include "common_driver.h"
vijaynvr 0:bc9f26b5dadf 37 #include "ranging_driver.h"
vijaynvr 0:bc9f26b5dadf 38 #include "als_driver.h"
vijaynvr 0:bc9f26b5dadf 39 #include "range_upscaling_driver.h"
vijaynvr 0:bc9f26b5dadf 40 #include "debug.h"
vijaynvr 0:bc9f26b5dadf 41 #include "utilities.h"
vijaynvr 0:bc9f26b5dadf 42
vijaynvr 0:bc9f26b5dadf 43 static uint8_t _device_i2c_addr = 0;
vijaynvr 0:bc9f26b5dadf 44
vijaynvr 0:bc9f26b5dadf 45 sensor_error get_vendor(uint8_t *pVendorStr)
vijaynvr 0:bc9f26b5dadf 46 {
vijaynvr 0:bc9f26b5dadf 47 LOG_FUNCTION_START((void*)pVendorStr);
vijaynvr 0:bc9f26b5dadf 48
vijaynvr 0:bc9f26b5dadf 49 LOG_FUNCTION_END(NULL);
vijaynvr 0:bc9f26b5dadf 50 return SENSOR_ERROR_NONE;
vijaynvr 0:bc9f26b5dadf 51 }
vijaynvr 0:bc9f26b5dadf 52
vijaynvr 0:bc9f26b5dadf 53 sensor_error get_version(int32_t id, uint8_t *pVersionStr)
vijaynvr 0:bc9f26b5dadf 54 {
vijaynvr 0:bc9f26b5dadf 55 LOG_FUNCTION_START((void*)&id,(void*)pVersionStr);
vijaynvr 0:bc9f26b5dadf 56
vijaynvr 0:bc9f26b5dadf 57 LOG_FUNCTION_END(NULL);
vijaynvr 0:bc9f26b5dadf 58 return SENSOR_ERROR_NONE;
vijaynvr 0:bc9f26b5dadf 59 }
vijaynvr 0:bc9f26b5dadf 60
vijaynvr 0:bc9f26b5dadf 61 uint32_t get_max_range()
vijaynvr 0:bc9f26b5dadf 62 {
vijaynvr 0:bc9f26b5dadf 63 uint32_t maxRange = 0;
vijaynvr 0:bc9f26b5dadf 64
vijaynvr 0:bc9f26b5dadf 65 maxRange = range_get_upper_limit(_device_i2c_addr);
vijaynvr 0:bc9f26b5dadf 66
vijaynvr 0:bc9f26b5dadf 67 return maxRange;
vijaynvr 0:bc9f26b5dadf 68 }
vijaynvr 0:bc9f26b5dadf 69
vijaynvr 0:bc9f26b5dadf 70 uint32_t get_min_range()
vijaynvr 0:bc9f26b5dadf 71 {
vijaynvr 0:bc9f26b5dadf 72 return range_get_lower_limit(_device_i2c_addr);;
vijaynvr 0:bc9f26b5dadf 73 }
vijaynvr 0:bc9f26b5dadf 74
vijaynvr 0:bc9f26b5dadf 75 sensor_error initialise(uint8_t device_base_address)
vijaynvr 0:bc9f26b5dadf 76 {
vijaynvr 0:bc9f26b5dadf 77
vijaynvr 0:bc9f26b5dadf 78 LOG_FUNCTION_START((void*)&device_base_address);
vijaynvr 0:bc9f26b5dadf 79
vijaynvr 0:bc9f26b5dadf 80 _device_i2c_addr = device_base_address;
vijaynvr 0:bc9f26b5dadf 81 common_initialise(_device_i2c_addr);
vijaynvr 0:bc9f26b5dadf 82
vijaynvr 0:bc9f26b5dadf 83 LOG_FUNCTION_END(NULL);
vijaynvr 0:bc9f26b5dadf 84
vijaynvr 0:bc9f26b5dadf 85 return SENSOR_ERROR_NONE;
vijaynvr 0:bc9f26b5dadf 86 }
vijaynvr 0:bc9f26b5dadf 87
vijaynvr 0:bc9f26b5dadf 88 sensor_error start_ranging(int32_t id)
vijaynvr 0:bc9f26b5dadf 89 {
vijaynvr 0:bc9f26b5dadf 90 LOG_FUNCTION_START((void*)&id);
vijaynvr 0:bc9f26b5dadf 91
vijaynvr 0:bc9f26b5dadf 92 // load settings
vijaynvr 0:bc9f26b5dadf 93 common_set_static_config(_device_i2c_addr);
vijaynvr 0:bc9f26b5dadf 94
vijaynvr 0:bc9f26b5dadf 95 // ranging setup
vijaynvr 0:bc9f26b5dadf 96 range_set_low_threshold(_device_i2c_addr, 10); // threshold defaults are 0mm and 255mm
vijaynvr 0:bc9f26b5dadf 97 range_set_high_threshold(_device_i2c_addr, 200);//200mm
vijaynvr 0:bc9f26b5dadf 98 range_set_max_convergence_time(_device_i2c_addr, 50); // set max convergence time to 50ms;
vijaynvr 0:bc9f26b5dadf 99
vijaynvr 0:bc9f26b5dadf 100 //set ranging in InterruptMode
vijaynvr 0:bc9f26b5dadf 101 common_set_gpio1_polarity(_device_i2c_addr, GPIOx_POLARITY_SELECT_OFF);
vijaynvr 0:bc9f26b5dadf 102 common_set_gpio1_select(_device_i2c_addr, GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT);
vijaynvr 0:bc9f26b5dadf 103 common_set_gpio1_mode(_device_i2c_addr, GPIOx_MODE_SELECT_RANGING);
vijaynvr 0:bc9f26b5dadf 104 range_set_system_interrupt_config_gpio(_device_i2c_addr, CONFIG_GPIO_INTERRUPT_NEW_SAMPLE_READY);
vijaynvr 0:bc9f26b5dadf 105
vijaynvr 0:bc9f26b5dadf 106 //range_set_systemMode(_device_i2c_addr, RANGE_START_SINGLESHOT);
vijaynvr 0:bc9f26b5dadf 107 LOG_FUNCTION_END(NULL);
vijaynvr 0:bc9f26b5dadf 108
vijaynvr 0:bc9f26b5dadf 109 return SENSOR_ERROR_NONE;
vijaynvr 0:bc9f26b5dadf 110 }
vijaynvr 0:bc9f26b5dadf 111
vijaynvr 0:bc9f26b5dadf 112 sensor_error start_extended_ranging(int32_t id)
vijaynvr 0:bc9f26b5dadf 113 {
vijaynvr 0:bc9f26b5dadf 114 LOG_FUNCTION_START((void*)&id);
vijaynvr 0:bc9f26b5dadf 115 // load settings onto
vijaynvr 0:bc9f26b5dadf 116 er_set_static_config(_device_i2c_addr);
vijaynvr 0:bc9f26b5dadf 117
vijaynvr 0:bc9f26b5dadf 118 // ranging setup
vijaynvr 0:bc9f26b5dadf 119 // range_set_low_threshold(_device_i2c_addr, 10); // threshold defaults are 0mm and 255mm
vijaynvr 0:bc9f26b5dadf 120 // range_set_high_threshold(_device_i2c_addr, 200);//200mm
vijaynvr 0:bc9f26b5dadf 121 range_set_max_convergence_time(_device_i2c_addr, 63); // set max convergence time to 50ms;
vijaynvr 0:bc9f26b5dadf 122 range_set_crosstalk_compensation_rate(_device_i2c_addr, 0);
vijaynvr 0:bc9f26b5dadf 123
vijaynvr 0:bc9f26b5dadf 124 //set ranging in InterruptMode
vijaynvr 0:bc9f26b5dadf 125 common_set_gpio1_polarity(_device_i2c_addr, GPIOx_POLARITY_SELECT_OFF);
vijaynvr 0:bc9f26b5dadf 126 common_set_gpio1_select(_device_i2c_addr, GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT);
vijaynvr 0:bc9f26b5dadf 127 common_set_gpio1_mode(_device_i2c_addr, GPIOx_MODE_SELECT_RANGING);
vijaynvr 0:bc9f26b5dadf 128 range_set_system_interrupt_config_gpio(_device_i2c_addr, CONFIG_GPIO_INTERRUPT_NEW_SAMPLE_READY);
vijaynvr 0:bc9f26b5dadf 129
vijaynvr 0:bc9f26b5dadf 130 LOG_FUNCTION_END(NULL);
vijaynvr 0:bc9f26b5dadf 131
vijaynvr 0:bc9f26b5dadf 132 return SENSOR_ERROR_NONE;
vijaynvr 0:bc9f26b5dadf 133 }
vijaynvr 0:bc9f26b5dadf 134
vijaynvr 0:bc9f26b5dadf 135 sensor_error get_range_measurement(int32_t id, sensor_RangeData *pRangeData)
vijaynvr 0:bc9f26b5dadf 136 {
vijaynvr 0:bc9f26b5dadf 137 const int cErrorDataShift = 4;
vijaynvr 0:bc9f26b5dadf 138
vijaynvr 0:bc9f26b5dadf 139 LOG_FUNCTION_START((void*)&id,(void*)pRangeData);
vijaynvr 0:bc9f26b5dadf 140 // start single range measurement
vijaynvr 0:bc9f26b5dadf 141 range_set_systemMode(_device_i2c_addr, RANGE_START_SINGLESHOT);
vijaynvr 0:bc9f26b5dadf 142
vijaynvr 0:bc9f26b5dadf 143 // poll the till new sample ready
vijaynvr 0:bc9f26b5dadf 144 while (range_get_result_interrupt_status_gpio(_device_i2c_addr) != RES_INT_STAT_GPIO_NEW_SAMPLE_READY)
vijaynvr 0:bc9f26b5dadf 145 {
vijaynvr 0:bc9f26b5dadf 146 timer_wait_us(100);
vijaynvr 0:bc9f26b5dadf 147 }
vijaynvr 0:bc9f26b5dadf 148
vijaynvr 0:bc9f26b5dadf 149 pRangeData->range_mm = range_get_result(_device_i2c_addr);
vijaynvr 0:bc9f26b5dadf 150 pRangeData->signalRate_mcps = decodeFrom9_7_Format(range_get_signal_rate(_device_i2c_addr));
vijaynvr 0:bc9f26b5dadf 151 pRangeData->errorStatus = (range_get_result_status(_device_i2c_addr)) >> cErrorDataShift;
vijaynvr 0:bc9f26b5dadf 152
vijaynvr 0:bc9f26b5dadf 153 // clear the interrupt on
vijaynvr 0:bc9f26b5dadf 154 range_set_system_interrupt_clear(_device_i2c_addr);
vijaynvr 0:bc9f26b5dadf 155 LOG_FUNCTION_END(NULL);
vijaynvr 0:bc9f26b5dadf 156
vijaynvr 0:bc9f26b5dadf 157 return SENSOR_ERROR_NONE;
vijaynvr 0:bc9f26b5dadf 158 }
vijaynvr 0:bc9f26b5dadf 159
vijaynvr 0:bc9f26b5dadf 160 sensor_error start_als(int32_t id)
vijaynvr 0:bc9f26b5dadf 161 {
vijaynvr 0:bc9f26b5dadf 162 LOG_FUNCTION_START((void*)&id);
vijaynvr 0:bc9f26b5dadf 163 common_set_static_config(_device_i2c_addr);
vijaynvr 0:bc9f26b5dadf 164
vijaynvr 0:bc9f26b5dadf 165 als_set_integration_period(_device_i2c_addr, 100); //100ms
vijaynvr 0:bc9f26b5dadf 166 als_set_interMeasurement_period(_device_i2c_addr, 200); //200ms
vijaynvr 0:bc9f26b5dadf 167 als_set_analogue_gain(_device_i2c_addr, 0);
vijaynvr 0:bc9f26b5dadf 168
vijaynvr 0:bc9f26b5dadf 169 als_set_low_threshold(_device_i2c_addr, 0);
vijaynvr 0:bc9f26b5dadf 170 als_set_high_threshold(_device_i2c_addr, 0x0FFFF);
vijaynvr 0:bc9f26b5dadf 171
vijaynvr 0:bc9f26b5dadf 172 common_set_gpio1_polarity(_device_i2c_addr, GPIOx_POLARITY_SELECT_OFF);
vijaynvr 0:bc9f26b5dadf 173 common_set_gpio1_select(_device_i2c_addr, GPIOx_SELECT_GPIO_INTERRUPT_OUTPUT);
vijaynvr 0:bc9f26b5dadf 174 common_set_gpio1_mode(_device_i2c_addr, GPIOx_MODE_SELECT_ALS);
vijaynvr 0:bc9f26b5dadf 175 als_set_system_interrupt_config_gpio(_device_i2c_addr, CONFIG_GPIO_INTERRUPT_NEW_SAMPLE_READY);
vijaynvr 0:bc9f26b5dadf 176
vijaynvr 0:bc9f26b5dadf 177 // als_set_systemMode(_device_i2c_addr, ALS_START_SINGLESHOT);
vijaynvr 0:bc9f26b5dadf 178 LOG_FUNCTION_END(NULL);
vijaynvr 0:bc9f26b5dadf 179
vijaynvr 0:bc9f26b5dadf 180 return SENSOR_ERROR_NONE;
vijaynvr 0:bc9f26b5dadf 181 }
vijaynvr 0:bc9f26b5dadf 182
vijaynvr 0:bc9f26b5dadf 183 sensor_error get_als_measurement(int32_t id, sensor_AlsData *pAlsData)
vijaynvr 0:bc9f26b5dadf 184 {
vijaynvr 0:bc9f26b5dadf 185 const int cErrorDataShift = 4;
vijaynvr 0:bc9f26b5dadf 186
vijaynvr 0:bc9f26b5dadf 187 LOG_FUNCTION_START((void*)&id,(void*)pAlsData);
vijaynvr 0:bc9f26b5dadf 188 als_set_systemMode(_device_i2c_addr, ALS_START_SINGLESHOT);
vijaynvr 0:bc9f26b5dadf 189
vijaynvr 0:bc9f26b5dadf 190 while (als_get_result_interrupt_status_gpio(_device_i2c_addr) != RES_INT_STAT_GPIO_NEW_SAMPLE_READY)
vijaynvr 0:bc9f26b5dadf 191 {
vijaynvr 0:bc9f26b5dadf 192 timer_wait_us(100);
vijaynvr 0:bc9f26b5dadf 193 }
vijaynvr 0:bc9f26b5dadf 194 pAlsData->lux = als_get_lux(_device_i2c_addr);
vijaynvr 0:bc9f26b5dadf 195 pAlsData->errorStatus = (als_get_result_status(_device_i2c_addr)) >> cErrorDataShift;
vijaynvr 0:bc9f26b5dadf 196
vijaynvr 0:bc9f26b5dadf 197 als_set_system_interrupt_clear(_device_i2c_addr);
vijaynvr 0:bc9f26b5dadf 198 LOG_FUNCTION_END(NULL);
vijaynvr 0:bc9f26b5dadf 199
vijaynvr 0:bc9f26b5dadf 200 return SENSOR_ERROR_NONE;
vijaynvr 0:bc9f26b5dadf 201 }
vijaynvr 0:bc9f26b5dadf 202
vijaynvr 0:bc9f26b5dadf 203 sensor_error get_minimum_delay()
vijaynvr 0:bc9f26b5dadf 204 {
vijaynvr 0:bc9f26b5dadf 205
vijaynvr 0:bc9f26b5dadf 206 return SENSOR_ERROR_NONE;
vijaynvr 0:bc9f26b5dadf 207 }
vijaynvr 0:bc9f26b5dadf 208