149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/*
249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow $License:
349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow    Copyright (C) 2011 InvenSense Corporation, All Rights Reserved.
449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow $
549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifndef __MLSL_H__
849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define __MLSL_H__
949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
1049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifdef __cplusplus
1149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowextern "C" {
1249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif
1349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
1449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
1549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @defgroup   MLSL
1649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @brief      Motion Library - Serial Layer.
1749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              The Motion Library System Layer provides the Motion Library
1849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              with the communication interface to the hardware.
1949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
2049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              The communication interface is assumed to support serial
2149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              transfers in burst of variable length up to
2249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              SERIAL_MAX_TRANSFER_SIZE.
2349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              The default value for SERIAL_MAX_TRANSFER_SIZE is 128 bytes.
2449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              Transfers of length greater than SERIAL_MAX_TRANSFER_SIZE, will
2549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              be subdivided in smaller transfers of length <=
2649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              SERIAL_MAX_TRANSFER_SIZE.
2749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              The SERIAL_MAX_TRANSFER_SIZE definition can be modified to
2849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              overcome any host processor transfer size limitation down to
2949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              1 B, the minimum.
3049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              An higher value for SERIAL_MAX_TRANSFER_SIZE will favor
3149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              performance and efficiency while requiring higher resource usage
3249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              (mostly buffering). A smaller value will increase overhead and
3349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              decrease efficiency but allows to operate with more resource
3449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              constrained processor and master serial controllers.
3549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              The SERIAL_MAX_TRANSFER_SIZE definition can be found in the
3649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              mlsl.h header file and master serial controllers.
3749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              The SERIAL_MAX_TRANSFER_SIZE definition can be found in the
3849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *              mlsl.h header file.
3949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
4049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @{
4149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *      @file   mlsl.h
4249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *      @brief  The Motion Library System Layer.
4349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
4449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
4549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
4649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/*
4749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * NOTE : to properly support Yamaha compass reads,
4849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *	  the max transfer size should be at least 9 B.
4949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *	  Length in bytes, typically a power of 2 >= 2
5049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
5149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#define SERIAL_MAX_TRANSFER_SIZE 31
5249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
5349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifndef __KERNEL__
5449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
5549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  inv_serial_open() - used to open the serial port.
5649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @port	The COM port specification associated with the device in use.
5749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @sl_handle	a pointer to the file handle to the serial device to be open
5849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *		for the communication.
5949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *	This port is used to send and receive data to the device.
6049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
6149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *	This function is called by inv_serial_start().
6249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *	Unlike previous MPL Software releases, explicitly calling
6349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *	inv_serial_start() is mandatory to instantiate the communication
6449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *	with the device.
6549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
6649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  returns INV_SUCCESS if successful, a non-zero error code otherwise.
6749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
6849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_serial_open(char const *port, void **sl_handle);
6949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
7049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
7149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  inv_serial_close() - used to close the serial port.
7249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @sl_handle	a file handle to the serial device used for the communication.
7349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
7449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *	This port is used to send and receive data to the device.
7549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
7649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *	This function is called by inv_serial_stop().
7749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *	Unlike previous MPL Software releases, explicitly calling
7849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *	inv_serial_stop() is mandatory to properly shut-down the
7949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *	communication with the device.
8049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
8149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  returns INV_SUCCESS if successful, a non-zero error code otherwise.
8249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
8349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_serial_close(void *sl_handle);
8449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
8549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
8649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  inv_serial_reset() - used to reset any buffering the driver may be doing
8749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  returns INV_SUCCESS if successful, a non-zero error code otherwise.
8849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
8949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_serial_reset(void *sl_handle);
9049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif
9149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
9249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
9349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  inv_serial_single_write() - used to write a single byte of data.
9449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @sl_handle		pointer to the serial device used for the communication.
9549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @slave_addr		I2C slave address of device.
9649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @register_addr	Register address to write.
9749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @data		Single byte of data to write.
9849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
9949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *	It is called by the MPL to write a single byte of data to the MPU.
10049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
10149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  returns INV_SUCCESS if successful, a non-zero error code otherwise.
10249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
10349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_serial_single_write(
10449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	void *sl_handle,
10549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char slave_addr,
10649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char register_addr,
10749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char data);
10849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
10949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
11049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  inv_serial_write() - used to write multiple bytes of data to registers.
11149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @sl_handle	a file handle to the serial device used for the communication.
11249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @slave_addr	I2C slave address of device.
11349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @register_addr	Register address to write.
11449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @length	Length of burst of data.
11549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @data	Pointer to block of data.
11649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
11749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  returns INV_SUCCESS if successful, a non-zero error code otherwise.
11849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
11949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_serial_write(
12049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	void *sl_handle,
12149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char slave_addr,
12249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned short length,
12349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char const *data);
12449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
12549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
12649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  inv_serial_read() - used to read multiple bytes of data from registers.
12749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @sl_handle	a file handle to the serial device used for the communication.
12849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @slave_addr	I2C slave address of device.
12949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @register_addr	Register address to read.
13049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @length	Length of burst of data.
13149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @data	Pointer to block of data.
13249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
13349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  returns INV_SUCCESS == 0 if successful; a non-zero error code otherwise.
13449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
13549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_serial_read(
13649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	void *sl_handle,
13749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char slave_addr,
13849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char register_addr,
13949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned short length,
14049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char *data);
14149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
14249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
14349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  inv_serial_read_mem() - used to read multiple bytes of data from the memory.
14449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *	    This should be sent by I2C or SPI.
14549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
14649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @sl_handle	a file handle to the serial device used for the communication.
14749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @slave_addr	I2C slave address of device.
14849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @mem_addr	The location in the memory to read from.
14949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @length	Length of burst data.
15049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @data	Pointer to block of data.
15149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
15249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  returns INV_SUCCESS == 0 if successful; a non-zero error code otherwise.
15349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
15449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_serial_read_mem(
15549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	void *sl_handle,
15649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char slave_addr,
15749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned short mem_addr,
15849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char bank_reg,
15949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char addr_reg,
16049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char mem_reg,
16149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned short length,
16249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char *data);
16349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
16449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
16549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  inv_serial_write_mem() - used to write multiple bytes of data to the memory.
16649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @sl_handle	a file handle to the serial device used for the communication.
16749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @slave_addr	I2C slave address of device.
16849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @mem_addr	The location in the memory to write to.
16949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @length	Length of burst data.
17049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @data	Pointer to block of data.
17149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
17249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  returns INV_SUCCESS == 0 if successful; a non-zero error code otherwise.
17349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
17449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_serial_write_mem(
17549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	void *sl_handle,
17649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char slave_addr,
17749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned short mem_addr,
17849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char bank_reg,
17949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char addr_reg,
18049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char mem_reg,
18149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned short length,
18249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char *data);
18349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
18449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
18549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  inv_serial_read_fifo() - used to read multiple bytes of data from the fifo.
18649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @sl_handle	a file handle to the serial device used for the communication.
18749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @slave_addr	I2C slave address of device.
18849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @length	Length of burst of data.
18949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @data	Pointer to block of data.
19049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
19149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  returns INV_SUCCESS == 0 if successful; a non-zero error code otherwise.
19249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
19349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_serial_read_fifo(
19449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	void *sl_handle,
19549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char slave_addr,
19649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char fifo_reg,
19749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned short length,
19849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char *data);
19949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
20049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
20149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  inv_serial_write_fifo() - used to write multiple bytes of data to the fifo.
20249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @sl_handle	a file handle to the serial device used for the communication.
20349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @slave_addr	I2C slave address of device.
20449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @length	Length of burst of data.
20549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @data	Pointer to block of data.
20649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
20749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  returns INV_SUCCESS == 0 if successful; a non-zero error code otherwise.
20849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
20949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_serial_write_fifo(
21049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	void *sl_handle,
21149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char slave_addr,
21249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char fifo_reg,
21349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned short length,
21449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow	unsigned char const *data);
21549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
21649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifndef __KERNEL__
21749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
21849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  inv_serial_read_cfg() - used to get the configuration data.
21949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @cfg	Pointer to the configuration data.
22049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @len	Length of the configuration data.
22149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
22249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *		Is called by the MPL to get the configuration data
22349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *		used by the motion library.
22449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *		This data would typically be saved in non-volatile memory.
22549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
22649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  returns INV_SUCCESS if successful, a non-zero error code otherwise.
22749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
22849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_serial_read_cfg(unsigned char *cfg, unsigned int len);
22949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
23049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
23149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  inv_serial_write_cfg() - used to save the configuration data.
23249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @cfg	Pointer to the configuration data.
23349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @len	Length of the configuration data.
23449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
23549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *		Is called by the MPL to save the configuration data used by the
23649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *		motion library.
23749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *		This data would typically be saved in non-volatile memory.
23849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
23949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  returns INV_SUCCESS if successful, a non-zero error code otherwise.
24049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
24149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_serial_write_cfg(unsigned char *cfg, unsigned int len);
24249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
24349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
24449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  inv_serial_read_cal() - used to get the calibration data.
24549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @cfg	Pointer to the calibration data.
24649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @len	Length of the calibration data.
24749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
24849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *		It is called by the MPL to get the calibration data used by the
24949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *		motion library.
25049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *		This data is typically be saved in non-volatile memory.
25149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
25249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  returns INV_SUCCESS if successful, a non-zero error code otherwise.
25349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
25449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_serial_read_cal(unsigned char *cal, unsigned int len);
25549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
25649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
25749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  inv_serial_write_cal() - used to save the calibration data.
25849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
25949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @cfg	Pointer to the calibration data.
26049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @len	Length of the calibration data.
26149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
26249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *	    It is called by the MPL to save the calibration data used by the
26349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *	    motion library.
26449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *	    This data is typically be saved in non-volatile memory.
26549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  returns INV_SUCCESS if successful, a non-zero error code otherwise.
26649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
26749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_serial_write_cal(unsigned char *cal, unsigned int len);
26849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow
26949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
27049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  inv_serial_get_cal_length() - Get the calibration length from the storage.
27149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  @len	lenght to be returned
27249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *
27349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow *  returns INV_SUCCESS if successful, a non-zero error code otherwise.
27449ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
27549ea3e26ca3c6a779e527a0322e49a663333350aRosa Chowint inv_serial_get_cal_length(unsigned int *len);
27649ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif
27749ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#ifdef __cplusplus
27849ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow}
27949ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif
28049ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow/**
28149ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow * @}
28249ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow */
28349ea3e26ca3c6a779e527a0322e49a663333350aRosa Chow#endif				/* __MLSL_H__ */
284