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 // 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