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
32 extern "C"{
33 #endif
34 
35 #include "drv_digital_out.h"
36 #include "drv_digital_in.h"
37 #include "drv_i2c_master.h"
38 
59 #define HAPTIC3_REG_CHIP_REV 0x00
60 #define HAPTIC3_REG_IRQ_EVENT1 0x03
61 #define HAPTIC3_REG_IRQ_EVENT_WARNING_DIAG 0x04
62 #define HAPTIC3_REG_IRQ_EVENT_SEQ_DIAG 0x05
63 #define HAPTIC3_REG_IRQ_STATUS1 0x06
64 #define HAPTIC3_REG_IRQ_MASK1 0x07
65 #define HAPTIC3_REG_CIF_I2C1 0x08
66 #define HAPTIC3_REG_FRQ_LRA_PER_H 0x0A
67 #define HAPTIC3_REG_FRQ_LRA_PER_L 0x0B
68 #define HAPTIC3_REG_ACTUATOR1 0x0C
69 #define HAPTIC3_REG_ACTUATOR2 0x0D
70 #define HAPTIC3_REG_ACTUATOR3 0x0E
71 #define HAPTIC3_REG_CALIB_V2I_H 0x0F
72 #define HAPTIC3_REG_CALIB_V2I_L 0x10
73 #define HAPTIC3_REG_CALIB_IMP_H 0x11
74 #define HAPTIC3_REG_CALIB_IMP_L 0x12
75 #define HAPTIC3_REG_TOP_CFG1 0x13
76 #define HAPTIC3_REG_TOP_CFG2 0x14
77 #define HAPTIC3_REG_TOP_CFG3 0x15
78 #define HAPTIC3_REG_TOP_CFG4 0x16
79 #define HAPTIC3_REG_TOP_INT_CFG1 0x17
80 #define HAPTIC3_REG_TOP_INT_CFG6_H 0x1C
81 #define HAPTIC3_REG_TOP_INT_CFG6_L 0x1D
82 #define HAPTIC3_REG_TOP_INT_CFG7_H 0x1E
83 #define HAPTIC3_REG_TOP_INT_CFG7_L 0x1F
84 #define HAPTIC3_REG_TOP_INT_CFG8 0x20
85 #define HAPTIC3_REG_TOP_CTL1 0x22
86 #define HAPTIC3_REG_TOP_CTL2 0x23
87 #define HAPTIC3_REG_SEQ_CTL1 0x24
88 #define HAPTIC3_REG_SWG_C1 0x25
89 #define HAPTIC3_REG_SWG_C2 0x26
90 #define HAPTIC3_REG_SWG_C3 0x27
91 #define HAPTIC3_REG_SEQ_CTL2 0x28
92 #define HAPTIC3_REG_GPI_0_CTL 0x29
93 #define HAPTIC3_REG_GPI_1_CTL 0x2A
94 #define HAPTIC3_REG_GPI_2_CTL 0x2B
95 #define HAPTIC3_REG_MEM_CTL1 0x2C
96 #define HAPTIC3_REG_MEM_CTL2 0x2D
97 #define HAPTIC3_REG_ADC_DATA_H1 0x2E
98 #define HAPTIC3_REG_ADC_DATA_L1 0x2F
99 #define HAPTIC3_REG_POLARITY 0x43
100 #define HAPTIC3_REG_LRA_AVR_H 0x44
101 #define HAPTIC3_REG_LRA_AVR_L 0x45
102 #define HAPTIC3_REG_FRQ_LRA_PER_ACT_H 0x46
103 #define HAPTIC3_REG_FRQ_LRA_PER_ACT_L 0x47
104 #define HAPTIC3_REG_FRQ_PHASE_H 0x48
105 #define HAPTIC3_REG_FRQ_PHASE_L 0x49
106 #define HAPTIC3_REG_FRQ_CTL 0x4C
107 #define HAPTIC3_REG_TRIM3 0x5F
108 #define HAPTIC3_REG_TRIM4 0x60
109 #define HAPTIC3_REG_TRIM6 0x62
110 #define HAPTIC3_REG_TOP_CFG5 0x6E
111 #define HAPTIC3_REG_IRQ_EVENT_ACTUATOR_FAULT 0x81
112 #define HAPTIC3_REG_IRQ_STATUS2 0x82
113 #define HAPTIC3_REG_IRQ_MASK2 0x83
114 #define HAPTIC3_REG_SNP_MEM_X 0x84
115  // haptic3_reg
117 
132 #define HAPTIC3_CHIP_REV 0xDA
133 
138 #define HAPTIC3_TOP_CFG1_EMB_MODE_MANUAL 0x00
139 #define HAPTIC3_TOP_CFG1_EMB_MODE_AUTO 0x80
140 #define HAPTIC3_TOP_CFG1_EMB_MODE_MASK 0x80
141 #define HAPTIC3_TOP_CFG1_ACT_TYPE_LRA 0x00
142 #define HAPTIC3_TOP_CFG1_ACT_TYPE_ERM 0x20
143 #define HAPTIC3_TOP_CFG1_ACT_TYPE_MASK 0x20
144 #define HAPTIC3_TOP_CFG1_BEMF_SENSE_CUSTOM_WF 0x00
145 #define HAPTIC3_TOP_CFG1_BEMF_SENSE_STANDARD 0x10
146 #define HAPTIC3_TOP_CFG1_BEMF_SENSE_MASK 0x10
147 #define HAPTIC3_TOP_CFG1_FREQ_TRACK_DISABLE 0x00
148 #define HAPTIC3_TOP_CFG1_FREQ_TRACK_ENABLE 0x08
149 #define HAPTIC3_TOP_CFG1_FREQ_TRACK_MASK 0x08
150 #define HAPTIC3_TOP_CFG1_ACCEL_DISABLE 0x00
151 #define HAPTIC3_TOP_CFG1_ACCEL_ENABLE 0x04
152 #define HAPTIC3_TOP_CFG1_ACCEL_MASK 0x04
153 #define HAPTIC3_TOP_CFG1_RAPID_STOP_DISABLE 0x00
154 #define HAPTIC3_TOP_CFG1_RAPID_STOP_ENABLE 0x02
155 #define HAPTIC3_TOP_CFG1_RAPID_STOP_MASK 0x02
156 #define HAPTIC3_TOP_CFG1_AMPLITUDE_PID_DISABLE 0x00
157 #define HAPTIC3_TOP_CFG1_AMPLITUDE_PID_ENABLE 0x01
158 #define HAPTIC3_TOP_CFG1_AMPLITUDE_PID_MASK 0x01
159 
164 #define HAPTIC3_TOP_CTL1_SEQ_STOP 0x00
165 #define HAPTIC3_TOP_CTL1_SEQ_START 0x10
166 #define HAPTIC3_TOP_CTL1_SEQ_MASK 0x10
167 #define HAPTIC3_TOP_CTL1_STANDBY_DISABLE 0x00
168 #define HAPTIC3_TOP_CTL1_STANDBY_ENABLE 0x08
169 #define HAPTIC3_TOP_CTL1_STANDBY_MASK 0x08
170 #define HAPTIC3_TOP_CTL1_OP_MODE_INACTIVE 0x00
171 #define HAPTIC3_TOP_CTL1_OP_MODE_DRO 0x01
172 #define HAPTIC3_TOP_CTL1_OP_MODE_PWM 0x02
173 #define HAPTIC3_TOP_CTL1_OP_MODE_RTWM 0x03
174 #define HAPTIC3_TOP_CTL1_OP_MODE_ETWM 0x04
175 #define HAPTIC3_TOP_CTL1_OP_MODE_MASK 0x07
176 
181 #define HAPTIC3_ACTUATOR_VOLTAGE_MIN 0.0
182 #define HAPTIC3_ACTUATOR_VOLTAGE_MAX 6.0
183 #define HAPTIC3_ACTUATOR_VOLTAGE_RESOLUTION 0.0234
184 #define HAPTIC3_ACTUATOR_IMAX_MIN 28.6
185 #define HAPTIC3_ACTUATOR_IMAX_MAX 251.8
186 #define HAPTIC3_ACTUATOR_IMAX_DIVIDER 7.2
187 #define HAPTIC3_ACTUATOR_IMAX_RESOLUTION 0x1F
188 #define HAPTIC3_ACTUATOR_IMPEDANCE_MIN 4.0
189 #define HAPTIC3_ACTUATOR_IMPEDANCE_MAX 50.0
190 #define HAPTIC3_ACTUATOR_V2I_FACTOR_DIVIDER 1.6104
191 #define HAPTIC3_ACTUATOR_LRA_FREQ_MIN 0.0
192 #define HAPTIC3_ACTUATOR_LRA_FREQ_MAX 300.0
193 #define HAPTIC3_ACTUATOR_LRA_FREQ_RESOLUTION 0.00000133332
194 #define HAPTIC3_VIBRATION_LEVEL_MIN -1.0
195 #define HAPTIC3_VIBRATION_LEVEL_MAX 1.0
196 #define HAPTIC3_VIBRATION_LEVEL_MIN_ACC_EN 0.0
197 #define HAPTIC3_VIBRATION_LEVEL_RESOLUTION 0.008
198 #define HAPTIC3_ROUND_TO_NEAREST_INT 0.5
199 
204 #define HAPTIC3_DEFAULT_ACTUATOR_TYPE HAPTIC3_TOP_CFG1_ACT_TYPE_LRA
205 #define HAPTIC3_DEFAULT_ACTUATOR_ABS_VOLT 2.808
206 #define HAPTIC3_DEFAULT_ACTUATOR_NOM_VOLT 2.106
207 #define HAPTIC3_DEFAULT_ACTUATOR_IMAX 194.0
208 #define HAPTIC3_DEFAULT_ACTUATOR_IMPEDANCE 16.0
209 #define HAPTIC3_DEFAULT_ACTUATOR_LRA_FREQ 174.0
210 
216 #define HAPTIC3_DEVICE_ADDRESS 0x4A
217  // haptic3_set
219 
234 #define HAPTIC3_MAP_MIKROBUS( cfg, mikrobus ) \
235  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
236  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
237  cfg.en = MIKROBUS( mikrobus, MIKROBUS_CS ); \
238  cfg.irq = MIKROBUS( mikrobus, MIKROBUS_INT )
239  // haptic3_map // haptic3
242 
247 typedef struct
248 {
249  // Output pins
250  digital_out_t en;
252  // Input pins
253  digital_in_t irq;
255  // Modules
256  i2c_master_t i2c;
258  // I2C slave address
259  uint8_t slave_address;
261 } haptic3_t;
262 
267 typedef struct
268 {
269  pin_name_t scl;
270  pin_name_t sda;
272  pin_name_t en;
273  pin_name_t irq;
275  uint32_t i2c_speed;
276  uint8_t i2c_address;
278 } haptic3_cfg_t;
279 
284 typedef enum
285 {
287  HAPTIC3_ERROR = -1
288 
290 
307 
322 err_t haptic3_init ( haptic3_t *ctx, haptic3_cfg_t *cfg );
323 
338 
354 err_t haptic3_generic_write ( haptic3_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len );
355 
371 err_t haptic3_generic_read ( haptic3_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len );
372 
385 err_t haptic3_write_register ( haptic3_t *ctx, uint8_t reg, uint8_t data_in );
386 
399 err_t haptic3_read_register ( haptic3_t *ctx, uint8_t reg, uint8_t *data_out );
400 
415 err_t haptic3_write_register_bits ( haptic3_t *ctx, uint8_t reg, uint8_t mask, uint8_t data_in );
416 
428 
438 
448 
458 
471 err_t haptic3_set_actuator_type ( haptic3_t *ctx, uint8_t type );
472 
484 err_t haptic3_set_actuator_abs_volt ( haptic3_t *ctx, float abs_volt );
485 
497 err_t haptic3_set_actuator_nom_volt ( haptic3_t *ctx, float nom_volt );
498 
510 err_t haptic3_set_actuator_imax ( haptic3_t *ctx, float max_curr );
511 
524 err_t haptic3_set_actuator_impedance ( haptic3_t *ctx, float impedance );
525 
537 err_t haptic3_set_actuator_lra_freq ( haptic3_t *ctx, float frequency );
538 
554 err_t haptic3_set_operation_mode ( haptic3_t *ctx, uint8_t op_mode );
555 
568 err_t haptic3_set_freq_track ( haptic3_t *ctx, uint8_t freq_track_en );
569 
582 err_t haptic3_set_acceleration_mode ( haptic3_t *ctx, uint8_t accel_en );
583 
596 err_t haptic3_set_vibration_level ( haptic3_t *ctx, float level );
597 
610 err_t haptic3_get_vibration_level ( haptic3_t *ctx, float *level );
611 
612 #ifdef __cplusplus
613 }
614 #endif
615 #endif // HAPTIC3_H
616  // haptic3
618 
619 // ------------------------------------------------------------------------ END
haptic3_return_value_t
haptic3_return_value_t
HAPTIC 3 Click return value data.
Definition: haptic3.h:285
haptic3_set_actuator_lra_freq
err_t haptic3_set_actuator_lra_freq(haptic3_t *ctx, float frequency)
HAPTIC 3 set actuator lra freq function.
haptic3_set_operation_mode
err_t haptic3_set_operation_mode(haptic3_t *ctx, uint8_t op_mode)
HAPTIC 3 set operation mode function.
haptic3_t::irq
digital_in_t irq
Definition: haptic3.h:253
haptic3_write_register
err_t haptic3_write_register(haptic3_t *ctx, uint8_t reg, uint8_t data_in)
HAPTIC 3 write register function.
haptic3_get_vibration_level
err_t haptic3_get_vibration_level(haptic3_t *ctx, float *level)
HAPTIC 3 get vibration level function.
haptic3_cfg_t
HAPTIC 3 Click configuration object.
Definition: haptic3.h:268
haptic3_set_actuator_impedance
err_t haptic3_set_actuator_impedance(haptic3_t *ctx, float impedance)
HAPTIC 3 set actuator impedance function.
haptic3_init
err_t haptic3_init(haptic3_t *ctx, haptic3_cfg_t *cfg)
HAPTIC 3 initialization function.
haptic3_set_actuator_abs_volt
err_t haptic3_set_actuator_abs_volt(haptic3_t *ctx, float abs_volt)
HAPTIC 3 set actuator abs volt function.
haptic3_check_communication
err_t haptic3_check_communication(haptic3_t *ctx)
HAPTIC 3 check communication function.
haptic3_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: haptic3.h:275
haptic3_default_cfg
err_t haptic3_default_cfg(haptic3_t *ctx)
HAPTIC 3 default configuration function.
haptic3_t
HAPTIC 3 Click context object.
Definition: haptic3.h:248
haptic3_disable_device
void haptic3_disable_device(haptic3_t *ctx)
HAPTIC 3 disable device function.
haptic3_set_actuator_imax
err_t haptic3_set_actuator_imax(haptic3_t *ctx, float max_curr)
HAPTIC 3 set actuator imax function.
haptic3_t::en
digital_out_t en
Definition: haptic3.h:250
HAPTIC3_OK
@ HAPTIC3_OK
Definition: haptic3.h:286
haptic3_set_freq_track
err_t haptic3_set_freq_track(haptic3_t *ctx, uint8_t freq_track_en)
HAPTIC 3 set freq track function.
haptic3_enable_device
void haptic3_enable_device(haptic3_t *ctx)
HAPTIC 3 enable device function.
haptic3_cfg_t::irq
pin_name_t irq
Definition: haptic3.h:273
HAPTIC3_ERROR
@ HAPTIC3_ERROR
Definition: haptic3.h:287
haptic3_t::slave_address
uint8_t slave_address
Definition: haptic3.h:259
haptic3_set_vibration_level
err_t haptic3_set_vibration_level(haptic3_t *ctx, float level)
HAPTIC 3 set vibration level function.
haptic3_write_register_bits
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.
haptic3_get_int_pin
uint8_t haptic3_get_int_pin(haptic3_t *ctx)
HAPTIC 3 get INT pin function.
haptic3_cfg_t::i2c_address
uint8_t i2c_address
Definition: haptic3.h:276
haptic3_cfg_t::scl
pin_name_t scl
Definition: haptic3.h:269
haptic3_generic_read
err_t haptic3_generic_read(haptic3_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len)
HAPTIC 3 I2C reading function.
haptic3_cfg_t::en
pin_name_t en
Definition: haptic3.h:272
haptic3_t::i2c
i2c_master_t i2c
Definition: haptic3.h:256
haptic3_set_actuator_type
err_t haptic3_set_actuator_type(haptic3_t *ctx, uint8_t type)
HAPTIC 3 set actuator type function.
haptic3_generic_write
err_t haptic3_generic_write(haptic3_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len)
HAPTIC 3 I2C writing function.
haptic3_set_actuator_nom_volt
err_t haptic3_set_actuator_nom_volt(haptic3_t *ctx, float nom_volt)
HAPTIC 3 set actuator nom volt function.
haptic3_set_acceleration_mode
err_t haptic3_set_acceleration_mode(haptic3_t *ctx, uint8_t accel_en)
HAPTIC 3 set acceleration mode function.
haptic3_cfg_setup
void haptic3_cfg_setup(haptic3_cfg_t *cfg)
HAPTIC 3 configuration object setup function.
haptic3_cfg_t::sda
pin_name_t sda
Definition: haptic3.h:270
haptic3_read_register
err_t haptic3_read_register(haptic3_t *ctx, uint8_t reg, uint8_t *data_out)
HAPTIC 3 read register function.