haptic3 2.0.0.0
haptic3.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 HAPTIC3_H
29#define HAPTIC3_H
30
31#ifdef __cplusplus
32extern "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 HAPTIC3_REG_CHIP_REV 0x00
74#define HAPTIC3_REG_IRQ_EVENT1 0x03
75#define HAPTIC3_REG_IRQ_EVENT_WARNING_DIAG 0x04
76#define HAPTIC3_REG_IRQ_EVENT_SEQ_DIAG 0x05
77#define HAPTIC3_REG_IRQ_STATUS1 0x06
78#define HAPTIC3_REG_IRQ_MASK1 0x07
79#define HAPTIC3_REG_CIF_I2C1 0x08
80#define HAPTIC3_REG_FRQ_LRA_PER_H 0x0A
81#define HAPTIC3_REG_FRQ_LRA_PER_L 0x0B
82#define HAPTIC3_REG_ACTUATOR1 0x0C
83#define HAPTIC3_REG_ACTUATOR2 0x0D
84#define HAPTIC3_REG_ACTUATOR3 0x0E
85#define HAPTIC3_REG_CALIB_V2I_H 0x0F
86#define HAPTIC3_REG_CALIB_V2I_L 0x10
87#define HAPTIC3_REG_CALIB_IMP_H 0x11
88#define HAPTIC3_REG_CALIB_IMP_L 0x12
89#define HAPTIC3_REG_TOP_CFG1 0x13
90#define HAPTIC3_REG_TOP_CFG2 0x14
91#define HAPTIC3_REG_TOP_CFG3 0x15
92#define HAPTIC3_REG_TOP_CFG4 0x16
93#define HAPTIC3_REG_TOP_INT_CFG1 0x17
94#define HAPTIC3_REG_TOP_INT_CFG6_H 0x1C
95#define HAPTIC3_REG_TOP_INT_CFG6_L 0x1D
96#define HAPTIC3_REG_TOP_INT_CFG7_H 0x1E
97#define HAPTIC3_REG_TOP_INT_CFG7_L 0x1F
98#define HAPTIC3_REG_TOP_INT_CFG8 0x20
99#define HAPTIC3_REG_TOP_CTL1 0x22
100#define HAPTIC3_REG_TOP_CTL2 0x23
101#define HAPTIC3_REG_SEQ_CTL1 0x24
102#define HAPTIC3_REG_SWG_C1 0x25
103#define HAPTIC3_REG_SWG_C2 0x26
104#define HAPTIC3_REG_SWG_C3 0x27
105#define HAPTIC3_REG_SEQ_CTL2 0x28
106#define HAPTIC3_REG_GPI_0_CTL 0x29
107#define HAPTIC3_REG_GPI_1_CTL 0x2A
108#define HAPTIC3_REG_GPI_2_CTL 0x2B
109#define HAPTIC3_REG_MEM_CTL1 0x2C
110#define HAPTIC3_REG_MEM_CTL2 0x2D
111#define HAPTIC3_REG_ADC_DATA_H1 0x2E
112#define HAPTIC3_REG_ADC_DATA_L1 0x2F
113#define HAPTIC3_REG_POLARITY 0x43
114#define HAPTIC3_REG_LRA_AVR_H 0x44
115#define HAPTIC3_REG_LRA_AVR_L 0x45
116#define HAPTIC3_REG_FRQ_LRA_PER_ACT_H 0x46
117#define HAPTIC3_REG_FRQ_LRA_PER_ACT_L 0x47
118#define HAPTIC3_REG_FRQ_PHASE_H 0x48
119#define HAPTIC3_REG_FRQ_PHASE_L 0x49
120#define HAPTIC3_REG_FRQ_CTL 0x4C
121#define HAPTIC3_REG_TRIM3 0x5F
122#define HAPTIC3_REG_TRIM4 0x60
123#define HAPTIC3_REG_TRIM6 0x62
124#define HAPTIC3_REG_TOP_CFG5 0x6E
125#define HAPTIC3_REG_IRQ_EVENT_ACTUATOR_FAULT 0x81
126#define HAPTIC3_REG_IRQ_STATUS2 0x82
127#define HAPTIC3_REG_IRQ_MASK2 0x83
128#define HAPTIC3_REG_SNP_MEM_X 0x84
129
130 // haptic3_reg
131
146#define HAPTIC3_CHIP_REV 0xDA
147
152#define HAPTIC3_TOP_CFG1_EMB_MODE_MANUAL 0x00
153#define HAPTIC3_TOP_CFG1_EMB_MODE_AUTO 0x80
154#define HAPTIC3_TOP_CFG1_EMB_MODE_MASK 0x80
155#define HAPTIC3_TOP_CFG1_ACT_TYPE_LRA 0x00
156#define HAPTIC3_TOP_CFG1_ACT_TYPE_ERM 0x20
157#define HAPTIC3_TOP_CFG1_ACT_TYPE_MASK 0x20
158#define HAPTIC3_TOP_CFG1_BEMF_SENSE_CUSTOM_WF 0x00
159#define HAPTIC3_TOP_CFG1_BEMF_SENSE_STANDARD 0x10
160#define HAPTIC3_TOP_CFG1_BEMF_SENSE_MASK 0x10
161#define HAPTIC3_TOP_CFG1_FREQ_TRACK_DISABLE 0x00
162#define HAPTIC3_TOP_CFG1_FREQ_TRACK_ENABLE 0x08
163#define HAPTIC3_TOP_CFG1_FREQ_TRACK_MASK 0x08
164#define HAPTIC3_TOP_CFG1_ACCEL_DISABLE 0x00
165#define HAPTIC3_TOP_CFG1_ACCEL_ENABLE 0x04
166#define HAPTIC3_TOP_CFG1_ACCEL_MASK 0x04
167#define HAPTIC3_TOP_CFG1_RAPID_STOP_DISABLE 0x00
168#define HAPTIC3_TOP_CFG1_RAPID_STOP_ENABLE 0x02
169#define HAPTIC3_TOP_CFG1_RAPID_STOP_MASK 0x02
170#define HAPTIC3_TOP_CFG1_AMPLITUDE_PID_DISABLE 0x00
171#define HAPTIC3_TOP_CFG1_AMPLITUDE_PID_ENABLE 0x01
172#define HAPTIC3_TOP_CFG1_AMPLITUDE_PID_MASK 0x01
173
178#define HAPTIC3_TOP_CTL1_SEQ_STOP 0x00
179#define HAPTIC3_TOP_CTL1_SEQ_START 0x10
180#define HAPTIC3_TOP_CTL1_SEQ_MASK 0x10
181#define HAPTIC3_TOP_CTL1_STANDBY_DISABLE 0x00
182#define HAPTIC3_TOP_CTL1_STANDBY_ENABLE 0x08
183#define HAPTIC3_TOP_CTL1_STANDBY_MASK 0x08
184#define HAPTIC3_TOP_CTL1_OP_MODE_INACTIVE 0x00
185#define HAPTIC3_TOP_CTL1_OP_MODE_DRO 0x01
186#define HAPTIC3_TOP_CTL1_OP_MODE_PWM 0x02
187#define HAPTIC3_TOP_CTL1_OP_MODE_RTWM 0x03
188#define HAPTIC3_TOP_CTL1_OP_MODE_ETWM 0x04
189#define HAPTIC3_TOP_CTL1_OP_MODE_MASK 0x07
190
195#define HAPTIC3_ACTUATOR_VOLTAGE_MIN 0.0
196#define HAPTIC3_ACTUATOR_VOLTAGE_MAX 6.0
197#define HAPTIC3_ACTUATOR_VOLTAGE_RESOLUTION 0.0234
198#define HAPTIC3_ACTUATOR_IMAX_MIN 28.6
199#define HAPTIC3_ACTUATOR_IMAX_MAX 251.8
200#define HAPTIC3_ACTUATOR_IMAX_DIVIDER 7.2
201#define HAPTIC3_ACTUATOR_IMAX_RESOLUTION 0x1F
202#define HAPTIC3_ACTUATOR_IMPEDANCE_MIN 4.0
203#define HAPTIC3_ACTUATOR_IMPEDANCE_MAX 50.0
204#define HAPTIC3_ACTUATOR_V2I_FACTOR_DIVIDER 1.6104
205#define HAPTIC3_ACTUATOR_LRA_FREQ_MIN 0.0
206#define HAPTIC3_ACTUATOR_LRA_FREQ_MAX 300.0
207#define HAPTIC3_ACTUATOR_LRA_FREQ_RESOLUTION 0.00000133332
208#define HAPTIC3_VIBRATION_LEVEL_MIN -1.0
209#define HAPTIC3_VIBRATION_LEVEL_MAX 1.0
210#define HAPTIC3_VIBRATION_LEVEL_MIN_ACC_EN 0.0
211#define HAPTIC3_VIBRATION_LEVEL_RESOLUTION 0.008
212#define HAPTIC3_ROUND_TO_NEAREST_INT 0.5
213
218#define HAPTIC3_DEFAULT_ACTUATOR_TYPE HAPTIC3_TOP_CFG1_ACT_TYPE_LRA
219#define HAPTIC3_DEFAULT_ACTUATOR_ABS_VOLT 2.808
220#define HAPTIC3_DEFAULT_ACTUATOR_NOM_VOLT 2.106
221#define HAPTIC3_DEFAULT_ACTUATOR_IMAX 194.0
222#define HAPTIC3_DEFAULT_ACTUATOR_IMPEDANCE 16.0
223#define HAPTIC3_DEFAULT_ACTUATOR_LRA_FREQ 174.0
224
230#define HAPTIC3_DEVICE_ADDRESS 0x4A
231
232 // haptic3_set
233
248#define HAPTIC3_MAP_MIKROBUS( cfg, mikrobus ) \
249 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
250 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
251 cfg.en = MIKROBUS( mikrobus, MIKROBUS_CS ); \
252 cfg.irq = MIKROBUS( mikrobus, MIKROBUS_INT )
253
254 // haptic3_map
255 // haptic3
256
261typedef struct
262{
263 // Output pins
264 digital_out_t en;
266 // Input pins
267 digital_in_t irq;
269 // Modules
270 i2c_master_t i2c;
272 // I2C slave address
275} haptic3_t;
276
281typedef struct
282{
283 pin_name_t scl;
284 pin_name_t sda;
286 pin_name_t en;
287 pin_name_t irq;
289 uint32_t i2c_speed;
290 uint8_t i2c_address;
293
298typedef enum
299{
301 HAPTIC3_ERROR = -1
302
304
321
337
352
368err_t haptic3_generic_write ( haptic3_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len );
369
385err_t haptic3_generic_read ( haptic3_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len );
386
399err_t haptic3_write_register ( haptic3_t *ctx, uint8_t reg, uint8_t data_in );
400
413err_t haptic3_read_register ( haptic3_t *ctx, uint8_t reg, uint8_t *data_out );
414
429err_t haptic3_write_register_bits ( haptic3_t *ctx, uint8_t reg, uint8_t mask, uint8_t data_in );
430
442
452
462
472
485err_t haptic3_set_actuator_type ( haptic3_t *ctx, uint8_t type );
486
498err_t haptic3_set_actuator_abs_volt ( haptic3_t *ctx, float abs_volt );
499
511err_t haptic3_set_actuator_nom_volt ( haptic3_t *ctx, float nom_volt );
512
524err_t haptic3_set_actuator_imax ( haptic3_t *ctx, float max_curr );
525
538err_t haptic3_set_actuator_impedance ( haptic3_t *ctx, float impedance );
539
551err_t haptic3_set_actuator_lra_freq ( haptic3_t *ctx, float frequency );
552
568err_t haptic3_set_operation_mode ( haptic3_t *ctx, uint8_t op_mode );
569
582err_t haptic3_set_freq_track ( haptic3_t *ctx, uint8_t freq_track_en );
583
596err_t haptic3_set_acceleration_mode ( haptic3_t *ctx, uint8_t accel_en );
597
610err_t haptic3_set_vibration_level ( haptic3_t *ctx, float level );
611
624err_t haptic3_get_vibration_level ( haptic3_t *ctx, float *level );
625
626#ifdef __cplusplus
627}
628#endif
629#endif // HAPTIC3_H
630
631 // haptic3
632
633// ------------------------------------------------------------------------ END
err_t haptic3_set_freq_track(haptic3_t *ctx, uint8_t freq_track_en)
HAPTIC 3 set freq track function.
err_t haptic3_generic_write(haptic3_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len)
HAPTIC 3 I2C writing function.
err_t haptic3_check_communication(haptic3_t *ctx)
HAPTIC 3 check communication function.
err_t haptic3_write_register(haptic3_t *ctx, uint8_t reg, uint8_t data_in)
HAPTIC 3 write register function.
err_t haptic3_set_operation_mode(haptic3_t *ctx, uint8_t op_mode)
HAPTIC 3 set operation mode function.
uint8_t haptic3_get_int_pin(haptic3_t *ctx)
HAPTIC 3 get INT pin function.
err_t haptic3_set_actuator_nom_volt(haptic3_t *ctx, float nom_volt)
HAPTIC 3 set actuator nom volt function.
void haptic3_cfg_setup(haptic3_cfg_t *cfg)
HAPTIC 3 configuration object setup function.
err_t haptic3_set_actuator_impedance(haptic3_t *ctx, float impedance)
HAPTIC 3 set actuator impedance function.
void haptic3_disable_device(haptic3_t *ctx)
HAPTIC 3 disable device function.
err_t haptic3_read_register(haptic3_t *ctx, uint8_t reg, uint8_t *data_out)
HAPTIC 3 read register function.
err_t haptic3_set_actuator_imax(haptic3_t *ctx, float max_curr)
HAPTIC 3 set actuator imax function.
err_t haptic3_set_acceleration_mode(haptic3_t *ctx, uint8_t accel_en)
HAPTIC 3 set acceleration mode function.
err_t haptic3_default_cfg(haptic3_t *ctx)
HAPTIC 3 default configuration function.
err_t haptic3_set_actuator_lra_freq(haptic3_t *ctx, float frequency)
HAPTIC 3 set actuator lra freq function.
err_t haptic3_get_vibration_level(haptic3_t *ctx, float *level)
HAPTIC 3 get vibration level function.
void haptic3_enable_device(haptic3_t *ctx)
HAPTIC 3 enable device function.
err_t haptic3_set_vibration_level(haptic3_t *ctx, float level)
HAPTIC 3 set vibration level function.
err_t haptic3_generic_read(haptic3_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len)
HAPTIC 3 I2C reading function.
err_t haptic3_set_actuator_abs_volt(haptic3_t *ctx, float abs_volt)
HAPTIC 3 set actuator abs volt function.
err_t haptic3_write_register_bits(haptic3_t *ctx, uint8_t reg, uint8_t mask, uint8_t data_in)
HAPTIC 3 write register bits function.
err_t haptic3_init(haptic3_t *ctx, haptic3_cfg_t *cfg)
HAPTIC 3 initialization function.
err_t haptic3_set_actuator_type(haptic3_t *ctx, uint8_t type)
HAPTIC 3 set actuator type function.
haptic3_return_value_t
HAPTIC 3 Click return value data.
Definition haptic3.h:299
@ HAPTIC3_ERROR
Definition haptic3.h:301
@ HAPTIC3_OK
Definition haptic3.h:300
HAPTIC 3 Click configuration object.
Definition haptic3.h:282
uint32_t i2c_speed
Definition haptic3.h:289
pin_name_t irq
Definition haptic3.h:287
pin_name_t scl
Definition haptic3.h:283
pin_name_t en
Definition haptic3.h:286
pin_name_t sda
Definition haptic3.h:284
uint8_t i2c_address
Definition haptic3.h:290
HAPTIC 3 Click context object.
Definition haptic3.h:262
digital_in_t irq
Definition haptic3.h:267
i2c_master_t i2c
Definition haptic3.h:270
digital_out_t en
Definition haptic3.h:264
uint8_t slave_address
Definition haptic3.h:273