121 lines
3.8 KiB
C
121 lines
3.8 KiB
C
/*
|
|
*
|
|
* Copyright (c) [2018] by InvenSense, Inc.
|
|
*
|
|
* Permission to use, copy, modify, and/or distribute this software for any
|
|
* purpose with or without fee is hereby granted.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
|
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*
|
|
*/
|
|
|
|
/** @defgroup Transport Transport
|
|
* @brief Abstraction layer to access device's registers
|
|
* @{
|
|
*/
|
|
|
|
/** @file inv_imu_transport.h */
|
|
|
|
#ifndef _INV_IMU_TRANSPORT_H_
|
|
#define _INV_IMU_TRANSPORT_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "imu/inv_imu_defs.h"
|
|
|
|
#include "Invn/InvError.h"
|
|
|
|
/* Available serial interface type. */
|
|
#define UI_I2C 0 /**< identifies I2C interface. */
|
|
#define UI_SPI4 1 /**< identifies 4-wire SPI interface. */
|
|
#define UI_SPI3 2 /**< identifies 3-wire SPI interface. */
|
|
|
|
/** @brief Serif type definition.
|
|
* @deprecated Kept for retro-compatibility. Replaced with `uint32_t` type
|
|
* in `struct inv_imu_serif` struct.
|
|
*/
|
|
typedef uint32_t SERIAL_IF_TYPE_t;
|
|
|
|
/** Serial interface definition */
|
|
typedef struct inv_imu_serif {
|
|
void *context;
|
|
int (*read_reg)(struct inv_imu_serif *serif, uint8_t reg, uint8_t *buf, uint32_t len);
|
|
int (*write_reg)(struct inv_imu_serif *serif, uint8_t reg, const uint8_t *buf, uint32_t len);
|
|
uint32_t max_read;
|
|
uint32_t max_write;
|
|
uint32_t serif_type;
|
|
} inv_imu_serif_t;
|
|
|
|
/** Transport interface definition. */
|
|
typedef struct inv_imu_transport {
|
|
/** Serial interface object.
|
|
* @warning Must be the first object in this structure.
|
|
*/
|
|
inv_imu_serif_t serif;
|
|
|
|
/** Contains mirrored values of some IP registers. */
|
|
struct register_cache {
|
|
uint8_t pwr_mgmt0_reg;
|
|
#if INV_IMU_IS_GYRO_SUPPORTED
|
|
uint8_t gyro_config0_reg;
|
|
#endif
|
|
uint8_t accel_config0_reg;
|
|
uint8_t tmst_config1_reg;
|
|
} register_cache;
|
|
|
|
/** Internal counter for MCLK requests. */
|
|
uint8_t need_mclk_cnt;
|
|
} inv_imu_transport_t;
|
|
|
|
/** @brief Init cache variable.
|
|
* @param[in] t Pointer to transport (as void * so it can be called from any module).
|
|
* @return 0 on success, negative value on error.
|
|
*/
|
|
int inv_imu_init_transport(void *t);
|
|
|
|
/** @brief Reads data from a register on IMU.
|
|
* @param[in] t Pointer to transport (as void * so it can be called from any module).
|
|
* @param[in] reg Register address to be read.
|
|
* @param[in] len Number of byte to be read.
|
|
* @param[out] buf Output data from the register.
|
|
* @return 0 on success, negative value on error.
|
|
*/
|
|
int inv_imu_read_reg(void *t, uint32_t reg, uint32_t len, uint8_t *buf);
|
|
|
|
/** @brief Writes data to a register on IMU.
|
|
* @param[in] t Pointer to transport (as void * so it can be called from any module).
|
|
* @param[in] reg Register address to be written.
|
|
* @param[in] len Number of byte to be written.
|
|
* @param[in] buf Input data to write.
|
|
* @return 0 on success, negative value on error.
|
|
*/
|
|
int inv_imu_write_reg(void *t, uint32_t reg, uint32_t len, const uint8_t *buf);
|
|
|
|
/** @brief Enable MCLK.
|
|
* @param[in] t Pointer to transport (as void * so it can be called from any module).
|
|
* @return 0 on success, negative value on error.
|
|
*/
|
|
int inv_imu_switch_on_mclk(void *t);
|
|
|
|
/** @brief Disable MCLK.
|
|
* @param[in] t Pointer to transport (as void * so it can be called from any module).
|
|
* @return 0 on success, negative value on error.
|
|
*/
|
|
int inv_imu_switch_off_mclk(void *t);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _INV_IMU_TRANSPORT_H_ */
|
|
|
|
/** @} */
|