pedometer3  2.0.0.0
pedometer3.h
Go to the documentation of this file.
1 /*
2  * MikroSDK - MikroE Software Development Kit
3  * Copyright© 2020 MikroElektronika d.o.o.
4  *
5  * Permission is hereby granted, free of charge, to any person
6  * obtaining a copy of this software and associated documentation
7  * files (the "Software"), to deal in the Software without restriction,
8  * including without limitation the rights to use, copy, modify, merge,
9  * publish, distribute, sublicense, and/or sell copies of the Software,
10  * and to permit persons to whom the Software is furnished to do so,
11  * subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
22  * OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
34 #ifndef PEDOMETER3_H
35 #define PEDOMETER3_H
36 
37 #include "mikrosdk_version.h"
38 
39 #ifdef __GNUC__
40 #if mikroSDK_GET_VERSION < 20800ul
41 #include "rcu_delays.h"
42 #else
43 #include "delays.h"
44 #endif
45 #endif
46 
47 #include "drv_digital_in.h"
48 #include "drv_i2c_master.h"
49 #include "drv_spi_master.h"
50 
51 
52 // -------------------------------------------------------------- PUBLIC MACROS
62 #define PEDOMETER3_MAP_MIKROBUS( cfg, mikrobus ) \
63  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
64  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
65  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
66  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
67  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
68  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
69  cfg.trg = MIKROBUS( mikrobus, MIKROBUS_AN ); \
70  cfg.it2 = MIKROBUS( mikrobus, MIKROBUS_RST ); \
71  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
72 
78 #define PEDOMETER3_MASTER_I2C 0
79 #define PEDOMETER3_MASTER_SPI 1
80 
86 #define PEDOMETER3_OK 0
87 #define PEDOMETER3_ERROR -1
88 
94 #define PEDOMETER3_REG_MANUFACTURING_ID 0x00
95 #define PEDOMETER3_REG_PART_ID 0x01
96 #define PEDOMETER3_REG_X_AXIS_HIGH_PASS_LOW 0x02
97 #define PEDOMETER3_REG_X_AXIS_HIGH_PASS_HIGH 0x03
98 #define PEDOMETER3_REG_Y_AXIS_HIGH_PASS_LOW 0x04
99 #define PEDOMETER3_REG_Y_AXIS_HIGH_PASS_HIGH 0x05
100 #define PEDOMETER3_REG_Z_AXIS_HIGH_PASS_LOW 0x06
101 #define PEDOMETER3_REG_Z_AXIS_HIGH_PASS_HIGH 0x07
102 #define PEDOMETER3_REG_X_AXIS_OUTPUT_LOW 0x08
103 #define PEDOMETER3_REG_X_AXIS_OUTPUT_HIGH 0x09
104 #define PEDOMETER3_REG_Y_AXIS_OUTPUT_LOW 0x0A
105 #define PEDOMETER3_REG_Y_AXIS_OUTPUT_HIGH 0x0B
106 #define PEDOMETER3_REG_Z_AXIS_OUTPUT_LOW 0x0C
107 #define PEDOMETER3_REG_Z_AXIS_OUTPUT_HIGH 0x0D
108 #define PEDOMETER3_REG_PAD_STEP_LOW 0x0E
109 #define PEDOMETER3_REG_PAD_STEP_HIGH 0x0F
110 #define PEDOMETER3_REG_COMMAND_TEST_RESPONSE 0x10
111 #define PEDOMETER3_REG_WHO_AM_I 0x11
112 #define PEDOMETER3_REG_CURRENT_TILT_POSITION 0x12
113 #define PEDOMETER3_REG_PREVIOUS_TILT_POSITION 0x13
114 #define PEDOMETER3_REG_INS1 0x14
115 #define PEDOMETER3_REG_INS2 0x15
116 #define PEDOMETER3_REG_INS3 0x16
117 #define PEDOMETER3_REG_STATUS 0x17
118 #define PEDOMETER3_REG_INT_REL 0x19
119 #define PEDOMETER3_REG_CONTROL_1 0x1A
120 #define PEDOMETER3_REG_CONTROL_2 0x1B
121 #define PEDOMETER3_REG_CONTROL_3 0x1C
122 #define PEDOMETER3_REG_CONTROL_4 0x1D
123 #define PEDOMETER3_REG_CONTROL_5 0x1E
124 #define PEDOMETER3_REG_OUTPUT_DATA_CONTROL 0x1F
125 #define PEDOMETER3_REG_INTERRUPT_CONTROL_1 0x20
126 #define PEDOMETER3_REG_INTERRUPT_CONTROL_2 0x21
127 #define PEDOMETER3_REG_INTERRUPT_CONTROL_3 0x22
128 #define PEDOMETER3_REG_INTERRUPT_CONTROL_4 0x23
129 #define PEDOMETER3_REG_INTERRUPT_CONTROL_5 0x24
130 #define PEDOMETER3_REG_INTERRUPT_CONTROL_6 0x25
131 #define PEDOMETER3_REG_INTERRUPT_CONTROL_7 0x26
132 #define PEDOMETER3_REG_TILT_TIMER 0x27
133 #define PEDOMETER3_REG_TAP_REPORT_CONTROL 0x28
134 #define PEDOMETER3_REG_DOUBLE_TAP_EVENT 0x29
135 #define PEDOMETER3_REG_TAP_THRESHOLD_HIGH 0x2A
136 #define PEDOMETER3_REG_TAP_THRESHOLD_LOW 0x2B
137 #define PEDOMETER3_REG_FTD 0x2C
138 #define PEDOMETER3_REG_STD 0x2D
139 #define PEDOMETER3_REG_TLT 0x2E
140 #define PEDOMETER3_REG_TWS 0x2F
141 #define PEDOMETER3_REG_FREE_FALL_THRESHOLD 0x30
142 #define PEDOMETER3_REG_FREE_FALL_COUNTER 0x31
143 #define PEDOMETER3_REG_FREE_FALL_CONTROL 0x32
144 #define PEDOMETER3_REG_TILT_ANGLE_LL 0x34
145 #define PEDOMETER3_REG_TILT_ANGLE_HL 0x35
146 #define PEDOMETER3_REG_HYSTERESIS_SET 0x36
147 #define PEDOMETER3_REG_LOW_POWER_CONTROL 0x37
148 #define PEDOMETER3_REG_WUFTH 0x3C
149 #define PEDOMETER3_REG_BTSWUFTH 0x3D
150 #define PEDOMETER3_REG_BTSTH 0x3E
151 #define PEDOMETER3_REG_BTS_MOTION_DETECTION 0x3F
152 #define PEDOMETER3_REG_WUF_MOTION_DETECTION 0x40
153 #define PEDOMETER3_REG_PED_STPWM_LOW 0x41
154 #define PEDOMETER3_REG_PED_STPWM_HIGH 0x42
155 #define PEDOMETER3_REG_PEDOMETER_CONTROL_1 0x43
156 #define PEDOMETER3_REG_PEDOMETER_CONTROL_2 0x44
157 #define PEDOMETER3_REG_PEDOMETER_CONTROL_3 0x45
158 #define PEDOMETER3_REG_PEDOMETER_CONTROL_4 0x46
159 #define PEDOMETER3_REG_PEDOMETER_CONTROL_5 0x47
160 #define PEDOMETER3_REG_PEDOMETER_CONTROL_6 0x48
161 #define PEDOMETER3_REG_PEDOMETER_CONTROL_7 0x49
162 #define PEDOMETER3_REG_PEDOMETER_CONTROL_8 0x4A
163 #define PEDOMETER3_REG_PEDOMETER_CONTROL_9 0x4B
164 #define PEDOMETER3_REG_PEDOMETER_CONTROL_10 0x4C
165 #define PEDOMETER3_REG_SELF_TEST 0x4D
166 #define PEDOMETER3_REG_BUFFER_CONTROL_1 0x5A
167 #define PEDOMETER3_REG_BUFFER_CONTROL_2 0x5B
168 #define PEDOMETER3_REG_BUFFER_STATUS_1 0x5C
169 #define PEDOMETER3_REG_BUFFER_STATUS_2 0x5D
170 #define PEDOMETER3_REG_BUFFER_CLEAR 0x5E
171 #define PEDOMETER3_REG_BUFFER_READ 0x5F
172 
178 #define PEDOMETER3_POSITON_BIT_LEFT_X_NEGATIVE 0x20
179 #define PEDOMETER3_POSITON_BIT_RIGHT_X_POSITIVE 0x10
180 #define PEDOMETER3_POSITON_BIT_DOWN_Y_NEGATIVE 0x08
181 #define PEDOMETER3_POSITON_BIT_UP_Y_POSITIVE 0x04
182 #define PEDOMETER3_POSITON_BIT_FACE_DOWN_Y_NEGATIVE 0x02
183 #define PEDOMETER3_POSITON_BIT_FACE_UP_Y_POSITIVE 0x01
184 
190 #define PEDOMETER3_INS1_STPOVI 0x80
191 #define PEDOMETER3_INS1_STPWMI 0x40
192 #define PEDOMETER3_INS1_TLE 0x20
193 #define PEDOMETER3_INS1_TRI 0x10
194 #define PEDOMETER3_INS1_TDO 0x08
195 #define PEDOMETER3_INS1_TUO 0x04
196 #define PEDOMETER3_INS1_TFD 0x02
197 #define PEDOMETER3_INS1_TFU 0x01
198 
204 #define PEDOMETER3_INS2_FFS 0x80
205 #define PEDOMETER3_INS2_BFI 0x40
206 #define PEDOMETER3_INS2_WMI 0x20
207 #define PEDOMETER3_INS2_DRDY 0x10
208 #define PEDOMETER3_INS2_TDTS_NO_TAP 0x00
209 #define PEDOMETER3_INS2_TDTS_SINGLE_TAP 0x04
210 #define PEDOMETER3_INS2_TDTS_DOUBLE_TAP 0x08
211 #define PEDOMETER3_INS2_STPINCI 0x02
212 #define PEDOMETER3_INS2_TPS 0x01
213 
219 #define PEDOMETER3_INS3_WUFS 0x80
220 #define PEDOMETER3_INS3_BTS 0x40
221 #define PEDOMETER3_INS3_XNWU 0x20
222 #define PEDOMETER3_INS3_XPWU 0x10
223 #define PEDOMETER3_INS3_YNWU 0x08
224 #define PEDOMETER3_INS3_YPWU 0x04
225 #define PEDOMETER3_INS3_ZNWU 0x02
226 #define PEDOMETER3_INS3_ZPWU 0x01
227 
233 #define PEDOMETER3_STATUS_NO_INT 0x00
234 #define PEDOMETER3_STATUS_INT_ACTIVE 0x10
235 #define PEDOMETER3_STATUS_BACK_TO_SLEEP 0x00
236 #define PEDOMETER3_STATUS_WAKE_UP 0x01
237 
243 #define PEDOMETER3_CNTL1_MODE_STAND_BY 0x00
244 #define PEDOMETER3_CNTL1_MODE_LOW_POWER 0x80
245 #define PEDOMETER3_CNTL1_RES_MODE_HIGHER_NOISE 0x00
246 #define PEDOMETER3_CNTL1_RES_MODE_LOWER_NOISE 0x40
247 #define PEDOMETER3_CNTL1_DATA_READY_DISABLE 0x00
248 #define PEDOMETER3_CNTL1_DATA_READY_ENABLE 0x20
249 #define PEDOMETER3_CNTL1_G_RANGE_2g 0x00
250 #define PEDOMETER3_CNTL1_G_RANGE_4g 0x08
251 #define PEDOMETER3_CNTL1_G_RANGE_8g 0x10
252 #define PEDOMETER3_CNTL1_TAP_DISABLE 0x00
253 #define PEDOMETER3_CNTL1_TAP_ENABLE 0x04
254 #define PEDOMETER3_CNTL1_PEDOMETER_DISABLE 0x00
255 #define PEDOMETER3_CNTL1_PEDOMETER_ENABLE 0x02
256 #define PEDOMETER3_CNTL1_TILT_DISABLE 0x00
257 #define PEDOMETER3_CNTL1_TILT_ENABLE 0x01
258 
264 #define PEDOMETER3_CNTL2_SOFTWARE_RESET_ACTIVE 0x80
265 #define PEDOMETER3_CNTL2_SOFTWARE_RESET_NO_ACTIVE 0x00
266 #define PEDOMETER3_CNTL2_COMMAND_TEST_ACTIVE 0x40
267 #define PEDOMETER3_CNTL2_COMMAND_TEST_NO_ACTIVE 0x00
268 #define PEDOMETER3_CNTL2_LEFT_STATE_ENABLE 0x20
269 #define PEDOMETER3_CNTL2_RIGHT_STATE_ENABLE 0x10
270 #define PEDOMETER3_CNTL2_DOWN_STATE_ENABLE 0x08
271 #define PEDOMETER3_CNTL2_UP_STATE_ENABLE 0x04
272 #define PEDOMETER3_CNTL2_FACE_DOWN_STATE_ENABLE 0x02
273 #define PEDOMETER3_CNTL2_FACE_UP_STATE_ENABLE 0x01
274 
280 #define PEDOMETER3_CNTL3_OTP_OUTPUT_DATA_RATE_1_563Hz 0x00
281 #define PEDOMETER3_CNTL3_OTP_OUTPUT_DATA_RATE_6_25Hz 0x40
282 #define PEDOMETER3_CNTL3_OTP_OUTPUT_DATA_RATE_12_5Hz 0x80
283 #define PEDOMETER3_CNTL3_OTP_OUTPUT_DATA_RATE_50Hz 0xC0
284 #define PEDOMETER3_CNTL3_TAP_OUTPUT_DATA_RATE_50Hz 0x00
285 #define PEDOMETER3_CNTL3_TAP_OUTPUT_DATA_RATE_100Hz 0x08
286 #define PEDOMETER3_CNTL3_TAP_OUTPUT_DATA_RATE_200Hz 0x10
287 #define PEDOMETER3_CNTL3_TAP_OUTPUT_DATA_RATE_400Hz 0x18
288 #define PEDOMETER3_CNTL3_TAP_OUTPUT_DATA_RATE_12_5Hz 0x20
289 #define PEDOMETER3_CNTL3_TAP_OUTPUT_DATA_RATE_25Hz 0x28
290 #define PEDOMETER3_CNTL3_TAP_OUTPUT_DATA_RATE_800Hz 0x30
291 #define PEDOMETER3_CNTL3_TAP_OUTPUT_DATA_RATE_1600Hz 0x38
292 #define PEDOMETER3_CNTL3_OWUF_OUTPUT_DATA_RATE_0_781Hz 0x00
293 #define PEDOMETER3_CNTL3_OWUF_OUTPUT_DATA_RATE_1_563Hz 0x01
294 #define PEDOMETER3_CNTL3_OWUF_OUTPUT_DATA_RATE_3_125Hz 0x02
295 #define PEDOMETER3_CNTL3_OWUF_OUTPUT_DATA_RATE_6_250Hz 0x03
296 #define PEDOMETER3_CNTL3_OWUF_OUTPUT_DATA_RATE_12_5Hz 0x04
297 #define PEDOMETER3_CNTL3_OWUF_OUTPUT_DATA_RATE_25Hz 0x05
298 #define PEDOMETER3_CNTL3_OWUF_OUTPUT_DATA_RATE_50Hz 0x06
299 #define PEDOMETER3_CNTL3_OWUF_OUTPUT_DATA_RATE_100Hz 0x07
300 
306 #define PEDOMETER3_CNTL4_COUNTER_CLEAR_MODE 0x00
307 #define PEDOMETER3_CNTL4_COUNTER_DECREMENT_MODE 0x80
308 #define PEDOMETER3_CNTL4_THRESHOLD_MODE_ABSOLUTE 0x00
309 #define PEDOMETER3_CNTL4_THRESHOLD_MODE_RELATIVE 0x40
310 #define PEDOMETER3_CNTL4_WAKE_UP_DISABLE 0x00
311 #define PEDOMETER3_CNTL4_WAKE_UP_ENABLE 0x20
312 #define PEDOMETER3_CNTL4_BACK_TO_SLEEP_DISABLE 0x00
313 #define PEDOMETER3_CNTL4_BACK_TO_SLEEP_ENABLE 0x10
314 #define PEDOMETER3_CNTL4_HIGH_PASS_DISABLE 0x00
315 #define PEDOMETER3_CNTL4_HIGH_PASS_ENABLE 0x08
316 #define PEDOMETER3_CNTL4_OBTS_OUTPUT_DATA_RATE_0_781Hz 0x00
317 #define PEDOMETER3_CNTL4_OBTS_OUTPUT_DATA_RATE_1_563Hz 0x01
318 #define PEDOMETER3_CNTL4_OBTS_OUTPUT_DATA_RATE_3_125Hz 0x02
319 #define PEDOMETER3_CNTL4_OBTS_OUTPUT_DATA_RATE_6_250Hz 0x03
320 #define PEDOMETER3_CNTL4_OBTS_OUTPUT_DATA_RATE_12_5Hz 0x04
321 #define PEDOMETER3_CNTL4_OBTS_OUTPUT_DATA_RATE_25Hz 0x05
322 #define PEDOMETER3_CNTL4_OBTS_OUTPUT_DATA_RATE_50Hz 0x06
323 #define PEDOMETER3_CNTL4_OBTS_OUTPUT_DATA_RATE_100Hz 0x07
324 
330 #define PEDOMETER3_CNTL5_MANUAL_WAKE_UP_0 0x00
331 #define PEDOMETER3_CNTL5_MANUAL_WAKE_UP_1 0x02
332 #define PEDOMETER3_CNTL5_MANUAL_SLEEP_UP_0 0x00
333 #define PEDOMETER3_CNTL5_MANUAL_SLEEP_UP_1 0x01
334 
340 #define PEDOMETER3_ODCNTL_IR_BYPASS_FILTERING_APPLIED 0x00
341 #define PEDOMETER3_ODCNTL_IR_BYPASS_FILTER_BYPASSED 0x80
342 #define PEDOMETER3_ODCNTL_LPRO_ODR_9 0x00
343 #define PEDOMETER3_ODCNTL_LPRO_ODR_2 0x40
344 #define PEDOMETER3_ODCNTL_OSA_OUTPUT_DATA_RATE_12_5Hz 0x00
345 #define PEDOMETER3_ODCNTL_OSA_OUTPUT_DATA_RATE_25Hz 0x01
346 #define PEDOMETER3_ODCNTL_OSA_OUTPUT_DATA_RATE_50Hz 0x02
347 #define PEDOMETER3_ODCNTL_OSA_OUTPUT_DATA_RATE_100Hz 0x03
348 #define PEDOMETER3_ODCNTL_OSA_OUTPUT_DATA_RATE_200Hz 0x04
349 #define PEDOMETER3_ODCNTL_OSA_OUTPUT_DATA_RATE_400Hz 0x05
350 #define PEDOMETER3_ODCNTL_OSA_OUTPUT_DATA_RATE_800Hz 0x06
351 #define PEDOMETER3_ODCNTL_OSA_OUTPUT_DATA_RATE_1600Hz 0x07
352 #define PEDOMETER3_ODCNTL_OSA_OUTPUT_DATA_RATE_0_781Hz 0x08
353 #define PEDOMETER3_ODCNTL_OSA_OUTPUT_DATA_RATE_1_563Hz 0x09
354 #define PEDOMETER3_ODCNTL_OSA_OUTPUT_DATA_RATE_3_125Hz 0x0A
355 #define PEDOMETER3_ODCNTL_OSA_OUTPUT_DATA_RATE_6_25Hz 0x0B
356 #define PEDOMETER3_ODCNTL_OSA_OUTPUT_DATA_RATE_3200Hz 0x0C
357 #define PEDOMETER3_ODCNTL_OSA_OUTPUT_DATA_RATE_6400Hz 0x0D
358 #define PEDOMETER3_ODCNTL_OSA_OUTPUT_DATA_RATE_12800Hz 0x0E
359 #define PEDOMETER3_ODCNTL_OSA_OUTPUT_DATA_RATE_25600Hz 0x0F
360 
366 #define PEDOMETER3_INC1_PULSE_INTERRUPT_1_50uSec 0x00
367 #define PEDOMETER3_INC1_PULSE_INTERRUPT_1_OSA_PERIOD 0x40
368 #define PEDOMETER3_INC1_PULSE_INTERRUPT_1_OSA2_PERIOD 0x80
369 #define PEDOMETER3_INC1_PULSE_INTERRUPT_1_OSA4_PERIOD 0xC0
370 #define PEDOMETER3_INC1_PHYSICAL_INTERRUPT_DISABLE 0x00
371 #define PEDOMETER3_INC1_PHYSICAL_INTERRUPT_ENABLE 0x20
372 #define PEDOMETER3_INC1_INTERRUPT_ACTIVE_LEVEL_LOW 0x00
373 #define PEDOMETER3_INC1_INTERRUPT_ACTIVE_LEVEL_HIGH 0x10
374 #define PEDOMETER3_INC1_INTERRUPT_LATCHED 0x00
375 #define PEDOMETER3_INC1_INTERRUPT_PULSED 0x08
376 #define PEDOMETER3_INC1_SELF_TEST_POLARITY_NEGATIVE 0x00
377 #define PEDOMETER3_INC1_SELF_TEST_POLARITY_POSITIVE 0x02
378 #define PEDOMETER3_INC1_3_WIRE_SPI_INTERFACE_DISABLE 0x00
379 #define PEDOMETER3_INC1_3_WIRE_SPI_INTERFACE_ENABLED 0x01
380 
386 #define PEDOMETER3_INC2_AOI_ACTIVE_STATE_IN_OR 0x00
387 #define PEDOMETER3_INC2_AOI_ACTIVE_STATE_IN_AND 0x40
388 #define PEDOMETER3_INC2_X_NEGATIVE_DISABLE 0x00
389 #define PEDOMETER3_INC2_X_NEGATIVE_ENABEL 0x20
390 #define PEDOMETER3_INC2_Y_NEGATIVE_DISABLE 0x00
391 #define PEDOMETER3_INC2_Y_NEGATIVE_ENABEL 0x08
392 #define PEDOMETER3_INC2_Z_NEGATIVE_DISABLE 0x00
393 #define PEDOMETER3_INC2_Z_NEGATIVE_ENABEL 0x02
394 #define PEDOMETER3_INC2_X_POSITIVE_DISABLE 0x00
395 #define PEDOMETER3_INC2_X_POSITIVE_ENABEL 0x10
396 #define PEDOMETER3_INC2_Y_POSITIVE_DISABLE 0x00
397 #define PEDOMETER3_INC2_Y_POSITIVE_ENABEL 0x04
398 #define PEDOMETER3_INC2_Z_POSITIVE_DISABLE 0x00
399 #define PEDOMETER3_INC2_Z_POSITIVE_ENABEL 0x01
400 
406 #define PEDOMETER3_INC3_ALTERNATE_TAP_DISABLE 0x00
407 #define PEDOMETER3_INC3_ALTERNATE_TAP_ENABLE 0x40
408 #define PEDOMETER3_INC3_LEFT_STATE_DISABLE 0x00
409 #define PEDOMETER3_INC3_LEFT_STATE_ENABLE 0x20
410 #define PEDOMETER3_INC3_RIGHT_STATE_DISABLE 0x00
411 #define PEDOMETER3_INC3_RIGHT_STATE_ENABLE 0x10
412 #define PEDOMETER3_INC3_DOWN_STATE_DISABLE 0x00
413 #define PEDOMETER3_INC3_DOWN_STATE_ENABLE 0x08
414 #define PEDOMETER3_INC3_UP_STATE_DISABLE 0x00
415 #define PEDOMETER3_INC3_UP_STATE_ENABLE 0x04
416 #define PEDOMETER3_INC3_FACE_DOWN_STATE_DISABLE 0x00
417 #define PEDOMETER3_INC3_FACE_DOWN_STATE_ENABLE 0x02
418 #define PEDOMETER3_INC3_FACE_UP_STATE_DISABLE 0x00
419 #define PEDOMETER3_INC3_FACE_UP_STATE_ENABLE 0x01
420 
426 #define PEDOMETER3_INC4_FREE_FALL_INTERRUPT_1_DISABLE 0x00
427 #define PEDOMETER3_INC4_FREE_FALL_INTERRUPT_1_ENABLE 0x80
428 #define PEDOMETER3_INC4_BUFFER_FULL_INTERRUPT_1_DISABLE 0x00
429 #define PEDOMETER3_INC4_BUFFER_FULL_INTERRUPT_1_ENABLE 0x40
430 #define PEDOMETER3_INC4_WATERMARK_INTERRUPT_1_DISABLE 0x00
431 #define PEDOMETER3_INC4_WATERMARK_INTERRUPT_1_ENABLE 0x20
432 #define PEDOMETER3_INC4_DATA_READY_INTERRUPT_1_DISABLE 0x00
433 #define PEDOMETER3_INC4_DATA_READY_INTERRUPT_1_ENABLE 0x10
434 #define PEDOMETER3_INC4_BACK_TO_SLEEP_INTERRUPT_1_DISABLE 0x00
435 #define PEDOMETER3_INC4_BACK_TO_SLEEP_INTERRUPT_1_ENABLE 0x08
436 #define PEDOMETER3_INC4_TAP_INTERRUPT_1_DISABLE 0x00
437 #define PEDOMETER3_INC4_TAP_INTERRUPT_1_ENABLE 0x04
438 #define PEDOMETER3_INC4_WAKE_UP_INTERRUPT_1_DISABLE 0x00
439 #define PEDOMETER3_INC4_WAKE_UP_INTERRUPT_1_ENABLE 0x02
440 #define PEDOMETER3_INC4_TILT_POSITION_INTERRUPT_1_DISABLE 0x00
441 #define PEDOMETER3_INC4_TILT_POSITION_INTERRUPT_1_ENABLE 0x01
442 
448 #define PEDOMETER3_INC5_PULSE_INTERRUPT_2_50uSec 0x00
449 #define PEDOMETER3_INC5_PULSE_INTERRUPT_2_OSA_PERIOD 0x40
450 #define PEDOMETER3_INC5_PULSE_INTERRUPT_2_OSA2_PERIOD 0x80
451 #define PEDOMETER3_INC5_PULSE_INTERRUPT_2_OSA4_PERIOD 0xC0
452 #define PEDOMETER3_INC5_PHYSICAL_INTERRUPT_DISABLE 0x00
453 #define PEDOMETER3_INC5_PHYSICAL_INTERRUPT_ENABLE 0x20
454 #define PEDOMETER3_INC5_INTERRUPT_ACTIVE_LEVEL_LOW 0x00
455 #define PEDOMETER3_INC5_INTERRUPT_ACTIVE_LEVEL_HIGH 0x10
456 #define PEDOMETER3_INC5_INTERRUPT_LATCHED 0x00
457 #define PEDOMETER3_INC5_INTERRUPT_PULSED 0x08
458 #define PEDOMETER3_INC5_LATCHED_INTERRUPT_2_DISABLE 0x00
459 #define PEDOMETER3_INC5_LATCHED_INTERRUPT_2_ENABLE 0x02
460 #define PEDOMETER3_INC5_LATCHED_INTERRUPT_1_DISABLE 0x00
461 #define PEDOMETER3_INC5_LATCHED_INTERRUPT_1_ENABLE 0x01
462 
468 #define PEDOMETER3_INC6_FREE_FALL_INTERRUPT_2_DISABLE 0x00
469 #define PEDOMETER3_INC6_FREE_FALL_INTERRUPT_2_ENABLE 0x80
470 #define PEDOMETER3_INC6_BUFFER_FULL_INTERRUPT_2_DISABLE 0x00
471 #define PEDOMETER3_INC6_BUFFER_FULL_INTERRUPT_2_ENABLE 0x40
472 #define PEDOMETER3_INC6_WATERMARK_INTERRUPT_2_DISABLE 0x00
473 #define PEDOMETER3_INC6_WATERMARK_INTERRUPT_2_ENABLE 0x20
474 #define PEDOMETER3_INC6_DATA_READY_INTERRUPT_2_DISABLE 0x00
475 #define PEDOMETER3_INC6_DATA_READY_INTERRUPT_2_ENABLE 0x10
476 #define PEDOMETER3_INC6_BACK_TO_SLEEP_INTERRUPT_2_DISABLE 0x00
477 #define PEDOMETER3_INC6_BACK_TO_SLEEP_INTERRUPT_2_ENABLE 0x08
478 #define PEDOMETER3_INC6_TAP_INTERRUPT_2_DISABLE 0x00
479 #define PEDOMETER3_INC6_TAP_INTERRUPT_2_ENABLE 0x04
480 #define PEDOMETER3_INC6_WAKE_UP_INTERRUPT_2_DISABLE 0x00
481 #define PEDOMETER3_INC6_WAKE_UP_INTERRUPT_2_ENABLE 0x02
482 #define PEDOMETER3_INC6_TILT_POSITION_INTERRUPT_2_DISABLE 0x00
483 #define PEDOMETER3_INC6_TILT_POSITION_INTERRUPT_2_ENABLE 0x01
484 
490 #define PEDOMETER3_INC7_STEP_OVERFLOW_INTERRUPT_2_DISABLE 0x00
491 #define PEDOMETER3_INC7_STEP_OVERFLOW_INTERRUPT_2_ENABLE 0x40
492 #define PEDOMETER3_INC7_STEP_WATERMARK_INTERRUPT_2_DISABLE 0x00
493 #define PEDOMETER3_INC7_STEP_WATERMARK_INTERRUPT_2_ENABLE 0x20
494 #define PEDOMETER3_INC7_STEP_INCREMENT_INTERRUPT_2_DISABLE 0x00
495 #define PEDOMETER3_INC7_STEP_INCREMENT_INTERRUPT_2_ENABLE 0x10
496 #define PEDOMETER3_INC7_STEP_OVERFLOW_INTERRUPT_1_DISABLE 0x00
497 #define PEDOMETER3_INC7_STEP_OVERFLOW_INTERRUPT_1_ENABLE 0x04
498 #define PEDOMETER3_INC7_STEP_WATERMARK_INTERRUPT_1_DISABLE 0x00
499 #define PEDOMETER3_INC7_STEP_WATERMARK_INTERRUPT_1_ENABLE 0x02
500 #define PEDOMETER3_INC7_STEP_INCREMENT_INTERRUPT_1_DISABLE 0x00
501 #define PEDOMETER3_INC7_STEP_INCREMENT_INTERRUPT_1_ENABLE 0x01
502 
508 #define PEDOMETER3_TDTRC_DOUBLE_TAP_INTERRUPT_DISABLE 0x00
509 #define PEDOMETER3_TDTRC_DOUBLE_TAP_INTERRUPT_ENABLE 0x02
510 #define PEDOMETER3_TDTRC_SINGLE_TAP_INTERRUPT_DISABLE 0x00
511 #define PEDOMETER3_TDTRC_SINGLE_TAP_INTERRUPT_ENABLE 0x01
512 
518 #define PEDOMETER3_FFCNTL_FREE_FALL_DISABLE 0x00
519 #define PEDOMETER3_FFCNTL_FREE_FALL_ENABLE 0x80
520 #define PEDOMETER3_FFCNTL_FREE_FALL_INTERRUPT_LATCH_DISABLE 0x00
521 #define PEDOMETER3_FFCNTL_FREE_FALL_INTERRUPT_UNLATCH_ENABLE 0x40
522 #define PEDOMETER3_FFCNTL_DEBOUNCE_METHODOLOGY_DISABLE 0x00
523 #define PEDOMETER3_FFCNTL_DEBOUNCE_METHODOLOGY_ENABLE 0x08
524 #define PEDOMETER3_FFCNTL_OFFI_OUTPUT_DATA_RATE_12_5Hz 0x00
525 #define PEDOMETER3_FFCNTL_OFFI_OUTPUT_DATA_RATE_25Hz 0x01
526 #define PEDOMETER3_FFCNTL_OFFI_OUTPUT_DATA_RATE_50Hz 0x02
527 #define PEDOMETER3_FFCNTL_OFFI_OUTPUT_DATA_RATE_100Hz 0x03
528 #define PEDOMETER3_FFCNTL_OFFI_OUTPUT_DATA_RATE_200Hz 0x04
529 #define PEDOMETER3_FFCNTL_OFFI_OUTPUT_DATA_RATE_400Hz 0x05
530 #define PEDOMETER3_FFCNTL_OFFI_OUTPUT_DATA_RATE_800Hz 0x06
531 #define PEDOMETER3_FFCNTL_OFFI_OUTPUT_DATA_RATE_1600Hz 0x07
532 
538 #define PEDOMETER3_LP_CNTL_NO_AVERAGING 0x00
539 #define PEDOMETER3_LP_CNTL_2_SAMPLES_AVERAGED 0x10
540 #define PEDOMETER3_LP_CNTL_4_SAMPLES_AVERAGED 0x20
541 #define PEDOMETER3_LP_CNTL_8_SAMPLES_AVERAGED 0x30
542 #define PEDOMETER3_LP_CNTL_16_SAMPLES_AVERAGED 0x40
543 #define PEDOMETER3_LP_CNTL_32_SAMPLES_AVERAGED 0x50
544 #define PEDOMETER3_LP_CNTL_64_SAMPLES_AVERAGED 0x60
545 #define PEDOMETER3_LP_CNTL_128_SAMPLES_AVERAGED 0x70
546 
552 #define PEDOMETER3_PED_CNTL1_STEP_TH_NO_STEPS 0x00
553 #define PEDOMETER3_PED_CNTL1_STEP_TH_2_STEPS 0x01
554 #define PEDOMETER3_PED_CNTL1_STEP_TH_4_STEPS 0x02
555 #define PEDOMETER3_PED_CNTL1_STEP_TH_6_STEPS 0x03
556 #define PEDOMETER3_PED_CNTL1_STEP_TH_8_STEPS 0x04
557 #define PEDOMETER3_PED_CNTL1_STEP_TH_10_STEPS 0x05
558 #define PEDOMETER3_PED_CNTL1_STEP_TH_12_STEPS 0x06
559 #define PEDOMETER3_PED_CNTL1_STEP_TH_14_STEPS 0x07
560 
566 #define PEDOMETER3_PED_CNTL2_HIGH_PASS_FILTER_1 0x00
567 #define PEDOMETER3_PED_CNTL2_HIGH_PASS_FILTER_2 0x10
568 #define PEDOMETER3_PED_CNTL2_HIGH_PASS_FILTER_4 0x20
569 #define PEDOMETER3_PED_CNTL2_HIGH_PASS_FILTER_8 0x30
570 #define PEDOMETER3_PED_CNTL2_HIGH_PASS_FILTER_16 0x40
571 #define PEDOMETER3_PED_CNTL2_HIGH_PASS_FILTER_32 0x50
572 #define PEDOMETER3_PED_CNTL2_HIGH_PASS_FILTER_64 0x60
573 #define PEDOMETER3_PED_CNTL2_HIGH_PASS_FILTER_128 0x70
574 #define PEDOMETER3_PED_CNTL2_ODR_SELECT_100Hz 0x0C
575 #define PEDOMETER3_PED_CNTL2_ODR_SELECT_50Hz 0x06
576 
582 #define PEDOMETER3_SLAVE_ADDRESS_0 0x1E
583 #define PEDOMETER3_SLAVE_ADDRESS_1 0x1F
584 
590 #define PEDOMETER3_TILT_POSITION_LEFT 1
591 #define PEDOMETER3_TILT_POSITION_RIGHT 2
592 #define PEDOMETER3_TILT_POSITION_DOWN 3
593 #define PEDOMETER3_TILT_POSITION_UP 4
594 #define PEDOMETER3_TILT_POSITION_FACE_DOWN 5
595 #define PEDOMETER3_TILT_POSITION_FACE_UP 6
596 
602 #define PEDOMETER3_TAP_X_NEGATIVE 0x10
603 #define PEDOMETER3_TAP_X_POSITIVE 0x11
604 #define PEDOMETER3_TAP_Y_NEGATIVE 0x20
605 #define PEDOMETER3_TAP_Y_POSITIVE 0x21
606 #define PEDOMETER3_TAP_Z_NEGATIVE 0x30
607 #define PEDOMETER3_TAP_Z_POSITIVE 0x31
608  // End group macro
611 // --------------------------------------------------------------- PUBLIC TYPES
620 typedef uint8_t pedometer3_select_t;
621 
625 typedef void ( *pedometer3_master_io_t )( struct pedometer3_s*, uint8_t, uint8_t*, uint8_t );
626 
630 typedef struct pedometer3_s
631 {
632  // Output pins
633  digital_out_t cs;
634 
635  // Input pins
636  digital_in_t trg;
637  digital_in_t it2;
638  digital_in_t int_pin;
639 
640  // Modules
641  i2c_master_t i2c;
642  spi_master_t spi;
643 
644  // ctx variable
645  uint8_t slave_address;
646  pin_name_t chip_select;
650 
652 
656 typedef struct
657 {
658  // Communication gpio pins
659  pin_name_t scl;
660  pin_name_t sda;
661  pin_name_t miso;
662  pin_name_t mosi;
663  pin_name_t sck;
664  pin_name_t cs;
665 
666  // Additional gpio pins
667  pin_name_t trg;
668  pin_name_t it2;
669  pin_name_t int_pin;
670 
671  // static variable
672  uint32_t i2c_speed;
673  uint8_t i2c_address;
674 
675  uint32_t spi_speed;
676  spi_master_mode_t spi_mode;
677  spi_master_chip_select_polarity_t cs_polarity;
678 
680 
682 
686 typedef struct
687 {
688  int16_t x;
689  int16_t y;
690  int16_t z;
691 
693 
697 typedef struct
698 {
699  uint8_t current_pos;
700  uint8_t previous_pos;
701 
703  // End types group
705 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
711 #ifdef __cplusplus
712 extern "C"{
713 #endif
714 
724 
734 
835 
846 void pedometer3_generic_write ( pedometer3_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
847 
858 void pedometer3_generic_read ( pedometer3_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len );
859 
867 
875 
884 void pedometer3_set_step_watermark ( pedometer3_t *ctx, uint16_t value );
885 
895 void pedometer3_pedometer_cfg ( pedometer3_t *ctx, uint8_t odr );
896 
904 
924 
944 
955 
963 
971 
979 
980 #ifdef __cplusplus
981 }
982 #endif
983 #endif // _PEDOMETER3_H_
984  // End varialbles group
987 
988 // ------------------------------------------------------------------------- END
pedometer3_cfg_t::trg
pin_name_t trg
Definition: pedometer3.h:667
pedometer3_s::it2
digital_in_t it2
Definition: pedometer3.h:637
pedometer3_t
struct pedometer3_s pedometer3_t
Click ctx object definition.
pedometer3_axis_t
Axis structure.
Definition: pedometer3.h:687
pedometer3_cfg_t::i2c_address
uint8_t i2c_address
Definition: pedometer3.h:673
pedometer3_pedometer_cfg
void pedometer3_pedometer_cfg(pedometer3_t *ctx, uint8_t odr)
Functions for pedometer configuration.
pedometer3_tilt_position_t
Tilt position structure.
Definition: pedometer3.h:698
pedometer3_cfg_t::spi_speed
uint32_t spi_speed
Definition: pedometer3.h:675
pedometer3_cfg_t::sel
pedometer3_select_t sel
Definition: pedometer3.h:679
pedometer3_s::i2c
i2c_master_t i2c
Definition: pedometer3.h:641
pedometer3_master_io_t
void(* pedometer3_master_io_t)(struct pedometer3_s *, uint8_t, uint8_t *, uint8_t)
Function pointer for master input/output type.
Definition: pedometer3.h:625
pedometer3_set_step_watermark
void pedometer3_set_step_watermark(pedometer3_t *ctx, uint16_t value)
Functions for sets pedometer step counter Watermark.
pedometer3_cfg_t
Click configuration structure definition.
Definition: pedometer3.h:657
pedometer3_cfg_t::sda
pin_name_t sda
Definition: pedometer3.h:660
pedometer3_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: pedometer3.h:672
pedometer3_tilt_position_t::current_pos
uint8_t current_pos
Definition: pedometer3.h:699
pedometer3_axis_t::y
int16_t y
Definition: pedometer3.h:689
pedometer3_s::master_sel
pedometer3_select_t master_sel
Definition: pedometer3.h:649
pedometer3_s::cs
digital_out_t cs
Definition: pedometer3.h:633
pedometer3_s
Click ctx object definition.
Definition: pedometer3.h:631
pedometer3_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: pedometer3.h:677
pedometer3_cfg_t::sck
pin_name_t sck
Definition: pedometer3.h:663
pedometer3_s::read_f
pedometer3_master_io_t read_f
Definition: pedometer3.h:648
pedometer3_s::spi
spi_master_t spi
Definition: pedometer3.h:642
pedometer3_select_t
uint8_t pedometer3_select_t
Comunication select type.
Definition: pedometer3.h:620
pedometer3_get_tilt_position
void pedometer3_get_tilt_position(pedometer3_t *ctx, pedometer3_tilt_position_t *tilt)
Functions for get Tilt current and previous position.
pedometer3_default_cfg
void pedometer3_default_cfg(pedometer3_t *ctx)
Click Default Configuration function.
pedometer3_init
err_t pedometer3_init(pedometer3_t *ctx, pedometer3_cfg_t *cfg)
Initialization function.
pedometer3_s::chip_select
pin_name_t chip_select
Definition: pedometer3.h:646
pedometer3_get_interrupt_2
uint8_t pedometer3_get_interrupt_2(pedometer3_t *ctx)
Functions for read RST pin state.
pedometer3_get_hp_accel_axis
void pedometer3_get_hp_accel_axis(pedometer3_t *ctx, pedometer3_axis_t *axis)
Functions for read High Pass Accel axis data.
pedometer3_tilt_position_t::previous_pos
uint8_t previous_pos
Definition: pedometer3.h:700
pedometer3_s::write_f
pedometer3_master_io_t write_f
Definition: pedometer3.h:647
pedometer3_cfg_t::scl
pin_name_t scl
Definition: pedometer3.h:659
pedometer3_get_interrupt_1
uint8_t pedometer3_get_interrupt_1(pedometer3_t *ctx)
Functions for read INT pin state.
pedometer3_cfg_t::cs
pin_name_t cs
Definition: pedometer3.h:664
pedometer3_get_accel_axis
void pedometer3_get_accel_axis(pedometer3_t *ctx, pedometer3_axis_t *axis)
Functions for read Accel axis data.
pedometer3_cfg_t::miso
pin_name_t miso
Definition: pedometer3.h:661
pedometer3_cfg_t::it2
pin_name_t it2
Definition: pedometer3.h:668
pedometer3_generic_write
void pedometer3_generic_write(pedometer3_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic write function.
pedometer3_s::trg
digital_in_t trg
Definition: pedometer3.h:636
pedometer3_axis_t::z
int16_t z
Definition: pedometer3.h:690
pedometer3_get_trigger_int
uint8_t pedometer3_get_trigger_int(pedometer3_t *ctx)
Functions for read AN pin state.
pedometer3_get_step_counter
uint16_t pedometer3_get_step_counter(pedometer3_t *ctx)
Functions for get pedometer step counter.
pedometer3_cfg_t::mosi
pin_name_t mosi
Definition: pedometer3.h:662
pedometer3_generic_read
void pedometer3_generic_read(pedometer3_t *ctx, uint8_t reg, uint8_t *data_buf, uint8_t len)
Generic read function.
pedometer3_axis_t::x
int16_t x
Definition: pedometer3.h:688
pedometer3_s::int_pin
digital_in_t int_pin
Definition: pedometer3.h:638
pedometer3_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: pedometer3.h:676
pedometer3_s::slave_address
uint8_t slave_address
Definition: pedometer3.h:645
pedometer3_get_tap_detection
uint8_t pedometer3_get_tap_detection(pedometer3_t *ctx)
Functions for get Tap detection.
pedometer3_test_communication
err_t pedometer3_test_communication(pedometer3_t *ctx)
Functions for test first comunication width chip.
pedometer3_cfg_setup
void pedometer3_cfg_setup(pedometer3_cfg_t *cfg)
Config Object Initialization function.
pedometer3_cfg_t::int_pin
pin_name_t int_pin
Definition: pedometer3.h:669