Rename library

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   VL53L3CX_NoShield_1Sensor_poll_Mb06x VL53L3_NoShield_1Sensor_polling_Mb63 X_NUCLEO_53L3A2 53L3A2_Ranging

Committer:
Charles MacNeill
Date:
Wed Jul 14 12:45:49 2021 +0100
Revision:
5:89031b2f5316
The class files now just are wrappers for the files in the "MODULES" directory.The porting directory includes the mbed interface

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Charles MacNeill 5:89031b2f5316 1
Charles MacNeill 5:89031b2f5316 2 /*
Charles MacNeill 5:89031b2f5316 3 * This file is part of VL53L1 Platform
Charles MacNeill 5:89031b2f5316 4 *
Charles MacNeill 5:89031b2f5316 5 * Copyright (c) 2016, STMicroelectronics - All Rights Reserved
Charles MacNeill 5:89031b2f5316 6 *
Charles MacNeill 5:89031b2f5316 7 * License terms: BSD 3-clause "New" or "Revised" License.
Charles MacNeill 5:89031b2f5316 8 *
Charles MacNeill 5:89031b2f5316 9 * Redistribution and use in source and binary forms, with or without
Charles MacNeill 5:89031b2f5316 10 * modification, are permitted provided that the following conditions are met:
Charles MacNeill 5:89031b2f5316 11 *
Charles MacNeill 5:89031b2f5316 12 * 1. Redistributions of source code must retain the above copyright notice, this
Charles MacNeill 5:89031b2f5316 13 * list of conditions and the following disclaimer.
Charles MacNeill 5:89031b2f5316 14 *
Charles MacNeill 5:89031b2f5316 15 * 2. Redistributions in binary form must reproduce the above copyright notice,
Charles MacNeill 5:89031b2f5316 16 * this list of conditions and the following disclaimer in the documentation
Charles MacNeill 5:89031b2f5316 17 * and/or other materials provided with the distribution.
Charles MacNeill 5:89031b2f5316 18 *
Charles MacNeill 5:89031b2f5316 19 * 3. Neither the name of the copyright holder nor the names of its contributors
Charles MacNeill 5:89031b2f5316 20 * may be used to endorse or promote products derived from this software
Charles MacNeill 5:89031b2f5316 21 * without specific prior written permission.
Charles MacNeill 5:89031b2f5316 22 *
Charles MacNeill 5:89031b2f5316 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Charles MacNeill 5:89031b2f5316 24 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Charles MacNeill 5:89031b2f5316 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Charles MacNeill 5:89031b2f5316 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Charles MacNeill 5:89031b2f5316 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Charles MacNeill 5:89031b2f5316 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Charles MacNeill 5:89031b2f5316 29 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Charles MacNeill 5:89031b2f5316 30 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Charles MacNeill 5:89031b2f5316 31 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Charles MacNeill 5:89031b2f5316 32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Charles MacNeill 5:89031b2f5316 33 *
Charles MacNeill 5:89031b2f5316 34 */
Charles MacNeill 5:89031b2f5316 35
Charles MacNeill 5:89031b2f5316 36 unsigned int i2creadCount = 0;
Charles MacNeill 5:89031b2f5316 37 unsigned int i2cwriteCount = 0;
Charles MacNeill 5:89031b2f5316 38 unsigned char SPI2C_Buffer[256];
Charles MacNeill 5:89031b2f5316 39
Charles MacNeill 5:89031b2f5316 40 #include <mbed_wait_api.h>
Charles MacNeill 5:89031b2f5316 41 #include "vl53lx_platform.h"
Charles MacNeill 5:89031b2f5316 42 #ifndef SMALL_FOOTPRINT
Charles MacNeill 5:89031b2f5316 43 #endif
Charles MacNeill 5:89031b2f5316 44 #include "vl53lx_platform_log.h"
Charles MacNeill 5:89031b2f5316 45 #include "vl53lx_api.h"
Charles MacNeill 5:89031b2f5316 46 #include "spi_interface.h"
Charles MacNeill 5:89031b2f5316 47 #include <string.h>
Charles MacNeill 5:89031b2f5316 48 #include <time.h>
Charles MacNeill 5:89031b2f5316 49 #include <math.h>
Charles MacNeill 5:89031b2f5316 50
Charles MacNeill 5:89031b2f5316 51
Charles MacNeill 5:89031b2f5316 52 extern void wait_ms(int ms);
Charles MacNeill 5:89031b2f5316 53
Charles MacNeill 5:89031b2f5316 54
Charles MacNeill 5:89031b2f5316 55
Charles MacNeill 5:89031b2f5316 56 #define I2C_TIME_OUT_BASE 10
Charles MacNeill 5:89031b2f5316 57 #define I2C_TIME_OUT_BYTE 1
Charles MacNeill 5:89031b2f5316 58
Charles MacNeill 5:89031b2f5316 59 #ifdef VL53L1_LOG_ENABLE
Charles MacNeill 5:89031b2f5316 60 #define trace_print(level, ...) VL53L1_trace_print_module_function(VL53L1_TRACE_MODULE_PLATFORM, level, VL53L1_TRACE_FUNCTION_NONE, ##__VA_ARGS__)
Charles MacNeill 5:89031b2f5316 61 #define trace_i2c(...) VL53L1_trace_print_module_function(VL53L1_TRACE_MODULE_NONE, VL53L1_TRACE_LEVEL_NONE, VL53L1_TRACE_FUNCTION_I2C, ##__VA_ARGS__)
Charles MacNeill 5:89031b2f5316 62 #endif
Charles MacNeill 5:89031b2f5316 63
Charles MacNeill 5:89031b2f5316 64 /* when not customized by application define dummy one */
Charles MacNeill 5:89031b2f5316 65 #ifndef VL53L1_GetI2cBus
Charles MacNeill 5:89031b2f5316 66 /** This macro can be overloaded by user to enforce i2c sharing in RTOS context
Charles MacNeill 5:89031b2f5316 67 */
Charles MacNeill 5:89031b2f5316 68 # define VL53L1_GetI2cBus(...) (void)0
Charles MacNeill 5:89031b2f5316 69 #endif
Charles MacNeill 5:89031b2f5316 70
Charles MacNeill 5:89031b2f5316 71 #ifndef VL53L1_PutI2cBus
Charles MacNeill 5:89031b2f5316 72 /** This macro can be overloaded by user to enforce i2c sharing in RTOS context
Charles MacNeill 5:89031b2f5316 73 */
Charles MacNeill 5:89031b2f5316 74 # define VL53L1_PutI2cBus(...) (void)0
Charles MacNeill 5:89031b2f5316 75 #endif
Charles MacNeill 5:89031b2f5316 76
Charles MacNeill 5:89031b2f5316 77 uint8_t _I2CBuffer[256];
Charles MacNeill 5:89031b2f5316 78
Charles MacNeill 5:89031b2f5316 79
Charles MacNeill 5:89031b2f5316 80 VL53LX_Error VL53LX_WriteMulti(VL53LX_DEV Dev, uint16_t index, uint8_t *pdata, uint32_t count)
Charles MacNeill 5:89031b2f5316 81 {
Charles MacNeill 5:89031b2f5316 82 int status;
Charles MacNeill 5:89031b2f5316 83 // printf("VL53LX_WriteMulti %d %d %d \n",Dev->IO.Address,index,count);
Charles MacNeill 5:89031b2f5316 84 status = v53l1x_i2c_write_if(pdata,Dev->IO.Address, index,count);
Charles MacNeill 5:89031b2f5316 85 // printf("VL53LX_WriteMulti %d %d %d %d\n",Dev->IO.Address,index,count,status);
Charles MacNeill 5:89031b2f5316 86 return status;
Charles MacNeill 5:89031b2f5316 87 }
Charles MacNeill 5:89031b2f5316 88
Charles MacNeill 5:89031b2f5316 89
Charles MacNeill 5:89031b2f5316 90 VL53LX_Error VL53LX_ReadMulti(VL53LX_DEV Dev, uint16_t index, uint8_t *pdata, uint32_t count)
Charles MacNeill 5:89031b2f5316 91 {
Charles MacNeill 5:89031b2f5316 92 int status;
Charles MacNeill 5:89031b2f5316 93
Charles MacNeill 5:89031b2f5316 94 status = v53l1x_i2c_read_if(pdata,Dev->IO.Address, index,count);
Charles MacNeill 5:89031b2f5316 95
Charles MacNeill 5:89031b2f5316 96 return status;
Charles MacNeill 5:89031b2f5316 97 }
Charles MacNeill 5:89031b2f5316 98
Charles MacNeill 5:89031b2f5316 99
Charles MacNeill 5:89031b2f5316 100 VL53LX_Error VL53LX_WrByte(VL53LX_DEV Dev, uint16_t index, uint8_t data)
Charles MacNeill 5:89031b2f5316 101 {
Charles MacNeill 5:89031b2f5316 102 int status=0;
Charles MacNeill 5:89031b2f5316 103 // printf("VL53LX_WrByte arrived %d %d %d\n",index,data,Dev->IO.Address);
Charles MacNeill 5:89031b2f5316 104 status = v53l1x_i2c_write_if(&data,Dev->IO.Address, index,1);
Charles MacNeill 5:89031b2f5316 105 // printf("VL53LX_WrByte end %d \n",status);
Charles MacNeill 5:89031b2f5316 106 return status;
Charles MacNeill 5:89031b2f5316 107 }
Charles MacNeill 5:89031b2f5316 108
Charles MacNeill 5:89031b2f5316 109
Charles MacNeill 5:89031b2f5316 110 VL53LX_Error VL53LX_WrWord(VL53LX_DEV Dev, uint16_t index, uint16_t data)
Charles MacNeill 5:89031b2f5316 111 {
Charles MacNeill 5:89031b2f5316 112 int status;
Charles MacNeill 5:89031b2f5316 113 uint8_t buffer[2];
Charles MacNeill 5:89031b2f5316 114
Charles MacNeill 5:89031b2f5316 115 buffer[0] = data >> 8;
Charles MacNeill 5:89031b2f5316 116 buffer[1] = data & 0x00FF;
Charles MacNeill 5:89031b2f5316 117 status = v53l1x_i2c_write_if((uint8_t *)buffer,Dev->IO.Address, index,2);
Charles MacNeill 5:89031b2f5316 118 return status;
Charles MacNeill 5:89031b2f5316 119 }
Charles MacNeill 5:89031b2f5316 120
Charles MacNeill 5:89031b2f5316 121
Charles MacNeill 5:89031b2f5316 122 VL53LX_Error VL53LX_WrDWord(VL53LX_DEV Dev, uint16_t index, uint32_t data)
Charles MacNeill 5:89031b2f5316 123 {
Charles MacNeill 5:89031b2f5316 124 int status;
Charles MacNeill 5:89031b2f5316 125 uint8_t buffer[4];
Charles MacNeill 5:89031b2f5316 126
Charles MacNeill 5:89031b2f5316 127 buffer[0] = (data >> 24) & 0xFF;
Charles MacNeill 5:89031b2f5316 128 buffer[1] = (data >> 16) & 0xFF;
Charles MacNeill 5:89031b2f5316 129 buffer[2] = (data >> 8) & 0xFF;
Charles MacNeill 5:89031b2f5316 130 buffer[3] = (data >> 0) & 0xFF;
Charles MacNeill 5:89031b2f5316 131 status = v53l1x_i2c_write_if((uint8_t *)buffer,Dev->IO.Address, index,4);
Charles MacNeill 5:89031b2f5316 132 return status;
Charles MacNeill 5:89031b2f5316 133 }
Charles MacNeill 5:89031b2f5316 134
Charles MacNeill 5:89031b2f5316 135 VL53LX_Error VL53LX_UpdateByte(VL53LX_DEV Dev, uint16_t index, uint8_t AndData, uint8_t OrData)
Charles MacNeill 5:89031b2f5316 136 {
Charles MacNeill 5:89031b2f5316 137 int status;
Charles MacNeill 5:89031b2f5316 138 uint8_t buffer = 0;
Charles MacNeill 5:89031b2f5316 139
Charles MacNeill 5:89031b2f5316 140 /* read data direct onto buffer */
Charles MacNeill 5:89031b2f5316 141 status = v53l1x_i2c_read_if(&buffer,Dev->IO.Address, index,1);
Charles MacNeill 5:89031b2f5316 142 if (!status)
Charles MacNeill 5:89031b2f5316 143 {
Charles MacNeill 5:89031b2f5316 144 buffer = (buffer & AndData) | OrData;
Charles MacNeill 5:89031b2f5316 145 status = v53l1x_i2c_write_if(&buffer,Dev->IO.Address, index,1);
Charles MacNeill 5:89031b2f5316 146 }
Charles MacNeill 5:89031b2f5316 147 return status;
Charles MacNeill 5:89031b2f5316 148 }
Charles MacNeill 5:89031b2f5316 149
Charles MacNeill 5:89031b2f5316 150 VL53LX_Error VL53LX_RdByte(VL53LX_DEV Dev, uint16_t index, uint8_t *data)
Charles MacNeill 5:89031b2f5316 151 {
Charles MacNeill 5:89031b2f5316 152 int status;
Charles MacNeill 5:89031b2f5316 153
Charles MacNeill 5:89031b2f5316 154 status = v53l1x_i2c_read_if(data,Dev->IO.Address, index,1); //is this correct
Charles MacNeill 5:89031b2f5316 155 // printf("VL53L1_RdByte %d %d %d\n",Dev->IO.Address, status,*data);
Charles MacNeill 5:89031b2f5316 156 if(status)
Charles MacNeill 5:89031b2f5316 157 return -1;
Charles MacNeill 5:89031b2f5316 158
Charles MacNeill 5:89031b2f5316 159 return 0;
Charles MacNeill 5:89031b2f5316 160 }
Charles MacNeill 5:89031b2f5316 161
Charles MacNeill 5:89031b2f5316 162
Charles MacNeill 5:89031b2f5316 163 VL53LX_Error VL53LX_RdWord(VL53LX_DEV Dev, uint16_t index, uint16_t *data)
Charles MacNeill 5:89031b2f5316 164 {
Charles MacNeill 5:89031b2f5316 165 int status;
Charles MacNeill 5:89031b2f5316 166 uint8_t buffer[2] = {0,0};
Charles MacNeill 5:89031b2f5316 167
Charles MacNeill 5:89031b2f5316 168 // printf("VL53LX_RdWord %d %d %d %d\n",index,Dev->IO.Address, status,*data);
Charles MacNeill 5:89031b2f5316 169 status = v53l1x_i2c_read_if(buffer,Dev->IO.Address, index,2); //is this correct
Charles MacNeill 5:89031b2f5316 170 if (!status)
Charles MacNeill 5:89031b2f5316 171 {
Charles MacNeill 5:89031b2f5316 172 *data = (buffer[0] << 8) + buffer[1];
Charles MacNeill 5:89031b2f5316 173 }
Charles MacNeill 5:89031b2f5316 174 // printf("VL53LX_RdWord %d %d %d %d\n",index,Dev->IO.Address, status,*data);
Charles MacNeill 5:89031b2f5316 175 return status;
Charles MacNeill 5:89031b2f5316 176
Charles MacNeill 5:89031b2f5316 177 }
Charles MacNeill 5:89031b2f5316 178
Charles MacNeill 5:89031b2f5316 179
Charles MacNeill 5:89031b2f5316 180
Charles MacNeill 5:89031b2f5316 181 VL53LX_Error VL53LX_RdDWord(VL53LX_DEV Dev, uint16_t index, uint32_t *data)
Charles MacNeill 5:89031b2f5316 182 {
Charles MacNeill 5:89031b2f5316 183 int status;
Charles MacNeill 5:89031b2f5316 184 uint8_t buffer[4] = {0,0,0,0};
Charles MacNeill 5:89031b2f5316 185
Charles MacNeill 5:89031b2f5316 186 status = v53l1x_i2c_read_if(buffer,Dev->IO.Address, index,4);
Charles MacNeill 5:89031b2f5316 187 if(!status)
Charles MacNeill 5:89031b2f5316 188 {
Charles MacNeill 5:89031b2f5316 189 *data = (buffer[0] << 24) + (buffer[1] << 16) + (buffer[2] << 8) + buffer[3];
Charles MacNeill 5:89031b2f5316 190 }
Charles MacNeill 5:89031b2f5316 191 return status;
Charles MacNeill 5:89031b2f5316 192
Charles MacNeill 5:89031b2f5316 193 }
Charles MacNeill 5:89031b2f5316 194
Charles MacNeill 5:89031b2f5316 195
Charles MacNeill 5:89031b2f5316 196 VL53LX_Error VL53LX_GetTickCount(VL53LX_DEV Dev, uint32_t *ptick_count_ms)
Charles MacNeill 5:89031b2f5316 197 {
Charles MacNeill 5:89031b2f5316 198
Charles MacNeill 5:89031b2f5316 199 /* Returns current tick count in [ms] */
Charles MacNeill 5:89031b2f5316 200
Charles MacNeill 5:89031b2f5316 201 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 202
Charles MacNeill 5:89031b2f5316 203 GetTickCount( ptick_count_ms);
Charles MacNeill 5:89031b2f5316 204
Charles MacNeill 5:89031b2f5316 205 #ifdef VL53L1_LOG_ENABLE
Charles MacNeill 5:89031b2f5316 206 trace_print(
Charles MacNeill 5:89031b2f5316 207 VL53L1_TRACE_LEVEL_DEBUG,
Charles MacNeill 5:89031b2f5316 208 "VL53L1_GetTickCount() = %5u ms;\n",
Charles MacNeill 5:89031b2f5316 209 *ptick_count_ms);
Charles MacNeill 5:89031b2f5316 210 #endif
Charles MacNeill 5:89031b2f5316 211
Charles MacNeill 5:89031b2f5316 212 return status;
Charles MacNeill 5:89031b2f5316 213 }
Charles MacNeill 5:89031b2f5316 214
Charles MacNeill 5:89031b2f5316 215
Charles MacNeill 5:89031b2f5316 216 #define trace_print(level, ...) \
Charles MacNeill 5:89031b2f5316 217 _LOG_TRACE_PRINT(VL53L1_TRACE_MODULE_PLATFORM, \
Charles MacNeill 5:89031b2f5316 218 level, VL53L1_TRACE_FUNCTION_NONE, ##__VA_ARGS__)
Charles MacNeill 5:89031b2f5316 219
Charles MacNeill 5:89031b2f5316 220 #define trace_i2c(...) \
Charles MacNeill 5:89031b2f5316 221 _LOG_TRACE_PRINT(VL53L1_TRACE_MODULE_NONE, \
Charles MacNeill 5:89031b2f5316 222 VL53L1_TRACE_LEVEL_NONE, VL53L1_TRACE_FUNCTION_I2C, ##__VA_ARGS__)
Charles MacNeill 5:89031b2f5316 223
Charles MacNeill 5:89031b2f5316 224
Charles MacNeill 5:89031b2f5316 225 VL53LX_Error VL53LX_GetTimerFrequency(int32_t *ptimer_freq_hz)
Charles MacNeill 5:89031b2f5316 226 {
Charles MacNeill 5:89031b2f5316 227 *ptimer_freq_hz = 0;
Charles MacNeill 5:89031b2f5316 228
Charles MacNeill 5:89031b2f5316 229 trace_print(VL53L1_TRACE_LEVEL_INFO, "VL53L1_GetTimerFrequency: Freq : %dHz\n", *ptimer_freq_hz);
Charles MacNeill 5:89031b2f5316 230 return VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 231 }
Charles MacNeill 5:89031b2f5316 232
Charles MacNeill 5:89031b2f5316 233
Charles MacNeill 5:89031b2f5316 234
Charles MacNeill 5:89031b2f5316 235 VL53LX_Error VL53LX_WaitMs(VL53LX_DEV dev, int32_t wait_time){
Charles MacNeill 5:89031b2f5316 236 // (void)pdev;
Charles MacNeill 5:89031b2f5316 237 wait_ms(wait_time);
Charles MacNeill 5:89031b2f5316 238 return VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 239 }
Charles MacNeill 5:89031b2f5316 240
Charles MacNeill 5:89031b2f5316 241
Charles MacNeill 5:89031b2f5316 242
Charles MacNeill 5:89031b2f5316 243 VL53LX_Error VL53LX_WaitUs(VL53LX_DEV dev, int32_t wait_time){
Charles MacNeill 5:89031b2f5316 244 // (void)pdev;
Charles MacNeill 5:89031b2f5316 245 wait_us(wait_time);
Charles MacNeill 5:89031b2f5316 246 return VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 247 }
Charles MacNeill 5:89031b2f5316 248
Charles MacNeill 5:89031b2f5316 249 VL53LX_Error VL53LX_WaitValueMaskEx(
Charles MacNeill 5:89031b2f5316 250 VL53LX_DEV Dev,
Charles MacNeill 5:89031b2f5316 251 uint32_t timeout_ms,
Charles MacNeill 5:89031b2f5316 252 uint16_t index,
Charles MacNeill 5:89031b2f5316 253 uint8_t value,
Charles MacNeill 5:89031b2f5316 254 uint8_t mask,
Charles MacNeill 5:89031b2f5316 255 uint32_t poll_delay_ms)
Charles MacNeill 5:89031b2f5316 256 {
Charles MacNeill 5:89031b2f5316 257
Charles MacNeill 5:89031b2f5316 258 /*
Charles MacNeill 5:89031b2f5316 259 * Platform implementation of WaitValueMaskEx V2WReg script command
Charles MacNeill 5:89031b2f5316 260 *
Charles MacNeill 5:89031b2f5316 261 * WaitValueMaskEx(
Charles MacNeill 5:89031b2f5316 262 * duration_ms,
Charles MacNeill 5:89031b2f5316 263 * index,
Charles MacNeill 5:89031b2f5316 264 * value,
Charles MacNeill 5:89031b2f5316 265 * mask,
Charles MacNeill 5:89031b2f5316 266 * poll_delay_ms);
Charles MacNeill 5:89031b2f5316 267 */
Charles MacNeill 5:89031b2f5316 268
Charles MacNeill 5:89031b2f5316 269 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 270 uint32_t start_time_ms = 0;
Charles MacNeill 5:89031b2f5316 271 uint32_t current_time_ms = 0;
Charles MacNeill 5:89031b2f5316 272 uint32_t polling_time_ms = 0;
Charles MacNeill 5:89031b2f5316 273 uint8_t byte_value = 0;
Charles MacNeill 5:89031b2f5316 274 uint8_t found = 0;
Charles MacNeill 5:89031b2f5316 275 #ifdef VL53L1_LOG_ENABLE
Charles MacNeill 5:89031b2f5316 276 uint8_t trace_functions = VL53L1_TRACE_FUNCTION_NONE;
Charles MacNeill 5:89031b2f5316 277 #endif
Charles MacNeill 5:89031b2f5316 278
Charles MacNeill 5:89031b2f5316 279 char register_name[VL53LX_MAX_STRING_LENGTH];
Charles MacNeill 5:89031b2f5316 280
Charles MacNeill 5:89031b2f5316 281 /* look up register name */
Charles MacNeill 5:89031b2f5316 282 #ifdef PAL_EXTENDED
Charles MacNeill 5:89031b2f5316 283 VL53LX_get_register_name(
Charles MacNeill 5:89031b2f5316 284 index,
Charles MacNeill 5:89031b2f5316 285 register_name);
Charles MacNeill 5:89031b2f5316 286 #else
Charles MacNeill 5:89031b2f5316 287 // VL53L1_COPYSTRING(register_name, "");
Charles MacNeill 5:89031b2f5316 288 #endif
Charles MacNeill 5:89031b2f5316 289
Charles MacNeill 5:89031b2f5316 290 /* Output to I2C logger for FMT/DFT */
Charles MacNeill 5:89031b2f5316 291
Charles MacNeill 5:89031b2f5316 292 /*trace_i2c("WaitValueMaskEx(%5d, 0x%04X, 0x%02X, 0x%02X, %5d);\n",
Charles MacNeill 5:89031b2f5316 293 timeout_ms, index, value, mask, poll_delay_ms); */
Charles MacNeill 5:89031b2f5316 294 trace_i2c("WaitValueMaskEx(%5d, %s, 0x%02X, 0x%02X, %5d);\n",
Charles MacNeill 5:89031b2f5316 295 timeout_ms, register_name, value, mask, poll_delay_ms);
Charles MacNeill 5:89031b2f5316 296
Charles MacNeill 5:89031b2f5316 297 /* calculate time limit in absolute time */
Charles MacNeill 5:89031b2f5316 298
Charles MacNeill 5:89031b2f5316 299 VL53LX_GetTickCount(Dev,&start_time_ms);
Charles MacNeill 5:89031b2f5316 300
Charles MacNeill 5:89031b2f5316 301
Charles MacNeill 5:89031b2f5316 302 wait_ms(10);
Charles MacNeill 5:89031b2f5316 303
Charles MacNeill 5:89031b2f5316 304 /* remember current trace functions and temporarily disable
Charles MacNeill 5:89031b2f5316 305 * function logging
Charles MacNeill 5:89031b2f5316 306 */
Charles MacNeill 5:89031b2f5316 307
Charles MacNeill 5:89031b2f5316 308 #ifdef VL53L1_LOG_ENABLE
Charles MacNeill 5:89031b2f5316 309 trace_functions = VL53L1_get_trace_functions();
Charles MacNeill 5:89031b2f5316 310 VL53L1_set_trace_functions(VL53L1_TRACE_FUNCTION_NONE);
Charles MacNeill 5:89031b2f5316 311 #endif
Charles MacNeill 5:89031b2f5316 312
Charles MacNeill 5:89031b2f5316 313 /* wait until value is found, timeout reached on error occurred */
Charles MacNeill 5:89031b2f5316 314 while ((status == VL53LX_ERROR_NONE) &&
Charles MacNeill 5:89031b2f5316 315 (polling_time_ms < timeout_ms) &&
Charles MacNeill 5:89031b2f5316 316 (found == 0)) {
Charles MacNeill 5:89031b2f5316 317
Charles MacNeill 5:89031b2f5316 318 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 319 status = VL53LX_RdByte(
Charles MacNeill 5:89031b2f5316 320 Dev,
Charles MacNeill 5:89031b2f5316 321 index,
Charles MacNeill 5:89031b2f5316 322 &byte_value);
Charles MacNeill 5:89031b2f5316 323
Charles MacNeill 5:89031b2f5316 324 if ((byte_value & mask) == value)
Charles MacNeill 5:89031b2f5316 325 found = 1;
Charles MacNeill 5:89031b2f5316 326 if (status)
Charles MacNeill 5:89031b2f5316 327 {
Charles MacNeill 5:89031b2f5316 328 printf("VL53L1_WaitValueMaskEx 1 %d %d\n",Dev->IO.Address,status);
Charles MacNeill 5:89031b2f5316 329 }
Charles MacNeill 5:89031b2f5316 330
Charles MacNeill 5:89031b2f5316 331 if (status == VL53LX_ERROR_NONE &&
Charles MacNeill 5:89031b2f5316 332 found == 0 &&
Charles MacNeill 5:89031b2f5316 333 poll_delay_ms > 0)
Charles MacNeill 5:89031b2f5316 334 status = VL53LX_WaitMs(
Charles MacNeill 5:89031b2f5316 335 Dev,
Charles MacNeill 5:89031b2f5316 336 poll_delay_ms);
Charles MacNeill 5:89031b2f5316 337 /* Update polling time (Compare difference rather than absolute to
Charles MacNeill 5:89031b2f5316 338 negate 32bit wrap around issue) */
Charles MacNeill 5:89031b2f5316 339 if (status)
Charles MacNeill 5:89031b2f5316 340 {
Charles MacNeill 5:89031b2f5316 341 printf("VL53L1_WaitValueMaskEx 2 %d\n",status);
Charles MacNeill 5:89031b2f5316 342 }
Charles MacNeill 5:89031b2f5316 343 VL53LX_GetTickCount(Dev,&current_time_ms);
Charles MacNeill 5:89031b2f5316 344 polling_time_ms = current_time_ms - start_time_ms;
Charles MacNeill 5:89031b2f5316 345
Charles MacNeill 5:89031b2f5316 346 }
Charles MacNeill 5:89031b2f5316 347 // printf("polling_time_ms %d \n",polling_time_ms);
Charles MacNeill 5:89031b2f5316 348 #ifdef VL53L1_LOG_ENABLE
Charles MacNeill 5:89031b2f5316 349 /* Restore function logging */
Charles MacNeill 5:89031b2f5316 350 VL53L1_set_trace_functions(trace_functions);
Charles MacNeill 5:89031b2f5316 351 #endif
Charles MacNeill 5:89031b2f5316 352
Charles MacNeill 5:89031b2f5316 353 if (found == 0 && status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 354 status = VL53LX_ERROR_TIME_OUT;
Charles MacNeill 5:89031b2f5316 355
Charles MacNeill 5:89031b2f5316 356 return status;
Charles MacNeill 5:89031b2f5316 357 }
Charles MacNeill 5:89031b2f5316 358
Charles MacNeill 5:89031b2f5316 359
Charles MacNeill 5:89031b2f5316 360
Charles MacNeill 5:89031b2f5316 361 int32_t GetTickCountMs()
Charles MacNeill 5:89031b2f5316 362 {
Charles MacNeill 5:89031b2f5316 363
Charles MacNeill 5:89031b2f5316 364 /* Returns current tick count in [ms] */
Charles MacNeill 5:89031b2f5316 365 uint32_t ptick_count_ms;
Charles MacNeill 5:89031b2f5316 366 // int32_t status = us_ticker_read();
Charles MacNeill 5:89031b2f5316 367 int32_t status = GetTickCount(&ptick_count_ms);
Charles MacNeill 5:89031b2f5316 368 return ptick_count_ms;
Charles MacNeill 5:89031b2f5316 369 }
Charles MacNeill 5:89031b2f5316 370
Charles MacNeill 5:89031b2f5316 371
Charles MacNeill 5:89031b2f5316 372
Charles MacNeill 5:89031b2f5316 373
Charles MacNeill 5:89031b2f5316 374
Charles MacNeill 5:89031b2f5316 375