ldctouch  2.0.0.0
ldctouch.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 LDCTOUCH_H
29 #define LDCTOUCH_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
39 #ifdef PREINIT_SUPPORTED
40 #include "preinit.h"
41 #endif
42 
43 #ifdef MikroCCoreVersion
44  #if MikroCCoreVersion >= 1
45  #include "delays.h"
46  #endif
47 #endif
48 
49 #include "drv_digital_out.h"
50 #include "drv_digital_in.h"
51 #include "drv_i2c_master.h"
52 
73 #define LDCTOUCH_REG_STATUS 0x00
74 #define LDCTOUCH_REG_OUT 0x01
75 #define LDCTOUCH_REG_DATA0_LSB 0x02
76 #define LDCTOUCH_REG_DATA0_MSB 0x03
77 #define LDCTOUCH_REG_DATA1_LSB 0x04
78 #define LDCTOUCH_REG_DATA1_MSB 0x05
79 #define LDCTOUCH_REG_DATA2_LSB 0x06
80 #define LDCTOUCH_REG_DATA2_MSB 0x07
81 #define LDCTOUCH_REG_DATA3_LSB 0x08
82 #define LDCTOUCH_REG_DATA3_MSB 0x09
83 #define LDCTOUCH_REG_RESET 0x0A
84 #define LDCTOUCH_REG_EN 0x0C
85 #define LDCTOUCH_REG_NP_SCAN_RATE 0x0D
86 #define LDCTOUCH_REG_GAIN0 0x0E
87 #define LDCTOUCH_REG_LP_SCAN_RATE 0x0F
88 #define LDCTOUCH_REG_GAIN1 0x10
89 #define LDCTOUCH_REG_INTPOL 0x11
90 #define LDCTOUCH_REG_GAIN2 0x12
91 #define LDCTOUCH_REG_LP_BASE_INC 0x13
92 #define LDCTOUCH_REG_GAIN3 0x14
93 #define LDCTOUCH_REG_NP_BASE_INC 0x15
94 #define LDCTOUCH_REG_BTPAUSE_MAXWIN 0x16
95 #define LDCTOUCH_REG_LC_DIVIDER 0x17
96 #define LDCTOUCH_REG_HYST 0x18
97 #define LDCTOUCH_REG_TWIST 0x19
98 #define LDCTOUCH_REG_COMMON_DEFORM 0x1A
99 #define LDCTOUCH_REG_OPOL_DPOL 0x1C
100 #define LDCTOUCH_REG_CNTSC 0x1E
101 #define LDCTOUCH_REG_SENSOR0_CONFIG 0x20
102 #define LDCTOUCH_REG_SENSOR1_CONFIG 0x22
103 #define LDCTOUCH_REG_SENSOR2_CONFIG 0x24
104 #define LDCTOUCH_REG_FTF0 0x25
105 #define LDCTOUCH_REG_SENSOR3_CONFIG 0x26
106 #define LDCTOUCH_REG_FTF1_2 0x28
107 #define LDCTOUCH_REG_FTF3 0x2B
108 #define LDCTOUCH_REG_RAW_DATA0_3 0x59
109 #define LDCTOUCH_REG_RAW_DATA0_2 0x5A
110 #define LDCTOUCH_REG_RAW_DATA0_1 0x5B
111 #define LDCTOUCH_REG_RAW_DATA1_3 0x5C
112 #define LDCTOUCH_REG_RAW_DATA1_2 0x5D
113 #define LDCTOUCH_REG_RAW_DATA1_1 0x5E
114 #define LDCTOUCH_REG_RAW_DATA2_3 0x5F
115 #define LDCTOUCH_REG_RAW_DATA2_2 0x60
116 #define LDCTOUCH_REG_RAW_DATA2_1 0x61
117 #define LDCTOUCH_REG_RAW_DATA3_3 0x62
118 #define LDCTOUCH_REG_RAW_DATA3_2 0x63
119 #define LDCTOUCH_REG_RAW_DATA3_1 0x64
120 #define LDCTOUCH_REG_MANUFACTURER_ID_LSB 0xFC
121 #define LDCTOUCH_REG_MANUFACTURER_ID_MSB 0xFD
122 #define LDCTOUCH_REG_DEVICE_ID_LSB 0xFE
123 #define LDCTOUCH_REG_DEVICE_ID_MSB 0xFF
124  // ldctouch_reg
126 
141 #define LDCTOUCH_STATUS_OUT 0x80
142 #define LDCTOUCH_STATUS_CHIP_READY 0x40
143 #define LDCTOUCH_STATUS_READY_TO_WRITE 0x20
144 #define LDCTOUCH_STATUS_MAXOUT 0x10
145 #define LDCTOUCH_STATUS_FSM_WD 0x08
146 #define LDCTOUCH_STATUS_LC_WD 0x04
147 #define LDCTOUCH_STATUS_TIMEOUT 0x02
148 #define LDCTOUCH_STATUS_REGISTER_FLAG 0x01
149 
154 #define LDCTOUCH_MODE_NORMAL 0x00
155 #define LDCTOUCH_MODE_CONFIG 0x01
156 #define LDCTOUCH_MODE_FULL_RESET 0x10
157 
162 #define LDCTOUCH_EN_CH3_LP 0x80
163 #define LDCTOUCH_EN_CH2_LP 0x40
164 #define LDCTOUCH_EN_CH1_LP 0x20
165 #define LDCTOUCH_EN_CH0_LP 0x10
166 #define LDCTOUCH_EN_CH3_NP 0x08
167 #define LDCTOUCH_EN_CH2_NP 0x04
168 #define LDCTOUCH_EN_CH1_NP 0x02
169 #define LDCTOUCH_EN_CH0_NP 0x01
170 
175 #define LDCTOUCH_OPOL3_ACTIVE_HIGH 0x80
176 #define LDCTOUCH_OPOL3_ACTIVE_LOW 0x00
177 #define LDCTOUCH_OPOL2_ACTIVE_HIGH 0x40
178 #define LDCTOUCH_OPOL2_ACTIVE_LOW 0x00
179 #define LDCTOUCH_OPOL1_ACTIVE_HIGH 0x20
180 #define LDCTOUCH_OPOL1_ACTIVE_LOW 0x00
181 #define LDCTOUCH_OPOL0_ACTIVE_HIGH 0x10
182 #define LDCTOUCH_OPOL0_ACTIVE_LOW 0x00
183 #define LDCTOUCH_DPOL3_DATA_INCREASES 0x08
184 #define LDCTOUCH_DPOL3_DATA_DECREASES 0x00
185 #define LDCTOUCH_DPOL2_DATA_INCREASES 0x04
186 #define LDCTOUCH_DPOL2_DATA_DECREASES 0x00
187 #define LDCTOUCH_DPOL1_DATA_INCREASES 0x02
188 #define LDCTOUCH_DPOL1_DATA_DECREASES 0x00
189 #define LDCTOUCH_DPOL0_DATA_INCREASES 0x01
190 #define LDCTOUCH_DPOL0_DATA_DECREASES 0x00
191 
196 #define LDCTOUCH_BUTTON_MODE_FINGER 0x00
197 #define LDCTOUCH_BUTTON_MODE_METAL 0x01
198 #define LDCTOUCH_BUTTON_MODE LDCTOUCH_BUTTON_MODE_FINGER
199 
204 #define LDCTOUCH_MANUFACTURER_ID_LSB 0x49
205 #define LDCTOUCH_MANUFACTURER_ID_MSB 0x54
206 #define LDCTOUCH_DEVICE_ID_LSB 0x00
207 #define LDCTOUCH_DEVICE_ID_MSB 0x40
208 
214 #define LDCTOUCH_DEVICE_ADDRESS 0x2A
215  // ldctouch_set
217 
232 #define LDCTOUCH_MAP_MIKROBUS( cfg, mikrobus ) \
233  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
234  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
235  cfg.s2 = MIKROBUS( mikrobus, MIKROBUS_CS ); \
236  cfg.s0 = MIKROBUS( mikrobus, MIKROBUS_AN ); \
237  cfg.s1 = MIKROBUS( mikrobus, MIKROBUS_RST ); \
238  cfg.s3 = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
239  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
240  // ldctouch_map // ldctouch
243 
248 typedef struct
249 {
250  // Input pins
251  digital_in_t s0;
252  digital_in_t s1;
253  digital_in_t s2;
254  digital_in_t s3;
255  digital_in_t int_pin;
257  // Modules
258  i2c_master_t i2c;
260  // I2C slave address
261  uint8_t slave_address;
263 } ldctouch_t;
264 
269 typedef struct
270 {
271  pin_name_t scl;
272  pin_name_t sda;
274  pin_name_t s0;
275  pin_name_t s1;
276  pin_name_t s2;
277  pin_name_t s3;
278  pin_name_t int_pin;
280  uint32_t i2c_speed;
281  uint8_t i2c_address;
284 
289 typedef struct
290 {
291  uint8_t status;
292  uint8_t out_state;
293  int16_t ch0_raw_button;
294  int16_t ch1_raw_button;
295  int16_t ch2_raw_button;
296  int16_t ch3_raw_button;
297 
299 
304 typedef enum
305 {
307  LDCTOUCH_ERROR = -1
308 
310 
327 
342 
356 
371 err_t ldctouch_generic_write ( ldctouch_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
372 
387 err_t ldctouch_generic_read ( ldctouch_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
388 
401 err_t ldctouch_write_register ( ldctouch_t *ctx, uint8_t reg, uint8_t data_in );
402 
415 err_t ldctouch_read_register ( ldctouch_t *ctx, uint8_t reg, uint8_t *data_out );
416 
426 
436 
446 
456 
466 
479 
493 err_t ldctouch_set_operation_mode ( ldctouch_t *ctx, uint8_t mode );
494 
507 err_t ldctouch_get_data ( ldctouch_t *ctx, ldctouch_data_t *button_data );
508 
509 #ifdef __cplusplus
510 }
511 #endif
512 #endif // LDCTOUCH_H
513  // ldctouch
515 
516 // ------------------------------------------------------------------------ END
ldctouch_get_s1_pin
uint8_t ldctouch_get_s1_pin(ldctouch_t *ctx)
LDC Touch get s1 pin function.
ldctouch_cfg_t::int_pin
pin_name_t int_pin
Definition: ldctouch.h:278
ldctouch_get_s0_pin
uint8_t ldctouch_get_s0_pin(ldctouch_t *ctx)
LDC Touch get s0 pin function.
ldctouch_get_data
err_t ldctouch_get_data(ldctouch_t *ctx, ldctouch_data_t *button_data)
LDC Touch get data function.
ldctouch_get_int_pin
uint8_t ldctouch_get_int_pin(ldctouch_t *ctx)
LDC Touch get int pin function.
ldctouch_t::i2c
i2c_master_t i2c
Definition: ldctouch.h:258
ldctouch_generic_read
err_t ldctouch_generic_read(ldctouch_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
LDC Touch I2C reading function.
ldctouch_data_t::ch0_raw_button
int16_t ch0_raw_button
Definition: ldctouch.h:293
ldctouch_return_value_t
ldctouch_return_value_t
LDC Touch Click return value data.
Definition: ldctouch.h:305
ldctouch_data_t::ch1_raw_button
int16_t ch1_raw_button
Definition: ldctouch.h:294
ldctouch_cfg_t::s0
pin_name_t s0
Definition: ldctouch.h:274
ldctouch_cfg_t::s1
pin_name_t s1
Definition: ldctouch.h:275
ldctouch_cfg_t
LDC Touch Click configuration object.
Definition: ldctouch.h:270
LDCTOUCH_ERROR
@ LDCTOUCH_ERROR
Definition: ldctouch.h:307
ldctouch_data_t::ch2_raw_button
int16_t ch2_raw_button
Definition: ldctouch.h:295
ldctouch_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: ldctouch.h:280
LDCTOUCH_OK
@ LDCTOUCH_OK
Definition: ldctouch.h:306
ldctouch_get_s3_pin
uint8_t ldctouch_get_s3_pin(ldctouch_t *ctx)
LDC Touch get s3 pin function.
ldctouch_t
LDC Touch Click context object.
Definition: ldctouch.h:249
ldctouch_t::s2
digital_in_t s2
Definition: ldctouch.h:253
ldctouch_t::slave_address
uint8_t slave_address
Definition: ldctouch.h:261
ldctouch_read_register
err_t ldctouch_read_register(ldctouch_t *ctx, uint8_t reg, uint8_t *data_out)
LDC Touch read register function.
ldctouch_cfg_t::i2c_address
uint8_t i2c_address
Definition: ldctouch.h:281
ldctouch_data_t::out_state
uint8_t out_state
Definition: ldctouch.h:292
ldctouch_cfg_t::scl
pin_name_t scl
Definition: ldctouch.h:271
ldctouch_data_t::ch3_raw_button
int16_t ch3_raw_button
Definition: ldctouch.h:296
ldctouch_t::s3
digital_in_t s3
Definition: ldctouch.h:254
ldctouch_cfg_setup
void ldctouch_cfg_setup(ldctouch_cfg_t *cfg)
LDC Touch configuration object setup function.
ldctouch_generic_write
err_t ldctouch_generic_write(ldctouch_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
LDC Touch I2C writing function.
ldctouch_init
err_t ldctouch_init(ldctouch_t *ctx, ldctouch_cfg_t *cfg)
LDC Touch initialization function.
ldctouch_cfg_t::sda
pin_name_t sda
Definition: ldctouch.h:272
ldctouch_data_t::status
uint8_t status
Definition: ldctouch.h:291
ldctouch_set_operation_mode
err_t ldctouch_set_operation_mode(ldctouch_t *ctx, uint8_t mode)
LDC Touch set operation mode function.
ldctouch_write_register
err_t ldctouch_write_register(ldctouch_t *ctx, uint8_t reg, uint8_t data_in)
LDC Touch write register function.
ldctouch_default_cfg
err_t ldctouch_default_cfg(ldctouch_t *ctx)
LDC Touch default configuration function.
ldctouch_t::int_pin
digital_in_t int_pin
Definition: ldctouch.h:255
ldctouch_t::s0
digital_in_t s0
Definition: ldctouch.h:251
ldctouch_get_s2_pin
uint8_t ldctouch_get_s2_pin(ldctouch_t *ctx)
LDC Touch get s2 pin function.
ldctouch_cfg_t::s2
pin_name_t s2
Definition: ldctouch.h:276
ldctouch_cfg_t::s3
pin_name_t s3
Definition: ldctouch.h:277
ldctouch_t::s1
digital_in_t s1
Definition: ldctouch.h:252
ldctouch_check_communication
err_t ldctouch_check_communication(ldctouch_t *ctx)
LDC Touch check communication function.
ldctouch_data_t
LDC Touch Click data object.
Definition: ldctouch.h:290