blob: 7738773928435f22f1cc5f979dd8a6489c64947c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* resarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#ifndef __LIS2DW12_H__
#define __LIS2DW12_H__
#include "os/mynewt.h"
#include "sensor/sensor.h"
#ifdef __cplusplus
extern "C" {
#endif
#define LIS2DW12_PM_LP_MODE1 0x00
#define LIS2DW12_PM_LP_MODE2 0x01
#define LIS2DW12_PM_LP_MODE3 0x02
#define LIS2DW12_PM_LP_MODE4 0x03
#define LIS2DW12_PM_HIGH_PERF 0x04
#define LIS2DW12_PM_ON_DEMAND 0x08
#define LIS2DW12_DATA_RATE_0HZ 0x00
#define LIS2DW12_DATA_RATE_1_6HZ 0x10
#define LIS2DW12_DATA_RATE_12_5HZ 0x20
#define LIS2DW12_DATA_RATE_25HZ 0x30
#define LIS2DW12_DATA_RATE_50HZ 0x40
#define LIS2DW12_DATA_RATE_100HZ 0x50
#define LIS2DW12_DATA_RATE_200HZ 0x60
#define LIS2DW12_DATA_RATE_400HZ 0x70
#define LIS2DW12_DATA_RATE_800HZ 0x80
#define LIS2DW12_DATA_RATE_1600HZ 0x90
#define LIS2DW12_ST_MODE_DISABLE 0x00
#define LIS2DW12_ST_MODE_MODE1 0x40
#define LIS2DW12_ST_MODE_MODE2 0x80
#define LIS2DW12_FILTER_BW_ODR_DIV_2 0x00
#define LIS2DW12_FILTER_BW_ODR_DIV_4 0x01
#define LIS2DW12_FILTER_BW_ODR_DIV_10 0x02
#define LIS2DW12_FILTER_BW_ODR_DIV_20 0x03
#define LIS2DW12_FS_2G 0x00
#define LIS2DW12_FS_4G 0x10
#define LIS2DW12_FS_8G 0x20
#define LIS2DW12_FS_16G 0x30
#define LIS2DW12_INT1_CFG_DRDY 0x01
#define LIS2DW12_INT1_CFG_FTH 0x02
#define LIS2DW12_INT1_CFG_DIFF5 0x04
#define LIS2DW12_INT1_CFG_DOUBLE_TAP 0x08
#define LIS2DW12_INT1_CFG_FF 0x10
#define LIS2DW12_INT1_CFG_WU 0x20
#define LIS2DW12_INT1_CFG_SINGLE_TAP 0x40
#define LIS2DW12_INT1_CFG_6D 0x80
#define LIS2DW12_INT2_CFG_DRDY 0x01
#define LIS2DW12_INT2_CFG_FTH 0x02
#define LIS2DW12_INT2_CFG_DIFF5 0x04
#define LIS2DW12_INT2_CFG_OVR 0x08
#define LIS2DW12_INT2_CFG_DRDY_T 0x10
#define LIS2DW12_INT2_CFG_BOOT 0x20
#define LIS2DW12_INT2_CFG_SLEEP_CHG 0x40
#define LIS2DW12_INT2_CFG_SLEEP_STATE 0x80
#define LIS2DW12_INT_SRC_SLP_CHG 0x20
#define LIS2DW12_INT_SRC_6D_IA 0x10
#define LIS2DW12_INT_SRC_DTAP 0x08
#define LIS2DW12_INT_SRC_STAP 0x04
#define LIS2DW12_INT_SRC_WU_IA 0x02
#define LIS2DW12_INT_SRC_FF_IA 0x01
#define LIS2DW12_WAKE_UP_SRC_FF_IA 0x20
#define LIS2DW12_WAKE_UP_SRC_SLEEP_STATE_IA 0x10
#define LIS2DW12_WAKE_UP_SRC_WU_IA 0x08
#define LIS2DW12_WAKE_UP_SRC_X_WU 0x04
#define LIS2DW12_WAKE_UP_SRC_Y_WU 0x02
#define LIS2DW12_WAKE_UP_SRC_Z_WU 0x01
#define LIS2DW12_TAP_SRC_TAP_IA 0x40
#define LIS2DW12_TAP_SRC_SINGLE_TAP 0x20
#define LIS2DW12_TAP_SRC_DOUBLE_TAP 0x10
#define LIS2DW12_TAP_SRC_TAP_SIGN 0x08
#define LIS2DW12_TAP_SRC_X_TAP 0x04
#define LIS2DW12_TAP_SRC_Y_TAP 0x02
#define LIS2DW12_TAP_SRC_Z_TAP 0x01
#define LIS2DW12_SIXD_SRC_6D_IA 0x40
#define LIS2DW12_SIXD_SRC_ZH 0x20
#define LIS2DW12_SIXD_SRC_ZL 0x10
#define LIS2DW12_SIXD_SRC_YH 0x08
#define LIS2DW12_SIXD_SRC_YL 0x04
#define LIS2DW12_SIXD_SRC_XH 0x02
#define LIS2DW12_SIXD_SRC_XL 0x01
#define LIS2DW12_ST_MAX 1500
#define LIS2DW12_ST_MIN 70
#define LIS2DW12_STATUS_FIFO_THS (1 << 7)
#define LIS2DW12_STATUS_WU_IA (1 << 6)
#define LIS2DW12_STATUS_SLEEP_STATE (1 << 5)
#define LIS2DW12_STATUS_DOUBLE_TAP (1 << 4)
#define LIS2DW12_STATUS_SINGLE_TAP (1 << 3)
#define LIS2DW12_STATUS_6D_IA (1 << 2)
#define LIS2DW12_STATUS_FF_IA (1 << 1)
#define LIS2DW12_STATUS_DRDY (1 << 0)
enum lis2dw12_ths_6d {
LIS2DW12_6D_THS_80_DEG = 0,
LIS2DW12_6D_THS_70_DEG = 1,
LIS2DW12_6D_THS_60_DEG = 2,
LIS2DW12_6D_THS_50_DEG = 3
};
enum lis2dw12_tap_priority {
LIS2DW12_TAP_PRIOR_XYZ = 0,
LIS2DW12_TAP_PRIOR_YXZ = 1,
LIS2DW12_TAP_PRIOR_XZY = 2,
LIS2DW12_TAP_PRIOR_ZYX = 3,
LIS2DW12_TAP_PRIOR_YZX = 5,
LIS2DW12_TAP_PRIOR_ZXY = 6
};
enum lis2dw12_fifo_mode {
LIS2DW12_FIFO_M_BYPASS = 0,
LIS2DW12_FIFO_M_FIFO = 1,
LIS2DW12_FIFO_M_CONTINUOUS_TO_FIFO = 3,
LIS2DW12_FIFO_M_BYPASS_TO_CONTINUOUS = 4,
LIS2DW12_FIFO_M_CONTINUOUS = 6
};
enum lis2dw12_read_mode {
LIS2DW12_READ_M_POLL = 0,
LIS2DW12_READ_M_STREAM = 1,
};
struct lis2dw12_notif_cfg {
sensor_event_type_t event;
uint8_t int_num:1;
uint8_t notif_src:7;
uint8_t int_cfg;
};
struct lis2dw12_tap_settings {
uint8_t en_x : 1;
uint8_t en_y : 1;
uint8_t en_z : 1;
uint8_t en_4d : 1;
enum lis2dw12_tap_priority tap_priority;
/* ths data is 5 bits, fs = +-2g */
int8_t tap_ths_x;
int8_t tap_ths_y;
int8_t tap_ths_z;
enum lis2dw12_ths_6d ths_6d;
/* latency is time between taps in double tap, 0 = 16 *1/ODR, LSB = 32*1/ODR */
uint8_t latency;
/* quiet is time after tap data is just below threshold
0 = 2*1/ODR, LSB = 4*1/ODR */
uint8_t quiet;
/* shock is maximum time data can be over threshold to register as tap
0 = 2*1/ODR, LSB = 4*1/ODR */
uint8_t shock;
};
/* Read mode configuration */
struct lis2dw12_read_mode_cfg {
enum lis2dw12_read_mode mode;
uint8_t int_num:1;
uint8_t int_cfg;
};
struct lis2dw12_cfg {
uint8_t rate;
uint8_t fs;
/* Offset config */
int8_t offset_x;
int8_t offset_y;
int8_t offset_z;
uint8_t offset_weight;
/* Tap config */
struct lis2dw12_tap_settings tap;
/* Read mode config */
struct lis2dw12_read_mode_cfg read_mode;
/* Notif config */
struct lis2dw12_notif_cfg *notif_cfg;
uint8_t max_num_notif;
/* Freefall config */
uint8_t freefall_dur;
uint8_t freefall_ths;
/* interrupt config */
uint8_t int1_pin_cfg;
uint8_t int2_pin_cfg;
uint8_t map_int2_to_int1 : 1;
uint8_t offset_en : 1;
uint8_t filter_bw : 2;
uint8_t high_pass : 1;
uint8_t int_enable : 1;
uint8_t int_pp_od : 1;
uint8_t int_latched : 1;
uint8_t int_active_low : 1;
uint8_t inactivity_sleep_enable : 1;
uint8_t low_noise_enable : 1;
uint8_t stationary_detection_enable : 1;
uint8_t double_tap_event_enable : 1;
uint8_t slp_mode : 1;
/* Power mode */
uint8_t power_mode : 4;
/* fifo config */
enum lis2dw12_fifo_mode fifo_mode;
uint8_t fifo_threshold;
/* sleep/wakeup settings */
uint8_t wake_up_ths;
uint8_t wake_up_dur;
uint8_t sleep_duration;
/* Sensor type mask to track enabled sensors */
sensor_type_t mask;
};
/* Used to track interrupt state to wake any present waiters */
struct lis2dw12_int {
/* Synchronize access to this structure */
os_sr_t lock;
/* Sleep waiting for an interrupt to occur */
struct os_sem wait;
/* Is the interrupt currently active */
bool active;
/* Is there a waiter currently sleeping */
bool asleep;
/* Configured interrupts */
struct sensor_int *ints;
};
/* Private per driver data */
struct lis2dw12_pdd {
/* Notification event context */
struct sensor_notify_ev_ctx notify_ctx;
/* Inetrrupt state */
struct lis2dw12_int *interrupt;
/* Interrupt enabled flag */
uint16_t int_enable;
};
struct lis2dw12 {
struct os_dev dev;
struct sensor sensor;
struct lis2dw12_cfg cfg;
struct lis2dw12_int intr;
struct lis2dw12_pdd pdd;
};
/**
* Reset lis2dw12
*
* @param itf The sensor interface
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_reset(struct sensor_itf *itf);
/**
* Get chip ID
*
* @param itf The sensor interface
* @param chip_id Ptr to chip id to be filled up
*/
int lis2dw12_get_chip_id(struct sensor_itf *itf, uint8_t *chip_id);
/**
* Sets the full scale selection
*
* @param itf The sensor interface
* @param fs The full scale value to set
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_full_scale(struct sensor_itf *itf, uint8_t fs);
/**
* Gets the full scale selection
*
* @param itf The sensor interface
* @param fs Ptr to full scale read from the sensor
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_full_scale(struct sensor_itf *itf, uint8_t *fs);
/**
* Sets the rate
*
* @param itf The sensor interface
* @param rate The sampling rate of the sensor
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_rate(struct sensor_itf *itf, uint8_t rate);
/**
* Gets the current rate
*
* @param itf The sensor interface
* @param rate Ptr to rate read from the sensor
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_rate(struct sensor_itf *itf, uint8_t *rate);
/**
* Sets the low noise enable
*
* @param itf The sensor interface
* @param en Low noise enabled
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_low_noise(struct sensor_itf *itf, uint8_t en);
/**
* Gets whether low noise is enabled
*
* @param itf The sensor interface
* @param en Ptr to low noise settings read from sensor
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_low_noise(struct sensor_itf *itf, uint8_t *en);
/**
* Sets the power mode of the sensor
*
* @param itf The sensor interface
* @param mode Power mode
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_power_mode(struct sensor_itf *itf, uint8_t mode);
/**
* Gets the power mode of the sensor
*
* @param itf The sensor interface
* @param mode Ptr to power mode setting read from sensor
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_power_mode(struct sensor_itf *itf, uint8_t *mode);
/**
* Sets the self test mode of the sensor
*
* @param itf The sensor interface
* @param mode Self test mode
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_self_test(struct sensor_itf *itf, uint8_t mode);
/**
* Gets the self test mode of the sensor
*
* @param itf The sensor interface
* @param mode Ptr to self test mode read from sensor
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_self_test(struct sensor_itf *itf, uint8_t *mode);
/**
* Sets the interrupt push-pull/open-drain selection
*
* @param itf The sensor interface
* @param mode Interrupt setting (0 = push-pull, 1 = open-drain)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_int_pp_od(struct sensor_itf *itf, uint8_t mode);
/**
* Gets the interrupt push-pull/open-drain selection
*
* @param itf The sensor interface
* @param mode Ptr to store setting (0 = push-pull, 1 = open-drain)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_int_pp_od(struct sensor_itf *itf, uint8_t *mode);
/**
* Sets whether latched interrupts are enabled
*
* @param itf The sensor interface
* @param en Value to set (0 = not latched, 1 = latched)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_latched_int(struct sensor_itf *itf, uint8_t en);
/**
* Gets whether latched interrupts are enabled
*
* @param itf The sensor interface
* @param en Ptr to store value (0 = not latched, 1 = latched)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_latched_int(struct sensor_itf *itf, uint8_t *en);
/**
* Sets whether interrupts are active high or low
*
* @param itf The sensor interface
* @param low Value to set (0 = active high, 1 = active low)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_int_active_low(struct sensor_itf *itf, uint8_t low);
/**
* Gets whether interrupts are active high or low
*
* @param itf The sensor interface
* @param low Ptr to store value (0 = active high, 1 = active low)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_int_active_low(struct sensor_itf *itf, uint8_t *low);
/**
* Sets single data conversion mode
*
* @param itf The sensor interface
* @param mode Value to set (0 = trigger on INT2 pin, 1 = trigger on write to SLP_MODE_1)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_slp_mode(struct sensor_itf *itf, uint8_t mode);
/**
* Gets single data conversion mode
*
* @param itf The sensor interface
* @param mode Ptr to store value (0 = trigger on INT2 pin, 1 = trigger on write to SLP_MODE_1)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_slp_mode(struct sensor_itf *itf, uint8_t *mode);
/**
* Starts a data conversion in on demand mode
*
* @param itf The sensor interface
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_start_on_demand_conversion(struct sensor_itf *itf);
/**
* Set filter config
*
* @param itf The sensor interface
* @param bw The filter bandwidth
* @param type The filter type (1 = high pass, 0 = low pass)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_filter_cfg(struct sensor_itf *itf, uint8_t bw, uint8_t type);
/**
* Get filter config
*
* @param itf The sensor interface
* @param bw Ptr to the filter bandwidth
* @param type Ptr to filter type (1 = high pass, 0 = low pass)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_filter_cfg(struct sensor_itf *itf, uint8_t *bw, uint8_t *type);
/**
* Sets new offsets in sensor
*
* @param itf The sensor interface
* @param offset_x X offset
* @param offset_y Y offset
* @param offset_z Z offset
* @param weight Value Weight (0 = 977ug/LSB, 1 = 15.6mg/LSB)
*
* @return 0 on success, non-zero error on failure.
*/
int lis2dw12_set_offsets(struct sensor_itf *itf, int8_t offset_x,
int8_t offset_y, int8_t offset_z, uint8_t weight);
/**
* Gets the offsets currently set
*
* @param itf The sensor interface
* @param offset_x Ptr to location to store X offset
* @param offset_y Ptr to location to store Y offset
* @param offset_z Ptr to location to store Z offset
* @param weight Ptr to value weight
*
* @return 0 on success, non-zero error on failure.
*/
int lis2dw12_get_offsets(struct sensor_itf *itf, int8_t *offset_x,
int8_t *offset_y, int8_t *offset_z, uint8_t *weight);
/**
* Sets whether offset are enabled (only work when low pass filtering is enabled)
*
* @param itf The sensor interface
* @param enabled value to set (0 = disabled, 1 = enabled)
*
* @return 0 on success, non-zero error on failure.
*/
int lis2dw12_set_offset_enable(struct sensor_itf *itf, uint8_t enabled);
/**
* Set tap detection configuration
*
* @param itf The sensor interface
* @param cfg The tap settings config
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_tap_cfg(struct sensor_itf *itf, struct lis2dw12_tap_settings *cfg);
/**
* Get tap detection config
*
* @param itf the sensor interface
* @param cfg Ptr to the tap settings
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_tap_cfg(struct sensor_itf *itf, struct lis2dw12_tap_settings *cfg);
/**
* Set freefall detection configuration
*
* @param itf The sensor interface
* @param dur Freefall duration (6 bits LSB = 1/ODR)
* @param ths Freefall threshold (3 bits)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_freefall(struct sensor_itf *itf, uint8_t dur, uint8_t ths);
/**
* Get freefall detection config
*
* @param itf The sensor interface
* @param dur Ptr to freefall duration
* @param ths Ptr to freefall threshold
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_freefall(struct sensor_itf *itf, uint8_t *dur, uint8_t *ths);
/**
* Set interrupt pin configuration for interrupt 1
*
* @param itf The sensor interface
* @param cfg int1 config
*
* @return 0 on success, non-zero on failure
*/
int
lis2dw12_set_int1_pin_cfg(struct sensor_itf *itf, uint8_t cfg);
/**
* Set interrupt pin configuration for interrupt 2
*
* @param itf The sensor interface
* @param cfg int2 config
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_int2_pin_cfg(struct sensor_itf *itf, uint8_t cfg);
/**
* Clear interrupt pin configuration for interrupt 1
*
* @param itf The sensor interface
* @param cfg int1 config
*
* @return 0 on success, non-zero on failure
*/
int
lis2dw12_clear_int1_pin_cfg(struct sensor_itf *itf, uint8_t cfg);
/**
* Clear interrupt pin configuration for interrupt 2
*
* @param itf The sensor interface
* @param cfg int2 config
*
* @return 0 on success, non-zero on failure
*/
int
lis2dw12_clear_int2_pin_cfg(struct sensor_itf *itf, uint8_t cfg);
/**
* Set whether interrupts are enabled
*
* @param itf The sensor interface
* @param enabled Value to set (0 = disabled, 1 = enabled)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_int_enable(struct sensor_itf *itf, uint8_t enabled);
/**
* Clear interrupts
*
* @param itf The sensor interface
* @param src Ptr to return interrupt source in
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_clear_int(struct sensor_itf *itf, uint8_t *src);
/**
* Get Interrupt Status
*
* @param itf The sensor interface
* @param status Ptr to return interrupt status in
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_int_status(struct sensor_itf *itf, uint8_t *status);
/**
* Get Wake Up Source
*
* @param itf The sensor interface
* @param Ptr to return wake_up_src in
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_wake_up_src(struct sensor_itf *itf, uint8_t *status);
/**
* Get Tap Source
*
* @param itf The sensor interface
* @param Ptr to return tap_src in
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_tap_src(struct sensor_itf *itf, uint8_t *status);
/**
* Get 6D Source
*
* @param itf The sensor interface
* @param Ptr to return sixd_src in
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_sixd_src(struct sensor_itf *itf, uint8_t *status);
/**
* Setup FIFO
*
* @param itf The sensor interface
* @param mode FIFO mode to setup
* @param fifo_ths Threshold to set for FIFO
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_fifo_cfg(struct sensor_itf *itf, enum lis2dw12_fifo_mode mode, uint8_t fifo_ths);
/**
* Get Number of Samples in FIFO
*
* @param itf The sensor interface
* @param samples Ptr to return number of samples in
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_fifo_samples(struct sensor_itf *itf, uint8_t *samples);
/**
* Set Wake Up Threshold configuration
*
* @param itf The sensor interface
* @param reg wake_up_ths value to set
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_wake_up_ths(struct sensor_itf *itf, uint8_t reg);
/**
* Get Wake Up Threshold config
*
* @param itf The sensor interface
* @param reg Ptr to store wake_up_ths value
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_wake_up_ths(struct sensor_itf *itf, uint8_t *reg);
/**
* Set whether sleep on inactivity is enabled
*
* @param itf The sensor interface
* @param en Value to set (0 = disabled, 1 = enabled)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_inactivity_sleep_en(struct sensor_itf *itf, uint8_t en);
/**
* Get whether sleep on inactivity is enabled
*
* @param itf The sensor interface
* @param en Ptr to store read state (0 = disabled, 1 = enabled)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_inactivity_sleep_en(struct sensor_itf *itf, uint8_t *en);
/**
* Set whether double tap event is enabled
*
* @param itf The sensor interface
* @param en Value to set (0 = disabled, 1 = enabled)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_double_tap_event_en(struct sensor_itf *itf, uint8_t en);
/**
* Get whether double tap event is enabled
*
* @param itf The sensor interface
* @param Ptr to store read state (0 = disabled, 1 = enabled)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_double_tap_event_en(struct sensor_itf *itf, uint8_t *en);
/**
* Set Wake Up Duration
*
* @param itf The sensor interface
* @param reg duration to set
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_wake_up_dur(struct sensor_itf *itf, uint8_t reg);
/**
* Get Wake Up Duration
*
* @param itf The sensor interface
* @param reg Ptr to store wake_up_dur value
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_wake_up_dur(struct sensor_itf *itf, uint8_t *reg);
/**
* Set Sleep Duration
*
* @param itf The sensor interface
* @param reg Duration to set
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_sleep_dur(struct sensor_itf *itf, uint8_t reg);
/**
* Get Sleep Duration
*
* @param itf The sensor interface
* @param reg Ptr to store sleep_dur value
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_sleep_dur(struct sensor_itf *itf, uint8_t *reg);
/**
* Set Stationary Detection Enable
*
* @param itf The sensor interface
* @param en value to set
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_stationary_en(struct sensor_itf *itf, uint8_t en);
/**
* Get Stationary Detection Enable
*
* @param itf The sensor interface
* @param en ptr to store sleep_dur value
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_stationary_en(struct sensor_itf *itf, uint8_t *en);
/**
* Set whether interrupt 2 signals is mapped onto interrupt 1 pin
*
* @param itf The sensor interface
* @param enable Value to set (0 = disabled, 1 = enabled)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_set_int2_on_int1_map(struct sensor_itf *itf, bool enable);
/**
* Get whether interrupt 2 signals is mapped onto interrupt 1 pin
*
* @param itf The sensor interface
* @param val Value to set (0 = disabled, 1 = enabled)
*
* @return 0 on success, non-zero on failure
*/
int lis2dw12_get_int2_on_int1_map(struct sensor_itf *itf, uint8_t *val);
/**
* Run Self test on sensor
*
* @param itf The sensor interface
* @param result Ptr to return test result in (0 on pass, non-zero on failure)
*
* @return 0 on sucess, non-zero on failure
*/
int lis2dw12_run_self_test(struct sensor_itf *itf, int *result);
/**
* Provide a continuous stream of accelerometer readings.
*
* @param sensor The sensor ptr
* @param type The sensor type
* @param read_func The function pointer to invoke for each accelerometer reading.
* @param read_arg The opaque pointer that will be passed in to the function.
* @param time_ms If non-zero, how long the stream should run in milliseconds.
*
* @return 0 on success, non-zero on failure.
*/
int lis2dw12_stream_read(struct sensor *sensor,
sensor_type_t sensor_type,
sensor_data_func_t read_func,
void *read_arg,
uint32_t time_ms);
/**
* Do accelerometer polling reads
*
* @param sensor The sensor ptr
* @param sensor_type The sensor type
* @param data_func The function pointer to invoke for each accelerometer reading.
* @param data_arg The opaque pointer that will be passed in to the function.
* @param timeout If non-zero, how long the stream should run in milliseconds.
*
* @return 0 on success, non-zero on failure.
*/
int lis2dw12_poll_read(struct sensor *sensor,
sensor_type_t sensor_type,
sensor_data_func_t data_func,
void *data_arg,
uint32_t timeout);
/**
* Expects to be called back through os_dev_create().
*
* @param dev Ptr to the device object associated with this accelerometer
* @param arg Argument passed to OS device init
*
* @return 0 on success, non-zero on failure.
*/
int lis2dw12_init(struct os_dev *dev, void *arg);
/**
* Configure the sensor
*
* @param lis2dw12 Ptr to sensor driver
* @param cfg Ptr to sensor driver config
*/
int lis2dw12_config(struct lis2dw12 *lis2dw12, struct lis2dw12_cfg *cfg);
#if MYNEWT_VAL(LIS2DW12_CLI)
int lis2dw12_shell_init(void);
#endif
#ifdef __cplusplus
}
#endif
#endif /* __LIS2DW12_H__ */