proximity7  2.0.0.0
proximity7.h
Go to the documentation of this file.
1 /*
2  * MikroSDK - MikroE Software Development Kit
3  * Copyright© 2020 MikroElektronika d.o.o.
4  *
5  * Permission is hereby granted, free of charge, to any person
6  * obtaining a copy of this software and associated documentation
7  * files (the "Software"), to deal in the Software without restriction,
8  * including without limitation the rights to use, copy, modify, merge,
9  * publish, distribute, sublicense, and/or sell copies of the Software,
10  * and to permit persons to whom the Software is furnished to do so,
11  * subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
22  * OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
33 // ----------------------------------------------------------------------------
34 
35 #ifndef PROXIMITY7_H
36 #define PROXIMITY7_H
37 
38 #include "mikrosdk_version.h"
39 
40 #ifdef __GNUC__
41 #if mikroSDK_GET_VERSION < 20800ul
42 #include "rcu_delays.h"
43 #else
44 #include "delays.h"
45 #endif
46 #endif
47 
48 #include "drv_digital_out.h"
49 #include "drv_digital_in.h"
50 #include "drv_i2c_master.h"
51 
52 // -------------------------------------------------------------- PUBLIC MACROS
53 
63 #define PROXIMITY7_MAP_MIKROBUS( cfg, mikrobus ) \
64  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
65  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
66  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
67 
73 #define PROXIMITY7_RETVAL uint8_t
74 
75 #define PROXIMITY7_OK 0x00
76 #define PROXIMITY7_INIT_ERROR 0xFF
77 
83 #define PROXIMITY7_DEVICE_ADDRESS 0x39
84 
90 #define PROXIMITY7_REPEATED_BYTE 0x80
91 #define PROXIMITY7_AUTO_INCREMENT 0xA0
92 #define PROXIMITY7_RESERVED 0xC0
93 #define PROXIMITY7_SPECIAL_FUNCTION 0xE0
94 
100 #define PROXIMITY7_NO_ACTION 0x00
101 #define PROXIMITY7_PROXIMITY_INT_PIN_CLEAR 0x05
102 #define PROXIMITY7_ALS_INT_PIN_CLEAR 0x06
103 #define PROXIMITY7_PROXIMITY_AND_ALS_INT_PIN_CLEAR 0x07
104 
110 #define PROXIMITY7_ENABLE 0x00
111 #define PROXIMITY7_ALS_ADC_TIME 0x01
112 #define PROXIMITY7_PROXIMITY_ADC_TIME 0x02
113 #define PROXIMITY7_WAIT_TIME 0x03
114 #define PROXIMITY7_LOW_ALS_INT_PIN_THRESHOLD_LOW 0x04
115 #define PROXIMITY7_LOW_ALS_INT_PIN_THRESHOLD_HIGH 0x05
116 #define PROXIMITY7_HIGH_ALS_INT_PIN_THRESHOLD_LOW 0x06
117 #define PROXIMITY7_HIGH_ALS_INT_PIN_THRESHOLD_HIGH 0x07
118 #define PROXIMITY7_LOW_PROXIMITY_INT_PIN_THRESHOLD_LOW 0x08
119 #define PROXIMITY7_LOW_PROXIMITY_INT_PIN_THRESHOLD_HIGH 0x09
120 #define PROXIMITY7_HIGH_PROXIMITY_INT_PIN_THRESHOLD_LOW 0x0A
121 #define PROXIMITY7_HIGH_PROXIMITY_INT_PIN_THRESHOLD_HIGH 0x0B
122 #define PROXIMITY7_INT_PIN_PERSISTANCE_FILTERS 0x0C
123 #define PROXIMITY7_CONFIGURATION 0x0D
124 #define PROXIMITY7_PROXIMITY_PULSE_COUNT 0x0E
125 #define PROXIMITY7_GAIN_CONTROL 0x0F
126 #define PROXIMITY7_ID 0x12
127 #define PROXIMITY7_STATUS 0x13
128 #define PROXIMITY7_CH0_ADC_DATA_LOW 0x14
129 #define PROXIMITY7_CH0_ADC_DATA_HIGH 0x15
130 #define PROXIMITY7_CH1_ADC_DATA_LOW 0x16
131 #define PROXIMITY7_CH1_ADC_DATA_HIGH 0x17
132 #define PROXIMITY7_PROXIMITY_ADC_DATA_LOW 0x18
133 #define PROXIMITY7_PROXIMITY_ADC_DATA_HIGH 0x19
134 #define PROXIMITY7_PROXIMITY_OFFSET 0x1E
135 
141 #define PROXIMITY7_SLEEP_AFTER_INT_PIN 0x40
142 #define PROXIMITY7_PROXIMITY_INT_PIN_MASK 0x20
143 #define PROXIMITY7_ALS_INT_PIN_MASK 0x10
144 #define PROXIMITY7_WAIT_ENA 0x08
145 #define PROXIMITY7_PROXIMITY_ENA 0x04
146 #define PROXIMITY7_ALS_ENA 0x02
147 #define PROXIMITY7_POWER_ON 0x01
148 
154 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_EVERY 0x00
155 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_1 0x10
156 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_2 0x20
157 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_3 0x30
158 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_4 0x40
159 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_5 0x50
160 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_6 0x60
161 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_7 0x70
162 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_8 0x80
163 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_9 0x90
164 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_10 0xA0
165 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_11 0xB0
166 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_12 0xC0
167 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_13 0xD0
168 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_14 0xE0
169 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_15 0xF0
170 
171 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_EVERY 0x00
172 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_1 0x01
173 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_2 0x02
174 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_3 0x03
175 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_5 0x04
176 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_10 0x05
177 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_15 0x06
178 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_20 0x07
179 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_25 0x08
180 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_30 0x09
181 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_35 0x0A
182 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_40 0x0B
183 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_45 0x0C
184 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_50 0x0D
185 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_55 0x0E
186 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_60 0x0F
187 
193 #define PROXIMITY7_ALS_GAIN_LEVEL 0x04
194 #define PROXIMITY7_WAIT_LONG 0x02
195 #define PROXIMITY7_PROXIMITY_DRIVE_LEVEL 0x01
196 
202 #define PROXIMITY7_LED_DRIVE_100mA 0x00
203 #define PROXIMITY7_LED_DRIVE_50mA 0x40
204 #define PROXIMITY7_LED_DRIVE_25mA 0x80
205 #define PROXIMITY7_LED_DRIVE_12p5mA 0xC0
206 #define PROXIMITY7_PROXIMITY_DIODE_CH1 0x20
207 #define PROXIMITY7_PROXIMITY_GAIN_1x 0x00
208 #define PROXIMITY7_PROXIMITY_GAIN_2x 0x04
209 #define PROXIMITY7_PROXIMITY_GAIN_4x 0x08
210 #define PROXIMITY7_PROXIMITY_GAIN_8x 0x0C
211 #define PROXIMITY7_ALS_GAIN_1x 0x00
212 #define PROXIMITY7_ALS_GAIN_8x 0x01
213 #define PROXIMITY7_ALS_GAIN_16x 0x02
214 #define PROXIMITY7_ALS_GAIN_120x 0x03
215 
221 #define PROXIMITY7_PROXIMITY_SATURATION_MASK 0x40
222 #define PROXIMITY7_PROXIMITY_INT_PINERRUPT_MASK 0x20
223 #define PROXIMITY7_ALS_INT_PINERRUPT_MASK 0x10
224 #define PROXIMITY7_PROXIMITY_VALID_MASK 0x02
225 #define PROXIMITY7_ALS_VALID_MASK 0x01
226 
232 #define PROXIMITY7_NEGATIVE 0x00
233 #define PROXIMITY7_POSITIVE 0x80
234  // End group macro
237 // --------------------------------------------------------------- PUBLIC TYPES
246 typedef struct
247 {
248  // Input pins
249 
250  digital_in_t int_pin;
251 
252  // Modules
253 
254  i2c_master_t i2c;
255 
256  // ctx variable
257 
258  uint8_t slave_address;
259 
261  float const_b;
262  float const_c;
263  float const_d;
265 
266 } proximity7_t;
267 
268 typedef struct
269 {
271  float const_b;
272  float const_c;
273  float const_d;
276 
280 typedef struct
281 {
282  // Communication gpio pins
283 
284  pin_name_t scl;
285  pin_name_t sda;
286 
287  // Additional gpio pins
288 
289 
290  pin_name_t int_pin;
291 
292  // static variable
293 
294  uint32_t i2c_speed;
295  uint8_t i2c_address;
296 
298 
300 
301  // End types group
303 
304 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
305 
311 #ifdef __cplusplus
312 extern "C"{
313 #endif
314 
324 
334 
343 
354 void proximity7_generic_write ( proximity7_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
355 
366 void proximity7_generic_read ( proximity7_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
367 
377  uint8_t proximity7_set_als_integration_time( proximity7_t *ctx, float integration_time );
378 
387  uint8_t proximity7_set_proximity_integration_time( proximity7_t *ctx, float integration_time );
388 
397  uint8_t proximity7_set_wait_time( proximity7_t *ctx, float wait_time );
398 
407  void proximity7_set_low_alsCh0_threshold( proximity7_t *ctx, uint16_t low_als_ch0_threshold );
408 
417  void proximity7_set_high_alsCh0_threshold( proximity7_t *ctx, uint16_t high_als_ch0_threshold );
418 
427  void proximity7_set_low_proximity_threshold( proximity7_t *ctx, uint16_t low_proximity_threshold );
428 
437  void proximity7_set_high_proximity_threshold( proximity7_t *ctx, uint16_t high_proximity_threshold );
438 
447  void proximity7_set_int_persistance( proximity7_t *ctx, uint16_t proximity_int_persistence, uint16_t als_int_persistence );
448 
457  void proximity7_set_proximity_pulse_count( proximity7_t *ctx, uint8_t proximity_pulse_count );
458 
467 
476 
485 
496  uint8_t proximity7_set_proximity_offset( proximity7_t *ctx, uint8_t proximity_offset_sign, uint8_t proximity_offset_magnitude );
497 
506 
519 
529 
530 #ifdef __cplusplus
531 }
532 #endif
533 #endif // _PROXIMITY7_H_
534  // End public_function group
537 
538 // ------------------------------------------------------------------------- END
proximity7_t::i2c
i2c_master_t i2c
Definition: proximity7.h:254
proximity7_const_t::device_factor
float device_factor
Definition: proximity7.h:274
proximity7_cfg_setup
void proximity7_cfg_setup(proximity7_cfg_t *cfg)
Config Object Initialization function.
proximity7_get_lux_level
float proximity7_get_lux_level(proximity7_t *ctx)
Calculating LUX level.
proximity7_cfg_t
Click configuration structure definition.
Definition: proximity7.h:281
proximity7_generic_read
void proximity7_generic_read(proximity7_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic read function.
proximity7_set_proximity_integration_time
uint8_t proximity7_set_proximity_integration_time(proximity7_t *ctx, float integration_time)
Setting proximity int_pinegration time.
proximity7_t
Click ctx object definition.
Definition: proximity7.h:247
proximity7_cfg_t::dev_const
proximity7_const_t dev_const
Definition: proximity7.h:297
proximity7_get_als_data_ch0
uint16_t proximity7_get_als_data_ch0(proximity7_t *ctx)
Getting channel measurement data.
proximity7_set_high_alsCh0_threshold
void proximity7_set_high_alsCh0_threshold(proximity7_t *ctx, uint16_t high_als_ch0_threshold)
Setting high ALS Ch0 threshold value.
proximity7_generic_write
void proximity7_generic_write(proximity7_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic write function.
proximity7_t::const_d
float const_d
Definition: proximity7.h:263
proximity7_const_t::const_c
float const_c
Definition: proximity7.h:272
proximity7_t::glass_attenuation
float glass_attenuation
Definition: proximity7.h:260
proximity7_set_high_proximity_threshold
void proximity7_set_high_proximity_threshold(proximity7_t *ctx, uint16_t high_proximity_threshold)
Setting high proximity threshold.
proximity7_cfg_t::scl
pin_name_t scl
Definition: proximity7.h:284
proximity7_set_proximity_offset
uint8_t proximity7_set_proximity_offset(proximity7_t *ctx, uint8_t proximity_offset_sign, uint8_t proximity_offset_magnitude)
Setting proximity offset.
proximity7_get_int_pin
uint8_t proximity7_get_int_pin(proximity7_t *ctx)
Checking INT_pin pin status.
proximity7_const_t::const_d
float const_d
Definition: proximity7.h:273
proximity7_cfg_t::int_pin
pin_name_t int_pin
Definition: proximity7.h:290
proximity7_const_t::glass_attenuation
float glass_attenuation
Definition: proximity7.h:270
proximity7_cfg_t::sda
pin_name_t sda
Definition: proximity7.h:285
proximity7_set_low_proximity_threshold
void proximity7_set_low_proximity_threshold(proximity7_t *ctx, uint16_t low_proximity_threshold)
Setting low proximity threshold.
proximity7_get_als_data_ch1
uint16_t proximity7_get_als_data_ch1(proximity7_t *ctx)
Getting channel 1 measurement data.
proximity7_t::int_pin
digital_in_t int_pin
Definition: proximity7.h:250
proximity7_init
uint8_t proximity7_init(proximity7_t *ctx, proximity7_cfg_t *cfg)
Initialization function.
proximity7_t::const_c
float const_c
Definition: proximity7.h:262
proximity7_default_cfg
void proximity7_default_cfg(proximity7_t *ctx)
Click Default Configuration function.
proximity7_t::device_factor
float device_factor
Definition: proximity7.h:264
proximity7_set_int_persistance
void proximity7_set_int_persistance(proximity7_t *ctx, uint16_t proximity_int_persistence, uint16_t als_int_persistence)
Setting int_pinerrupt persistance.
proximity7_const_t::const_b
float const_b
Definition: proximity7.h:271
proximity7_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: proximity7.h:294
proximity7_set_constants
void proximity7_set_constants(proximity7_t *ctx, proximity7_const_t *set_const_data)
Generic read function.
proximity7_t::const_b
float const_b
Definition: proximity7.h:261
proximity7_cfg_t::i2c_address
uint8_t i2c_address
Definition: proximity7.h:295
proximity7_set_wait_time
uint8_t proximity7_set_wait_time(proximity7_t *ctx, float wait_time)
Setting wait time.
proximity7_t::slave_address
uint8_t slave_address
Definition: proximity7.h:258
proximity7_const_t
Definition: proximity7.h:269
proximity7_get_proximity_data
uint16_t proximity7_get_proximity_data(proximity7_t *ctx)
Getting proximity measurement data.
proximity7_set_proximity_pulse_count
void proximity7_set_proximity_pulse_count(proximity7_t *ctx, uint8_t proximity_pulse_count)
Setting proximity pulse count.
proximity7_set_als_integration_time
uint8_t proximity7_set_als_integration_time(proximity7_t *ctx, float integration_time)
Setting ALS int_pinegration time.
proximity7_set_low_alsCh0_threshold
void proximity7_set_low_alsCh0_threshold(proximity7_t *ctx, uint16_t low_als_ch0_threshold)
Setting low ALS Ch0 threshold value.