Go to the documentation of this file.
39 #ifdef PREINIT_SUPPORTED
43 #ifdef MikroCCoreVersion
44 #if MikroCCoreVersion >= 1
49 #include "drv_digital_out.h"
50 #include "drv_digital_in.h"
51 #include "drv_i2c_master.h"
73 #define IRGESTURE3_REG_STATUS 0x00
74 #define IRGESTURE3_REG_INT_MASK 0x01
75 #define IRGESTURE3_REG_GPIO_DRV 0x02
76 #define IRGESTURE3_REG_BG_STATUS 0x04
77 #define IRGESTURE3_REG_FIFO_THRESH 0x06
78 #define IRGESTURE3_REG_DEVID 0x08
79 #define IRGESTURE3_REG_I2CS_ID 0x09
80 #define IRGESTURE3_REG_CLK_RATIO 0x0A
81 #define IRGESTURE3_REG_GPIO_CTRL 0x0B
82 #define IRGESTURE3_REG_SLAVE_ADDRESS_KEY 0x0D
83 #define IRGESTURE3_REG_SW_RESET 0x0F
84 #define IRGESTURE3_REG_MODE 0x10
85 #define IRGESTURE3_REG_SLOT_EN 0x11
86 #define IRGESTURE3_REG_FSAMPLE 0x12
87 #define IRGESTURE3_REG_PD_LED_SELECT 0x14
88 #define IRGESTURE3_REG_NUM_AVG 0x15
89 #define IRGESTURE3_REG_BG_MEAS_A 0x16
90 #define IRGESTURE3_REG_INT_SEQ_A 0x17
91 #define IRGESTURE3_REG_SLOTA_CH1_OFFSET 0x18
92 #define IRGESTURE3_REG_SLOTA_CH2_OFFSET 0x19
93 #define IRGESTURE3_REG_SLOTA_CH3_OFFSET 0x1A
94 #define IRGESTURE3_REG_SLOTA_CH4_OFFSET 0x1B
95 #define IRGESTURE3_REG_BG_MEAS_B 0x1C
96 #define IRGESTURE3_REG_INT_SEQ_B 0x1D
97 #define IRGESTURE3_REG_SLOTB_CH1_OFFSET 0x1E
98 #define IRGESTURE3_REG_SLOTB_CH2_OFFSET 0x1F
99 #define IRGESTURE3_REG_SLOTB_CH3_OFFSET 0x20
100 #define IRGESTURE3_REG_SLOTB_CH4_OFFSET 0x21
101 #define IRGESTURE3_REG_ILED3_COARSE 0x22
102 #define IRGESTURE3_REG_ILED1_COARSE 0x23
103 #define IRGESTURE3_REG_ILED2_COARSE 0x24
104 #define IRGESTURE3_REG_ILED_FINE 0x25
105 #define IRGESTURE3_REG_SLOTA_LED_PULSE 0x30
106 #define IRGESTURE3_REG_SLOTA_NUMPULSES 0x31
107 #define IRGESTURE3_REG_LED_DISABLE 0x34
108 #define IRGESTURE3_REG_SLOTB_LED_PULSE 0x35
109 #define IRGESTURE3_REG_SLOTB_NUMPULSES 0x36
110 #define IRGESTURE3_REG_ALT_PWR_DN 0x37
111 #define IRGESTURE3_REG_EXT_SYNC_STARTUP 0x38
112 #define IRGESTURE3_REG_SLOTA_AFE_WINDOW 0x39
113 #define IRGESTURE3_REG_SLOTB_AFE_WINDOW 0x3B
114 #define IRGESTURE3_REG_AFE_PWR_CFG1 0x3C
115 #define IRGESTURE3_REG_SLOTA_FLOAT_LED 0x3E
116 #define IRGESTURE3_REG_SLOTB_FLOAT_LED 0x3F
117 #define IRGESTURE3_REG_SLOTA_TIA_CFG 0x42
118 #define IRGESTURE3_REG_SLOTA_AFE_CFG 0x43
119 #define IRGESTURE3_REG_SLOTB_TIA_CFG 0x44
120 #define IRGESTURE3_REG_SLOTB_AFE_CFG 0x45
121 #define IRGESTURE3_REG_SAMPLE_CLK 0x4B
122 #define IRGESTURE3_REG_CLK32M_ADJUST 0x4D
123 #define IRGESTURE3_REG_EXT_SYNC_SEL 0x4F
124 #define IRGESTURE3_REG_CLK32M_CAL_EN 0x50
125 #define IRGESTURE3_REG_AFE_PWR_CFG2 0x54
126 #define IRGESTURE3_REG_TIA_INDEP_GAIN 0x55
127 #define IRGESTURE3_REG_MATH 0x58
128 #define IRGESTURE3_REG_FLT_CONFIG_B 0x59
129 #define IRGESTURE3_REG_FLT_LED_FIRE 0x5A
130 #define IRGESTURE3_REG_FLT_CONFIG_A 0x5E
131 #define IRGESTURE3_REG_DATA_ACCESS_CTL 0x5F
132 #define IRGESTURE3_REG_FIFO_ACCESS 0x60
133 #define IRGESTURE3_REG_SLOTA_PD1_16BIT 0x64
134 #define IRGESTURE3_REG_SLOTA_PD2_16BIT 0x65
135 #define IRGESTURE3_REG_SLOTA_PD3_16BIT 0x66
136 #define IRGESTURE3_REG_SLOTA_PD4_16BIT 0x67
137 #define IRGESTURE3_REG_SLOTB_PD1_16BIT 0x68
138 #define IRGESTURE3_REG_SLOTB_PD2_16BIT 0x69
139 #define IRGESTURE3_REG_SLOTB_PD3_16BIT 0x6A
140 #define IRGESTURE3_REG_SLOTB_PD4_16BIT 0x6B
141 #define IRGESTURE3_REG_A_PD1_LOW 0x70
142 #define IRGESTURE3_REG_A_PD2_LOW 0x71
143 #define IRGESTURE3_REG_A_PD3_LOW 0x72
144 #define IRGESTURE3_REG_A_PD4_LOW 0x73
145 #define IRGESTURE3_REG_A_PD1_HIGH 0x74
146 #define IRGESTURE3_REG_A_PD2_HIGH 0x75
147 #define IRGESTURE3_REG_A_PD3_HIGH 0x76
148 #define IRGESTURE3_REG_A_PD4_HIGH 0x77
149 #define IRGESTURE3_REG_B_PD1_LOW 0x78
150 #define IRGESTURE3_REG_B_PD2_LOW 0x79
151 #define IRGESTURE3_REG_B_PD3_LOW 0x7A
152 #define IRGESTURE3_REG_B_PD4_LOW 0x7B
153 #define IRGESTURE3_REG_B_PD1_HIGH 0x7C
154 #define IRGESTURE3_REG_B_PD2_HIGH 0x7D
155 #define IRGESTURE3_REG_B_PD3_HIGH 0x7E
156 #define IRGESTURE3_REG_B_PD4_HIGH 0x7F
174 #define IRGESTURE3_SAMPLE_CLK_RESERVED 0x2600u
175 #define IRGESTURE3_SAMPLE_CLK_CLK32K_BYP_MASK 0x0100u
176 #define IRGESTURE3_SAMPLE_CLK_CLK32K_EN_MASK 0x0080u
177 #define IRGESTURE3_SAMPLE_CLK_CLK32K_ADJUST_MASK 0x003Fu
183 #define IRGESTURE3_INT_MASK_RESERVED 0x009Fu
184 #define IRGESTURE3_INT_MASK_FIFO_INT_MASK 0x0100u
185 #define IRGESTURE3_INT_MASK_SLOTB_INT_MASK 0x0040u
186 #define IRGESTURE3_INT_MASK_SLOTA_INT_MASK 0x0020u
192 #define IRGESTURE3_GPIO_DRV_GPIO1_DRV_MASK 0x0200u
193 #define IRGESTURE3_GPIO_DRV_GPIO1_POL_MASK 0x0100u
194 #define IRGESTURE3_GPIO_DRV_GPIO0_ENA_MASK 0x0004u
195 #define IRGESTURE3_GPIO_DRV_GPIO0_DRV_MASK 0x0002u
196 #define IRGESTURE3_GPIO_DRV_GPIO0_POL_MASK 0x0001u
202 #define IRGESTURE3_SLOT_EN_RDOUT_MODE_MASK 0x2000u
203 #define IRGESTURE3_SLOT_EN_FIFO_OVRN_PREVENT_MASK 0x1000u
204 #define IRGESTURE3_SLOT_EN_SLOTB_FIFO_MODE_MASK 0x01C0u
205 #define IRGESTURE3_SLOT_EN_SLOTB_EN_MASK 0x0020u
206 #define IRGESTURE3_SLOT_EN_SLOTA_FIFO_MODE_MASK 0x001Cu
207 #define IRGESTURE3_SLOT_EN_SLOTA_EN_MASK 0x0001u
213 #define IRGESTURE3_PD_LED_SELECT_SLOTB_PD_NC_NC_NC_NC 0x0000u
214 #define IRGESTURE3_PD_LED_SELECT_SLOTB_PD_34_12_NC_NC 0x0100u
215 #define IRGESTURE3_PD_LED_SELECT_SLOTB_PD_78_56_NC_NC 0x0200u
216 #define IRGESTURE3_PD_LED_SELECT_SLOTB_PD_1234_NC_NC_NC 0x0300u
217 #define IRGESTURE3_PD_LED_SELECT_SLOTB_PD_5_6_7_8 0x0400u
218 #define IRGESTURE3_PD_LED_SELECT_SLOTB_PD_1_2_3_4 0x0500u
219 #define IRGESTURE3_PD_LED_SELECT_SLOTB_PD_34_56_NC_NC 0x0600u
220 #define IRGESTURE3_PD_LED_SELECT_SLOTB_PD_5678_NC_NC_NC 0x0700u
221 #define IRGESTURE3_PD_LED_SELECT_SLOTB_PD_SEL_MASK 0x0F00u
222 #define IRGESTURE3_PD_LED_SELECT_SLOTA_PD_NC_NC_NC_NC 0x0000u
223 #define IRGESTURE3_PD_LED_SELECT_SLOTA_PD_34_12_NC_NC 0x0010u
224 #define IRGESTURE3_PD_LED_SELECT_SLOTA_PD_78_56_NC_NC 0x0020u
225 #define IRGESTURE3_PD_LED_SELECT_SLOTA_PD_1234_NC_NC_NC 0x0030u
226 #define IRGESTURE3_PD_LED_SELECT_SLOTA_PD_5_6_7_8 0x0040u
227 #define IRGESTURE3_PD_LED_SELECT_SLOTA_PD_1_2_3_4 0x0050u
228 #define IRGESTURE3_PD_LED_SELECT_SLOTA_PD_34_56_NC_NC 0x0060u
229 #define IRGESTURE3_PD_LED_SELECT_SLOTA_PD_5678_NC_NC_NC 0x0070u
230 #define IRGESTURE3_PD_LED_SELECT_SLOTA_PD_SEL_MASK 0x00F0u
231 #define IRGESTURE3_PD_LED_SELECT_SLOTB_LED_FLOAT 0x0000u
232 #define IRGESTURE3_PD_LED_SELECT_SLOTB_LED_1 0x0004u
233 #define IRGESTURE3_PD_LED_SELECT_SLOTB_LED_2 0x0008u
234 #define IRGESTURE3_PD_LED_SELECT_SLOTB_LED_3 0x000Cu
235 #define IRGESTURE3_PD_LED_SELECT_SLOTB_LED_SEL_MASK 0x000Cu
236 #define IRGESTURE3_PD_LED_SELECT_SLOTA_LED_FLOAT 0x0000u
237 #define IRGESTURE3_PD_LED_SELECT_SLOTA_LED_1 0x0001u
238 #define IRGESTURE3_PD_LED_SELECT_SLOTA_LED_2 0x0002u
239 #define IRGESTURE3_PD_LED_SELECT_SLOTA_LED_3 0x0003u
240 #define IRGESTURE3_PD_LED_SELECT_SLOTA_LED_SEL_MASK 0x0003u
246 #define IRGESTURE3_NUM_AVG_SLOTB_1 0x0000u
247 #define IRGESTURE3_NUM_AVG_SLOTB_2 0x0100u
248 #define IRGESTURE3_NUM_AVG_SLOTB_4 0x0200u
249 #define IRGESTURE3_NUM_AVG_SLOTB_8 0x0300u
250 #define IRGESTURE3_NUM_AVG_SLOTB_16 0x0400u
251 #define IRGESTURE3_NUM_AVG_SLOTB_32 0x0500u
252 #define IRGESTURE3_NUM_AVG_SLOTB_64 0x0600u
253 #define IRGESTURE3_NUM_AVG_SLOTB_128 0x0700u
254 #define IRGESTURE3_NUM_AVG_SLOTB_MASK 0x0700u
255 #define IRGESTURE3_NUM_AVG_SLOTA_1 0x0000u
256 #define IRGESTURE3_NUM_AVG_SLOTA_2 0x0010u
257 #define IRGESTURE3_NUM_AVG_SLOTA_4 0x0020u
258 #define IRGESTURE3_NUM_AVG_SLOTA_8 0x0030u
259 #define IRGESTURE3_NUM_AVG_SLOTA_16 0x0040u
260 #define IRGESTURE3_NUM_AVG_SLOTA_32 0x0050u
261 #define IRGESTURE3_NUM_AVG_SLOTA_64 0x0060u
262 #define IRGESTURE3_NUM_AVG_SLOTA_128 0x0070u
263 #define IRGESTURE3_NUM_AVG_SLOTA_MASK 0x0070u
269 #define IRGESTURE3_INT_SEQ_A_INTEG_ORDER_A_1001 0x0009u
270 #define IRGESTURE3_INT_SEQ_A_INTEG_ORDER_A_MASK 0x000Fu
276 #define IRGESTURE3_ILED1_COARSE_RESERVED 0x1000u
277 #define IRGESTURE3_ILED1_COARSE_SCALE_10_PCT 0x0000u
278 #define IRGESTURE3_ILED1_COARSE_SCALE_100_PCT 0x2000u
279 #define IRGESTURE3_ILED1_COARSE_SCALE_MASK 0x2000u
280 #define IRGESTURE3_ILED1_COARSE_SLEW_MIN 0x0000u
281 #define IRGESTURE3_ILED1_COARSE_SLEW_3 0x0030u
282 #define IRGESTURE3_ILED1_COARSE_SLEW_MAX 0x0070u
283 #define IRGESTURE3_ILED1_COARSE_SLEW_MASK 0x0070u
284 #define IRGESTURE3_ILED1_COARSE_COARSE_MIN 0x0000u
285 #define IRGESTURE3_ILED1_COARSE_COARSE_6 0x0006u
286 #define IRGESTURE3_ILED1_COARSE_COARSE_MAX 0x000Fu
287 #define IRGESTURE3_ILED1_COARSE_COARSE_MASK 0x000Fu
293 #define IRGESTURE3_SLOTA_NUMPULSES_PULSES_4 0x0400u
294 #define IRGESTURE3_SLOTA_NUMPULSES_PULSES_MASK 0xFF00u
295 #define IRGESTURE3_SLOTA_NUMPULSES_PERIOD_15_US 0x000Eu
296 #define IRGESTURE3_SLOTA_NUMPULSES_PERIOD_MASK 0x00FFu
302 #define IRGESTURE3_SLOTA_AFE_WINDOW_WIDTH_4_US 0x2000u
303 #define IRGESTURE3_SLOTA_AFE_WINDOW_WIDTH_MASK 0xF800u
304 #define IRGESTURE3_SLOTA_AFE_WINDOW_OFFSET_23_5_US 0x02F0u
305 #define IRGESTURE3_SLOTA_AFE_WINDOW_OFFSET_MASK 0x07FFu
311 #define IRGESTURE3_MATH_FLT_MATH34_B_ADD_1_2 0x0000u
312 #define IRGESTURE3_MATH_FLT_MATH34_B_ADD_1_SUB_2 0x0400u
313 #define IRGESTURE3_MATH_FLT_MATH34_B_SUB_1_ADD_2 0x0800u
314 #define IRGESTURE3_MATH_FLT_MATH34_B_SUB_1_2 0x0C00u
315 #define IRGESTURE3_MATH_FLT_MATH34_B_MASK 0x0C00u
316 #define IRGESTURE3_MATH_FLT_MATH34_A_ADD_1_2 0x0000u
317 #define IRGESTURE3_MATH_FLT_MATH34_A_ADD_1_SUB_2 0x0100u
318 #define IRGESTURE3_MATH_FLT_MATH34_A_SUB_1_ADD_2 0x0200u
319 #define IRGESTURE3_MATH_FLT_MATH34_A_SUB_1_2 0x0300u
320 #define IRGESTURE3_MATH_FLT_MATH34_A_MASK 0x0300u
321 #define IRGESTURE3_MATH_ENA_INT_AS_BUF_MASK 0x0080u
322 #define IRGESTURE3_MATH_FLT_MATH12_B_ADD_1_2 0x0000u
323 #define IRGESTURE3_MATH_FLT_MATH12_B_ADD_1_SUB_2 0x0020u
324 #define IRGESTURE3_MATH_FLT_MATH12_B_SUB_1_ADD_2 0x0040u
325 #define IRGESTURE3_MATH_FLT_MATH12_B_SUB_1_2 0x0060u
326 #define IRGESTURE3_MATH_FLT_MATH12_B_MASK 0x0060u
327 #define IRGESTURE3_MATH_FLT_MATH12_A_ADD_1_2 0x0000u
328 #define IRGESTURE3_MATH_FLT_MATH12_A_ADD_1_SUB_2 0x0002u
329 #define IRGESTURE3_MATH_FLT_MATH12_A_SUB_1_ADD_2 0x0004u
330 #define IRGESTURE3_MATH_FLT_MATH12_A_SUB_1_2 0x0006u
331 #define IRGESTURE3_MATH_FLT_MATH12_A_MASK 0x0006u
337 #define IRGESTURE3_INT_OSC 32000u
338 #define IRGESTURE3_FSAMPLE_500_HZ 500u
339 #define IRGESTURE3_FSAMPLE_MAX 2000u
345 #define IRGESTURE3_SW_RESET 0x0001u
351 #define IRGESTURE3_MODE_STANDBY 0x0000u
352 #define IRGESTURE3_MODE_PROGRAM 0x0001u
353 #define IRGESTURE3_MODE_NORMAL 0x0002u
359 #define IRGESTURE3_STATUS_FIFO_SAMPLES_MASK 0xFF00u
360 #define IRGESTURE3_STATUS_SLOTB_INT_MASK 0x0040u
361 #define IRGESTURE3_STATUS_SLOTA_INT_MASK 0x0020u
362 #define IRGESTURE3_STATUS_CLEAR 0xFFFFu
368 #define IRGESTURE3_TIMEOUT_MS 5000u
374 #define IRGESTURE3_MIN_NUM_SAMPLES 5
375 #define IRGESTURE3_MAX_NUM_SAMPLES 500
376 #define IRGESTURE3_LIGHT_THRESHOLD 1000
377 #define IRGESTURE3_DISTANCE_THRESHOLD 0.07f
378 #define IRGESTURE3_GESTURE_CLICK 0
379 #define IRGESTURE3_GESTURE_SWIPE_UP 1
380 #define IRGESTURE3_GESTURE_SWIPE_DOWN 2
381 #define IRGESTURE3_GESTURE_SWIPE_LEFT 3
382 #define IRGESTURE3_GESTURE_SWIPE_RIGHT 4
388 #define IRGESTURE3_DEVICE_ID 0x16
389 #define IRGESTURE3_DEVICE_ID_MASK 0xFF
396 #define IRGESTURE3_DEVICE_ADDRESS 0x64
414 #define IRGESTURE3_MAP_MIKROBUS( cfg, mikrobus ) \
415 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
416 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
417 cfg.io1 = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
418 cfg.io0 = MIKROBUS( mikrobus, MIKROBUS_INT )
690 #endif // IRGESTURE3_H
IR Gesture 3 Click context object.
Definition: irgesture3.h:441
uint32_t i2c_speed
Definition: irgesture3.h:466
err_t irgesture3_init(irgesture3_t *ctx, irgesture3_cfg_t *cfg)
IR Gesture 3 initialization function.
uint16_t x_left
Definition: irgesture3.h:429
err_t irgesture3_read_register(irgesture3_t *ctx, uint8_t reg, uint16_t *data_out)
IR Gesture 3 read register function.
pin_name_t io1
Definition: irgesture3.h:463
pin_name_t sda
Definition: irgesture3.h:461
uint16_t y_bottom
Definition: irgesture3.h:432
err_t irgesture3_set_adc_fsample(irgesture3_t *ctx, uint16_t freq_hz)
IR Gesture 3 set adc fsample function.
err_t irgesture3_check_communication(irgesture3_t *ctx)
IR Gesture 3 check communication function.
uint8_t irgesture3_get_io0_pin(irgesture3_t *ctx)
IR Gesture 3 get io0 function.
err_t irgesture3_get_gesture(irgesture3_t *ctx, uint8_t *gesture)
IR Gesture 3 get gesture function.
uint16_t x_right
Definition: irgesture3.h:430
uint8_t slave_address
Definition: irgesture3.h:450
irgesture3_return_value_t
IR Gesture 3 Click return value data.
Definition: irgesture3.h:476
err_t irgesture3_set_mode(irgesture3_t *ctx, uint8_t mode)
IR Gesture 3 set mode function.
err_t irgesture3_sw_reset(irgesture3_t *ctx)
IR Gesture 3 sw reset function.
IR Gesture 3 Click photodiodes data object.
Definition: irgesture3.h:428
digital_in_t io0
Definition: irgesture3.h:444
@ IRGESTURE3_ERROR
Definition: irgesture3.h:478
err_t irgesture3_get_pd_data(irgesture3_t *ctx, irgesture3_pd_data_t *pd_data)
IR Gesture 3 get pd data function.
i2c_master_t i2c
Definition: irgesture3.h:447
pin_name_t io0
Definition: irgesture3.h:464
uint16_t y_top
Definition: irgesture3.h:431
uint8_t irgesture3_get_io1_pin(irgesture3_t *ctx)
IR Gesture 3 get io1 function.
IR Gesture 3 Click configuration object.
Definition: irgesture3.h:459
uint8_t i2c_address
Definition: irgesture3.h:467
err_t irgesture3_default_cfg(irgesture3_t *ctx)
IR Gesture 3 default configuration function.
digital_in_t io1
Definition: irgesture3.h:443
err_t irgesture3_write_register(irgesture3_t *ctx, uint8_t reg, uint16_t data_in)
IR Gesture 3 write register function.
void irgesture3_cfg_setup(irgesture3_cfg_t *cfg)
IR Gesture 3 configuration object setup function.
err_t irgesture3_clear_status(irgesture3_t *ctx)
IR Gesture 3 clear status function.
@ IRGESTURE3_OK
Definition: irgesture3.h:477
pin_name_t scl
Definition: irgesture3.h:460
err_t irgesture3_wait_data_ready(irgesture3_t *ctx)
IR Gesture 3 wait data ready function.