shake2wake 2.0.0.0
shake2wake.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
33// ----------------------------------------------------------------------------
34
35#ifndef SHAKE2WAKE_H
36#define SHAKE2WAKE_H
37
42#ifdef PREINIT_SUPPORTED
43#include "preinit.h"
44#endif
45
46#ifdef MikroCCoreVersion
47 #if MikroCCoreVersion >= 1
48 #include "delays.h"
49 #endif
50#endif
51
52#include "drv_digital_out.h"
53#include "drv_digital_in.h"
54#include "drv_spi_master.h"
55
56
57// -------------------------------------------------------------- PUBLIC MACROS
68#define SHAKE2WAKE_MAP_MIKROBUS( cfg, mikrobus ) \
69 cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
70 cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
71 cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
72 cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
73 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT );
80#define SHAKE2WAKE_OK 0x00
81#define SHAKE2WAKE_ERROR 0xFF
88#define SHAKE2WAKE_WRITE_REG 0x0A
89#define SHAKE2WAKE_READ_REG 0x0B
90#define SHAKE2WAKE_READ_FIFO 0x0D
97#define SHAKE2WAKE_REG_DEVID_AD 0x00
98#define SHAKE2WAKE_REG_DEVID_MST 0x01
99#define SHAKE2WAKE_REG_PARTID 0x02
100#define SHAKE2WAKE_REG_REVID 0x03
101#define SHAKE2WAKE_REG_XDATA 0x08
102#define SHAKE2WAKE_REG_YDATA 0x09
103#define SHAKE2WAKE_REG_ZDATA 0x0A
104#define SHAKE2WAKE_REG_STATUS 0x0B
105#define SHAKE2WAKE_REG_FIFO_L 0x0C
106#define SHAKE2WAKE_REG_FIFO_H 0x0D
107#define SHAKE2WAKE_REG_XDATA_L 0x0E
108#define SHAKE2WAKE_REG_XDATA_H 0x0F
109#define SHAKE2WAKE_REG_YDATA_L 0x10
110#define SHAKE2WAKE_REG_YDATA_H 0x11
111#define SHAKE2WAKE_REG_ZDATA_L 0x12
112#define SHAKE2WAKE_REG_ZDATA_H 0x13
113#define SHAKE2WAKE_REG_TEMP_L 0x14
114#define SHAKE2WAKE_REG_TEMP_H 0x15
115#define SHAKE2WAKE_REG_SOFT_RESET 0x1F
116#define SHAKE2WAKE_REG_THRESH_ACT_L 0x20
117#define SHAKE2WAKE_REG_THRESH_ACT_H 0x21
118#define SHAKE2WAKE_REG_TIME_ACT 0x22
119#define SHAKE2WAKE_REG_THRESH_INACT_L 0x23
120#define SHAKE2WAKE_REG_THRESH_INACT_H 0x24
121#define SHAKE2WAKE_REG_TIME_INACT_L 0x25
122#define SHAKE2WAKE_REG_TIME_INACT_H 0x26
123#define SHAKE2WAKE_REG_ACT_INACT_CTL 0x27
124#define SHAKE2WAKE_REG_FIFO_CTL 0x28
125#define SHAKE2WAKE_REG_FIFO_SAMPLES 0x29
126#define SHAKE2WAKE_REG_INTMAP1 0x2A
127#define SHAKE2WAKE_REG_INTMAP2 0x2B
128#define SHAKE2WAKE_REG_FILTER_CTL 0x2C
129#define SHAKE2WAKE_REG_POWER_CTL 0x2D
130#define SHAKE2WAKE_REG_SELF_TEST 0x2E
137#define SHAKE2WAKE_STATUS_ERR_USER_REGS ( 1 << 7 )
138#define SHAKE2WAKE_STATUS_AWAKE ( 1 << 6 )
139#define SHAKE2WAKE_STATUS_INACT ( 1 << 5 )
140#define SHAKE2WAKE_STATUS_ACT ( 1 << 4 )
141#define SHAKE2WAKE_STATUS_FIFO_OVERRUN ( 1 << 3 )
142#define SHAKE2WAKE_STATUS_FIFO_WATERMARK ( 1 << 2 )
143#define SHAKE2WAKE_STATUS_FIFO_RDY ( 1 << 1 )
144#define SHAKE2WAKE_STATUS_DATA_RDY 1
151#define SHAKE2WAKE_CTL_LINKLOOP_MODE_DEFAULT ( ( 0 & 0x03 ) << 4 )
152#define SHAKE2WAKE_CTL_LINKLOOP_MODE_LINK ( ( 1 & 0x03 ) << 4 )
153#define SHAKE2WAKE_CTL_LINKLOOP_MODE_LOOP ( ( 3 & 0x03 ) << 4 )
154#define SHAKE2WAKE_ACT_INACT_CTL_INACT_REF ( 1 << 3 )
155#define SHAKE2WAKE_ACT_INACT_CTL_INACT_EN ( 1 << 2 )
156#define SHAKE2WAKE_ACT_INACT_CTL_ACT_REF ( 1 << 1 )
157#define SHAKE2WAKE_ACT_INACT_CTL_ACT_EN 1
164#define SHAKE2WAKE_FIFO_CTL_AH ( 1 << 3 )
165#define SHAKE2WAKE_FIFO_CTL_FIFO_TEMP ( 1 << 2 )
166#define SHAKE2WAKE_FIFO_CTL_FIFO_MODE_DIS ( 0 & 0x03 )
167#define SHAKE2WAKE_FIFO_CTL_FIFO_MODE_OSM ( 1 & 0x03 )
168#define SHAKE2WAKE_FIFO_CTL_FIFO_MODE_STREAM ( 2 & 0x03 )
169#define SHAKE2WAKE_FIFO_CTL_FIFO_MODE_TRIG ( 3 & 0x03 )
176#define SHAKE2WAKE_INTMAP1_INT_LOW ( 1 << 7 )
177#define SHAKE2WAKE_INTMAP1_AWAKE ( 1 << 6 )
178#define SHAKE2WAKE_INTMAP1_INACT ( 1 << 5 )
179#define SHAKE2WAKE_INTMAP1_ACT ( 1 << 4 )
180#define SHAKE2WAKE_INTMAP1_FIFO_OVERRUN ( 1 << 3 )
181#define SHAKE2WAKE_INTMAP1_FIFO_WATERMARK ( 1 << 2 )
182#define SHAKE2WAKE_INTMAP1_FIFO_READY ( 1 << 1 )
183#define SHAKE2WAKE_INTMAP1_DATA_READY 1
190#define SHAKE2WAKE_INTMAP2_INT_LOW ( 1 << 7 )
191#define SHAKE2WAKE_INTMAP2_AWAKE ( 1 << 6 )
192#define SHAKE2WAKE_INTMAP2_INACT ( 1 << 5 )
193#define SHAKE2WAKE_INTMAP2_ACT ( 1 << 4 )
194#define SHAKE2WAKE_INTMAP2_FIFO_OVERRUN ( 1 << 3 )
195#define SHAKE2WAKE_INTMAP2_FIFO_WATERMARK ( 1 << 2 )
196#define SHAKE2WAKE_INTMAP2_FIFO_READY ( 1 << 1 )
197#define SHAKE2WAKE_INTMAP2_DATA_READY 1
204#define SHAKE2WAKE_FILTER_CTL_RANGE_2_G ( ( 0 & 0x3 ) << 6 )
205#define SHAKE2WAKE_FILTER_CTL_RANGE_4_G ( ( 1 & 0x3 ) << 6 )
206#define SHAKE2WAKE_FILTER_CTL_RANGE_8_G ( ( 2 & 0x3 ) << 6 )
207#define SHAKE2WAKE_FILTER_CTL_RES ( 1 << 5 )
208#define SHAKE2WAKE_FILTER_CTL_HALF_BW ( 1 << 4 )
209#define SHAKE2WAKE_FILTER_CTL_EXT_SAMPLE ( 1 << 3 )
210#define SHAKE2WAKE_FILTER_CTL_ODR_12_5 ( 0 & 0x07 )
211#define SHAKE2WAKE_FILTER_CTL_ODR_25 ( 1 & 0x07 )
212#define SHAKE2WAKE_FILTER_CTL_ODR_50 ( 2 & 0x07 )
213#define SHAKE2WAKE_FILTER_CTL_ODR_100 ( 3 & 0x07 )
214#define SHAKE2WAKE_FILTER_CTL_ODR_200 ( 4 & 0x07 )
215#define SHAKE2WAKE_FILTER_CTL_ODR_400 ( 7 & 0x07 )
222#define SHAKE2WAKE_POWER_CTL_RES ( 1 << 7 )
223#define SHAKE2WAKE_POWER_CTL_EXT_CLK ( 1 << 6 )
224#define SHAKE2WAKE_POWER_CTL_LOW_NOISE_MODE_NORMAL ( ( 0 & 0x03 ) << 4 )
225#define SHAKE2WAKE_POWER_CTL_LOW_NOISE_MODE_LOW ( ( 1 & 0x03 ) << 4 )
226#define SHAKE2WAKE_POWER_CTL_LOW_NOISE_MODE_ULTRALOW ( ( 2 & 0x03 ) << 4 )
227#define SHAKE2WAKE_POWER_CTL_WAKEUP ( 1 << 3 )
228#define SHAKE2WAKE_POWER_CTL_AUTOSLEEP ( 1 << 2 )
229#define SHAKE2WAKE_POWER_CTL_MEASURE_STD_BY ( 0x00 )
230#define SHAKE2WAKE_POWER_CTL_MEASURE_MODE ( 0x02 )
237#define SHAKE2WAKE_SELF_TEST_ST 1
244#define SHAKE2WAKE_DEVICE_AD 0xAD
245#define SHAKE2WAKE_DEVICE_MST 0x1D
246#define SHAKE2WAKE_PART_ID 0xF2
253#define SHAKE2WAKE_RESET_KEY 0x52
256 // End group macro
257// --------------------------------------------------------------- PUBLIC TYPES
266typedef struct
267{
268 // Input pins
269 digital_in_t int_pin;
270
271 // Modules
272 spi_master_t spi;
273 pin_name_t chip_select;
274
276
280typedef struct
281{
282 // Communication gpio pins
283 pin_name_t miso;
284 pin_name_t mosi;
285 pin_name_t sck;
286 pin_name_t cs;
287
288 // Additional gpio pins
289 pin_name_t int_pin;
290
291 // static variable
292 uint32_t spi_speed;
293 spi_master_mode_t spi_mode;
294 spi_master_chip_select_polarity_t cs_polarity;
295
297
298 // End types group
299// ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
300
305#ifdef __cplusplus
306extern "C"{
307#endif
308
318
327
336
345uint8_t shake2wake_read_byte ( shake2wake_t *ctx, uint8_t rd_addr );
346
356void shake2wake_write_byte ( shake2wake_t *ctx, uint8_t wr_addr, uint8_t wr_val );
357
368void shake2wake_write_two_byte ( shake2wake_t *ctx, uint8_t reg_addr, uint16_t reg_val, uint8_t cnt );
369
380void shake2wake_read_multiple_byte ( shake2wake_t *ctx, uint8_t reg_addr, uint8_t *prd_data, uint8_t cnt );
381
391void shake2wake_fifo_read ( shake2wake_t *ctx, uint8_t *p_buff, uint16_t cnt );
392
401
410
419
428
437
446
455
466void shake2wake_get_lo_res_raw_data ( shake2wake_t *ctx, int8_t *x_val, int8_t *y_val, int8_t *z_val );
467
478void shake2wake_get_raw_data ( shake2wake_t *ctx, int16_t *x_val, int16_t *y_val, int16_t *z_val );
479
488
497
506
515
524
533void shake2wake_set_low_noise_mode ( shake2wake_t *ctx, uint8_t low_noise );
534
543
552void shake2wake_set_range ( shake2wake_t *ctx, uint8_t range );
553
562
571
581
592void shake2wake_get_data_g ( shake2wake_t *ctx, float *x_val, float *y_val, float *z_val );
593
602
611
620void shake2wake_set_fifo_mode ( shake2wake_t *ctx, uint8_t mode );
621
630
639
648
657
666
675
684
693
702void shake2wake_sel_link_loop_mode ( shake2wake_t *ctx, uint8_t mode );
703
712void shake2wake_set_act_trsh ( shake2wake_t *ctx, uint16_t act_trsh );
713
722
731void shake2wake_set_act_time ( shake2wake_t *ctx, uint8_t ac_time );
732
741
750void shake2wake_set_inact_trsh ( shake2wake_t *ctx, uint16_t inact_trsh );
751
760
769void shake2wake_set_inact_time ( shake2wake_t *ctx, uint16_t inac_time );
770
779
788void shake2wake_write_int_1_map ( shake2wake_t *ctx, uint8_t wr_data );
789
798
807void shake2wake_write_int_2_map ( shake2wake_t *ctx, uint8_t wr_data );
808
817
826void shake2wake_write_fifo_samp ( shake2wake_t *ctx, uint8_t samp );
827
836
845
846#ifdef __cplusplus
847}
848#endif
849#endif // _SHAKE2WAKE_H_
850
851 // End public_function group
853
854// ------------------------------------------------------------------------- END
void shake2wake_set_low_noise_mode(shake2wake_t *ctx, uint8_t low_noise)
Set Low Noise Mode function.
uint8_t shake2wake_read_filter_ctl(shake2wake_t *ctx)
Read filter control register function.
uint8_t shake2wake_read_int_2_map(shake2wake_t *ctx)
Read INT2 function map function.
void shake2wake_set_ref_act(shake2wake_t *ctx)
Set Referenced Activity function.
void shake2wake_cfg_setup(shake2wake_cfg_t *cfg)
Config Object Initialization function.
uint8_t shake2wake_read_revision(shake2wake_t *ctx)
Read silicon revision register function.
void shake2wake_fifo_read(shake2wake_t *ctx, uint8_t *p_buff, uint16_t cnt)
FIFO read function.
uint8_t shake2wake_read_fifo_samp(shake2wake_t *ctx)
Read FIFO samples function.
void shake2wake_read_multiple_byte(shake2wake_t *ctx, uint8_t reg_addr, uint8_t *prd_data, uint8_t cnt)
Read miltiple bytes function.
int16_t shake2wake_read_act_trsh(shake2wake_t *ctx)
Read activity threshold function.
void shake2wake_set_inact_enable(shake2wake_t *ctx)
Set Inactivity Enable function.
void shake2wake_default_cfg(shake2wake_t *ctx)
Click Default Configuration function.
void shake2wake_sel_link_loop_mode(shake2wake_t *ctx, uint8_t mode)
Select LINK/LOOP mode function.
void shake2wake_write_int_2_map(shake2wake_t *ctx, uint8_t wr_data)
Write INT2 function map function.
void shake2wake_sel_hal_bandw(shake2wake_t *ctx)
Select halved bandwidth function.
void shake2wake_get_lo_res_raw_data(shake2wake_t *ctx, int8_t *x_val, int8_t *y_val, int8_t *z_val)
Get low resolution raw accelerometer data function.
uint8_t shake2wake_read_power_ctl(shake2wake_t *ctx)
Read power control register function.
void shake2wake_get_raw_data(shake2wake_t *ctx, int16_t *x_val, int16_t *y_val, int16_t *z_val)
Get raw accelerometer data function.
void shake2wake_write_two_byte(shake2wake_t *ctx, uint8_t reg_addr, uint16_t reg_val, uint8_t cnt)
Write two bytes function.
void shake2wake_set_act_enable(shake2wake_t *ctx)
Set Activity Enable function.
void shake2wake_set_inact_trsh(shake2wake_t *ctx, uint16_t inact_trsh)
Set inactivity threshold function.
uint8_t shake2wake_read_part_id(shake2wake_t *ctx)
Read part ID register function.
uint16_t shake2wake_read_inact_time(shake2wake_t *ctx)
Read inactivity time function.
uint8_t shake2wake_read_act_inact_ctl(shake2wake_t *ctx)
Read activity/inactivity control register function.
void shake2wake_stand_by_mode(shake2wake_t *ctx)
Stand by function.
uint8_t shake2wake_read_act_time(shake2wake_t *ctx)
Read activity time function.
void shake2wake_set_range(shake2wake_t *ctx, uint8_t range)
Select measurement range function.
float shake2wake_read_temperature(shake2wake_t *ctx)
Read temperature function.
uint8_t shake2wake_read_dev_id_mst(shake2wake_t *ctx)
Read DEVID_MST register function.
void shake2wake_set_ref_inact(shake2wake_t *ctx)
Set Referenced Inactivity function.
uint8_t shake2wake_read_fifo_ctl(shake2wake_t *ctx)
Read FIFO control register function.
void shake2wake_set_fifo_above_half(shake2wake_t *ctx)
Set FIFO Above Half function.
void shake2wake_auto_sleep_mode(shake2wake_t *ctx)
Auto-sleep mode function.
void shake2wake_measure_mode(shake2wake_t *ctx)
Measure mode function.
void shake2wake_write_byte(shake2wake_t *ctx, uint8_t wr_addr, uint8_t wr_val)
Write one byte function.
int16_t shake2wake_read_inact_trsh(shake2wake_t *ctx)
Read inactivity threshold function.
void shake2wake_soft_reset(shake2wake_t *ctx)
Software reset function.
uint8_t shake2wake_read_int_1_map(shake2wake_t *ctx)
Read INT1 function map function.
void shake2wake_set_ext_samp_trg(shake2wake_t *ctx)
External sampling trigger function.
void shake2wake_write_int_1_map(shake2wake_t *ctx, uint8_t wr_data)
Write INT1 function map function.
void shake2wake_get_data_g(shake2wake_t *ctx, float *x_val, float *y_val, float *z_val)
Get accelerometer data in "g" function.
uint8_t shake2wake_read_dev_id_ad(shake2wake_t *ctx)
Read DEVID_AD register function.
void shake2wake_extern_clk(shake2wake_t *ctx)
Enable external clock function.
void shake2wake_wake_up(shake2wake_t *ctx)
Wake up function.
void shake2wake_store_temp(shake2wake_t *ctx)
Store Temperature Data to FIFO function.
err_t shake2wake_init(shake2wake_t *ctx, shake2wake_cfg_t *cfg)
Initialization function.
uint16_t shake2wake_read_fifo_ent(shake2wake_t *ctx)
Read fifo entries registers function.
void shake2wake_set_act_trsh(shake2wake_t *ctx, uint16_t act_trsh)
Set activity threshold function.
uint8_t shake2wake_read_byte(shake2wake_t *ctx, uint8_t rd_addr)
Read one byte function.
void shake2wake_write_fifo_samp(shake2wake_t *ctx, uint8_t samp)
Write FIFO samples function.
void shake2wake_set_fifo_mode(shake2wake_t *ctx, uint8_t mode)
Enable FIFO and Mode Selection function.
void shake2wake_set_out_data_rate(shake2wake_t *ctx, uint8_t odr)
Select output data rate function.
uint8_t shake2wake_check_int(shake2wake_t *ctx)
Get Interrupt state function.
void shake2wake_set_act_time(shake2wake_t *ctx, uint8_t ac_time)
Set activity time function.
void shake2wake_set_inact_time(shake2wake_t *ctx, uint16_t inac_time)
Set inactivity time function.
uint8_t shake2wake_read_status(shake2wake_t *ctx)
Read status register function.
Click configuration structure definition.
Definition shake2wake.h:281
spi_master_chip_select_polarity_t cs_polarity
Definition shake2wake.h:294
pin_name_t sck
Definition shake2wake.h:285
spi_master_mode_t spi_mode
Definition shake2wake.h:293
pin_name_t mosi
Definition shake2wake.h:284
uint32_t spi_speed
Definition shake2wake.h:292
pin_name_t int_pin
Definition shake2wake.h:289
pin_name_t miso
Definition shake2wake.h:283
pin_name_t cs
Definition shake2wake.h:286
Click ctx object definition.
Definition shake2wake.h:267
spi_master_t spi
Definition shake2wake.h:272
digital_in_t int_pin
Definition shake2wake.h:269
pin_name_t chip_select
Definition shake2wake.h:273