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:
charlesmn
Date:
Wed Jul 21 14:07:59 2021 +0000
Revision:
7:7f1bbf370283
Parent:
5:89031b2f5316
Moved vl53l3cx_class.cpp and .h to 53l3a2_RangingClass

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Charles MacNeill 5:89031b2f5316 1
Charles MacNeill 5:89031b2f5316 2 // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
Charles MacNeill 5:89031b2f5316 3 /******************************************************************************
Charles MacNeill 5:89031b2f5316 4 * Copyright (c) 2020, STMicroelectronics - All Rights Reserved
Charles MacNeill 5:89031b2f5316 5
Charles MacNeill 5:89031b2f5316 6 This file is part of VL53LX and is dual licensed,
Charles MacNeill 5:89031b2f5316 7 either GPL-2.0+
Charles MacNeill 5:89031b2f5316 8 or 'BSD 3-clause "New" or "Revised" License' , at your option.
Charles MacNeill 5:89031b2f5316 9 ******************************************************************************
Charles MacNeill 5:89031b2f5316 10 */
Charles MacNeill 5:89031b2f5316 11
Charles MacNeill 5:89031b2f5316 12
Charles MacNeill 5:89031b2f5316 13
Charles MacNeill 5:89031b2f5316 14
Charles MacNeill 5:89031b2f5316 15
Charles MacNeill 5:89031b2f5316 16 #include "vl53lx_platform.h"
Charles MacNeill 5:89031b2f5316 17 #include "vl53lx_ll_def.h"
Charles MacNeill 5:89031b2f5316 18 #include "vl53lx_ll_device.h"
Charles MacNeill 5:89031b2f5316 19 #include "vl53lx_core.h"
Charles MacNeill 5:89031b2f5316 20 #include "vl53lx_silicon_core.h"
Charles MacNeill 5:89031b2f5316 21 #include "vl53lx_wait.h"
Charles MacNeill 5:89031b2f5316 22 #include "vl53lx_register_settings.h"
Charles MacNeill 5:89031b2f5316 23
Charles MacNeill 5:89031b2f5316 24
Charles MacNeill 5:89031b2f5316 25 #define LOG_FUNCTION_START(fmt, ...) \
Charles MacNeill 5:89031b2f5316 26 _LOG_FUNCTION_START(VL53LX_TRACE_MODULE_CORE, fmt, ##__VA_ARGS__)
Charles MacNeill 5:89031b2f5316 27 #define LOG_FUNCTION_END(status, ...) \
Charles MacNeill 5:89031b2f5316 28 _LOG_FUNCTION_END(VL53LX_TRACE_MODULE_CORE, status, ##__VA_ARGS__)
Charles MacNeill 5:89031b2f5316 29 #define LOG_FUNCTION_END_FMT(status, fmt, ...) \
Charles MacNeill 5:89031b2f5316 30 _LOG_FUNCTION_END_FMT(VL53LX_TRACE_MODULE_CORE, status, \
Charles MacNeill 5:89031b2f5316 31 fmt, ##__VA_ARGS__)
Charles MacNeill 5:89031b2f5316 32
Charles MacNeill 5:89031b2f5316 33
Charles MacNeill 5:89031b2f5316 34 VL53LX_Error VL53LX_wait_for_boot_completion(
Charles MacNeill 5:89031b2f5316 35 VL53LX_DEV Dev)
Charles MacNeill 5:89031b2f5316 36 {
Charles MacNeill 5:89031b2f5316 37
Charles MacNeill 5:89031b2f5316 38
Charles MacNeill 5:89031b2f5316 39
Charles MacNeill 5:89031b2f5316 40 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 41 VL53LX_LLDriverData_t *pdev = VL53LXDevStructGetLLDriverHandle(Dev);
Charles MacNeill 5:89031b2f5316 42
Charles MacNeill 5:89031b2f5316 43 uint8_t fw_ready = 0;
Charles MacNeill 5:89031b2f5316 44
Charles MacNeill 5:89031b2f5316 45 LOG_FUNCTION_START("");
Charles MacNeill 5:89031b2f5316 46
Charles MacNeill 5:89031b2f5316 47 if (pdev->wait_method == VL53LX_WAIT_METHOD_BLOCKING) {
Charles MacNeill 5:89031b2f5316 48
Charles MacNeill 5:89031b2f5316 49
Charles MacNeill 5:89031b2f5316 50
Charles MacNeill 5:89031b2f5316 51 status =
Charles MacNeill 5:89031b2f5316 52 VL53LX_poll_for_boot_completion(
Charles MacNeill 5:89031b2f5316 53 Dev,
Charles MacNeill 5:89031b2f5316 54 VL53LX_BOOT_COMPLETION_POLLING_TIMEOUT_MS);
Charles MacNeill 5:89031b2f5316 55
Charles MacNeill 5:89031b2f5316 56 } else {
Charles MacNeill 5:89031b2f5316 57
Charles MacNeill 5:89031b2f5316 58
Charles MacNeill 5:89031b2f5316 59
Charles MacNeill 5:89031b2f5316 60 fw_ready = 0;
Charles MacNeill 5:89031b2f5316 61 while (fw_ready == 0x00 && status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 62 status = VL53LX_is_boot_complete(
Charles MacNeill 5:89031b2f5316 63 Dev,
Charles MacNeill 5:89031b2f5316 64 &fw_ready);
Charles MacNeill 5:89031b2f5316 65
Charles MacNeill 5:89031b2f5316 66 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 67 status = VL53LX_WaitMs(
Charles MacNeill 5:89031b2f5316 68 Dev,
Charles MacNeill 5:89031b2f5316 69 VL53LX_POLLING_DELAY_MS);
Charles MacNeill 5:89031b2f5316 70 }
Charles MacNeill 5:89031b2f5316 71 }
Charles MacNeill 5:89031b2f5316 72 }
Charles MacNeill 5:89031b2f5316 73
Charles MacNeill 5:89031b2f5316 74 LOG_FUNCTION_END(status);
Charles MacNeill 5:89031b2f5316 75
Charles MacNeill 5:89031b2f5316 76 return status;
Charles MacNeill 5:89031b2f5316 77
Charles MacNeill 5:89031b2f5316 78 }
Charles MacNeill 5:89031b2f5316 79
Charles MacNeill 5:89031b2f5316 80
Charles MacNeill 5:89031b2f5316 81 VL53LX_Error VL53LX_wait_for_firmware_ready(
Charles MacNeill 5:89031b2f5316 82 VL53LX_DEV Dev)
Charles MacNeill 5:89031b2f5316 83 {
Charles MacNeill 5:89031b2f5316 84
Charles MacNeill 5:89031b2f5316 85
Charles MacNeill 5:89031b2f5316 86
Charles MacNeill 5:89031b2f5316 87 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 88 VL53LX_LLDriverData_t *pdev = VL53LXDevStructGetLLDriverHandle(Dev);
Charles MacNeill 5:89031b2f5316 89
Charles MacNeill 5:89031b2f5316 90 uint8_t fw_ready = 0;
Charles MacNeill 5:89031b2f5316 91 uint8_t mode_start = 0;
Charles MacNeill 5:89031b2f5316 92
Charles MacNeill 5:89031b2f5316 93 LOG_FUNCTION_START("");
Charles MacNeill 5:89031b2f5316 94
Charles MacNeill 5:89031b2f5316 95
Charles MacNeill 5:89031b2f5316 96 mode_start =
Charles MacNeill 5:89031b2f5316 97 pdev->sys_ctrl.system__mode_start &
Charles MacNeill 5:89031b2f5316 98 VL53LX_DEVICEMEASUREMENTMODE_MODE_MASK;
Charles MacNeill 5:89031b2f5316 99
Charles MacNeill 5:89031b2f5316 100
Charles MacNeill 5:89031b2f5316 101
Charles MacNeill 5:89031b2f5316 102 if ((mode_start == VL53LX_DEVICEMEASUREMENTMODE_TIMED) ||
Charles MacNeill 5:89031b2f5316 103 (mode_start == VL53LX_DEVICEMEASUREMENTMODE_SINGLESHOT)) {
Charles MacNeill 5:89031b2f5316 104
Charles MacNeill 5:89031b2f5316 105 if (pdev->wait_method == VL53LX_WAIT_METHOD_BLOCKING) {
Charles MacNeill 5:89031b2f5316 106
Charles MacNeill 5:89031b2f5316 107
Charles MacNeill 5:89031b2f5316 108
Charles MacNeill 5:89031b2f5316 109 status =
Charles MacNeill 5:89031b2f5316 110 VL53LX_poll_for_firmware_ready(
Charles MacNeill 5:89031b2f5316 111 Dev,
Charles MacNeill 5:89031b2f5316 112 VL53LX_RANGE_COMPLETION_POLLING_TIMEOUT_MS);
Charles MacNeill 5:89031b2f5316 113
Charles MacNeill 5:89031b2f5316 114 } else {
Charles MacNeill 5:89031b2f5316 115
Charles MacNeill 5:89031b2f5316 116
Charles MacNeill 5:89031b2f5316 117
Charles MacNeill 5:89031b2f5316 118 fw_ready = 0;
Charles MacNeill 5:89031b2f5316 119 while (fw_ready == 0x00 && status ==
Charles MacNeill 5:89031b2f5316 120 VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 121 status = VL53LX_is_firmware_ready(
Charles MacNeill 5:89031b2f5316 122 Dev,
Charles MacNeill 5:89031b2f5316 123 &fw_ready);
Charles MacNeill 5:89031b2f5316 124
Charles MacNeill 5:89031b2f5316 125 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 126 status = VL53LX_WaitMs(
Charles MacNeill 5:89031b2f5316 127 Dev,
Charles MacNeill 5:89031b2f5316 128 VL53LX_POLLING_DELAY_MS);
Charles MacNeill 5:89031b2f5316 129 }
Charles MacNeill 5:89031b2f5316 130 }
Charles MacNeill 5:89031b2f5316 131 }
Charles MacNeill 5:89031b2f5316 132 }
Charles MacNeill 5:89031b2f5316 133
Charles MacNeill 5:89031b2f5316 134 LOG_FUNCTION_END(status);
Charles MacNeill 5:89031b2f5316 135
Charles MacNeill 5:89031b2f5316 136 return status;
Charles MacNeill 5:89031b2f5316 137 }
Charles MacNeill 5:89031b2f5316 138
Charles MacNeill 5:89031b2f5316 139
Charles MacNeill 5:89031b2f5316 140 VL53LX_Error VL53LX_wait_for_range_completion(
Charles MacNeill 5:89031b2f5316 141 VL53LX_DEV Dev)
Charles MacNeill 5:89031b2f5316 142 {
Charles MacNeill 5:89031b2f5316 143
Charles MacNeill 5:89031b2f5316 144
Charles MacNeill 5:89031b2f5316 145
Charles MacNeill 5:89031b2f5316 146 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 147 VL53LX_LLDriverData_t *pdev = VL53LXDevStructGetLLDriverHandle(Dev);
Charles MacNeill 5:89031b2f5316 148
Charles MacNeill 5:89031b2f5316 149 uint8_t data_ready = 0;
Charles MacNeill 5:89031b2f5316 150
Charles MacNeill 5:89031b2f5316 151 LOG_FUNCTION_START("");
Charles MacNeill 5:89031b2f5316 152
Charles MacNeill 5:89031b2f5316 153 if (pdev->wait_method == VL53LX_WAIT_METHOD_BLOCKING) {
Charles MacNeill 5:89031b2f5316 154
Charles MacNeill 5:89031b2f5316 155
Charles MacNeill 5:89031b2f5316 156
Charles MacNeill 5:89031b2f5316 157 status =
Charles MacNeill 5:89031b2f5316 158 VL53LX_poll_for_range_completion(
Charles MacNeill 5:89031b2f5316 159 Dev,
Charles MacNeill 5:89031b2f5316 160 VL53LX_RANGE_COMPLETION_POLLING_TIMEOUT_MS);
Charles MacNeill 5:89031b2f5316 161
Charles MacNeill 5:89031b2f5316 162 } else {
Charles MacNeill 5:89031b2f5316 163
Charles MacNeill 5:89031b2f5316 164
Charles MacNeill 5:89031b2f5316 165
Charles MacNeill 5:89031b2f5316 166 data_ready = 0;
Charles MacNeill 5:89031b2f5316 167 while (data_ready == 0x00 && status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 168 status = VL53LX_is_new_data_ready(
Charles MacNeill 5:89031b2f5316 169 Dev,
Charles MacNeill 5:89031b2f5316 170 &data_ready);
Charles MacNeill 5:89031b2f5316 171
Charles MacNeill 5:89031b2f5316 172 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 173 status = VL53LX_WaitMs(
Charles MacNeill 5:89031b2f5316 174 Dev,
Charles MacNeill 5:89031b2f5316 175 VL53LX_POLLING_DELAY_MS);
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 LOG_FUNCTION_END(status);
Charles MacNeill 5:89031b2f5316 181
Charles MacNeill 5:89031b2f5316 182 return status;
Charles MacNeill 5:89031b2f5316 183 }
Charles MacNeill 5:89031b2f5316 184
Charles MacNeill 5:89031b2f5316 185
Charles MacNeill 5:89031b2f5316 186 VL53LX_Error VL53LX_wait_for_test_completion(
Charles MacNeill 5:89031b2f5316 187 VL53LX_DEV Dev)
Charles MacNeill 5:89031b2f5316 188 {
Charles MacNeill 5:89031b2f5316 189
Charles MacNeill 5:89031b2f5316 190
Charles MacNeill 5:89031b2f5316 191
Charles MacNeill 5:89031b2f5316 192 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 193 VL53LX_LLDriverData_t *pdev = VL53LXDevStructGetLLDriverHandle(Dev);
Charles MacNeill 5:89031b2f5316 194
Charles MacNeill 5:89031b2f5316 195 uint8_t data_ready = 0;
Charles MacNeill 5:89031b2f5316 196
Charles MacNeill 5:89031b2f5316 197 LOG_FUNCTION_START("");
Charles MacNeill 5:89031b2f5316 198
Charles MacNeill 5:89031b2f5316 199 if (pdev->wait_method == VL53LX_WAIT_METHOD_BLOCKING) {
Charles MacNeill 5:89031b2f5316 200
Charles MacNeill 5:89031b2f5316 201
Charles MacNeill 5:89031b2f5316 202
Charles MacNeill 5:89031b2f5316 203 status =
Charles MacNeill 5:89031b2f5316 204 VL53LX_poll_for_range_completion(
Charles MacNeill 5:89031b2f5316 205 Dev,
Charles MacNeill 5:89031b2f5316 206 VL53LX_TEST_COMPLETION_POLLING_TIMEOUT_MS);
Charles MacNeill 5:89031b2f5316 207
Charles MacNeill 5:89031b2f5316 208 } else {
Charles MacNeill 5:89031b2f5316 209
Charles MacNeill 5:89031b2f5316 210
Charles MacNeill 5:89031b2f5316 211
Charles MacNeill 5:89031b2f5316 212 data_ready = 0;
Charles MacNeill 5:89031b2f5316 213 while (data_ready == 0x00 && status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 214 status = VL53LX_is_new_data_ready(
Charles MacNeill 5:89031b2f5316 215 Dev,
Charles MacNeill 5:89031b2f5316 216 &data_ready);
Charles MacNeill 5:89031b2f5316 217
Charles MacNeill 5:89031b2f5316 218 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 219 status = VL53LX_WaitMs(
Charles MacNeill 5:89031b2f5316 220 Dev,
Charles MacNeill 5:89031b2f5316 221 VL53LX_POLLING_DELAY_MS);
Charles MacNeill 5:89031b2f5316 222 }
Charles MacNeill 5:89031b2f5316 223 }
Charles MacNeill 5:89031b2f5316 224 }
Charles MacNeill 5:89031b2f5316 225
Charles MacNeill 5:89031b2f5316 226 LOG_FUNCTION_END(status);
Charles MacNeill 5:89031b2f5316 227
Charles MacNeill 5:89031b2f5316 228 return status;
Charles MacNeill 5:89031b2f5316 229 }
Charles MacNeill 5:89031b2f5316 230
Charles MacNeill 5:89031b2f5316 231
Charles MacNeill 5:89031b2f5316 232
Charles MacNeill 5:89031b2f5316 233
Charles MacNeill 5:89031b2f5316 234 VL53LX_Error VL53LX_is_boot_complete(
Charles MacNeill 5:89031b2f5316 235 VL53LX_DEV Dev,
Charles MacNeill 5:89031b2f5316 236 uint8_t *pready)
Charles MacNeill 5:89031b2f5316 237 {
Charles MacNeill 5:89031b2f5316 238
Charles MacNeill 5:89031b2f5316 239
Charles MacNeill 5:89031b2f5316 240 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 241 uint8_t firmware__system_status = 0;
Charles MacNeill 5:89031b2f5316 242
Charles MacNeill 5:89031b2f5316 243 LOG_FUNCTION_START("");
Charles MacNeill 5:89031b2f5316 244
Charles MacNeill 5:89031b2f5316 245
Charles MacNeill 5:89031b2f5316 246
Charles MacNeill 5:89031b2f5316 247 status =
Charles MacNeill 5:89031b2f5316 248 VL53LX_RdByte(
Charles MacNeill 5:89031b2f5316 249 Dev,
Charles MacNeill 5:89031b2f5316 250 VL53LX_FIRMWARE__SYSTEM_STATUS,
Charles MacNeill 5:89031b2f5316 251 &firmware__system_status);
Charles MacNeill 5:89031b2f5316 252
Charles MacNeill 5:89031b2f5316 253
Charles MacNeill 5:89031b2f5316 254
Charles MacNeill 5:89031b2f5316 255 if ((firmware__system_status & 0x01) == 0x01) {
Charles MacNeill 5:89031b2f5316 256 *pready = 0x01;
Charles MacNeill 5:89031b2f5316 257 VL53LX_init_ll_driver_state(
Charles MacNeill 5:89031b2f5316 258 Dev,
Charles MacNeill 5:89031b2f5316 259 VL53LX_DEVICESTATE_SW_STANDBY);
Charles MacNeill 5:89031b2f5316 260 } else {
Charles MacNeill 5:89031b2f5316 261 *pready = 0x00;
Charles MacNeill 5:89031b2f5316 262 VL53LX_init_ll_driver_state(
Charles MacNeill 5:89031b2f5316 263 Dev,
Charles MacNeill 5:89031b2f5316 264 VL53LX_DEVICESTATE_FW_COLDBOOT);
Charles MacNeill 5:89031b2f5316 265 }
Charles MacNeill 5:89031b2f5316 266
Charles MacNeill 5:89031b2f5316 267 LOG_FUNCTION_END(status);
Charles MacNeill 5:89031b2f5316 268
Charles MacNeill 5:89031b2f5316 269 return status;
Charles MacNeill 5:89031b2f5316 270 }
Charles MacNeill 5:89031b2f5316 271
Charles MacNeill 5:89031b2f5316 272
Charles MacNeill 5:89031b2f5316 273 VL53LX_Error VL53LX_is_firmware_ready(
Charles MacNeill 5:89031b2f5316 274 VL53LX_DEV Dev,
Charles MacNeill 5:89031b2f5316 275 uint8_t *pready)
Charles MacNeill 5:89031b2f5316 276 {
Charles MacNeill 5:89031b2f5316 277
Charles MacNeill 5:89031b2f5316 278
Charles MacNeill 5:89031b2f5316 279 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 280 VL53LX_LLDriverData_t *pdev = VL53LXDevStructGetLLDriverHandle(Dev);
Charles MacNeill 5:89031b2f5316 281
Charles MacNeill 5:89031b2f5316 282 LOG_FUNCTION_START("");
Charles MacNeill 5:89031b2f5316 283
Charles MacNeill 5:89031b2f5316 284 status = VL53LX_is_firmware_ready_silicon(
Charles MacNeill 5:89031b2f5316 285 Dev,
Charles MacNeill 5:89031b2f5316 286 pready);
Charles MacNeill 5:89031b2f5316 287
Charles MacNeill 5:89031b2f5316 288 pdev->fw_ready = *pready;
Charles MacNeill 5:89031b2f5316 289
Charles MacNeill 5:89031b2f5316 290 LOG_FUNCTION_END(status);
Charles MacNeill 5:89031b2f5316 291
Charles MacNeill 5:89031b2f5316 292 return status;
Charles MacNeill 5:89031b2f5316 293 }
Charles MacNeill 5:89031b2f5316 294
Charles MacNeill 5:89031b2f5316 295
Charles MacNeill 5:89031b2f5316 296 VL53LX_Error VL53LX_is_new_data_ready(
Charles MacNeill 5:89031b2f5316 297 VL53LX_DEV Dev,
Charles MacNeill 5:89031b2f5316 298 uint8_t *pready)
Charles MacNeill 5:89031b2f5316 299 {
Charles MacNeill 5:89031b2f5316 300
Charles MacNeill 5:89031b2f5316 301
Charles MacNeill 5:89031b2f5316 302 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 303 VL53LX_LLDriverData_t *pdev = VL53LXDevStructGetLLDriverHandle(Dev);
Charles MacNeill 5:89031b2f5316 304
Charles MacNeill 5:89031b2f5316 305 uint8_t gpio__mux_active_high_hv = 0;
Charles MacNeill 5:89031b2f5316 306 uint8_t gpio__tio_hv_status = 0;
Charles MacNeill 5:89031b2f5316 307 uint8_t interrupt_ready = 0;
Charles MacNeill 5:89031b2f5316 308
Charles MacNeill 5:89031b2f5316 309 LOG_FUNCTION_START("");
Charles MacNeill 5:89031b2f5316 310
Charles MacNeill 5:89031b2f5316 311 gpio__mux_active_high_hv =
Charles MacNeill 5:89031b2f5316 312 pdev->stat_cfg.gpio_hv_mux__ctrl &
Charles MacNeill 5:89031b2f5316 313 VL53LX_DEVICEINTERRUPTLEVEL_ACTIVE_MASK;
Charles MacNeill 5:89031b2f5316 314
Charles MacNeill 5:89031b2f5316 315 if (gpio__mux_active_high_hv == VL53LX_DEVICEINTERRUPTLEVEL_ACTIVE_HIGH)
Charles MacNeill 5:89031b2f5316 316 interrupt_ready = 0x01;
Charles MacNeill 5:89031b2f5316 317 else
Charles MacNeill 5:89031b2f5316 318 interrupt_ready = 0x00;
Charles MacNeill 5:89031b2f5316 319
Charles MacNeill 5:89031b2f5316 320
Charles MacNeill 5:89031b2f5316 321
Charles MacNeill 5:89031b2f5316 322 status = VL53LX_RdByte(
Charles MacNeill 5:89031b2f5316 323 Dev,
Charles MacNeill 5:89031b2f5316 324 VL53LX_GPIO__TIO_HV_STATUS,
Charles MacNeill 5:89031b2f5316 325 &gpio__tio_hv_status);
Charles MacNeill 5:89031b2f5316 326
Charles MacNeill 5:89031b2f5316 327
Charles MacNeill 5:89031b2f5316 328
Charles MacNeill 5:89031b2f5316 329 if ((gpio__tio_hv_status & 0x01) == interrupt_ready)
Charles MacNeill 5:89031b2f5316 330 *pready = 0x01;
Charles MacNeill 5:89031b2f5316 331 else
Charles MacNeill 5:89031b2f5316 332 *pready = 0x00;
Charles MacNeill 5:89031b2f5316 333
Charles MacNeill 5:89031b2f5316 334 LOG_FUNCTION_END(status);
Charles MacNeill 5:89031b2f5316 335
Charles MacNeill 5:89031b2f5316 336 return status;
Charles MacNeill 5:89031b2f5316 337 }
Charles MacNeill 5:89031b2f5316 338
Charles MacNeill 5:89031b2f5316 339
Charles MacNeill 5:89031b2f5316 340
Charles MacNeill 5:89031b2f5316 341
Charles MacNeill 5:89031b2f5316 342 VL53LX_Error VL53LX_poll_for_boot_completion(
Charles MacNeill 5:89031b2f5316 343 VL53LX_DEV Dev,
Charles MacNeill 5:89031b2f5316 344 uint32_t timeout_ms)
Charles MacNeill 5:89031b2f5316 345 {
Charles MacNeill 5:89031b2f5316 346
Charles MacNeill 5:89031b2f5316 347
Charles MacNeill 5:89031b2f5316 348 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 349
Charles MacNeill 5:89031b2f5316 350 LOG_FUNCTION_START("");
Charles MacNeill 5:89031b2f5316 351
Charles MacNeill 5:89031b2f5316 352
Charles MacNeill 5:89031b2f5316 353
Charles MacNeill 5:89031b2f5316 354 status = VL53LX_WaitUs(
Charles MacNeill 5:89031b2f5316 355 Dev,
Charles MacNeill 5:89031b2f5316 356 VL53LX_FIRMWARE_BOOT_TIME_US);
Charles MacNeill 5:89031b2f5316 357
Charles MacNeill 5:89031b2f5316 358 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 359 status =
Charles MacNeill 5:89031b2f5316 360 VL53LX_WaitValueMaskEx(
Charles MacNeill 5:89031b2f5316 361 Dev,
Charles MacNeill 5:89031b2f5316 362 timeout_ms,
Charles MacNeill 5:89031b2f5316 363 VL53LX_FIRMWARE__SYSTEM_STATUS,
Charles MacNeill 5:89031b2f5316 364 0x01,
Charles MacNeill 5:89031b2f5316 365 0x01,
Charles MacNeill 5:89031b2f5316 366 VL53LX_POLLING_DELAY_MS);
Charles MacNeill 5:89031b2f5316 367
Charles MacNeill 5:89031b2f5316 368 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 369 VL53LX_init_ll_driver_state(Dev, VL53LX_DEVICESTATE_SW_STANDBY);
Charles MacNeill 5:89031b2f5316 370
Charles MacNeill 5:89031b2f5316 371 LOG_FUNCTION_END(status);
Charles MacNeill 5:89031b2f5316 372
Charles MacNeill 5:89031b2f5316 373 return status;
Charles MacNeill 5:89031b2f5316 374 }
Charles MacNeill 5:89031b2f5316 375
Charles MacNeill 5:89031b2f5316 376
Charles MacNeill 5:89031b2f5316 377 VL53LX_Error VL53LX_poll_for_firmware_ready(
Charles MacNeill 5:89031b2f5316 378 VL53LX_DEV Dev,
Charles MacNeill 5:89031b2f5316 379 uint32_t timeout_ms)
Charles MacNeill 5:89031b2f5316 380 {
Charles MacNeill 5:89031b2f5316 381
Charles MacNeill 5:89031b2f5316 382
Charles MacNeill 5:89031b2f5316 383 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 384 VL53LX_LLDriverData_t *pdev = VL53LXDevStructGetLLDriverHandle(Dev);
Charles MacNeill 5:89031b2f5316 385
Charles MacNeill 5:89031b2f5316 386 uint32_t start_time_ms = 0;
Charles MacNeill 5:89031b2f5316 387 uint32_t current_time_ms = 0;
Charles MacNeill 5:89031b2f5316 388 int32_t poll_delay_ms = VL53LX_POLLING_DELAY_MS;
Charles MacNeill 5:89031b2f5316 389 uint8_t fw_ready = 0;
Charles MacNeill 5:89031b2f5316 390
Charles MacNeill 5:89031b2f5316 391
Charles MacNeill 5:89031b2f5316 392
Charles MacNeill 5:89031b2f5316 393 VL53LX_GetTickCount(Dev, &start_time_ms);
Charles MacNeill 5:89031b2f5316 394 pdev->fw_ready_poll_duration_ms = 0;
Charles MacNeill 5:89031b2f5316 395
Charles MacNeill 5:89031b2f5316 396
Charles MacNeill 5:89031b2f5316 397
Charles MacNeill 5:89031b2f5316 398 while ((status == VL53LX_ERROR_NONE) &&
Charles MacNeill 5:89031b2f5316 399 (pdev->fw_ready_poll_duration_ms < timeout_ms) &&
Charles MacNeill 5:89031b2f5316 400 (fw_ready == 0)) {
Charles MacNeill 5:89031b2f5316 401
Charles MacNeill 5:89031b2f5316 402 status = VL53LX_is_firmware_ready(
Charles MacNeill 5:89031b2f5316 403 Dev,
Charles MacNeill 5:89031b2f5316 404 &fw_ready);
Charles MacNeill 5:89031b2f5316 405
Charles MacNeill 5:89031b2f5316 406 if (status == VL53LX_ERROR_NONE &&
Charles MacNeill 5:89031b2f5316 407 fw_ready == 0 &&
Charles MacNeill 5:89031b2f5316 408 poll_delay_ms > 0) {
Charles MacNeill 5:89031b2f5316 409 status = VL53LX_WaitMs(
Charles MacNeill 5:89031b2f5316 410 Dev,
Charles MacNeill 5:89031b2f5316 411 poll_delay_ms);
Charles MacNeill 5:89031b2f5316 412 }
Charles MacNeill 5:89031b2f5316 413
Charles MacNeill 5:89031b2f5316 414
Charles MacNeill 5:89031b2f5316 415 VL53LX_GetTickCount(Dev, &current_time_ms);
Charles MacNeill 5:89031b2f5316 416 pdev->fw_ready_poll_duration_ms =
Charles MacNeill 5:89031b2f5316 417 current_time_ms - start_time_ms;
Charles MacNeill 5:89031b2f5316 418 }
Charles MacNeill 5:89031b2f5316 419
Charles MacNeill 5:89031b2f5316 420 if (fw_ready == 0 && status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 421 status = VL53LX_ERROR_TIME_OUT;
Charles MacNeill 5:89031b2f5316 422
Charles MacNeill 5:89031b2f5316 423 LOG_FUNCTION_END(status);
Charles MacNeill 5:89031b2f5316 424
Charles MacNeill 5:89031b2f5316 425 return status;
Charles MacNeill 5:89031b2f5316 426 }
Charles MacNeill 5:89031b2f5316 427
Charles MacNeill 5:89031b2f5316 428
Charles MacNeill 5:89031b2f5316 429 VL53LX_Error VL53LX_poll_for_range_completion(
Charles MacNeill 5:89031b2f5316 430 VL53LX_DEV Dev,
Charles MacNeill 5:89031b2f5316 431 uint32_t timeout_ms)
Charles MacNeill 5:89031b2f5316 432 {
Charles MacNeill 5:89031b2f5316 433
Charles MacNeill 5:89031b2f5316 434
Charles MacNeill 5:89031b2f5316 435 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 436 VL53LX_LLDriverData_t *pdev = VL53LXDevStructGetLLDriverHandle(Dev);
Charles MacNeill 5:89031b2f5316 437
Charles MacNeill 5:89031b2f5316 438 uint8_t gpio__mux_active_high_hv = 0;
Charles MacNeill 5:89031b2f5316 439 uint8_t interrupt_ready = 0;
Charles MacNeill 5:89031b2f5316 440
Charles MacNeill 5:89031b2f5316 441 LOG_FUNCTION_START("");
Charles MacNeill 5:89031b2f5316 442
Charles MacNeill 5:89031b2f5316 443 gpio__mux_active_high_hv =
Charles MacNeill 5:89031b2f5316 444 pdev->stat_cfg.gpio_hv_mux__ctrl &
Charles MacNeill 5:89031b2f5316 445 VL53LX_DEVICEINTERRUPTLEVEL_ACTIVE_MASK;
Charles MacNeill 5:89031b2f5316 446
Charles MacNeill 5:89031b2f5316 447 if (gpio__mux_active_high_hv == VL53LX_DEVICEINTERRUPTLEVEL_ACTIVE_HIGH)
Charles MacNeill 5:89031b2f5316 448 interrupt_ready = 0x01;
Charles MacNeill 5:89031b2f5316 449 else
Charles MacNeill 5:89031b2f5316 450 interrupt_ready = 0x00;
Charles MacNeill 5:89031b2f5316 451
Charles MacNeill 5:89031b2f5316 452 status =
Charles MacNeill 5:89031b2f5316 453 VL53LX_WaitValueMaskEx(
Charles MacNeill 5:89031b2f5316 454 Dev,
Charles MacNeill 5:89031b2f5316 455 timeout_ms,
Charles MacNeill 5:89031b2f5316 456 VL53LX_GPIO__TIO_HV_STATUS,
Charles MacNeill 5:89031b2f5316 457 interrupt_ready,
Charles MacNeill 5:89031b2f5316 458 0x01,
Charles MacNeill 5:89031b2f5316 459 VL53LX_POLLING_DELAY_MS);
Charles MacNeill 5:89031b2f5316 460
Charles MacNeill 5:89031b2f5316 461 LOG_FUNCTION_END(status);
Charles MacNeill 5:89031b2f5316 462
Charles MacNeill 5:89031b2f5316 463 return status;
Charles MacNeill 5:89031b2f5316 464 }
Charles MacNeill 5:89031b2f5316 465
Charles MacNeill 5:89031b2f5316 466