kx122: Added driver files to src
Signed-off-by: Samuli Rissanen <samuli.rissanen@hotmail.com> Signed-off-by: Noel Eck <noel.eck@intel.com>
This commit is contained in:
696
src/kx122/kx122.h
Normal file
696
src/kx122/kx122.h
Normal file
@@ -0,0 +1,696 @@
|
||||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Author: Samuli Rissanen <samuli.rissanen@hotmail.com>
|
||||
* Copyright (c) 2018 Rohm Semiconductor.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <unistd.h>
|
||||
#include <math.h>
|
||||
|
||||
#include <mraa/i2c.h>
|
||||
#include <mraa/spi.h>
|
||||
#include <mraa/gpio.h>
|
||||
|
||||
#include <upm/upm_types.h>
|
||||
|
||||
#include "kx122_registers.h"
|
||||
|
||||
/**
|
||||
* @file kx122.h
|
||||
* @library kx122
|
||||
* @brief C API for the kx122 driver
|
||||
*
|
||||
* @include kx122.c
|
||||
*/
|
||||
|
||||
//Used to set the bit required for SPI reading
|
||||
#define SPI_READ 0x80
|
||||
|
||||
//Used to mask the read bit required for SPI writing
|
||||
#define SPI_WRITE 0x7F
|
||||
|
||||
//Frequency of the SPI connection
|
||||
#define SPI_FREQUENCY 10000
|
||||
|
||||
//Default slave addresses for the sensor
|
||||
#define KX122_DEFAULT_SLAVE_ADDR_1 0x1F
|
||||
#define KX122_DEFAULT_SLAVE_ADDR_2 0x1E
|
||||
|
||||
//Masks
|
||||
#define KX122_CNTL2_SRST_MASK 0x80
|
||||
|
||||
//Used to determine amount of samples in the buffer.
|
||||
#define LOW_RES_SAMPLE_MODIFIER 3
|
||||
#define HIGH_RES_SAMPLE_MODIFIER 6
|
||||
|
||||
//Masks for interrupt control registers
|
||||
#define KX122_INC1_MASK 0xFB
|
||||
#define KX122_INC4_MASK 0xF7
|
||||
#define KX122_INC5_MASK 0xFB
|
||||
#define KX122_INC6_MASK 0xF7
|
||||
|
||||
//Acceleration data buffer length
|
||||
#define BUFFER_LEN 6
|
||||
|
||||
//Acceleration per decimal value for each acceleration ranges
|
||||
#define RANGE_2G_G 0.00006f
|
||||
#define RANGE_4G_G 0.00012f
|
||||
#define RANGE_8G_G 0.00024f
|
||||
|
||||
//Acceleration scaling between high and low resolution modes
|
||||
#define RANGE_RES_SCALE 260
|
||||
|
||||
//Maximum loop iterations
|
||||
#define MAX_LOOP_COUNT 100
|
||||
|
||||
//Sensor self-test defines
|
||||
#define SELF_TEST_LOOP_WAIT_TIME 10000
|
||||
#define SELF_TEST_MAX_DIFFERENCE 0.75f
|
||||
#define SELF_TEST_MIN_XY_DIFFERENCE 0.25f
|
||||
#define SELF_TEST_MIN_Z_DIFFERENCE 0.20f
|
||||
|
||||
//Maximum amount of samples in the buffer for high and low resolutions
|
||||
#define MAX_BUFFER_SAMPLES_LOW_RES 681
|
||||
#define MAX_BUFFER_SAMPLES_HIGH_RES 340
|
||||
|
||||
//Earth gravity constant (m/s^2)
|
||||
#define GRAVITY 9.81f
|
||||
|
||||
//Microseconds in a second
|
||||
#define MICRO_S 1000000
|
||||
|
||||
//Sensor ODR values
|
||||
typedef enum{
|
||||
KX122_ODR_12P5 = KX122_ODCNTL_OSA_12P5,
|
||||
KX122_ODR_25 = KX122_ODCNTL_OSA_25,
|
||||
KX122_ODR_50 = KX122_ODCNTL_OSA_50,
|
||||
KX122_ODR_100 = KX122_ODCNTL_OSA_100,
|
||||
KX122_ODR_200 = KX122_ODCNTL_OSA_200,
|
||||
KX122_ODR_400 = KX122_ODCNTL_OSA_400,
|
||||
KX122_ODR_800 = KX122_ODCNTL_OSA_800,
|
||||
KX122_ODR_1600 = KX122_ODCNTL_OSA_1600,
|
||||
KX122_ODR_0P781 = KX122_ODCNTL_OSA_0P781,
|
||||
KX122_ODR_1P563 = KX122_ODCNTL_OSA_1P563,
|
||||
KX122_ODR_3P125 = KX122_ODCNTL_OSA_3P125,
|
||||
KX122_ODR_6P25 = KX122_ODCNTL_OSA_6P25,
|
||||
KX122_ODR_3200 = KX122_ODCNTL_OSA_3200,
|
||||
KX122_ODR_6400 = KX122_ODCNTL_OSA_6400,
|
||||
KX122_ODR_12800 = KX122_ODCNTL_OSA_12800,
|
||||
KX122_ODR_25600 = KX122_ODCNTL_OSA_25600
|
||||
} KX122_ODR_T;
|
||||
|
||||
//Sensor average values
|
||||
typedef enum{
|
||||
KX122_NO_AVG = KX122_LP_CNTL_AVC_NO_AVG,
|
||||
KX122_2_SAMPLE_AVG = KX122_LP_CNTL_AVC_2_SAMPLE_AVG,
|
||||
KX122_4_SAMPLE_AVG = KX122_LP_CNTL_AVC_4_SAMPLE_AVG,
|
||||
KX122_8_SAMPLE_AVG = KX122_LP_CNTL_AVC_8_SAMPLE_AVG,
|
||||
KX122_16_SAMPLE_AVG = KX122_LP_CNTL_AVC_16_SAMPLE_AVG,
|
||||
KX122_32_SAMPLE_AVG = KX122_LP_CNTL_AVC_32_SAMPLE_AVG,
|
||||
KX122_64_SAMPLE_AVG = KX122_LP_CNTL_AVC_64_SAMPLE_AVG,
|
||||
KX122_128_SAMPLE_AVG = KX122_LP_CNTL_AVC_128_SAMPLE_AVG
|
||||
} KX122_AVG_T;
|
||||
|
||||
//Sensor range values
|
||||
typedef enum{
|
||||
KX122_RANGE_2G = KX122_CNTL1_GSEL_2G,
|
||||
KX122_RANGE_4G = KX122_CNTL1_GSEL_4G,
|
||||
KX122_RANGE_8G = KX122_CNTL1_GSEL_8G
|
||||
} KX122_RANGE_T;
|
||||
|
||||
//Sensor buffer modes
|
||||
typedef enum{
|
||||
KX122_FIFO_MODE = KX122_BUF_CNTL2_BUF_M_FIFO,
|
||||
KX122_FILO_MODE = KX122_BUF_CNTL2_BUF_M_FILO,
|
||||
KX122_STREAM_MODE = KX122_BUF_CNTL2_BUF_M_STREAM,
|
||||
} KX122_BUFFER_MODE_T;
|
||||
|
||||
//Sensor interrupt types
|
||||
typedef enum{
|
||||
KX122_BUF_FULL_INT = KX122_INC4_BFI1,
|
||||
KX122_WATERMARK_INT = KX122_INC4_WMI1,
|
||||
KX122_DATA_READY_INT = KX122_INC4_DRDYI1
|
||||
} KX122_INTERRUPT_T;
|
||||
|
||||
//High and low resolution modes
|
||||
typedef enum{
|
||||
HIGH_RES,
|
||||
LOW_RES
|
||||
} KX122_RES_T;
|
||||
|
||||
//Sensor low-pass filter roll of values
|
||||
typedef enum{
|
||||
ODR_9,
|
||||
ODR_2
|
||||
} LPRO_STATE_T;
|
||||
|
||||
//Interrupt pins
|
||||
typedef enum{
|
||||
INT1,
|
||||
INT2
|
||||
}KX122_INTERRUPT_PIN_T;
|
||||
|
||||
//Interrupt polarity
|
||||
typedef enum{
|
||||
ACTIVE_LOW,
|
||||
ACTIVE_HIGH
|
||||
} KX122_INTERRUPT_POLARITY_T;
|
||||
|
||||
//Device context
|
||||
typedef struct _kx122_context {
|
||||
mraa_i2c_context i2c;
|
||||
mraa_spi_context spi;
|
||||
mraa_gpio_context gpio1; //Interrupt pin 1
|
||||
mraa_gpio_context gpio2; //Interrupt pin 2
|
||||
mraa_gpio_context chip_select; //Chip select pin (SPI)
|
||||
|
||||
float accel_scale; //Acceleration scaling
|
||||
KX122_RES_T res_mode; //Sensor resolution
|
||||
KX122_RANGE_T grange_mode; //Sensor range
|
||||
|
||||
float buffer_accel_scale; //Buffer acceleration scaling
|
||||
KX122_BUFFER_MODE_T buffer_mode; //Buffer mode
|
||||
KX122_RES_T buffer_res; //Buffer resolution
|
||||
|
||||
bool using_spi;
|
||||
|
||||
} *kx122_context;
|
||||
|
||||
//Struct for ODR values and their decimal counterparts.
|
||||
typedef struct _odr_item{
|
||||
uint8_t odr_value;
|
||||
float odr_decimal;
|
||||
} odr_item;
|
||||
|
||||
/**
|
||||
KX122 initialization
|
||||
|
||||
Set addr to -1 if using SPI.
|
||||
When using I2C, set chip_select_pin to -1;
|
||||
|
||||
@param bus I2C or SPI bus to use.
|
||||
@param addr I2C address of the sensor.
|
||||
@param chip_select Chip select pin for SPI.
|
||||
@return The device context, or NULL if an error occurs.
|
||||
*/
|
||||
kx122_context kx122_init(int bus, int addr, int chip_select_pin);
|
||||
|
||||
/**
|
||||
KX122 destructor
|
||||
Closes the I2C or SPI context, and removes interrupts.
|
||||
Frees memory of the kx122_context.
|
||||
|
||||
@param dev The device context.
|
||||
*/
|
||||
void kx122_close(kx122_context dev);
|
||||
|
||||
|
||||
/**
|
||||
Intilializes the sensor with the given sampling rate, resolution and acceleration range.
|
||||
|
||||
This gets called during the kx122_init(), so it will not need to be called unless the device is reset.
|
||||
|
||||
Sensor is automatically set into standby mode during the initialization.
|
||||
Sensor is set to active mode after initialization.
|
||||
|
||||
@param dev The device context.
|
||||
@param odr One of the KX122_ODR_T values.
|
||||
@param res One of the KX122_RES_T values.
|
||||
@param grange One of the KX122_RANGE_T values.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_device_init(const kx122_context dev, KX122_ODR_T odr, KX122_RES_T res, KX122_RANGE_T grange);
|
||||
|
||||
/**
|
||||
Gets the length of one sample period depending on the sampling rate of the sensor.
|
||||
|
||||
@param dev The device context.
|
||||
@return Floating point value of the sampling period, or if an error occurs returns -1.
|
||||
*/
|
||||
float kx122_get_sample_period(const kx122_context dev);
|
||||
|
||||
/**
|
||||
Gets who am i value of the sensor.
|
||||
|
||||
@param dev The device context.
|
||||
@param data Pointer to a uint8_t variable to store the value.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_get_who_am_i(const kx122_context dev, uint8_t *data);
|
||||
|
||||
/**
|
||||
Gets raw accelerometer data from the sensor.
|
||||
|
||||
@param dev The device context.
|
||||
@param x Pointer to a floating point variable to store the x-axis value. Can be set to NULL if not wanted.
|
||||
@param y Pointer to a floating point variable to store the y-axis value. Can be set to NULL if not wanted.
|
||||
@param z Pointer to a floating point variable to store the z-axis value. Can be set to NULL if not wanted.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_get_acceleration_data_raw(const kx122_context dev, float *x, float *y, float *z);
|
||||
|
||||
/**
|
||||
Gets converted (m/s^2) accelerometer data from the sensor.
|
||||
|
||||
@param dev The device context.
|
||||
@param x Pointer to a floating point variable to store the x-axis value. Can be set to NULL if not wanted.
|
||||
@param y Pointer to a floating point variable to store the y-axis value. Can be set to NULL if not wanted.
|
||||
@param z Pointer to a floating point variable to store the z-axis value. Can be set to NULL if not wanted.
|
||||
*/
|
||||
upm_result_t kx122_get_acceleration_data(const kx122_context dev, float *x, float *y, float *z);
|
||||
|
||||
/**
|
||||
Performs a sensor software reset. The software reset clears the RAM of the sensor and resets all registers
|
||||
to pre-defined values.
|
||||
|
||||
You should call kx122_device_init() after the software reset.
|
||||
|
||||
See the datasheet for more details.
|
||||
|
||||
@param dev The device context.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_sensor_software_reset(const kx122_context dev);
|
||||
|
||||
/**
|
||||
Enables sensor filter bypass.
|
||||
|
||||
Sensor needs to be in standby mode when enabling the filter bypass.
|
||||
|
||||
@param dev The device context.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_enable_iir(const kx122_context dev);
|
||||
|
||||
/**
|
||||
Disables sensor filter bypass.
|
||||
|
||||
Sensor needs to be in standby mode when disabling the filter bypass.
|
||||
|
||||
@param dev The device context.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_disable_iir(const kx122_context dev);
|
||||
|
||||
/**
|
||||
Performs a self-test of the sensor. The test applies an electrostatic force to the sensor,
|
||||
simulating input acceleration. The test compares samples from all axis before and after
|
||||
applying the electrostatic force to the sensor. If the amount of acceleration increases according
|
||||
to the values defined in TABLE 1 of the datasheet, the test passes.
|
||||
|
||||
See the datasheet for more information.
|
||||
|
||||
@param dev The device context.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_self_test(const kx122_context dev);
|
||||
|
||||
/**
|
||||
Sets the sensor to the standby mode.
|
||||
|
||||
@param dev The device context.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_set_sensor_standby(const kx122_context dev);
|
||||
|
||||
/**
|
||||
Sets the sensor to active mode.
|
||||
|
||||
@param dev The device context.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_set_sensor_active(const kx122_context dev);
|
||||
|
||||
/**
|
||||
Sets the data sampling rate of the sensor.
|
||||
|
||||
Sensor needs to be in standby mode when setting the data sampling rate.
|
||||
|
||||
@param dev The device context.
|
||||
@param odr One of the KX122_ODR_T values.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_set_odr(const kx122_context dev, KX122_ODR_T odr);
|
||||
|
||||
/**
|
||||
Sets the acceleration range of the sensor.
|
||||
|
||||
Sensor needs to be in standby mode when setting the acceleration range value.
|
||||
|
||||
@param dev The device context.
|
||||
@param grange One of the KX122_RANGE_T values.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_set_grange(const kx122_context dev, KX122_RANGE_T grange);
|
||||
|
||||
/**
|
||||
Sets the resolution of the sensor. High resolution (16 bits) or low resolution (8 bits).
|
||||
|
||||
Sensor needs to be in standby mode when setting the sensor resolution.
|
||||
|
||||
@param dev The device context.
|
||||
@param res One of the KX122_RES_T values.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_set_resolution(const kx122_context dev, KX122_RES_T res);
|
||||
|
||||
/**
|
||||
Sets the low pass filter roll off
|
||||
|
||||
Sensor needs to be in standby mode when setting the filter roll off value.
|
||||
|
||||
@param dev The device context.
|
||||
@param lpro One of the LPRO_STATE_T values.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_set_bw(const kx122_context dev, LPRO_STATE_T lpro);
|
||||
|
||||
/**
|
||||
Set the amount of samples to be averaged in low power mode.
|
||||
|
||||
Sensor needs to be in standby mode when setting the average value.
|
||||
|
||||
@param dev The device context.
|
||||
@param avg One of the KX122_AVG_T values.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_set_average(const kx122_context dev, KX122_AVG_T avg);
|
||||
|
||||
/**
|
||||
Installs an interrupt handler to be executed when an interrupt is detected on the interrupt pin.
|
||||
|
||||
@param dev The device context.
|
||||
@param edge One of the mraa_gpio_edge_t values. Interrupt trigger edge.
|
||||
@param intp One of the KX122_INTERRUPT_PIN_T values. Specifies which interrupt pin you are setting.
|
||||
@param pin The GPIO pin to use as the interrupt pin.
|
||||
@param isr Pointer to the function to be called, when the interrupt occurs.
|
||||
@param arg The arguments to be passed to the function.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_install_isr(const kx122_context dev, mraa_gpio_edge_t edge,KX122_INTERRUPT_PIN_T intp, int pin,void (*isr)(void *), void *arg);
|
||||
|
||||
/**
|
||||
Uninstalls a previously installed interrupt handler.
|
||||
|
||||
@param dev The device context.
|
||||
@param intp One of the KX122_INTERRUPT_PIN_T values. Specifies which interrupt pin handler is uninstalled.
|
||||
*/
|
||||
void kx122_uninstall_isr(const kx122_context dev, KX122_INTERRUPT_PIN_T intp);
|
||||
|
||||
/**
|
||||
Enables interrupts on the interrupt pin 1 of the sensor.
|
||||
|
||||
Pulse width = 50us (10us if data sampling rate > 1600Hz).
|
||||
Using pulse mode.
|
||||
|
||||
Sensor needs to be in standby mode when enabling the interrupt.
|
||||
|
||||
See datasheet for more details.
|
||||
|
||||
@param dev The device context.
|
||||
@param polarity One of the KX122_INTERRUPT_POLARITY_T values. Select the polarity of the interrupt.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_enable_interrupt1(const kx122_context dev, KX122_INTERRUPT_POLARITY_T polarity);
|
||||
|
||||
/**
|
||||
Enables interrupts on the interrupt pin 2 of the sensor.
|
||||
|
||||
Pulse width = 50us (10us if data sampling rate > 1600Hz).
|
||||
Using pulse mode.
|
||||
|
||||
Sensor needs to be in standby mode when enabling the interrupt.
|
||||
|
||||
See datasheet for more details.
|
||||
|
||||
@param dev The device context.
|
||||
@param polarity One of the KX122_INTERRUPT_POLARITY_T values. Select the polarity of the interrupt.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_enable_interrupt2(const kx122_context dev, KX122_INTERRUPT_POLARITY_T polarity);
|
||||
|
||||
/**
|
||||
Disables interrupts on the interrupt pin 1 of the sensor.
|
||||
|
||||
Sensor needs to be in standby mode when disabling the interrupt pin 1.
|
||||
|
||||
@param dev The device context.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_disable_interrupt1(const kx122_context dev);
|
||||
|
||||
/**
|
||||
Disables interrupts on the interrupt pin 2 of the sensor.
|
||||
|
||||
Sensor needs to be in standby mode when disabling the interrupt pin 2.
|
||||
|
||||
@param dev The device context.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_disable_interrupt2(const kx122_context dev);
|
||||
|
||||
/**
|
||||
Routes the interrupts to the interrupt pin 1 of the sensor.
|
||||
|
||||
Sensor needs to be in standby mode when routing the interrupts.
|
||||
|
||||
See datasheet for more details.
|
||||
|
||||
@param dev The device context.
|
||||
@param bits One or more of the KX122_INTERRUPT_T values. Combine with bitwise OR (|)
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_route_interrupt1(const kx122_context dev, uint8_t bits);
|
||||
|
||||
/**
|
||||
Routes the interrupts to the interrupt pin 2 of the sensor.
|
||||
|
||||
Sensor needs to be in standby mode when routing the interrupts.
|
||||
|
||||
See datasheet for more details.
|
||||
|
||||
@param dev The device context.
|
||||
@param bits One or more of the KX122_INTERRUPT_T values. Combine with bitwise OR (|)
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_route_interrupt2(const kx122_context dev, uint8_t bits);
|
||||
|
||||
/**
|
||||
Gets the status of the interrupts. (Has an interrupt occured)
|
||||
|
||||
See datasheet for more details.
|
||||
|
||||
@param dev The device context.
|
||||
@param data Pointer to a uint8_t variable to store the value.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_get_interrupt_status(const kx122_context dev, uint8_t *data);
|
||||
|
||||
/**
|
||||
Gets the source of the interrupt.
|
||||
|
||||
See datasheet for more details.
|
||||
|
||||
@param dev The device context.
|
||||
@param data Pointer to a uint8_t variable to store the value.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_get_interrupt_source(const kx122_context dev, uint8_t *data);
|
||||
|
||||
/**
|
||||
Clears latching interrupts (Wakeup, Data Ready).
|
||||
|
||||
See datasheet for more details.
|
||||
|
||||
@param dev The device context.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_clear_interrupt(const kx122_context dev);
|
||||
|
||||
/**
|
||||
Enables the data ready interrupt. Availability of new acceleration data is
|
||||
reflected as an interrupt.
|
||||
|
||||
Sensor needs to be in standby mode when enabling the interrupt.
|
||||
|
||||
@param dev The device context.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_enable_data_ready_interrupt(const kx122_context dev);
|
||||
|
||||
/**
|
||||
Disables the data ready interrupt.
|
||||
|
||||
Sensor needs to be in standby mode when disabling the interrupt.
|
||||
|
||||
@param dev The device context.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_disable_data_ready_interrupt(const kx122_context dev);
|
||||
|
||||
/**
|
||||
Enables the buffer full interrupt.
|
||||
Buffer can hold 681 sets of values (8 bit, low resolution mode) or
|
||||
340 sets of values (16 bit, high resolution mode).
|
||||
|
||||
Sensor needs to be in standby mode when enabling the interrupt.
|
||||
|
||||
@param dev The device context.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_enable_buffer_full_interrupt(const kx122_context dev);
|
||||
|
||||
/**
|
||||
Disables the buffer full interrupt.
|
||||
|
||||
Sensor needs to be in standby mode when disabling the interrupt.
|
||||
|
||||
@param dev The device context.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_disable_buffer_full_interrupt(const kx122_context dev);
|
||||
|
||||
/**
|
||||
Enables the buffer.
|
||||
|
||||
Sensor needs to be in standby mode when enabling the buffer.
|
||||
|
||||
@param dev The device context.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_enable_buffer(const kx122_context dev);
|
||||
|
||||
/**
|
||||
Disables the buffer.
|
||||
|
||||
Sensor needs to be in standby mode when disabling the buffer.
|
||||
|
||||
@param dev The device context.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_disable_buffer(const kx122_context dev);
|
||||
|
||||
/**
|
||||
Initializes the buffer with the given sample watermark level, buffer resolution and buffer operating mode.
|
||||
Buffer is enabled after the initialization.
|
||||
|
||||
Sensor is automatically set into standby mode during the buffer initialization.
|
||||
Sensor is set to active mode after initialization.
|
||||
|
||||
See the other buffer functions for details about the different parameter values.
|
||||
|
||||
@param dev The device context.
|
||||
@param samples Amount of samples to trigger the watermark interrupt.
|
||||
@param res One of the KX122_RES_T values.
|
||||
@param mode One of the KX122_BUFFER_MODE_T values.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_buffer_init(const kx122_context dev, uint samples, KX122_RES_T res, KX122_BUFFER_MODE_T mode);
|
||||
|
||||
/**
|
||||
Sets the buffer resolution.
|
||||
Buffer resolution is indepedent of the sensor resolution.
|
||||
|
||||
Sensor needs to be in standby mode when setting the buffer resolution.
|
||||
|
||||
@param dev The device context.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_set_buffer_resolution(const kx122_context dev, KX122_RES_T res);
|
||||
|
||||
/**
|
||||
Sets the buffer watermark interrupt threshold.
|
||||
When the buffer sample count reaches the watermark, watermark interrupt will be given.
|
||||
|
||||
In low resolution mode, maxiumum number of samples is 681. In high resolution, the maximum
|
||||
number is 340.
|
||||
|
||||
See datasheet for more details.
|
||||
|
||||
Sensor needs to be in standby mode when setting the buffer threshold.
|
||||
|
||||
@param dev The device context.
|
||||
@param samples Amount of samples to trigger the watermark interrupt.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_set_buffer_threshold(const kx122_context dev, uint samples);
|
||||
|
||||
/**
|
||||
Sets the buffer operating mode.
|
||||
The buffer can operate in FIFO,FILO or Stream mode.
|
||||
The buffer gathers data, reports data and interracts with the status indicators
|
||||
in a slightly different way depending on the operating mode.
|
||||
|
||||
See datasheet for more details.
|
||||
|
||||
Sensor needs to be in standby mode when setting the buffer mode.
|
||||
|
||||
@param dev The device context.
|
||||
@param mode One of the KX122_BUFFER_MODE_T values.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_set_buffer_mode(const kx122_context dev, KX122_BUFFER_MODE_T mode);
|
||||
|
||||
/**
|
||||
Gets the current amount of samples in the buffer.
|
||||
|
||||
@param dev The device context.
|
||||
@param samples Pointer to an uint variable to store the data.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_get_buffer_status(const kx122_context dev, uint *samples);
|
||||
|
||||
/**
|
||||
Gets the specified amount of raw acceleration samples from the buffer.
|
||||
|
||||
Make sure the array size is atleast the amount of samples to be read.
|
||||
|
||||
@param dev The device context.
|
||||
@param len The amount of samples to read from the buffer.
|
||||
@param x_array Pointer to an floating point array to store the x-axis data. Can be set to NULL if not wanted.
|
||||
@param y_array Pointer to an floating point array to store the y-axis data. Can be set to NULL if not wanted.
|
||||
@param z_array Pointer to an floating point array to store the z-axis data. Can be set to NULL if not wanted.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_read_buffer_samples_raw(const kx122_context dev, uint len, float *x_array, float *y_array, float *z_array);
|
||||
|
||||
/**
|
||||
Gets the specified amount of converted (m/s^2) acceleration samples from the buffer.
|
||||
|
||||
Make sure the array size is atleast the amount of samples to be read.
|
||||
|
||||
@param dev The device context.
|
||||
@param len The amount of samples to read from the buffer.
|
||||
@param x_array Pointer to an floating point array to store the x-axis data. Can be set to NULL if not wanted.
|
||||
@param y_array Pointer to an floating point array to store the y-axis data. Can be set to NULL if not wanted.
|
||||
@param z_array Pointer to an floating point array to store the z-axis data. Can be set to NULL if not wanted.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_read_buffer_samples(const kx122_context dev, uint len, float *x_array, float *y_array, float *z_array);
|
||||
|
||||
/**
|
||||
Clears the buffer, removing all existing samples from the buffer.
|
||||
|
||||
@param dev The device context.
|
||||
@return UPM result.
|
||||
*/
|
||||
upm_result_t kx122_clear_buffer(const kx122_context dev);
|
||||
Reference in New Issue
Block a user