17 #ifndef VL53L5CX_API_H_
18 #define VL53L5CX_API_H_
20 #if defined (__ARMCC_VERSION) && (__ARMCC_VERSION < 6010050)
32 #define VL53L5CX_API_REVISION "VL53L5CX_1.3.10"
39 #define VL53L5CX_DEFAULT_I2C_ADDRESS ((uint16_t)0x52)
47 #define VL53L5CX_RESOLUTION_4X4 ((uint8_t) 16U)
48 #define VL53L5CX_RESOLUTION_8X8 ((uint8_t) 64U)
56 #define VL53L5CX_TARGET_ORDER_CLOSEST ((uint8_t) 1U)
57 #define VL53L5CX_TARGET_ORDER_STRONGEST ((uint8_t) 2U)
66 #define VL53L5CX_RANGING_MODE_CONTINUOUS ((uint8_t) 1U)
67 #define VL53L5CX_RANGING_MODE_AUTONOMOUS ((uint8_t) 3U)
76 #define VL53L5CX_POWER_MODE_SLEEP ((uint8_t) 0U)
77 #define VL53L5CX_POWER_MODE_WAKEUP ((uint8_t) 1U)
85 #define VL53L5CX_STATUS_OK ((uint8_t) 0U)
86 #define VL53L5CX_STATUS_TIMEOUT_ERROR ((uint8_t) 1U)
87 #define VL53L5CX_STATUS_CORRUPTED_FRAME ((uint8_t) 2U)
88 #define VL53L5CX_STATUS_CRC_CSUM_FAILED ((uint8_t) 3U)
89 #define VL53L5CX_STATUS_XTALK_FAILED ((uint8_t) 4U)
90 #define VL53L5CX_MCU_ERROR ((uint8_t) 66U)
91 #define VL53L5CX_STATUS_INVALID_PARAM ((uint8_t) 127U)
92 #define VL53L5CX_STATUS_ERROR ((uint8_t) 255U)
98 #if VL53L5CX_NB_TARGET_PER_ZONE == 1
100 #define VL53L5CX_START_BH ((uint32_t)0x0000000DU)
101 #define VL53L5CX_METADATA_BH ((uint32_t)0x54B400C0U)
102 #define VL53L5CX_COMMONDATA_BH ((uint32_t)0x54C00040U)
103 #define VL53L5CX_AMBIENT_RATE_BH ((uint32_t)0x54D00104U)
104 #define VL53L5CX_SPAD_COUNT_BH ((uint32_t)0x55D00404U)
105 #define VL53L5CX_NB_TARGET_DETECTED_BH ((uint32_t)0xDB840401U)
106 #define VL53L5CX_SIGNAL_RATE_BH ((uint32_t)0xDBC40404U)
107 #define VL53L5CX_RANGE_SIGMA_MM_BH ((uint32_t)0xDEC40402U)
108 #define VL53L5CX_DISTANCE_BH ((uint32_t)0xDF440402U)
109 #define VL53L5CX_REFLECTANCE_BH ((uint32_t)0xE0440401U)
110 #define VL53L5CX_TARGET_STATUS_BH ((uint32_t)0xE0840401U)
111 #define VL53L5CX_MOTION_DETECT_BH ((uint32_t)0xD85808C0U)
113 #define VL53L5CX_METADATA_IDX ((uint16_t)0x54B4U)
114 #define VL53L5CX_SPAD_COUNT_IDX ((uint16_t)0x55D0U)
115 #define VL53L5CX_AMBIENT_RATE_IDX ((uint16_t)0x54D0U)
116 #define VL53L5CX_NB_TARGET_DETECTED_IDX ((uint16_t)0xDB84U)
117 #define VL53L5CX_SIGNAL_RATE_IDX ((uint16_t)0xDBC4U)
118 #define VL53L5CX_RANGE_SIGMA_MM_IDX ((uint16_t)0xDEC4U)
119 #define VL53L5CX_DISTANCE_IDX ((uint16_t)0xDF44U)
120 #define VL53L5CX_REFLECTANCE_EST_PC_IDX ((uint16_t)0xE044U)
121 #define VL53L5CX_TARGET_STATUS_IDX ((uint16_t)0xE084U)
122 #define VL53L5CX_MOTION_DETEC_IDX ((uint16_t)0xD858U)
125 #define VL53L5CX_START_BH ((uint32_t)0x0000000DU)
126 #define VL53L5CX_METADATA_BH ((uint32_t)0x54B400C0U)
127 #define VL53L5CX_COMMONDATA_BH ((uint32_t)0x54C00040U)
128 #define VL53L5CX_AMBIENT_RATE_BH ((uint32_t)0x54D00104U)
129 #define VL53L5CX_NB_TARGET_DETECTED_BH ((uint32_t)0x57D00401U)
130 #define VL53L5CX_SPAD_COUNT_BH ((uint32_t)0x55D00404U)
131 #define VL53L5CX_SIGNAL_RATE_BH ((uint32_t)0x58900404U)
132 #define VL53L5CX_RANGE_SIGMA_MM_BH ((uint32_t)0x64900402U)
133 #define VL53L5CX_DISTANCE_BH ((uint32_t)0x66900402U)
134 #define VL53L5CX_REFLECTANCE_BH ((uint32_t)0x6A900401U)
135 #define VL53L5CX_TARGET_STATUS_BH ((uint32_t)0x6B900401U)
136 #define VL53L5CX_MOTION_DETECT_BH ((uint32_t)0xCC5008C0U)
138 #define VL53L5CX_METADATA_IDX ((uint16_t)0x54B4U)
139 #define VL53L5CX_SPAD_COUNT_IDX ((uint16_t)0x55D0U)
140 #define VL53L5CX_AMBIENT_RATE_IDX ((uint16_t)0x54D0U)
141 #define VL53L5CX_NB_TARGET_DETECTED_IDX ((uint16_t)0x57D0U)
142 #define VL53L5CX_SIGNAL_RATE_IDX ((uint16_t)0x5890U)
143 #define VL53L5CX_RANGE_SIGMA_MM_IDX ((uint16_t)0x6490U)
144 #define VL53L5CX_DISTANCE_IDX ((uint16_t)0x6690U)
145 #define VL53L5CX_REFLECTANCE_EST_PC_IDX ((uint16_t)0x6A90U)
146 #define VL53L5CX_TARGET_STATUS_IDX ((uint16_t)0x6B90U)
147 #define VL53L5CX_MOTION_DETEC_IDX ((uint16_t)0xCC50U)
155 #define VL53L5CX_NVM_DATA_SIZE ((uint16_t)492U)
156 #define VL53L5CX_CONFIGURATION_SIZE ((uint16_t)972U)
157 #define VL53L5CX_OFFSET_BUFFER_SIZE ((uint16_t)488U)
158 #define VL53L5CX_XTALK_BUFFER_SIZE ((uint16_t)776U)
160 #define VL53L5CX_DCI_ZONE_CONFIG ((uint16_t)0x5450U)
161 #define VL53L5CX_DCI_FREQ_HZ ((uint16_t)0x5458U)
162 #define VL53L5CX_DCI_INT_TIME ((uint16_t)0x545CU)
163 #define VL53L5CX_DCI_FW_NB_TARGET ((uint16_t)0x5478)
164 #define VL53L5CX_DCI_RANGING_MODE ((uint16_t)0xAD30U)
165 #define VL53L5CX_DCI_DSS_CONFIG ((uint16_t)0xAD38U)
166 #define VL53L5CX_DCI_TARGET_ORDER ((uint16_t)0xAE64U)
167 #define VL53L5CX_DCI_SHARPENER ((uint16_t)0xAED8U)
168 #define VL53L5CX_DCI_INTERNAL_CP ((uint16_t)0xB39CU)
169 #define VL53L5CX_DCI_SYNC_PIN ((uint16_t)0xB5F0U)
170 #define VL53L5CX_DCI_MOTION_DETECTOR_CFG ((uint16_t)0xBFACU)
171 #define VL53L5CX_DCI_SINGLE_RANGE ((uint16_t)0xD964U)
172 #define VL53L5CX_DCI_OUTPUT_CONFIG ((uint16_t)0xD968U)
173 #define VL53L5CX_DCI_OUTPUT_ENABLES ((uint16_t)0xD970U)
174 #define VL53L5CX_DCI_OUTPUT_LIST ((uint16_t)0xD980U)
175 #define VL53L5CX_DCI_PIPE_CONTROL ((uint16_t)0xDB80U)
176 #define VL53L5CX_GLARE_FILTER ((uint16_t)0xE108U)
179 #define VL53L5CX_UI_CMD_STATUS ((uint16_t)0x2C00U)
180 #define VL53L5CX_UI_CMD_START ((uint16_t)0x2C04U)
181 #define VL53L5CX_UI_CMD_END ((uint16_t)0x2FFFU)
187 #ifndef VL53L5CX_DISABLE_AMBIENT_PER_SPAD
188 #define L5CX_AMB_SIZE 260U
190 #define L5CX_AMB_SIZE 0U
193 #ifndef VL53L5CX_DISABLE_NB_SPADS_ENABLED
194 #define L5CX_SPAD_SIZE 260U
196 #define L5CX_SPAD_SIZE 0U
199 #ifndef VL53L5CX_DISABLE_NB_TARGET_DETECTED
200 #define L5CX_NTAR_SIZE 68U
202 #define L5CX_NTAR_SIZE 0U
205 #ifndef VL53L5CX_DISABLE_SIGNAL_PER_SPAD
206 #define L5CX_SPS_SIZE ((256U * VL53L5CX_NB_TARGET_PER_ZONE) + 4U)
208 #define L5CX_SPS_SIZE 0U
211 #ifndef VL53L5CX_DISABLE_RANGE_SIGMA_MM
212 #define L5CX_SIGR_SIZE ((128U * VL53L5CX_NB_TARGET_PER_ZONE) + 4U)
214 #define L5CX_SIGR_SIZE 0U
217 #ifndef VL53L5CX_DISABLE_DISTANCE_MM
218 #define L5CX_DIST_SIZE ((128U * VL53L5CX_NB_TARGET_PER_ZONE) + 4U)
220 #define L5CX_DIST_SIZE 0U
223 #ifndef VL53L5CX_DISABLE_REFLECTANCE_PERCENT
224 #define L5CX_RFLEST_SIZE ((64U *VL53L5CX_NB_TARGET_PER_ZONE) + 4U)
226 #define L5CX_RFLEST_SIZE 0U
229 #ifndef VL53L5CX_DISABLE_TARGET_STATUS
230 #define L5CX_STA_SIZE ((64U *VL53L5CX_NB_TARGET_PER_ZONE) + 4U)
232 #define L5CX_STA_SIZE 0U
235 #ifndef VL53L5CX_DISABLE_MOTION_INDICATOR
236 #define L5CX_MOT_SIZE 144U
238 #define L5CX_MOT_SIZE 0U
247 #define VL53L5CX_MAX_RESULTS_SIZE ( 40U \
248 + L5CX_AMB_SIZE + L5CX_SPAD_SIZE + L5CX_NTAR_SIZE + L5CX_SPS_SIZE \
249 + L5CX_SIGR_SIZE + L5CX_DIST_SIZE + L5CX_RFLEST_SIZE + L5CX_STA_SIZE \
250 + L5CX_MOT_SIZE + 20U)
258 #if VL53L5CX_MAX_RESULTS_SIZE < 1024U
259 #define VL53L5CX_TEMPORARY_BUFFER_SIZE ((uint32_t) 1024U)
261 #define VL53L5CX_TEMPORARY_BUFFER_SIZE ((uint32_t) VL53L5CX_MAX_RESULTS_SIZE)
310 #ifndef VL53L5CX_DISABLE_AMBIENT_PER_SPAD
315 #ifndef VL53L5CX_DISABLE_NB_TARGET_DETECTED
320 #ifndef VL53L5CX_DISABLE_NB_SPADS_ENABLED
325 #ifndef VL53L5CX_DISABLE_SIGNAL_PER_SPAD
331 #ifndef VL53L5CX_DISABLE_RANGE_SIGMA_MM
337 #ifndef VL53L5CX_DISABLE_DISTANCE_MM
343 #ifndef VL53L5CX_DISABLE_REFLECTANCE_PERCENT
349 #ifndef VL53L5CX_DISABLE_TARGET_STATUS
355 #ifndef VL53L5CX_DISABLE_MOTION_INDICATOR
361 uint8_t nb_of_detected_aggregates;
unsigned short uint16_t
Typedef defining 16 bit unsigned short type.
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.
short int16_t
Typedef defining 16 bit short type.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.
signed char int8_t
Typedef defining 8 bit char type.
uint8_t vl53l5cx_get_power_mode(VL53L5CX_Configuration *p_dev, uint8_t *p_power_mode)
This function is used to get the current sensor power mode.
uint8_t vl53l5cx_dci_read_data(VL53L5CX_Configuration *p_dev, uint8_t *data, uint32_t index, uint16_t data_size)
This function can be used to read 'extra data' from DCI.
#define VL53L5CX_XTALK_BUFFER_SIZE
uint8_t vl53l5cx_set_i2c_address(VL53L5CX_Configuration *p_dev, uint16_t i2c_address)
This function is used to change the I2C address of the sensor.
uint8_t vl53l5cx_disable_internal_cp(VL53L5CX_Configuration *p_dev)
This function is used to disable the VCSEL charge pump This optimizes the power consumption of the de...
uint8_t vl53l5cx_set_ranging_frequency_hz(VL53L5CX_Configuration *p_dev, uint8_t frequency_hz)
This function sets a new ranging frequency in Hz.
uint8_t vl53l5cx_get_ranging_mode(VL53L5CX_Configuration *p_dev, uint8_t *p_ranging_mode)
This function is used to get the ranging mode.
uint8_t vl53l5cx_get_sharpener_percent(VL53L5CX_Configuration *p_dev, uint8_t *p_sharpener_percent)
This function gets the current sharpener in percent.
#define VL53L5CX_TEMPORARY_BUFFER_SIZE
Macro VL53L5CX_TEMPORARY_BUFFER_SIZE can be used to know the size of the temporary buffer.
uint8_t vl53l5cx_is_alive(VL53L5CX_Configuration *p_dev, uint8_t *p_is_alive)
uint8_t vl53l5cx_set_power_mode(VL53L5CX_Configuration *p_dev, uint8_t power_mode)
This function is used to set the sensor in Low Power mode, for example if the sensor is not used duri...
uint8_t vl53l5cx_set_integration_time_ms(VL53L5CX_Configuration *p_dev, uint32_t integration_time_ms)
This function sets a new integration time in ms.
uint8_t vl53l5cx_dci_replace_data(VL53L5CX_Configuration *p_dev, uint8_t *data, uint32_t index, uint16_t data_size, uint8_t *new_data, uint16_t new_data_size, uint16_t new_data_pos)
This function can be used to replace 'extra data' in DCI.
uint8_t vl53l5cx_get_integration_time_ms(VL53L5CX_Configuration *p_dev, uint32_t *p_time_ms)
This function gets the current integration time in ms.
uint8_t vl53l5cx_get_ranging_data(VL53L5CX_Configuration *p_dev, VL53L5CX_ResultsData *p_results)
This function gets the ranging data, using the selected output and the resolution.
#define VL53L5CX_RESOLUTION_8X8
uint8_t vl53l5cx_init(VL53L5CX_Configuration *p_dev)
Mandatory function used to initialize the sensor.
uint8_t * default_configuration
uint8_t vl53l5cx_start_ranging(VL53L5CX_Configuration *p_dev)
This function starts a ranging session.
VL53L5CX_Platform platform
uint8_t vl53l5cx_check_data_ready(VL53L5CX_Configuration *p_dev, uint8_t *p_isReady)
This function checks if a new data is ready by polling I2C.
uint8_t vl53l5cx_set_target_order(VL53L5CX_Configuration *p_dev, uint8_t target_order)
This function sets a new target order.
uint8_t vl53l5cx_set_ranging_mode(VL53L5CX_Configuration *p_dev, uint8_t ranging_mode)
This function is used to set the ranging mode.
uint8_t is_auto_stop_enabled
uint8_t vl53l5cx_get_ranging_frequency_hz(VL53L5CX_Configuration *p_dev, uint8_t *p_frequency_hz)
This function gets the current ranging frequency in Hz.
uint8_t vl53l5cx_get_resolution(VL53L5CX_Configuration *p_dev, uint8_t *p_resolution)
This function gets the current resolution (4x4 or 8x8).
uint8_t vl53l5cx_dci_write_data(VL53L5CX_Configuration *p_dev, uint8_t *data, uint32_t index, uint16_t data_size)
This function can be used to write 'extra data' to DCI.
uint8_t vl53l5cx_set_resolution(VL53L5CX_Configuration *p_dev, uint8_t resolution)
This function sets a new resolution (4x4 or 8x8).
#define VL53L5CX_OFFSET_BUFFER_SIZE
uint8_t vl53l5cx_stop_ranging(VL53L5CX_Configuration *p_dev)
This function stops the ranging session.
uint8_t vl53l5cx_set_sharpener_percent(VL53L5CX_Configuration *p_dev, uint8_t sharpener_percent)
This function sets a new sharpener value in percent.
uint8_t vl53l5cx_enable_internal_cp(VL53L5CX_Configuration *p_dev)
This function is used to disable the VCSEL charge pump This optimizes the power consumption of the de...
uint8_t vl53l5cx_get_target_order(VL53L5CX_Configuration *p_dev, uint8_t *p_target_order)
This function gets the current target order (closest or strongest).
Structure VL53L5CX_Configuration contains the sensor configuration.
Structure VL53L5CX_ResultsData contains the ranging results of VL53L5CX.