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