38 #include "drv_digital_out.h" 39 #include "drv_digital_in.h" 40 #include "drv_spi_master.h" 54 #define SHAKE2WAKE_MAP_MIKROBUS( cfg, mikrobus ) \ 55 cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \ 56 cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \ 57 cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \ 58 cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \ 59 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT ); 66 #define SHAKE2WAKE_RETVAL uint8_t 68 #define SHAKE2WAKE_OK 0x00 69 #define SHAKE2WAKE_INIT_ERROR 0xFF 76 #define SHAKE2WAKE_WRITE_REG 0x0A 77 #define SHAKE2WAKE_READ_REG 0x0B 78 #define SHAKE2WAKE_READ_FIFO 0x0D 85 #define SHAKE2WAKE_REG_DEVID_AD 0x00 86 #define SHAKE2WAKE_REG_DEVID_MST 0x01 87 #define SHAKE2WAKE_REG_PARTID 0x02 88 #define SHAKE2WAKE_REG_REVID 0x03 89 #define SHAKE2WAKE_REG_XDATA 0x08 90 #define SHAKE2WAKE_REG_YDATA 0x09 91 #define SHAKE2WAKE_REG_ZDATA 0x0A 92 #define SHAKE2WAKE_REG_STATUS 0x0B 93 #define SHAKE2WAKE_REG_FIFO_L 0x0C 94 #define SHAKE2WAKE_REG_FIFO_H 0x0D 95 #define SHAKE2WAKE_REG_XDATA_L 0x0E 96 #define SHAKE2WAKE_REG_XDATA_H 0x0F 97 #define SHAKE2WAKE_REG_YDATA_L 0x10 98 #define SHAKE2WAKE_REG_YDATA_H 0x11 99 #define SHAKE2WAKE_REG_ZDATA_L 0x12 100 #define SHAKE2WAKE_REG_ZDATA_H 0x13 101 #define SHAKE2WAKE_REG_TEMP_L 0x14 102 #define SHAKE2WAKE_REG_TEMP_H 0x15 103 #define SHAKE2WAKE_REG_SOFT_RESET 0x1F 104 #define SHAKE2WAKE_REG_THRESH_ACT_L 0x20 105 #define SHAKE2WAKE_REG_THRESH_ACT_H 0x21 106 #define SHAKE2WAKE_REG_TIME_ACT 0x22 107 #define SHAKE2WAKE_REG_THRESH_INACT_L 0x23 108 #define SHAKE2WAKE_REG_THRESH_INACT_H 0x24 109 #define SHAKE2WAKE_REG_TIME_INACT_L 0x25 110 #define SHAKE2WAKE_REG_TIME_INACT_H 0x26 111 #define SHAKE2WAKE_REG_ACT_INACT_CTL 0x27 112 #define SHAKE2WAKE_REG_FIFO_CTL 0x28 113 #define SHAKE2WAKE_REG_FIFO_SAMPLES 0x29 114 #define SHAKE2WAKE_REG_INTMAP1 0x2A 115 #define SHAKE2WAKE_REG_INTMAP2 0x2B 116 #define SHAKE2WAKE_REG_FILTER_CTL 0x2C 117 #define SHAKE2WAKE_REG_POWER_CTL 0x2D 118 #define SHAKE2WAKE_REG_SELF_TEST 0x2E 125 #define SHAKE2WAKE_STATUS_ERR_USER_REGS ( 1 << 7 ) 126 #define SHAKE2WAKE_STATUS_AWAKE ( 1 << 6 ) 127 #define SHAKE2WAKE_STATUS_INACT ( 1 << 5 ) 128 #define SHAKE2WAKE_STATUS_ACT ( 1 << 4 ) 129 #define SHAKE2WAKE_STATUS_FIFO_OVERRUN ( 1 << 3 ) 130 #define SHAKE2WAKE_STATUS_FIFO_WATERMARK ( 1 << 2 ) 131 #define SHAKE2WAKE_STATUS_FIFO_RDY ( 1 << 1 ) 132 #define SHAKE2WAKE_STATUS_DATA_RDY 1 139 #define SHAKE2WAKE_CTL_LINKLOOP_MODE_DEFAULT ( ( 0 & 0x03 ) << 4 ) 140 #define SHAKE2WAKE_CTL_LINKLOOP_MODE_LINK ( ( 1 & 0x03 ) << 4 ) 141 #define SHAKE2WAKE_CTL_LINKLOOP_MODE_LOOP ( ( 3 & 0x03 ) << 4 ) 142 #define SHAKE2WAKE_ACT_INACT_CTL_INACT_REF ( 1 << 3 ) 143 #define SHAKE2WAKE_ACT_INACT_CTL_INACT_EN ( 1 << 2 ) 144 #define SHAKE2WAKE_ACT_INACT_CTL_ACT_REF ( 1 << 1 ) 145 #define SHAKE2WAKE_ACT_INACT_CTL_ACT_EN 1 152 #define SHAKE2WAKE_FIFO_CTL_AH ( 1 << 3 ) 153 #define SHAKE2WAKE_FIFO_CTL_FIFO_TEMP ( 1 << 2 ) 154 #define SHAKE2WAKE_FIFO_CTL_FIFO_MODE_DIS ( 0 & 0x03 ) 155 #define SHAKE2WAKE_FIFO_CTL_FIFO_MODE_OSM ( 1 & 0x03 ) 156 #define SHAKE2WAKE_FIFO_CTL_FIFO_MODE_STREAM ( 2 & 0x03 ) 157 #define SHAKE2WAKE_FIFO_CTL_FIFO_MODE_TRIG ( 3 & 0x03 ) 164 #define SHAKE2WAKE_INTMAP1_INT_LOW ( 1 << 7 ) 165 #define SHAKE2WAKE_INTMAP1_AWAKE ( 1 << 6 ) 166 #define SHAKE2WAKE_INTMAP1_INACT ( 1 << 5 ) 167 #define SHAKE2WAKE_INTMAP1_ACT ( 1 << 4 ) 168 #define SHAKE2WAKE_INTMAP1_FIFO_OVERRUN ( 1 << 3 ) 169 #define SHAKE2WAKE_INTMAP1_FIFO_WATERMARK ( 1 << 2 ) 170 #define SHAKE2WAKE_INTMAP1_FIFO_READY ( 1 << 1 ) 171 #define SHAKE2WAKE_INTMAP1_DATA_READY 1 178 #define SHAKE2WAKE_INTMAP2_INT_LOW ( 1 << 7 ) 179 #define SHAKE2WAKE_INTMAP2_AWAKE ( 1 << 6 ) 180 #define SHAKE2WAKE_INTMAP2_INACT ( 1 << 5 ) 181 #define SHAKE2WAKE_INTMAP2_ACT ( 1 << 4 ) 182 #define SHAKE2WAKE_INTMAP2_FIFO_OVERRUN ( 1 << 3 ) 183 #define SHAKE2WAKE_INTMAP2_FIFO_WATERMARK ( 1 << 2 ) 184 #define SHAKE2WAKE_INTMAP2_FIFO_READY ( 1 << 1 ) 185 #define SHAKE2WAKE_INTMAP2_DATA_READY 1 192 #define SHAKE2WAKE_FILTER_CTL_RANGE_2_G ( ( 0 & 0x3 ) << 6 ) 193 #define SHAKE2WAKE_FILTER_CTL_RANGE_4_G ( ( 1 & 0x3 ) << 6 ) 194 #define SHAKE2WAKE_FILTER_CTL_RANGE_8_G ( ( 2 & 0x3 ) << 6 ) 195 #define SHAKE2WAKE_FILTER_CTL_RES ( 1 << 5 ) 196 #define SHAKE2WAKE_FILTER_CTL_HALF_BW ( 1 << 4 ) 197 #define SHAKE2WAKE_FILTER_CTL_EXT_SAMPLE ( 1 << 3 ) 198 #define SHAKE2WAKE_FILTER_CTL_ODR_12_5 ( 0 & 0x07 ) 199 #define SHAKE2WAKE_FILTER_CTL_ODR_25 ( 1 & 0x07 ) 200 #define SHAKE2WAKE_FILTER_CTL_ODR_50 ( 2 & 0x07 ) 201 #define SHAKE2WAKE_FILTER_CTL_ODR_100 ( 3 & 0x07 ) 202 #define SHAKE2WAKE_FILTER_CTL_ODR_200 ( 4 & 0x07 ) 203 #define SHAKE2WAKE_FILTER_CTL_ODR_400 ( 7 & 0x07 ) 210 #define SHAKE2WAKE_POWER_CTL_RES ( 1 << 7 ) 211 #define SHAKE2WAKE_POWER_CTL_EXT_CLK ( 1 << 6 ) 212 #define SHAKE2WAKE_POWER_CTL_LOW_NOISE_MODE_NORMAL ( ( 0 & 0x03 ) << 4 ) 213 #define SHAKE2WAKE_POWER_CTL_LOW_NOISE_MODE_LOW ( ( 1 & 0x03 ) << 4 ) 214 #define SHAKE2WAKE_POWER_CTL_LOW_NOISE_MODE_ULTRALOW ( ( 2 & 0x03 ) << 4 ) 215 #define SHAKE2WAKE_POWER_CTL_WAKEUP ( 1 << 3 ) 216 #define SHAKE2WAKE_POWER_CTL_AUTOSLEEP ( 1 << 2 ) 217 #define SHAKE2WAKE_POWER_CTL_MEASURE_STD_BY ( 0x00 ) 218 #define SHAKE2WAKE_POWER_CTL_MEASURE_MODE ( 0x02 ) 225 #define SHAKE2WAKE_SELF_TEST_ST 1 232 #define SHAKE2WAKE_DEVICE_AD 0xAD 233 #define SHAKE2WAKE_DEVICE_MST 0x1D 234 #define SHAKE2WAKE_PART_ID 0xF2 241 #define SHAKE2WAKE_RESET_KEY 0x52 864 #endif // _SHAKE2WAKE_H_ uint8_t shake2wake_read_act_inact_ctl(shake2wake_t *ctx)
Read activity/inactivity control register function.
void shake2wake_set_output_data_rate(shake2wake_t *ctx, uint8_t odr)
Select output data rate function.
void shake2wake_set_fifo_mode(shake2wake_t *ctx, uint8_t mode)
Enable FIFO and Mode Selection function.
pin_name_t mosi
Definition: shake2wake.h:277
void shake2wake_set_activity_enable(shake2wake_t *ctx)
Set Activity Enable function.
void shake2wake_write_int_1_map(shake2wake_t *ctx, uint8_t wr_data)
Write INT1 function map function.
spi_master_t spi
Definition: shake2wake.h:264
pin_name_t chip_select
Definition: shake2wake.h:265
void shake2wake_set_inact_time(shake2wake_t *ctx, uint16_t inac_time)
Set inactivity time function.
uint8_t shake2wake_read_filter_ctl(shake2wake_t *ctx)
Read filter control register function.
void shake2wake_set_extern_samp_trigg(shake2wake_t *ctx)
External sampling trigger function.
uint16_t shake2wake_read_inact_time(shake2wake_t *ctx)
Read inactivity time function.
void shake2wake_stand_by_mode(shake2wake_t *ctx)
Stand by function.
digital_in_t int_pin
Definition: shake2wake.h:260
uint8_t shake2wake_read_fifo_ctl(shake2wake_t *ctx)
Read FIFO control register function.
uint8_t shake2wake_read_act_time(shake2wake_t *ctx)
Read activity time function.
digital_out_t cs
Definition: shake2wake.h:256
uint8_t shake2wake_read_status(shake2wake_t *ctx)
Read status register function.
uint16_t shake2wake_read_fifo_ent(shake2wake_t *ctx)
Read fifo entries registers function.
uint8_t shake2wake_read_dev_id_mst(shake2wake_t *ctx)
Read DEVID_MST register function.
uint8_t shake2wake_read_fifo_samp(shake2wake_t *ctx)
Read FIFO samples function.
uint32_t spi_speed
Definition: shake2wake.h:287
void shake2wake_read_multiple_byte(shake2wake_t *ctx, uint8_t reg_addr, uint8_t *prd_data, uint8_t cnt)
Read miltiple bytes function.
uint8_t shake2wake_read_int_1_map(shake2wake_t *ctx)
Read INT1 function map function.
void shake2wake_cfg_setup(shake2wake_cfg_t *cfg)
Config Object Initialization function.
void shake2wake_fifo_read(shake2wake_t *ctx, uint8_t *p_buff, uint16_t cnt)
FIFO read function.
#define SHAKE2WAKE_RETVAL
Definition: shake2wake.h:66
int16_t shake2wake_read_act_trsh(shake2wake_t *ctx)
Read activity threshold function.
void shake2wake_set_referenced_inactivity(shake2wake_t *ctx)
Set Referenced Inactivity function.
uint8_t shake2wake_read_dev_id_ad(shake2wake_t *ctx)
Read DEVID_AD register function.
void shake2wake_default_cfg(shake2wake_t *ctx)
Click Default Configuration function.
uint8_t shake2wake_read_byte(shake2wake_t *ctx, uint8_t rd_addr)
Read one byte 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_extern_clk(shake2wake_t *ctx)
Enable external clock function.
pin_name_t int_pin
Definition: shake2wake.h:283
SHAKE2WAKE_RETVAL shake2wake_init(shake2wake_t *ctx, shake2wake_cfg_t *cfg)
Initialization function.
spi_master_chip_select_polarity_t cs_polarity
Definition: shake2wake.h:289
uint8_t shake2wake_read_power_ctl(shake2wake_t *ctx)
Read power control register function.
void shake2wake_write_int_2_map(shake2wake_t *ctx, uint8_t wr_data)
Write INT2 function map function.
void shake2wake_set_low_noise_mode(shake2wake_t *ctx, uint8_t low_noise)
Set Low Noise Mode function.
spi_master_mode_t spi_mode
Definition: shake2wake.h:288
uint8_t shake2wake_read_int_2_map(shake2wake_t *ctx)
Read INT2 function map function.
void shake2wake_set_range(shake2wake_t *ctx, uint8_t range)
Select measurement range function.
void shake2wake_store_temp(shake2wake_t *ctx)
Store Temperature Data to FIFO function.
void shake2wake_set_fifo_above_half(shake2wake_t *ctx)
Set FIFO Above Half function.
void shake2wake_measure_mode(shake2wake_t *ctx)
Measure mode function.
void shake2wake_auto_sleep_mode(shake2wake_t *ctx)
Auto-sleep mode function.
void shake2wake_set_inact_trsh(shake2wake_t *ctx, uint16_t inact_trsh)
Set inactivity threshold function.
void shake2wake_set_act_time(shake2wake_t *ctx, uint8_t ac_time)
Set activity time function.
pin_name_t sck
Definition: shake2wake.h:278
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_soft_reset(shake2wake_t *ctx)
Software reset 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.
Click configuration structure definition.
Definition: shake2wake.h:272
void shake2wake_generic_transfer(shake2wake_t *ctx, uint8_t *wr_buf, uint16_t wr_len, uint8_t *rd_buf, uint16_t rd_len)
Generic transfer function.
pin_name_t miso
Definition: shake2wake.h:276
void shake2wake_write_fifo_samp(shake2wake_t *ctx, uint8_t samp)
Write FIFO samples function.
void shake2wake_get_data_g(shake2wake_t *ctx, float *x_val, float *y_val, float *z_val)
Get accelerometer data in "g" function.
void shake2wake_set_referenced_activity(shake2wake_t *ctx)
Set Referenced Activity function.
void shake2wake_sel_link_loop_mode(shake2wake_t *ctx, uint8_t mode)
Select LINK/LOOP 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.
uint8_t shake2wake_read_part_id(shake2wake_t *ctx)
Read part ID register function.
float shake2wake_read_temperature(shake2wake_t *ctx)
Read temperature function.
void shake2wake_set_inactivity_enable(shake2wake_t *ctx)
Set Inactivity Enable function.
Click ctx object definition.
Definition: shake2wake.h:254
uint8_t shake2wake_read_revision(shake2wake_t *ctx)
Read silicon revision register function.
void shake2wake_set_act_trsh(shake2wake_t *ctx, uint16_t act_trsh)
Set activity threshold function.
uint8_t shake2wake_check_int(shake2wake_t *ctx)
Get Interrupt state function.
void shake2wake_wake_up(shake2wake_t *ctx)
Wake up function.
pin_name_t cs
Definition: shake2wake.h:279