proximity6  2.0.0.0
proximity6.h
Go to the documentation of this file.
1 
2 /*
3  * MikroSDK - MikroE Software Development Kit
4  * Copyright© 2020 MikroElektronika d.o.o.
5  *
6  * Permission is hereby granted, free of charge, to any person
7  * obtaining a copy of this software and associated documentation
8  * files (the "Software"), to deal in the Software without restriction,
9  * including without limitation the rights to use, copy, modify, merge,
10  * publish, distribute, sublicense, and/or sell copies of the Software,
11  * and to permit persons to whom the Software is furnished to do so,
12  * subject to the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be
15  * included in all copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
21  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
23  * OR OTHER DEALINGS IN THE SOFTWARE.
24  */
25 
34 // ----------------------------------------------------------------------------
35 
36 #ifndef PROXIMITY6_H
37 #define PROXIMITY6_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 PROXIMITY6_MAP_MIKROBUS( cfg, mikrobus ) \
55  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
56  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA )
57 
63 #define PROXIMITY6_RETVAL uint8_t
64 
65 #define PROXIMITY6_OK 0x00
66 #define PROXIMITY6_INIT_ERROR 0xFF
67 
73 #define PROXIMITY6_DATA_REGISTER_X1_REG 0x00
74 #define PROXIMITY6_DATA_REGISTER_X2_REG 0x01
75 #define PROXIMITY6_DATA_REGISTER_Y1_REG 0x02
76 #define PROXIMITY6_DATA_REGISTER_Y2_REG 0x03
77 #define PROXIMITY6_DATA_REGISTER_SAMPLE_I_REG 0x04
78 #define PROXIMITY6_DATA_REGISTER_SAMPLE_X_REG 0x05
79 #define PROXIMITY6_DATA_REGISTER_SAMPLE_Y_REG 0x06
80 #define PROXIMITY6_RESERVED1_REG 0x07
81 #define PROXIMITY6_ID_VERSION_REG 0x08
82 #define PROXIMITY6_SLAVE_ADDRESS_REG 0x09
83 #define PROXIMITY6_OSC_CAL_OUT_REG 0x0A
84 #define PROXIMITY6_RESERVED2 0x0C
85 #define PROXIMITY6_SW_RESET_REG 0x0F
86 #define PROXIMITY6_ADC_CONTROL_RESERVED1_REG 0x10
87 #define PROXIMITY6_ADC_CONTROL_RESERVED2_REG 0x11
88 #define PROXIMITY6_AFE_TRIM_REG 0x12
89 #define PROXIMITY6_AFE_MUX_TEST_REG 0x13
90 #define PROXIMITY6_RESERVED3_REG 0x14
91 #define PROXIMITY6_LED_TRIM_REG 0x16
92 #define PROXIMITY6_OS32K_REG 0x18
93 #define PROXIMITY6_OS32M_BYPASS_REG 0x19
94 #define PROXIMITY6_OS32M_TRIM_REG 0x1A
95 #define PROXIMITY6_ADC_SPACING_REG 0x1B
96 #define PROXIMITY6_INT_PIN_REG 0x1C
97 #define PROXIMITY6_INT_PIN_POL_REG 0x1D
98 #define PROXIMITY6_I2C_REG 0x1E
99 #define PROXIMITY6_FIFO_TH_REG 0x1F
100 #define PROXIMITY6_LED_OFFSET_WIDTH_GEST_REG 0x20
101 #define PROXIMITY6_LED_PERIOD_PULSES_GEST_REG 0x21
102 #define PROXIMITY6_LED_OFFSET_WIDTH_PROX_REG 0x22
103 #define PROXIMITY6_LED_PERIOD_PULSES_PROX_REG 0x23
104 #define PROXIMITY6_LED_MASK_REG 0x24
105 #define PROXIMITY6_AFE_CONT_GEST_REG 0x25
106 #define PROXIMITY6_AFE_CONT_PROX_REG 0x26
107 #define PROXIMITY6_AFE_MASK_REG 0x27
108 #define PROXIMITY6_GEST_DI_TH_REG 0x28
109 #define PROXIMITY6_ORIENTATION_REG 0x29
110 #define PROXIMITY6_PROX_TH_ON1_REG 0x2A
111 #define PROXIMITY6_PROX_TH_OFF1_REG 0x2B
112 #define PROXIMITY6_PROX_TH_ON2_REG 0x2C
113 #define PROXIMITY6_PROX_TH_OFF2_REG 0x2D
114 #define PROXIMITY6_PROX_TH_ON1_OFF1_HIGH_REG 0x2E
115 #define PROXIMITY6_PROX_TH_ON2_OFF2_HIGH_REG 0x2F
116 #define PROXIMITY6_TEST_MODE_REG 0x30
117 #define PROXIMITY6_POWER_DOWN_CONT_REG 0x32
118 #define PROXIMITY6_GAIN_CONT1_REG 0x38
119 #define PROXIMITY6_GAIN_CONT2_REG 0x39
120 #define PROXIMITY6_CH1_OFFSET_REG 0x3A
121 #define PROXIMITY6_CH2_OFFSET_REG 0x3B
122 #define PROXIMITY6_CH3_OFFSET_REG 0x3C
123 #define PROXIMITY6_CH4_OFFSET_REG 0x3D
124 #define PROXIMITY6_SLOPE_TH_REG 0x3E
125 #define PROXIMITY6_FREQ_REG 0x40
126 #define PROXIMITY6_LED_REF_REG 0x41
127 #define PROXIMITY6_OP_TIME_REG 0x42
128 #define PROXIMITY6_AFE_TIME_REG 0x43
129 #define PROXIMITY6_DSAMPLE_TIME_REG 0x44
130 #define PROXIMITY6_OPERATION_CONTROL_REG 0x45
131 #define PROXIMITY6_DEC_MODE_REG 0x46
132 #define PROXIMITY6_INT_MASK_REG 0x48
133 #define PROXIMITY6_INT_STATUS_REG 0x49
134 #define PROXIMITY6_I2C_STATUS_REG 0x4A
135 #define PROXIMITY6_DATA_BUFFER_OUT_REG 0x60
136 #define PROXIMITY6_DEBUG_X1L_REG 0x68
137 #define PROXIMITY6_DEBUG_X2L_REG 0x69
138 #define PROXIMITY6_DEBUG_Y1L_REG 0x6A
139 #define PROXIMITY6_DEBUG_Y2L_REG 0x6B
140 #define PROXIMITY6_DEBUG_X1H_REG 0x6C
141 #define PROXIMITY6_DEBUG_X2H_REG 0x6D
142 #define PROXIMITY6_DEBUG_Y1H_REG 0x6E
143 #define PROXIMITY6_DEBUG_Y2H_REG 0x6F
144 
150 #define PROXIMITY6_STANDBY_MODE 0
151 #define PROXIMITY6_PROXIMITY_MODE 1
152 #define PROXIMITY6_SAMPLE_MODE 2
153 #define PROXIMITY6_IDLE_MODE 3
154 
160 #define PROXIMITY6_RIGHT_POS 0
161 #define PROXIMITY6_LEFT_POS 1
162 #define PROXIMITY6_BOTTOM_POS 2
163 #define PROXIMITY6_UP_POS 3
164 #define PROXIMITY6_NO_DETECT_POS 4
165 
171 #define PROXIMITY6_RESOLUTION_300 0
172 #define PROXIMITY6_RESOLUTION_400 1
173 #define PROXIMITY6_RESOLUTION_500 2
174 #define PROXIMITY6_RESOLUTION_600 3
175 #define PROXIMITY6_RESOLUTION_700 4
176  // End group macro
179 // --------------------------------------------------------------- PUBLIC TYPES
188 typedef struct
189 {
190  // Input pins
191 
192  digital_in_t int_pin;
193 
194  // Modules
195 
196  i2c_master_t i2c;
197 
198  // ctx variable
199 
200  uint8_t slave_address;
201  uint8_t mode_sel;
202 
203 } proximity6_t;
204 
208 typedef struct
209 {
210  // Communication gpio pins
211 
212  pin_name_t scl;
213  pin_name_t sda;
214 
215  // Additional gpio pins
216 
217  pin_name_t int_pin;
218 
219  // static variable
220 
221  uint32_t i2c_speed;
222  uint8_t i2c_address;
223 
225 
226 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
227 
233 #ifdef __cplusplus
234 extern "C"{
235 #endif
236 
246 
256 
265 
276 void proximity6_generic_write ( proximity6_t *ctx, uint8_t reg, uint16_t *data_buf, uint8_t len );
277 
288 void proximity6_generic_read ( proximity6_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
289 
300 uint8_t proximity6_set_mode( proximity6_t *ctx, uint8_t select_mode );
301 
312 uint8_t proximity6_read_data( proximity6_t *ctx, uint16_t *axis_out );
313 
322 void proximity6_get_position( proximity6_t *ctx, uint8_t *position );
323 
335 uint8_t proximity6_display_data( proximity6_t *ctx, uint8_t *data_value, uint8_t set_resolution );
336 
345 
357 
358 #ifdef __cplusplus
359 }
360 #endif
361 #endif // _PROXIMITY6_H_
362  // End public_function group
365 
366 // ------------------------------------------------------------------------- END
proximity6_cfg_t::int_pin
pin_name_t int_pin
Definition: proximity6.h:217
proximity6_t::slave_address
uint8_t slave_address
Definition: proximity6.h:200
proximity6_check_interrupt
uint8_t proximity6_check_interrupt(proximity6_t *ctx)
Interrupt Check function.
proximity6_cfg_t
Click configuration structure definition.
Definition: proximity6.h:208
proximity6_display_data
uint8_t proximity6_display_data(proximity6_t *ctx, uint8_t *data_value, uint8_t set_resolution)
Data Display function.
proximity6_t::mode_sel
uint8_t mode_sel
Definition: proximity6.h:201
proximity6_t
Click ctx object definition.
Definition: proximity6.h:188
proximity6_t::int_pin
digital_in_t int_pin
Definition: proximity6.h:192
proximity6_generic_read
void proximity6_generic_read(proximity6_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic read function.
proximity6_cfg_setup
void proximity6_cfg_setup(proximity6_cfg_t *cfg)
Config Object Initialization function.
proximity6_default_cfg
void proximity6_default_cfg(proximity6_t *ctx)
Click Default Configuration function.
PROXIMITY6_RETVAL
#define PROXIMITY6_RETVAL
Definition: proximity6.h:63
proximity6_generic_write
void proximity6_generic_write(proximity6_t *ctx, uint8_t reg, uint16_t *data_buf, uint8_t len)
Generic write function.
proximity6_get_position
void proximity6_get_position(proximity6_t *ctx, uint8_t *position)
Position Get function.
proximity6_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: proximity6.h:221
proximity6_read_data
uint8_t proximity6_read_data(proximity6_t *ctx, uint16_t *axis_out)
Data Read function.
proximity6_load_settings
void proximity6_load_settings(proximity6_t *ctx)
Settings Load function.
proximity6_t::i2c
i2c_master_t i2c
Definition: proximity6.h:196
proximity6_init
PROXIMITY6_RETVAL proximity6_init(proximity6_t *ctx, proximity6_cfg_t *cfg)
Initialization function.
proximity6_cfg_t::sda
pin_name_t sda
Definition: proximity6.h:213
proximity6_cfg_t::i2c_address
uint8_t i2c_address
Definition: proximity6.h:222
proximity6_cfg_t::scl
pin_name_t scl
Definition: proximity6.h:212
proximity6_set_mode
uint8_t proximity6_set_mode(proximity6_t *ctx, uint8_t select_mode)
Mode Set function.