vlx lib
vl6180x_high_level_api.cpp@0:bc9f26b5dadf, 2015-02-08 (annotated)
- Committer:
- vijaynvr
- Date:
- Sun Feb 08 14:26:51 2015 +0000
- Revision:
- 0:bc9f26b5dadf
working
Who changed what in which revision?
User | Revision | Line number | New 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 |