blob: 12f2901baba289940a63ab17985cfa15b2ff06b2 [file] [log] [blame]
/*
$License:
Copyright (C) 2011 InvenSense Corporation, All Rights Reserved.
$
*/
#ifndef __MLSL_H__
#define __MLSL_H__
#ifdef __cplusplus
extern "C" {
#endif
/**
* @defgroup MLSL
* @brief Motion Library - Serial Layer.
* The Motion Library System Layer provides the Motion Library
* with the communication interface to the hardware.
*
* The communication interface is assumed to support serial
* transfers in burst of variable length up to
* SERIAL_MAX_TRANSFER_SIZE.
* The default value for SERIAL_MAX_TRANSFER_SIZE is 128 bytes.
* Transfers of length greater than SERIAL_MAX_TRANSFER_SIZE, will
* be subdivided in smaller transfers of length <=
* SERIAL_MAX_TRANSFER_SIZE.
* The SERIAL_MAX_TRANSFER_SIZE definition can be modified to
* overcome any host processor transfer size limitation down to
* 1 B, the minimum.
* An higher value for SERIAL_MAX_TRANSFER_SIZE will favor
* performance and efficiency while requiring higher resource usage
* (mostly buffering). A smaller value will increase overhead and
* decrease efficiency but allows to operate with more resource
* constrained processor and master serial controllers.
* The SERIAL_MAX_TRANSFER_SIZE definition can be found in the
* mlsl.h header file and master serial controllers.
* The SERIAL_MAX_TRANSFER_SIZE definition can be found in the
* mlsl.h header file.
*
* @{
* @file mlsl.h
* @brief The Motion Library System Layer.
*
*/
/*
* NOTE : to properly support Yamaha compass reads,
* the max transfer size should be at least 9 B.
* Length in bytes, typically a power of 2 >= 2
*/
#define SERIAL_MAX_TRANSFER_SIZE 31
#ifndef __KERNEL__
/**
* inv_serial_open() - used to open the serial port.
* @port The COM port specification associated with the device in use.
* @sl_handle a pointer to the file handle to the serial device to be open
* for the communication.
* This port is used to send and receive data to the device.
*
* This function is called by inv_serial_start().
* Unlike previous MPL Software releases, explicitly calling
* inv_serial_start() is mandatory to instantiate the communication
* with the device.
*
* returns INV_SUCCESS if successful, a non-zero error code otherwise.
*/
int inv_serial_open(char const *port, void **sl_handle);
/**
* inv_serial_close() - used to close the serial port.
* @sl_handle a file handle to the serial device used for the communication.
*
* This port is used to send and receive data to the device.
*
* This function is called by inv_serial_stop().
* Unlike previous MPL Software releases, explicitly calling
* inv_serial_stop() is mandatory to properly shut-down the
* communication with the device.
*
* returns INV_SUCCESS if successful, a non-zero error code otherwise.
*/
int inv_serial_close(void *sl_handle);
/**
* inv_serial_reset() - used to reset any buffering the driver may be doing
* returns INV_SUCCESS if successful, a non-zero error code otherwise.
*/
int inv_serial_reset(void *sl_handle);
#endif
/**
* inv_serial_single_write() - used to write a single byte of data.
* @sl_handle pointer to the serial device used for the communication.
* @slave_addr I2C slave address of device.
* @register_addr Register address to write.
* @data Single byte of data to write.
*
* It is called by the MPL to write a single byte of data to the MPU.
*
* returns INV_SUCCESS if successful, a non-zero error code otherwise.
*/
int inv_serial_single_write(
void *sl_handle,
unsigned char slave_addr,
unsigned char register_addr,
unsigned char data);
/**
* inv_serial_write() - used to write multiple bytes of data to registers.
* @sl_handle a file handle to the serial device used for the communication.
* @slave_addr I2C slave address of device.
* @register_addr Register address to write.
* @length Length of burst of data.
* @data Pointer to block of data.
*
* returns INV_SUCCESS if successful, a non-zero error code otherwise.
*/
int inv_serial_write(
void *sl_handle,
unsigned char slave_addr,
unsigned short length,
unsigned char const *data);
/**
* inv_serial_read() - used to read multiple bytes of data from registers.
* @sl_handle a file handle to the serial device used for the communication.
* @slave_addr I2C slave address of device.
* @register_addr Register address to read.
* @length Length of burst of data.
* @data Pointer to block of data.
*
* returns INV_SUCCESS == 0 if successful; a non-zero error code otherwise.
*/
int inv_serial_read(
void *sl_handle,
unsigned char slave_addr,
unsigned char register_addr,
unsigned short length,
unsigned char *data);
/**
* inv_serial_read_mem() - used to read multiple bytes of data from the memory.
* This should be sent by I2C or SPI.
*
* @sl_handle a file handle to the serial device used for the communication.
* @slave_addr I2C slave address of device.
* @mem_addr The location in the memory to read from.
* @length Length of burst data.
* @data Pointer to block of data.
*
* returns INV_SUCCESS == 0 if successful; a non-zero error code otherwise.
*/
int inv_serial_read_mem(
void *sl_handle,
unsigned char slave_addr,
unsigned short mem_addr,
unsigned char bank_reg,
unsigned char addr_reg,
unsigned char mem_reg,
unsigned short length,
unsigned char *data);
/**
* inv_serial_write_mem() - used to write multiple bytes of data to the memory.
* @sl_handle a file handle to the serial device used for the communication.
* @slave_addr I2C slave address of device.
* @mem_addr The location in the memory to write to.
* @length Length of burst data.
* @data Pointer to block of data.
*
* returns INV_SUCCESS == 0 if successful; a non-zero error code otherwise.
*/
int inv_serial_write_mem(
void *sl_handle,
unsigned char slave_addr,
unsigned short mem_addr,
unsigned char bank_reg,
unsigned char addr_reg,
unsigned char mem_reg,
unsigned short length,
unsigned char *data);
/**
* inv_serial_read_fifo() - used to read multiple bytes of data from the fifo.
* @sl_handle a file handle to the serial device used for the communication.
* @slave_addr I2C slave address of device.
* @length Length of burst of data.
* @data Pointer to block of data.
*
* returns INV_SUCCESS == 0 if successful; a non-zero error code otherwise.
*/
int inv_serial_read_fifo(
void *sl_handle,
unsigned char slave_addr,
unsigned char fifo_reg,
unsigned short length,
unsigned char *data);
/**
* inv_serial_write_fifo() - used to write multiple bytes of data to the fifo.
* @sl_handle a file handle to the serial device used for the communication.
* @slave_addr I2C slave address of device.
* @length Length of burst of data.
* @data Pointer to block of data.
*
* returns INV_SUCCESS == 0 if successful; a non-zero error code otherwise.
*/
int inv_serial_write_fifo(
void *sl_handle,
unsigned char slave_addr,
unsigned char fifo_reg,
unsigned short length,
unsigned char const *data);
#ifndef __KERNEL__
/**
* inv_serial_read_cfg() - used to get the configuration data.
* @cfg Pointer to the configuration data.
* @len Length of the configuration data.
*
* Is called by the MPL to get the configuration data
* used by the motion library.
* This data would typically be saved in non-volatile memory.
*
* returns INV_SUCCESS if successful, a non-zero error code otherwise.
*/
int inv_serial_read_cfg(unsigned char *cfg, unsigned int len);
/**
* inv_serial_write_cfg() - used to save the configuration data.
* @cfg Pointer to the configuration data.
* @len Length of the configuration data.
*
* Is called by the MPL to save the configuration data used by the
* motion library.
* This data would typically be saved in non-volatile memory.
*
* returns INV_SUCCESS if successful, a non-zero error code otherwise.
*/
int inv_serial_write_cfg(unsigned char *cfg, unsigned int len);
/**
* inv_serial_read_cal() - used to get the calibration data.
* @cfg Pointer to the calibration data.
* @len Length of the calibration data.
*
* It is called by the MPL to get the calibration data used by the
* motion library.
* This data is typically be saved in non-volatile memory.
*
* returns INV_SUCCESS if successful, a non-zero error code otherwise.
*/
int inv_serial_read_cal(unsigned char *cal, unsigned int len);
/**
* inv_serial_write_cal() - used to save the calibration data.
*
* @cfg Pointer to the calibration data.
* @len Length of the calibration data.
*
* It is called by the MPL to save the calibration data used by the
* motion library.
* This data is typically be saved in non-volatile memory.
* returns INV_SUCCESS if successful, a non-zero error code otherwise.
*/
int inv_serial_write_cal(unsigned char *cal, unsigned int len);
/**
* inv_serial_get_cal_length() - Get the calibration length from the storage.
* @len lenght to be returned
*
* returns INV_SUCCESS if successful, a non-zero error code otherwise.
*/
int inv_serial_get_cal_length(unsigned int *len);
#endif
#ifdef __cplusplus
}
#endif
/**
* @}
*/
#endif /* __MLSL_H__ */