28#ifndef LIGHTRANGER13_H
29#define LIGHTRANGER13_H
39#ifdef PREINIT_SUPPORTED
43#ifdef MikroCCoreVersion
44 #if MikroCCoreVersion >= 1
49#include "drv_digital_out.h"
50#include "drv_digital_in.h"
51#include "drv_i2c_master.h"
73#define LIGHTRANGER13_REG_APPID 0x00
74#define LIGHTRANGER13_REG_APPREV_MAJOR 0x01
75#define LIGHTRANGER13_REG_APPREQID 0x02
76#define LIGHTRANGER13_REG_ENABLE 0xE0
77#define LIGHTRANGER13_REG_INT_STATUS 0xE1
78#define LIGHTRANGER13_REG_INT_ENAB 0xE2
79#define LIGHTRANGER13_REG_ID 0xE3
80#define LIGHTRANGER13_REG_REVID 0xE4
86#define LIGHTRANGER13_REG_APP0_CMD_DATA_9 0x06
87#define LIGHTRANGER13_REG_APP0_CMD_DATA_8 0x07
88#define LIGHTRANGER13_REG_APP0_CMD_DATA_7 0x08
89#define LIGHTRANGER13_REG_APP0_CMD_DATA_6 0x09
90#define LIGHTRANGER13_REG_APP0_CMD_DATA_5 0x0A
91#define LIGHTRANGER13_REG_APP0_CMD_DATA_4 0x0B
92#define LIGHTRANGER13_REG_APP0_CMD_DATA_3 0x0C
93#define LIGHTRANGER13_REG_APP0_CMD_DATA_2 0x0D
94#define LIGHTRANGER13_REG_APP0_CMD_DATA_1 0x0E
95#define LIGHTRANGER13_REG_APP0_CMD_DATA_0 0x0F
96#define LIGHTRANGER13_REG_APP0_CMD 0x10
97#define LIGHTRANGER13_REG_APP0_PREVIOUS 0x11
98#define LIGHTRANGER13_REG_APP0_APPREV_MINOR 0x12
99#define LIGHTRANGER13_REG_APP0_APPREV_PATCH 0x13
100#define LIGHTRANGER13_REG_APP0_STATE 0x1C
101#define LIGHTRANGER13_REG_APP0_STATUS 0x1D
102#define LIGHTRANGER13_REG_APP0_REGISTER_CONTENTS 0x1E
103#define LIGHTRANGER13_REG_APP0_TID 0x1F
109#define LIGHTRANGER13_REG_APP0_ODR_RESULT_NUMBER 0x20
110#define LIGHTRANGER13_REG_APP0_ODR_RESULT_INFO 0x21
111#define LIGHTRANGER13_REG_APP0_ODR_DISTANCE_PEAK_0 0x22
112#define LIGHTRANGER13_REG_APP0_ODR_DISTANCE_PEAK_1 0x23
113#define LIGHTRANGER13_REG_APP0_ODR_SYS_CLOCK_0 0x24
114#define LIGHTRANGER13_REG_APP0_ODR_SYS_CLOCK_1 0x25
115#define LIGHTRANGER13_REG_APP0_ODR_SYS_CLOCK_2 0x26
116#define LIGHTRANGER13_REG_APP0_ODR_SYS_CLOCK_3 0x27
117#define LIGHTRANGER13_REG_APP0_ODR_STATE_DATA_0 0x28
118#define LIGHTRANGER13_REG_APP0_ODR_STATE_DATA_1 0x29
119#define LIGHTRANGER13_REG_APP0_ODR_STATE_DATA_2 0x2A
120#define LIGHTRANGER13_REG_APP0_ODR_STATE_DATA_3 0x2B
121#define LIGHTRANGER13_REG_APP0_ODR_STATE_DATA_4 0x2C
122#define LIGHTRANGER13_REG_APP0_ODR_STATE_DATA_5 0x2D
123#define LIGHTRANGER13_REG_APP0_ODR_STATE_DATA_6 0x2E
124#define LIGHTRANGER13_REG_APP0_ODR_STATE_DATA_7 0x2F
125#define LIGHTRANGER13_REG_APP0_ODR_STATE_DATA_8 0x30
126#define LIGHTRANGER13_REG_APP0_ODR_STATE_DATA_9 0x31
127#define LIGHTRANGER13_REG_APP0_ODR_STATE_DATA_10 0x32
128#define LIGHTRANGER13_REG_APP0_ODR_TEMPERATURE 0x33
129#define LIGHTRANGER13_REG_APP0_ODR_REFERENCE_HITS_0 0x34
130#define LIGHTRANGER13_REG_APP0_ODR_REFERENCE_HITS_1 0x35
131#define LIGHTRANGER13_REG_APP0_ODR_REFERENCE_HITS_2 0x36
132#define LIGHTRANGER13_REG_APP0_ODR_REFERENCE_HITS_3 0x37
133#define LIGHTRANGER13_REG_APP0_ODR_OBJECT_HITS_0 0x38
134#define LIGHTRANGER13_REG_APP0_ODR_OBJECT_HITS_1 0x39
135#define LIGHTRANGER13_REG_APP0_ODR_OBJECT_HITS_2 0x3A
136#define LIGHTRANGER13_REG_APP0_ODR_OBJECT_HITS_3 0x3B
137#define LIGHTRANGER13_REG_APP0_ODR_XTALK_MSB 0x3C
138#define LIGHTRANGER13_REG_APP0_ODR_XTALK_LSB 0x3D
144#define LIGHTRANGER13_REG_APP0_CAD_FACTORY_CALIB_0 0x20
145#define LIGHTRANGER13_REG_APP0_CAD_FACTORY_CALIB_1 0x21
146#define LIGHTRANGER13_REG_APP0_CAD_FACTORY_CALIB_2 0x22
147#define LIGHTRANGER13_REG_APP0_CAD_FACTORY_CALIB_3 0x23
148#define LIGHTRANGER13_REG_APP0_CAD_FACTORY_CALIB_4 0x24
149#define LIGHTRANGER13_REG_APP0_CAD_FACTORY_CALIB_5 0x25
150#define LIGHTRANGER13_REG_APP0_CAD_FACTORY_CALIB_6 0x26
151#define LIGHTRANGER13_REG_APP0_CAD_FACTORY_CALIB_7 0x27
152#define LIGHTRANGER13_REG_APP0_CAD_FACTORY_CALIB_8 0x28
153#define LIGHTRANGER13_REG_APP0_CAD_FACTORY_CALIB_9 0x29
154#define LIGHTRANGER13_REG_APP0_CAD_FACTORY_CALIB_10 0x2A
155#define LIGHTRANGER13_REG_APP0_CAD_FACTORY_CALIB_11 0x2B
156#define LIGHTRANGER13_REG_APP0_CAD_FACTORY_CALIB_12 0x2C
157#define LIGHTRANGER13_REG_APP0_CAD_FACTORY_CALIB_13 0x2D
158#define LIGHTRANGER13_REG_APP0_CAD_STATE_DATA_WR_0 0x2E
159#define LIGHTRANGER13_REG_APP0_CAD_STATE_DATA_WR_1 0x2F
160#define LIGHTRANGER13_REG_APP0_CAD_STATE_DATA_WR_2 0x30
161#define LIGHTRANGER13_REG_APP0_CAD_STATE_DATA_WR_3 0x31
162#define LIGHTRANGER13_REG_APP0_CAD_STATE_DATA_WR_4 0x32
163#define LIGHTRANGER13_REG_APP0_CAD_STATE_DATA_WR_5 0x33
164#define LIGHTRANGER13_REG_APP0_CAD_STATE_DATA_WR_6 0x34
165#define LIGHTRANGER13_REG_APP0_CAD_STATE_DATA_WR_7 0x35
166#define LIGHTRANGER13_REG_APP0_CAD_STATE_DATA_WR_8 0x36
167#define LIGHTRANGER13_REG_APP0_CAD_STATE_DATA_WR_9 0x37
168#define LIGHTRANGER13_REG_APP0_CAD_STATE_DATA_WR_10 0x38
174#define LIGHTRANGER13_REG_APP0_RH_HIST_START 0x20
175#define LIGHTRANGER13_REG_APP0_RH_HIST_END 0x9F
181#define LIGHTRANGER13_REG_APP0_SN_SERIAL_NUMBER_0 0x28
182#define LIGHTRANGER13_REG_APP0_SN_SERIAL_NUMBER_1 0x29
183#define LIGHTRANGER13_REG_APP0_SN_IDENTI_NUMBER_0 0x2A
184#define LIGHTRANGER13_REG_APP0_SN_IDENTI_NUMBER_1 0x2B
190#define LIGHTRANGER13_REG_APP0_IS_PERSISTENCE 0x20
191#define LIGHTRANGER13_REG_APP0_IS_LOW_THOLD_LSB 0x21
192#define LIGHTRANGER13_REG_APP0_IS_LOW_THOLD_MSB 0x22
193#define LIGHTRANGER13_REG_APP0_IS_HIGH_THOLD_LSB 0x23
194#define LIGHTRANGER13_REG_APP0_IS_HIGH_THOLD_MSB 0x24
200#define LIGHTRANGER13_CMD_NOP 0x00
201#define LIGHTRANGER13_CMD_START_MEASUREMENT 0x02
202#define LIGHTRANGER13_CMD_WRITE_ADD_CFG 0x08
203#define LIGHTRANGER13_CMD_READ_ADD_CFG 0x09
204#define LIGHTRANGER13_CMD_CUSTOMER_FACTORY_CALIB 0x0A
205#define LIGHTRANGER13_CMD_GPIO_CONTROL 0x0F
206#define LIGHTRANGER13_CMD_ENABLE_HISTOGRAM_ROUT 0x30
207#define LIGHTRANGER13_CMD_CONTINUE_HISTOGRAM_ROUT 0x32
208#define LIGHTRANGER13_CMD_READ_SERIAL_NUMBER 0x47
209#define LIGHTRANGER13_CMD_CHANGE_I2C_ADDRESS 0x49
210#define LIGHTRANGER13_CMD_READ_HISTOGRAM 0x80
211#define LIGHTRANGER13_CMD_STOP_COMMAND 0xFF
217#define LIGHTRANGER13_REG_BL_CMD_STAT 0x08
218#define LIGHTRANGER13_REG_BL_SIZE 0x09
219#define LIGHTRANGER13_REG_BL_DATA 0x0A
225#define LIGHTRANGER13_BL_CMD_RAMREMAP_RESET 0x11
226#define LIGHTRANGER13_BL_CMD_DOWNLOAD_INIT 0x14
227#define LIGHTRANGER13_BL_CMD_W_RAM 0x41
228#define LIGHTRANGER13_BL_CMD_ADDR_RAM 0x43
246#define LIGHTRANGER13_MASK_ALL 0xFF
252#define LIGHTRANGER13_STATUS_IDLE 0x00
253#define LIGHTRANGER13_STATUS_DIAGNOSTIC 0x01
254#define LIGHTRANGER13_STATUS_START 0x02
255#define LIGHTRANGER13_STATUS_CALIBRATION 0x03
256#define LIGHTRANGER13_STATUS_LIGHT_COL 0x04
257#define LIGHTRANGER13_STATUS_ALGORITHM 0x05
258#define LIGHTRANGER13_STATUS_STARTUP 0x06
259#define LIGHTRANGER13_STATUS_VCSEL_PWR_FAIL 0x10
260#define LIGHTRANGER13_STATUS_VCSEL_LED_A_FAIL 0x11
261#define LIGHTRANGER13_STATUS_VCSEL_LED_K_FAIL 0x12
262#define LIGHTRANGER13_STATUS_CALIB_ERROR 0x1B
263#define LIGHTRANGER13_STATUS_INVAL_CMD 0x1C
264#define LIGHTRANGER13_STATUS_ERR_MISSING_FACT_CAL 0x27
265#define LIGHTRANGER13_STATUS_ERR_INVALID_FACT_CAL 0x28
266#define LIGHTRANGER13_STATUS_ERR_INVALID_ALG_STATE 0x29
272#define LIGHTRANGER13_ENABLE_CPU_RESET 0x80
273#define LIGHTRANGER13_ENABLE_CPU_READY 0x40
274#define LIGHTRANGER13_ENABLE_PON 0x01
275#define LIGHTRANGER13_ENABLE_STANDBY 0x00
281#define LIGHTRANGER13_APPID_BOOTLOADER 0x80
282#define LIGHTRANGER13_APPID_APP0 0xC0
288#define LIGHTRANGER13_REGISTER_CONTENTS_CALIBRATION 0x0A
289#define LIGHTRANGER13_REGISTER_CONTENTS_SN 0x47
290#define LIGHTRANGER13_REGISTER_CONTENTS_MEASUREMENT 0x55
291#define LIGHTRANGER13_REGISTER_CONTENTS_HISTOGRAM 0x80
297#define LIGHTRANGER13_INTERRUPT_RESULT 0x01
298#define LIGHTRANGER13_INTERRUPT_DIAGNOSTIC 0x02
304#define LIGHTRANGER13_MEAS_CFG_9_AMPLITUDE_MASK 0x0F
305#define LIGHTRANGER13_MEAS_CFG_9_CONFIG_MASK 0x30
306#define LIGHTRANGER13_MEAS_CFG_8_AMPLITUDE_MASK 0x0F
307#define LIGHTRANGER13_MEAS_CFG_8_CONFIG_MASK 0x30
308#define LIGHTRANGER13_MEAS_CFG_7_FACTORY_CAL_MASK 0x01
309#define LIGHTRANGER13_MEAS_CFG_7_ALG_STATE_MASK 0x02
310#define LIGHTRANGER13_MEAS_CFG_7_SPAD_DEAD_T_MASK 0x38
311#define LIGHTRANGER13_MEAS_CFG_7_SPAD_SELECT_MASK 0xC0
312#define LIGHTRANGER13_MEAS_CFG_6_DISTANCE_EN_MASK 0x02
313#define LIGHTRANGER13_MEAS_CFG_6_VCSEL_CLKDIV2_MASK 0x04
314#define LIGHTRANGER13_MEAS_CFG_6_DISTANCE_MODE_MASK 0x08
315#define LIGHTRANGER13_MEAS_CFG_6_IMMEDIATE_INT_MASK 0x10
316#define LIGHTRANGER13_MEAS_CFG_6_ALG_KEEP_RDY_MASK 0x80
317#define LIGHTRANGER13_MEAS_CFG_5_GPIO_0_MASK 0x0F
318#define LIGHTRANGER13_MEAS_CFG_5_GPIO_1_MASK 0xF0
319#define LIGHTRANGER13_MEAS_CFG_4_ALS_DELAY_MASK 0x03
320#define LIGHTRANGER13_MEAS_CFG_3_THRESHOLD_MASK 0x3F
321#define LIGHTRANGER13_MEAS_CFG_3_VCSEL_SS_AMP_MASK 0xC0
322#define LIGHTRANGER13_MEAS_CFG_2_REP_PERIOD_MS_MASK 0xFF
323#define LIGHTRANGER13_MEAS_CFG_1_K_ITERS_LSB_MASK 0xFF
324#define LIGHTRANGER13_MEAS_CFG_0_K_ITERS_MSB_MASK 0xFF
330#define LIGHTRANGER13_FACTORY_CALIB_STATE 0x00
331#define LIGHTRANGER13_FACTORY_CALIB_K_ITERS 0xA000
337#define LIGHTRANGER13_FACTORY_CALIB_0 0x02
338#define LIGHTRANGER13_FACTORY_CALIB_1 0x00
339#define LIGHTRANGER13_FACTORY_CALIB_2 0x00
340#define LIGHTRANGER13_FACTORY_CALIB_3 0x00
341#define LIGHTRANGER13_FACTORY_CALIB_4 0x00
342#define LIGHTRANGER13_FACTORY_CALIB_5 0x00
343#define LIGHTRANGER13_FACTORY_CALIB_6 0x00
344#define LIGHTRANGER13_FACTORY_CALIB_7 0x00
345#define LIGHTRANGER13_FACTORY_CALIB_8 0x00
346#define LIGHTRANGER13_FACTORY_CALIB_9 0x00
347#define LIGHTRANGER13_FACTORY_CALIB_10 0x00
348#define LIGHTRANGER13_FACTORY_CALIB_11 0x00
349#define LIGHTRANGER13_FACTORY_CALIB_12 0x00
350#define LIGHTRANGER13_FACTORY_CALIB_13 0x00
351#define LIGHTRANGER13_STATE_DATA_0 0x02
352#define LIGHTRANGER13_STATE_DATA_1 0x3C
353#define LIGHTRANGER13_STATE_DATA_2 0x00
354#define LIGHTRANGER13_STATE_DATA_3 0x00
355#define LIGHTRANGER13_STATE_DATA_4 0x7C
356#define LIGHTRANGER13_STATE_DATA_5 0x7C
357#define LIGHTRANGER13_STATE_DATA_6 0x00
358#define LIGHTRANGER13_STATE_DATA_7 0x00
359#define LIGHTRANGER13_STATE_DATA_8 0x00
360#define LIGHTRANGER13_STATE_DATA_9 0x00
361#define LIGHTRANGER13_STATE_DATA_10 0x00
362#define LIGHTRANGER13_MEAS_CFG_SS_SPAD_CHG_PUMP 0x00
363#define LIGHTRANGER13_MEAS_CFG_SS_VCSEL_CHG_PUMP 0x00
364#define LIGHTRANGER13_MEAS_CFG_CALIB_STATE ( LIGHTRANGER13_MEAS_CFG_7_FACTORY_CAL_MASK | \
365 LIGHTRANGER13_MEAS_CFG_7_ALG_STATE_MASK )
366#define LIGHTRANGER13_MEAS_CFG_ALGO LIGHTRANGER13_MEAS_CFG_6_DISTANCE_EN_MASK
367#define LIGHTRANGER13_MEAS_CFG_GPIO_CTRL 0x00
368#define LIGHTRANGER13_MEAS_CFG_DAX_DELAY_100US 0x00
369#define LIGHTRANGER13_MEAS_CFG_SNR 0x06
370#define LIGHTRANGER13_MEAS_CFG_REP_PERIOD_MS 33
371#define LIGHTRANGER13_MEAS_CFG_K_ITERS 400
377#define LIGHTRANGER13_TIMEOUT_INFINITE 0
378#define LIGHTRANGER13_TIMEOUT_1MS 1
379#define LIGHTRANGER13_TIMEOUT_2MS 2
380#define LIGHTRANGER13_TIMEOUT_3MS 3
381#define LIGHTRANGER13_TIMEOUT_5MS 5
382#define LIGHTRANGER13_TIMEOUT_10MS 10
383#define LIGHTRANGER13_TIMEOUT_150MS 150
384#define LIGHTRANGER13_TIMEOUT_5S 5000
391#define LIGHTRANGER13_DEVICE_ADDRESS 0x41
409#define LIGHTRANGER13_MAP_MIKROBUS( cfg, mikrobus ) \
410 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
411 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
412 cfg.en = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
413 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
642 uint8_t payload_len, uint16_t timeout_ms );
659 uint8_t state, uint16_t timeout_ms );
err_t lightranger13_write_regs(lightranger13_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
LightRanger 13 write regs function.
err_t lightranger13_read_info(lightranger13_t *ctx)
LightRanger 13 read info function.
err_t lightranger13_stop_measurement(lightranger13_t *ctx)
LightRanger 13 stop measurement function.
void lightranger13_enable_device(lightranger13_t *ctx)
LightRanger 13 enable device function.
err_t lightranger13_start_measurement(lightranger13_t *ctx)
LightRanger 13 start measurement function.
err_t lightranger13_factory_calib(lightranger13_t *ctx)
LightRanger 13 factory calib function.
void lightranger13_cfg_setup(lightranger13_cfg_t *cfg)
LightRanger 13 configuration object setup function.
err_t lightranger13_read_regs(lightranger13_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
LightRanger 13 read regs function.
uint8_t lightranger13_get_int_pin(lightranger13_t *ctx)
LightRanger 13 get int pin function.
err_t lightranger13_read_reg(lightranger13_t *ctx, uint8_t reg, uint8_t *data_out)
LightRanger 13 read reg function.
err_t lightranger13_wait_reg_state(lightranger13_t *ctx, uint8_t reg, uint8_t mask, uint8_t state, uint16_t timeout_ms)
LightRanger 13 wait reg state function.
void lightranger13_disable_device(lightranger13_t *ctx)
LightRanger 13 disable device function.
err_t lightranger13_write_reg(lightranger13_t *ctx, uint8_t reg, uint8_t data_in)
LightRanger 13 write reg function.
err_t lightranger13_init(lightranger13_t *ctx, lightranger13_cfg_t *cfg)
LightRanger 13 initialization function.
err_t lightranger13_default_cfg(lightranger13_t *ctx)
LightRanger 13 default configuration function.
err_t lightranger13_send_cmd(lightranger13_t *ctx, uint8_t cmd, uint8_t *payload, uint8_t payload_len, uint16_t timeout_ms)
LightRanger 13 send cmd function.
err_t lightranger13_set_threshold(lightranger13_t *ctx, uint16_t t_low, uint16_t t_high, uint8_t persistance)
LightRanger 13 set threshold function.
err_t lightranger13_power_up(lightranger13_t *ctx)
LightRanger 13 power up function.
err_t lightranger13_read_result(lightranger13_t *ctx, lightranger13_meas_result_t *result)
LightRanger 13 read result function.
err_t lightranger13_clear_interrupts(lightranger13_t *ctx)
LightRanger 13 clear interrupts function.
lightranger13_return_value_t
LightRanger 13 Click return value data.
Definition lightranger13.h:514
@ LIGHTRANGER13_ERROR
Definition lightranger13.h:516
@ LIGHTRANGER13_OK
Definition lightranger13.h:515
LightRanger 13 Click configuration object.
Definition lightranger13.h:497
uint32_t i2c_speed
Definition lightranger13.h:504
pin_name_t scl
Definition lightranger13.h:498
pin_name_t en
Definition lightranger13.h:501
pin_name_t int_pin
Definition lightranger13.h:502
pin_name_t sda
Definition lightranger13.h:499
uint8_t i2c_address
Definition lightranger13.h:505
LightRanger 13 Click device information object.
Definition lightranger13.h:423
uint8_t chip_ver[2]
Definition lightranger13.h:426
uint32_t serial_num
Definition lightranger13.h:424
uint8_t app_ver[4]
Definition lightranger13.h:425
LightRanger 13 Click device measurement config object.
Definition lightranger13.h:435
uint16_t k_iters
Definition lightranger13.h:444
uint8_t snr
Definition lightranger13.h:442
uint8_t rep_period_ms
Definition lightranger13.h:443
uint8_t dax_delay_100us
Definition lightranger13.h:441
uint8_t calib_state
Definition lightranger13.h:438
uint8_t algo
Definition lightranger13.h:439
uint8_t ss_vcsel_chg_pump
Definition lightranger13.h:437
uint8_t ss_spad_chg_pump
Definition lightranger13.h:436
uint8_t gpio_ctrl
Definition lightranger13.h:440
LightRanger 13 Click device measurement results object.
Definition lightranger13.h:453
uint32_t ref_hits
Definition lightranger13.h:460
uint8_t state_data[11]
Definition lightranger13.h:458
uint16_t dist_peak
Definition lightranger13.h:456
int8_t temperature
Definition lightranger13.h:459
uint32_t sys_clock
Definition lightranger13.h:457
uint8_t result_info
Definition lightranger13.h:455
uint32_t object_hits
Definition lightranger13.h:461
uint8_t result_num
Definition lightranger13.h:454
uint16_t xtalk
Definition lightranger13.h:462
LightRanger 13 Click context object.
Definition lightranger13.h:471
lightranger13_meas_cfg_t meas_cfg
Definition lightranger13.h:486
uint8_t state_data[11]
Definition lightranger13.h:488
lightranger13_info_t info
Definition lightranger13.h:484
digital_in_t int_pin
Definition lightranger13.h:476
i2c_master_t i2c
Definition lightranger13.h:479
digital_out_t en
Definition lightranger13.h:473
uint8_t slave_address
Definition lightranger13.h:482
uint8_t factory_calib[14]
Definition lightranger13.h:487