proximity10  2.0.0.0
proximity10.h
Go to the documentation of this file.
1 
2 /*
3  * MikroSDK - MikroE Software Development Kit
4  * Copyright (c) 2019, MikroElektronika - www.mikroe.com
5  * All rights reserved.
6  *
7  * Permission is hereby granted, free of charge, to any person obtaining a copy
8  * of this software and associated documentation files (the "Software"), to deal
9  * in the Software without restriction, including without limitation the rights
10  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11  * copies of the Software, and to permit persons to whom the Software is
12  * furnished to do so, subject to the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be included in
15  * all copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23  * SOFTWARE.
24  */
25 
34 // ----------------------------------------------------------------------------
35 
36 #ifndef PROXIMITY10_H
37 #define PROXIMITY10_H
38 
39 #include "drv_digital_out.h"
40 #include "drv_digital_in.h"
41 #include "drv_i2c_master.h"
42 
43 
44 // -------------------------------------------------------------- PUBLIC MACROS
54 #define PROXIMITY10_MAP_MIKROBUS( cfg, mikrobus ) \
55  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
56  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
57  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
58 
64 #define PROXIMITY10_RETVAL uint8_t
65 
66 #define PROXIMITY10_OK 0x00
67 #define PROXIMITY10_INIT_ERROR 0xFF
68 
74 #define PROXIMITY10_DEFAULT_DEV_ADDR 0x5A
75 
81 #define PROXIMITY10_PART_ID_REG 0x00
82 #define PROXIMITY10_REV_ID_REG 0x01
83 #define PROXIMITY10_SEQ_ID_REG 0x02
84 #define PROXIMITY10_INT_CFG_REG 0x03
85 #define PROXIMITY10_IRQ_EN_REG 0x04
86 #define PROXIMITY10_IRQ_MODE1_REG 0x05
87 #define PROXIMITY10_IRQ_MODE2_REG 0x06
88 #define PROXIMITY10_HW_KEY_REG 0x07
89 #define PROXIMITY10_MEAS_RATE_REG 0x08
90 #define PROXIMITY10_ALS_RATE_REG 0x09
91 #define PROXIMITY10_PS_RATE_REG 0x0A
92 #define PROXIMITY10_ALS_LOW_TH_REG 0x0B
93 #define PROXIMITY10_ALS_HIGH_TH_REG 0x0D
94 #define PROXIMITY10_PS_LED21_REG 0x0F
95 #define PROXIMITY10_PS_LED3_REG 0x10
96 #define PROXIMITY10_PS1_TH_REG 0x11
97 #define PROXIMITY10_PS2_TH_REG 0x13
98 #define PROXIMITY10_PS3_TH_REG 0x15
99 #define PROXIMITY10_PARAM_WR_REG 0x17
100 #define PROXIMITY10_COMMAND_REG 0x18
101 #define PROXIMITY10_RESPONSE_REG 0x20
102 #define PROXIMITY10_IRQ_STATUS_REG 0x21
103 #define PROXIMITY10_ALS_VIS_DATA_REG 0x22
104 #define PROXIMITY10_ALS_IR_DATA_REG 0x24
105 #define PROXIMITY10_PS1_DATA_REG 0x26
106 #define PROXIMITY10_PS2_DATA_REG 0x28
107 #define PROXIMITY10_PS3_DATA_REG 0x2A
108 #define PROXIMITY10_AUX_DATA_REG 0x2C
109 #define PROXIMITY10_PARAM_RD_REG 0x2E
110 #define PROXIMITY10_CHIP_STATUS_REG 0x30
111 #define PROXIMITY10_ANA_IN_KEY_REG 0x3B
112 
118 #define PROXIMITY10_INT_HOST_CLEAR 0x00
119 #define PROXIMITY10_INT_AUTO_CLEAR 0x02
120 #define PROXIMITY10_INT_PIN_EN 0x01
121 
122 #define PROXIMITY10_CMD_INT_EN 0x20
123 #define PROXIMITY10_PS3_INT_EN 0x10
124 #define PROXIMITY10_PS2_INT_EN 0x08
125 #define PROXIMITY10_PS1_INT_EN 0x04
126 #define PROXIMITY10_ALS_INT1_EN 0x02
127 #define PROXIMITY10_ALS_INT0_EN 0x01
128 #define PROXIMITY10_ALL_INT_DIS 0x00
129 
130 #define PROXIMITY10_PS2_INT_MEAS_COMPLETE 0x00
131 #define PROXIMITY10_PS2_INT_MEAS_CROSS_TH 0x40
132 #define PROXIMITY10_PS2_INT_MEAS_GREATER_TH 0xC0
133 #define PROXIMITY10_PS1_INT_MEAS_COMPLETE 0x00
134 #define PROXIMITY10_PS1_INT_MEAS_CROSS_TH 0x10
135 #define PROXIMITY10_PS1_INT_MEAS_GREATER_TH 0x30
136 #define PROXIMITY10_CMD_INT_RESP_WRITTEN 0x00
137 #define PROXIMITY10_CMD_INT_RESP_ERROR 0x04
138 #define PROXIMITY10_PS3_INT_MEAS_COMPLETE 0x00
139 #define PROXIMITY10_PS3_INT_MEAS_CROSS_TH 0x01
140 #define PROXIMITY10_PS3_INT_MEAS_GREATER_TH 0x03
141 
142 #define PROXIMITY10_HW_KEY 0x17
143 
144 #define PROXIMITY10_DEV_WAKEUP_EVERY_10MS 0x84
145 #define PROXIMITY10_DEV_WAKEUP_EVERY_20MS 0x94
146 #define PROXIMITY10_DEV_WAKEUP_EVERY_100MS 0xB9
147 #define PROXIMITY10_DEV_WAKEUP_EVERY_496MS 0xDF
148 #define PROXIMITY10_DEV_WAKEUP_EVERY_1984MS 0xFF
149 
150 #define PROXIMITY10_AUTONOM_MEAS_DIS 0x00
151 #define PROXIMITY10_MEAS_AFTER_EVERY_WAKEUP 0x08
152 #define PROXIMITY10_MEAS_AFTER_10_TIMES_WAKEUP 0x32
153 #define PROXIMITY10_MEAS_AFTER_100_TIMES_WAKEUP 0x69
154 
155 #define PROXIMITY10_LED_NO_CURRENT 0x00
156 #define PROXIMITY10_LED_MIN_CURRENT 0x01
157 #define PROXIMITY10_LED_MAX_CURRENT 0x0F
158 
164 #define PROXIMITY10_INVALID_CMD_ENCOUNT 0x80
165 #define PROXIMITY10_ADC_OVRFLOW_ENCOUNT_PS1 0x88
166 #define PROXIMITY10_ADC_OVRFLOW_ENCOUNT_PS2 0x89
167 #define PROXIMITY10_ADC_OVRFLOW_ENCOUNT_PS3 0x8A
168 #define PROXIMITY10_ADC_OVRFLOW_ENCOUNT_ALS_VIS 0x8C
169 #define PROXIMITY10_ADC_OVRFLOW_ENCOUNT_ALS_IR 0x8D
170 #define PROXIMITY10_ADC_OVRFLOW_ENCOUNT_AUX 0x8E
171 
177 #define PROXIMITY10_CMD_INT_FLAG 0x20
178 #define PROXIMITY10_PS3_INT_FLAG 0x10
179 #define PROXIMITY10_PS2_INT_FLAG 0x08
180 #define PROXIMITY10_PS1_INT_FLAG 0x04
181 #define PROXIMITY10_ALS_INT_FLAG 0x03
182 #define PROXIMITY10_INT_CLEARED 0x00
183 
184 #define PROXIMITY10_RUNNING_FLAG 0x04
185 #define PROXIMITY10_SUSPEND_FLAG 0x02
186 #define PROXIMITY10_SLEEP_FLAG 0x01
187 
193 #define PROXIMITY10_I2C_ADDR_PARAM 0x00
194 #define PROXIMITY10_CHLIST_PARAM 0x01
195 #define PROXIMITY10_PSLED12_SEL_PARAM 0x02
196 #define PROXIMITY10_PSLED3_SEL_PARAM 0x03
197 #define PROXIMITY10_PS_ENCODING_PARAM 0x05
198 #define PROXIMITY10_ALS_ENCODING_PARAM 0x06
199 #define PROXIMITY10_PS1_ADCMUX_PARAM 0x07
200 #define PROXIMITY10_PS2_ADCMUX_PARAM 0x08
201 #define PROXIMITY10_PS3_ADCMUX_PARAM 0x09
202 #define PROXIMITY10_PS_ADC_COUNT_PARAM 0x0A
203 #define PROXIMITY10_PS_ADC_GAIN_PARAM 0x0B
204 #define PROXIMITY10_PS_ADC_MISC_PARAM 0x0C
205 #define PROXIMITY10_ALS_IR_ADCMUX_PARAM 0x0E
206 #define PROXIMITY10_AUX_ADCMUX_PARAM 0x0F
207 #define PROXIMITY10_ALS_VIS_ADC_COUNT_PARAM 0x10
208 #define PROXIMITY10_ALS_VIS_ADC_GAIN_PARAM 0x11
209 #define PROXIMITY10_ALS_VIS_ADC_MISC_PARAM 0x12
210 #define PROXIMITY10_ALS_HYST_PARAM 0x16
211 #define PROXIMITY10_PS_HYST_PARAM 0x17
212 #define PROXIMITY10_PS_HISTORY_PARAM 0x18
213 #define PROXIMITY10_ALS_HISTORY_PARAM 0x19
214 #define PROXIMITY10_ADC_OFFSET_PARAM 0x1A
215 #define PROXIMITY10_LED_REC_PARAM 0x1C
216 #define PROXIMITY10_ALS_IR_ADC_COUNT_PARAM 0x1D
217 #define PROXIMITY10_ALS_IR_ADC_GAIN_PARAM 0x1E
218 #define PROXIMITY10_ALS_IR_ADC_MISC_PARAM 0x1F
219 
225 #define PROXIMITY10_EN_AUX 0x40
226 #define PROXIMITY10_EN_ALS_IR 0x20
227 #define PROXIMITY10_EN_ALS_VIS 0x10
228 #define PROXIMITY10_EN_PS3 0x04
229 #define PROXIMITY10_EN_PS2 0x02
230 #define PROXIMITY10_EN_PS1 0x01
231 
232 #define PROXIMITY10_NO_LED_DRIVE 0x00
233 #define PROXIMITY10_LED1_DRIVE_EN 0x01
234 #define PROXIMITY10_LED2_DRIVE_EN 0x02
235 #define PROXIMITY10_LED3_DRIVE_EN 0x04
236 
237 #define PROXIMITY10_ADC_REC_1_CLOCK 0x00
238 #define PROXIMITY10_ADC_REC_7_CLOCK 0x10
239 #define PROXIMITY10_ADC_REC_15_CLOCK 0x20
240 #define PROXIMITY10_ADC_REC_31_CLOCK 0x30
241 #define PROXIMITY10_ADC_REC_63_CLOCK 0x40
242 #define PROXIMITY10_ADC_REC_127_CLOCK 0x50
243 #define PROXIMITY10_ADC_REC_255_CLOCK 0x60
244 #define PROXIMITY10_ADC_REC_511_CLOCK 0x70
245 
246 #define PROXIMITY10_ADC_CLOCK_DIV_1 0x00
247 #define PROXIMITY10_ADC_CLOCK_DIV_2 0x01
248 #define PROXIMITY10_ADC_CLOCK_DIV_4 0x02
249 #define PROXIMITY10_ADC_CLOCK_DIV_8 0x03
250 #define PROXIMITY10_ADC_CLOCK_DIV_16 0x04
251 #define PROXIMITY10_ADC_CLOCK_DIV_32 0x05
252 #define PROXIMITY10_ADC_CLOCK_DIV_64 0x06
253 #define PROXIMITY10_ADC_CLOCK_DIV_128 0x07
254 
255 #define PROXIMITY10_NORMAL_SIGNAL_RANGE 0x00
256 #define PROXIMITY10_HIGH_SIGNAL_RANGE 0x20
257 #define PROXIMITY10_RAW_ADC_MEAS_MODE 0x00
258 #define PROXIMITY10_NORMAL_PROX_MEAS_MODE 0x04
259 
260 #define PROXIMITY10_ADC_INPUT_SMALL_IR 0x00
261 #define PROXIMITY10_ADC_INPUT_LARGE_IR 0x03
262 #define PROXIMITY10_ADC_INPUT_VIS_PHOTODIODE 0x02
263 #define PROXIMITY10_ADC_INPUT_NO_PHOTODIODE 0x06
264 #define PROXIMITY10_ADC_INPUT_GND 0x25
265 #define PROXIMITY10_ADC_INPUT_TEMP 0x65
266 #define PROXIMITY10_ADC_INPUT_VDD 0x75
267 
268 #define PROXIMITY10_2_CONS_SAMPLES 0x03
269 #define PROXIMITY10_3_CONS_SAMPLES 0x07
270 #define PROXIMITY10_8_CONS_SAMPLES 0xFF
271 
277 #define PROXIMITY10_PARAM_QUERY_CMD 0x80
278 #define PROXIMITY10_PARAM_SET_CMD 0xA0
279 #define PROXIMITY10_PARAM_AND_CMD 0xC0
280 #define PROXIMITY10_PARAM_OR_CMD 0xE0
281 #define PROXIMITY10_NOP_CMD 0x00
282 #define PROXIMITY10_RESET_CMD 0x01
283 #define PROXIMITY10_BUSADDR_CMD 0x02
284 #define PROXIMITY10_PS_FORCE_CMD 0x05
285 #define PROXIMITY10_ALS_FORCE_CMD 0x06
286 #define PROXIMITY10_PSALS_FORCE_CMD 0x07
287 #define PROXIMITY10_PS_PAUSE_CMD 0x09
288 #define PROXIMITY10_ALS_PAUSE_CMD 0x0A
289 #define PROXIMITY10_PSALS_PAUSE_CMD 0x0B
290 #define PROXIMITY10_PS_AUTO_CMD 0x0D
291 #define PROXIMITY10_ALS_AUTO_CMD 0x0E
292 #define PROXIMITY10_PSALS_AUTO_CMD 0x0F
293 
299 #define PROXIMITY10_INT_CLEAR_DIS 0x00
300 #define PROXIMITY10_INT_CLEAR_EN 0x01
301 #define PROXIMITY10_CLEAR_INT_CMD 0xFF
302 
308 #define PROXIMITY10_OK 0x00
309 #define PROXIMITY10_INVALID_REG_ADDR 0x01
310 #define PROXIMITY10_INVALID_PARAM_ADDR 0x02
311 #define PROXIMITY10_INVALID_CMD 0x03
312  // End group macro
315 // --------------------------------------------------------------- PUBLIC TYPES
324 typedef struct
325 {
326  // Input pins
327 
328  digital_in_t int_pin;
329 
330  // Modules
331 
332  i2c_master_t i2c;
333 
334  // ctx variable
335 
336  hal_i2c_address_t slave_address;
337 
338 } proximity10_t;
339 
343 typedef struct
344 {
345  // Communication gpio pins
346 
347  pin_name_t scl;
348  pin_name_t sda;
349 
350  // Additional gpio pins
351 
352  pin_name_t int_pin;
353 
354  // static variable
355 
356  hal_i2c_speed_t i2c_speed;
357  hal_i2c_address_t i2c_address;
358 
360  // End types group
362 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
363 
369 #ifdef __cplusplus
370 extern "C"{
371 #endif
372 
382 
391 
400 
411 uint8_t proximity10_generic_write ( proximity10_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
412 
424 uint8_t proximity10_generic_read ( proximity10_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
425 
437 uint8_t proximity10_check_int_status ( proximity10_t *ctx, uint8_t bit_mask, uint8_t clear_en );
438 
449 uint8_t proximity10_check_chip_status ( proximity10_t *ctx, uint8_t bit_mask );
450 
461 
474 uint8_t proximity10_send_command ( proximity10_t *ctx, uint8_t prox_command );
475 
488 uint8_t proximity10_param_query ( proximity10_t *ctx, uint8_t param_addr );
489 
502 uint8_t proximity10_param_set ( proximity10_t *ctx, uint8_t param_addr, uint8_t param_value );
503 
516 uint8_t proximity10_param_and ( proximity10_t *ctx, uint8_t param_addr, uint8_t param_value );
517 
530 uint8_t proximity10_param_or ( proximity10_t *ctx, uint8_t param_addr, uint8_t param_value );
531 
532 #ifdef __cplusplus
533 }
534 #endif
535 #endif // _PROXIMITY10_H_
536  // End public_function group
539 
540 // ------------------------------------------------------------------------- END
Click configuration structure definition.
Definition: proximity10.h:343
uint8_t proximity10_check_int_pin(proximity10_t *ctx)
Check INT Pin function.
hal_i2c_address_t slave_address
Definition: proximity10.h:336
uint8_t proximity10_param_or(proximity10_t *ctx, uint8_t param_addr, uint8_t param_value)
Parameter OR function.
void proximity10_default_cfg(proximity10_t *ctx)
Click Default Configuration function.
uint8_t proximity10_send_command(proximity10_t *ctx, uint8_t prox_command)
Command Send function.
i2c_master_t i2c
Definition: proximity10.h:332
pin_name_t sda
Definition: proximity10.h:348
PROXIMITY10_RETVAL proximity10_init(proximity10_t *ctx, proximity10_cfg_t *cfg)
Initialization function.
uint8_t proximity10_generic_read(proximity10_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic read function.
pin_name_t int_pin
Definition: proximity10.h:352
hal_i2c_speed_t i2c_speed
Definition: proximity10.h:356
uint8_t proximity10_param_and(proximity10_t *ctx, uint8_t param_addr, uint8_t param_value)
Parameter AND function.
uint8_t proximity10_param_set(proximity10_t *ctx, uint8_t param_addr, uint8_t param_value)
Parameter Set function.
#define PROXIMITY10_RETVAL
Definition: proximity10.h:64
hal_i2c_address_t i2c_address
Definition: proximity10.h:357
uint8_t proximity10_generic_write(proximity10_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic write function.
uint8_t proximity10_check_chip_status(proximity10_t *ctx, uint8_t bit_mask)
Check Chip Status function.
Click ctx object definition.
Definition: proximity10.h:324
uint8_t proximity10_check_int_status(proximity10_t *ctx, uint8_t bit_mask, uint8_t clear_en)
Check INT Flags function.
digital_in_t int_pin
Definition: proximity10.h:328
void proximity10_cfg_setup(proximity10_cfg_t *cfg)
Config Object Initialization function.
uint8_t proximity10_param_query(proximity10_t *ctx, uint8_t param_addr)
Parameter Query function.
pin_name_t scl
Definition: proximity10.h:347