The VL53L1CB proximity sensor, based on ST’s FlightSense™, Time-of-Flight technology.
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Dependents: VL53L1CB_noshield_1sensor_polls_auton VL53L1CB_noshield_1sensor_interrupt_auton X_NUCLEO_53L1A2
Based on VL53L1 library, this is a library for the VL53L1CB ToF chip.
src/vl53l1_wait.c@7:1add29d51e72, 2021-06-08 (annotated)
- Committer:
- Charles MacNeill
- Date:
- Tue Jun 08 10:34:47 2021 +0100
- Revision:
- 7:1add29d51e72
- Parent:
- 0:3ac96e360672
- Child:
- 8:c07c8a53bfbd
Update to v6.6.5 of bare_driver
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Charles MacNeill |
7:1add29d51e72 | 1 | |
Charles MacNeill |
7:1add29d51e72 | 2 | // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause |
Charles MacNeill |
7:1add29d51e72 | 3 | /****************************************************************************** |
Charles MacNeill |
7:1add29d51e72 | 4 | * Copyright (c) 2020, STMicroelectronics - All Rights Reserved |
Charles MacNeill |
7:1add29d51e72 | 5 | |
Charles MacNeill |
7:1add29d51e72 | 6 | This file is part of VL53L1 and is dual licensed, |
Charles MacNeill |
7:1add29d51e72 | 7 | either GPL-2.0+ |
Charles MacNeill |
7:1add29d51e72 | 8 | or 'BSD 3-clause "New" or "Revised" License' , at your option. |
Charles MacNeill |
7:1add29d51e72 | 9 | ****************************************************************************** |
Charles MacNeill |
7:1add29d51e72 | 10 | */ |
Charles MacNeill |
7:1add29d51e72 | 11 | |
Charles MacNeill |
7:1add29d51e72 | 12 | |
Charles MacNeill |
7:1add29d51e72 | 13 | |
Charles MacNeill |
7:1add29d51e72 | 14 | |
Charles MacNeill |
7:1add29d51e72 | 15 | |
Charles MacNeill |
7:1add29d51e72 | 16 | #include "vl53l1_ll_def.h" |
Charles MacNeill |
7:1add29d51e72 | 17 | #include "vl53l1_ll_device.h" |
Charles MacNeill |
7:1add29d51e72 | 18 | #include "vl53l1_platform.h" |
Charles MacNeill |
7:1add29d51e72 | 19 | #include "vl53l1_core.h" |
Charles MacNeill |
7:1add29d51e72 | 20 | #include "vl53l1_silicon_core.h" |
Charles MacNeill |
7:1add29d51e72 | 21 | #include "vl53l1_wait.h" |
Charles MacNeill |
7:1add29d51e72 | 22 | #include "vl53l1_register_settings.h" |
Charles MacNeill |
7:1add29d51e72 | 23 | |
Charles MacNeill |
7:1add29d51e72 | 24 | |
Charles MacNeill |
7:1add29d51e72 | 25 | #define LOG_FUNCTION_START(fmt, ...) \ |
Charles MacNeill |
7:1add29d51e72 | 26 | _LOG_FUNCTION_START(VL53L1_TRACE_MODULE_CORE, fmt, ##__VA_ARGS__) |
Charles MacNeill |
7:1add29d51e72 | 27 | #define LOG_FUNCTION_END(status, ...) \ |
Charles MacNeill |
7:1add29d51e72 | 28 | _LOG_FUNCTION_END(VL53L1_TRACE_MODULE_CORE, status, ##__VA_ARGS__) |
Charles MacNeill |
7:1add29d51e72 | 29 | #define LOG_FUNCTION_END_FMT(status, fmt, ...) \ |
Charles MacNeill |
7:1add29d51e72 | 30 | _LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_CORE, status, \ |
Charles MacNeill |
7:1add29d51e72 | 31 | fmt, ##__VA_ARGS__) |
Charles MacNeill |
7:1add29d51e72 | 32 | |
Charles MacNeill |
7:1add29d51e72 | 33 | |
Charles MacNeill |
7:1add29d51e72 | 34 | VL53L1_Error VL53L1_wait_for_boot_completion( |
Charles MacNeill |
7:1add29d51e72 | 35 | VL53L1_DEV Dev) |
Charles MacNeill |
7:1add29d51e72 | 36 | { |
Charles MacNeill |
7:1add29d51e72 | 37 | |
Charles MacNeill |
7:1add29d51e72 | 38 | |
Charles MacNeill |
7:1add29d51e72 | 39 | |
Charles MacNeill |
7:1add29d51e72 | 40 | VL53L1_Error status = VL53L1_ERROR_NONE; |
Charles MacNeill |
7:1add29d51e72 | 41 | VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); |
Charles MacNeill |
7:1add29d51e72 | 42 | |
Charles MacNeill |
7:1add29d51e72 | 43 | uint8_t fw_ready = 0; |
Charles MacNeill |
7:1add29d51e72 | 44 | |
Charles MacNeill |
7:1add29d51e72 | 45 | LOG_FUNCTION_START(""); |
Charles MacNeill |
7:1add29d51e72 | 46 | |
Charles MacNeill |
7:1add29d51e72 | 47 | if (pdev->wait_method == VL53L1_WAIT_METHOD_BLOCKING) { |
Charles MacNeill |
7:1add29d51e72 | 48 | |
Charles MacNeill |
7:1add29d51e72 | 49 | |
Charles MacNeill |
7:1add29d51e72 | 50 | |
Charles MacNeill |
7:1add29d51e72 | 51 | status = |
Charles MacNeill |
7:1add29d51e72 | 52 | VL53L1_poll_for_boot_completion( |
Charles MacNeill |
7:1add29d51e72 | 53 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 54 | VL53L1_BOOT_COMPLETION_POLLING_TIMEOUT_MS); |
Charles MacNeill |
7:1add29d51e72 | 55 | |
Charles MacNeill |
7:1add29d51e72 | 56 | } else { |
Charles MacNeill |
7:1add29d51e72 | 57 | |
Charles MacNeill |
7:1add29d51e72 | 58 | |
Charles MacNeill |
7:1add29d51e72 | 59 | |
Charles MacNeill |
7:1add29d51e72 | 60 | fw_ready = 0; |
Charles MacNeill |
7:1add29d51e72 | 61 | while (fw_ready == 0x00 && status == VL53L1_ERROR_NONE) { |
Charles MacNeill |
7:1add29d51e72 | 62 | status = VL53L1_is_boot_complete( |
Charles MacNeill |
7:1add29d51e72 | 63 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 64 | &fw_ready); |
Charles MacNeill |
7:1add29d51e72 | 65 | |
Charles MacNeill |
7:1add29d51e72 | 66 | if (status == VL53L1_ERROR_NONE) { |
Charles MacNeill |
7:1add29d51e72 | 67 | status = VL53L1_WaitMs( |
Charles MacNeill |
7:1add29d51e72 | 68 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 69 | VL53L1_POLLING_DELAY_MS); |
Charles MacNeill |
7:1add29d51e72 | 70 | } |
Charles MacNeill |
7:1add29d51e72 | 71 | } |
Charles MacNeill |
7:1add29d51e72 | 72 | } |
Charles MacNeill |
7:1add29d51e72 | 73 | |
Charles MacNeill |
7:1add29d51e72 | 74 | LOG_FUNCTION_END(status); |
Charles MacNeill |
7:1add29d51e72 | 75 | |
Charles MacNeill |
7:1add29d51e72 | 76 | return status; |
Charles MacNeill |
7:1add29d51e72 | 77 | |
Charles MacNeill |
7:1add29d51e72 | 78 | } |
Charles MacNeill |
7:1add29d51e72 | 79 | |
Charles MacNeill |
7:1add29d51e72 | 80 | |
Charles MacNeill |
7:1add29d51e72 | 81 | VL53L1_Error VL53L1_wait_for_firmware_ready( |
Charles MacNeill |
7:1add29d51e72 | 82 | VL53L1_DEV Dev) |
Charles MacNeill |
7:1add29d51e72 | 83 | { |
Charles MacNeill |
7:1add29d51e72 | 84 | |
Charles MacNeill |
7:1add29d51e72 | 85 | |
Charles MacNeill |
7:1add29d51e72 | 86 | |
Charles MacNeill |
7:1add29d51e72 | 87 | VL53L1_Error status = VL53L1_ERROR_NONE; |
Charles MacNeill |
7:1add29d51e72 | 88 | VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); |
Charles MacNeill |
7:1add29d51e72 | 89 | |
Charles MacNeill |
7:1add29d51e72 | 90 | uint8_t fw_ready = 0; |
Charles MacNeill |
7:1add29d51e72 | 91 | uint8_t mode_start = 0; |
Charles MacNeill |
7:1add29d51e72 | 92 | |
Charles MacNeill |
7:1add29d51e72 | 93 | LOG_FUNCTION_START(""); |
Charles MacNeill |
7:1add29d51e72 | 94 | |
Charles MacNeill |
7:1add29d51e72 | 95 | |
Charles MacNeill |
7:1add29d51e72 | 96 | mode_start = |
Charles MacNeill |
7:1add29d51e72 | 97 | pdev->sys_ctrl.system__mode_start & |
Charles MacNeill |
7:1add29d51e72 | 98 | VL53L1_DEVICEMEASUREMENTMODE_MODE_MASK; |
Charles MacNeill |
7:1add29d51e72 | 99 | |
Charles MacNeill |
7:1add29d51e72 | 100 | |
Charles MacNeill |
7:1add29d51e72 | 101 | |
Charles MacNeill |
7:1add29d51e72 | 102 | if ((mode_start == VL53L1_DEVICEMEASUREMENTMODE_TIMED) || |
Charles MacNeill |
7:1add29d51e72 | 103 | (mode_start == VL53L1_DEVICEMEASUREMENTMODE_SINGLESHOT)) { |
Charles MacNeill |
7:1add29d51e72 | 104 | |
Charles MacNeill |
7:1add29d51e72 | 105 | if (pdev->wait_method == VL53L1_WAIT_METHOD_BLOCKING) { |
Charles MacNeill |
7:1add29d51e72 | 106 | |
Charles MacNeill |
7:1add29d51e72 | 107 | |
Charles MacNeill |
7:1add29d51e72 | 108 | |
Charles MacNeill |
7:1add29d51e72 | 109 | status = |
Charles MacNeill |
7:1add29d51e72 | 110 | VL53L1_poll_for_firmware_ready( |
Charles MacNeill |
7:1add29d51e72 | 111 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 112 | VL53L1_RANGE_COMPLETION_POLLING_TIMEOUT_MS); |
Charles MacNeill |
7:1add29d51e72 | 113 | |
Charles MacNeill |
7:1add29d51e72 | 114 | } else { |
Charles MacNeill |
7:1add29d51e72 | 115 | |
Charles MacNeill |
7:1add29d51e72 | 116 | |
Charles MacNeill |
7:1add29d51e72 | 117 | |
Charles MacNeill |
7:1add29d51e72 | 118 | fw_ready = 0; |
Charles MacNeill |
7:1add29d51e72 | 119 | while (fw_ready == 0x00 && status == |
Charles MacNeill |
7:1add29d51e72 | 120 | VL53L1_ERROR_NONE) { |
Charles MacNeill |
7:1add29d51e72 | 121 | status = VL53L1_is_firmware_ready( |
Charles MacNeill |
7:1add29d51e72 | 122 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 123 | &fw_ready); |
Charles MacNeill |
7:1add29d51e72 | 124 | |
Charles MacNeill |
7:1add29d51e72 | 125 | if (status == VL53L1_ERROR_NONE) { |
Charles MacNeill |
7:1add29d51e72 | 126 | status = VL53L1_WaitMs( |
Charles MacNeill |
7:1add29d51e72 | 127 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 128 | VL53L1_POLLING_DELAY_MS); |
Charles MacNeill |
7:1add29d51e72 | 129 | } |
Charles MacNeill |
7:1add29d51e72 | 130 | } |
Charles MacNeill |
7:1add29d51e72 | 131 | } |
Charles MacNeill |
7:1add29d51e72 | 132 | } |
Charles MacNeill |
7:1add29d51e72 | 133 | |
Charles MacNeill |
7:1add29d51e72 | 134 | LOG_FUNCTION_END(status); |
Charles MacNeill |
7:1add29d51e72 | 135 | |
Charles MacNeill |
7:1add29d51e72 | 136 | return status; |
Charles MacNeill |
7:1add29d51e72 | 137 | } |
Charles MacNeill |
7:1add29d51e72 | 138 | |
Charles MacNeill |
7:1add29d51e72 | 139 | |
Charles MacNeill |
7:1add29d51e72 | 140 | VL53L1_Error VL53L1_wait_for_range_completion( |
Charles MacNeill |
7:1add29d51e72 | 141 | VL53L1_DEV Dev) |
Charles MacNeill |
7:1add29d51e72 | 142 | { |
Charles MacNeill |
7:1add29d51e72 | 143 | |
Charles MacNeill |
7:1add29d51e72 | 144 | |
Charles MacNeill |
7:1add29d51e72 | 145 | |
Charles MacNeill |
7:1add29d51e72 | 146 | VL53L1_Error status = VL53L1_ERROR_NONE; |
Charles MacNeill |
7:1add29d51e72 | 147 | VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); |
Charles MacNeill |
7:1add29d51e72 | 148 | |
Charles MacNeill |
7:1add29d51e72 | 149 | uint8_t data_ready = 0; |
Charles MacNeill |
7:1add29d51e72 | 150 | |
Charles MacNeill |
7:1add29d51e72 | 151 | LOG_FUNCTION_START(""); |
Charles MacNeill |
7:1add29d51e72 | 152 | |
Charles MacNeill |
7:1add29d51e72 | 153 | if (pdev->wait_method == VL53L1_WAIT_METHOD_BLOCKING) { |
Charles MacNeill |
7:1add29d51e72 | 154 | |
Charles MacNeill |
7:1add29d51e72 | 155 | |
Charles MacNeill |
7:1add29d51e72 | 156 | |
Charles MacNeill |
7:1add29d51e72 | 157 | status = |
Charles MacNeill |
7:1add29d51e72 | 158 | VL53L1_poll_for_range_completion( |
Charles MacNeill |
7:1add29d51e72 | 159 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 160 | VL53L1_RANGE_COMPLETION_POLLING_TIMEOUT_MS); |
Charles MacNeill |
7:1add29d51e72 | 161 | |
Charles MacNeill |
7:1add29d51e72 | 162 | } else { |
Charles MacNeill |
7:1add29d51e72 | 163 | |
Charles MacNeill |
7:1add29d51e72 | 164 | |
Charles MacNeill |
7:1add29d51e72 | 165 | |
Charles MacNeill |
7:1add29d51e72 | 166 | data_ready = 0; |
Charles MacNeill |
7:1add29d51e72 | 167 | while (data_ready == 0x00 && status == VL53L1_ERROR_NONE) { |
Charles MacNeill |
7:1add29d51e72 | 168 | status = VL53L1_is_new_data_ready( |
Charles MacNeill |
7:1add29d51e72 | 169 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 170 | &data_ready); |
Charles MacNeill |
7:1add29d51e72 | 171 | |
Charles MacNeill |
7:1add29d51e72 | 172 | if (status == VL53L1_ERROR_NONE) { |
Charles MacNeill |
7:1add29d51e72 | 173 | status = VL53L1_WaitMs( |
Charles MacNeill |
7:1add29d51e72 | 174 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 175 | VL53L1_POLLING_DELAY_MS); |
Charles MacNeill |
7:1add29d51e72 | 176 | } |
Charles MacNeill |
7:1add29d51e72 | 177 | } |
Charles MacNeill |
7:1add29d51e72 | 178 | } |
Charles MacNeill |
7:1add29d51e72 | 179 | |
Charles MacNeill |
7:1add29d51e72 | 180 | LOG_FUNCTION_END(status); |
Charles MacNeill |
7:1add29d51e72 | 181 | |
Charles MacNeill |
7:1add29d51e72 | 182 | return status; |
Charles MacNeill |
7:1add29d51e72 | 183 | } |
Charles MacNeill |
7:1add29d51e72 | 184 | |
Charles MacNeill |
7:1add29d51e72 | 185 | |
Charles MacNeill |
7:1add29d51e72 | 186 | VL53L1_Error VL53L1_wait_for_test_completion( |
Charles MacNeill |
7:1add29d51e72 | 187 | VL53L1_DEV Dev) |
Charles MacNeill |
7:1add29d51e72 | 188 | { |
Charles MacNeill |
7:1add29d51e72 | 189 | |
Charles MacNeill |
7:1add29d51e72 | 190 | |
Charles MacNeill |
7:1add29d51e72 | 191 | |
Charles MacNeill |
7:1add29d51e72 | 192 | VL53L1_Error status = VL53L1_ERROR_NONE; |
Charles MacNeill |
7:1add29d51e72 | 193 | VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); |
Charles MacNeill |
7:1add29d51e72 | 194 | |
Charles MacNeill |
7:1add29d51e72 | 195 | uint8_t data_ready = 0; |
Charles MacNeill |
7:1add29d51e72 | 196 | |
Charles MacNeill |
7:1add29d51e72 | 197 | LOG_FUNCTION_START(""); |
Charles MacNeill |
7:1add29d51e72 | 198 | |
Charles MacNeill |
7:1add29d51e72 | 199 | if (pdev->wait_method == VL53L1_WAIT_METHOD_BLOCKING) { |
Charles MacNeill |
7:1add29d51e72 | 200 | |
Charles MacNeill |
7:1add29d51e72 | 201 | |
Charles MacNeill |
7:1add29d51e72 | 202 | |
Charles MacNeill |
7:1add29d51e72 | 203 | status = |
Charles MacNeill |
7:1add29d51e72 | 204 | VL53L1_poll_for_range_completion( |
Charles MacNeill |
7:1add29d51e72 | 205 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 206 | VL53L1_TEST_COMPLETION_POLLING_TIMEOUT_MS); |
Charles MacNeill |
7:1add29d51e72 | 207 | |
Charles MacNeill |
7:1add29d51e72 | 208 | } else { |
Charles MacNeill |
7:1add29d51e72 | 209 | |
Charles MacNeill |
7:1add29d51e72 | 210 | |
Charles MacNeill |
7:1add29d51e72 | 211 | |
Charles MacNeill |
7:1add29d51e72 | 212 | data_ready = 0; |
Charles MacNeill |
7:1add29d51e72 | 213 | while (data_ready == 0x00 && status == VL53L1_ERROR_NONE) { |
Charles MacNeill |
7:1add29d51e72 | 214 | status = VL53L1_is_new_data_ready( |
Charles MacNeill |
7:1add29d51e72 | 215 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 216 | &data_ready); |
Charles MacNeill |
7:1add29d51e72 | 217 | |
Charles MacNeill |
7:1add29d51e72 | 218 | if (status == VL53L1_ERROR_NONE) { |
Charles MacNeill |
7:1add29d51e72 | 219 | status = VL53L1_WaitMs( |
Charles MacNeill |
7:1add29d51e72 | 220 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 221 | VL53L1_POLLING_DELAY_MS); |
Charles MacNeill |
7:1add29d51e72 | 222 | } |
Charles MacNeill |
7:1add29d51e72 | 223 | } |
Charles MacNeill |
7:1add29d51e72 | 224 | } |
Charles MacNeill |
7:1add29d51e72 | 225 | |
Charles MacNeill |
7:1add29d51e72 | 226 | LOG_FUNCTION_END(status); |
Charles MacNeill |
7:1add29d51e72 | 227 | |
Charles MacNeill |
7:1add29d51e72 | 228 | return status; |
Charles MacNeill |
7:1add29d51e72 | 229 | } |
Charles MacNeill |
7:1add29d51e72 | 230 | |
Charles MacNeill |
7:1add29d51e72 | 231 | |
Charles MacNeill |
7:1add29d51e72 | 232 | |
Charles MacNeill |
7:1add29d51e72 | 233 | |
Charles MacNeill |
7:1add29d51e72 | 234 | VL53L1_Error VL53L1_is_boot_complete( |
Charles MacNeill |
7:1add29d51e72 | 235 | VL53L1_DEV Dev, |
Charles MacNeill |
7:1add29d51e72 | 236 | uint8_t *pready) |
Charles MacNeill |
7:1add29d51e72 | 237 | { |
Charles MacNeill |
7:1add29d51e72 | 238 | |
Charles MacNeill |
7:1add29d51e72 | 239 | |
Charles MacNeill |
7:1add29d51e72 | 240 | VL53L1_Error status = VL53L1_ERROR_NONE; |
Charles MacNeill |
7:1add29d51e72 | 241 | uint8_t firmware__system_status = 0; |
Charles MacNeill |
7:1add29d51e72 | 242 | |
Charles MacNeill |
7:1add29d51e72 | 243 | LOG_FUNCTION_START(""); |
Charles MacNeill |
7:1add29d51e72 | 244 | |
Charles MacNeill |
7:1add29d51e72 | 245 | |
Charles MacNeill |
7:1add29d51e72 | 246 | |
Charles MacNeill |
7:1add29d51e72 | 247 | status = |
Charles MacNeill |
7:1add29d51e72 | 248 | VL53L1_RdByte( |
Charles MacNeill |
7:1add29d51e72 | 249 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 250 | VL53L1_FIRMWARE__SYSTEM_STATUS, |
Charles MacNeill |
7:1add29d51e72 | 251 | &firmware__system_status); |
Charles MacNeill |
7:1add29d51e72 | 252 | |
Charles MacNeill |
7:1add29d51e72 | 253 | |
Charles MacNeill |
7:1add29d51e72 | 254 | |
Charles MacNeill |
7:1add29d51e72 | 255 | if ((firmware__system_status & 0x01) == 0x01) { |
Charles MacNeill |
7:1add29d51e72 | 256 | *pready = 0x01; |
Charles MacNeill |
7:1add29d51e72 | 257 | VL53L1_init_ll_driver_state( |
Charles MacNeill |
7:1add29d51e72 | 258 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 259 | VL53L1_DEVICESTATE_SW_STANDBY); |
Charles MacNeill |
7:1add29d51e72 | 260 | } else { |
Charles MacNeill |
7:1add29d51e72 | 261 | *pready = 0x00; |
Charles MacNeill |
7:1add29d51e72 | 262 | VL53L1_init_ll_driver_state( |
Charles MacNeill |
7:1add29d51e72 | 263 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 264 | VL53L1_DEVICESTATE_FW_COLDBOOT); |
Charles MacNeill |
7:1add29d51e72 | 265 | } |
Charles MacNeill |
7:1add29d51e72 | 266 | |
Charles MacNeill |
7:1add29d51e72 | 267 | LOG_FUNCTION_END(status); |
Charles MacNeill |
7:1add29d51e72 | 268 | |
Charles MacNeill |
7:1add29d51e72 | 269 | return status; |
Charles MacNeill |
7:1add29d51e72 | 270 | } |
Charles MacNeill |
7:1add29d51e72 | 271 | |
Charles MacNeill |
7:1add29d51e72 | 272 | |
Charles MacNeill |
7:1add29d51e72 | 273 | VL53L1_Error VL53L1_is_firmware_ready( |
Charles MacNeill |
7:1add29d51e72 | 274 | VL53L1_DEV Dev, |
Charles MacNeill |
7:1add29d51e72 | 275 | uint8_t *pready) |
Charles MacNeill |
7:1add29d51e72 | 276 | { |
Charles MacNeill |
7:1add29d51e72 | 277 | |
Charles MacNeill |
7:1add29d51e72 | 278 | |
Charles MacNeill |
7:1add29d51e72 | 279 | VL53L1_Error status = VL53L1_ERROR_NONE; |
Charles MacNeill |
7:1add29d51e72 | 280 | VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); |
Charles MacNeill |
7:1add29d51e72 | 281 | |
Charles MacNeill |
7:1add29d51e72 | 282 | LOG_FUNCTION_START(""); |
Charles MacNeill |
7:1add29d51e72 | 283 | |
Charles MacNeill |
7:1add29d51e72 | 284 | status = VL53L1_is_firmware_ready_silicon( |
Charles MacNeill |
7:1add29d51e72 | 285 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 286 | pready); |
Charles MacNeill |
7:1add29d51e72 | 287 | |
Charles MacNeill |
7:1add29d51e72 | 288 | pdev->fw_ready = *pready; |
Charles MacNeill |
7:1add29d51e72 | 289 | |
Charles MacNeill |
7:1add29d51e72 | 290 | LOG_FUNCTION_END(status); |
Charles MacNeill |
7:1add29d51e72 | 291 | |
Charles MacNeill |
7:1add29d51e72 | 292 | return status; |
Charles MacNeill |
7:1add29d51e72 | 293 | } |
Charles MacNeill |
7:1add29d51e72 | 294 | |
Charles MacNeill |
7:1add29d51e72 | 295 | |
Charles MacNeill |
7:1add29d51e72 | 296 | VL53L1_Error VL53L1_is_new_data_ready( |
Charles MacNeill |
7:1add29d51e72 | 297 | VL53L1_DEV Dev, |
Charles MacNeill |
7:1add29d51e72 | 298 | uint8_t *pready) |
Charles MacNeill |
7:1add29d51e72 | 299 | { |
Charles MacNeill |
7:1add29d51e72 | 300 | |
Charles MacNeill |
7:1add29d51e72 | 301 | |
Charles MacNeill |
7:1add29d51e72 | 302 | VL53L1_Error status = VL53L1_ERROR_NONE; |
Charles MacNeill |
7:1add29d51e72 | 303 | VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); |
Charles MacNeill |
7:1add29d51e72 | 304 | |
Charles MacNeill |
7:1add29d51e72 | 305 | uint8_t gpio__mux_active_high_hv = 0; |
Charles MacNeill |
7:1add29d51e72 | 306 | uint8_t gpio__tio_hv_status = 0; |
Charles MacNeill |
7:1add29d51e72 | 307 | uint8_t interrupt_ready = 0; |
Charles MacNeill |
7:1add29d51e72 | 308 | |
Charles MacNeill |
7:1add29d51e72 | 309 | LOG_FUNCTION_START(""); |
Charles MacNeill |
7:1add29d51e72 | 310 | |
Charles MacNeill |
7:1add29d51e72 | 311 | gpio__mux_active_high_hv = |
Charles MacNeill |
7:1add29d51e72 | 312 | pdev->stat_cfg.gpio_hv_mux__ctrl & |
Charles MacNeill |
7:1add29d51e72 | 313 | VL53L1_DEVICEINTERRUPTLEVEL_ACTIVE_MASK; |
Charles MacNeill |
7:1add29d51e72 | 314 | |
Charles MacNeill |
7:1add29d51e72 | 315 | if (gpio__mux_active_high_hv == VL53L1_DEVICEINTERRUPTLEVEL_ACTIVE_HIGH) |
Charles MacNeill |
7:1add29d51e72 | 316 | interrupt_ready = 0x01; |
Charles MacNeill |
7:1add29d51e72 | 317 | else |
Charles MacNeill |
7:1add29d51e72 | 318 | interrupt_ready = 0x00; |
Charles MacNeill |
7:1add29d51e72 | 319 | |
Charles MacNeill |
7:1add29d51e72 | 320 | |
Charles MacNeill |
7:1add29d51e72 | 321 | |
Charles MacNeill |
7:1add29d51e72 | 322 | status = VL53L1_RdByte( |
Charles MacNeill |
7:1add29d51e72 | 323 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 324 | VL53L1_GPIO__TIO_HV_STATUS, |
Charles MacNeill |
7:1add29d51e72 | 325 | &gpio__tio_hv_status); |
Charles MacNeill |
7:1add29d51e72 | 326 | |
Charles MacNeill |
7:1add29d51e72 | 327 | |
Charles MacNeill |
7:1add29d51e72 | 328 | |
Charles MacNeill |
7:1add29d51e72 | 329 | if ((gpio__tio_hv_status & 0x01) == interrupt_ready) |
Charles MacNeill |
7:1add29d51e72 | 330 | *pready = 0x01; |
Charles MacNeill |
7:1add29d51e72 | 331 | else |
Charles MacNeill |
7:1add29d51e72 | 332 | *pready = 0x00; |
Charles MacNeill |
7:1add29d51e72 | 333 | |
Charles MacNeill |
7:1add29d51e72 | 334 | LOG_FUNCTION_END(status); |
Charles MacNeill |
7:1add29d51e72 | 335 | |
Charles MacNeill |
7:1add29d51e72 | 336 | return status; |
Charles MacNeill |
7:1add29d51e72 | 337 | } |
Charles MacNeill |
7:1add29d51e72 | 338 | |
Charles MacNeill |
7:1add29d51e72 | 339 | |
Charles MacNeill |
7:1add29d51e72 | 340 | |
Charles MacNeill |
7:1add29d51e72 | 341 | |
Charles MacNeill |
7:1add29d51e72 | 342 | VL53L1_Error VL53L1_poll_for_boot_completion( |
Charles MacNeill |
7:1add29d51e72 | 343 | VL53L1_DEV Dev, |
Charles MacNeill |
7:1add29d51e72 | 344 | uint32_t timeout_ms) |
Charles MacNeill |
7:1add29d51e72 | 345 | { |
Charles MacNeill |
7:1add29d51e72 | 346 | |
Charles MacNeill |
7:1add29d51e72 | 347 | |
Charles MacNeill |
7:1add29d51e72 | 348 | VL53L1_Error status = VL53L1_ERROR_NONE; |
Charles MacNeill |
7:1add29d51e72 | 349 | |
Charles MacNeill |
7:1add29d51e72 | 350 | LOG_FUNCTION_START(""); |
Charles MacNeill |
7:1add29d51e72 | 351 | |
Charles MacNeill |
7:1add29d51e72 | 352 | |
Charles MacNeill |
7:1add29d51e72 | 353 | |
Charles MacNeill |
7:1add29d51e72 | 354 | status = VL53L1_WaitUs( |
Charles MacNeill |
7:1add29d51e72 | 355 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 356 | VL53L1_FIRMWARE_BOOT_TIME_US); |
Charles MacNeill |
7:1add29d51e72 | 357 | |
Charles MacNeill |
7:1add29d51e72 | 358 | if (status == VL53L1_ERROR_NONE) |
Charles MacNeill |
7:1add29d51e72 | 359 | status = |
Charles MacNeill |
7:1add29d51e72 | 360 | VL53L1_WaitValueMaskEx( |
Charles MacNeill |
7:1add29d51e72 | 361 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 362 | timeout_ms, |
Charles MacNeill |
7:1add29d51e72 | 363 | VL53L1_FIRMWARE__SYSTEM_STATUS, |
Charles MacNeill |
7:1add29d51e72 | 364 | 0x01, |
Charles MacNeill |
7:1add29d51e72 | 365 | 0x01, |
Charles MacNeill |
7:1add29d51e72 | 366 | VL53L1_POLLING_DELAY_MS); |
Charles MacNeill |
7:1add29d51e72 | 367 | |
Charles MacNeill |
7:1add29d51e72 | 368 | if (status == VL53L1_ERROR_NONE) |
Charles MacNeill |
7:1add29d51e72 | 369 | VL53L1_init_ll_driver_state(Dev, VL53L1_DEVICESTATE_SW_STANDBY); |
Charles MacNeill |
7:1add29d51e72 | 370 | |
Charles MacNeill |
7:1add29d51e72 | 371 | LOG_FUNCTION_END(status); |
Charles MacNeill |
7:1add29d51e72 | 372 | |
Charles MacNeill |
7:1add29d51e72 | 373 | return status; |
Charles MacNeill |
7:1add29d51e72 | 374 | } |
Charles MacNeill |
7:1add29d51e72 | 375 | |
Charles MacNeill |
7:1add29d51e72 | 376 | |
Charles MacNeill |
7:1add29d51e72 | 377 | VL53L1_Error VL53L1_poll_for_firmware_ready( |
Charles MacNeill |
7:1add29d51e72 | 378 | VL53L1_DEV Dev, |
Charles MacNeill |
7:1add29d51e72 | 379 | uint32_t timeout_ms) |
Charles MacNeill |
7:1add29d51e72 | 380 | { |
Charles MacNeill |
7:1add29d51e72 | 381 | |
Charles MacNeill |
7:1add29d51e72 | 382 | |
Charles MacNeill |
7:1add29d51e72 | 383 | VL53L1_Error status = VL53L1_ERROR_NONE; |
Charles MacNeill |
7:1add29d51e72 | 384 | VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); |
Charles MacNeill |
7:1add29d51e72 | 385 | |
Charles MacNeill |
7:1add29d51e72 | 386 | uint32_t start_time_ms = 0; |
Charles MacNeill |
7:1add29d51e72 | 387 | uint32_t current_time_ms = 0; |
Charles MacNeill |
7:1add29d51e72 | 388 | int32_t poll_delay_ms = VL53L1_POLLING_DELAY_MS; |
Charles MacNeill |
7:1add29d51e72 | 389 | uint8_t fw_ready = 0; |
Charles MacNeill |
7:1add29d51e72 | 390 | |
Charles MacNeill |
7:1add29d51e72 | 391 | |
Charles MacNeill |
7:1add29d51e72 | 392 | |
Charles MacNeill |
7:1add29d51e72 | 393 | VL53L1_GetTickCount(Dev, &start_time_ms); |
Charles MacNeill |
7:1add29d51e72 | 394 | pdev->fw_ready_poll_duration_ms = 0; |
Charles MacNeill |
7:1add29d51e72 | 395 | |
Charles MacNeill |
7:1add29d51e72 | 396 | |
Charles MacNeill |
7:1add29d51e72 | 397 | |
Charles MacNeill |
7:1add29d51e72 | 398 | while ((status == VL53L1_ERROR_NONE) && |
Charles MacNeill |
7:1add29d51e72 | 399 | (pdev->fw_ready_poll_duration_ms < timeout_ms) && |
Charles MacNeill |
7:1add29d51e72 | 400 | (fw_ready == 0)) { |
Charles MacNeill |
7:1add29d51e72 | 401 | |
Charles MacNeill |
7:1add29d51e72 | 402 | status = VL53L1_is_firmware_ready( |
Charles MacNeill |
7:1add29d51e72 | 403 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 404 | &fw_ready); |
Charles MacNeill |
7:1add29d51e72 | 405 | |
Charles MacNeill |
7:1add29d51e72 | 406 | if (status == VL53L1_ERROR_NONE && |
Charles MacNeill |
7:1add29d51e72 | 407 | fw_ready == 0 && |
Charles MacNeill |
7:1add29d51e72 | 408 | poll_delay_ms > 0) { |
Charles MacNeill |
7:1add29d51e72 | 409 | status = VL53L1_WaitMs( |
Charles MacNeill |
7:1add29d51e72 | 410 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 411 | poll_delay_ms); |
Charles MacNeill |
7:1add29d51e72 | 412 | } |
Charles MacNeill |
7:1add29d51e72 | 413 | |
Charles MacNeill |
7:1add29d51e72 | 414 | |
Charles MacNeill |
7:1add29d51e72 | 415 | VL53L1_GetTickCount(Dev, ¤t_time_ms); |
Charles MacNeill |
7:1add29d51e72 | 416 | pdev->fw_ready_poll_duration_ms = |
Charles MacNeill |
7:1add29d51e72 | 417 | current_time_ms - start_time_ms; |
Charles MacNeill |
7:1add29d51e72 | 418 | } |
Charles MacNeill |
7:1add29d51e72 | 419 | |
Charles MacNeill |
7:1add29d51e72 | 420 | if (fw_ready == 0 && status == VL53L1_ERROR_NONE) |
Charles MacNeill |
7:1add29d51e72 | 421 | status = VL53L1_ERROR_TIME_OUT; |
Charles MacNeill |
7:1add29d51e72 | 422 | |
Charles MacNeill |
7:1add29d51e72 | 423 | LOG_FUNCTION_END(status); |
Charles MacNeill |
7:1add29d51e72 | 424 | |
Charles MacNeill |
7:1add29d51e72 | 425 | return status; |
Charles MacNeill |
7:1add29d51e72 | 426 | } |
Charles MacNeill |
7:1add29d51e72 | 427 | |
Charles MacNeill |
7:1add29d51e72 | 428 | |
Charles MacNeill |
7:1add29d51e72 | 429 | VL53L1_Error VL53L1_poll_for_range_completion( |
Charles MacNeill |
7:1add29d51e72 | 430 | VL53L1_DEV Dev, |
Charles MacNeill |
7:1add29d51e72 | 431 | uint32_t timeout_ms) |
Charles MacNeill |
7:1add29d51e72 | 432 | { |
Charles MacNeill |
7:1add29d51e72 | 433 | |
Charles MacNeill |
7:1add29d51e72 | 434 | |
Charles MacNeill |
7:1add29d51e72 | 435 | VL53L1_Error status = VL53L1_ERROR_NONE; |
Charles MacNeill |
7:1add29d51e72 | 436 | VL53L1_LLDriverData_t *pdev = VL53L1DevStructGetLLDriverHandle(Dev); |
Charles MacNeill |
7:1add29d51e72 | 437 | |
Charles MacNeill |
7:1add29d51e72 | 438 | uint8_t gpio__mux_active_high_hv = 0; |
Charles MacNeill |
7:1add29d51e72 | 439 | uint8_t interrupt_ready = 0; |
Charles MacNeill |
7:1add29d51e72 | 440 | |
Charles MacNeill |
7:1add29d51e72 | 441 | LOG_FUNCTION_START(""); |
Charles MacNeill |
7:1add29d51e72 | 442 | |
Charles MacNeill |
7:1add29d51e72 | 443 | gpio__mux_active_high_hv = |
Charles MacNeill |
7:1add29d51e72 | 444 | pdev->stat_cfg.gpio_hv_mux__ctrl & |
Charles MacNeill |
7:1add29d51e72 | 445 | VL53L1_DEVICEINTERRUPTLEVEL_ACTIVE_MASK; |
Charles MacNeill |
7:1add29d51e72 | 446 | |
Charles MacNeill |
7:1add29d51e72 | 447 | if (gpio__mux_active_high_hv == VL53L1_DEVICEINTERRUPTLEVEL_ACTIVE_HIGH) |
Charles MacNeill |
7:1add29d51e72 | 448 | interrupt_ready = 0x01; |
Charles MacNeill |
7:1add29d51e72 | 449 | else |
Charles MacNeill |
7:1add29d51e72 | 450 | interrupt_ready = 0x00; |
Charles MacNeill |
7:1add29d51e72 | 451 | |
Charles MacNeill |
7:1add29d51e72 | 452 | status = |
Charles MacNeill |
7:1add29d51e72 | 453 | VL53L1_WaitValueMaskEx( |
Charles MacNeill |
7:1add29d51e72 | 454 | Dev, |
Charles MacNeill |
7:1add29d51e72 | 455 | timeout_ms, |
Charles MacNeill |
7:1add29d51e72 | 456 | VL53L1_GPIO__TIO_HV_STATUS, |
Charles MacNeill |
7:1add29d51e72 | 457 | interrupt_ready, |
Charles MacNeill |
7:1add29d51e72 | 458 | 0x01, |
Charles MacNeill |
7:1add29d51e72 | 459 | VL53L1_POLLING_DELAY_MS); |
Charles MacNeill |
7:1add29d51e72 | 460 | |
Charles MacNeill |
7:1add29d51e72 | 461 | LOG_FUNCTION_END(status); |
Charles MacNeill |
7:1add29d51e72 | 462 | |
Charles MacNeill |
7:1add29d51e72 | 463 | return status; |
Charles MacNeill |
7:1add29d51e72 | 464 | } |
Charles MacNeill |
7:1add29d51e72 | 465 | |
Charles MacNeill |
7:1add29d51e72 | 466 |