proximity7  2.0.0.0
proximity7.h
Go to the documentation of this file.
1 /*
2  * MikroSDK - MikroE Software Development Kit
3  * Copyright (c) 2019, MikroElektronika - www.mikroe.com
4  * All rights reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  */
24 
33 // ----------------------------------------------------------------------------
34 
35 #ifndef PROXIMITY7_H
36 #define PROXIMITY7_H
37 
38 #include "drv_digital_out.h"
39 #include "drv_digital_in.h"
40 #include "drv_i2c_master.h"
41 
42 
43 // -------------------------------------------------------------- PUBLIC MACROS
53 #define PROXIMITY7_MAP_MIKROBUS( cfg, mikrobus ) \
54  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
55  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
56  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT ); \
57 
63 #define PROXIMITY7_RETVAL uint8_t
64 
65 #define PROXIMITY7_OK 0x00
66 #define PROXIMITY7_INIT_ERROR 0xFF
67 
73 #define PROXIMITY7_DEVICE_ADDRESS 0x39
74 
80 #define PROXIMITY7_REPEATED_BYTE 0x80
81 #define PROXIMITY7_AUTO_INCREMENT 0xA0
82 #define PROXIMITY7_RESERVED 0xC0
83 #define PROXIMITY7_SPECIAL_FUNCTION 0xE0
84 
90 #define PROXIMITY7_NO_ACTION 0x00
91 #define PROXIMITY7_PROXIMITY_INT_PIN_CLEAR 0x05
92 #define PROXIMITY7_ALS_INT_PIN_CLEAR 0x06
93 #define PROXIMITY7_PROXIMITY_AND_ALS_INT_PIN_CLEAR 0x07
94 
100 #define PROXIMITY7_ENABLE 0x00
101 #define PROXIMITY7_ALS_ADC_TIME 0x01
102 #define PROXIMITY7_PROXIMITY_ADC_TIME 0x02
103 #define PROXIMITY7_WAIT_TIME 0x03
104 #define PROXIMITY7_LOW_ALS_INT_PIN_THRESHOLD_LOW 0x04
105 #define PROXIMITY7_LOW_ALS_INT_PIN_THRESHOLD_HIGH 0x05
106 #define PROXIMITY7_HIGH_ALS_INT_PIN_THRESHOLD_LOW 0x06
107 #define PROXIMITY7_HIGH_ALS_INT_PIN_THRESHOLD_HIGH 0x07
108 #define PROXIMITY7_LOW_PROXIMITY_INT_PIN_THRESHOLD_LOW 0x08
109 #define PROXIMITY7_LOW_PROXIMITY_INT_PIN_THRESHOLD_HIGH 0x09
110 #define PROXIMITY7_HIGH_PROXIMITY_INT_PIN_THRESHOLD_LOW 0x0A
111 #define PROXIMITY7_HIGH_PROXIMITY_INT_PIN_THRESHOLD_HIGH 0x0B
112 #define PROXIMITY7_INT_PIN_PERSISTANCE_FILTERS 0x0C
113 #define PROXIMITY7_CONFIGURATION 0x0D
114 #define PROXIMITY7_PROXIMITY_PULSE_COUNT 0x0E
115 #define PROXIMITY7_GAIN_CONTROL 0x0F
116 #define PROXIMITY7_ID 0x12
117 #define PROXIMITY7_STATUS 0x13
118 #define PROXIMITY7_CH0_ADC_DATA_LOW 0x14
119 #define PROXIMITY7_CH0_ADC_DATA_HIGH 0x15
120 #define PROXIMITY7_CH1_ADC_DATA_LOW 0x16
121 #define PROXIMITY7_CH1_ADC_DATA_HIGH 0x17
122 #define PROXIMITY7_PROXIMITY_ADC_DATA_LOW 0x18
123 #define PROXIMITY7_PROXIMITY_ADC_DATA_HIGH 0x19
124 #define PROXIMITY7_PROXIMITY_OFFSET 0x1E
125 
131 #define PROXIMITY7_SLEEP_AFTER_INT_PIN 0x40
132 #define PROXIMITY7_PROXIMITY_INT_PIN_MASK 0x20
133 #define PROXIMITY7_ALS_INT_PIN_MASK 0x10
134 #define PROXIMITY7_WAIT_ENA 0x08
135 #define PROXIMITY7_PROXIMITY_ENA 0x04
136 #define PROXIMITY7_ALS_ENA 0x02
137 #define PROXIMITY7_POWER_ON 0x01
138 
144 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_EVERY 0x00
145 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_1 0x10
146 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_2 0x20
147 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_3 0x30
148 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_4 0x40
149 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_5 0x50
150 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_6 0x60
151 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_7 0x70
152 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_8 0x80
153 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_9 0x90
154 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_10 0xA0
155 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_11 0xB0
156 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_12 0xC0
157 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_13 0xD0
158 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_14 0xE0
159 #define PROXIMITY7_PPERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_15 0xF0
160 
161 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_EVERY 0x00
162 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_1 0x01
163 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_2 0x02
164 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_3 0x03
165 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_5 0x04
166 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_10 0x05
167 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_15 0x06
168 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_20 0x07
169 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_25 0x08
170 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_30 0x09
171 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_35 0x0A
172 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_40 0x0B
173 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_45 0x0C
174 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_50 0x0D
175 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_55 0x0E
176 #define PROXIMITY7_APERS_CONSECUTIVE_VALUES_OUT_OF_RANGE_60 0x0F
177 
183 #define PROXIMITY7_ALS_GAIN_LEVEL 0x04
184 #define PROXIMITY7_WAIT_LONG 0x02
185 #define PROXIMITY7_PROXIMITY_DRIVE_LEVEL 0x01
186 
192 #define PROXIMITY7_LED_DRIVE_100mA 0x00
193 #define PROXIMITY7_LED_DRIVE_50mA 0x40
194 #define PROXIMITY7_LED_DRIVE_25mA 0x80
195 #define PROXIMITY7_LED_DRIVE_12p5mA 0xC0
196 #define PROXIMITY7_PROXIMITY_DIODE_CH1 0x20
197 #define PROXIMITY7_PROXIMITY_GAIN_1x 0x00
198 #define PROXIMITY7_PROXIMITY_GAIN_2x 0x04
199 #define PROXIMITY7_PROXIMITY_GAIN_4x 0x08
200 #define PROXIMITY7_PROXIMITY_GAIN_8x 0x0C
201 #define PROXIMITY7_ALS_GAIN_1x 0x00
202 #define PROXIMITY7_ALS_GAIN_8x 0x01
203 #define PROXIMITY7_ALS_GAIN_16x 0x02
204 #define PROXIMITY7_ALS_GAIN_120x 0x03
205 
211 #define PROXIMITY7_PROXIMITY_SATURATION_MASK 0x40
212 #define PROXIMITY7_PROXIMITY_INT_PINERRUPT_MASK 0x20
213 #define PROXIMITY7_ALS_INT_PINERRUPT_MASK 0x10
214 #define PROXIMITY7_PROXIMITY_VALID_MASK 0x02
215 #define PROXIMITY7_ALS_VALID_MASK 0x01
216 
222 #define PROXIMITY7_NEGATIVE 0x00
223 #define PROXIMITY7_POSITIVE 0x80
224  // End group macro
227 // --------------------------------------------------------------- PUBLIC TYPES
236 typedef struct
237 {
238  // Output pins
239 
240  // Input pins
241 
242  digital_in_t int_pin;
243 
244  // Modules
245 
246  i2c_master_t i2c;
247 
248  // ctx variable
249 
250  hal_i2c_address_t slave_address;
251 
253  float const_b;
254  float const_c;
255  float const_d;
257 
258 } proximity7_t;
259 
260 typedef struct
261 {
263  float const_b;
264  float const_c;
265  float const_d;
268 
272 typedef struct
273 {
274  // Communication gpio pins
275 
276  pin_name_t scl;
277  pin_name_t sda;
278 
279  // Additional gpio pins
280 
281 
282  pin_name_t int_pin;
283 
284  // static variable
285 
286  hal_i2c_speed_t i2c_speed;
287  hal_i2c_address_t i2c_address;
288 
290 
292 
293  // End types group
295 
296 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
297 
303 #ifdef __cplusplus
304 extern "C"{
305 #endif
306 
316 
324 uint8_t proximity7_init ( proximity7_t *ctx, proximity7_cfg_t *cfg );
325 
334 
345 void proximity7_generic_write ( proximity7_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
346 
358 void proximity7_generic_read ( proximity7_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
359 
360 uint8_t proximity7_set_als_integration_time( proximity7_t *ctx, float integration_time );
370 uint8_t proximity7_set_proximity_integration_time( proximity7_t *ctx, float integration_time );
380 uint8_t proximity7_set_wait_time( proximity7_t *ctx, float wait_time );
390 void proximity7_set_low_alsCh0_threshold( proximity7_t *ctx, uint16_t low_als_ch0_threshold );
400 void proximity7_set_high_alsCh0_threshold( proximity7_t *ctx, uint16_t high_als_ch0_threshold );
410 void proximity7_set_low_proximity_threshold( proximity7_t *ctx, uint16_t low_proximity_threshold );
420 void proximity7_set_high_proximity_threshold( proximity7_t *ctx, uint16_t high_proximity_threshold );
430 void proximity7_set_int_persistance( proximity7_t *ctx, uint16_t proximity_int_persistence, uint16_t als_int_persistence );
440 void proximity7_set_proximity_pulse_count( proximity7_t *ctx, uint8_t proximity_pulse_count );
477 uint8_t proximity7_set_proximity_offset( proximity7_t *ctx, uint8_t proximity_offset_sign, uint8_t proximity_offset_magnitude );
498 uint8_t proximity7_get_int_pin( proximity7_t *ctx );
511 
521 void proximity7_set_constants( proximity7_t *ctx, proximity7_const_t *set_const_data );
522 
523 #ifdef __cplusplus
524 }
525 #endif
526 #endif // _PROXIMITY7_H_
527  // End public_function group
530 
531 // ------------------------------------------------------------------------- END
uint16_t proximity7_get_als_data_ch0(proximity7_t *ctx)
Getting channel measurement data.
digital_in_t int_pin
Definition: proximity7.h:242
float const_d
Definition: proximity7.h:255
float const_c
Definition: proximity7.h:254
float const_c
Definition: proximity7.h:264
uint8_t proximity7_get_int_pin(proximity7_t *ctx)
Checking INT_pin pin status.
uint8_t proximity7_set_proximity_offset(proximity7_t *ctx, uint8_t proximity_offset_sign, uint8_t proximity_offset_magnitude)
Setting proximity offset.
float device_factor
Definition: proximity7.h:256
float const_d
Definition: proximity7.h:265
uint8_t proximity7_init(proximity7_t *ctx, proximity7_cfg_t *cfg)
Initialization function.
void proximity7_set_int_persistance(proximity7_t *ctx, uint16_t proximity_int_persistence, uint16_t als_int_persistence)
Setting int_pinerrupt persistance.
float const_b
Definition: proximity7.h:253
void proximity7_set_proximity_pulse_count(proximity7_t *ctx, uint8_t proximity_pulse_count)
Setting proximity pulse count.
void proximity7_set_low_alsCh0_threshold(proximity7_t *ctx, uint16_t low_als_ch0_threshold)
Setting low ALS Ch0 threshold value.
void proximity7_set_high_alsCh0_threshold(proximity7_t *ctx, uint16_t high_als_ch0_threshold)
Setting high ALS Ch0 threshold value.
hal_i2c_address_t slave_address
Definition: proximity7.h:250
hal_i2c_address_t i2c_address
Definition: proximity7.h:287
void proximity7_generic_read(proximity7_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic read function.
i2c_master_t i2c
Definition: proximity7.h:246
void proximity7_set_low_proximity_threshold(proximity7_t *ctx, uint16_t low_proximity_threshold)
Setting low proximity threshold.
void proximity7_generic_write(proximity7_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic write function.
uint8_t proximity7_set_proximity_integration_time(proximity7_t *ctx, float integration_time)
Setting proximity int_pinegration time.
void proximity7_default_cfg(proximity7_t *ctx)
Click Default Configuration function.
Click configuration structure definition.
Definition: proximity7.h:272
Click ctx object definition.
Definition: proximity7.h:236
uint8_t proximity7_set_als_integration_time(proximity7_t *ctx, float integration_time)
Setting ALS int_pinegration time.
pin_name_t int_pin
Definition: proximity7.h:282
pin_name_t sda
Definition: proximity7.h:277
void proximity7_set_high_proximity_threshold(proximity7_t *ctx, uint16_t high_proximity_threshold)
Setting high proximity threshold.
uint8_t proximity7_set_wait_time(proximity7_t *ctx, float wait_time)
Setting wait time.
void proximity7_set_constants(proximity7_t *ctx, proximity7_const_t *set_const_data)
Generic read function.
float device_factor
Definition: proximity7.h:266
pin_name_t scl
Definition: proximity7.h:276
float glass_attenuation
Definition: proximity7.h:262
float const_b
Definition: proximity7.h:263
uint16_t proximity7_get_proximity_data(proximity7_t *ctx)
Getting proximity measurement data.
void proximity7_cfg_setup(proximity7_cfg_t *cfg)
Config Object Initialization function.
hal_i2c_speed_t i2c_speed
Definition: proximity7.h:286
Definition: proximity7.h:260
float glass_attenuation
Definition: proximity7.h:252
uint16_t proximity7_get_als_data_ch1(proximity7_t *ctx)
Getting channel 1 measurement data.
float proximity7_get_lux_level(proximity7_t *ctx)
Calculating LUX level.
proximity7_const_t dev_const
Definition: proximity7.h:289