capsense2  2.0.0.0
capsense2.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2020 MikroElektronika d.o.o.
3 ** Contact: https://www.mikroe.com/contact
4 **
5 ** Permission is hereby granted, free of charge, to any person obtaining a copy
6 ** of this software and associated documentation files (the "Software"), to deal
7 ** in the Software without restriction, including without limitation the rights
8 ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 ** copies of the Software, and to permit persons to whom the Software is
10 ** furnished to do so, subject to the following conditions:
11 ** The above copyright notice and this permission notice shall be
12 ** included in all copies or substantial portions of the Software.
13 **
14 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16 ** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19 ** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 ** USE OR OTHER DEALINGS IN THE SOFTWARE.
21 ****************************************************************************/
22 
28 #ifndef CAPSENSE2_H
29 #define CAPSENSE2_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_i2c_master.h"
48 
69 #define CAPSENSE2_REG_MAIN_STATUS_CONTROL 0x00
70 #define CAPSENSE2_REG_BUTTON_STATUS_1 0x03
71 #define CAPSENSE2_REG_BUTTON_STATUS_2 0x04
72 #define CAPSENSE2_REG_BUILD_REVISION 0x05
73 #define CAPSENSE2_REG_SLIDER_POSITION_DATA 0x06
74 #define CAPSENSE2_REG_VENDOR_ID 0x08
75 #define CAPSENSE2_REG_VOLUMETRIC_STEP 0x09
76 #define CAPSENSE2_REG_NOISE_STATUS_1 0x0A
77 #define CAPSENSE2_REG_NOISE_STATUS_2 0x0B
78 #define CAPSENSE2_REG_LID_CLOSURE_STATUS_1 0x0C
79 #define CAPSENSE2_REG_LID_CLOSURE_STATUS_2 0x0D
80 #define CAPSENSE2_REG_GPIO_STATUS 0x0E
81 #define CAPSENSE2_REG_GROUP_STATUS 0x0F
82 #define CAPSENSE2_REG_SENSOR_1_DELTA_COUNT 0x10
83 #define CAPSENSE2_REG_SENSOR_2_DELTA_COUNT 0x11
84 #define CAPSENSE2_REG_SENSOR_3_DELTA_COUNT 0x12
85 #define CAPSENSE2_REG_SENSOR_4_DELTA_COUNT 0x13
86 #define CAPSENSE2_REG_SENSOR_5_DELTA_COUNT 0x14
87 #define CAPSENSE2_REG_SENSOR_6_DELTA_COUNT 0x15
88 #define CAPSENSE2_REG_SENSOR_7_DELTA_COUNT 0x16
89 #define CAPSENSE2_REG_SENSOR_8_DELTA_COUNT 0x17
90 #define CAPSENSE2_REG_SENSOR_9_DELTA_COUNT 0x18
91 #define CAPSENSE2_REG_SENSOR_10_DELTA_COUNT 0x19
92 #define CAPSENSE2_REG_SENSOR_11_DELTA_COUNT 0x1A
93 #define CAPSENSE2_REG_SENSOR_12_DELTA_COUNT 0x1B
94 #define CAPSENSE2_REG_SENSOR_13_DELTA_COUNT 0x1C
95 #define CAPSENSE2_REG_SENSOR_14_DELTA_COUNT 0x1D
96 #define CAPSENSE2_REG_QUEUE_CONTROL 0x1E
97 #define CAPSENSE2_REG_DATA_SENSITIVITY 0x1F
98 #define CAPSENSE2_REG_CONFIGURATION 0x20
99 #define CAPSENSE2_REG_SENSOR_ENABLE 0x21
100 #define CAPSENSE2_REG_BUTTON_CONFIGURATION 0x22
101 #define CAPSENSE2_REG_GROUP_CONFIGURATION_1 0x23
102 #define CAPSENSE2_REG_GROUP_CONFIGURATION_2 0x24
103 #define CAPSENSE2_REG_CALIBRATION_ENABLE 0x25
104 #define CAPSENSE2_REG_CALIBRATION_ACTIVATE 0x26
105 #define CAPSENSE2_REG_INTERRUPT_ENABLE_1 0x27
106 #define CAPSENSE2_REG_INTERRUPT_ENABLE_2 0x28
107 #define CAPSENSE2_REG_SLEEP_CHANNEL_CONTROL 0x29
108 #define CAPSENSE2_REG_MULTIPLE_PRESS_CONFIGURATION 0x2A
109 #define CAPSENSE2_REG_LID_CLOSURE_CONFIGURATION 0x2B
110 #define CAPSENSE2_REG_LID_CLOSURE_QUEUE_CONTROL 0x2C
111 #define CAPSENSE2_REG_LID_CLOSURE_PATTERN_1 0x2D
112 #define CAPSENSE2_REG_LID_CLOSURE_PATTERN_2 0x2E
113 #define CAPSENSE2_REG_RECALIBRATION_CONFIGURATION 0x2F
114 #define CAPSENSE2_REG_SENSOR_1_THRESHOLD 0x30
115 #define CAPSENSE2_REG_SENSOR_2_THRESHOLD 0x31
116 #define CAPSENSE2_REG_SENSOR_3_THRESHOLD 0x32
117 #define CAPSENSE2_REG_SENSOR_4_THRESHOLD 0x33
118 #define CAPSENSE2_REG_SENSOR_5_THRESHOLD 0x34
119 #define CAPSENSE2_REG_SENSOR_6_THRESHOLD 0x35
120 #define CAPSENSE2_REG_SENSOR_7_THRESHOLD 0x36
121 #define CAPSENSE2_REG_GROUP_THRESHOLD 0x37
122 #define CAPSENSE2_REG_BUTTON_NOISE_THRESHOLD_1 0x38
123 #define CAPSENSE2_REG_BUTTON_NOISE_THRESHOLD_2 0x39
124 #define CAPSENSE2_REG_LID_CLOSURE_THRESHOLD_1 0x3A
125 #define CAPSENSE2_REG_LID_CLOSURE_THRESHOLD_2 0x3B
126 #define CAPSENSE2_REG_LID_CLOSURE_THRESHOLD_3 0x3C
127 #define CAPSENSE2_REG_LID_CLOSURE_THRESHOLD_4 0x3D
128 #define CAPSENSE2_REG_SLIDER_VELOCITY_CONFIGURATION 0x3E
129 #define CAPSENSE2_REG_DIGITAL_RECALIBRATION 0x3F
130 #define CAPSENSE2_REG_CONFIGURATION_2 0x40
131 #define CAPSENSE2_REG_GROUPED_CHANNEL_SENSOR_ENABLE 0x41
132 #define CAPSENSE2_REG_PROXIMITY_CONTROL 0x42
133 #define CAPSENSE2_REG_GROUPED_SENSOR_CALIB_ACTIVATE 0x46
134 #define CAPSENSE2_REG_SAMPLING_CHANNEL_SELECT 0x4E
135 #define CAPSENSE2_REG_SAMPLING_CONFIGURATION 0x4F
136 #define CAPSENSE2_REG_SENSOR_1_BASE_COUNT 0x50
137 #define CAPSENSE2_REG_SENSOR_2_BASE_COUNT 0x51
138 #define CAPSENSE2_REG_SENSOR_3_BASE_COUNT 0x52
139 #define CAPSENSE2_REG_SENSOR_4_BASE_COUNT 0x53
140 #define CAPSENSE2_REG_SENSOR_5_BASE_COUNT 0x54
141 #define CAPSENSE2_REG_SENSOR_6_BASE_COUNT 0x55
142 #define CAPSENSE2_REG_SENSOR_7_BASE_COUNT 0x56
143 #define CAPSENSE2_REG_SENSOR_8_BASE_COUNT 0x57
144 #define CAPSENSE2_REG_SENSOR_9_BASE_COUNT 0x58
145 #define CAPSENSE2_REG_SENSOR_10_BASE_COUNT 0x59
146 #define CAPSENSE2_REG_SENSOR_11_BASE_COUNT 0x5A
147 #define CAPSENSE2_REG_SENSOR_12_BASE_COUNT 0x5B
148 #define CAPSENSE2_REG_SENSOR_13_BASE_COUNT 0x5C
149 #define CAPSENSE2_REG_SENSOR_14_BASE_COUNT 0x5D
150 #define CAPSENSE2_REG_LED_STATUS_1 0x60
151 #define CAPSENSE2_REG_LED_STATUS_2 0x61
152 #define CAPSENSE2_REG_LED_DIRECTION 0x70
153 #define CAPSENSE2_REG_LED_OUTPUT_TYPE 0x71
154 #define CAPSENSE2_REG_GPIO_INPUT 0x72
155 #define CAPSENSE2_REG_LED_OUTPUT_CONTROL_1 0x73
156 #define CAPSENSE2_REG_LED_OUTPUT_CONTROL_2 0x74
157 #define CAPSENSE2_REG_LED_POLARITY_1 0x75
158 #define CAPSENSE2_REG_LED_POLARITY_2 0x76
159 #define CAPSENSE2_REG_LINKED_LED_TRANSITION_CONTROL_1 0x77
160 #define CAPSENSE2_REG_LINKED_LED_TRANSITION_CONTROL_2 0x78
161 #define CAPSENSE2_REG_LED_MIRROR_CONTROL_1 0x79
162 #define CAPSENSE2_REG_LED_MIRROR_CONTROL_2 0x7A
163 #define CAPSENSE2_REG_SENSOR_LED_LINKING 0x80
164 #define CAPSENSE2_REG_LED_BEHAVIOR_1 0x81
165 #define CAPSENSE2_REG_LED_BEHAVIOR_2 0x82
166 #define CAPSENSE2_REG_LED_BEHAVIOR_3 0x83
167 #define CAPSENSE2_REG_LED_PULSE_1_PERIOD 0x84
168 #define CAPSENSE2_REG_LED_PULSE_2_PERIOD 0x85
169 #define CAPSENSE2_REG_LED_BREATHE_PERIOD 0x86
170 #define CAPSENSE2_REG_LED_CONFIGURATION 0x88
171 #define CAPSENSE2_REG_LED_PULSE_1_DUTY_CYCLE 0x90
172 #define CAPSENSE2_REG_LED_PULSE_2_DUTY_CYCLE 0x91
173 #define CAPSENSE2_REG_LED_BREATHE_DUTY_CYCLE 0x92
174 #define CAPSENSE2_REG_LED_DIRECT_DUTY_CYCLE 0x93
175 #define CAPSENSE2_REG_LED_DIRECT_RAMP_RATES 0x94
176 #define CAPSENSE2_REG_LED_OFF_DELAY 0x95
177 #define CAPSENSE2_REG_SENSOR_1_CALIBRATION 0xB1
178 #define CAPSENSE2_REG_SENSOR_2_CALIBRATION 0xB2
179 #define CAPSENSE2_REG_SENSOR_3_CALIBRATION 0xB3
180 #define CAPSENSE2_REG_SENSOR_4_CALIBRATION 0xB4
181 #define CAPSENSE2_REG_SENSOR_5_CALIBRATION 0xB5
182 #define CAPSENSE2_REG_SENSOR_6_CALIBRATION 0xB6
183 #define CAPSENSE2_REG_SENSOR_7_CALIBRATION 0xB7
184 #define CAPSENSE2_REG_SENSOR_8_CALIBRATION 0xB8
185 #define CAPSENSE2_REG_SENSOR_9_CALIBRATION 0xB9
186 #define CAPSENSE2_REG_SENSOR_10_CALIBRATION 0xBA
187 #define CAPSENSE2_REG_SENSOR_11_CALIBRATION 0xBB
188 #define CAPSENSE2_REG_SENSOR_12_CALIBRATION 0xBC
189 #define CAPSENSE2_REG_SENSOR_13_CALIBRATION 0xBD
190 #define CAPSENSE2_REG_SENSOR_14_CALIBRATION 0xBE
191 #define CAPSENSE2_REG_PRODUCT_ID 0xFD
192 #define CAPSENSE2_REG_MANUFACTURER_ID 0xFE
193 #define CAPSENSE2_REG_REVISION 0xFF
194  // capsense2_reg
196 
211 #define CAPSENSE2_MAIN_STATUS_CONTROL_DEACT 0x40
212 #define CAPSENSE2_MAIN_STATUS_CONTROL_SLEEP 0x20
213 #define CAPSENSE2_MAIN_STATUS_CONTROL_DSLEEP 0x10
214 #define CAPSENSE2_MAIN_STATUS_CONTROL_PWR_LED 0x02
215 #define CAPSENSE2_MAIN_STATUS_CONTROL_INT 0x01
216 
221 #define CAPSENSE2_BUTTON_STATUS_1_UP_SLIDER 0x80
222 #define CAPSENSE2_BUTTON_STATUS_1_DOWN_SLIDER 0x40
223 #define CAPSENSE2_BUTTON_STATUS_1_BUTTON_2 0x02
224 #define CAPSENSE2_BUTTON_STATUS_1_BUTTON_1 0x01
225 
230 #define CAPSENSE2_MULTIPLE_PRESS_CONFIG_ENABLE 0x80
231 #define CAPSENSE2_MULTIPLE_PRESS_CONFIG_BUTTONS_1 0x00
232 #define CAPSENSE2_MULTIPLE_PRESS_CONFIG_BUTTONS_2 0x04
233 #define CAPSENSE2_MULTIPLE_PRESS_CONFIG_BUTTONS_3 0x08
234 #define CAPSENSE2_MULTIPLE_PRESS_CONFIG_BUTTONS_4 0x0C
235 #define CAPSENSE2_MULTIPLE_PRESS_CONFIG_GROUP_2 0x00
236 #define CAPSENSE2_MULTIPLE_PRESS_CONFIG_GROUP_3 0x01
237 #define CAPSENSE2_MULTIPLE_PRESS_CONFIG_GROUP_4 0x02
238 #define CAPSENSE2_MULTIPLE_PRESS_CONFIG_GROUP_1 0x03
239 
244 #define CAPSENSE2_CONFIGURATION_TIMEOUT 0x80
245 #define CAPSENSE2_CONFIGURATION_POS_VOL 0x40
246 #define CAPSENSE2_CONFIGURATION_BLK_DIG_NOISE 0x20
247 #define CAPSENSE2_CONFIGURATION_BLK_ANA_NOISE 0x10
248 #define CAPSENSE2_CONFIGURATION_MAX_DUR_EN_B 0x08
249 #define CAPSENSE2_CONFIGURATION_RPT_EN_B 0x04
250 #define CAPSENSE2_CONFIGURATION_MAX_DUR_EN_G 0x02
251 #define CAPSENSE2_CONFIGURATION_RPT_EN_G 0x01
252 
257 #define CAPSENSE2_SLIDER_VELOCITY_CONFIG_EXTRA_INT_EN 0x80
258 #define CAPSENSE2_SLIDER_VELOCITY_CONFIG_MAX_INT_0 0x00
259 #define CAPSENSE2_SLIDER_VELOCITY_CONFIG_MAX_INT_1 0x10
260 #define CAPSENSE2_SLIDER_VELOCITY_CONFIG_MAX_INT_2 0x20
261 #define CAPSENSE2_SLIDER_VELOCITY_CONFIG_MAX_INT_3 0x30
262 #define CAPSENSE2_SLIDER_VELOCITY_CONFIG_MAX_INT_4 0x40
263 #define CAPSENSE2_SLIDER_VELOCITY_CONFIG_MAX_INT_5 0x50
264 #define CAPSENSE2_SLIDER_VELOCITY_CONFIG_MAX_INT_6 0x60
265 #define CAPSENSE2_SLIDER_VELOCITY_CONFIG_MAX_INT_7 0x70
266 #define CAPSENSE2_SLIDER_VELOCITY_CONFIG_SLIDE_TIME_350 0x00
267 #define CAPSENSE2_SLIDER_VELOCITY_CONFIG_SLIDE_TIME_560 0x04
268 #define CAPSENSE2_SLIDER_VELOCITY_CONFIG_SLIDE_TIME_770 0x08
269 #define CAPSENSE2_SLIDER_VELOCITY_CONFIG_SLIDE_TIME_980 0x0C
270 
275 #define CAPSENSE2_LED_DIRECTION_OUTPUT_LED1 0x01
276 #define CAPSENSE2_LED_DIRECTION_OUTPUT_LED2 0x02
277 #define CAPSENSE2_LED_DIRECTION_OUTPUT_LED3 0x04
278 #define CAPSENSE2_LED_DIRECTION_OUTPUT_LED4 0x08
279 #define CAPSENSE2_LED_DIRECTION_OUTPUT_LED5 0x10
280 #define CAPSENSE2_LED_DIRECTION_OUTPUT_LED6 0x20
281 #define CAPSENSE2_LED_DIRECTION_OUTPUT_LED7 0x40
282 #define CAPSENSE2_LED_DIRECTION_OUTPUT_LED8 0x80
283 
288 #define CAPSENSE2_SENSOR_LED_LINKING_CS1_LED1 0x01
289 #define CAPSENSE2_SENSOR_LED_LINKING_CS2_LED2 0x02
290 #define CAPSENSE2_SENSOR_LED_LINKING_CS3_LED3 0x04
291 #define CAPSENSE2_SENSOR_LED_LINKING_CS4_LED4 0x08
292 #define CAPSENSE2_SENSOR_LED_LINKING_CS5_LED5 0x10
293 #define CAPSENSE2_SENSOR_LED_LINKING_CS6_LED6 0x20
294 #define CAPSENSE2_SENSOR_LED_LINKING_CS7_LED7 0x40
295 #define CAPSENSE2_SENSOR_LED_LINKING_UP_DOWN_LINK 0x80
296 
301 #define CAPSENSE2_VENDOR_ID 0x5D
302 #define CAPSENSE2_MANUFACTURER_ID 0x5D
303 #define CAPSENSE2_PRODUCT_ID 0x3A
304 
310 #define CAPSENSE2_SET_DEV_ADDR 0x28
311  // capsense2_set
313 
328 #define CAPSENSE2_MAP_MIKROBUS( cfg, mikrobus ) \
329  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
330  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
331  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
332  cfg.alt = MIKROBUS( mikrobus, MIKROBUS_INT )
333  // capsense2_map // capsense2
336 
341 typedef struct
342 {
343  // Output pins
344  digital_out_t rst;
346  // Input pins
347  digital_in_t alt;
349  // Modules
350  i2c_master_t i2c;
352  // I2C slave address
353  uint8_t slave_address;
355 } capsense2_t;
356 
361 typedef struct
362 {
363  pin_name_t scl;
364  pin_name_t sda;
366  pin_name_t rst;
367  pin_name_t alt;
369  uint32_t i2c_speed;
370  uint8_t i2c_address;
373 
378 typedef enum
379 {
381  CAPSENSE2_ERROR = -1
382 
384 
401 
417 
432 
448 err_t capsense2_generic_write ( capsense2_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len );
449 
465 err_t capsense2_generic_read ( capsense2_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len );
466 
480 err_t capsense2_write_register ( capsense2_t *ctx, uint8_t reg, uint8_t data_in );
481 
495 err_t capsense2_read_register ( capsense2_t *ctx, uint8_t reg, uint8_t *data_out );
496 
506 void capsense2_set_reset_pin ( capsense2_t *ctx, uint8_t state );
507 
517 
527 
540 
553 
554 #ifdef __cplusplus
555 }
556 #endif
557 #endif // CAPSENSE2_H
558  // capsense2
560 
561 // ------------------------------------------------------------------------ END
capsense2_generic_write
err_t capsense2_generic_write(capsense2_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len)
CapSense 2 I2C writing function.
capsense2_t::slave_address
uint8_t slave_address
Definition: capsense2.h:353
capsense2_t::i2c
i2c_master_t i2c
Definition: capsense2.h:350
capsense2_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: capsense2.h:369
capsense2_reset_device
void capsense2_reset_device(capsense2_t *ctx)
CapSense 2 reset device function.
capsense2_init
err_t capsense2_init(capsense2_t *ctx, capsense2_cfg_t *cfg)
CapSense 2 initialization function.
capsense2_cfg_t
CapSense 2 Click configuration object.
Definition: capsense2.h:362
capsense2_write_register
err_t capsense2_write_register(capsense2_t *ctx, uint8_t reg, uint8_t data_in)
CapSense 2 write register function.
capsense2_t
CapSense 2 Click context object.
Definition: capsense2.h:342
capsense2_cfg_t::alt
pin_name_t alt
Definition: capsense2.h:367
capsense2_get_alert_pin
uint8_t capsense2_get_alert_pin(capsense2_t *ctx)
CapSense 2 get alert pin function.
capsense2_default_cfg
err_t capsense2_default_cfg(capsense2_t *ctx)
CapSense 2 default configuration function.
capsense2_clear_interrupt
err_t capsense2_clear_interrupt(capsense2_t *ctx)
CapSense 2 clear interrupt function.
CAPSENSE2_ERROR
@ CAPSENSE2_ERROR
Definition: capsense2.h:381
capsense2_cfg_t::scl
pin_name_t scl
Definition: capsense2.h:363
capsense2_check_communication
err_t capsense2_check_communication(capsense2_t *ctx)
CapSense 2 check communication function.
capsense2_set_reset_pin
void capsense2_set_reset_pin(capsense2_t *ctx, uint8_t state)
CapSense 2 set reset pin function.
capsense2_return_value_t
capsense2_return_value_t
CapSense 2 Click return value data.
Definition: capsense2.h:379
capsense2_cfg_t::rst
pin_name_t rst
Definition: capsense2.h:366
capsense2_cfg_t::sda
pin_name_t sda
Definition: capsense2.h:364
capsense2_t::rst
digital_out_t rst
Definition: capsense2.h:344
CAPSENSE2_OK
@ CAPSENSE2_OK
Definition: capsense2.h:380
capsense2_cfg_t::i2c_address
uint8_t i2c_address
Definition: capsense2.h:370
capsense2_t::alt
digital_in_t alt
Definition: capsense2.h:347
capsense2_cfg_setup
void capsense2_cfg_setup(capsense2_cfg_t *cfg)
CapSense 2 configuration object setup function.
capsense2_read_register
err_t capsense2_read_register(capsense2_t *ctx, uint8_t reg, uint8_t *data_out)
CapSense 2 read register function.
capsense2_generic_read
err_t capsense2_generic_read(capsense2_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len)
CapSense 2 I2C reading function.