Rename library

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   VL53L3CX_NoShield_1Sensor_poll_Mb06x VL53L3_NoShield_1Sensor_polling_Mb63 X_NUCLEO_53L3A2 53L3A2_Ranging

modules/vl53lx_core.h

Committer:
charlesmn
Date:
2021-07-21
Revision:
7:7f1bbf370283
Parent:
5:89031b2f5316

File content as of revision 7:7f1bbf370283:


/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
/******************************************************************************
 * Copyright (c) 2020, STMicroelectronics - All Rights Reserved

 This file is part of VL53LX and is dual licensed,
 either GPL-2.0+
 or 'BSD 3-clause "New" or "Revised" License' , at your option.
 ******************************************************************************
 */




#ifndef _VL53LX_CORE_H_
#define _VL53LX_CORE_H_

#include "vl53lx_platform.h"
#include "vl53lx_core_support.h"

#ifdef __cplusplus
extern "C" {
#endif




void VL53LX_init_version(
	VL53LX_DEV         Dev);




void VL53LX_init_ll_driver_state(
	VL53LX_DEV         Dev,
	VL53LX_DeviceState ll_state);




VL53LX_Error VL53LX_update_ll_driver_rd_state(
	VL53LX_DEV         Dev);




VL53LX_Error VL53LX_check_ll_driver_rd_state(
	VL53LX_DEV         Dev);




VL53LX_Error VL53LX_update_ll_driver_cfg_state(
	VL53LX_DEV         Dev);




void VL53LX_copy_rtn_good_spads_to_buffer(
	VL53LX_nvm_copy_data_t  *pdata,
	uint8_t                 *pbuffer);




void VL53LX_init_system_results(
	VL53LX_system_results_t      *pdata);




void V53L1_init_zone_results_structure(
	uint8_t                 active_zones,
	VL53LX_zone_results_t  *pdata);




void V53L1_init_zone_dss_configs(
	VL53LX_DEV              Dev);




void VL53LX_init_histogram_config_structure(
	uint8_t   even_bin0,
	uint8_t   even_bin1,
	uint8_t   even_bin2,
	uint8_t   even_bin3,
	uint8_t   even_bin4,
	uint8_t   even_bin5,
	uint8_t   odd_bin0,
	uint8_t   odd_bin1,
	uint8_t   odd_bin2,
	uint8_t   odd_bin3,
	uint8_t   odd_bin4,
	uint8_t   odd_bin5,
	VL53LX_histogram_config_t  *pdata);



void VL53LX_init_histogram_multizone_config_structure(
	uint8_t   even_bin0,
	uint8_t   even_bin1,
	uint8_t   even_bin2,
	uint8_t   even_bin3,
	uint8_t   even_bin4,
	uint8_t   even_bin5,
	uint8_t   odd_bin0,
	uint8_t   odd_bin1,
	uint8_t   odd_bin2,
	uint8_t   odd_bin3,
	uint8_t   odd_bin4,
	uint8_t   odd_bin5,
	VL53LX_histogram_config_t  *pdata);




void VL53LX_init_xtalk_bin_data_struct(
	uint32_t                        bin_value,
	uint16_t                        VL53LX_p_021,
	VL53LX_xtalk_histogram_shape_t *pdata);




void VL53LX_i2c_encode_uint16_t(
	uint16_t    ip_value,
	uint16_t    count,
	uint8_t    *pbuffer);




uint16_t VL53LX_i2c_decode_uint16_t(
	uint16_t    count,
	uint8_t    *pbuffer);




void VL53LX_i2c_encode_int16_t(
	int16_t     ip_value,
	uint16_t    count,
	uint8_t    *pbuffer);




int16_t VL53LX_i2c_decode_int16_t(
	uint16_t    count,
	uint8_t    *pbuffer);




void VL53LX_i2c_encode_uint32_t(
	uint32_t    ip_value,
	uint16_t    count,
	uint8_t    *pbuffer);




uint32_t VL53LX_i2c_decode_uint32_t(
	uint16_t    count,
	uint8_t    *pbuffer);




uint32_t VL53LX_i2c_decode_with_mask(
	uint16_t    count,
	uint8_t    *pbuffer,
	uint32_t    bit_mask,
	uint32_t    down_shift,
	uint32_t    offset);




void VL53LX_i2c_encode_int32_t(
	int32_t     ip_value,
	uint16_t    count,
	uint8_t    *pbuffer);




int32_t VL53LX_i2c_decode_int32_t(
	uint16_t    count,
	uint8_t    *pbuffer);




VL53LX_Error VL53LX_start_test(
	VL53LX_DEV     Dev,
	uint8_t        test_mode__ctrl);




VL53LX_Error VL53LX_set_firmware_enable_register(
	VL53LX_DEV         Dev,
	uint8_t            value);




VL53LX_Error VL53LX_enable_firmware(
	VL53LX_DEV         Dev);




VL53LX_Error VL53LX_disable_firmware(
	VL53LX_DEV         Dev);




VL53LX_Error VL53LX_set_powerforce_register(
	VL53LX_DEV         Dev,
	uint8_t            value);





VL53LX_Error VL53LX_enable_powerforce(
	VL53LX_DEV         Dev);



VL53LX_Error VL53LX_disable_powerforce(
	VL53LX_DEV         Dev);





VL53LX_Error VL53LX_clear_interrupt(
	VL53LX_DEV         Dev);





VL53LX_Error VL53LX_force_shadow_stream_count_to_zero(
	VL53LX_DEV         Dev);




uint32_t VL53LX_calc_macro_period_us(
	uint16_t fast_osc_frequency,
	uint8_t  VL53LX_p_005);




uint16_t VL53LX_calc_range_ignore_threshold(
	uint32_t central_rate,
	int16_t  x_gradient,
	int16_t  y_gradient,
	uint8_t  rate_mult);




uint32_t VL53LX_calc_timeout_mclks(
	uint32_t  timeout_us,
	uint32_t  macro_period_us);



uint16_t VL53LX_calc_encoded_timeout(
	uint32_t  timeout_us,
	uint32_t  macro_period_us);




uint32_t VL53LX_calc_timeout_us(
	uint32_t  timeout_mclks,
	uint32_t  macro_period_us);



uint32_t VL53LX_calc_decoded_timeout_us(
	uint16_t  timeout_encoded,
	uint32_t  macro_period_us);




uint16_t VL53LX_encode_timeout(
	uint32_t timeout_mclks);




uint32_t VL53LX_decode_timeout(
	uint16_t encoded_timeout);




VL53LX_Error  VL53LX_calc_timeout_register_values(
	uint32_t                 phasecal_config_timeout_us,
	uint32_t                 mm_config_timeout_us,
	uint32_t                 range_config_timeout_us,
	uint16_t                 fast_osc_frequency,
	VL53LX_general_config_t *pgeneral,
	VL53LX_timing_config_t  *ptiming);




uint8_t VL53LX_encode_vcsel_period(
	uint8_t VL53LX_p_030);




uint32_t VL53LX_decode_unsigned_integer(
	uint8_t  *pbuffer,
	uint8_t   no_of_bytes);




void   VL53LX_encode_unsigned_integer(
	uint32_t  ip_value,
	uint8_t   no_of_bytes,
	uint8_t  *pbuffer);




VL53LX_Error VL53LX_hist_copy_and_scale_ambient_info(
	VL53LX_zone_hist_info_t        *pidata,
	VL53LX_histogram_bin_data_t    *podata);




void  VL53LX_hist_get_bin_sequence_config(
	VL53LX_DEV                     Dev,
	VL53LX_histogram_bin_data_t   *pdata);




VL53LX_Error  VL53LX_hist_phase_consistency_check(
	VL53LX_DEV                   Dev,
	VL53LX_zone_hist_info_t     *phist_prev,
	VL53LX_zone_objects_t       *prange_prev,
	VL53LX_range_results_t      *prange_curr);







VL53LX_Error  VL53LX_hist_events_consistency_check(
	uint8_t                      event_sigma,
	uint16_t                     min_effective_spad_count,
	VL53LX_zone_hist_info_t     *phist_prev,
	VL53LX_object_data_t        *prange_prev,
	VL53LX_range_data_t         *prange_curr,
	int32_t                     *pevents_tolerance,
	int32_t                     *pevents_delta,
	VL53LX_DeviceError          *prange_status);







VL53LX_Error  VL53LX_hist_merged_pulse_check(
	int16_t                      min_max_tolerance_mm,
	VL53LX_range_data_t         *pdata,
	VL53LX_DeviceError          *prange_status);






VL53LX_Error  VL53LX_hist_xmonitor_consistency_check(
	VL53LX_DEV                   Dev,
	VL53LX_zone_hist_info_t     *phist_prev,
	VL53LX_zone_objects_t       *prange_prev,
	VL53LX_range_data_t         *prange_curr);






VL53LX_Error  VL53LX_hist_wrap_dmax(
	VL53LX_hist_post_process_config_t *phistpostprocess,
	VL53LX_histogram_bin_data_t       *pcurrent,
	int16_t                           *pwrap_dmax_mm);




void VL53LX_hist_combine_mm1_mm2_offsets(
	int16_t                              mm1_offset_mm,
	int16_t                              mm2_offset_mm,
	uint8_t                              encoded_mm_roi_centre,
	uint8_t                              encoded_mm_roi_size,
	uint8_t                              encoded_zone_centre,
	uint8_t                              encoded_zone_size,
	VL53LX_additional_offset_cal_data_t *pcal_data,
	uint8_t                             *pgood_spads,
	uint16_t                             aperture_attenuation,
	int16_t                             *prange_offset_mm);




VL53LX_Error VL53LX_hist_xtalk_extract_calc_window(
	int16_t                             target_distance_mm,
	uint16_t                            target_width_oversize,
	VL53LX_histogram_bin_data_t        *phist_bins,
	VL53LX_hist_xtalk_extract_data_t   *pxtalk_data);




VL53LX_Error VL53LX_hist_xtalk_extract_calc_event_sums(
	VL53LX_histogram_bin_data_t        *phist_bins,
	VL53LX_hist_xtalk_extract_data_t   *pxtalk_data);




VL53LX_Error VL53LX_hist_xtalk_extract_calc_rate_per_spad(
	VL53LX_hist_xtalk_extract_data_t   *pxtalk_data);



VL53LX_Error VL53LX_hist_xtalk_extract_calc_shape(
	VL53LX_hist_xtalk_extract_data_t  *pxtalk_data,
	VL53LX_xtalk_histogram_shape_t    *pxtalk_shape);



VL53LX_Error VL53LX_hist_xtalk_shape_model(
	uint16_t                         events_per_bin,
	uint16_t                         pulse_centre,
	uint16_t                         pulse_width,
	VL53LX_xtalk_histogram_shape_t  *pxtalk_shape);




uint16_t VL53LX_hist_xtalk_shape_model_interp(
	uint16_t      events_per_bin,
	uint32_t      phase_delta);




void VL53LX_spad_number_to_byte_bit_index(
	uint8_t  spad_number,
	uint8_t *pbyte_index,
	uint8_t *pbit_index,
	uint8_t *pbit_mask);




void VL53LX_encode_row_col(
	uint8_t  row,
	uint8_t  col,
	uint8_t *pspad_number);




void VL53LX_decode_zone_size(
	uint8_t   encoded_xy_size,
	uint8_t  *pwidth,
	uint8_t  *pheight);




void VL53LX_encode_zone_size(
	uint8_t  width,
	uint8_t  height,
	uint8_t *pencoded_xy_size);




void VL53LX_decode_zone_limits(
	uint8_t   encoded_xy_centre,
	uint8_t   encoded_xy_size,
	int16_t  *px_ll,
	int16_t  *py_ll,
	int16_t  *px_ur,
	int16_t  *py_ur);




uint8_t VL53LX_is_aperture_location(
	uint8_t   row,
	uint8_t   col);




void VL53LX_calc_max_effective_spads(
	uint8_t     encoded_zone_centre,
	uint8_t     encoded_zone_size,
	uint8_t    *pgood_spads,
	uint16_t    aperture_attenuation,
	uint16_t   *pmax_effective_spads);




void VL53LX_calc_mm_effective_spads(
	uint8_t     encoded_mm_roi_centre,
	uint8_t     encoded_mm_roi_size,
	uint8_t     encoded_zone_centre,
	uint8_t     encoded_zone_size,
	uint8_t    *pgood_spads,
	uint16_t    aperture_attenuation,
	uint16_t   *pmm_inner_effective_spads,
	uint16_t   *pmm_outer_effective_spads);




void VL53LX_hist_copy_results_to_sys_and_core(
	VL53LX_histogram_bin_data_t      *pbins,
	VL53LX_range_results_t           *phist,
	VL53LX_system_results_t          *psys,
	VL53LX_core_results_t            *pcore);




VL53LX_Error VL53LX_sum_histogram_data(
		VL53LX_histogram_bin_data_t *phist_input,
		VL53LX_histogram_bin_data_t *phist_output);




VL53LX_Error VL53LX_avg_histogram_data(
		uint8_t no_of_samples,
		VL53LX_histogram_bin_data_t *phist_sum,
		VL53LX_histogram_bin_data_t *phist_avg);




VL53LX_Error VL53LX_save_cfg_data(
	VL53LX_DEV  Dev);




VL53LX_Error VL53LX_dynamic_zone_update(
	VL53LX_DEV  Dev,
	VL53LX_range_results_t *presults);




VL53LX_Error VL53LX_update_internal_stream_counters(
	VL53LX_DEV  Dev,
	uint8_t     external_stream_count,
	uint8_t     *pinternal_stream_count,
	uint8_t     *pinternal_stream_count_val
	);



VL53LX_Error VL53LX_multizone_hist_bins_update(
	VL53LX_DEV  Dev);



VL53LX_Error VL53LX_set_histogram_multizone_initial_bin_config(
	VL53LX_zone_config_t           *pzone_cfg,
	VL53LX_histogram_config_t      *phist_cfg,
	VL53LX_histogram_config_t      *pmulti_hist
	);



uint8_t	VL53LX_encode_GPIO_interrupt_config(
	VL53LX_GPIO_interrupt_config_t	*pintconf);



VL53LX_GPIO_interrupt_config_t VL53LX_decode_GPIO_interrupt_config(
	uint8_t		system__interrupt_config);



VL53LX_Error VL53LX_set_GPIO_distance_threshold(
	VL53LX_DEV                      Dev,
	uint16_t			threshold_high,
	uint16_t			threshold_low);



VL53LX_Error VL53LX_set_GPIO_rate_threshold(
	VL53LX_DEV                      Dev,
	uint16_t			threshold_high,
	uint16_t			threshold_low);



VL53LX_Error VL53LX_set_GPIO_thresholds_from_struct(
	VL53LX_DEV                      Dev,
	VL53LX_GPIO_interrupt_config_t *pintconf);





VL53LX_Error VL53LX_set_ref_spad_char_config(
	VL53LX_DEV    Dev,
	uint8_t       vcsel_period_a,
	uint32_t      phasecal_timeout_us,
	uint16_t      total_rate_target_mcps,
	uint16_t      max_count_rate_rtn_limit_mcps,
	uint16_t      min_count_rate_rtn_limit_mcps,
	uint16_t      fast_osc_frequency);




VL53LX_Error VL53LX_set_ssc_config(
	VL53LX_DEV           Dev,
	VL53LX_ssc_config_t *pssc_cfg,
	uint16_t             fast_osc_frequency);




VL53LX_Error VL53LX_get_spad_rate_data(
	VL53LX_DEV                Dev,
	VL53LX_spad_rate_data_t  *pspad_rates);



uint32_t VL53LX_calc_crosstalk_plane_offset_with_margin(
		uint32_t     plane_offset_kcps,
		int16_t      margin_offset_kcps);



VL53LX_Error VL53LX_low_power_auto_data_init(
	VL53LX_DEV                     Dev
	);



VL53LX_Error VL53LX_low_power_auto_data_stop_range(
	VL53LX_DEV                     Dev
	);




VL53LX_Error VL53LX_dynamic_xtalk_correction_calc_required_samples(
	VL53LX_DEV                     Dev
	);



VL53LX_Error VL53LX_dynamic_xtalk_correction_calc_new_xtalk(
	VL53LX_DEV				Dev,
	uint32_t				xtalk_offset_out,
	VL53LX_smudge_corrector_config_t	*pconfig,
	VL53LX_smudge_corrector_data_t		*pout,
	uint8_t					add_smudge,
	uint8_t					soft_update
	);



VL53LX_Error VL53LX_dynamic_xtalk_correction_corrector(
	VL53LX_DEV                     Dev
	);



VL53LX_Error VL53LX_dynamic_xtalk_correction_data_init(
	VL53LX_DEV                     Dev
	);



VL53LX_Error VL53LX_dynamic_xtalk_correction_output_init(
	VL53LX_LLDriverResults_t *pres
	);



VL53LX_Error VL53LX_xtalk_cal_data_init(
	VL53LX_DEV                          Dev
	);



VL53LX_Error VL53LX_config_low_power_auto_mode(
	VL53LX_general_config_t   *pgeneral,
	VL53LX_dynamic_config_t   *pdynamic,
	VL53LX_low_power_auto_data_t *plpadata
	);



VL53LX_Error VL53LX_low_power_auto_setup_manual_calibration(
	VL53LX_DEV        Dev);



VL53LX_Error VL53LX_low_power_auto_update_DSS(
	VL53LX_DEV        Dev);


VL53LX_Error VL53LX_compute_histo_merge_nb(
	VL53LX_DEV        Dev,	uint8_t *histo_merge_nb);

#ifdef __cplusplus
}
#endif

#endif