proximity12  2.0.0.0
proximity12.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 PROXIMITY12_H
29 #define PROXIMITY12_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_i2c_master.h"
48 
69 #define PROXIMITY12_REG_AILT 0x2E
70 #define PROXIMITY12_REG_AIHT 0x31
71 #define PROXIMITY12_REG_PILT0 0x34
72 #define PROXIMITY12_REG_PIHT0 0x36
73 #define PROXIMITY12_REG_PILT1 0x38
74 #define PROXIMITY12_REG_PIHT1 0x3A
75 #define PROXIMITY12_REG_PILTR 0x3C
76 #define PROXIMITY12_REG_PIHTR 0x3E
77 #define PROXIMITY12_REG_FD_CFG0 0x40
78 #define PROXIMITY12_REG_FD_CFG1 0x41
79 #define PROXIMITY12_REG_FD_CFG2 0x42
80 #define PROXIMITY12_REG_FD_CFG3 0x43
81 #define PROXIMITY12_REG_FD_CFG4 0x44
82 #define PROXIMITY12_REG_FD_CFG5 0x45
83 #define PROXIMITY12_REG_FD_CFG6 0x46
84 #define PROXIMITY12_REG_FD_CFG7 0x47
85 #define PROXIMITY12_REG_FD_CFG8 0x48
86 #define PROXIMITY12_REG_SYNC_DELAY 0x4F
87 #define PROXIMITY12_REG_VSYNC_CFG0 0x53
88 #define PROXIMITY12_REG_VSYNC_CFG1 0x54
89 #define PROXIMITY12_REG_VSYNC_CFG2 0x56
90 #define PROXIMITY12_REG_VSYNC_CFG3 0x57
91 #define PROXIMITY12_REG_CALIB 0x69
92 #define PROXIMITY12_REG_CALIBCFG0 0x6A
93 #define PROXIMITY12_REG_CALIBCFG1 0x6B
94 #define PROXIMITY12_REG_CALIBCFG2 0x6C
95 #define PROXIMITY12_REG_CALIBSTAT 0x6D
96 #define PROXIMITY12_REG_ENABLE 0x80
97 #define PROXIMITY12_REG_MEAS_MODE0 0x81
98 #define PROXIMITY12_REG_MEAS_MODE1 0x82
99 #define PROXIMITY12_REG_TRIGGER_MODE 0x83
100 #define PROXIMITY12_REG_ATIME 0x84
101 #define PROXIMITY12_REG_ASTEP 0x85
102 #define PROXIMITY12_REG_PTIME 0x87
103 #define PROXIMITY12_REG_WTIPE 0x88
104 #define PROXIMITY12_REG_MOD_GAIN_0_1 0x89
105 #define PROXIMITY12_REG_MOD_GAIN_2_3 0x8A
106 #define PROXIMITY12_REG_MOD_GAIN_4_5 0x8B
107 #define PROXIMITY12_REG_MOD_GAIN_6_7 0x8C
108 #define PROXIMITY12_REG_AGC_ENABLE 0x8D
109 #define PROXIMITY12_REG_AUXID 0x90
110 #define PROXIMITY12_REG_REVID 0x91
111 #define PROXIMITY12_REG_ID 0x92
112 #define PROXIMITY12_REG_CFG0 0x93
113 #define PROXIMITY12_REG_CFG3 0x96
114 #define PROXIMITY12_REG_CFG4 0x97
115 #define PROXIMITY12_REG_PERS 0x9A
116 #define PROXIMITY12_REG_CFG8 0x9B
117 #define PROXIMITY12_REG_CFG9 0x9C
118 #define PROXIMITY12_REG_CFG10 0x9D
119 #define PROXIMITY12_REG_CFG11 0x9E
120 #define PROXIMITY12_REG_CFG12 0x9F
121 #define PROXIMITY12_REG_AZ_CONFIG 0xA4
122 #define PROXIMITY12_REG_CFG20 0xA7
123 #define PROXIMITY12_REG_PCFG1 0xAA
124 #define PROXIMITY12_REG_PCFG2 0xAB
125 #define PROXIMITY12_REG_PCFG3 0xAC
126 #define PROXIMITY12_REG_PCFG4 0xAD
127 #define PROXIMITY12_REG_PCFG5 0xAE
128 #define PROXIMITY12_REG_PCFG6 0xAF
129 #define PROXIMITY12_REG_PCFG7 0xB0
130 #define PROXIMITY12_REG_POFFSET0 0xB1
131 #define PROXIMITY12_REG_PXAVG 0xB3
132 #define PROXIMITY12_REG_PBSLN 0xB5
133 #define PROXIMITY12_REG_STATUS 0xB7
134 #define PROXIMITY12_REG_STATUS2 0xB8
135 #define PROXIMITY12_REG_STATUS3 0xB9
136 #define PROXIMITY12_REG_STATUS4 0xBA
137 #define PROXIMITY12_REG_STATUS5 0xBB
138 #define PROXIMITY12_REG_STATUS7 0xBD
139 #define PROXIMITY12_REG_STATUS8 0xBE
140 #define PROXIMITY12_REG_STATUS9 0xBF
141 #define PROXIMITY12_REG_ASTATUS 0xC0
142 #define PROXIMITY12_REG_ADATA0 0xC1
143 #define PROXIMITY12_REG_ADATA1 0xC4
144 #define PROXIMITY12_REG_ADATA2 0xC7
145 #define PROXIMITY12_REG_ADATA3 0xCA
146 #define PROXIMITY12_REG_ADATA4 0xCD
147 #define PROXIMITY12_REG_ADATA5 0xD0
148 #define PROXIMITY12_REG_ADATA6 0xD3
149 #define PROXIMITY12_REG_ADATA7 0xD6
150 #define PROXIMITY12_REG_PSTATUS 0xD9
151 #define PROXIMITY12_REG_PDATA0 0xDA
152 #define PROXIMITY12_REG_PDATA1 0xDC
153 #define PROXIMITY12_REG_PDATAR 0xDE
154 #define PROXIMITY12_REG_GPIO 0xF2
155 #define PROXIMITY12_REG_AGC_GAIN_MAX 0xF4
156 #define PROXIMITY12_REG_INTENAB 0xF5
157 #define PROXIMITY12_REG_CONTROL 0xF6
158 #define PROXIMITY12_REG_POFFSET1 0xF7
159 #define PROXIMITY12_REG_FIFO_MAP 0xF9
160 #define PROXIMITY12_REG_FIFO_MAP2 0xFA
161 #define PROXIMITY12_REG_FIFO_STATUS 0xFB
162 #define PROXIMITY12_REG_FDATA 0xFC
163  // proximity12_reg
165 
180 #define PROXIMITY12_ENABLE_FLICKER 0x40
181 #define PROXIMITY12_ENABLE_ALS 0x10
182 #define PROXIMITY12_ENABLE_PROX 0x08
183 #define PROXIMITY12_ENABLE_POWER 0x01
184 
189 #define PROXIMITY12_MEAS_MODE0_CL_APF_VSYNC 0x40
190 #define PROXIMITY12_MEAS_MODE0_EN_PROX_DIODE 0x0C
191 #define PROXIMITY12_MEAS_MODE0_ALS_SET_A_DIODE 0x00
192 #define PROXIMITY12_MEAS_MODE0_ALS_SET_B_DIODE 0x02
193 #define PROXIMITY12_MEAS_MODE0_EN_ALS_DIODE 0x01
194 
199 #define PROXIMITY12_AGC_DISABLE_ALL_MOD 0x00
200 #define PROXIMITY12_AGC_ENABLE_ALL_MOD 0xFF
201 #define PROXIMITY12_AGC_ENABLE_MOD_7 0x80
202 #define PROXIMITY12_AGC_ENABLE_MOD_6 0x40
203 #define PROXIMITY12_AGC_ENABLE_MOD_5 0x20
204 #define PROXIMITY12_AGC_ENABLE_MOD_4 0x10
205 #define PROXIMITY12_AGC_ENABLE_MOD_3 0x08
206 #define PROXIMITY12_AGC_ENABLE_MOD_2 0x04
207 #define PROXIMITY12_AGC_ENABLE_MOD_1 0x02
208 #define PROXIMITY12_AGC_ENABLE_MOD_0 0x01
209 #define PROXIMITY12_MOD_GAIN_2X 0x00
210 #define PROXIMITY12_MOD_GAIN_4X 0x01
211 #define PROXIMITY12_MOD_GAIN_8X 0x02
212 #define PROXIMITY12_MOD_GAIN_16X 0x03
213 #define PROXIMITY12_MOD_GAIN_32X 0x04
214 #define PROXIMITY12_MOD_GAIN_64X 0x05
215 #define PROXIMITY12_MOD_GAIN_128X 0x06
216 #define PROXIMITY12_MOD_GAIN_256X 0x07
217 #define PROXIMITY12_MOD_GAIN_512X 0x08
218 #define PROXIMITY12_MOD_GAIN_1024X 0x09
219 #define PROXIMITY12_MOD_GAIN_2048X 0x0A
220 #define PROXIMITY12_MOD_GAIN_4096X 0x0B
221 
226 #define PROXIMITY12_PROX_FILTER_ENABLE 0x08
227 #define PROXIMITY12_PROX_FILTER_1 0x00
228 #define PROXIMITY12_PROX_FILTER_2 0x01
229 #define PROXIMITY12_PROX_FILTER_3 0x02
230 #define PROXIMITY12_PROX_FILTER_4 0x03
231 #define PROXIMITY12_PROX_FILTER_5 0x04
232 #define PROXIMITY12_PROX_FILTER_6 0x05
233 #define PROXIMITY12_PROX_FILTER_7 0x06
234 #define PROXIMITY12_PROX_FILTER_8 0x07
235 
240 #define PROXIMITY12_ISINK_SCALER_0p5 0x00
241 #define PROXIMITY12_ISINK_SCALER_1 0x01
242 #define PROXIMITY12_ISINK_SCALER_1p5 0x02
243 #define PROXIMITY12_ISINK_SCALER_2 0x03
244 #define PROXIMITY12_ISINK_CURRENT_0mA 0x00
245 #define PROXIMITY12_ISINK_CURRENT_1mA 0x01
246 #define PROXIMITY12_ISINK_CURRENT_2mA 0x02
247 #define PROXIMITY12_ISINK_CURRENT_3mA 0x03
248 #define PROXIMITY12_ISINK_CURRENT_4mA 0x04
249 #define PROXIMITY12_ISINK_CURRENT_5mA 0x05
250 #define PROXIMITY12_ISINK_CURRENT_6mA 0x06
251 #define PROXIMITY12_ISINK_CURRENT_7mA 0x07
252 
257 #define PROXIMITY12_PROX_GAIN_1X 0x00
258 #define PROXIMITY12_PROX_GAIN_2X 0x01
259 #define PROXIMITY12_PROX_GAIN_4X 0x02
260 #define PROXIMITY12_PROX_GAIN_8X 0x03
261 
266 #define PROXIMITY12_AUXID 0x03
267 #define PROXIMITY12_REVID 0x13
268 #define PROXIMITY12_ID 0x40
269 
275 #define PROXIMITY12_SET_DEV_ADDR 0x39
276  // proximity12_set
278 
293 #define PROXIMITY12_MAP_MIKROBUS( cfg, mikrobus ) \
294  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
295  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
296  cfg.syn = MIKROBUS( mikrobus, MIKROBUS_CS ); \
297  cfg.gp1 = MIKROBUS( mikrobus, MIKROBUS_RST ); \
298  cfg.gp2 = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
299  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
300  // proximity12_map // proximity12
303 
308 typedef struct
309 {
310  // Output pins
311  digital_out_t syn;
312  digital_out_t gp1;
313  digital_out_t gp2;
315  // Input pins
316  digital_in_t int_pin;
318  // Modules
319  i2c_master_t i2c;
321  // I2C slave address
322  uint8_t slave_address;
324 } proximity12_t;
325 
330 typedef struct
331 {
332  pin_name_t scl;
333  pin_name_t sda;
335  pin_name_t syn;
336  pin_name_t gp1;
337  pin_name_t gp2;
338  pin_name_t int_pin;
340  uint32_t i2c_speed;
341  uint8_t i2c_address;
344 
349 typedef struct
350 {
351  uint32_t clear;
352  uint32_t red;
353  uint32_t green;
354  uint32_t blue;
355  uint32_t leakage;
356  uint32_t wideband;
357  uint32_t ir1;
358  uint32_t ir2;
359 
361 
366 typedef enum
367 {
369  PROXIMITY12_ERROR = -1
370 
372 
389 
404 
418 
433 err_t proximity12_generic_write ( proximity12_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len );
434 
449 err_t proximity12_generic_read ( proximity12_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len );
450 
462 
474 err_t proximity12_read_proximity ( proximity12_t *ctx, uint16_t *prox_data );
475 
489 
501 
513 
525 err_t proximity12_enable ( proximity12_t *ctx, uint8_t en_mask );
526 
538 err_t proximity12_enable_measurement ( proximity12_t *ctx, uint8_t en_mask );
539 
551 
563 err_t proximity12_set_proximity_filter ( proximity12_t *ctx, uint8_t filter );
564 
577 err_t proximity12_set_led_isink ( proximity12_t *ctx, uint8_t scaler, uint8_t current );
578 
590 err_t proximity12_set_proximity_gain ( proximity12_t *ctx, uint8_t gain );
591 
604 err_t proximity12_set_agc_mod_gain ( proximity12_t *ctx, uint8_t en_mask, uint8_t gain );
605 
615 void proximity12_set_syn_pin ( proximity12_t *ctx, uint8_t state );
616 
626 void proximity12_set_gp1_pin ( proximity12_t *ctx, uint8_t state );
627 
637 void proximity12_set_gp2_pin ( proximity12_t *ctx, uint8_t state );
638 
648 
649 #ifdef __cplusplus
650 }
651 #endif
652 #endif // PROXIMITY12_H
653  // proximity12
655 
656 // ------------------------------------------------------------------------ END
proximity12_als_data_t::green
uint32_t green
Definition: proximity12.h:353
proximity12_check_device_id
err_t proximity12_check_device_id(proximity12_t *ctx)
Proximity 12 check device ID function.
proximity12_set_agc_mod_gain
err_t proximity12_set_agc_mod_gain(proximity12_t *ctx, uint8_t en_mask, uint8_t gain)
Proximity 12 set agc modulator gain function.
proximity12_generic_write
err_t proximity12_generic_write(proximity12_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len)
Proximity 12 I2C writing function.
proximity12_enable_measurement
err_t proximity12_enable_measurement(proximity12_t *ctx, uint8_t en_mask)
Proximity 12 enable measurement function.
proximity12_cfg_t::int_pin
pin_name_t int_pin
Definition: proximity12.h:338
proximity12_als_data_t::ir1
uint32_t ir1
Definition: proximity12.h:357
proximity12_read_als
err_t proximity12_read_als(proximity12_t *ctx, proximity12_als_data_t *als)
Proximity 12 read als data function.
proximity12_t::i2c
i2c_master_t i2c
Definition: proximity12.h:319
proximity12_init
err_t proximity12_init(proximity12_t *ctx, proximity12_cfg_t *cfg)
Proximity 12 initialization function.
proximity12_set_proximity_filter
err_t proximity12_set_proximity_filter(proximity12_t *ctx, uint8_t filter)
Proximity 12 set proximity filter function.
proximity12_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: proximity12.h:340
proximity12_cfg_t::sda
pin_name_t sda
Definition: proximity12.h:333
proximity12_t::slave_address
uint8_t slave_address
Definition: proximity12.h:322
proximity12_t::gp2
digital_out_t gp2
Definition: proximity12.h:313
proximity12_wait_atime
err_t proximity12_wait_atime(proximity12_t *ctx)
Proximity 12 wait atime function.
proximity12_return_value_t
proximity12_return_value_t
Proximity 12 Click return value data.
Definition: proximity12.h:367
proximity12_cfg_t
Proximity 12 Click configuration object.
Definition: proximity12.h:331
proximity12_set_syn_pin
void proximity12_set_syn_pin(proximity12_t *ctx, uint8_t state)
Proximity 12 set syn pin state function.
proximity12_enable
err_t proximity12_enable(proximity12_t *ctx, uint8_t en_mask)
Proximity 12 enable function.
proximity12_als_data_t::leakage
uint32_t leakage
Definition: proximity12.h:355
proximity12_cfg_t::scl
pin_name_t scl
Definition: proximity12.h:332
proximity12_set_gp2_pin
void proximity12_set_gp2_pin(proximity12_t *ctx, uint8_t state)
Proximity 12 set gp2 pin state function.
proximity12_als_data_t
Proximity 12 ALS data object.
Definition: proximity12.h:350
proximity12_als_data_t::clear
uint32_t clear
Definition: proximity12.h:351
proximity12_cfg_t::syn
pin_name_t syn
Definition: proximity12.h:335
proximity12_generic_read
err_t proximity12_generic_read(proximity12_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len)
Proximity 12 I2C reading function.
proximity12_cfg_t::gp2
pin_name_t gp2
Definition: proximity12.h:337
proximity12_set_proximity_gain
err_t proximity12_set_proximity_gain(proximity12_t *ctx, uint8_t gain)
Proximity 12 set proximity gain function.
proximity12_als_data_t::blue
uint32_t blue
Definition: proximity12.h:354
proximity12_t::gp1
digital_out_t gp1
Definition: proximity12.h:312
PROXIMITY12_ERROR
@ PROXIMITY12_ERROR
Definition: proximity12.h:369
proximity12_set_led_isink
err_t proximity12_set_led_isink(proximity12_t *ctx, uint8_t scaler, uint8_t current)
Proximity 12 set led isink function.
proximity12_t::int_pin
digital_in_t int_pin
Definition: proximity12.h:316
proximity12_als_data_t::wideband
uint32_t wideband
Definition: proximity12.h:356
proximity12_t::syn
digital_out_t syn
Definition: proximity12.h:311
proximity12_cfg_t::gp1
pin_name_t gp1
Definition: proximity12.h:336
proximity12_cfg_t::i2c_address
uint8_t i2c_address
Definition: proximity12.h:341
proximity12_proximity_calibration
err_t proximity12_proximity_calibration(proximity12_t *ctx)
Proximity 12 proximity calibration function.
proximity12_cfg_setup
void proximity12_cfg_setup(proximity12_cfg_t *cfg)
Proximity 12 configuration object setup function.
proximity12_get_int_pin
uint8_t proximity12_get_int_pin(proximity12_t *ctx)
Proximity 12 get int pin state function.
proximity12_read_proximity
err_t proximity12_read_proximity(proximity12_t *ctx, uint16_t *prox_data)
Proximity 12 read proximity function.
proximity12_set_gp1_pin
void proximity12_set_gp1_pin(proximity12_t *ctx, uint8_t state)
Proximity 12 set gp1 pin state function.
proximity12_wait_ptime
err_t proximity12_wait_ptime(proximity12_t *ctx)
Proximity 12 wait ptime function.
PROXIMITY12_OK
@ PROXIMITY12_OK
Definition: proximity12.h:368
proximity12_als_data_t::red
uint32_t red
Definition: proximity12.h:352
proximity12_t
Proximity 12 Click context object.
Definition: proximity12.h:309
proximity12_default_cfg
err_t proximity12_default_cfg(proximity12_t *ctx)
Proximity 12 default configuration function.
proximity12_als_data_t::ir2
uint32_t ir2
Definition: proximity12.h:358