Rename library

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   VL53L3CX_NoShield_1Sensor_poll_Mb06x VL53L3_NoShield_1Sensor_polling_Mb63 X_NUCLEO_53L3A2 53L3A2_Ranging

Committer:
charlesmn
Date:
Wed Jul 21 14:07:59 2021 +0000
Revision:
7:7f1bbf370283
Parent:
5:89031b2f5316
Moved vl53l3cx_class.cpp and .h to 53l3a2_RangingClass

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Charles MacNeill 5:89031b2f5316 1
Charles MacNeill 5:89031b2f5316 2 // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
Charles MacNeill 5:89031b2f5316 3 /******************************************************************************
Charles MacNeill 5:89031b2f5316 4 * Copyright (c) 2020, STMicroelectronics - All Rights Reserved
Charles MacNeill 5:89031b2f5316 5
Charles MacNeill 5:89031b2f5316 6 This file is part of VL53LX and is dual licensed,
Charles MacNeill 5:89031b2f5316 7 either GPL-2.0+
Charles MacNeill 5:89031b2f5316 8 or 'BSD 3-clause "New" or "Revised" License' , at your option.
Charles MacNeill 5:89031b2f5316 9 ******************************************************************************
Charles MacNeill 5:89031b2f5316 10 */
Charles MacNeill 5:89031b2f5316 11
Charles MacNeill 5:89031b2f5316 12
Charles MacNeill 5:89031b2f5316 13
Charles MacNeill 5:89031b2f5316 14
Charles MacNeill 5:89031b2f5316 15
Charles MacNeill 5:89031b2f5316 16 #include "vl53lx_platform.h"
Charles MacNeill 5:89031b2f5316 17 #include "vl53lx_platform_ipp.h"
Charles MacNeill 5:89031b2f5316 18 #include "vl53lx_ll_def.h"
Charles MacNeill 5:89031b2f5316 19 #include "vl53lx_ll_device.h"
Charles MacNeill 5:89031b2f5316 20 #include "vl53lx_register_map.h"
Charles MacNeill 5:89031b2f5316 21 #include "vl53lx_register_funcs.h"
Charles MacNeill 5:89031b2f5316 22 #include "vl53lx_register_settings.h"
Charles MacNeill 5:89031b2f5316 23 #include "vl53lx_hist_map.h"
Charles MacNeill 5:89031b2f5316 24 #include "vl53lx_hist_structs.h"
Charles MacNeill 5:89031b2f5316 25 #include "vl53lx_core.h"
Charles MacNeill 5:89031b2f5316 26 #include "vl53lx_wait.h"
Charles MacNeill 5:89031b2f5316 27 #include "vl53lx_api_preset_modes.h"
Charles MacNeill 5:89031b2f5316 28 #include "vl53lx_silicon_core.h"
Charles MacNeill 5:89031b2f5316 29 #include "vl53lx_api_core.h"
Charles MacNeill 5:89031b2f5316 30 #include "vl53lx_api_calibration.h"
Charles MacNeill 5:89031b2f5316 31
Charles MacNeill 5:89031b2f5316 32 #ifdef VL53LX_LOG_ENABLE
Charles MacNeill 5:89031b2f5316 33 #include "vl53lx_api_debug.h"
Charles MacNeill 5:89031b2f5316 34 #endif
Charles MacNeill 5:89031b2f5316 35
Charles MacNeill 5:89031b2f5316 36
Charles MacNeill 5:89031b2f5316 37 #define LOG_FUNCTION_START(fmt, ...) \
Charles MacNeill 5:89031b2f5316 38 _LOG_FUNCTION_START(VL53LX_TRACE_MODULE_CORE, fmt, ##__VA_ARGS__)
Charles MacNeill 5:89031b2f5316 39 #define LOG_FUNCTION_END(status, ...) \
Charles MacNeill 5:89031b2f5316 40 _LOG_FUNCTION_END(VL53LX_TRACE_MODULE_CORE, status, ##__VA_ARGS__)
Charles MacNeill 5:89031b2f5316 41 #define LOG_FUNCTION_END_FMT(status, fmt, ...) \
Charles MacNeill 5:89031b2f5316 42 _LOG_FUNCTION_END_FMT(VL53LX_TRACE_MODULE_CORE, status, \
Charles MacNeill 5:89031b2f5316 43 fmt, ##__VA_ARGS__)
Charles MacNeill 5:89031b2f5316 44
Charles MacNeill 5:89031b2f5316 45 #define trace_print(level, ...) \
Charles MacNeill 5:89031b2f5316 46 _LOG_TRACE_PRINT(VL53LX_TRACE_MODULE_CORE, \
Charles MacNeill 5:89031b2f5316 47 level, VL53LX_TRACE_FUNCTION_NONE, ##__VA_ARGS__)
Charles MacNeill 5:89031b2f5316 48
Charles MacNeill 5:89031b2f5316 49
Charles MacNeill 5:89031b2f5316 50 VL53LX_Error VL53LX_run_ref_spad_char(
Charles MacNeill 5:89031b2f5316 51 VL53LX_DEV Dev,
Charles MacNeill 5:89031b2f5316 52 VL53LX_Error *pcal_status)
Charles MacNeill 5:89031b2f5316 53 {
Charles MacNeill 5:89031b2f5316 54
Charles MacNeill 5:89031b2f5316 55
Charles MacNeill 5:89031b2f5316 56 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 57 VL53LX_LLDriverData_t *pdev = VL53LXDevStructGetLLDriverHandle(Dev);
Charles MacNeill 5:89031b2f5316 58
Charles MacNeill 5:89031b2f5316 59 uint8_t comms_buffer[6];
Charles MacNeill 5:89031b2f5316 60
Charles MacNeill 5:89031b2f5316 61 VL53LX_refspadchar_config_t *prefspadchar = &(pdev->refspadchar);
Charles MacNeill 5:89031b2f5316 62
Charles MacNeill 5:89031b2f5316 63 LOG_FUNCTION_START("");
Charles MacNeill 5:89031b2f5316 64
Charles MacNeill 5:89031b2f5316 65
Charles MacNeill 5:89031b2f5316 66
Charles MacNeill 5:89031b2f5316 67 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 68 status = VL53LX_enable_powerforce(Dev);
Charles MacNeill 5:89031b2f5316 69
Charles MacNeill 5:89031b2f5316 70
Charles MacNeill 5:89031b2f5316 71
Charles MacNeill 5:89031b2f5316 72 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 73 status =
Charles MacNeill 5:89031b2f5316 74 VL53LX_set_ref_spad_char_config(
Charles MacNeill 5:89031b2f5316 75 Dev,
Charles MacNeill 5:89031b2f5316 76 prefspadchar->VL53LX_p_005,
Charles MacNeill 5:89031b2f5316 77 prefspadchar->timeout_us,
Charles MacNeill 5:89031b2f5316 78 prefspadchar->target_count_rate_mcps,
Charles MacNeill 5:89031b2f5316 79 prefspadchar->max_count_rate_limit_mcps,
Charles MacNeill 5:89031b2f5316 80 prefspadchar->min_count_rate_limit_mcps,
Charles MacNeill 5:89031b2f5316 81 pdev->stat_nvm.osc_measured__fast_osc__frequency);
Charles MacNeill 5:89031b2f5316 82
Charles MacNeill 5:89031b2f5316 83
Charles MacNeill 5:89031b2f5316 84
Charles MacNeill 5:89031b2f5316 85 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 86 status = VL53LX_run_device_test(
Charles MacNeill 5:89031b2f5316 87 Dev,
Charles MacNeill 5:89031b2f5316 88 prefspadchar->device_test_mode);
Charles MacNeill 5:89031b2f5316 89
Charles MacNeill 5:89031b2f5316 90
Charles MacNeill 5:89031b2f5316 91
Charles MacNeill 5:89031b2f5316 92 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 93 status =
Charles MacNeill 5:89031b2f5316 94 VL53LX_ReadMulti(
Charles MacNeill 5:89031b2f5316 95 Dev,
Charles MacNeill 5:89031b2f5316 96 VL53LX_REF_SPAD_CHAR_RESULT__NUM_ACTUAL_REF_SPADS,
Charles MacNeill 5:89031b2f5316 97 comms_buffer,
Charles MacNeill 5:89031b2f5316 98 2);
Charles MacNeill 5:89031b2f5316 99
Charles MacNeill 5:89031b2f5316 100 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 101 pdev->dbg_results.ref_spad_char_result__num_actual_ref_spads =
Charles MacNeill 5:89031b2f5316 102 comms_buffer[0];
Charles MacNeill 5:89031b2f5316 103 pdev->dbg_results.ref_spad_char_result__ref_location =
Charles MacNeill 5:89031b2f5316 104 comms_buffer[1];
Charles MacNeill 5:89031b2f5316 105 }
Charles MacNeill 5:89031b2f5316 106
Charles MacNeill 5:89031b2f5316 107
Charles MacNeill 5:89031b2f5316 108
Charles MacNeill 5:89031b2f5316 109 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 110 status =
Charles MacNeill 5:89031b2f5316 111 VL53LX_WriteMulti(
Charles MacNeill 5:89031b2f5316 112 Dev,
Charles MacNeill 5:89031b2f5316 113 VL53LX_REF_SPAD_MAN__NUM_REQUESTED_REF_SPADS,
Charles MacNeill 5:89031b2f5316 114 comms_buffer,
Charles MacNeill 5:89031b2f5316 115 2);
Charles MacNeill 5:89031b2f5316 116
Charles MacNeill 5:89031b2f5316 117 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 118 pdev->customer.ref_spad_man__num_requested_ref_spads =
Charles MacNeill 5:89031b2f5316 119 comms_buffer[0];
Charles MacNeill 5:89031b2f5316 120 pdev->customer.ref_spad_man__ref_location =
Charles MacNeill 5:89031b2f5316 121 comms_buffer[1];
Charles MacNeill 5:89031b2f5316 122 }
Charles MacNeill 5:89031b2f5316 123
Charles MacNeill 5:89031b2f5316 124
Charles MacNeill 5:89031b2f5316 125
Charles MacNeill 5:89031b2f5316 126 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 127 status =
Charles MacNeill 5:89031b2f5316 128 VL53LX_ReadMulti(
Charles MacNeill 5:89031b2f5316 129 Dev,
Charles MacNeill 5:89031b2f5316 130 VL53LX_RESULT__SPARE_0_SD1,
Charles MacNeill 5:89031b2f5316 131 comms_buffer,
Charles MacNeill 5:89031b2f5316 132 6);
Charles MacNeill 5:89031b2f5316 133
Charles MacNeill 5:89031b2f5316 134
Charles MacNeill 5:89031b2f5316 135
Charles MacNeill 5:89031b2f5316 136 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 137 status =
Charles MacNeill 5:89031b2f5316 138 VL53LX_WriteMulti(
Charles MacNeill 5:89031b2f5316 139 Dev,
Charles MacNeill 5:89031b2f5316 140 VL53LX_GLOBAL_CONFIG__SPAD_ENABLES_REF_0,
Charles MacNeill 5:89031b2f5316 141 comms_buffer,
Charles MacNeill 5:89031b2f5316 142 6);
Charles MacNeill 5:89031b2f5316 143
Charles MacNeill 5:89031b2f5316 144 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 145 pdev->customer.global_config__spad_enables_ref_0 =
Charles MacNeill 5:89031b2f5316 146 comms_buffer[0];
Charles MacNeill 5:89031b2f5316 147 pdev->customer.global_config__spad_enables_ref_1 =
Charles MacNeill 5:89031b2f5316 148 comms_buffer[1];
Charles MacNeill 5:89031b2f5316 149 pdev->customer.global_config__spad_enables_ref_2 =
Charles MacNeill 5:89031b2f5316 150 comms_buffer[2];
Charles MacNeill 5:89031b2f5316 151 pdev->customer.global_config__spad_enables_ref_3 =
Charles MacNeill 5:89031b2f5316 152 comms_buffer[3];
Charles MacNeill 5:89031b2f5316 153 pdev->customer.global_config__spad_enables_ref_4 =
Charles MacNeill 5:89031b2f5316 154 comms_buffer[4];
Charles MacNeill 5:89031b2f5316 155 pdev->customer.global_config__spad_enables_ref_5 =
Charles MacNeill 5:89031b2f5316 156 comms_buffer[5];
Charles MacNeill 5:89031b2f5316 157 }
Charles MacNeill 5:89031b2f5316 158
Charles MacNeill 5:89031b2f5316 159 #ifdef VL53LX_LOG_ENABLE
Charles MacNeill 5:89031b2f5316 160
Charles MacNeill 5:89031b2f5316 161 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 162 VL53LX_print_customer_nvm_managed(
Charles MacNeill 5:89031b2f5316 163 &(pdev->customer),
Charles MacNeill 5:89031b2f5316 164 "run_ref_spad_char():pdev->lldata.customer.",
Charles MacNeill 5:89031b2f5316 165 VL53LX_TRACE_MODULE_REF_SPAD_CHAR);
Charles MacNeill 5:89031b2f5316 166 #endif
Charles MacNeill 5:89031b2f5316 167
Charles MacNeill 5:89031b2f5316 168 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 169
Charles MacNeill 5:89031b2f5316 170 switch (pdev->sys_results.result__range_status) {
Charles MacNeill 5:89031b2f5316 171
Charles MacNeill 5:89031b2f5316 172 case VL53LX_DEVICEERROR_REFSPADCHARNOTENOUGHDPADS:
Charles MacNeill 5:89031b2f5316 173 status = VL53LX_WARNING_REF_SPAD_CHAR_NOT_ENOUGH_SPADS;
Charles MacNeill 5:89031b2f5316 174 break;
Charles MacNeill 5:89031b2f5316 175
Charles MacNeill 5:89031b2f5316 176 case VL53LX_DEVICEERROR_REFSPADCHARMORETHANTARGET:
Charles MacNeill 5:89031b2f5316 177 status = VL53LX_WARNING_REF_SPAD_CHAR_RATE_TOO_HIGH;
Charles MacNeill 5:89031b2f5316 178 break;
Charles MacNeill 5:89031b2f5316 179
Charles MacNeill 5:89031b2f5316 180 case VL53LX_DEVICEERROR_REFSPADCHARLESSTHANTARGET:
Charles MacNeill 5:89031b2f5316 181 status = VL53LX_WARNING_REF_SPAD_CHAR_RATE_TOO_LOW;
Charles MacNeill 5:89031b2f5316 182 break;
Charles MacNeill 5:89031b2f5316 183 }
Charles MacNeill 5:89031b2f5316 184 }
Charles MacNeill 5:89031b2f5316 185
Charles MacNeill 5:89031b2f5316 186
Charles MacNeill 5:89031b2f5316 187
Charles MacNeill 5:89031b2f5316 188 *pcal_status = status;
Charles MacNeill 5:89031b2f5316 189
Charles MacNeill 5:89031b2f5316 190
Charles MacNeill 5:89031b2f5316 191
Charles MacNeill 5:89031b2f5316 192 IGNORE_STATUS(
Charles MacNeill 5:89031b2f5316 193 IGNORE_REF_SPAD_CHAR_NOT_ENOUGH_SPADS,
Charles MacNeill 5:89031b2f5316 194 VL53LX_WARNING_REF_SPAD_CHAR_NOT_ENOUGH_SPADS,
Charles MacNeill 5:89031b2f5316 195 status);
Charles MacNeill 5:89031b2f5316 196
Charles MacNeill 5:89031b2f5316 197 IGNORE_STATUS(
Charles MacNeill 5:89031b2f5316 198 IGNORE_REF_SPAD_CHAR_RATE_TOO_HIGH,
Charles MacNeill 5:89031b2f5316 199 VL53LX_WARNING_REF_SPAD_CHAR_RATE_TOO_HIGH,
Charles MacNeill 5:89031b2f5316 200 status);
Charles MacNeill 5:89031b2f5316 201
Charles MacNeill 5:89031b2f5316 202 IGNORE_STATUS(
Charles MacNeill 5:89031b2f5316 203 IGNORE_REF_SPAD_CHAR_RATE_TOO_LOW,
Charles MacNeill 5:89031b2f5316 204 VL53LX_WARNING_REF_SPAD_CHAR_RATE_TOO_LOW,
Charles MacNeill 5:89031b2f5316 205 status);
Charles MacNeill 5:89031b2f5316 206
Charles MacNeill 5:89031b2f5316 207
Charles MacNeill 5:89031b2f5316 208 LOG_FUNCTION_END(status);
Charles MacNeill 5:89031b2f5316 209
Charles MacNeill 5:89031b2f5316 210 return status;
Charles MacNeill 5:89031b2f5316 211 }
Charles MacNeill 5:89031b2f5316 212
Charles MacNeill 5:89031b2f5316 213
Charles MacNeill 5:89031b2f5316 214 VL53LX_Error VL53LX_get_and_avg_xtalk_samples(
Charles MacNeill 5:89031b2f5316 215 VL53LX_DEV Dev,
Charles MacNeill 5:89031b2f5316 216 uint8_t num_of_samples,
Charles MacNeill 5:89031b2f5316 217 uint8_t measurement_mode,
Charles MacNeill 5:89031b2f5316 218 int16_t xtalk_filter_thresh_max_mm,
Charles MacNeill 5:89031b2f5316 219 int16_t xtalk_filter_thresh_min_mm,
Charles MacNeill 5:89031b2f5316 220 uint16_t xtalk_max_valid_rate_kcps,
Charles MacNeill 5:89031b2f5316 221 uint8_t xtalk_result_id,
Charles MacNeill 5:89031b2f5316 222 uint8_t xtalk_histo_id,
Charles MacNeill 5:89031b2f5316 223 VL53LX_xtalk_range_results_t *pXR,
Charles MacNeill 5:89031b2f5316 224 VL53LX_histogram_bin_data_t *psum_histo,
Charles MacNeill 5:89031b2f5316 225 VL53LX_histogram_bin_data_t *pavg_histo)
Charles MacNeill 5:89031b2f5316 226 {
Charles MacNeill 5:89031b2f5316 227
Charles MacNeill 5:89031b2f5316 228
Charles MacNeill 5:89031b2f5316 229
Charles MacNeill 5:89031b2f5316 230 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 231 VL53LX_LLDriverData_t *pdev =
Charles MacNeill 5:89031b2f5316 232 VL53LXDevStructGetLLDriverHandle(Dev);
Charles MacNeill 5:89031b2f5316 233
Charles MacNeill 5:89031b2f5316 234 #ifdef VL53LX_LOG_ENABLE
Charles MacNeill 5:89031b2f5316 235 VL53LX_LLDriverResults_t *pres =
Charles MacNeill 5:89031b2f5316 236 VL53LXDevStructGetLLResultsHandle(Dev);
Charles MacNeill 5:89031b2f5316 237 #endif
Charles MacNeill 5:89031b2f5316 238
Charles MacNeill 5:89031b2f5316 239 VL53LX_range_results_t *prs =
Charles MacNeill 5:89031b2f5316 240 (VL53LX_range_results_t *) pdev->wArea1;
Charles MacNeill 5:89031b2f5316 241
Charles MacNeill 5:89031b2f5316 242 VL53LX_range_data_t *prange_data;
Charles MacNeill 5:89031b2f5316 243 VL53LX_xtalk_range_data_t *pxtalk_range_data;
Charles MacNeill 5:89031b2f5316 244
Charles MacNeill 5:89031b2f5316 245 uint8_t i = 0;
Charles MacNeill 5:89031b2f5316 246 uint8_t j = 0;
Charles MacNeill 5:89031b2f5316 247 uint8_t zone_id = 0;
Charles MacNeill 5:89031b2f5316 248 uint8_t final_zone = pdev->zone_cfg.active_zones+1;
Charles MacNeill 5:89031b2f5316 249 uint8_t valid_result;
Charles MacNeill 5:89031b2f5316 250
Charles MacNeill 5:89031b2f5316 251 uint8_t smudge_corr_en = 0;
Charles MacNeill 5:89031b2f5316 252
Charles MacNeill 5:89031b2f5316 253
Charles MacNeill 5:89031b2f5316 254
Charles MacNeill 5:89031b2f5316 255
Charles MacNeill 5:89031b2f5316 256 smudge_corr_en = pdev->smudge_correct_config.smudge_corr_enabled;
Charles MacNeill 5:89031b2f5316 257
Charles MacNeill 5:89031b2f5316 258 status = VL53LX_dynamic_xtalk_correction_disable(Dev);
Charles MacNeill 5:89031b2f5316 259
Charles MacNeill 5:89031b2f5316 260
Charles MacNeill 5:89031b2f5316 261 VL53LX_load_patch(Dev);
Charles MacNeill 5:89031b2f5316 262
Charles MacNeill 5:89031b2f5316 263
Charles MacNeill 5:89031b2f5316 264
Charles MacNeill 5:89031b2f5316 265 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 266 status =
Charles MacNeill 5:89031b2f5316 267 VL53LX_init_and_start_range(
Charles MacNeill 5:89031b2f5316 268 Dev,
Charles MacNeill 5:89031b2f5316 269 measurement_mode,
Charles MacNeill 5:89031b2f5316 270 VL53LX_DEVICECONFIGLEVEL_CUSTOMER_ONWARDS);
Charles MacNeill 5:89031b2f5316 271
Charles MacNeill 5:89031b2f5316 272
Charles MacNeill 5:89031b2f5316 273 for (i = 0; i <= (final_zone*num_of_samples); i++) {
Charles MacNeill 5:89031b2f5316 274
Charles MacNeill 5:89031b2f5316 275
Charles MacNeill 5:89031b2f5316 276
Charles MacNeill 5:89031b2f5316 277 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 278 status = VL53LX_wait_for_range_completion(Dev);
Charles MacNeill 5:89031b2f5316 279
Charles MacNeill 5:89031b2f5316 280
Charles MacNeill 5:89031b2f5316 281
Charles MacNeill 5:89031b2f5316 282 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 283 status =
Charles MacNeill 5:89031b2f5316 284 VL53LX_get_device_results(
Charles MacNeill 5:89031b2f5316 285 Dev,
Charles MacNeill 5:89031b2f5316 286 VL53LX_DEVICERESULTSLEVEL_FULL,
Charles MacNeill 5:89031b2f5316 287 prs);
Charles MacNeill 5:89031b2f5316 288
Charles MacNeill 5:89031b2f5316 289
Charles MacNeill 5:89031b2f5316 290
Charles MacNeill 5:89031b2f5316 291 if (status == VL53LX_ERROR_NONE &&
Charles MacNeill 5:89031b2f5316 292 pdev->ll_state.rd_device_state !=
Charles MacNeill 5:89031b2f5316 293 VL53LX_DEVICESTATE_RANGING_WAIT_GPH_SYNC) {
Charles MacNeill 5:89031b2f5316 294
Charles MacNeill 5:89031b2f5316 295 zone_id = pdev->ll_state.rd_zone_id + xtalk_result_id;
Charles MacNeill 5:89031b2f5316 296 prange_data = &(prs->VL53LX_p_003[0]);
Charles MacNeill 5:89031b2f5316 297
Charles MacNeill 5:89031b2f5316 298
Charles MacNeill 5:89031b2f5316 299 if (prs->active_results > 1) {
Charles MacNeill 5:89031b2f5316 300 for (j = 1;
Charles MacNeill 5:89031b2f5316 301 j < prs->active_results; j++) {
Charles MacNeill 5:89031b2f5316 302 if (prs->VL53LX_p_003[j].median_range_mm
Charles MacNeill 5:89031b2f5316 303 <
Charles MacNeill 5:89031b2f5316 304 prange_data->median_range_mm)
Charles MacNeill 5:89031b2f5316 305 prange_data =
Charles MacNeill 5:89031b2f5316 306 &(prs->VL53LX_p_003[j]);
Charles MacNeill 5:89031b2f5316 307
Charles MacNeill 5:89031b2f5316 308 }
Charles MacNeill 5:89031b2f5316 309 }
Charles MacNeill 5:89031b2f5316 310
Charles MacNeill 5:89031b2f5316 311 pxtalk_range_data = &(pXR->VL53LX_p_003[zone_id]);
Charles MacNeill 5:89031b2f5316 312
Charles MacNeill 5:89031b2f5316 313
Charles MacNeill 5:89031b2f5316 314
Charles MacNeill 5:89031b2f5316 315 if ((prs->active_results > 0) &&
Charles MacNeill 5:89031b2f5316 316 (prange_data->median_range_mm <
Charles MacNeill 5:89031b2f5316 317 xtalk_filter_thresh_max_mm) &&
Charles MacNeill 5:89031b2f5316 318 (prange_data->median_range_mm >
Charles MacNeill 5:89031b2f5316 319 xtalk_filter_thresh_min_mm) &&
Charles MacNeill 5:89031b2f5316 320 (prange_data->VL53LX_p_009 <
Charles MacNeill 5:89031b2f5316 321 (uint32_t)(xtalk_max_valid_rate_kcps * 16)))
Charles MacNeill 5:89031b2f5316 322 valid_result = 1;
Charles MacNeill 5:89031b2f5316 323 else
Charles MacNeill 5:89031b2f5316 324 valid_result = 0;
Charles MacNeill 5:89031b2f5316 325
Charles MacNeill 5:89031b2f5316 326 if (valid_result == 1) {
Charles MacNeill 5:89031b2f5316 327
Charles MacNeill 5:89031b2f5316 328 pxtalk_range_data->no_of_samples++;
Charles MacNeill 5:89031b2f5316 329
Charles MacNeill 5:89031b2f5316 330 pxtalk_range_data->rate_per_spad_kcps_sum +=
Charles MacNeill 5:89031b2f5316 331 prange_data->VL53LX_p_009;
Charles MacNeill 5:89031b2f5316 332
Charles MacNeill 5:89031b2f5316 333 pxtalk_range_data->signal_total_events_sum +=
Charles MacNeill 5:89031b2f5316 334 prange_data->VL53LX_p_010;
Charles MacNeill 5:89031b2f5316 335
Charles MacNeill 5:89031b2f5316 336 pxtalk_range_data->sigma_mm_sum +=
Charles MacNeill 5:89031b2f5316 337 (uint32_t)prange_data->VL53LX_p_002;
Charles MacNeill 5:89031b2f5316 338
Charles MacNeill 5:89031b2f5316 339
Charles MacNeill 5:89031b2f5316 340
Charles MacNeill 5:89031b2f5316 341 pxtalk_range_data->median_phase_sum +=
Charles MacNeill 5:89031b2f5316 342 (uint32_t)prange_data->VL53LX_p_011;
Charles MacNeill 5:89031b2f5316 343
Charles MacNeill 5:89031b2f5316 344
Charles MacNeill 5:89031b2f5316 345
Charles MacNeill 5:89031b2f5316 346
Charles MacNeill 5:89031b2f5316 347 }
Charles MacNeill 5:89031b2f5316 348
Charles MacNeill 5:89031b2f5316 349 if ((valid_result == 1) && (zone_id >= 4)) {
Charles MacNeill 5:89031b2f5316 350 status = VL53LX_sum_histogram_data(
Charles MacNeill 5:89031b2f5316 351 &(pdev->hist_data),
Charles MacNeill 5:89031b2f5316 352 psum_histo);
Charles MacNeill 5:89031b2f5316 353
Charles MacNeill 5:89031b2f5316 354
Charles MacNeill 5:89031b2f5316 355
Charles MacNeill 5:89031b2f5316 356 if (prange_data->VL53LX_p_012 <
Charles MacNeill 5:89031b2f5316 357 pXR->central_histogram__window_start)
Charles MacNeill 5:89031b2f5316 358 pXR->central_histogram__window_start =
Charles MacNeill 5:89031b2f5316 359 prange_data->VL53LX_p_012;
Charles MacNeill 5:89031b2f5316 360
Charles MacNeill 5:89031b2f5316 361
Charles MacNeill 5:89031b2f5316 362 if (prange_data->VL53LX_p_013 >
Charles MacNeill 5:89031b2f5316 363 pXR->central_histogram__window_end)
Charles MacNeill 5:89031b2f5316 364 pXR->central_histogram__window_end =
Charles MacNeill 5:89031b2f5316 365 prange_data->VL53LX_p_013;
Charles MacNeill 5:89031b2f5316 366
Charles MacNeill 5:89031b2f5316 367 }
Charles MacNeill 5:89031b2f5316 368
Charles MacNeill 5:89031b2f5316 369 }
Charles MacNeill 5:89031b2f5316 370
Charles MacNeill 5:89031b2f5316 371
Charles MacNeill 5:89031b2f5316 372
Charles MacNeill 5:89031b2f5316 373 #ifdef VL53LX_LOG_ENABLE
Charles MacNeill 5:89031b2f5316 374 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 375 VL53LX_print_range_results(
Charles MacNeill 5:89031b2f5316 376 &(pres->range_results),
Charles MacNeill 5:89031b2f5316 377 "pres->range_results.",
Charles MacNeill 5:89031b2f5316 378 VL53LX_TRACE_MODULE_CORE);
Charles MacNeill 5:89031b2f5316 379 }
Charles MacNeill 5:89031b2f5316 380 #endif
Charles MacNeill 5:89031b2f5316 381
Charles MacNeill 5:89031b2f5316 382
Charles MacNeill 5:89031b2f5316 383
Charles MacNeill 5:89031b2f5316 384 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 385 status = VL53LX_wait_for_firmware_ready(Dev);
Charles MacNeill 5:89031b2f5316 386
Charles MacNeill 5:89031b2f5316 387
Charles MacNeill 5:89031b2f5316 388
Charles MacNeill 5:89031b2f5316 389 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 390 status =
Charles MacNeill 5:89031b2f5316 391 VL53LX_clear_interrupt_and_enable_next_range(
Charles MacNeill 5:89031b2f5316 392 Dev,
Charles MacNeill 5:89031b2f5316 393 measurement_mode);
Charles MacNeill 5:89031b2f5316 394
Charles MacNeill 5:89031b2f5316 395
Charles MacNeill 5:89031b2f5316 396 }
Charles MacNeill 5:89031b2f5316 397
Charles MacNeill 5:89031b2f5316 398
Charles MacNeill 5:89031b2f5316 399
Charles MacNeill 5:89031b2f5316 400
Charles MacNeill 5:89031b2f5316 401 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 402 status = VL53LX_stop_range(Dev);
Charles MacNeill 5:89031b2f5316 403
Charles MacNeill 5:89031b2f5316 404 VL53LX_unload_patch(Dev);
Charles MacNeill 5:89031b2f5316 405
Charles MacNeill 5:89031b2f5316 406
Charles MacNeill 5:89031b2f5316 407
Charles MacNeill 5:89031b2f5316 408 for (i = 0; i < (pdev->zone_cfg.active_zones+1); i++) {
Charles MacNeill 5:89031b2f5316 409
Charles MacNeill 5:89031b2f5316 410 pxtalk_range_data = &(pXR->VL53LX_p_003[i+xtalk_result_id]);
Charles MacNeill 5:89031b2f5316 411
Charles MacNeill 5:89031b2f5316 412 if (pxtalk_range_data->no_of_samples > 0) {
Charles MacNeill 5:89031b2f5316 413 pxtalk_range_data->rate_per_spad_kcps_avg =
Charles MacNeill 5:89031b2f5316 414 pxtalk_range_data->rate_per_spad_kcps_sum /
Charles MacNeill 5:89031b2f5316 415 (uint32_t)pxtalk_range_data->no_of_samples;
Charles MacNeill 5:89031b2f5316 416
Charles MacNeill 5:89031b2f5316 417 pxtalk_range_data->signal_total_events_avg =
Charles MacNeill 5:89031b2f5316 418 pxtalk_range_data->signal_total_events_sum /
Charles MacNeill 5:89031b2f5316 419 (int32_t)pxtalk_range_data->no_of_samples;
Charles MacNeill 5:89031b2f5316 420
Charles MacNeill 5:89031b2f5316 421 pxtalk_range_data->sigma_mm_avg =
Charles MacNeill 5:89031b2f5316 422 pxtalk_range_data->sigma_mm_sum /
Charles MacNeill 5:89031b2f5316 423 (uint32_t)pxtalk_range_data->no_of_samples;
Charles MacNeill 5:89031b2f5316 424
Charles MacNeill 5:89031b2f5316 425
Charles MacNeill 5:89031b2f5316 426
Charles MacNeill 5:89031b2f5316 427 pxtalk_range_data->median_phase_avg =
Charles MacNeill 5:89031b2f5316 428 pxtalk_range_data->median_phase_sum /
Charles MacNeill 5:89031b2f5316 429 (uint32_t)pxtalk_range_data->no_of_samples;
Charles MacNeill 5:89031b2f5316 430
Charles MacNeill 5:89031b2f5316 431
Charles MacNeill 5:89031b2f5316 432
Charles MacNeill 5:89031b2f5316 433 } else {
Charles MacNeill 5:89031b2f5316 434 pxtalk_range_data->rate_per_spad_kcps_avg =
Charles MacNeill 5:89031b2f5316 435 pxtalk_range_data->rate_per_spad_kcps_sum;
Charles MacNeill 5:89031b2f5316 436 pxtalk_range_data->signal_total_events_avg =
Charles MacNeill 5:89031b2f5316 437 pxtalk_range_data->signal_total_events_sum;
Charles MacNeill 5:89031b2f5316 438 pxtalk_range_data->sigma_mm_avg =
Charles MacNeill 5:89031b2f5316 439 pxtalk_range_data->sigma_mm_sum;
Charles MacNeill 5:89031b2f5316 440
Charles MacNeill 5:89031b2f5316 441
Charles MacNeill 5:89031b2f5316 442
Charles MacNeill 5:89031b2f5316 443 pxtalk_range_data->median_phase_avg =
Charles MacNeill 5:89031b2f5316 444 pxtalk_range_data->median_phase_sum;
Charles MacNeill 5:89031b2f5316 445
Charles MacNeill 5:89031b2f5316 446
Charles MacNeill 5:89031b2f5316 447 }
Charles MacNeill 5:89031b2f5316 448 }
Charles MacNeill 5:89031b2f5316 449
Charles MacNeill 5:89031b2f5316 450
Charles MacNeill 5:89031b2f5316 451
Charles MacNeill 5:89031b2f5316 452 memcpy(pavg_histo, &(pdev->hist_data),
Charles MacNeill 5:89031b2f5316 453 sizeof(VL53LX_histogram_bin_data_t));
Charles MacNeill 5:89031b2f5316 454
Charles MacNeill 5:89031b2f5316 455
Charles MacNeill 5:89031b2f5316 456
Charles MacNeill 5:89031b2f5316 457 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 458
Charles MacNeill 5:89031b2f5316 459 pxtalk_range_data = &(pXR->VL53LX_p_003[xtalk_histo_id]);
Charles MacNeill 5:89031b2f5316 460
Charles MacNeill 5:89031b2f5316 461 status = VL53LX_avg_histogram_data(
Charles MacNeill 5:89031b2f5316 462 pxtalk_range_data->no_of_samples,
Charles MacNeill 5:89031b2f5316 463 psum_histo,
Charles MacNeill 5:89031b2f5316 464 pavg_histo);
Charles MacNeill 5:89031b2f5316 465 }
Charles MacNeill 5:89031b2f5316 466
Charles MacNeill 5:89031b2f5316 467
Charles MacNeill 5:89031b2f5316 468
Charles MacNeill 5:89031b2f5316 469
Charles MacNeill 5:89031b2f5316 470 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 471 if (smudge_corr_en == 1)
Charles MacNeill 5:89031b2f5316 472 status = VL53LX_dynamic_xtalk_correction_enable(Dev);
Charles MacNeill 5:89031b2f5316 473 }
Charles MacNeill 5:89031b2f5316 474
Charles MacNeill 5:89031b2f5316 475
Charles MacNeill 5:89031b2f5316 476 LOG_FUNCTION_END(status);
Charles MacNeill 5:89031b2f5316 477
Charles MacNeill 5:89031b2f5316 478 return status;
Charles MacNeill 5:89031b2f5316 479
Charles MacNeill 5:89031b2f5316 480 }
Charles MacNeill 5:89031b2f5316 481
Charles MacNeill 5:89031b2f5316 482
Charles MacNeill 5:89031b2f5316 483 VL53LX_Error VL53LX_run_phasecal_average(
Charles MacNeill 5:89031b2f5316 484 VL53LX_DEV Dev,
Charles MacNeill 5:89031b2f5316 485 uint8_t measurement_mode,
Charles MacNeill 5:89031b2f5316 486 uint8_t phasecal_result__vcsel_start,
Charles MacNeill 5:89031b2f5316 487 uint16_t phasecal_num_of_samples,
Charles MacNeill 5:89031b2f5316 488 VL53LX_range_results_t *prange_results,
Charles MacNeill 5:89031b2f5316 489 uint16_t *pphasecal_result__reference_phase,
Charles MacNeill 5:89031b2f5316 490 uint16_t *pzero_distance_phase)
Charles MacNeill 5:89031b2f5316 491 {
Charles MacNeill 5:89031b2f5316 492
Charles MacNeill 5:89031b2f5316 493
Charles MacNeill 5:89031b2f5316 494 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 495 VL53LX_LLDriverData_t *pdev =
Charles MacNeill 5:89031b2f5316 496 VL53LXDevStructGetLLDriverHandle(Dev);
Charles MacNeill 5:89031b2f5316 497
Charles MacNeill 5:89031b2f5316 498 uint16_t i = 0;
Charles MacNeill 5:89031b2f5316 499 uint16_t m = 0;
Charles MacNeill 5:89031b2f5316 500 uint32_t samples = 0;
Charles MacNeill 5:89031b2f5316 501
Charles MacNeill 5:89031b2f5316 502 uint32_t period = 0;
Charles MacNeill 5:89031b2f5316 503 uint32_t VL53LX_p_014 = 0;
Charles MacNeill 5:89031b2f5316 504 uint32_t phasecal_result__reference_phase = 0;
Charles MacNeill 5:89031b2f5316 505 uint32_t zero_distance_phase = 0;
Charles MacNeill 5:89031b2f5316 506
Charles MacNeill 5:89031b2f5316 507
Charles MacNeill 5:89031b2f5316 508 VL53LX_load_patch(Dev);
Charles MacNeill 5:89031b2f5316 509
Charles MacNeill 5:89031b2f5316 510 for (m = 0; m < phasecal_num_of_samples; m++) {
Charles MacNeill 5:89031b2f5316 511
Charles MacNeill 5:89031b2f5316 512
Charles MacNeill 5:89031b2f5316 513
Charles MacNeill 5:89031b2f5316 514 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 515 status =
Charles MacNeill 5:89031b2f5316 516 VL53LX_init_and_start_range(
Charles MacNeill 5:89031b2f5316 517 Dev,
Charles MacNeill 5:89031b2f5316 518 measurement_mode,
Charles MacNeill 5:89031b2f5316 519 VL53LX_DEVICECONFIGLEVEL_CUSTOMER_ONWARDS);
Charles MacNeill 5:89031b2f5316 520
Charles MacNeill 5:89031b2f5316 521 for (i = 0; i <= 1; i++) {
Charles MacNeill 5:89031b2f5316 522
Charles MacNeill 5:89031b2f5316 523
Charles MacNeill 5:89031b2f5316 524
Charles MacNeill 5:89031b2f5316 525 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 526 status =
Charles MacNeill 5:89031b2f5316 527 VL53LX_wait_for_range_completion(Dev);
Charles MacNeill 5:89031b2f5316 528
Charles MacNeill 5:89031b2f5316 529
Charles MacNeill 5:89031b2f5316 530
Charles MacNeill 5:89031b2f5316 531 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 532 status =
Charles MacNeill 5:89031b2f5316 533 VL53LX_get_device_results(
Charles MacNeill 5:89031b2f5316 534 Dev,
Charles MacNeill 5:89031b2f5316 535 VL53LX_DEVICERESULTSLEVEL_FULL,
Charles MacNeill 5:89031b2f5316 536 prange_results);
Charles MacNeill 5:89031b2f5316 537
Charles MacNeill 5:89031b2f5316 538
Charles MacNeill 5:89031b2f5316 539
Charles MacNeill 5:89031b2f5316 540 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 541 status =
Charles MacNeill 5:89031b2f5316 542 VL53LX_wait_for_firmware_ready(Dev);
Charles MacNeill 5:89031b2f5316 543
Charles MacNeill 5:89031b2f5316 544
Charles MacNeill 5:89031b2f5316 545
Charles MacNeill 5:89031b2f5316 546 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 547 status =
Charles MacNeill 5:89031b2f5316 548 VL53LX_clear_interrupt_and_enable_next_range(
Charles MacNeill 5:89031b2f5316 549 Dev,
Charles MacNeill 5:89031b2f5316 550 measurement_mode);
Charles MacNeill 5:89031b2f5316 551 }
Charles MacNeill 5:89031b2f5316 552
Charles MacNeill 5:89031b2f5316 553
Charles MacNeill 5:89031b2f5316 554
Charles MacNeill 5:89031b2f5316 555 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 556 status = VL53LX_stop_range(Dev);
Charles MacNeill 5:89031b2f5316 557
Charles MacNeill 5:89031b2f5316 558
Charles MacNeill 5:89031b2f5316 559
Charles MacNeill 5:89031b2f5316 560 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 561 status = VL53LX_WaitUs(Dev, 1000);
Charles MacNeill 5:89031b2f5316 562
Charles MacNeill 5:89031b2f5316 563
Charles MacNeill 5:89031b2f5316 564
Charles MacNeill 5:89031b2f5316 565 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 566
Charles MacNeill 5:89031b2f5316 567 samples++;
Charles MacNeill 5:89031b2f5316 568
Charles MacNeill 5:89031b2f5316 569
Charles MacNeill 5:89031b2f5316 570 period = 2048 *
Charles MacNeill 5:89031b2f5316 571 (uint32_t)VL53LX_decode_vcsel_period(
Charles MacNeill 5:89031b2f5316 572 pdev->hist_data.VL53LX_p_005);
Charles MacNeill 5:89031b2f5316 573
Charles MacNeill 5:89031b2f5316 574 VL53LX_p_014 = period;
Charles MacNeill 5:89031b2f5316 575 VL53LX_p_014 += (uint32_t)(
Charles MacNeill 5:89031b2f5316 576 pdev->hist_data.phasecal_result__reference_phase);
Charles MacNeill 5:89031b2f5316 577 VL53LX_p_014 +=
Charles MacNeill 5:89031b2f5316 578 (2048 *
Charles MacNeill 5:89031b2f5316 579 (uint32_t)phasecal_result__vcsel_start);
Charles MacNeill 5:89031b2f5316 580 VL53LX_p_014 -= (2048 *
Charles MacNeill 5:89031b2f5316 581 (uint32_t)pdev->hist_data.cal_config__vcsel_start);
Charles MacNeill 5:89031b2f5316 582
Charles MacNeill 5:89031b2f5316 583 VL53LX_p_014 = VL53LX_p_014 % period;
Charles MacNeill 5:89031b2f5316 584
Charles MacNeill 5:89031b2f5316 585 phasecal_result__reference_phase += (uint32_t)(
Charles MacNeill 5:89031b2f5316 586 pdev->hist_data.phasecal_result__reference_phase);
Charles MacNeill 5:89031b2f5316 587
Charles MacNeill 5:89031b2f5316 588 zero_distance_phase += (uint32_t)VL53LX_p_014;
Charles MacNeill 5:89031b2f5316 589 }
Charles MacNeill 5:89031b2f5316 590 }
Charles MacNeill 5:89031b2f5316 591 VL53LX_unload_patch(Dev);
Charles MacNeill 5:89031b2f5316 592
Charles MacNeill 5:89031b2f5316 593
Charles MacNeill 5:89031b2f5316 594
Charles MacNeill 5:89031b2f5316 595 if (status == VL53LX_ERROR_NONE && samples > 0) {
Charles MacNeill 5:89031b2f5316 596
Charles MacNeill 5:89031b2f5316 597 phasecal_result__reference_phase += (samples >> 1);
Charles MacNeill 5:89031b2f5316 598 phasecal_result__reference_phase /= samples;
Charles MacNeill 5:89031b2f5316 599
Charles MacNeill 5:89031b2f5316 600 zero_distance_phase += (samples >> 1);
Charles MacNeill 5:89031b2f5316 601 zero_distance_phase /= samples;
Charles MacNeill 5:89031b2f5316 602
Charles MacNeill 5:89031b2f5316 603 *pphasecal_result__reference_phase =
Charles MacNeill 5:89031b2f5316 604 (uint16_t)phasecal_result__reference_phase;
Charles MacNeill 5:89031b2f5316 605 *pzero_distance_phase =
Charles MacNeill 5:89031b2f5316 606 (uint16_t)zero_distance_phase;
Charles MacNeill 5:89031b2f5316 607 }
Charles MacNeill 5:89031b2f5316 608
Charles MacNeill 5:89031b2f5316 609 return status;
Charles MacNeill 5:89031b2f5316 610 }
Charles MacNeill 5:89031b2f5316 611
Charles MacNeill 5:89031b2f5316 612
Charles MacNeill 5:89031b2f5316 613 VL53LX_Error VL53LX_run_device_test(
Charles MacNeill 5:89031b2f5316 614 VL53LX_DEV Dev,
Charles MacNeill 5:89031b2f5316 615 VL53LX_DeviceTestMode device_test_mode)
Charles MacNeill 5:89031b2f5316 616 {
Charles MacNeill 5:89031b2f5316 617
Charles MacNeill 5:89031b2f5316 618
Charles MacNeill 5:89031b2f5316 619 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 620 VL53LX_LLDriverData_t *pdev = VL53LXDevStructGetLLDriverHandle(Dev);
Charles MacNeill 5:89031b2f5316 621
Charles MacNeill 5:89031b2f5316 622 uint8_t comms_buffer[2];
Charles MacNeill 5:89031b2f5316 623 uint8_t gpio_hv_mux__ctrl = 0;
Charles MacNeill 5:89031b2f5316 624
Charles MacNeill 5:89031b2f5316 625 LOG_FUNCTION_START("");
Charles MacNeill 5:89031b2f5316 626
Charles MacNeill 5:89031b2f5316 627
Charles MacNeill 5:89031b2f5316 628
Charles MacNeill 5:89031b2f5316 629 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 630 status =
Charles MacNeill 5:89031b2f5316 631 VL53LX_RdByte(
Charles MacNeill 5:89031b2f5316 632 Dev,
Charles MacNeill 5:89031b2f5316 633 VL53LX_GPIO_HV_MUX__CTRL,
Charles MacNeill 5:89031b2f5316 634 &gpio_hv_mux__ctrl);
Charles MacNeill 5:89031b2f5316 635
Charles MacNeill 5:89031b2f5316 636 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 637 pdev->stat_cfg.gpio_hv_mux__ctrl = gpio_hv_mux__ctrl;
Charles MacNeill 5:89031b2f5316 638
Charles MacNeill 5:89031b2f5316 639
Charles MacNeill 5:89031b2f5316 640 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 641 status = VL53LX_start_test(
Charles MacNeill 5:89031b2f5316 642 Dev,
Charles MacNeill 5:89031b2f5316 643 device_test_mode);
Charles MacNeill 5:89031b2f5316 644
Charles MacNeill 5:89031b2f5316 645
Charles MacNeill 5:89031b2f5316 646 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 647 status = VL53LX_wait_for_test_completion(Dev);
Charles MacNeill 5:89031b2f5316 648
Charles MacNeill 5:89031b2f5316 649
Charles MacNeill 5:89031b2f5316 650 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 651 status =
Charles MacNeill 5:89031b2f5316 652 VL53LX_ReadMulti(
Charles MacNeill 5:89031b2f5316 653 Dev,
Charles MacNeill 5:89031b2f5316 654 VL53LX_RESULT__RANGE_STATUS,
Charles MacNeill 5:89031b2f5316 655 comms_buffer,
Charles MacNeill 5:89031b2f5316 656 2);
Charles MacNeill 5:89031b2f5316 657
Charles MacNeill 5:89031b2f5316 658 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 659 pdev->sys_results.result__range_status = comms_buffer[0];
Charles MacNeill 5:89031b2f5316 660 pdev->sys_results.result__report_status = comms_buffer[1];
Charles MacNeill 5:89031b2f5316 661 }
Charles MacNeill 5:89031b2f5316 662
Charles MacNeill 5:89031b2f5316 663
Charles MacNeill 5:89031b2f5316 664
Charles MacNeill 5:89031b2f5316 665 pdev->sys_results.result__range_status &=
Charles MacNeill 5:89031b2f5316 666 VL53LX_RANGE_STATUS__RANGE_STATUS_MASK;
Charles MacNeill 5:89031b2f5316 667
Charles MacNeill 5:89031b2f5316 668 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 669 trace_print(
Charles MacNeill 5:89031b2f5316 670 VL53LX_TRACE_LEVEL_INFO,
Charles MacNeill 5:89031b2f5316 671 " Device Test Complete:\n\t%-32s = %3u\n\t%-32s = %3u\n",
Charles MacNeill 5:89031b2f5316 672 "result__range_status",
Charles MacNeill 5:89031b2f5316 673 pdev->sys_results.result__range_status,
Charles MacNeill 5:89031b2f5316 674 "result__report_status",
Charles MacNeill 5:89031b2f5316 675 pdev->sys_results.result__report_status);
Charles MacNeill 5:89031b2f5316 676
Charles MacNeill 5:89031b2f5316 677
Charles MacNeill 5:89031b2f5316 678 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 679 status = VL53LX_clear_interrupt(Dev);
Charles MacNeill 5:89031b2f5316 680 }
Charles MacNeill 5:89031b2f5316 681
Charles MacNeill 5:89031b2f5316 682
Charles MacNeill 5:89031b2f5316 683
Charles MacNeill 5:89031b2f5316 684 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 685 status =
Charles MacNeill 5:89031b2f5316 686 VL53LX_start_test(
Charles MacNeill 5:89031b2f5316 687 Dev,
Charles MacNeill 5:89031b2f5316 688 0x00);
Charles MacNeill 5:89031b2f5316 689
Charles MacNeill 5:89031b2f5316 690 LOG_FUNCTION_END(status);
Charles MacNeill 5:89031b2f5316 691
Charles MacNeill 5:89031b2f5316 692 return status;
Charles MacNeill 5:89031b2f5316 693 }
Charles MacNeill 5:89031b2f5316 694
Charles MacNeill 5:89031b2f5316 695
Charles MacNeill 5:89031b2f5316 696 void VL53LX_hist_xtalk_extract_data_init(
Charles MacNeill 5:89031b2f5316 697 VL53LX_hist_xtalk_extract_data_t *pxtalk_data)
Charles MacNeill 5:89031b2f5316 698 {
Charles MacNeill 5:89031b2f5316 699
Charles MacNeill 5:89031b2f5316 700
Charles MacNeill 5:89031b2f5316 701 int32_t lb = 0;
Charles MacNeill 5:89031b2f5316 702
Charles MacNeill 5:89031b2f5316 703 pxtalk_data->sample_count = 0U;
Charles MacNeill 5:89031b2f5316 704 pxtalk_data->pll_period_mm = 0U;
Charles MacNeill 5:89031b2f5316 705 pxtalk_data->peak_duration_us_sum = 0U;
Charles MacNeill 5:89031b2f5316 706 pxtalk_data->effective_spad_count_sum = 0U;
Charles MacNeill 5:89031b2f5316 707 pxtalk_data->zero_distance_phase_sum = 0U;
Charles MacNeill 5:89031b2f5316 708 pxtalk_data->zero_distance_phase_avg = 0U;
Charles MacNeill 5:89031b2f5316 709 pxtalk_data->event_scaler_sum = 0U;
Charles MacNeill 5:89031b2f5316 710 pxtalk_data->event_scaler_avg = 4096U;
Charles MacNeill 5:89031b2f5316 711 pxtalk_data->signal_events_sum = 0;
Charles MacNeill 5:89031b2f5316 712 pxtalk_data->xtalk_rate_kcps_per_spad = 0U;
Charles MacNeill 5:89031b2f5316 713 pxtalk_data->VL53LX_p_012 = 0U;
Charles MacNeill 5:89031b2f5316 714 pxtalk_data->VL53LX_p_013 = 0U;
Charles MacNeill 5:89031b2f5316 715 pxtalk_data->target_start = 0U;
Charles MacNeill 5:89031b2f5316 716
Charles MacNeill 5:89031b2f5316 717 for (lb = 0; lb < VL53LX_XTALK_HISTO_BINS; lb++)
Charles MacNeill 5:89031b2f5316 718 pxtalk_data->bin_data_sums[lb] = 0;
Charles MacNeill 5:89031b2f5316 719
Charles MacNeill 5:89031b2f5316 720 }
Charles MacNeill 5:89031b2f5316 721
Charles MacNeill 5:89031b2f5316 722
Charles MacNeill 5:89031b2f5316 723 VL53LX_Error VL53LX_hist_xtalk_extract_update(
Charles MacNeill 5:89031b2f5316 724 int16_t target_distance_mm,
Charles MacNeill 5:89031b2f5316 725 uint16_t target_width_oversize,
Charles MacNeill 5:89031b2f5316 726 VL53LX_histogram_bin_data_t *phist_bins,
Charles MacNeill 5:89031b2f5316 727 VL53LX_hist_xtalk_extract_data_t *pxtalk_data)
Charles MacNeill 5:89031b2f5316 728 {
Charles MacNeill 5:89031b2f5316 729
Charles MacNeill 5:89031b2f5316 730
Charles MacNeill 5:89031b2f5316 731 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 732
Charles MacNeill 5:89031b2f5316 733 LOG_FUNCTION_START("");
Charles MacNeill 5:89031b2f5316 734
Charles MacNeill 5:89031b2f5316 735 status =
Charles MacNeill 5:89031b2f5316 736 VL53LX_hist_xtalk_extract_calc_window(
Charles MacNeill 5:89031b2f5316 737 target_distance_mm,
Charles MacNeill 5:89031b2f5316 738 target_width_oversize,
Charles MacNeill 5:89031b2f5316 739 phist_bins,
Charles MacNeill 5:89031b2f5316 740 pxtalk_data);
Charles MacNeill 5:89031b2f5316 741
Charles MacNeill 5:89031b2f5316 742 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 743 status =
Charles MacNeill 5:89031b2f5316 744 VL53LX_hist_xtalk_extract_calc_event_sums(
Charles MacNeill 5:89031b2f5316 745 phist_bins,
Charles MacNeill 5:89031b2f5316 746 pxtalk_data);
Charles MacNeill 5:89031b2f5316 747 }
Charles MacNeill 5:89031b2f5316 748
Charles MacNeill 5:89031b2f5316 749 LOG_FUNCTION_END(status);
Charles MacNeill 5:89031b2f5316 750
Charles MacNeill 5:89031b2f5316 751 return status;
Charles MacNeill 5:89031b2f5316 752 }
Charles MacNeill 5:89031b2f5316 753
Charles MacNeill 5:89031b2f5316 754
Charles MacNeill 5:89031b2f5316 755 VL53LX_Error VL53LX_hist_xtalk_extract_fini(
Charles MacNeill 5:89031b2f5316 756 VL53LX_histogram_bin_data_t *phist_bins,
Charles MacNeill 5:89031b2f5316 757 VL53LX_hist_xtalk_extract_data_t *pxtalk_data,
Charles MacNeill 5:89031b2f5316 758 VL53LX_xtalk_calibration_results_t *pxtalk_cal,
Charles MacNeill 5:89031b2f5316 759 VL53LX_xtalk_histogram_shape_t *pxtalk_shape)
Charles MacNeill 5:89031b2f5316 760 {
Charles MacNeill 5:89031b2f5316 761
Charles MacNeill 5:89031b2f5316 762
Charles MacNeill 5:89031b2f5316 763 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 764 VL53LX_xtalk_calibration_results_t *pX = pxtalk_cal;
Charles MacNeill 5:89031b2f5316 765
Charles MacNeill 5:89031b2f5316 766 LOG_FUNCTION_START("");
Charles MacNeill 5:89031b2f5316 767
Charles MacNeill 5:89031b2f5316 768 if (pxtalk_data->sample_count > 0) {
Charles MacNeill 5:89031b2f5316 769
Charles MacNeill 5:89031b2f5316 770
Charles MacNeill 5:89031b2f5316 771 pxtalk_data->event_scaler_avg = pxtalk_data->event_scaler_sum;
Charles MacNeill 5:89031b2f5316 772 pxtalk_data->event_scaler_avg +=
Charles MacNeill 5:89031b2f5316 773 (pxtalk_data->sample_count >> 1);
Charles MacNeill 5:89031b2f5316 774 pxtalk_data->event_scaler_avg /= pxtalk_data->sample_count;
Charles MacNeill 5:89031b2f5316 775
Charles MacNeill 5:89031b2f5316 776
Charles MacNeill 5:89031b2f5316 777
Charles MacNeill 5:89031b2f5316 778 status =
Charles MacNeill 5:89031b2f5316 779 VL53LX_hist_xtalk_extract_calc_rate_per_spad(
Charles MacNeill 5:89031b2f5316 780 pxtalk_data);
Charles MacNeill 5:89031b2f5316 781
Charles MacNeill 5:89031b2f5316 782
Charles MacNeill 5:89031b2f5316 783
Charles MacNeill 5:89031b2f5316 784 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 785
Charles MacNeill 5:89031b2f5316 786
Charles MacNeill 5:89031b2f5316 787 pxtalk_data->zero_distance_phase_avg =
Charles MacNeill 5:89031b2f5316 788 pxtalk_data->zero_distance_phase_sum;
Charles MacNeill 5:89031b2f5316 789 pxtalk_data->zero_distance_phase_avg +=
Charles MacNeill 5:89031b2f5316 790 (pxtalk_data->sample_count >> 1);
Charles MacNeill 5:89031b2f5316 791 pxtalk_data->zero_distance_phase_avg /=
Charles MacNeill 5:89031b2f5316 792 pxtalk_data->sample_count;
Charles MacNeill 5:89031b2f5316 793
Charles MacNeill 5:89031b2f5316 794
Charles MacNeill 5:89031b2f5316 795 status =
Charles MacNeill 5:89031b2f5316 796 VL53LX_hist_xtalk_extract_calc_shape(
Charles MacNeill 5:89031b2f5316 797 pxtalk_data,
Charles MacNeill 5:89031b2f5316 798 pxtalk_shape);
Charles MacNeill 5:89031b2f5316 799
Charles MacNeill 5:89031b2f5316 800
Charles MacNeill 5:89031b2f5316 801
Charles MacNeill 5:89031b2f5316 802
Charles MacNeill 5:89031b2f5316 803 pxtalk_shape->phasecal_result__vcsel_start =
Charles MacNeill 5:89031b2f5316 804 phist_bins->phasecal_result__vcsel_start;
Charles MacNeill 5:89031b2f5316 805 pxtalk_shape->cal_config__vcsel_start =
Charles MacNeill 5:89031b2f5316 806 phist_bins->cal_config__vcsel_start;
Charles MacNeill 5:89031b2f5316 807 pxtalk_shape->vcsel_width =
Charles MacNeill 5:89031b2f5316 808 phist_bins->vcsel_width;
Charles MacNeill 5:89031b2f5316 809 pxtalk_shape->VL53LX_p_015 =
Charles MacNeill 5:89031b2f5316 810 phist_bins->VL53LX_p_015;
Charles MacNeill 5:89031b2f5316 811 }
Charles MacNeill 5:89031b2f5316 812
Charles MacNeill 5:89031b2f5316 813
Charles MacNeill 5:89031b2f5316 814 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 815
Charles MacNeill 5:89031b2f5316 816
Charles MacNeill 5:89031b2f5316 817 pX->algo__crosstalk_compensation_plane_offset_kcps =
Charles MacNeill 5:89031b2f5316 818 pxtalk_data->xtalk_rate_kcps_per_spad;
Charles MacNeill 5:89031b2f5316 819 pX->algo__crosstalk_compensation_x_plane_gradient_kcps
Charles MacNeill 5:89031b2f5316 820 = 0U;
Charles MacNeill 5:89031b2f5316 821 pX->algo__crosstalk_compensation_y_plane_gradient_kcps
Charles MacNeill 5:89031b2f5316 822 = 0U;
Charles MacNeill 5:89031b2f5316 823
Charles MacNeill 5:89031b2f5316 824 }
Charles MacNeill 5:89031b2f5316 825 }
Charles MacNeill 5:89031b2f5316 826
Charles MacNeill 5:89031b2f5316 827 LOG_FUNCTION_END(status);
Charles MacNeill 5:89031b2f5316 828
Charles MacNeill 5:89031b2f5316 829 return status;
Charles MacNeill 5:89031b2f5316 830 }
Charles MacNeill 5:89031b2f5316 831
Charles MacNeill 5:89031b2f5316 832
Charles MacNeill 5:89031b2f5316 833 VL53LX_Error VL53LX_run_hist_xtalk_extraction(
Charles MacNeill 5:89031b2f5316 834 VL53LX_DEV Dev,
Charles MacNeill 5:89031b2f5316 835 int16_t cal_distance_mm,
Charles MacNeill 5:89031b2f5316 836 VL53LX_Error *pcal_status)
Charles MacNeill 5:89031b2f5316 837 {
Charles MacNeill 5:89031b2f5316 838
Charles MacNeill 5:89031b2f5316 839
Charles MacNeill 5:89031b2f5316 840 #define OVERSIZE 4
Charles MacNeill 5:89031b2f5316 841 VL53LX_Error status = VL53LX_ERROR_NONE;
Charles MacNeill 5:89031b2f5316 842 VL53LX_LLDriverData_t *pdev = VL53LXDevStructGetLLDriverHandle(Dev);
Charles MacNeill 5:89031b2f5316 843 VL53LX_xtalkextract_config_t *pX = &(pdev->xtalk_extract_cfg);
Charles MacNeill 5:89031b2f5316 844 VL53LX_xtalk_config_t *pC = &(pdev->xtalk_cfg);
Charles MacNeill 5:89031b2f5316 845 VL53LX_xtalk_calibration_results_t *pXC = &(pdev->xtalk_cal);
Charles MacNeill 5:89031b2f5316 846
Charles MacNeill 5:89031b2f5316 847
Charles MacNeill 5:89031b2f5316 848
Charles MacNeill 5:89031b2f5316 849 uint8_t smudge_corr_en = 0;
Charles MacNeill 5:89031b2f5316 850 uint8_t i = 0;
Charles MacNeill 5:89031b2f5316 851 int8_t k = 0;
Charles MacNeill 5:89031b2f5316 852 uint8_t nbloops;
Charles MacNeill 5:89031b2f5316 853 int32_t initMergeSize = 0;
Charles MacNeill 5:89031b2f5316 854 int32_t MergeEnabled = 0;
Charles MacNeill 5:89031b2f5316 855 uint32_t deltaXtalk;
Charles MacNeill 5:89031b2f5316 856 uint32_t stepXtalk;
Charles MacNeill 5:89031b2f5316 857 uint32_t XtalkMin;
Charles MacNeill 5:89031b2f5316 858 uint32_t XtalkMax;
Charles MacNeill 5:89031b2f5316 859 uint8_t measurement_mode = VL53LX_DEVICEMEASUREMENTMODE_BACKTOBACK;
Charles MacNeill 5:89031b2f5316 860 int8_t MaxId;
Charles MacNeill 5:89031b2f5316 861 uint8_t histo_merge_nb;
Charles MacNeill 5:89031b2f5316 862 uint8_t wait_for_accumulation;
Charles MacNeill 5:89031b2f5316 863 VL53LX_range_results_t *prange_results =
Charles MacNeill 5:89031b2f5316 864 (VL53LX_range_results_t *) pdev->wArea1;
Charles MacNeill 5:89031b2f5316 865 uint8_t Very1stRange = 0;
Charles MacNeill 5:89031b2f5316 866
Charles MacNeill 5:89031b2f5316 867 LOG_FUNCTION_START("");
Charles MacNeill 5:89031b2f5316 868
Charles MacNeill 5:89031b2f5316 869
Charles MacNeill 5:89031b2f5316 870
Charles MacNeill 5:89031b2f5316 871 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 872 status =
Charles MacNeill 5:89031b2f5316 873 VL53LX_set_preset_mode(
Charles MacNeill 5:89031b2f5316 874 Dev,
Charles MacNeill 5:89031b2f5316 875 VL53LX_DEVICEPRESETMODE_HISTOGRAM_LONG_RANGE,
Charles MacNeill 5:89031b2f5316 876 pX->dss_config__target_total_rate_mcps,
Charles MacNeill 5:89031b2f5316 877 pX->phasecal_config_timeout_us,
Charles MacNeill 5:89031b2f5316 878 pX->mm_config_timeout_us,
Charles MacNeill 5:89031b2f5316 879 pX->range_config_timeout_us,
Charles MacNeill 5:89031b2f5316 880 100);
Charles MacNeill 5:89031b2f5316 881
Charles MacNeill 5:89031b2f5316 882
Charles MacNeill 5:89031b2f5316 883
Charles MacNeill 5:89031b2f5316 884 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 885 status = VL53LX_disable_xtalk_compensation(Dev);
Charles MacNeill 5:89031b2f5316 886
Charles MacNeill 5:89031b2f5316 887
Charles MacNeill 5:89031b2f5316 888
Charles MacNeill 5:89031b2f5316 889 smudge_corr_en = pdev->smudge_correct_config.smudge_corr_enabled;
Charles MacNeill 5:89031b2f5316 890
Charles MacNeill 5:89031b2f5316 891 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 892 status = VL53LX_dynamic_xtalk_correction_disable(Dev);
Charles MacNeill 5:89031b2f5316 893
Charles MacNeill 5:89031b2f5316 894
Charles MacNeill 5:89031b2f5316 895 VL53LX_load_patch(Dev);
Charles MacNeill 5:89031b2f5316 896
Charles MacNeill 5:89031b2f5316 897 VL53LX_get_tuning_parm(Dev, VL53LX_TUNINGPARM_HIST_MERGE_MAX_SIZE,
Charles MacNeill 5:89031b2f5316 898 &initMergeSize);
Charles MacNeill 5:89031b2f5316 899 VL53LX_get_tuning_parm(Dev, VL53LX_TUNINGPARM_HIST_MERGE,
Charles MacNeill 5:89031b2f5316 900 &MergeEnabled);
Charles MacNeill 5:89031b2f5316 901 memset(&pdev->xtalk_cal, 0, sizeof(pdev->xtalk_cal));
Charles MacNeill 5:89031b2f5316 902
Charles MacNeill 5:89031b2f5316 903 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 904 status = VL53LX_init_and_start_range(
Charles MacNeill 5:89031b2f5316 905 Dev, measurement_mode,
Charles MacNeill 5:89031b2f5316 906 VL53LX_DEVICECONFIGLEVEL_CUSTOMER_ONWARDS);
Charles MacNeill 5:89031b2f5316 907
Charles MacNeill 5:89031b2f5316 908 MaxId = pdev->tuning_parms.tp_hist_merge_max_size - 1;
Charles MacNeill 5:89031b2f5316 909 nbloops = (MergeEnabled == 0 ? 1 : 2);
Charles MacNeill 5:89031b2f5316 910 for (k = 0; k < nbloops; k++) {
Charles MacNeill 5:89031b2f5316 911
Charles MacNeill 5:89031b2f5316 912 VL53LX_hist_xtalk_extract_data_init(
Charles MacNeill 5:89031b2f5316 913 &(pdev->xtalk_extract));
Charles MacNeill 5:89031b2f5316 914 VL53LX_set_tuning_parm(Dev,
Charles MacNeill 5:89031b2f5316 915 VL53LX_TUNINGPARM_HIST_MERGE_MAX_SIZE,
Charles MacNeill 5:89031b2f5316 916 k * MaxId + 1);
Charles MacNeill 5:89031b2f5316 917
Charles MacNeill 5:89031b2f5316 918 for (i = 0; i <= pX->num_of_samples; i++) {
Charles MacNeill 5:89031b2f5316 919 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 920 status = VL53LX_wait_for_range_completion(Dev);
Charles MacNeill 5:89031b2f5316 921 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 922 status = VL53LX_get_device_results(Dev,
Charles MacNeill 5:89031b2f5316 923 VL53LX_DEVICERESULTSLEVEL_FULL,
Charles MacNeill 5:89031b2f5316 924 prange_results);
Charles MacNeill 5:89031b2f5316 925 Very1stRange =
Charles MacNeill 5:89031b2f5316 926 (pdev->ll_state.rd_device_state ==
Charles MacNeill 5:89031b2f5316 927 VL53LX_DEVICESTATE_RANGING_WAIT_GPH_SYNC);
Charles MacNeill 5:89031b2f5316 928
Charles MacNeill 5:89031b2f5316 929 VL53LX_compute_histo_merge_nb(Dev, &histo_merge_nb);
Charles MacNeill 5:89031b2f5316 930 wait_for_accumulation = ((k != 0) &&
Charles MacNeill 5:89031b2f5316 931 (MergeEnabled) &&
Charles MacNeill 5:89031b2f5316 932 (status == VL53LX_ERROR_NONE) &&
Charles MacNeill 5:89031b2f5316 933 (histo_merge_nb <
Charles MacNeill 5:89031b2f5316 934 pdev->tuning_parms.tp_hist_merge_max_size));
Charles MacNeill 5:89031b2f5316 935 if (wait_for_accumulation)
Charles MacNeill 5:89031b2f5316 936 i = 0;
Charles MacNeill 5:89031b2f5316 937 else {
Charles MacNeill 5:89031b2f5316 938 if ((status == VL53LX_ERROR_NONE) &&
Charles MacNeill 5:89031b2f5316 939 (!Very1stRange)) {
Charles MacNeill 5:89031b2f5316 940 status =
Charles MacNeill 5:89031b2f5316 941 VL53LX_hist_xtalk_extract_update(
Charles MacNeill 5:89031b2f5316 942 cal_distance_mm,
Charles MacNeill 5:89031b2f5316 943 OVERSIZE,
Charles MacNeill 5:89031b2f5316 944 &(pdev->hist_data),
Charles MacNeill 5:89031b2f5316 945 &(pdev->xtalk_extract));
Charles MacNeill 5:89031b2f5316 946 }
Charles MacNeill 5:89031b2f5316 947 }
Charles MacNeill 5:89031b2f5316 948
Charles MacNeill 5:89031b2f5316 949 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 950 status = VL53LX_wait_for_firmware_ready(Dev);
Charles MacNeill 5:89031b2f5316 951 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 952 status =
Charles MacNeill 5:89031b2f5316 953 VL53LX_clear_interrupt_and_enable_next_range(
Charles MacNeill 5:89031b2f5316 954 Dev, measurement_mode);
Charles MacNeill 5:89031b2f5316 955
Charles MacNeill 5:89031b2f5316 956
Charles MacNeill 5:89031b2f5316 957 if (status == VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 958 status =
Charles MacNeill 5:89031b2f5316 959 VL53LX_hist_xtalk_extract_fini(
Charles MacNeill 5:89031b2f5316 960 &(pdev->hist_data),
Charles MacNeill 5:89031b2f5316 961 &(pdev->xtalk_extract),
Charles MacNeill 5:89031b2f5316 962 &(pdev->xtalk_cal),
Charles MacNeill 5:89031b2f5316 963 &(pdev->xtalk_shapes.xtalk_shape));
Charles MacNeill 5:89031b2f5316 964 if (status != VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 965 goto LOOPOUT;
Charles MacNeill 5:89031b2f5316 966 pXC->algo__xtalk_cpo_HistoMerge_kcps[k * MaxId] =
Charles MacNeill 5:89031b2f5316 967 pXC->algo__crosstalk_compensation_plane_offset_kcps;
Charles MacNeill 5:89031b2f5316 968 }
Charles MacNeill 5:89031b2f5316 969 }
Charles MacNeill 5:89031b2f5316 970
Charles MacNeill 5:89031b2f5316 971 LOOPOUT:
Charles MacNeill 5:89031b2f5316 972
Charles MacNeill 5:89031b2f5316 973 VL53LX_stop_range(Dev);
Charles MacNeill 5:89031b2f5316 974
Charles MacNeill 5:89031b2f5316 975 VL53LX_set_tuning_parm(Dev, VL53LX_TUNINGPARM_HIST_MERGE_MAX_SIZE,
Charles MacNeill 5:89031b2f5316 976 initMergeSize);
Charles MacNeill 5:89031b2f5316 977 VL53LX_unload_patch(Dev);
Charles MacNeill 5:89031b2f5316 978
Charles MacNeill 5:89031b2f5316 979 if (status != VL53LX_ERROR_NONE)
Charles MacNeill 5:89031b2f5316 980 status = VL53LX_ERROR_XTALK_EXTRACTION_SIGMA_LIMIT_FAIL;
Charles MacNeill 5:89031b2f5316 981 else if ((MergeEnabled == 1) && (MaxId > 0)) {
Charles MacNeill 5:89031b2f5316 982 XtalkMin = pdev->xtalk_cal.algo__xtalk_cpo_HistoMerge_kcps[0];
Charles MacNeill 5:89031b2f5316 983 XtalkMax =
Charles MacNeill 5:89031b2f5316 984 pdev->xtalk_cal.algo__xtalk_cpo_HistoMerge_kcps[MaxId];
Charles MacNeill 5:89031b2f5316 985 pdev->xtalk_cal.
Charles MacNeill 5:89031b2f5316 986 algo__crosstalk_compensation_plane_offset_kcps = XtalkMin;
Charles MacNeill 5:89031b2f5316 987 if (XtalkMax > XtalkMin) {
Charles MacNeill 5:89031b2f5316 988 deltaXtalk = XtalkMax - XtalkMin;
Charles MacNeill 5:89031b2f5316 989 stepXtalk = deltaXtalk / MaxId;
Charles MacNeill 5:89031b2f5316 990 for (k = 1; k < MaxId; k++)
Charles MacNeill 5:89031b2f5316 991 pdev->xtalk_cal.algo__xtalk_cpo_HistoMerge_kcps[k] =
Charles MacNeill 5:89031b2f5316 992 XtalkMin + stepXtalk * k;
Charles MacNeill 5:89031b2f5316 993 } else
Charles MacNeill 5:89031b2f5316 994 status =
Charles MacNeill 5:89031b2f5316 995 VL53LX_ERROR_XTALK_EXTRACTION_SIGMA_LIMIT_FAIL;
Charles MacNeill 5:89031b2f5316 996 }
Charles MacNeill 5:89031b2f5316 997
Charles MacNeill 5:89031b2f5316 998 if (status == VL53LX_ERROR_NONE) {
Charles MacNeill 5:89031b2f5316 999 pC->algo__crosstalk_compensation_x_plane_gradient_kcps =
Charles MacNeill 5:89031b2f5316 1000 pXC->algo__crosstalk_compensation_x_plane_gradient_kcps;
Charles MacNeill 5:89031b2f5316 1001 pC->algo__crosstalk_compensation_y_plane_gradient_kcps =
Charles MacNeill 5:89031b2f5316 1002 pXC->algo__crosstalk_compensation_y_plane_gradient_kcps;
Charles MacNeill 5:89031b2f5316 1003 pC->algo__crosstalk_compensation_plane_offset_kcps =
Charles MacNeill 5:89031b2f5316 1004 pXC->algo__crosstalk_compensation_plane_offset_kcps;
Charles MacNeill 5:89031b2f5316 1005 }
Charles MacNeill 5:89031b2f5316 1006
Charles MacNeill 5:89031b2f5316 1007
Charles MacNeill 5:89031b2f5316 1008 pdev->xtalk_results.cal_status = status;
Charles MacNeill 5:89031b2f5316 1009 *pcal_status = pdev->xtalk_results.cal_status;
Charles MacNeill 5:89031b2f5316 1010
Charles MacNeill 5:89031b2f5316 1011
Charles MacNeill 5:89031b2f5316 1012 status = VL53LX_enable_xtalk_compensation(Dev);
Charles MacNeill 5:89031b2f5316 1013 if (smudge_corr_en == 1)
Charles MacNeill 5:89031b2f5316 1014 status = VL53LX_dynamic_xtalk_correction_enable(Dev);
Charles MacNeill 5:89031b2f5316 1015
Charles MacNeill 5:89031b2f5316 1016 #ifdef VL53LX_LOG_ENABLE
Charles MacNeill 5:89031b2f5316 1017
Charles MacNeill 5:89031b2f5316 1018
Charles MacNeill 5:89031b2f5316 1019
Charles MacNeill 5:89031b2f5316 1020 VL53LX_print_customer_nvm_managed(
Charles MacNeill 5:89031b2f5316 1021 &(pdev->customer),
Charles MacNeill 5:89031b2f5316 1022 "run_xtalk_extraction():pdev->lldata.customer.",
Charles MacNeill 5:89031b2f5316 1023 VL53LX_TRACE_MODULE_XTALK_DATA);
Charles MacNeill 5:89031b2f5316 1024
Charles MacNeill 5:89031b2f5316 1025 VL53LX_print_xtalk_config(
Charles MacNeill 5:89031b2f5316 1026 &(pdev->xtalk_cfg),
Charles MacNeill 5:89031b2f5316 1027 "run_xtalk_extraction():pdev->lldata.xtalk_cfg.",
Charles MacNeill 5:89031b2f5316 1028 VL53LX_TRACE_MODULE_XTALK_DATA);
Charles MacNeill 5:89031b2f5316 1029
Charles MacNeill 5:89031b2f5316 1030 VL53LX_print_xtalk_histogram_data(
Charles MacNeill 5:89031b2f5316 1031 &(pdev->xtalk_shapes),
Charles MacNeill 5:89031b2f5316 1032 "pdev->lldata.xtalk_shapes.",
Charles MacNeill 5:89031b2f5316 1033 VL53LX_TRACE_MODULE_XTALK_DATA);
Charles MacNeill 5:89031b2f5316 1034
Charles MacNeill 5:89031b2f5316 1035 #endif
Charles MacNeill 5:89031b2f5316 1036
Charles MacNeill 5:89031b2f5316 1037 LOG_FUNCTION_END(status);
Charles MacNeill 5:89031b2f5316 1038
Charles MacNeill 5:89031b2f5316 1039 return status;
Charles MacNeill 5:89031b2f5316 1040 }
Charles MacNeill 5:89031b2f5316 1041