uv4  2.0.0.0
uv4.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 UV4_H
36 #define UV4_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 UV4_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 UV4_RETVAL uint8_t
64 
65 #define UV4_OK 0x00
66 #define UV4_INIT_ERROR 0xFF
67 
73 #define UV4_PART_ID_REG 0x00
74 #define UV4_HW_ID_REG 0x01
75 #define UV4_REV_ID_REG 0x02
76 #define UV4_INFO_0_REG 0x03
77 #define UV4_INFO_1_REG 0x04
78 #define UV4_INPUT_3_REG 0x07
79 #define UV4_INPUT_2_REG 0x08
80 #define UV4_INPUT_1_REG 0x09
81 #define UV4_INPUT_0_REG 0x0A
82 #define UV4_COMMAND_REG 0x0B
83 #define UV4_IRQ_ENABLE_REG 0x0F
84 #define UV4_RESPONSE_1_REG 0x10
85 #define UV4_RESPONSE_0_REG 0x11
86 #define UV4_IRQ_STATUS_REG 0x12
87 #define UV4_OUTPUT_0_REG 0x13
88 #define UV4_OUTPUT_1_REG 0x14
89 #define UV4_OUTPUT_2_REG 0x15
90 #define UV4_OUTPUT_3_REG 0x16
91 #define UV4_OUTPUT_4_REG 0x17
92 #define UV4_OUTPUT_5_REG 0x18
93 #define UV4_OUTPUT_6_REG 0x19
94 #define UV4_OUTPUT_7_REG 0x1A
95 #define UV4_OUTPUT_8_REG 0x1B
96 #define UV4_OUTPUT_9_REG 0x1C
97 #define UV4_OUTPUT_10_REG 0x1D
98 #define UV4_OUTPUT_11_REG 0x1E
99 #define UV4_OUTPUT_12_REG 0x1F
100 #define UV4_OUTPUT_13_REG 0x20
101 #define UV4_OUTPUT_14_REG 0x21
102 #define UV4_OUTPUT_15_REG 0x22
103 #define UV4_OUTPUT_16_REG 0x23
104 #define UV4_OUTPUT_17_REG 0x24
105 #define UV4_OUTPUT_18_REG 0x25
106 #define UV4_OUTPUT_19_REG 0x26
107 #define UV4_OUTPUT_20_REG 0x27
108 #define UV4_OUTPUT_21_REG 0x28
109 #define UV4_OUTPUT_22_REG 0x29
110 #define UV4_OUTPUT_23_REG 0x2A
111 #define UV4_OUTPUT_24_REG 0x2B
112 #define UV4_OUTPUT_25_REG 0x2C
113 
119 #define UV4_I2C_ADDR_PARAM 0x00
120 #define UV4_CHAN_LIST_PARAM 0x01
121 #define UV4_ADCCONFIG_0_PARAM 0x02
122 #define UV4_ADCSENS_0_PARAM 0x03
123 #define UV4_ADCPOST_0_PARAM 0x04
124 #define UV4_MEASCONFIG_0_PARAM 0x05
125 #define UV4_ADCCONFIG_1_PARAM 0x06
126 #define UV4_ADCSENS_1_PARAM 0x07
127 #define UV4_ADCPOST_1_PARAM 0x08
128 #define UV4_MEASCONFIG_1_PARAM 0x09
129 #define UV4_ADCCONFIG_2_PARAM 0x0A
130 #define UV4_ADCSENS_2_PARAM 0x0B
131 #define UV4_ADCPOST_2_PARAM 0x0C
132 #define UV4_MEASCONFIG_2_PARAM 0x0D
133 #define UV4_ADCCONFIG_3_PARAM 0x0E
134 #define UV4_ADCSENS_3_PARAM 0x0F
135 #define UV4_ADCPOST_3_PARAM 0x10
136 #define UV4_MEASCONFIG_3_PARAM 0x11
137 #define UV4_ADCCONFIG_4_PARAM 0x12
138 #define UV4_ADCSENS_4_PARAM 0x13
139 #define UV4_ADCPOST_4_PARAM 0x14
140 #define UV4_MEASCONFIG_4_PARAM 0x15
141 #define UV4_ADCCONFIG_5_PARAM 0x16
142 #define UV4_ADCSENS_5_PARAM 0x17
143 #define UV4_ADCPOST_5_PARAM 0x18
144 #define UV4_MEASCONFIG_5_PARAM 0x19
145 #define UV4_MEASRATE_H_PARAM 0x1A
146 #define UV4_MEASRATE_L_PARAM 0x1B
147 #define UV4_MEASCOUNT_0_PARAM 0x1C
148 #define UV4_MEASCOUNT_1_PARAM 0x1D
149 #define UV4_MEASCOUNT_2_PARAM 0x1E
150 #define UV4_THRESHOLD0_H_PARAM 0x25
151 #define UV4_THRESHOLD0_L_PARAM 0x26
152 #define UV4_THRESHOLD1_H_PARAM 0x27
153 #define UV4_THRESHOLD1_L_PARAM 0x28
154 #define UV4_THRESHOLD2_H_PARAM 0x29
155 #define UV4_THRESHOLD2_L_PARAM 0x2A
156 #define UV4_BURST_PARAM 0x2B
157 
163 #define UV4_RESET_CTR_CMD 0x00
164 #define UV4_RESET_SW_CMD 0x01
165 #define UV4_FORCE_CMD 0x11
166 #define UV4_PAUSE_CMD 0x12
167 #define UV4_START_CMD 0x13
168 
174 #define UV4_ALL_INTERR_DISABLE 0x00
175 #define UV4_CHAN0_INTERR_ENABLE 0x01
176 #define UV4_CHAN1_INTERR_ENABLE 0x02
177 #define UV4_CHAN2_INTERR_ENABLE 0x04
178 #define UV4_CHAN3_INTERR_ENABLE 0x08
179 #define UV4_CHAN4_INTERR_ENABLE 0x10
180 #define UV4_CHAN5_INTERR_ENABLE 0x20
181 
187 #define UV4_ALL_CHANNELS_DISABLE 0x00
188 #define UV4_CHAN0_ENABLE 0x01
189 #define UV4_CHAN1_ENABLE 0x02
190 #define UV4_CHAN2_ENABLE 0x04
191 #define UV4_CHAN3_ENABLE 0x08
192 #define UV4_CHAN4_ENABLE 0x10
193 #define UV4_CHAN5_ENABLE 0x20
194 
200 #define UV4_DATARATE_1024 0x00
201 #define UV4_DATARATE_2048 0x20
202 #define UV4_DATARATE_4096 0x40
203 #define UV4_DATARATE_512 0x60
204 
210 #define UV4_OPT_FUNC_SMALL_IR 0x00
211 #define UV4_OPT_FUNC_MEDIUM_IR 0x01
212 #define UV4_OPT_FUNC_LARGE_IR 0x02
213 #define UV4_OPT_FUNC_WHITE 0x0B
214 #define UV4_OPT_FUNC_LARGE_WHITE 0x0D
215 #define UV4_OPT_FUNC_UV 0x18
216 #define UV4_OPT_FUNC_UV_DEEP 0x19
217 
223 #define UV4_NORMAL_GAIN 0x00
224 #define UV4_HIGH_RANGE 0x80
225 #define UV4_1_MEASUREMENT 0x00
226 #define UV4_2_MEASUREMENTS 0x10
227 #define UV4_4_MEASUREMENTS 0x20
228 #define UV4_8_MEASUREMENTS 0x30
229 #define UV4_16_MEASUREMENTS 0x40
230 #define UV4_32_MEASUREMENTS 0x50
231 #define UV4_64_MEASUREMENTS 0x60
232 #define UV4_128_MEASUREMENTS 0x70
233 #define UV4_MEASTIME_24MICROSEC 0x00
234 #define UV4_MEASTIME_48MICROSEC 0x01
235 #define UV4_MEASTIME_96MICROSEC 0x02
236 #define UV4_MEASTIME_25MILISEC 0x0A
237 #define UV4_MEASTIME_50MILISEC 0x0B
238 
244 #define UV4_16BIT_OUT 0x00
245 #define UV4_24BIT_OUT 0x40
246 #define UV4_NO_SHIFT_RIGHT 0x00
247 #define UV4_1BIT_SHIFT_RIGHT 0x08
248 #define UV4_2BITS_SHIFT_RIGHT 0x10
249 #define UV4_3BITS_SHIFT_RIGHT 0x18
250 #define UV4_4BITS_SHIFT_RIGHT 0x20
251 
257 #define UV4_THRESHOLDS_DISABLE 0x00
258 #define UV4_THRESHOLD0_INTERR_ENABLE 0x01
259 #define UV4_THRESHOLD1_INTERR_ENABLE 0x02
260 #define UV4_THRESHOLD2_INTERR_ENABLE 0x03
261 
267 #define UV4_NO_COUNTER_SELECTED 0x00
268 #define UV4_MEASCOUNT1_SELECT 0x40
269 #define UV4_MEASCOUNT2_SELECT 0x80
270 #define UV4_MEASCOUNT3_SELECT 0xC0
271 
277 #define UV4_BURST_DISABLE 0x00
278 #define UV4_BURST_ENABLE 0x80
279 
285 #define UV4_AUTOINC_ENABLE 0x00
286 #define UV4_AUTOINC_DISABLE 0x40
287 
293 #define UV4_OK 0x00
294 #define UV4_ADDR_ERR 0x01
295 #define UV4_PARAM_ERR 0x02
296 #define UV4_CMMND_ERR 0x03
297 #define UV4_LOC_ERR 0x04
298 #define UV4_ACCM_OVERFLOW 0x05
299 #define UV4_BUFF_OVERFLOW 0x06
300 #define UV4_RST_OCCURED 0x07
301 #define UV4_INTERR_OCCURED 0xFF
302 #define UV4_NO_INTERR 0x00
303  // End group macro
306 // --------------------------------------------------------------- PUBLIC TYPES
315 typedef struct
316 {
317 
318  digital_in_t int_pin;
319 
320  // Modules
321 
322  i2c_master_t i2c;
323 
324  // ctx variable
325 
326  hal_i2c_address_t slave_address;
327 
328  uint8_t config_byte;
329 
330  uint8_t optical_data[ 6 ];
331 
332  uint8_t tmp;
333  uint8_t bit_size[6];
334  uint8_t inc_en;
335 
336 } uv4_t;
337 
341 typedef struct
342 {
343  // Communication gpio pins
344 
345  pin_name_t scl;
346  pin_name_t sda;
347 
348  // Additional gpio pins
349 
350  pin_name_t int_pin;
351 
352  // static variable
353 
354  hal_i2c_speed_t i2c_speed;
355  hal_i2c_address_t i2c_address;
356 
357  uint8_t config_byte;
358  uint8_t optical_data[ 6 ];
359 
360  uint8_t dev_tmp;
361 
362 } uv4_cfg_t;
363  // End types group
365 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
366 
372 #ifdef __cplusplus
373 extern "C"{
374 #endif
375 
384 void uv4_cfg_setup ( uv4_cfg_t *cfg );
385 
394 UV4_RETVAL uv4_init ( uv4_t *ctx, uv4_cfg_t *cfg );
395 
403 void uv4_default_cfg ( uv4_t* ctx );
404 
415 UV4_RETVAL uv4_write_reg ( uv4_t* ctx, const uint8_t reg_address, const uint8_t transfer_data );
416 
430 UV4_RETVAL uv4_read_reg ( uv4_t* ctx, uint8_t reg_address, uint8_t* data_out,
431  uint8_t n_bytes );
432 
446 UV4_RETVAL uv4_write_param_data ( uv4_t* ctx, uint8_t param_address, uint8_t transfer_data );
447 
461 UV4_RETVAL uv4_read_param_data(uv4_t* ctx, uint8_t param_address, uint8_t* param_out);
462 
473 void uv4_read_measurements(uv4_t* ctx, uint32_t* measure_out);
474 
488 UV4_RETVAL uv4_check_err_and_ctr(uv4_t* ctx, uint8_t* cnt_data);
489 
500 
501 #ifdef __cplusplus
502 }
503 #endif
504 #endif // _UV4_H_
505  // End public_function group
508 
509 // ------------------------------------------------------------------------- END
UV4_RETVAL uv4_check_err_and_ctr(uv4_t *ctx, uint8_t *cnt_data)
Error And Counter Check function.
uint8_t dev_tmp
Definition: uv4.h:360
uint8_t config_byte
Definition: uv4.h:328
digital_in_t int_pin
Definition: uv4.h:318
pin_name_t scl
Definition: uv4.h:345
uint8_t inc_en
Definition: uv4.h:334
void uv4_cfg_setup(uv4_cfg_t *cfg)
Config Object Initialization function.
UV4_RETVAL uv4_write_param_data(uv4_t *ctx, uint8_t param_address, uint8_t transfer_data)
Parameter Data Write Function.
UV4_RETVAL uv4_read_reg(uv4_t *ctx, uint8_t reg_address, uint8_t *data_out, uint8_t n_bytes)
Generic read function.
void uv4_default_cfg(uv4_t *ctx)
Click Default Configuration function.
i2c_master_t i2c
Definition: uv4.h:322
Click ctx object definition.
Definition: uv4.h:315
UV4_RETVAL uv4_read_param_data(uv4_t *ctx, uint8_t param_address, uint8_t *param_out)
Parameter Data Read Function.
UV4_RETVAL uv4_check_interr(uv4_t *ctx)
Error And Counter Check function.
UV4_RETVAL uv4_write_reg(uv4_t *ctx, const uint8_t reg_address, const uint8_t transfer_data)
Generic write function.
UV4_RETVAL uv4_init(uv4_t *ctx, uv4_cfg_t *cfg)
Initialization function.
uint8_t config_byte
Definition: uv4.h:357
void uv4_read_measurements(uv4_t *ctx, uint32_t *measure_out)
Measurements Read Function.
pin_name_t int_pin
Definition: uv4.h:350
uint8_t tmp
Definition: uv4.h:332
hal_i2c_address_t slave_address
Definition: uv4.h:326
pin_name_t sda
Definition: uv4.h:346
#define UV4_RETVAL
Definition: uv4.h:63
hal_i2c_address_t i2c_address
Definition: uv4.h:355
hal_i2c_speed_t i2c_speed
Definition: uv4.h:354
Click configuration structure definition.
Definition: uv4.h:341