Rename library

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   VL53L3CX_NoShield_1Sensor_poll_Mb06x VL53L3_NoShield_1Sensor_polling_Mb63 X_NUCLEO_53L3A2 53L3A2_Ranging

Committer:
Charles MacNeill
Date:
Wed Jul 14 12:45:49 2021 +0100
Revision:
5:89031b2f5316
The class files now just are wrappers for the files in the "MODULES" directory.The porting directory includes the mbed interface

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Charles MacNeill 5:89031b2f5316 1
Charles MacNeill 5:89031b2f5316 2 // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
Charles MacNeill 5:89031b2f5316 3 /******************************************************************************
Charles MacNeill 5:89031b2f5316 4 * Copyright (c) 2020, STMicroelectronics - All Rights Reserved
Charles MacNeill 5:89031b2f5316 5
Charles MacNeill 5:89031b2f5316 6 This file is part of VL53LX and is dual licensed,
Charles MacNeill 5:89031b2f5316 7 either GPL-2.0+
Charles MacNeill 5:89031b2f5316 8 or 'BSD 3-clause "New" or "Revised" License' , at your option.
Charles MacNeill 5:89031b2f5316 9 ******************************************************************************
Charles MacNeill 5:89031b2f5316 10 */
Charles MacNeill 5:89031b2f5316 11
Charles MacNeill 5:89031b2f5316 12
Charles MacNeill 5:89031b2f5316 13
Charles MacNeill 5:89031b2f5316 14
Charles MacNeill 5:89031b2f5316 15
Charles MacNeill 5:89031b2f5316 16 #include "vl53lx_platform.h"
Charles MacNeill 5:89031b2f5316 17 #include "vl53lx_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