haptic4 2.1.0.0
haptic4.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 HAPTIC4_H
29#define HAPTIC4_H
30
31#ifdef __cplusplus
32extern "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 HAPTIC4_REG_CHIP_REV 0x00
70#define HAPTIC4_REG_IRQ_EVENT1 0x03
71#define HAPTIC4_REG_IRQ_EVENT_WARNING_DIAG 0x04
72#define HAPTIC4_REG_IRQ_EVENT_SEQ_DIAG 0x05
73#define HAPTIC4_REG_IRQ_STATUS1 0x06
74#define HAPTIC4_REG_IRQ_MASK1 0x07
75#define HAPTIC4_REG_CIF_I2C1 0x08
76#define HAPTIC4_REG_FRQ_LRA_PER_H 0x0A
77#define HAPTIC4_REG_FRQ_LRA_PER_L 0x0B
78#define HAPTIC4_REG_ACTUATOR1 0x0C
79#define HAPTIC4_REG_ACTUATOR2 0x0D
80#define HAPTIC4_REG_ACTUATOR3 0x0E
81#define HAPTIC4_REG_CALIB_V2I_H 0x0F
82#define HAPTIC4_REG_CALIB_V2I_L 0x10
83#define HAPTIC4_REG_CALIB_IMP_H 0x11
84#define HAPTIC4_REG_CALIB_IMP_L 0x12
85#define HAPTIC4_REG_TOP_CFG1 0x13
86#define HAPTIC4_REG_TOP_CFG2 0x14
87#define HAPTIC4_REG_TOP_CFG3 0x15
88#define HAPTIC4_REG_TOP_CFG4 0x16
89#define HAPTIC4_REG_TOP_INT_CFG1 0x17
90#define HAPTIC4_REG_TOP_INT_CFG6_H 0x1C
91#define HAPTIC4_REG_TOP_INT_CFG6_L 0x1D
92#define HAPTIC4_REG_TOP_INT_CFG7_H 0x1E
93#define HAPTIC4_REG_TOP_INT_CFG7_L 0x1F
94#define HAPTIC4_REG_TOP_INT_CFG8 0x20
95#define HAPTIC4_REG_TOP_CTL1 0x22
96#define HAPTIC4_REG_TOP_CTL2 0x23
97#define HAPTIC4_REG_SEQ_CTL1 0x24
98#define HAPTIC4_REG_SWG_C1 0x25
99#define HAPTIC4_REG_SWG_C2 0x26
100#define HAPTIC4_REG_SWG_C3 0x27
101#define HAPTIC4_REG_SEQ_CTL2 0x28
102#define HAPTIC4_REG_GPI_0_CTL 0x29
103#define HAPTIC4_REG_GPI_1_CTL 0x2A
104#define HAPTIC4_REG_GPI_2_CTL 0x2B
105#define HAPTIC4_REG_MEM_CTL1 0x2C
106#define HAPTIC4_REG_MEM_CTL2 0x2D
107#define HAPTIC4_REG_ADC_DATA_H1 0x2E
108#define HAPTIC4_REG_ADC_DATA_L1 0x2F
109#define HAPTIC4_REG_POLARITY 0x43
110#define HAPTIC4_REG_LRA_AVR_H 0x44
111#define HAPTIC4_REG_LRA_AVR_L 0x45
112#define HAPTIC4_REG_FRQ_LRA_PER_ACT_H 0x46
113#define HAPTIC4_REG_FRQ_LRA_PER_ACT_L 0x47
114#define HAPTIC4_REG_FRQ_PHASE_H 0x48
115#define HAPTIC4_REG_FRQ_PHASE_L 0x49
116#define HAPTIC4_REG_FRQ_CTL 0x4C
117#define HAPTIC4_REG_TRIM3 0x5F
118#define HAPTIC4_REG_TRIM4 0x60
119#define HAPTIC4_REG_TRIM6 0x62
120#define HAPTIC4_REG_TOP_CFG5 0x6E
121#define HAPTIC4_REG_IRQ_EVENT_ACTUATOR_FAULT 0x81
122#define HAPTIC4_REG_IRQ_STATUS2 0x82
123#define HAPTIC4_REG_IRQ_MASK2 0x83
124#define HAPTIC4_REG_SNP_MEM_X 0x84
125 // haptic4_reg
127
142#define HAPTIC4_CHIP_REV 0xBA
143
148#define HAPTIC4_PIN_STATE_LOW 0x00
149#define HAPTIC4_PIN_STATE_HIGH 0x01
150
155#define HAPTIC4_TOP_CFG1_EMB_MODE_MANUAL 0x00
156#define HAPTIC4_TOP_CFG1_EMB_MODE_AUTO 0x80
157#define HAPTIC4_TOP_CFG1_EMB_MODE_MASK 0x80
158#define HAPTIC4_TOP_CFG1_ACT_TYPE_LRA 0x00
159#define HAPTIC4_TOP_CFG1_ACT_TYPE_ERM 0x20
160#define HAPTIC4_TOP_CFG1_ACT_TYPE_MASK 0x20
161#define HAPTIC4_TOP_CFG1_BEMF_SENSE_CUSTOM_WF 0x00
162#define HAPTIC4_TOP_CFG1_BEMF_SENSE_STANDARD 0x10
163#define HAPTIC4_TOP_CFG1_BEMF_SENSE_MASK 0x10
164#define HAPTIC4_TOP_CFG1_FREQ_TRACK_DISABLE 0x00
165#define HAPTIC4_TOP_CFG1_FREQ_TRACK_ENABLE 0x08
166#define HAPTIC4_TOP_CFG1_FREQ_TRACK_MASK 0x08
167#define HAPTIC4_TOP_CFG1_ACCEL_DISABLE 0x00
168#define HAPTIC4_TOP_CFG1_ACCEL_ENABLE 0x04
169#define HAPTIC4_TOP_CFG1_ACCEL_MASK 0x04
170#define HAPTIC4_TOP_CFG1_RAPID_STOP_DISABLE 0x00
171#define HAPTIC4_TOP_CFG1_RAPID_STOP_ENABLE 0x02
172#define HAPTIC4_TOP_CFG1_RAPID_STOP_MASK 0x02
173#define HAPTIC4_TOP_CFG1_AMPLITUDE_PID_DISABLE 0x00
174#define HAPTIC4_TOP_CFG1_AMPLITUDE_PID_ENABLE 0x01
175#define HAPTIC4_TOP_CFG1_AMPLITUDE_PID_MASK 0x01
176
181#define HAPTIC4_TOP_CTL1_SEQ_STOP 0x00
182#define HAPTIC4_TOP_CTL1_SEQ_START 0x10
183#define HAPTIC4_TOP_CTL1_SEQ_MASK 0x10
184#define HAPTIC4_TOP_CTL1_STANDBY_DISABLE 0x00
185#define HAPTIC4_TOP_CTL1_STANDBY_ENABLE 0x08
186#define HAPTIC4_TOP_CTL1_STANDBY_MASK 0x08
187#define HAPTIC4_TOP_CTL1_OP_MODE_INACTIVE 0x00
188#define HAPTIC4_TOP_CTL1_OP_MODE_DRO 0x01
189#define HAPTIC4_TOP_CTL1_OP_MODE_PWM 0x02
190#define HAPTIC4_TOP_CTL1_OP_MODE_RTWM 0x03
191#define HAPTIC4_TOP_CTL1_OP_MODE_ETWM 0x04
192#define HAPTIC4_TOP_CTL1_OP_MODE_MASK 0x07
193
198#define HAPTIC4_ACTUATOR_VOLTAGE_MIN 0.0f
199#define HAPTIC4_ACTUATOR_VOLTAGE_MAX 6.0f
200#define HAPTIC4_ACTUATOR_VOLTAGE_RESOLUTION 0.0234f
201#define HAPTIC4_ACTUATOR_IMAX_MIN 28.6f
202#define HAPTIC4_ACTUATOR_IMAX_MAX 251.8f
203#define HAPTIC4_ACTUATOR_IMAX_DIVIDER 7.2f
204#define HAPTIC4_ACTUATOR_IMAX_RESOLUTION 0x1F
205#define HAPTIC4_ACTUATOR_IMPEDANCE_MIN 4.0f
206#define HAPTIC4_ACTUATOR_IMPEDANCE_MAX 50.0f
207#define HAPTIC4_ACTUATOR_V2I_FACTOR_DIVIDER 1.6104f
208#define HAPTIC4_ACTUATOR_LRA_FREQ_MIN 0.0f
209#define HAPTIC4_ACTUATOR_LRA_FREQ_MAX 300.0f
210#define HAPTIC4_ACTUATOR_LRA_FREQ_RESOLUTION 0.00000133332f
211#define HAPTIC4_VIBRATION_LEVEL_MIN -1.0f
212#define HAPTIC4_VIBRATION_LEVEL_MAX 1.0f
213#define HAPTIC4_VIBRATION_LEVEL_MIN_ACC_EN 0.0f
214#define HAPTIC4_VIBRATION_LEVEL_RESOLUTION 0.008f
215#define HAPTIC4_ROUND_TO_NEAREST_INT 0.5f
216
221#define HAPTIC4_DEFAULT_ACTUATOR_TYPE HAPTIC4_TOP_CFG1_ACT_TYPE_LRA
222#define HAPTIC4_DEFAULT_ACTUATOR_ABS_VOLT 2.808f
223#define HAPTIC4_DEFAULT_ACTUATOR_NOM_VOLT 2.106f
224#define HAPTIC4_DEFAULT_ACTUATOR_IMAX 194.0f
225#define HAPTIC4_DEFAULT_ACTUATOR_IMPEDANCE 16.0f
226#define HAPTIC4_DEFAULT_ACTUATOR_LRA_FREQ 174.0f
227
233#define HAPTIC4_DEVICE_ADDRESS 0x4A
234 // haptic4_set
236
251#define HAPTIC4_MAP_MIKROBUS( cfg, mikrobus ) \
252 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
253 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
254 cfg.gp1 = MIKROBUS( mikrobus, MIKROBUS_AN ); \
255 cfg.gp2 = MIKROBUS( mikrobus, MIKROBUS_RST ); \
256 cfg.gp0 = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
257 cfg.irq = MIKROBUS( mikrobus, MIKROBUS_INT )
258 // haptic4_map // haptic4
261
266typedef struct
267{
268 // Output pins
269 digital_out_t gp1;
270 digital_out_t gp2;
271 digital_out_t gp0;
273 // Input pins
274 digital_in_t irq;
276 // Modules
277 i2c_master_t i2c;
279 // I2C slave address
282} haptic4_t;
283
288typedef struct
289{
290 pin_name_t scl;
291 pin_name_t sda;
293 pin_name_t gp1;
294 pin_name_t gp2;
295 pin_name_t gp0;
296 pin_name_t irq;
298 uint32_t i2c_speed;
299 uint8_t i2c_address;
302
307typedef enum
308{
310 HAPTIC4_ERROR = -1
311
313
330
345
359
374err_t haptic4_generic_write ( haptic4_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
375
390err_t haptic4_generic_read ( haptic4_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
391
392
405err_t haptic4_write_register ( haptic4_t *ctx, uint8_t reg, uint8_t data_in );
406
419err_t haptic4_read_register ( haptic4_t *ctx, uint8_t reg, uint8_t *data_out );
420
435err_t haptic4_write_register_bits ( haptic4_t *ctx, uint8_t reg, uint8_t mask, uint8_t data_in );
436
448
458void haptic4_set_gp0 ( haptic4_t *ctx, uint8_t pin_state );
459
469void haptic4_set_gp1 ( haptic4_t *ctx, uint8_t pin_state );
470
480void haptic4_set_gp2 ( haptic4_t *ctx, uint8_t pin_state );
481
491
503err_t haptic4_set_actuator_type ( haptic4_t *ctx, uint8_t type );
504
516err_t haptic4_set_actuator_abs_volt ( haptic4_t *ctx, float abs_volt );
517
529err_t haptic4_set_actuator_nom_volt ( haptic4_t *ctx, float nom_volt );
530
542err_t haptic4_set_actuator_imax ( haptic4_t *ctx, float max_curr );
543
556err_t haptic4_set_actuator_impedance ( haptic4_t *ctx, float impedance );
557
569err_t haptic4_set_actuator_lra_freq ( haptic4_t *ctx, float frequency );
570
582err_t haptic4_set_operation_mode ( haptic4_t *ctx, uint8_t op_mode );
583
595err_t haptic4_set_freq_track ( haptic4_t *ctx, uint8_t freq_track_en );
596
608err_t haptic4_set_acceleration_mode ( haptic4_t *ctx, uint8_t accel_en );
609
622err_t haptic4_set_vibration_level ( haptic4_t *ctx, float level );
623
636err_t haptic4_get_vibration_level ( haptic4_t *ctx, float *level );
637
638#ifdef __cplusplus
639}
640#endif
641#endif // HAPTIC4_H
642 // haptic4
644
645// ------------------------------------------------------------------------ END
err_t haptic4_set_acceleration_mode(haptic4_t *ctx, uint8_t accel_en)
Haptic 4 set accel mode function.
err_t haptic4_set_actuator_abs_volt(haptic4_t *ctx, float abs_volt)
Haptic 4 set actuator abs volt function.
void haptic4_cfg_setup(haptic4_cfg_t *cfg)
Haptic 4 configuration object setup function.
err_t haptic4_set_actuator_lra_freq(haptic4_t *ctx, float frequency)
Haptic 4 set actuator lra freq function.
void haptic4_set_gp1(haptic4_t *ctx, uint8_t pin_state)
Haptic 4 set GP1 pin state function.
err_t haptic4_generic_write(haptic4_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
Haptic 4 I2C writing function.
err_t haptic4_set_actuator_impedance(haptic4_t *ctx, float impedance)
Haptic 4 set actuator impedance function.
void haptic4_set_gp0(haptic4_t *ctx, uint8_t pin_state)
Haptic 4 set GP0 pin state function.
void haptic4_set_gp2(haptic4_t *ctx, uint8_t pin_state)
Haptic 4 set GP2 pin state function.
err_t haptic4_init(haptic4_t *ctx, haptic4_cfg_t *cfg)
Haptic 4 initialization function.
err_t haptic4_default_cfg(haptic4_t *ctx)
Haptic 4 default configuration function.
err_t haptic4_set_operation_mode(haptic4_t *ctx, uint8_t op_mode)
Haptic 4 set operation mode function.
err_t haptic4_set_vibration_level(haptic4_t *ctx, float level)
Haptic 4 set vibration level function.
err_t haptic4_write_register(haptic4_t *ctx, uint8_t reg, uint8_t data_in)
Haptic 4 write register function.
err_t haptic4_set_freq_track(haptic4_t *ctx, uint8_t freq_track_en)
Haptic 4 set freq track function.
err_t haptic4_set_actuator_type(haptic4_t *ctx, uint8_t type)
Haptic 4 set actuator type function.
err_t haptic4_generic_read(haptic4_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
Haptic 4 I2C reading function.
err_t haptic4_read_register(haptic4_t *ctx, uint8_t reg, uint8_t *data_out)
Haptic 4 read register function.
err_t haptic4_check_communication(haptic4_t *ctx)
Haptic 4 check communication function.
err_t haptic4_write_register_bits(haptic4_t *ctx, uint8_t reg, uint8_t mask, uint8_t data_in)
Haptic 4 write register bits function.
uint8_t haptic4_get_int_pin(haptic4_t *ctx)
Haptic 4 get INT pin function.
err_t haptic4_set_actuator_nom_volt(haptic4_t *ctx, float nom_volt)
Haptic 4 set actuator nom volt function.
err_t haptic4_set_actuator_imax(haptic4_t *ctx, float max_curr)
Haptic 4 set actuator imax function.
err_t haptic4_get_vibration_level(haptic4_t *ctx, float *level)
Haptic 4 get vibration level function.
haptic4_return_value_t
Haptic 4 Click return value data.
Definition: haptic4.h:308
@ HAPTIC4_ERROR
Definition: haptic4.h:310
@ HAPTIC4_OK
Definition: haptic4.h:309
Haptic 4 Click configuration object.
Definition: haptic4.h:289
pin_name_t gp0
Definition: haptic4.h:295
pin_name_t gp2
Definition: haptic4.h:294
uint32_t i2c_speed
Definition: haptic4.h:298
pin_name_t irq
Definition: haptic4.h:296
pin_name_t scl
Definition: haptic4.h:290
pin_name_t gp1
Definition: haptic4.h:293
pin_name_t sda
Definition: haptic4.h:291
uint8_t i2c_address
Definition: haptic4.h:299
Haptic 4 Click context object.
Definition: haptic4.h:267
digital_out_t gp2
Definition: haptic4.h:270
digital_in_t irq
Definition: haptic4.h:274
i2c_master_t i2c
Definition: haptic4.h:277
digital_out_t gp1
Definition: haptic4.h:269
digital_out_t gp0
Definition: haptic4.h:271
uint8_t slave_address
Definition: haptic4.h:280