proximity21  2.1.0.0
proximity21.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2020 MikroElektronika d.o.o.
3 ** Contact: https://www.mikroe.com/contact
4 **
5 ** Permission is hereby granted, free of charge, to any person obtaining a copy
6 ** of this software and associated documentation files (the "Software"), to deal
7 ** in the Software without restriction, including without limitation the rights
8 ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 ** copies of the Software, and to permit persons to whom the Software is
10 ** furnished to do so, subject to the following conditions:
11 ** The above copyright notice and this permission notice shall be
12 ** included in all copies or substantial portions of the Software.
13 **
14 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16 ** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19 ** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 ** USE OR OTHER DEALINGS IN THE SOFTWARE.
21 ****************************************************************************/
22 
28 #ifndef PROXIMITY21_H
29 #define PROXIMITY21_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
39 #ifdef PREINIT_SUPPORTED
40 #include "preinit.h"
41 #endif
42 
43 #ifdef MikroCCoreVersion
44  #if MikroCCoreVersion >= 1
45  #include "delays.h"
46  #endif
47 #endif
48 
49 #include "drv_digital_out.h"
50 #include "drv_digital_in.h"
51 #include "drv_i2c_master.h"
52 
73 #define PROXIMITY21_REG_I2C_SLAVE_ADDRESS 0x0001
74 #define PROXIMITY21_REG_VHV_CONFIG_TIMEOUT 0x0008
75 #define PROXIMITY21_REG_XTALK_PLANE_OFFSET_KCPS 0x0016
76 #define PROXIMITY21_REG_XTALK_X_PLANE_GRADIENT_KCPS 0x0018
77 #define PROXIMITY21_REG_XTALK_Y_PLANE_GRADIENT_KCPS 0x001A
78 #define PROXIMITY21_REG_RANGE_OFFSET_MM 0x001E
79 #define PROXIMITY21_REG_INNER_OFFSET_MM 0x0020
80 #define PROXIMITY21_REG_OUTER_OFFSET_MM 0x0022
81 #define PROXIMITY21_REG_GPIO_HV_MUX_CTRL 0x0030
82 #define PROXIMITY21_REG_GPIO_TIO_HV_STATUS 0x0031
83 #define PROXIMITY21_REG_SYSTEM_INTERRUPT 0x0046
84 #define PROXIMITY21_REG_RANGE_CONFIG_A 0x005E
85 #define PROXIMITY21_REG_RANGE_CONFIG_B 0x0061
86 #define PROXIMITY21_REG_RANGE_CONFIG_SIGMA_THRESH 0x0064
87 #define PROXIMITY21_REG_MIN_COUNT_RATE_RTN_LIMIT_MCPS 0x0066
88 #define PROXIMITY21_REG_INTERMEASUREMENT_MS 0x006C
89 #define PROXIMITY21_REG_THRESH_HIGH 0x0072
90 #define PROXIMITY21_REG_THRESH_LOW 0x0074
91 #define PROXIMITY21_REG_SYSTEM_INTERRUPT_CLEAR 0x0086
92 #define PROXIMITY21_REG_SYSTEM_START 0x0087
93 #define PROXIMITY21_REG_RESULT_RANGE_STATUS 0x0089
94 #define PROXIMITY21_REG_RESULT_SPAD_NB 0x008C
95 #define PROXIMITY21_REG_RESULT_SIGNAL_RATE 0x008E
96 #define PROXIMITY21_REG_RESULT_AMBIENT_RATE 0x0090
97 #define PROXIMITY21_REG_RESULT_SIGMA 0x0092
98 #define PROXIMITY21_REG_RESULT_DISTANCE 0x0096
99 #define PROXIMITY21_REG_RESULT_OSC_CALIBRATE_VAL 0x00DE
100 #define PROXIMITY21_REG_FIRMWARE_SYSTEM_STATUS 0x00E5
101 #define PROXIMITY21_REG_MODEL_ID 0x010F
102  // proximity21_reg
104 
119 #define PROXIMITY21_RANGE_STATUS_VALID 0
120 #define PROXIMITY21_RANGE_STATUS_SIGMA_HIGH 1
121 #define PROXIMITY21_RANGE_STATUS_SIGMA_LOW 2
122 #define PROXIMITY21_RANGE_STATUS_DISTANCE_LOW 3
123 #define PROXIMITY21_RANGE_STATUS_PHASE_LIMIT 4
124 #define PROXIMITY21_RANGE_STATUS_HW_FAIL 5
125 #define PROXIMITY21_RANGE_STATUS_WRAP_CHECK 6
126 #define PROXIMITY21_RANGE_STATUS_PHASE_NO_MATCH 7
127 #define PROXIMITY21_RANGE_STATUS_PROCESSING_FAIL 8
128 #define PROXIMITY21_RANGE_STATUS_CROSSTALK_FAIL 9
129 #define PROXIMITY21_RANGE_STATUS_INTERRUPT_ERROR 10
130 #define PROXIMITY21_RANGE_STATUS_MERGED_TARGET 11
131 #define PROXIMITY21_RANGE_STATUS_SIGNAL_TOO_LOW 12
132 #define PROXIMITY21_RANGE_STATUS_ERROR 255
133 
138 #define PROXIMITY21_DEVICE_ID 0xECAA
139 
140 
146 #define PROXIMITY21_DEVICE_ADDRESS 0x29
147  // proximity21_set
149 
164 #define PROXIMITY21_MAP_MIKROBUS( cfg, mikrobus ) \
165  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
166  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
167  cfg.xshut = MIKROBUS( mikrobus, MIKROBUS_RST ); \
168  cfg.gpio1 = MIKROBUS( mikrobus, MIKROBUS_INT )
169  // proximity21_map // proximity21
172 
177 typedef struct
178 {
180  uint8_t range_status;
182  uint16_t distance_mm;
192  uint16_t number_of_spad;
194  uint16_t sigma_mm;
195 
197 
202 typedef struct
203 {
204  // Output pins
205  digital_out_t xshut;
207  // Input pins
208  digital_in_t gpio1;
210  // Modules
211  i2c_master_t i2c;
213  // I2C slave address
214  uint8_t slave_address;
216 } proximity21_t;
217 
222 typedef struct
223 {
224  pin_name_t scl;
225  pin_name_t sda;
227  pin_name_t xshut;
228  pin_name_t gpio1;
230  uint32_t i2c_speed;
231  uint8_t i2c_address;
234 
239 typedef enum
240 {
242  PROXIMITY21_ERROR = -1
243 
245 
262 
277 
291 
306 err_t proximity21_reg_write_bytes ( proximity21_t *ctx, uint16_t reg, uint8_t *data_in, uint8_t len );
307 
322 err_t proximity21_reg_read_bytes ( proximity21_t *ctx, uint16_t reg, uint8_t *data_out, uint8_t len );
323 
336 err_t proximity21_reg_write_byte ( proximity21_t *ctx, uint16_t reg, uint8_t data_in );
337 
350 err_t proximity21_reg_read_byte ( proximity21_t *ctx, uint16_t reg, uint8_t *data_out );
351 
365 err_t proximity21_reg_write_word ( proximity21_t *ctx, uint16_t reg, uint16_t data_in );
366 
380 err_t proximity21_reg_read_word ( proximity21_t *ctx, uint16_t reg, uint16_t *data_out );
381 
395 err_t proximity21_reg_write_dword ( proximity21_t *ctx, uint16_t reg, uint32_t data_in );
396 
410 err_t proximity21_reg_read_dword ( proximity21_t *ctx, uint16_t reg, uint32_t *data_out );
411 
421 
431 
441 
453 
465 err_t proximity21_set_i2c_address ( proximity21_t *ctx, uint8_t address );
466 
478 
490 
502 
516 err_t proximity21_set_range_timing ( proximity21_t *ctx, uint32_t timing_budget_ms, uint32_t inter_measurement_ms );
517 
531 
532 #ifdef __cplusplus
533 }
534 #endif
535 #endif // PROXIMITY21_H
536  // proximity21
538 
539 // ------------------------------------------------------------------------ END
proximity21_data_t::range_status
uint8_t range_status
Definition: proximity21.h:180
PROXIMITY21_OK
@ PROXIMITY21_OK
Definition: proximity21.h:241
proximity21_init
err_t proximity21_init(proximity21_t *ctx, proximity21_cfg_t *cfg)
Proximity 21 initialization function.
proximity21_t::slave_address
uint8_t slave_address
Definition: proximity21.h:214
proximity21_reg_read_bytes
err_t proximity21_reg_read_bytes(proximity21_t *ctx, uint16_t reg, uint8_t *data_out, uint8_t len)
Proximity 21 reg read bytes function.
proximity21_set_i2c_address
err_t proximity21_set_i2c_address(proximity21_t *ctx, uint8_t address)
Proximity 21 set I2C address function.
proximity21_reg_write_byte
err_t proximity21_reg_write_byte(proximity21_t *ctx, uint16_t reg, uint8_t data_in)
Proximity 21 reg write byte function.
proximity21_clear_interrupt
err_t proximity21_clear_interrupt(proximity21_t *ctx)
Proximity 21 clear interrupt function.
proximity21_reg_write_word
err_t proximity21_reg_write_word(proximity21_t *ctx, uint16_t reg, uint16_t data_in)
Proximity 21 reg write word function.
proximity21_t
Proximity 21 Click context object.
Definition: proximity21.h:203
proximity21_cfg_t::i2c_address
uint8_t i2c_address
Definition: proximity21.h:231
proximity21_set_range_timing
err_t proximity21_set_range_timing(proximity21_t *ctx, uint32_t timing_budget_ms, uint32_t inter_measurement_ms)
Proximity 21 set range timing function.
proximity21_data_t::signal_per_spad_kcps
uint16_t signal_per_spad_kcps
Definition: proximity21.h:190
proximity21_cfg_t::scl
pin_name_t scl
Definition: proximity21.h:224
proximity21_cfg_t::xshut
pin_name_t xshut
Definition: proximity21.h:227
proximity21_data_t::ambient_per_spad_kcps
uint16_t ambient_per_spad_kcps
Definition: proximity21.h:186
proximity21_t::xshut
digital_out_t xshut
Definition: proximity21.h:205
proximity21_default_cfg
err_t proximity21_default_cfg(proximity21_t *ctx)
Proximity 21 default configuration function.
proximity21_data_t::number_of_spad
uint16_t number_of_spad
Definition: proximity21.h:192
proximity21_cfg_t
Proximity 21 Click configuration object.
Definition: proximity21.h:223
proximity21_start_ranging
err_t proximity21_start_ranging(proximity21_t *ctx)
Proximity 21 start ranging function.
proximity21_data_t::ambient_rate_kcps
uint16_t ambient_rate_kcps
Definition: proximity21.h:184
proximity21_reg_read_byte
err_t proximity21_reg_read_byte(proximity21_t *ctx, uint16_t reg, uint8_t *data_out)
Proximity 21 reg read byte function.
proximity21_disable_device
void proximity21_disable_device(proximity21_t *ctx)
Proximity 21 disable device function.
proximity21_reg_read_dword
err_t proximity21_reg_read_dword(proximity21_t *ctx, uint16_t reg, uint32_t *data_out)
Proximity 21 reg read dword function.
proximity21_t::i2c
i2c_master_t i2c
Definition: proximity21.h:211
proximity21_t::gpio1
digital_in_t gpio1
Definition: proximity21.h:208
proximity21_enable_device
void proximity21_enable_device(proximity21_t *ctx)
Proximity 21 enable device function.
proximity21_data_t::distance_mm
uint16_t distance_mm
Definition: proximity21.h:182
proximity21_reg_read_word
err_t proximity21_reg_read_word(proximity21_t *ctx, uint16_t reg, uint16_t *data_out)
Proximity 21 reg read word function.
proximity21_get_gpio1_pin
uint8_t proximity21_get_gpio1_pin(proximity21_t *ctx)
Proximity 21 get GPIO1 pin function.
proximity21_cfg_t::sda
pin_name_t sda
Definition: proximity21.h:225
proximity21_cfg_setup
void proximity21_cfg_setup(proximity21_cfg_t *cfg)
Proximity 21 configuration object setup function.
proximity21_stop_ranging
err_t proximity21_stop_ranging(proximity21_t *ctx)
Proximity 21 stop ranging function.
proximity21_check_comm
err_t proximity21_check_comm(proximity21_t *ctx)
Proximity 21 check comm function.
proximity21_return_value_t
proximity21_return_value_t
Proximity 21 Click return value data.
Definition: proximity21.h:240
proximity21_reg_write_bytes
err_t proximity21_reg_write_bytes(proximity21_t *ctx, uint16_t reg, uint8_t *data_in, uint8_t len)
Proximity 21 reg write bytes function.
proximity21_get_result
err_t proximity21_get_result(proximity21_t *ctx, proximity21_data_t *results)
Proximity 21 get result function.
proximity21_reg_write_dword
err_t proximity21_reg_write_dword(proximity21_t *ctx, uint16_t reg, uint32_t data_in)
Proximity 21 reg write dword function.
PROXIMITY21_ERROR
@ PROXIMITY21_ERROR
Definition: proximity21.h:242
proximity21_cfg_t::gpio1
pin_name_t gpio1
Definition: proximity21.h:228
proximity21_data_t::sigma_mm
uint16_t sigma_mm
Definition: proximity21.h:194
proximity21_data_t
Proximity 21 Click results data object.
Definition: proximity21.h:178
proximity21_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: proximity21.h:230
proximity21_data_t::signal_rate_kcps
uint16_t signal_rate_kcps
Definition: proximity21.h:188