amiro-lld / drivers / VL53L1X / v1 / api / core / vl53l1_api_preset_modes.c @ f0dd1ac4
History | View | Annotate | Download (42.294 KB)
1 |
/*
|
---|---|
2 |
* Copyright (c) 2017, STMicroelectronics - All Rights Reserved
|
3 |
*
|
4 |
* This file is part of VL53L1 Core and is dual licensed,
|
5 |
* either 'STMicroelectronics
|
6 |
* Proprietary license'
|
7 |
* or 'BSD 3-clause "New" or "Revised" License' , at your option.
|
8 |
*
|
9 |
********************************************************************************
|
10 |
*
|
11 |
* 'STMicroelectronics Proprietary license'
|
12 |
*
|
13 |
********************************************************************************
|
14 |
*
|
15 |
* License terms: STMicroelectronics Proprietary in accordance with licensing
|
16 |
* terms at www.st.com/sla0081
|
17 |
*
|
18 |
* STMicroelectronics confidential
|
19 |
* Reproduction and Communication of this document is strictly prohibited unless
|
20 |
* specifically authorized in writing by STMicroelectronics.
|
21 |
*
|
22 |
*
|
23 |
********************************************************************************
|
24 |
*
|
25 |
* Alternatively, VL53L1 Core may be distributed under the terms of
|
26 |
* 'BSD 3-clause "New" or "Revised" License', in which case the following
|
27 |
* provisions apply instead of the ones mentioned above :
|
28 |
*
|
29 |
********************************************************************************
|
30 |
*
|
31 |
* License terms: BSD 3-clause "New" or "Revised" License.
|
32 |
*
|
33 |
* Redistribution and use in source and binary forms, with or without
|
34 |
* modification, are permitted provided that the following conditions are met:
|
35 |
*
|
36 |
* 1. Redistributions of source code must retain the above copyright notice, this
|
37 |
* list of conditions and the following disclaimer.
|
38 |
*
|
39 |
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
40 |
* this list of conditions and the following disclaimer in the documentation
|
41 |
* and/or other materials provided with the distribution.
|
42 |
*
|
43 |
* 3. Neither the name of the copyright holder nor the names of its contributors
|
44 |
* may be used to endorse or promote products derived from this software
|
45 |
* without specific prior written permission.
|
46 |
*
|
47 |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
48 |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
49 |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
50 |
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
51 |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
52 |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
53 |
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
54 |
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
55 |
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
56 |
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
57 |
*
|
58 |
*
|
59 |
********************************************************************************
|
60 |
*
|
61 |
*/
|
62 |
|
63 |
/**
|
64 |
* @file vl53l1_api_preset_modes.c
|
65 |
*
|
66 |
* @brief EwokPlus25 API Preset Modes definitions
|
67 |
*/
|
68 |
|
69 |
#include "vl53l1_ll_def.h" |
70 |
#include "vl53l1_platform_log.h" |
71 |
#include "vl53l1_register_structs.h" |
72 |
#include "vl53l1_register_settings.h" |
73 |
#include "vl53l1_core.h" |
74 |
#include "vl53l1_api_preset_modes.h" |
75 |
#include "vl53l1_tuning_parm_defaults.h" |
76 |
|
77 |
|
78 |
#define LOG_FUNCTION_START(fmt, ...) \
|
79 |
_LOG_FUNCTION_START(VL53L1_TRACE_MODULE_API, fmt, ##__VA_ARGS__) |
80 |
#define LOG_FUNCTION_END(status, ...) \
|
81 |
_LOG_FUNCTION_END(VL53L1_TRACE_MODULE_API, status, ##__VA_ARGS__) |
82 |
#define LOG_FUNCTION_END_FMT(status, fmt, ...) \
|
83 |
_LOG_FUNCTION_END_FMT(VL53L1_TRACE_MODULE_API, status, fmt, ##__VA_ARGS__) |
84 |
|
85 |
|
86 |
#ifndef VL53L1_NOCALIB
|
87 |
VL53L1_Error VL53L1_init_refspadchar_config_struct( |
88 |
VL53L1_refspadchar_config_t *pdata) |
89 |
{ |
90 |
/*
|
91 |
* Initializes Ref SPAD Char data structures preset mode
|
92 |
*/
|
93 |
|
94 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
95 |
|
96 |
LOG_FUNCTION_START("");
|
97 |
|
98 |
/* Reference SPAD Char Configuration
|
99 |
*
|
100 |
* vcsel_period = 0x0B - 24 clock VCSEL period
|
101 |
* timeout_us = 1000 - Set 1000us phase cal timeout
|
102 |
* target_count_rate_mcps = 0x0A00 - 9.7 -> 20.0 Mcps
|
103 |
* min_count_rate_limit_mcps = 0x0500 - 9.7 -> 10.0 Mcps
|
104 |
* max_count_rate_limit_mcps = 0x1400 - 9.7 -> 40.0 Mcps
|
105 |
*/
|
106 |
|
107 |
pdata->device_test_mode = |
108 |
VL53L1_TUNINGPARM_REFSPADCHAR_DEVICE_TEST_MODE_DEFAULT; |
109 |
pdata->vcsel_period = |
110 |
VL53L1_TUNINGPARM_REFSPADCHAR_VCSEL_PERIOD_DEFAULT; |
111 |
pdata->timeout_us = |
112 |
VL53L1_TUNINGPARM_REFSPADCHAR_PHASECAL_TIMEOUT_US_DEFAULT; |
113 |
pdata->target_count_rate_mcps = |
114 |
VL53L1_TUNINGPARM_REFSPADCHAR_TARGET_COUNT_RATE_MCPS_DEFAULT; |
115 |
pdata->min_count_rate_limit_mcps = |
116 |
VL53L1_TUNINGPARM_REFSPADCHAR_MIN_COUNTRATE_LIMIT_MCPS_DEFAULT; |
117 |
pdata->max_count_rate_limit_mcps = |
118 |
VL53L1_TUNINGPARM_REFSPADCHAR_MAX_COUNTRATE_LIMIT_MCPS_DEFAULT; |
119 |
|
120 |
LOG_FUNCTION_END(status); |
121 |
|
122 |
return status;
|
123 |
} |
124 |
#endif
|
125 |
|
126 |
|
127 |
#ifndef VL53L1_NOCALIB
|
128 |
VL53L1_Error VL53L1_init_ssc_config_struct( |
129 |
VL53L1_ssc_config_t *pdata) |
130 |
{ |
131 |
/*
|
132 |
* Initializes SPAD Self Check (SSC) data structure
|
133 |
*/
|
134 |
|
135 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
136 |
|
137 |
LOG_FUNCTION_START("");
|
138 |
|
139 |
/* SPAD Select Check Configuration */
|
140 |
|
141 |
/* 0 - store RTN count rates
|
142 |
* 1 - store REF count rates
|
143 |
*/
|
144 |
pdata->array_select = VL53L1_DEVICESSCARRAY_RTN; |
145 |
|
146 |
/* VCSEL period register value 0x12 (18) -> 38 VCSEL clocks */
|
147 |
pdata->vcsel_period = |
148 |
VL53L1_TUNINGPARM_SPADMAP_VCSEL_PERIOD_DEFAULT; |
149 |
|
150 |
/* VCSEL pulse start */
|
151 |
pdata->vcsel_start = |
152 |
VL53L1_TUNINGPARM_SPADMAP_VCSEL_START_DEFAULT; |
153 |
|
154 |
/* VCSEL pulse width */
|
155 |
pdata->vcsel_width = 0x02;
|
156 |
|
157 |
/* SSC timeout [us] */
|
158 |
pdata->timeout_us = 36000;
|
159 |
|
160 |
/* SSC rate limit [Mcps]
|
161 |
* - 9.7 for VCSEL ON
|
162 |
* - 1.15 for VCSEL OFF
|
163 |
*/
|
164 |
pdata->rate_limit_mcps = |
165 |
VL53L1_TUNINGPARM_SPADMAP_RATE_LIMIT_MCPS_DEFAULT; |
166 |
|
167 |
LOG_FUNCTION_END(status); |
168 |
|
169 |
return status;
|
170 |
} |
171 |
#endif
|
172 |
|
173 |
|
174 |
VL53L1_Error VL53L1_init_xtalk_config_struct( |
175 |
VL53L1_customer_nvm_managed_t *pnvm, |
176 |
VL53L1_xtalk_config_t *pdata) |
177 |
{ |
178 |
/*
|
179 |
* Initializes Xtalk Config structure
|
180 |
*/
|
181 |
|
182 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
183 |
|
184 |
LOG_FUNCTION_START("");
|
185 |
|
186 |
/* Xtalk default configuration
|
187 |
*
|
188 |
* algo__crosstalk_compensation_plane_offset_kcps
|
189 |
* = pdev->customer.algo__crosstalk_compensation_plane_offset_kcps
|
190 |
* algo__crosstalk_compensation_x_plane_gradient_kcps
|
191 |
* = pdev->customer.algo__crosstalk_compensation_x_plane_gradient_kcps
|
192 |
* algo__crosstalk_compensation_y_plane_gradient_kcps
|
193 |
* = pdev->customer.algo__crosstalk_compensation_y_plane_gradient_kcps
|
194 |
*
|
195 |
*/
|
196 |
|
197 |
/* Store xtalk data into golden copy */
|
198 |
|
199 |
pdata->algo__crosstalk_compensation_plane_offset_kcps = |
200 |
pnvm->algo__crosstalk_compensation_plane_offset_kcps; |
201 |
pdata->algo__crosstalk_compensation_x_plane_gradient_kcps = |
202 |
pnvm->algo__crosstalk_compensation_x_plane_gradient_kcps; |
203 |
pdata->algo__crosstalk_compensation_y_plane_gradient_kcps = |
204 |
pnvm->algo__crosstalk_compensation_y_plane_gradient_kcps; |
205 |
|
206 |
/* Store NVM defaults for later use */
|
207 |
|
208 |
pdata->nvm_default__crosstalk_compensation_plane_offset_kcps = |
209 |
(uint32_t)pnvm->algo__crosstalk_compensation_plane_offset_kcps; |
210 |
pdata->nvm_default__crosstalk_compensation_x_plane_gradient_kcps = |
211 |
pnvm->algo__crosstalk_compensation_x_plane_gradient_kcps; |
212 |
pdata->nvm_default__crosstalk_compensation_y_plane_gradient_kcps = |
213 |
pnvm->algo__crosstalk_compensation_y_plane_gradient_kcps; |
214 |
|
215 |
pdata->lite_mode_crosstalk_margin_kcps = |
216 |
VL53L1_TUNINGPARM_LITE_XTALK_MARGIN_KCPS_DEFAULT; |
217 |
|
218 |
/* Default for Range Ignore Threshold Mult = 2.0 */
|
219 |
|
220 |
pdata->crosstalk_range_ignore_threshold_mult = |
221 |
VL53L1_TUNINGPARM_LITE_RIT_MULT_DEFAULT; |
222 |
|
223 |
if ((pdata->algo__crosstalk_compensation_plane_offset_kcps == 0x00) |
224 |
&& (pdata->algo__crosstalk_compensation_x_plane_gradient_kcps == 0x00)
|
225 |
&& (pdata->algo__crosstalk_compensation_y_plane_gradient_kcps == 0x00))
|
226 |
pdata->global_crosstalk_compensation_enable = 0x00;
|
227 |
else
|
228 |
pdata->global_crosstalk_compensation_enable = 0x01;
|
229 |
|
230 |
|
231 |
if ((status == VL53L1_ERROR_NONE) &&
|
232 |
(pdata->global_crosstalk_compensation_enable == 0x01)) {
|
233 |
pdata->crosstalk_range_ignore_threshold_rate_mcps = |
234 |
VL53L1_calc_range_ignore_threshold( |
235 |
pdata->algo__crosstalk_compensation_plane_offset_kcps, |
236 |
pdata->algo__crosstalk_compensation_x_plane_gradient_kcps, |
237 |
pdata->algo__crosstalk_compensation_y_plane_gradient_kcps, |
238 |
pdata->crosstalk_range_ignore_threshold_mult); |
239 |
} else {
|
240 |
pdata->crosstalk_range_ignore_threshold_rate_mcps = 0;
|
241 |
} |
242 |
|
243 |
LOG_FUNCTION_END(status); |
244 |
|
245 |
return status;
|
246 |
} |
247 |
|
248 |
#ifndef VL53L1_NOCALIB
|
249 |
VL53L1_Error VL53L1_init_offset_cal_config_struct( |
250 |
VL53L1_offsetcal_config_t *pdata) |
251 |
{ |
252 |
/*
|
253 |
* Initializes Offset Calibration Config structure
|
254 |
* - for use with VL53L1_run_offset_calibration()
|
255 |
*/
|
256 |
|
257 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
258 |
|
259 |
LOG_FUNCTION_START("");
|
260 |
|
261 |
/* Preset Timeout and DSS defaults */
|
262 |
|
263 |
pdata->dss_config__target_total_rate_mcps = |
264 |
VL53L1_TUNINGPARM_OFFSET_CAL_DSS_RATE_MCPS_DEFAULT; |
265 |
/* 20.0 Mcps */
|
266 |
pdata->phasecal_config_timeout_us = |
267 |
VL53L1_TUNINGPARM_OFFSET_CAL_PHASECAL_TIMEOUT_US_DEFAULT; |
268 |
/* 1000 us */
|
269 |
pdata->range_config_timeout_us = |
270 |
VL53L1_TUNINGPARM_OFFSET_CAL_RANGE_TIMEOUT_US_DEFAULT; |
271 |
/* 13000 us */
|
272 |
pdata->mm_config_timeout_us = |
273 |
VL53L1_TUNINGPARM_OFFSET_CAL_MM_TIMEOUT_US_DEFAULT; |
274 |
/* 13000 us - Added as part of Patch_AddedOffsetCalMMTuningParm_11791 */
|
275 |
|
276 |
/* Init number of averaged samples */
|
277 |
|
278 |
pdata->pre_num_of_samples = |
279 |
VL53L1_TUNINGPARM_OFFSET_CAL_PRE_SAMPLES_DEFAULT; |
280 |
pdata->mm1_num_of_samples = |
281 |
VL53L1_TUNINGPARM_OFFSET_CAL_MM1_SAMPLES_DEFAULT; |
282 |
pdata->mm2_num_of_samples = |
283 |
VL53L1_TUNINGPARM_OFFSET_CAL_MM2_SAMPLES_DEFAULT; |
284 |
|
285 |
LOG_FUNCTION_END(status); |
286 |
|
287 |
return status;
|
288 |
} |
289 |
#endif
|
290 |
|
291 |
VL53L1_Error VL53L1_init_tuning_parm_storage_struct( |
292 |
VL53L1_tuning_parm_storage_t *pdata) |
293 |
{ |
294 |
/*
|
295 |
* Initializes Tuning Param storage structure
|
296 |
*/
|
297 |
|
298 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
299 |
|
300 |
LOG_FUNCTION_START("");
|
301 |
|
302 |
/* Default configuration
|
303 |
*
|
304 |
* - Custom overwrite possible from vl53l1_set_tuning_parms()
|
305 |
* - via tuning file input
|
306 |
*/
|
307 |
|
308 |
pdata->tp_tuning_parm_version = |
309 |
VL53L1_TUNINGPARM_VERSION_DEFAULT; |
310 |
pdata->tp_tuning_parm_key_table_version = |
311 |
VL53L1_TUNINGPARM_KEY_TABLE_VERSION_DEFAULT; |
312 |
pdata->tp_tuning_parm_lld_version = |
313 |
VL53L1_TUNINGPARM_LLD_VERSION_DEFAULT; |
314 |
pdata->tp_init_phase_rtn_lite_long = |
315 |
VL53L1_TUNINGPARM_INITIAL_PHASE_RTN_LITE_LONG_RANGE_DEFAULT; |
316 |
pdata->tp_init_phase_rtn_lite_med = |
317 |
VL53L1_TUNINGPARM_INITIAL_PHASE_RTN_LITE_MED_RANGE_DEFAULT; |
318 |
pdata->tp_init_phase_rtn_lite_short = |
319 |
VL53L1_TUNINGPARM_INITIAL_PHASE_RTN_LITE_SHORT_RANGE_DEFAULT; |
320 |
pdata->tp_init_phase_ref_lite_long = |
321 |
VL53L1_TUNINGPARM_INITIAL_PHASE_REF_LITE_LONG_RANGE_DEFAULT; |
322 |
pdata->tp_init_phase_ref_lite_med = |
323 |
VL53L1_TUNINGPARM_INITIAL_PHASE_REF_LITE_MED_RANGE_DEFAULT; |
324 |
pdata->tp_init_phase_ref_lite_short = |
325 |
VL53L1_TUNINGPARM_INITIAL_PHASE_REF_LITE_SHORT_RANGE_DEFAULT; |
326 |
pdata->tp_consistency_lite_phase_tolerance = |
327 |
VL53L1_TUNINGPARM_CONSISTENCY_LITE_PHASE_TOLERANCE_DEFAULT; |
328 |
pdata->tp_phasecal_target = |
329 |
VL53L1_TUNINGPARM_PHASECAL_TARGET_DEFAULT; |
330 |
pdata->tp_cal_repeat_rate = |
331 |
VL53L1_TUNINGPARM_LITE_CAL_REPEAT_RATE_DEFAULT; |
332 |
pdata->tp_lite_min_clip = |
333 |
VL53L1_TUNINGPARM_LITE_MIN_CLIP_MM_DEFAULT; |
334 |
pdata->tp_lite_long_sigma_thresh_mm = |
335 |
VL53L1_TUNINGPARM_LITE_LONG_SIGMA_THRESH_MM_DEFAULT; |
336 |
pdata->tp_lite_med_sigma_thresh_mm = |
337 |
VL53L1_TUNINGPARM_LITE_MED_SIGMA_THRESH_MM_DEFAULT; |
338 |
pdata->tp_lite_short_sigma_thresh_mm = |
339 |
VL53L1_TUNINGPARM_LITE_SHORT_SIGMA_THRESH_MM_DEFAULT; |
340 |
pdata->tp_lite_long_min_count_rate_rtn_mcps = |
341 |
VL53L1_TUNINGPARM_LITE_LONG_MIN_COUNT_RATE_RTN_MCPS_DEFAULT; |
342 |
pdata->tp_lite_med_min_count_rate_rtn_mcps = |
343 |
VL53L1_TUNINGPARM_LITE_MED_MIN_COUNT_RATE_RTN_MCPS_DEFAULT; |
344 |
pdata->tp_lite_short_min_count_rate_rtn_mcps = |
345 |
VL53L1_TUNINGPARM_LITE_SHORT_MIN_COUNT_RATE_RTN_MCPS_DEFAULT; |
346 |
pdata->tp_lite_sigma_est_pulse_width_ns = |
347 |
VL53L1_TUNINGPARM_LITE_SIGMA_EST_PULSE_WIDTH_DEFAULT; |
348 |
pdata->tp_lite_sigma_est_amb_width_ns = |
349 |
VL53L1_TUNINGPARM_LITE_SIGMA_EST_AMB_WIDTH_NS_DEFAULT; |
350 |
pdata->tp_lite_sigma_ref_mm = |
351 |
VL53L1_TUNINGPARM_LITE_SIGMA_REF_MM_DEFAULT; |
352 |
pdata->tp_lite_seed_cfg = |
353 |
VL53L1_TUNINGPARM_LITE_SEED_CONFIG_DEFAULT; |
354 |
pdata->tp_timed_seed_cfg = |
355 |
VL53L1_TUNINGPARM_TIMED_SEED_CONFIG_DEFAULT; |
356 |
pdata->tp_lite_quantifier = |
357 |
VL53L1_TUNINGPARM_LITE_QUANTIFIER_DEFAULT; |
358 |
pdata->tp_lite_first_order_select = |
359 |
VL53L1_TUNINGPARM_LITE_FIRST_ORDER_SELECT_DEFAULT; |
360 |
|
361 |
/* Preset Mode Configurations */
|
362 |
/* - New parms added as part of Patch_TuningParmPresetModeAddition_11839 */
|
363 |
|
364 |
pdata->tp_dss_target_lite_mcps = |
365 |
VL53L1_TUNINGPARM_LITE_DSS_CONFIG_TARGET_TOTAL_RATE_MCPS_DEFAULT; |
366 |
pdata->tp_dss_target_timed_mcps = |
367 |
VL53L1_TUNINGPARM_TIMED_DSS_CONFIG_TARGET_TOTAL_RATE_MCPS_DEFAULT; |
368 |
pdata->tp_phasecal_timeout_lite_us = |
369 |
VL53L1_TUNINGPARM_LITE_PHASECAL_CONFIG_TIMEOUT_US; |
370 |
pdata->tp_phasecal_timeout_timed_us = |
371 |
VL53L1_TUNINGPARM_TIMED_PHASECAL_CONFIG_TIMEOUT_US_DEFAULT; |
372 |
pdata->tp_mm_timeout_lite_us = |
373 |
VL53L1_TUNINGPARM_LITE_MM_CONFIG_TIMEOUT_US_DEFAULT; |
374 |
pdata->tp_mm_timeout_timed_us = |
375 |
VL53L1_TUNINGPARM_TIMED_MM_CONFIG_TIMEOUT_US_DEFAULT; |
376 |
pdata->tp_range_timeout_lite_us = |
377 |
VL53L1_TUNINGPARM_LITE_RANGE_CONFIG_TIMEOUT_US_DEFAULT; |
378 |
pdata->tp_range_timeout_timed_us = |
379 |
VL53L1_TUNINGPARM_TIMED_RANGE_CONFIG_TIMEOUT_US_DEFAULT; |
380 |
|
381 |
/* Added for Patch_LowPowerAutoMode */
|
382 |
|
383 |
pdata->tp_mm_timeout_lpa_us = |
384 |
VL53L1_TUNINGPARM_LOWPOWERAUTO_MM_CONFIG_TIMEOUT_US_DEFAULT; |
385 |
pdata->tp_range_timeout_lpa_us = |
386 |
VL53L1_TUNINGPARM_LOWPOWERAUTO_RANGE_CONFIG_TIMEOUT_US_DEFAULT; |
387 |
|
388 |
|
389 |
LOG_FUNCTION_END(status); |
390 |
|
391 |
return status;
|
392 |
} |
393 |
|
394 |
|
395 |
VL53L1_Error VL53L1_preset_mode_standard_ranging( |
396 |
VL53L1_static_config_t *pstatic, |
397 |
VL53L1_general_config_t *pgeneral, |
398 |
VL53L1_timing_config_t *ptiming, |
399 |
VL53L1_dynamic_config_t *pdynamic, |
400 |
VL53L1_system_control_t *psystem, |
401 |
VL53L1_tuning_parm_storage_t *ptuning_parms) |
402 |
{ |
403 |
/*
|
404 |
* Initializes static and dynamic data structures fordevice preset mode
|
405 |
* VL53L1_DEVICEPRESETMODE_STANDARD_RANGING
|
406 |
*
|
407 |
* - streaming
|
408 |
* - single sigma delta
|
409 |
* - back to back
|
410 |
*
|
411 |
* PLEASE NOTE THE SETTINGS BELOW AT PROVISIONAL AND WILL CHANGE!
|
412 |
*/
|
413 |
|
414 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
415 |
|
416 |
LOG_FUNCTION_START("");
|
417 |
|
418 |
/* Static Configuration */
|
419 |
|
420 |
/* dss_config__target_total_rate_mcps = 20.0 Mcps 9.7 fp */
|
421 |
pstatic->dss_config__target_total_rate_mcps = 0x0A00;
|
422 |
pstatic->debug__ctrl = 0x00;
|
423 |
pstatic->test_mode__ctrl = 0x00;
|
424 |
pstatic->clk_gating__ctrl = 0x00;
|
425 |
pstatic->nvm_bist__ctrl = 0x00;
|
426 |
pstatic->nvm_bist__num_nvm_words = 0x00;
|
427 |
pstatic->nvm_bist__start_address = 0x00;
|
428 |
pstatic->host_if__status = 0x00;
|
429 |
pstatic->pad_i2c_hv__config = 0x00;
|
430 |
pstatic->pad_i2c_hv__extsup_config = 0x00;
|
431 |
|
432 |
/*
|
433 |
* 0 - gpio__extsup_hv
|
434 |
* 1 - gpio__vmodeint_hv
|
435 |
*/
|
436 |
pstatic->gpio_hv_pad__ctrl = 0x00;
|
437 |
|
438 |
/*
|
439 |
* Set interrupt active low
|
440 |
*
|
441 |
* 3:0 - gpio__mux_select_hv
|
442 |
* 4 - gpio__mux_active_high_hv
|
443 |
*/
|
444 |
pstatic->gpio_hv_mux__ctrl = \ |
445 |
VL53L1_DEVICEINTERRUPTPOLARITY_ACTIVE_LOW | \ |
446 |
VL53L1_DEVICEGPIOMODE_OUTPUT_RANGE_AND_ERROR_INTERRUPTS; |
447 |
|
448 |
pstatic->gpio__tio_hv_status = 0x02;
|
449 |
pstatic->gpio__fio_hv_status = 0x00;
|
450 |
pstatic->ana_config__spad_sel_pswidth = 0x02;
|
451 |
pstatic->ana_config__vcsel_pulse_width_offset = 0x08;
|
452 |
pstatic->ana_config__fast_osc__config_ctrl = 0x00;
|
453 |
|
454 |
pstatic->sigma_estimator__effective_pulse_width_ns = |
455 |
ptuning_parms->tp_lite_sigma_est_pulse_width_ns; |
456 |
pstatic->sigma_estimator__effective_ambient_width_ns = |
457 |
ptuning_parms->tp_lite_sigma_est_amb_width_ns; |
458 |
pstatic->sigma_estimator__sigma_ref_mm = |
459 |
ptuning_parms->tp_lite_sigma_ref_mm; |
460 |
/* Minimum allowable value of 1 - 0 disables the feature */
|
461 |
pstatic->algo__crosstalk_compensation_valid_height_mm = 0x01;
|
462 |
pstatic->spare_host_config__static_config_spare_0 = 0x00;
|
463 |
pstatic->spare_host_config__static_config_spare_1 = 0x00;
|
464 |
|
465 |
pstatic->algo__range_ignore_threshold_mcps = 0x0000;
|
466 |
|
467 |
/* set RIT distance to 20 mm */
|
468 |
pstatic->algo__range_ignore_valid_height_mm = 0xff;
|
469 |
pstatic->algo__range_min_clip = |
470 |
ptuning_parms->tp_lite_min_clip; |
471 |
/*
|
472 |
* Phase consistency check limit - format 1.3 fp
|
473 |
* 0x02 -> 0.25
|
474 |
* 0x08 -> 1.00
|
475 |
*/
|
476 |
pstatic->algo__consistency_check__tolerance = |
477 |
ptuning_parms->tp_consistency_lite_phase_tolerance; |
478 |
pstatic->spare_host_config__static_config_spare_2 = 0x00;
|
479 |
pstatic->sd_config__reset_stages_msb = 0x00;
|
480 |
pstatic->sd_config__reset_stages_lsb = 0x00;
|
481 |
|
482 |
pgeneral->gph_config__stream_count_update_value = 0x00;
|
483 |
pgeneral->global_config__stream_divider = 0x00;
|
484 |
pgeneral->system__interrupt_config_gpio = |
485 |
VL53L1_INTERRUPT_CONFIG_NEW_SAMPLE_READY; |
486 |
pgeneral->cal_config__vcsel_start = 0x0B;
|
487 |
|
488 |
/*
|
489 |
* Set VHV / Phase Cal repeat rate to 1 every
|
490 |
* 60 * 60 ranges (once every minute @ 60Hz)
|
491 |
* 0 - disables
|
492 |
* 12-bit value -> 4095 max
|
493 |
*/
|
494 |
pgeneral->cal_config__repeat_rate = |
495 |
ptuning_parms->tp_cal_repeat_rate; |
496 |
pgeneral->global_config__vcsel_width = 0x02;
|
497 |
/* 13 macro periods gives a timeout of 1ms */
|
498 |
pgeneral->phasecal_config__timeout_macrop = 0x0D;
|
499 |
/* Phase cal target phase 2.0625 - 4.4 fp -> 0x21*/
|
500 |
pgeneral->phasecal_config__target = |
501 |
ptuning_parms->tp_phasecal_target; |
502 |
pgeneral->phasecal_config__override = 0x00;
|
503 |
pgeneral->dss_config__roi_mode_control = |
504 |
VL53L1_DEVICEDSSMODE__TARGET_RATE; |
505 |
/* format for threshold high and low is 9.7 fp */
|
506 |
pgeneral->system__thresh_rate_high = 0x0000;
|
507 |
pgeneral->system__thresh_rate_low = 0x0000;
|
508 |
/* The format for manual effective spads is 8.8 -> 0x8C00 = 140.00 */
|
509 |
pgeneral->dss_config__manual_effective_spads_select = 0x8C00;
|
510 |
pgeneral->dss_config__manual_block_select = 0x00;
|
511 |
|
512 |
/*
|
513 |
* Aperture attenuation value - format 0.8
|
514 |
*
|
515 |
* Nominal: 5x -> 0.200000 * 256 = 51 = 0x33
|
516 |
* Measured: 4.6x -> 0.217391 * 256 = 56 = 0x38
|
517 |
*/
|
518 |
pgeneral->dss_config__aperture_attenuation = 0x38;
|
519 |
pgeneral->dss_config__max_spads_limit = 0xFF;
|
520 |
pgeneral->dss_config__min_spads_limit = 0x01;
|
521 |
|
522 |
/* Timing Configuration */
|
523 |
|
524 |
/* Default timing of 2ms */
|
525 |
ptiming->mm_config__timeout_macrop_a_hi = 0x00;
|
526 |
ptiming->mm_config__timeout_macrop_a_lo = 0x1a;
|
527 |
ptiming->mm_config__timeout_macrop_b_hi = 0x00;
|
528 |
ptiming->mm_config__timeout_macrop_b_lo = 0x20;
|
529 |
/* Setup for 30ms default */
|
530 |
ptiming->range_config__timeout_macrop_a_hi = 0x01;
|
531 |
ptiming->range_config__timeout_macrop_a_lo = 0xCC;
|
532 |
/* register value 11 gives a 24 VCSEL period */
|
533 |
ptiming->range_config__vcsel_period_a = 0x0B;
|
534 |
/* Setup for 30ms default */
|
535 |
ptiming->range_config__timeout_macrop_b_hi = 0x01;
|
536 |
ptiming->range_config__timeout_macrop_b_lo = 0xF5;
|
537 |
/* register value 09 gives a 20 VCSEL period */
|
538 |
ptiming->range_config__vcsel_period_b = 0x09;
|
539 |
/*
|
540 |
* Sigma thresh register - format 14.2
|
541 |
*
|
542 |
* 0x003C -> 15.0 mm
|
543 |
* 0x0050 -> 20.0 mm
|
544 |
*/
|
545 |
ptiming->range_config__sigma_thresh = |
546 |
ptuning_parms->tp_lite_med_sigma_thresh_mm; |
547 |
/*
|
548 |
* Rate Limit - format 9.7fp
|
549 |
* 0x0020 -> 0.250 Mcps
|
550 |
* 0x0080 -> 1.000 Mcps
|
551 |
*/
|
552 |
ptiming->range_config__min_count_rate_rtn_limit_mcps = |
553 |
ptuning_parms->tp_lite_med_min_count_rate_rtn_mcps; |
554 |
|
555 |
/* Phase limit register formats = 5.3
|
556 |
* low = 0x08 -> 1.0
|
557 |
* high = 0x78 -> 15.0 -> 3.0m
|
558 |
*/
|
559 |
ptiming->range_config__valid_phase_low = 0x08;
|
560 |
ptiming->range_config__valid_phase_high = 0x78;
|
561 |
ptiming->system__intermeasurement_period = 0x00000000;
|
562 |
ptiming->system__fractional_enable = 0x00;
|
563 |
|
564 |
/* Dynamic Configuration */
|
565 |
|
566 |
pdynamic->system__grouped_parameter_hold_0 = 0x01;
|
567 |
|
568 |
pdynamic->system__thresh_high = 0x0000;
|
569 |
pdynamic->system__thresh_low = 0x0000;
|
570 |
pdynamic->system__enable_xtalk_per_quadrant = 0x00;
|
571 |
pdynamic->system__seed_config = |
572 |
ptuning_parms->tp_lite_seed_cfg; |
573 |
|
574 |
/* Timing A */
|
575 |
pdynamic->sd_config__woi_sd0 = 0x0B;
|
576 |
/* Timing B */
|
577 |
pdynamic->sd_config__woi_sd1 = 0x09;
|
578 |
|
579 |
pdynamic->sd_config__initial_phase_sd0 = |
580 |
ptuning_parms->tp_init_phase_rtn_lite_med; |
581 |
pdynamic->sd_config__initial_phase_sd1 = |
582 |
ptuning_parms->tp_init_phase_ref_lite_med;; |
583 |
|
584 |
pdynamic->system__grouped_parameter_hold_1 = 0x01;
|
585 |
|
586 |
/*
|
587 |
* Quantifier settings
|
588 |
*
|
589 |
* sd_config__first_order_select
|
590 |
* bit 0 - return sigma delta
|
591 |
* bit 1 - reference sigma delta
|
592 |
*
|
593 |
* sd_config__first_order_select = 0x03 (1st order)
|
594 |
*
|
595 |
* sd_config__quantifier options
|
596 |
* 0
|
597 |
* 1 -> 64
|
598 |
* 2 -> 128
|
599 |
* 3 -> 256
|
600 |
*
|
601 |
* sd_config__first_order_select = 0x00 (2nd order)
|
602 |
*
|
603 |
* sd_config__quantifier options
|
604 |
* 0
|
605 |
* 1 -> 256
|
606 |
* 2 -> 1024
|
607 |
* 3 -> 4095
|
608 |
*
|
609 |
* Setting below 2nd order, Quantifier = 1024
|
610 |
*/
|
611 |
|
612 |
pdynamic->sd_config__first_order_select = |
613 |
ptuning_parms->tp_lite_first_order_select; |
614 |
pdynamic->sd_config__quantifier = |
615 |
ptuning_parms->tp_lite_quantifier; |
616 |
|
617 |
/* Below defaults will be overwritten by zone_cfg
|
618 |
* Spad no = 199 (0xC7)
|
619 |
* Spad no = 63 (0x3F)
|
620 |
*/
|
621 |
pdynamic->roi_config__user_roi_centre_spad = 0xC7;
|
622 |
/* 16x16 ROI */
|
623 |
pdynamic->roi_config__user_roi_requested_global_xy_size = 0xFF;
|
624 |
|
625 |
|
626 |
pdynamic->system__sequence_config = \ |
627 |
VL53L1_SEQUENCE_VHV_EN | \ |
628 |
VL53L1_SEQUENCE_PHASECAL_EN | \ |
629 |
VL53L1_SEQUENCE_DSS1_EN | \ |
630 |
VL53L1_SEQUENCE_DSS2_EN | \ |
631 |
VL53L1_SEQUENCE_MM2_EN | \ |
632 |
VL53L1_SEQUENCE_RANGE_EN; |
633 |
|
634 |
pdynamic->system__grouped_parameter_hold = 0x02;
|
635 |
|
636 |
/* System control */
|
637 |
|
638 |
|
639 |
psystem->system__stream_count_ctrl = 0x00;
|
640 |
psystem->firmware__enable = 0x01;
|
641 |
psystem->system__interrupt_clear = \ |
642 |
VL53L1_CLEAR_RANGE_INT; |
643 |
|
644 |
psystem->system__mode_start = \ |
645 |
VL53L1_DEVICESCHEDULERMODE_STREAMING | \ |
646 |
VL53L1_DEVICEREADOUTMODE_SINGLE_SD | \ |
647 |
VL53L1_DEVICEMEASUREMENTMODE_BACKTOBACK; |
648 |
|
649 |
LOG_FUNCTION_END(status); |
650 |
|
651 |
return status;
|
652 |
} |
653 |
|
654 |
|
655 |
VL53L1_Error VL53L1_preset_mode_standard_ranging_short_range( |
656 |
VL53L1_static_config_t *pstatic, |
657 |
VL53L1_general_config_t *pgeneral, |
658 |
VL53L1_timing_config_t *ptiming, |
659 |
VL53L1_dynamic_config_t *pdynamic, |
660 |
VL53L1_system_control_t *psystem, |
661 |
VL53L1_tuning_parm_storage_t *ptuning_parms) |
662 |
{ |
663 |
/*
|
664 |
* Initializes static and dynamic data structures for
|
665 |
* device preset mode
|
666 |
*
|
667 |
* VL53L1_DEVICEPRESETMODE_STANDARD_RANGING_SHORT_RANGE
|
668 |
* (up to 1.4 metres)
|
669 |
*
|
670 |
* PLEASE NOTE THE SETTINGS BELOW AT PROVISIONAL AND WILL CHANGE!
|
671 |
*/
|
672 |
|
673 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
674 |
|
675 |
LOG_FUNCTION_START("");
|
676 |
|
677 |
/* Call standard ranging configuration followed by
|
678 |
* overrides for the short range configuration
|
679 |
*/
|
680 |
|
681 |
status = VL53L1_preset_mode_standard_ranging( |
682 |
pstatic, |
683 |
pgeneral, |
684 |
ptiming, |
685 |
pdynamic, |
686 |
psystem, |
687 |
ptuning_parms); |
688 |
|
689 |
/* now override standard ranging specific registers */
|
690 |
|
691 |
if (status == VL53L1_ERROR_NONE) {
|
692 |
|
693 |
/* Timing Configuration
|
694 |
*
|
695 |
* vcsel_period_a = 7 -> 16 period
|
696 |
* vcsel_period_b = 5 -> 12 period
|
697 |
* sigma_thresh = 0x003C -> 14.2fp -> 15.0 mm
|
698 |
* min_count_rate_rtn_limit_mcps = 0x0080 -> 9.7fp -> 1.0 Mcps
|
699 |
* valid_phase_low = 0x08 -> 5.3fp -> 1.0
|
700 |
* valid_phase_high = 0x38 -> 5.3fp -> 7.0 -> 1.4m
|
701 |
*/
|
702 |
|
703 |
ptiming->range_config__vcsel_period_a = 0x07;
|
704 |
ptiming->range_config__vcsel_period_b = 0x05;
|
705 |
ptiming->range_config__sigma_thresh = |
706 |
ptuning_parms->tp_lite_short_sigma_thresh_mm; |
707 |
ptiming->range_config__min_count_rate_rtn_limit_mcps = |
708 |
ptuning_parms->tp_lite_short_min_count_rate_rtn_mcps; |
709 |
ptiming->range_config__valid_phase_low = 0x08;
|
710 |
ptiming->range_config__valid_phase_high = 0x38;
|
711 |
|
712 |
/* Dynamic Configuration
|
713 |
* SD0 -> Timing A
|
714 |
* SD1 -> Timing B
|
715 |
*/
|
716 |
|
717 |
pdynamic->sd_config__woi_sd0 = 0x07;
|
718 |
pdynamic->sd_config__woi_sd1 = 0x05;
|
719 |
pdynamic->sd_config__initial_phase_sd0 = |
720 |
ptuning_parms->tp_init_phase_rtn_lite_short; |
721 |
pdynamic->sd_config__initial_phase_sd1 = |
722 |
ptuning_parms->tp_init_phase_ref_lite_short; |
723 |
} |
724 |
|
725 |
LOG_FUNCTION_END(status); |
726 |
|
727 |
return status;
|
728 |
} |
729 |
|
730 |
|
731 |
VL53L1_Error VL53L1_preset_mode_standard_ranging_long_range( |
732 |
VL53L1_static_config_t *pstatic, |
733 |
VL53L1_general_config_t *pgeneral, |
734 |
VL53L1_timing_config_t *ptiming, |
735 |
VL53L1_dynamic_config_t *pdynamic, |
736 |
VL53L1_system_control_t *psystem, |
737 |
VL53L1_tuning_parm_storage_t *ptuning_parms) |
738 |
{ |
739 |
/*
|
740 |
* Initializes static and dynamic data structures for
|
741 |
* device preset mode
|
742 |
*
|
743 |
* VL53L1_DEVICEPRESETMODE_STANDARD_RANGING_LONG_RANGE
|
744 |
* (up to 4.8 metres)
|
745 |
*
|
746 |
* PLEASE NOTE THE SETTINGS BELOW AT PROVISIONAL AND WILL CHANGE!
|
747 |
*/
|
748 |
|
749 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
750 |
|
751 |
LOG_FUNCTION_START("");
|
752 |
|
753 |
/* Call standard ranging configuration with
|
754 |
* overrides for long range configuration
|
755 |
*/
|
756 |
|
757 |
status = VL53L1_preset_mode_standard_ranging( |
758 |
pstatic, |
759 |
pgeneral, |
760 |
ptiming, |
761 |
pdynamic, |
762 |
psystem, |
763 |
ptuning_parms); |
764 |
|
765 |
/* now override standard ranging specific registers */
|
766 |
|
767 |
if (status == VL53L1_ERROR_NONE) {
|
768 |
|
769 |
/* Timing Configuration
|
770 |
*
|
771 |
* vcsel_period_a = 15 -> 32 period
|
772 |
* vcsel_period_b = 13 -> 28 period
|
773 |
* sigma_thresh = 0x003C -> 14.2fp -> 15.0 mm
|
774 |
* min_count_rate_rtn_limit_mcps = 0x0080 -> 9.7fp -> 1.0 Mcps
|
775 |
* valid_phase_low = 0x08 -> 5.3fp -> 1.0
|
776 |
* valid_phase_high = 0xB8 -> 5.3fp -> 23.0 -> 4.6m
|
777 |
*/
|
778 |
|
779 |
ptiming->range_config__vcsel_period_a = 0x0F;
|
780 |
ptiming->range_config__vcsel_period_b = 0x0D;
|
781 |
ptiming->range_config__sigma_thresh = |
782 |
ptuning_parms->tp_lite_long_sigma_thresh_mm; |
783 |
ptiming->range_config__min_count_rate_rtn_limit_mcps = |
784 |
ptuning_parms->tp_lite_long_min_count_rate_rtn_mcps; |
785 |
ptiming->range_config__valid_phase_low = 0x08;
|
786 |
ptiming->range_config__valid_phase_high = 0xB8;
|
787 |
|
788 |
/* Dynamic Configuration
|
789 |
* SD0 -> Timing A
|
790 |
* SD1 -> Timing B
|
791 |
*/
|
792 |
|
793 |
pdynamic->sd_config__woi_sd0 = 0x0F;
|
794 |
pdynamic->sd_config__woi_sd1 = 0x0D;
|
795 |
pdynamic->sd_config__initial_phase_sd0 = |
796 |
ptuning_parms->tp_init_phase_rtn_lite_long; |
797 |
pdynamic->sd_config__initial_phase_sd1 = |
798 |
ptuning_parms->tp_init_phase_ref_lite_long; |
799 |
} |
800 |
|
801 |
LOG_FUNCTION_END(status); |
802 |
|
803 |
return status;
|
804 |
} |
805 |
|
806 |
|
807 |
#ifndef VL53L1_NOCALIB
|
808 |
VL53L1_Error VL53L1_preset_mode_standard_ranging_mm1_cal( |
809 |
VL53L1_static_config_t *pstatic, |
810 |
VL53L1_general_config_t *pgeneral, |
811 |
VL53L1_timing_config_t *ptiming, |
812 |
VL53L1_dynamic_config_t *pdynamic, |
813 |
VL53L1_system_control_t *psystem, |
814 |
VL53L1_tuning_parm_storage_t *ptuning_parms) |
815 |
{ |
816 |
/*
|
817 |
* Initializes static and dynamic data structures for
|
818 |
* device preset mode
|
819 |
*
|
820 |
* VL53L1_DEVICEPRESETMODE_STANDARD_RANGING_MM1_CAL
|
821 |
*
|
822 |
* PLEASE NOTE THE SETTINGS BELOW AT PROVISIONAL AND WILL CHANGE!
|
823 |
*/
|
824 |
|
825 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
826 |
|
827 |
LOG_FUNCTION_START("");
|
828 |
|
829 |
/* Call standard ranging configuration with
|
830 |
* overrides for long range configuration
|
831 |
*/
|
832 |
|
833 |
status = VL53L1_preset_mode_standard_ranging( |
834 |
pstatic, |
835 |
pgeneral, |
836 |
ptiming, |
837 |
pdynamic, |
838 |
psystem, |
839 |
ptuning_parms); |
840 |
|
841 |
/* now override standard ranging specific registers */
|
842 |
|
843 |
if (status == VL53L1_ERROR_NONE) {
|
844 |
|
845 |
pgeneral->dss_config__roi_mode_control = |
846 |
VL53L1_DEVICEDSSMODE__REQUESTED_EFFFECTIVE_SPADS; |
847 |
|
848 |
pdynamic->system__sequence_config = \ |
849 |
VL53L1_SEQUENCE_VHV_EN | \ |
850 |
VL53L1_SEQUENCE_PHASECAL_EN | \ |
851 |
VL53L1_SEQUENCE_DSS1_EN | \ |
852 |
VL53L1_SEQUENCE_DSS2_EN | \ |
853 |
VL53L1_SEQUENCE_MM1_EN; |
854 |
} |
855 |
|
856 |
LOG_FUNCTION_END(status); |
857 |
|
858 |
return status;
|
859 |
} |
860 |
|
861 |
|
862 |
VL53L1_Error VL53L1_preset_mode_standard_ranging_mm2_cal( |
863 |
VL53L1_static_config_t *pstatic, |
864 |
VL53L1_general_config_t *pgeneral, |
865 |
VL53L1_timing_config_t *ptiming, |
866 |
VL53L1_dynamic_config_t *pdynamic, |
867 |
VL53L1_system_control_t *psystem, |
868 |
VL53L1_tuning_parm_storage_t *ptuning_parms) |
869 |
{ |
870 |
/*
|
871 |
* Initializes static and dynamic data structures for
|
872 |
* device preset mode
|
873 |
*
|
874 |
* VL53L1_DEVICEPRESETMODE_STANDARD_RANGING_MM2_CAL
|
875 |
*
|
876 |
* PLEASE NOTE THE SETTINGS BELOW AT PROVISIONAL AND WILL CHANGE!
|
877 |
*/
|
878 |
|
879 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
880 |
|
881 |
LOG_FUNCTION_START("");
|
882 |
|
883 |
/* Call standard ranging configuration with
|
884 |
* overrides for long range configuration
|
885 |
*/
|
886 |
|
887 |
status = VL53L1_preset_mode_standard_ranging( |
888 |
pstatic, |
889 |
pgeneral, |
890 |
ptiming, |
891 |
pdynamic, |
892 |
psystem, |
893 |
ptuning_parms); |
894 |
|
895 |
/* now override standard ranging specific registers */
|
896 |
|
897 |
if (status == VL53L1_ERROR_NONE) {
|
898 |
|
899 |
pgeneral->dss_config__roi_mode_control = |
900 |
VL53L1_DEVICEDSSMODE__REQUESTED_EFFFECTIVE_SPADS; |
901 |
|
902 |
pdynamic->system__sequence_config = \ |
903 |
VL53L1_SEQUENCE_VHV_EN | \ |
904 |
VL53L1_SEQUENCE_PHASECAL_EN | \ |
905 |
VL53L1_SEQUENCE_DSS1_EN | \ |
906 |
VL53L1_SEQUENCE_DSS2_EN | \ |
907 |
VL53L1_SEQUENCE_MM2_EN; |
908 |
} |
909 |
|
910 |
LOG_FUNCTION_END(status); |
911 |
|
912 |
return status;
|
913 |
} |
914 |
#endif
|
915 |
|
916 |
|
917 |
VL53L1_Error VL53L1_preset_mode_timed_ranging( |
918 |
|
919 |
VL53L1_static_config_t *pstatic, |
920 |
VL53L1_general_config_t *pgeneral, |
921 |
VL53L1_timing_config_t *ptiming, |
922 |
VL53L1_dynamic_config_t *pdynamic, |
923 |
VL53L1_system_control_t *psystem, |
924 |
VL53L1_tuning_parm_storage_t *ptuning_parms) |
925 |
{ |
926 |
/*
|
927 |
* Initializes static and dynamic data structures for
|
928 |
* device preset mode
|
929 |
*
|
930 |
* VL53L1_DEVICEPRESETMODE_TIMED_RANGING
|
931 |
*
|
932 |
* - pseudo-solo
|
933 |
* - single sigma delta
|
934 |
* - timed
|
935 |
*
|
936 |
* PLEASE NOTE THE SETTINGS BELOW AT PROVISIONAL AND WILL CHANGE!
|
937 |
*/
|
938 |
|
939 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
940 |
|
941 |
LOG_FUNCTION_START("");
|
942 |
|
943 |
/* Call standard ranging configuration */
|
944 |
|
945 |
status = VL53L1_preset_mode_standard_ranging( |
946 |
pstatic, |
947 |
pgeneral, |
948 |
ptiming, |
949 |
pdynamic, |
950 |
psystem, |
951 |
ptuning_parms); |
952 |
|
953 |
/* now override standard ranging specific registers */
|
954 |
|
955 |
if (status == VL53L1_ERROR_NONE) {
|
956 |
|
957 |
/* Dynamic Configuration */
|
958 |
|
959 |
/* Disable GPH */
|
960 |
pdynamic->system__grouped_parameter_hold = 0x00;
|
961 |
|
962 |
/* Re-Configure timing budget default for 13ms */
|
963 |
ptiming->range_config__timeout_macrop_a_hi = 0x00;
|
964 |
ptiming->range_config__timeout_macrop_a_lo = 0xB1;
|
965 |
/* Setup for 13ms default */
|
966 |
ptiming->range_config__timeout_macrop_b_hi = 0x00;
|
967 |
ptiming->range_config__timeout_macrop_b_lo = 0xD4;
|
968 |
|
969 |
/* Timing Configuration */
|
970 |
|
971 |
ptiming->system__intermeasurement_period = 0x00000600;
|
972 |
pdynamic->system__seed_config = |
973 |
ptuning_parms->tp_timed_seed_cfg; |
974 |
|
975 |
/* System control */
|
976 |
|
977 |
/* Configure Timed/Psuedo-solo mode */
|
978 |
psystem->system__mode_start = |
979 |
VL53L1_DEVICESCHEDULERMODE_PSEUDO_SOLO | \ |
980 |
VL53L1_DEVICEREADOUTMODE_SINGLE_SD | \ |
981 |
VL53L1_DEVICEMEASUREMENTMODE_TIMED; |
982 |
} |
983 |
|
984 |
LOG_FUNCTION_END(status); |
985 |
|
986 |
return status;
|
987 |
} |
988 |
|
989 |
VL53L1_Error VL53L1_preset_mode_timed_ranging_short_range( |
990 |
|
991 |
VL53L1_static_config_t *pstatic, |
992 |
VL53L1_general_config_t *pgeneral, |
993 |
VL53L1_timing_config_t *ptiming, |
994 |
VL53L1_dynamic_config_t *pdynamic, |
995 |
VL53L1_system_control_t *psystem, |
996 |
VL53L1_tuning_parm_storage_t *ptuning_parms) |
997 |
{ |
998 |
/*
|
999 |
* Initializes static and dynamic data structures for
|
1000 |
* device preset mode
|
1001 |
*
|
1002 |
* VL53L1_DEVICEPRESETMODE_TIMED_RANGING_SHORT_RANGE
|
1003 |
*
|
1004 |
* - pseudo-solo
|
1005 |
* - single sigma delta
|
1006 |
* - timed
|
1007 |
*
|
1008 |
* PLEASE NOTE THE SETTINGS BELOW AT PROVISIONAL AND WILL CHANGE!
|
1009 |
*/
|
1010 |
|
1011 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
1012 |
|
1013 |
LOG_FUNCTION_START("");
|
1014 |
|
1015 |
/* Call standard ranging configuration */
|
1016 |
|
1017 |
status = VL53L1_preset_mode_standard_ranging_short_range( |
1018 |
pstatic, |
1019 |
pgeneral, |
1020 |
ptiming, |
1021 |
pdynamic, |
1022 |
psystem, |
1023 |
ptuning_parms); |
1024 |
|
1025 |
/* now override standard ranging specific registers */
|
1026 |
|
1027 |
if (status == VL53L1_ERROR_NONE) {
|
1028 |
|
1029 |
/* Dynamic Configuration */
|
1030 |
|
1031 |
/* Disable GPH */
|
1032 |
pdynamic->system__grouped_parameter_hold = 0x00;
|
1033 |
|
1034 |
|
1035 |
/* Timing Configuration */
|
1036 |
|
1037 |
/* Re-Configure timing budget default for 13ms */
|
1038 |
ptiming->range_config__timeout_macrop_a_hi = 0x01;
|
1039 |
ptiming->range_config__timeout_macrop_a_lo = 0x84;
|
1040 |
/* Setup for 13ms default */
|
1041 |
ptiming->range_config__timeout_macrop_b_hi = 0x01;
|
1042 |
ptiming->range_config__timeout_macrop_b_lo = 0xB1;
|
1043 |
|
1044 |
ptiming->system__intermeasurement_period = 0x00000600;
|
1045 |
pdynamic->system__seed_config = |
1046 |
ptuning_parms->tp_timed_seed_cfg; |
1047 |
|
1048 |
/* System control */
|
1049 |
|
1050 |
/* Configure Timed/Psuedo-solo mode */
|
1051 |
psystem->system__mode_start = |
1052 |
VL53L1_DEVICESCHEDULERMODE_PSEUDO_SOLO | \ |
1053 |
VL53L1_DEVICEREADOUTMODE_SINGLE_SD | \ |
1054 |
VL53L1_DEVICEMEASUREMENTMODE_TIMED; |
1055 |
} |
1056 |
|
1057 |
LOG_FUNCTION_END(status); |
1058 |
|
1059 |
return status;
|
1060 |
} |
1061 |
|
1062 |
VL53L1_Error VL53L1_preset_mode_timed_ranging_long_range( |
1063 |
|
1064 |
VL53L1_static_config_t *pstatic, |
1065 |
VL53L1_general_config_t *pgeneral, |
1066 |
VL53L1_timing_config_t *ptiming, |
1067 |
VL53L1_dynamic_config_t *pdynamic, |
1068 |
VL53L1_system_control_t *psystem, |
1069 |
VL53L1_tuning_parm_storage_t *ptuning_parms) |
1070 |
{ |
1071 |
/*
|
1072 |
* Initializes static and dynamic data structures for
|
1073 |
* device preset mode
|
1074 |
*
|
1075 |
* VL53L1_DEVICEPRESETMODE_TIMED_RANGING_LONG_RANGE
|
1076 |
*
|
1077 |
* - pseudo-solo
|
1078 |
* - single sigma delta
|
1079 |
* - timed
|
1080 |
*
|
1081 |
* PLEASE NOTE THE SETTINGS BELOW AT PROVISIONAL AND WILL CHANGE!
|
1082 |
*/
|
1083 |
|
1084 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
1085 |
|
1086 |
LOG_FUNCTION_START("");
|
1087 |
|
1088 |
/* Call standard ranging configuration */
|
1089 |
|
1090 |
status = VL53L1_preset_mode_standard_ranging_long_range( |
1091 |
pstatic, |
1092 |
pgeneral, |
1093 |
ptiming, |
1094 |
pdynamic, |
1095 |
psystem, |
1096 |
ptuning_parms); |
1097 |
|
1098 |
/* now override standard ranging specific registers */
|
1099 |
|
1100 |
if (status == VL53L1_ERROR_NONE) {
|
1101 |
|
1102 |
/* Dynamic Configuration */
|
1103 |
|
1104 |
/* Disable GPH */
|
1105 |
pdynamic->system__grouped_parameter_hold = 0x00;
|
1106 |
|
1107 |
|
1108 |
/* Timing Configuration */
|
1109 |
|
1110 |
/* Re-Configure timing budget default for 13ms */
|
1111 |
ptiming->range_config__timeout_macrop_a_hi = 0x00;
|
1112 |
ptiming->range_config__timeout_macrop_a_lo = 0x97;
|
1113 |
/* Setup for 13ms default */
|
1114 |
ptiming->range_config__timeout_macrop_b_hi = 0x00;
|
1115 |
ptiming->range_config__timeout_macrop_b_lo = 0xB1;
|
1116 |
|
1117 |
ptiming->system__intermeasurement_period = 0x00000600;
|
1118 |
pdynamic->system__seed_config = |
1119 |
ptuning_parms->tp_timed_seed_cfg; |
1120 |
|
1121 |
/* System control */
|
1122 |
|
1123 |
/* Configure Timed/Psuedo-solo mode */
|
1124 |
psystem->system__mode_start = |
1125 |
VL53L1_DEVICESCHEDULERMODE_PSEUDO_SOLO | \ |
1126 |
VL53L1_DEVICEREADOUTMODE_SINGLE_SD | \ |
1127 |
VL53L1_DEVICEMEASUREMENTMODE_TIMED; |
1128 |
} |
1129 |
|
1130 |
LOG_FUNCTION_END(status); |
1131 |
|
1132 |
return status;
|
1133 |
} |
1134 |
|
1135 |
/* Start Patch_LowPowerAutoMode */
|
1136 |
VL53L1_Error VL53L1_preset_mode_low_power_auto_ranging( |
1137 |
|
1138 |
VL53L1_static_config_t *pstatic, |
1139 |
VL53L1_general_config_t *pgeneral, |
1140 |
VL53L1_timing_config_t *ptiming, |
1141 |
VL53L1_dynamic_config_t *pdynamic, |
1142 |
VL53L1_system_control_t *psystem, |
1143 |
VL53L1_tuning_parm_storage_t *ptuning_parms, |
1144 |
VL53L1_low_power_auto_data_t *plpadata) |
1145 |
{ |
1146 |
/*
|
1147 |
* Initializes static and dynamic data structures for
|
1148 |
* device preset mode
|
1149 |
*
|
1150 |
* VL53L1_DEVICEPRESETMODE_LOWPOWERAUTO_MEDIUM_RANGE
|
1151 |
*
|
1152 |
* - pseudo-solo
|
1153 |
* - single sigma delta
|
1154 |
* - timed
|
1155 |
* - special low power auto mode for Presence application
|
1156 |
*
|
1157 |
* PLEASE NOTE THE SETTINGS BELOW ARE PROVISIONAL AND WILL CHANGE!
|
1158 |
*/
|
1159 |
|
1160 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
1161 |
|
1162 |
LOG_FUNCTION_START("");
|
1163 |
|
1164 |
/* Call standard ranging configuration */
|
1165 |
|
1166 |
status = VL53L1_preset_mode_timed_ranging( |
1167 |
pstatic, |
1168 |
pgeneral, |
1169 |
ptiming, |
1170 |
pdynamic, |
1171 |
psystem, |
1172 |
ptuning_parms); |
1173 |
|
1174 |
/* now setup the low power auto mode */
|
1175 |
|
1176 |
if (status == VL53L1_ERROR_NONE) {
|
1177 |
status = VL53L1_config_low_power_auto_mode( |
1178 |
pgeneral, |
1179 |
pdynamic, |
1180 |
plpadata |
1181 |
); |
1182 |
} |
1183 |
|
1184 |
LOG_FUNCTION_END(status); |
1185 |
|
1186 |
return status;
|
1187 |
} |
1188 |
|
1189 |
VL53L1_Error VL53L1_preset_mode_low_power_auto_short_ranging( |
1190 |
|
1191 |
VL53L1_static_config_t *pstatic, |
1192 |
VL53L1_general_config_t *pgeneral, |
1193 |
VL53L1_timing_config_t *ptiming, |
1194 |
VL53L1_dynamic_config_t *pdynamic, |
1195 |
VL53L1_system_control_t *psystem, |
1196 |
VL53L1_tuning_parm_storage_t *ptuning_parms, |
1197 |
VL53L1_low_power_auto_data_t *plpadata) |
1198 |
{ |
1199 |
/*
|
1200 |
* Initializes static and dynamic data structures for
|
1201 |
* device preset mode
|
1202 |
*
|
1203 |
* VL53L1_DEVICEPRESETMODE_LOWPOWERAUTO_SHORT_RANGE
|
1204 |
*
|
1205 |
* - pseudo-solo
|
1206 |
* - single sigma delta
|
1207 |
* - timed
|
1208 |
* - special low power auto mode for Presence application
|
1209 |
*
|
1210 |
* PLEASE NOTE THE SETTINGS BELOW ARE PROVISIONAL AND WILL CHANGE!
|
1211 |
*/
|
1212 |
|
1213 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
1214 |
|
1215 |
LOG_FUNCTION_START("");
|
1216 |
|
1217 |
/* Call standard ranging configuration */
|
1218 |
|
1219 |
status = VL53L1_preset_mode_timed_ranging_short_range( |
1220 |
pstatic, |
1221 |
pgeneral, |
1222 |
ptiming, |
1223 |
pdynamic, |
1224 |
psystem, |
1225 |
ptuning_parms); |
1226 |
|
1227 |
/* now setup the low power auto mode */
|
1228 |
|
1229 |
if (status == VL53L1_ERROR_NONE) {
|
1230 |
status = VL53L1_config_low_power_auto_mode( |
1231 |
pgeneral, |
1232 |
pdynamic, |
1233 |
plpadata |
1234 |
); |
1235 |
} |
1236 |
|
1237 |
LOG_FUNCTION_END(status); |
1238 |
|
1239 |
return status;
|
1240 |
} |
1241 |
|
1242 |
VL53L1_Error VL53L1_preset_mode_low_power_auto_long_ranging( |
1243 |
|
1244 |
VL53L1_static_config_t *pstatic, |
1245 |
VL53L1_general_config_t *pgeneral, |
1246 |
VL53L1_timing_config_t *ptiming, |
1247 |
VL53L1_dynamic_config_t *pdynamic, |
1248 |
VL53L1_system_control_t *psystem, |
1249 |
VL53L1_tuning_parm_storage_t *ptuning_parms, |
1250 |
VL53L1_low_power_auto_data_t *plpadata) |
1251 |
{ |
1252 |
/*
|
1253 |
* Initializes static and dynamic data structures for
|
1254 |
* device preset mode
|
1255 |
*
|
1256 |
* VL53L1_DEVICEPRESETMODE_LOWPOWERAUTO_LONG_RANGE
|
1257 |
*
|
1258 |
* - pseudo-solo
|
1259 |
* - single sigma delta
|
1260 |
* - timed
|
1261 |
* - special low power auto mode for Presence application
|
1262 |
*
|
1263 |
* PLEASE NOTE THE SETTINGS BELOW ARE PROVISIONAL AND WILL CHANGE!
|
1264 |
*/
|
1265 |
|
1266 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
1267 |
|
1268 |
LOG_FUNCTION_START("");
|
1269 |
|
1270 |
/* Call standard ranging configuration */
|
1271 |
|
1272 |
status = VL53L1_preset_mode_timed_ranging_long_range( |
1273 |
pstatic, |
1274 |
pgeneral, |
1275 |
ptiming, |
1276 |
pdynamic, |
1277 |
psystem, |
1278 |
ptuning_parms); |
1279 |
|
1280 |
/* now setup the low power auto mode */
|
1281 |
|
1282 |
if (status == VL53L1_ERROR_NONE) {
|
1283 |
status = VL53L1_config_low_power_auto_mode( |
1284 |
pgeneral, |
1285 |
pdynamic, |
1286 |
plpadata |
1287 |
); |
1288 |
} |
1289 |
|
1290 |
LOG_FUNCTION_END(status); |
1291 |
|
1292 |
return status;
|
1293 |
} |
1294 |
|
1295 |
/* End Patch_LowPowerAutoMode */
|
1296 |
|
1297 |
VL53L1_Error VL53L1_preset_mode_singleshot_ranging( |
1298 |
|
1299 |
VL53L1_static_config_t *pstatic, |
1300 |
VL53L1_general_config_t *pgeneral, |
1301 |
VL53L1_timing_config_t *ptiming, |
1302 |
VL53L1_dynamic_config_t *pdynamic, |
1303 |
VL53L1_system_control_t *psystem, |
1304 |
VL53L1_tuning_parm_storage_t *ptuning_parms) |
1305 |
{ |
1306 |
/*
|
1307 |
* Initializes static and dynamic data structures for device preset mode
|
1308 |
* VL53L1_DEVICEPRESETMODE_TIMED_RANGING
|
1309 |
*
|
1310 |
* - pseudo-solo
|
1311 |
* - single sigma delta
|
1312 |
* - timed
|
1313 |
*
|
1314 |
* PLEASE NOTE THE SETTINGS BELOW AT PROVISIONAL AND WILL CHANGE!
|
1315 |
*/
|
1316 |
|
1317 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
1318 |
|
1319 |
LOG_FUNCTION_START("");
|
1320 |
|
1321 |
/* Call standard ranging configuration */
|
1322 |
|
1323 |
status = VL53L1_preset_mode_standard_ranging( |
1324 |
pstatic, |
1325 |
pgeneral, |
1326 |
ptiming, |
1327 |
pdynamic, |
1328 |
psystem, |
1329 |
ptuning_parms); |
1330 |
|
1331 |
/* now override standard ranging specific registers */
|
1332 |
|
1333 |
if (status == VL53L1_ERROR_NONE) {
|
1334 |
|
1335 |
/* Dynamic Configuration */
|
1336 |
|
1337 |
/* Disable GPH */
|
1338 |
pdynamic->system__grouped_parameter_hold = 0x00;
|
1339 |
|
1340 |
/* Timing Configuration */
|
1341 |
|
1342 |
/* Re-Configure timing budget default for 13ms */
|
1343 |
ptiming->range_config__timeout_macrop_a_hi = 0x00;
|
1344 |
ptiming->range_config__timeout_macrop_a_lo = 0xB1;
|
1345 |
/* Setup for 13ms default */
|
1346 |
ptiming->range_config__timeout_macrop_b_hi = 0x00;
|
1347 |
ptiming->range_config__timeout_macrop_b_lo = 0xD4;
|
1348 |
|
1349 |
pdynamic->system__seed_config = |
1350 |
ptuning_parms->tp_timed_seed_cfg; |
1351 |
|
1352 |
/* System control */
|
1353 |
|
1354 |
/* Configure Timed/Psuedo-solo mode */
|
1355 |
psystem->system__mode_start = \ |
1356 |
VL53L1_DEVICESCHEDULERMODE_PSEUDO_SOLO | \ |
1357 |
VL53L1_DEVICEREADOUTMODE_SINGLE_SD | \ |
1358 |
VL53L1_DEVICEMEASUREMENTMODE_SINGLESHOT; |
1359 |
} |
1360 |
|
1361 |
LOG_FUNCTION_END(status); |
1362 |
|
1363 |
return status;
|
1364 |
} |
1365 |
|
1366 |
|
1367 |
VL53L1_Error VL53L1_preset_mode_olt( |
1368 |
VL53L1_static_config_t *pstatic, |
1369 |
VL53L1_general_config_t *pgeneral, |
1370 |
VL53L1_timing_config_t *ptiming, |
1371 |
VL53L1_dynamic_config_t *pdynamic, |
1372 |
VL53L1_system_control_t *psystem, |
1373 |
VL53L1_tuning_parm_storage_t *ptuning_parms) |
1374 |
{ |
1375 |
/**
|
1376 |
* Initializes static and dynamic data structures for device preset mode
|
1377 |
* VL53L1_DEVICEPRESETMODE_OLT
|
1378 |
*
|
1379 |
* PLEASE NOTE THE SETTINGS BELOW AT PROVISIONAL AND WILL CHANGE!
|
1380 |
*/
|
1381 |
|
1382 |
VL53L1_Error status = VL53L1_ERROR_NONE; |
1383 |
|
1384 |
LOG_FUNCTION_START("");
|
1385 |
|
1386 |
/* Call standard ranging configuration */
|
1387 |
|
1388 |
status = VL53L1_preset_mode_standard_ranging( |
1389 |
pstatic, |
1390 |
pgeneral, |
1391 |
ptiming, |
1392 |
pdynamic, |
1393 |
psystem, |
1394 |
ptuning_parms); |
1395 |
|
1396 |
/* now override OLT specific registers */
|
1397 |
|
1398 |
if (status == VL53L1_ERROR_NONE) {
|
1399 |
|
1400 |
/* Disables requirement for host handshake */
|
1401 |
psystem->system__stream_count_ctrl = 0x01;
|
1402 |
} |
1403 |
|
1404 |
LOG_FUNCTION_END(status); |
1405 |
|
1406 |
return status;
|
1407 |
} |