aboutsummaryrefslogtreecommitdiffstats
path: root/thirdparty/sensor/bno055
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2018-05-07 19:59:35 +0200
committerHarald Welte <laforge@gnumonks.org>2018-05-07 19:59:35 +0200
commit3634cc8e5d3124e3cf6cf46c0f1d5385ff511426 (patch)
tree1af66e339e767fc62d588766fd8d3b26edd29e3b /thirdparty/sensor/bno055
initial check-in of ASF 3.39.0
Diffstat (limited to 'thirdparty/sensor/bno055')
-rw-r--r--thirdparty/sensor/bno055/bno055.c17294
-rw-r--r--thirdparty/sensor/bno055/bno055.h7935
-rw-r--r--thirdparty/sensor/bno055/bno055_doc.h7966
-rw-r--r--thirdparty/sensor/bno055/bno055_port.c171
-rw-r--r--thirdparty/sensor/bno055/bno055_port.h67
-rw-r--r--thirdparty/sensor/bno055/example/bno055_example.c395
-rw-r--r--thirdparty/sensor/bno055/example/same70q21_same70_xplained/conf_bno055.h83
-rw-r--r--thirdparty/sensor/bno055/example/same70q21_same70_xplained/conf_board.h59
-rw-r--r--thirdparty/sensor/bno055/example/same70q21_same70_xplained/conf_clock.h104
-rw-r--r--thirdparty/sensor/bno055/example/same70q21_same70_xplained/conf_uart_serial.h61
-rw-r--r--thirdparty/sensor/bno055/example/same70q21_same70_xplained/doxygen/doxyfile.doxygen1645
-rw-r--r--thirdparty/sensor/bno055/example/same70q21_same70_xplained/gcc/Makefile52
-rw-r--r--thirdparty/sensor/bno055/example/same70q21_same70_xplained/gcc/asf.h118
-rw-r--r--thirdparty/sensor/bno055/example/same70q21_same70_xplained/gcc/config.mk173
-rw-r--r--thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/asf.h118
-rw-r--r--thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example.eww9
-rw-r--r--thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example_flash.ewd2339
-rw-r--r--thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example_flash.ewp2670
-rw-r--r--thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example_sram.ewd2339
-rw-r--r--thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example_sram.ewp2670
-rw-r--r--thirdparty/sensor/bno055/module_config/conf_bno055.h83
21 files changed, 46351 insertions, 0 deletions
diff --git a/thirdparty/sensor/bno055/bno055.c b/thirdparty/sensor/bno055/bno055.c
new file mode 100644
index 00000000..5a59a6e0
--- /dev/null
+++ b/thirdparty/sensor/bno055/bno055.c
@@ -0,0 +1,17294 @@
+/*
+*
+****************************************************************************
+* Copyright (C) 2013 - 2014 Bosch Sensortec GmbH
+*
+* File : bno055.c
+*
+* Date : 2014/12/12
+*
+* Revision : 2.0.2 $
+*
+* Usage: Sensor Driver file for BNO055 sensor
+*
+****************************************************************************
+* \section License
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+*
+* Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+*
+* Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the distribution.
+*
+* Neither the name of the copyright holder nor the names of the
+* contributors may be used to endorse or promote products derived from
+* this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER
+* OR CONTRIBUTORS BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+* OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO,
+* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+* ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
+*
+* The information provided is believed to be accurate and reliable.
+* The copyright holder assumes no responsibility
+* for the consequences of use
+* of such information nor for any infringement of patents or
+* other rights of third parties which may result from its use.
+* No license is granted by implication or otherwise under any patent or
+* patent rights of the copyright holder.
+**************************************************************************/
+
+
+/*********************************************************/
+/* INCLUDES */
+/*******************************************************/
+#include "bno055.h"
+/*! file <BNO055 >
+ brief <Sensor driver for BNO055> */
+/* STRUCTURE DEFINITIONS */
+static struct bno055_t *p_bno055;
+/* LOCAL FUNCTIONS */
+/*!
+ * @brief
+ * This function is used for initialize
+ * bus read, bus write function pointers,device
+ * address,accel revision id, gyro revision id
+ * mag revision id, software revision id, boot loader
+ * revision id and page id
+ *
+ * @param bno055 - structure pointer
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While changing the parameter of the bno055_t
+ * consider the following point:
+ * Changing the reference value of the parameter
+ * will changes the local copy or local reference
+ * make sure your changes will not
+ * affect the reference value of the parameter
+ * (Better case don't change the reference value of the parameter)
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_init(struct bno055_t *bno055)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8 = BNO055_ZERO_U8X;
+ u8 v_page_zero_u8 = PAGE_ZERO;
+ /* Array holding the Software revision id
+ */
+ u8 a_SW_ID_u8[ARRAY_SIZE_TWO] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ /* stuct parameters are assign to bno055*/
+ p_bno055 = bno055;
+ /* Write the default page as zero*/
+ com_rslt = p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_PAGE_ID__REG, &v_page_zero_u8, BNO055_ONE_U8X);
+ /* Read the chip id of the sensor from page
+ zero 0x00 register*/
+ com_rslt += p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_CHIP_ID__REG, &v_data_u8, BNO055_ONE_U8X);
+ p_bno055->chip_id = v_data_u8;
+ /* Read the accel revision id from page
+ zero 0x01 register*/
+ com_rslt += p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_REV_ID__REG, &v_data_u8, BNO055_ONE_U8X);
+ p_bno055->accel_rev_id = v_data_u8;
+ /* Read the mag revision id from page
+ zero 0x02 register*/
+ com_rslt += p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_REV_ID__REG, &v_data_u8, BNO055_ONE_U8X);
+ p_bno055->mag_rev_id = v_data_u8;
+ /* Read the gyro revision id from page
+ zero 0x02 register*/
+ com_rslt += p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_REV_ID__REG, &v_data_u8, BNO055_ONE_U8X);
+ p_bno055->gyro_rev_id = v_data_u8;
+ /* Read the boot loader revision from page
+ zero 0x06 register*/
+ com_rslt += p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_BL_REV_ID__REG, &v_data_u8, BNO055_ONE_U8X);
+ p_bno055->bl_rev_id = v_data_u8;
+ /* Read the software revision id from page
+ zero 0x04 and 0x05 register( 2 bytes of data)*/
+ com_rslt += p_bno055->BNO055_BUS_READ_FUNC(p_bno055->dev_addr,
+ BNO055_SW_REV_ID_LSB__REG,
+ a_SW_ID_u8, BNO055_TWO_U8X);
+ a_SW_ID_u8[INDEX_ZERO] = BNO055_GET_BITSLICE(
+ a_SW_ID_u8[INDEX_ZERO],
+ BNO055_SW_REV_ID_LSB);
+ p_bno055->sw_rev_id = (u16)
+ ((((u32)((u8)a_SW_ID_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION) | (a_SW_ID_u8[INDEX_ZERO]));
+ /* Read the page id from the register 0x07*/
+ com_rslt += p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_PAGE_ID__REG, &v_data_u8, BNO055_ONE_U8X);
+ p_bno055->page_id = v_data_u8;
+
+ return com_rslt;
+}
+/*!
+ * @brief
+ * This API gives data to the given register and
+ * the data is written in the corresponding register address
+ *
+ * @param v_addr_u8 : Address of the register
+ * @param p_data_u8 : Data to be written to the register
+ * @param v_len_u8 : Length of the Data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+*/
+BNO055_RETURN_FUNCTION_TYPE bno055_write_register(u8 v_addr_u8,
+u8 *p_data_u8, u8 v_len_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* Write the values of respective given register */
+ com_rslt = p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr, v_addr_u8, p_data_u8, v_len_u8);
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads the data from
+ * the given register address
+ *
+ * @param v_addr_u8 : Address of the register
+ * @param p_data_u8 : address of the variable,
+ * read value will be kept
+ * @param v_len_u8 : Length of the data
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_register(u8 v_addr_u8,
+u8 *p_data_u8, u8 v_len_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* Read the value from given register*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr, v_addr_u8, p_data_u8, v_len_u8);
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads chip id
+ * from register 0x00 it is a byte of data
+ *
+ *
+ * @param v_chip_id_u8 : The chip id value 0xA0
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_chip_id(u8 *v_chip_id_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8 = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the chip id*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_CHIP_ID__REG, &v_data_u8, BNO055_ONE_U8X);
+ *v_chip_id_u8 = v_data_u8;
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads software revision id
+ * from register 0x04 and 0x05 it is a two byte of data
+ *
+ * @param v_sw_id_u8 : The SW revision id
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_sw_rev_id(u16 *v_sw_id_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* array having the software revision id
+ v_data_u8[0] - LSB
+ v_data_u8[1] - MSB*/
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty*/
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the two byte value of software
+ revision id*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SW_REV_ID_LSB__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_SW_REV_ID_LSB);
+ *v_sw_id_u8 = (u16)
+ ((((u32)((u8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads page id
+ * from register 0x07 it is a byte of data
+ *
+ *
+ * @param v_page_id_u8 : The value of page id
+ *
+ * PAGE_ZERO -> 0x00
+ * PAGE_ONE -> 0x01
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_page_id(u8 *v_page_id_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8 = BNO055_ZERO_U8X;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* Read the page id form 0x07*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_PAGE_ID__REG, &v_data_u8, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8 = BNO055_GET_BITSLICE(v_data_u8,
+ BNO055_PAGE_ID);
+ *v_page_id_u8 = v_data_u8;
+ p_bno055->page_id = v_data_u8;
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write
+ * the page id register 0x07
+ *
+ * @param v_page_id_u8 : The value of page id
+ *
+ * PAGE_ZERO -> 0x00
+ * PAGE_ONE -> 0x01
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_page_id(u8 v_page_id_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* Read the current page*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_PAGE_ID__REG, &v_data_u8r, BNO055_ONE_U8X);
+ /* Check condition for communication success*/
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_PAGE_ID, v_page_id_u8);
+ /* Write the page id*/
+ com_rslt += p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_PAGE_ID__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS)
+ p_bno055->page_id = v_page_id_u8;
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads accel revision id
+ * from register 0x01 it is a byte of value
+ *
+ * @param v_accel_rev_id_u8 : The accel revision id 0xFB
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_rev_id(
+u8 *v_accel_rev_id_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8 = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the accel revision id */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_REV_ID__REG,
+ &v_data_u8, BNO055_ONE_U8X);
+ *v_accel_rev_id_u8 = v_data_u8;
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads mag revision id
+ * from register 0x02 it is a byte of value
+ *
+ * @param v_mag_rev_id_u8 : The mag revision id 0x32
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_rev_id(
+u8 *v_mag_rev_id_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8 = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the mag revision id */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_REV_ID__REG,
+ &v_data_u8, BNO055_ONE_U8X);
+ *v_mag_rev_id_u8 = v_data_u8;
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gyro revision id
+ * from register 0x03 it is a byte of value
+ *
+ * @param v_gyro_rev_id_u8 : The gyro revision id 0xF0
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_rev_id(
+u8 *v_gyro_rev_id_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8 = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the gyro revision id */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_REV_ID__REG,
+ &v_data_u8, BNO055_ONE_U8X);
+ *v_gyro_rev_id_u8 = v_data_u8;
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read boot loader revision id
+ * from register 0x06 it is a byte of value
+ *
+ * @param v_bl_rev_id_u8 : The boot loader revision id
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_bl_rev_id(
+u8 *v_bl_rev_id_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8 = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the boot loader revision id */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_BL_REV_ID__REG,
+ &v_data_u8, BNO055_ONE_U8X);
+ *v_bl_rev_id_u8 = v_data_u8;
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads acceleration data X values
+ * from register 0x08 and 0x09 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_accel_x_s16 : The X raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_x(s16 *v_accel_x_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the accel x value
+ v_data_u8[INDEX_ZERO] - LSB
+ v_data_u8[INDEX_ONE] - MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the accel x axis two byte value*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_DATA_X_LSB_VALUEX__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_ACCEL_DATA_X_LSB_VALUEX);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_ACCEL_DATA_X_MSB_VALUEX);
+ *v_accel_x_s16 = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_ONE])) <<
+ (BNO055_SHIFT_8_POSITION))
+ | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads acceleration data Y values
+ * from register 0x0A and 0x0B it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_accel_y_s16 : The Y raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_y(s16 *v_accel_y_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the accel y value
+ v_data_u8[INDEX_ZERO] - LSB
+ v_data_u8[INDEX_ONE] - MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the accel y axis two byte value*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_DATA_Y_LSB_VALUEY__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_ACCEL_DATA_Y_LSB_VALUEY);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_ACCEL_DATA_Y_MSB_VALUEY);
+ *v_accel_y_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION) |
+ (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads acceleration data z values
+ * from register 0x0C and 0x0D it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_accel_z_s16 : The z raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_z(s16 *v_accel_z_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the accel z value
+ v_data_u8[INDEX_ZERO] - LSB
+ v_data_u8[INDEX_ONE] - MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the accel z axis two byte value*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_DATA_Z_LSB_VALUEZ__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_ACCEL_DATA_Z_LSB_VALUEZ);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_ACCEL_DATA_Z_MSB_VALUEZ);
+ *v_accel_z_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION) |
+ (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads acceleration data xyz values
+ * from register 0x08 to 0x0D it is a six byte data
+ *
+ *
+ * @param accel : The value of accel xyz data
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | The accel x data
+ * y | The accel y data
+ * z | The accel z data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_xyz(
+struct bno055_accel_t *accel)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the accel xyz value
+ v_data_u8[INDEX_ZERO] - x->LSB
+ v_data_u8[INDEX_ONE] - x->MSB
+ v_data_u8[2] - y->MSB
+ v_data_u8[3] - y->MSB
+ v_data_u8[4] - z->MSB
+ v_data_u8[5] - z->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_SIX] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_DATA_X_LSB_VALUEX__REG,
+ v_data_u8, BNO055_SIX_U8X);
+ /* Data X*/
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_ACCEL_DATA_X_LSB_VALUEX);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_ACCEL_DATA_X_MSB_VALUEX);
+ accel->x = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_ZERO]));
+ /* Data Y*/
+ v_data_u8[INDEX_TWO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_TWO],
+ BNO055_ACCEL_DATA_Y_LSB_VALUEY);
+ v_data_u8[INDEX_THREE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_THREE],
+ BNO055_ACCEL_DATA_Y_MSB_VALUEY);
+ accel->y = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_THREE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_TWO]));
+ /* Data Z*/
+ v_data_u8[INDEX_FOUR] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FOUR],
+ BNO055_ACCEL_DATA_Z_LSB_VALUEZ);
+ v_data_u8[INDEX_FIVE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FIVE],
+ BNO055_ACCEL_DATA_Z_MSB_VALUEZ);
+ accel->z = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_FIVE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_FOUR]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads mag data x values
+ * from register 0x0E and 0x0F it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_mag_x_s16 : The x raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_x(s16 *v_mag_x_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the mag x value
+ v_data_u8[INDEX_ZERO] - x->LSB
+ v_data_u8[INDEX_ONE] - x->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /*Read the mag x two bytes of data */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_DATA_X_LSB_VALUEX__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_MAG_DATA_X_LSB_VALUEX);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_MAG_DATA_X_MSB_VALUEX);
+ *v_mag_x_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION) | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads mag data y values
+ * from register 0x10 and 0x11 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_mag_y_s16 : The y raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_y(s16 *v_mag_y_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the mag x value
+ v_data_u8[INDEX_ZERO] - y->LSB
+ v_data_u8[INDEX_ONE] - y->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /*Read the mag y two bytes of data */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_DATA_Y_LSB_VALUEY__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_MAG_DATA_Y_LSB_VALUEY);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_MAG_DATA_Y_MSB_VALUEY);
+ *v_mag_y_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION) |
+ (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads mag data z values
+ * from register 0x12 and 0x13 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_mag_z_s16 : The z raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_z(s16 *v_mag_z_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the mag x value
+ v_data_u8[INDEX_ZERO] - z->LSB
+ v_data_u8[INDEX_ONE] - z->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_DATA_Z_LSB_VALUEZ__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ /*Read the mag z two bytes of data */
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_MAG_DATA_Z_LSB_VALUEZ);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_MAG_DATA_Z_MSB_VALUEZ);
+ *v_mag_z_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads mag data xyz values
+ * from register 0x0E to 0x13 it is a six byte data
+ *
+ *
+ * @param mag : The mag xyz values
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | The mag x data
+ * y | The mag y data
+ * z | The mag z data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_xyz(struct bno055_mag_t *mag)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the mag xyz value
+ v_data_u8[INDEX_ZERO] - x->LSB
+ v_data_u8[INDEX_ONE] - x->MSB
+ v_data_u8[INDEX_TWO] - y->MSB
+ v_data_u8[INDEX_THREE] - y->MSB
+ v_data_u8[INDEX_FOUR] - z->MSB
+ v_data_u8[INDEX_FIVE] - z->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_SIX] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /*Read the six byte value of mag xyz*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_DATA_X_LSB_VALUEX__REG,
+ v_data_u8, BNO055_SIX_U8X);
+ /* Data X*/
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_MAG_DATA_X_LSB_VALUEX);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_MAG_DATA_X_MSB_VALUEX);
+ mag->x = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION) |
+ (v_data_u8[INDEX_ZERO]));
+ /* Data Y*/
+ v_data_u8[INDEX_TWO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_TWO],
+ BNO055_MAG_DATA_Y_LSB_VALUEY);
+ v_data_u8[INDEX_THREE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_THREE],
+ BNO055_MAG_DATA_Y_MSB_VALUEY);
+ mag->y = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_THREE])) <<
+ BNO055_SHIFT_8_POSITION) |
+ (v_data_u8[INDEX_TWO]));
+ /* Data Z*/
+ v_data_u8[INDEX_FOUR] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FOUR],
+ BNO055_MAG_DATA_Z_LSB_VALUEZ);
+ v_data_u8[INDEX_FIVE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FIVE],
+ BNO055_MAG_DATA_Z_MSB_VALUEZ);
+ mag->z = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_FIVE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_FOUR]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gyro data x values
+ * from register 0x14 and 0x15 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_gyro_x_s16 : The x raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_x(s16 *v_gyro_x_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the gyro 16 bit x value*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_DATA_X_LSB_VALUEX__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_GYRO_DATA_X_LSB_VALUEX);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_GYRO_DATA_X_MSB_VALUEX);
+ *v_gyro_x_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION) |
+ (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gyro data y values
+ * from register 0x16 and 0x17 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_gyro_y_s16 : The y raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_y(s16 *v_gyro_y_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the value of gyro y */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_DATA_Y_LSB_VALUEY__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_GYRO_DATA_Y_LSB_VALUEY);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_GYRO_DATA_Y_MSB_VALUEY);
+ *v_gyro_y_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gyro data z values
+ * from register 0x18 and 0x19 it is a two byte data
+ *
+ * @param v_gyro_z_s16 : The z raw data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_z(s16 *v_gyro_z_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the gyro z 16 bit value*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_DATA_Z_LSB_VALUEZ__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_GYRO_DATA_Z_LSB_VALUEZ);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_GYRO_DATA_Z_MSB_VALUEZ);
+ *v_gyro_z_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gyro data xyz values
+ * from register 0x14 to 0x19 it is a six byte data
+ *
+ *
+ * @param gyro : The value of gyro xyz data's
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | The gyro x data
+ * y | The gyro y data
+ * z | The gyro z data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_xyz(struct bno055_gyro_t *gyro)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the accel xyz value
+ v_data_u8[INDEX_ZERO] - x->LSB
+ v_data_u8[INDEX_ONE] - x->MSB
+ v_data_u8[INDEX_TWO] - y->MSB
+ v_data_u8[INDEX_THREE] - y->MSB
+ v_data_u8[INDEX_FOUR] - z->MSB
+ v_data_u8[INDEX_FIVE] - z->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_SIX] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the six bytes data of gyro xyz*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_DATA_X_LSB_VALUEX__REG,
+ v_data_u8, BNO055_SIX_U8X);
+ /* Data x*/
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_GYRO_DATA_X_LSB_VALUEX);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_GYRO_DATA_X_MSB_VALUEX);
+ gyro->x = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION) |
+ (v_data_u8[INDEX_ZERO]));
+ /* Data y*/
+ v_data_u8[INDEX_TWO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_TWO],
+ BNO055_GYRO_DATA_Y_LSB_VALUEY);
+ v_data_u8[INDEX_THREE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_THREE],
+ BNO055_GYRO_DATA_Y_MSB_VALUEY);
+ gyro->y = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_THREE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_TWO]));
+ /* Data z*/
+ v_data_u8[INDEX_FOUR] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FOUR],
+ BNO055_GYRO_DATA_Z_LSB_VALUEZ);
+ v_data_u8[INDEX_FIVE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FIVE],
+ BNO055_GYRO_DATA_Z_MSB_VALUEZ);
+ gyro->z = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_FIVE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_FOUR]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gyro data z values
+ * from register 0x1A and 0x1B it is a two byte data
+ *
+ * @param v_euler_h_s16 : The raw h data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_h(s16 *v_euler_h_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the Euler h value
+ v_data_u8[INDEX_ZERO] - h->LSB
+ v_data_u8[INDEX_ONE] - h->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the eulre heading data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_EULER_H_LSB_VALUEH__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] = BNO055_GET_BITSLICE
+ (v_data_u8[INDEX_ZERO],
+ BNO055_EULER_H_LSB_VALUEH);
+ v_data_u8[INDEX_ONE] = BNO055_GET_BITSLICE
+ (v_data_u8[INDEX_ONE],
+ BNO055_EULER_H_MSB_VALUEH);
+ *v_euler_h_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION) |
+ (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads Euler data r values
+ * from register 0x1C and 0x1D it is a two byte data
+ *
+ * @param v_euler_r_s16 : The raw r data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_r(s16 *v_euler_r_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the Euler h value
+ v_data_u8[INDEX_ZERO] - r->LSB
+ v_data_u8[INDEX_ONE] - r->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the Euler roll data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_EULER_R_LSB_VALUER__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_EULER_R_LSB_VALUER);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_EULER_R_MSB_VALUER);
+ *v_euler_r_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads Euler data p values
+ * from register 0x1E and 0x1F it is a two byte data
+ *
+ * @param v_euler_p_s16 : The raw p data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_p(s16 *v_euler_p_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the Euler p value
+ v_data_u8[INDEX_ZERO] - p->LSB
+ v_data_u8[INDEX_ONE] - p->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the Euler p data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_EULER_P_LSB_VALUEP__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_EULER_P_LSB_VALUEP);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_EULER_P_MSB_VALUEP);
+ *v_euler_p_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads Euler data hrp values
+ * from register 0x1A to 0x1F it is a six byte data
+ *
+ *
+ * @param euler : The Euler hrp data's
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * h | The Euler h data
+ * r | The Euler r data
+ * p | The Euler p data
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_hrp(
+struct bno055_euler_t *euler)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the Euler hrp value
+ v_data_u8[INDEX_ZERO] - h->LSB
+ v_data_u8[INDEX_ONE] - h->MSB
+ v_data_u8[INDEX_TWO] - r->MSB
+ v_data_u8[INDEX_THREE] - r->MSB
+ v_data_u8[INDEX_FOUR] - p->MSB
+ v_data_u8[INDEX_FIVE] - p->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_SIX] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the six byte of Euler hrp data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_EULER_H_LSB_VALUEH__REG,
+ v_data_u8, BNO055_SIX_U8X);
+ /* Data h*/
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_EULER_H_LSB_VALUEH);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_EULER_H_MSB_VALUEH);
+ euler->h = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION) |
+ (v_data_u8[INDEX_ZERO]));
+ /* Data r*/
+ v_data_u8[INDEX_TWO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_TWO],
+ BNO055_EULER_R_LSB_VALUER);
+ v_data_u8[INDEX_THREE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_THREE],
+ BNO055_EULER_R_MSB_VALUER);
+ euler->r = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_THREE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_TWO]));
+ /* Data p*/
+ v_data_u8[INDEX_FOUR] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FOUR],
+ BNO055_EULER_P_LSB_VALUEP);
+ v_data_u8[INDEX_FIVE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FIVE],
+ BNO055_EULER_P_MSB_VALUEP);
+ euler->p = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_FIVE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_FOUR]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads quaternion data w values
+ * from register 0x20 and 0x21 it is a two byte data
+ *
+ * @param v_quaternion_w_s16 : The raw w data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_w(
+s16 *v_quaternion_w_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the Quaternion w value
+ v_data_u8[INDEX_ZERO] - w->LSB
+ v_data_u8[INDEX_ONE] - w->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the two byte value
+ of quaternion w data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_QUATERNION_DATA_W_LSB_VALUEW__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_QUATERNION_DATA_W_LSB_VALUEW);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_QUATERNION_DATA_W_MSB_VALUEW);
+ *v_quaternion_w_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads quaternion data x values
+ * from register 0x22 and 0x23 it is a two byte data
+ *
+ * @param v_quaternion_x_s16 : The raw x data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_x(
+s16 *v_quaternion_x_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the quaternion x value
+ v_data_u8[INDEX_ZERO] - x->LSB
+ v_data_u8[INDEX_ONE] - x->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the two byte value
+ of quaternion x data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_QUATERNION_DATA_X_LSB_VALUEX__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_QUATERNION_DATA_X_LSB_VALUEX);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_QUATERNION_DATA_X_MSB_VALUEX);
+ *v_quaternion_x_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION) | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads quaternion data y values
+ * from register 0x24 and 0x25 it is a two byte data
+ *
+ * @param v_quaternion_y_s16 : The raw y data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_y(
+s16 *v_quaternion_y_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the quaternion y value
+ v_data_u8[INDEX_ZERO] - y->LSB
+ v_data_u8[INDEX_ONE] - y->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the two byte value
+ of quaternion y data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_QUATERNION_DATA_Y_LSB_VALUEY__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] = BNO055_GET_BITSLICE
+ (v_data_u8[INDEX_ZERO],
+ BNO055_QUATERNION_DATA_Y_LSB_VALUEY);
+ v_data_u8[INDEX_ONE] = BNO055_GET_BITSLICE
+ (v_data_u8[INDEX_ONE],
+ BNO055_QUATERNION_DATA_Y_MSB_VALUEY);
+ *v_quaternion_y_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads quaternion data z values
+ * from register 0x26 and 0x27 it is a two byte data
+ *
+ * @param v_quaternion_z_s16 : The raw z data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_z(
+s16 *v_quaternion_z_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the quaternion z value
+ v_data_u8[INDEX_ZERO] - z->LSB
+ v_data_u8[INDEX_ONE] - z->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the two byte value
+ of quaternion z data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_QUATERNION_DATA_Z_LSB_VALUEZ__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_QUATERNION_DATA_Z_LSB_VALUEZ);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_QUATERNION_DATA_Z_MSB_VALUEZ);
+ *v_quaternion_z_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads Quaternion data wxyz values
+ * from register 0x20 to 0x27 it is a six byte data
+ *
+ *
+ * @param quaternion : The value of quaternion wxyz data's
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * w | The quaternion w data
+ * x | The quaternion x data
+ * y | The quaternion y data
+ * z | The quaternion z data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_wxyz(
+struct bno055_quaternion_t *quaternion)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the quaternion wxyz value
+ v_data_u8[INDEX_ZERO] - w->LSB
+ v_data_u8[INDEX_ONE] - w->MSB
+ v_data_u8[INDEX_TWO] - x->LSB
+ v_data_u8[INDEX_THREE] - x->MSB
+ v_data_u8[INDEX_FOUR] - y->MSB
+ v_data_u8[INDEX_FIVE] - y->MSB
+ v_data_u8[6] - z->MSB
+ v_data_u8[7] - z->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_EIGHT] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the eight byte value
+ of quaternion wxyz data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_QUATERNION_DATA_W_LSB_VALUEW__REG,
+ v_data_u8, BNO055_EIGHT_U8X);
+ /* Data W*/
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_QUATERNION_DATA_W_LSB_VALUEW);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_QUATERNION_DATA_W_MSB_VALUEW);
+ quaternion->w = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION) |
+ (v_data_u8[INDEX_ZERO]));
+ /* Data X*/
+ v_data_u8[INDEX_TWO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_TWO],
+ BNO055_QUATERNION_DATA_X_LSB_VALUEX);
+ v_data_u8[INDEX_THREE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_THREE],
+ BNO055_QUATERNION_DATA_X_MSB_VALUEX);
+ quaternion->x = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_THREE])) <<
+ BNO055_SHIFT_8_POSITION) |
+ (v_data_u8[INDEX_TWO]));
+ /* Data Y*/
+ v_data_u8[INDEX_FOUR] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FOUR],
+ BNO055_QUATERNION_DATA_Y_LSB_VALUEY);
+ v_data_u8[INDEX_FIVE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FIVE],
+ BNO055_QUATERNION_DATA_Y_MSB_VALUEY);
+ quaternion->y = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_FIVE])) <<
+ BNO055_SHIFT_8_POSITION) |
+ (v_data_u8[INDEX_FOUR]));
+ /* Data Z*/
+ v_data_u8[INDEX_SIX] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_SIX],
+ BNO055_QUATERNION_DATA_Z_LSB_VALUEZ);
+ v_data_u8[INDEX_SEVEN] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_SEVEN],
+ BNO055_QUATERNION_DATA_Z_MSB_VALUEZ);
+ quaternion->z = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_SEVEN])) <<
+ BNO055_SHIFT_8_POSITION) |
+ (v_data_u8[INDEX_SIX]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads Linear accel data x values
+ * from register 0x29 and 0x2A it is a two byte data
+ *
+ * @param v_linear_accel_x_s16 : The raw x data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_x(
+s16 *v_linear_accel_x_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the linear accel x value
+ v_data_u8[INDEX_ZERO] - x->LSB
+ v_data_u8[INDEX_ONE] - x->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the two byte value
+ of linear accel x data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_LINEAR_ACCEL_DATA_X_LSB_VALUEX__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_LINEAR_ACCEL_DATA_X_LSB_VALUEX);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_LINEAR_ACCEL_DATA_X_MSB_VALUEX);
+ *v_linear_accel_x_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads Linear accel data x values
+ * from register 0x2B and 0x2C it is a two byte data
+ *
+ * @param v_linear_accel_y_s16 : The raw y data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_y(
+s16 *v_linear_accel_y_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the linear accel y value
+ v_data_u8[INDEX_ZERO] - y->LSB
+ v_data_u8[INDEX_ONE] - y->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the two byte value
+ of linear accel y data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_LINEAR_ACCEL_DATA_Y_LSB_VALUEY__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_LINEAR_ACCEL_DATA_Y_LSB_VALUEY);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_LINEAR_ACCEL_DATA_Y_MSB_VALUEY);
+ *v_linear_accel_y_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION) | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads Linear accel data x values
+ * from register 0x2C and 0x2D it is a two byte data
+ *
+ * @param v_linear_accel_z_s16 : The raw z data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_z(
+s16 *v_linear_accel_z_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the linear accel z value
+ v_data_u8[INDEX_ZERO] - z->LSB
+ v_data_u8[INDEX_ONE] - z->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the two byte value
+ of linear accel z data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_LINEAR_ACCEL_DATA_Z_LSB_VALUEZ__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_LINEAR_ACCEL_DATA_Z_LSB_VALUEZ);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_LINEAR_ACCEL_DATA_Z_MSB_VALUEZ);
+ *v_linear_accel_z_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION) | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads Linear accel data xyz values
+ * from register 0x28 to 0x2D it is a six byte data
+ *
+ *
+ * @param linear_accel : The value of linear accel xyz data's
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | The linear accel x data
+ * y | The linear accel y data
+ * z | The linear accel z data
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_xyz(
+struct bno055_linear_accel_t *linear_accel)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the linear accel xyz value
+ v_data_u8[INDEX_ZERO] - x->LSB
+ v_data_u8[INDEX_ONE] - x->MSB
+ v_data_u8[INDEX_TWO] - y->MSB
+ v_data_u8[INDEX_THREE] - y->MSB
+ v_data_u8[INDEX_FOUR] - z->MSB
+ v_data_u8[INDEX_FIVE] - z->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_SIX] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the six byte value
+ of linear accel xyz data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_LINEAR_ACCEL_DATA_X_LSB_VALUEX__REG,
+ v_data_u8, BNO055_SIX_U8X);
+ /* Data x*/
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_LINEAR_ACCEL_DATA_X_LSB_VALUEX);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_LINEAR_ACCEL_DATA_X_MSB_VALUEX);
+ linear_accel->x = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_ZERO]));
+ /* Data y*/
+ v_data_u8[INDEX_TWO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_TWO],
+ BNO055_LINEAR_ACCEL_DATA_Y_LSB_VALUEY);
+ v_data_u8[INDEX_THREE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_THREE],
+ BNO055_LINEAR_ACCEL_DATA_Y_MSB_VALUEY);
+ linear_accel->y = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_THREE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_TWO]));
+ /* Data z*/
+ v_data_u8[INDEX_FOUR] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FOUR],
+ BNO055_LINEAR_ACCEL_DATA_Z_LSB_VALUEZ);
+ v_data_u8[INDEX_FIVE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FIVE],
+ BNO055_LINEAR_ACCEL_DATA_Z_MSB_VALUEZ);
+ linear_accel->z = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_FIVE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_FOUR]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gravity data x values
+ * from register 0x2E and 0x2F it is a two byte data
+ *
+ * @param v_gravity_x_s16 : The raw x data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_x(
+s16 *v_gravity_x_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the gravity x value
+ v_data_u8[INDEX_ZERO] - x->LSB
+ v_data_u8[INDEX_ONE] - x->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the two byte value
+ of gravity x data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GRAVITY_DATA_X_LSB_VALUEX__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_GRAVITY_DATA_X_LSB_VALUEX);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_GRAVITY_DATA_X_MSB_VALUEX);
+ *v_gravity_x_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gravity data y values
+ * from register 0x30 and 0x31 it is a two byte data
+ *
+ * @param v_gravity_y_s16 : The raw y data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_y(
+s16 *v_gravity_y_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the gravity y value
+ v_data_u8[INDEX_ZERO] - y->LSB
+ v_data_u8[INDEX_ONE] - y->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the two byte value
+ of gravity y data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GRAVITY_DATA_Y_LSB_VALUEY__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_GRAVITY_DATA_Y_LSB_VALUEY);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_GRAVITY_DATA_Y_MSB_VALUEY);
+ *v_gravity_y_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gravity data z values
+ * from register 0x32 and 0x33 it is a two byte data
+ *
+ * @param v_gravity_z_s16 : The raw z data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_z(
+s16 *v_gravity_z_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the gravity z value
+ v_data_u8[INDEX_ZERO] - z->LSB
+ v_data_u8[INDEX_ONE] - z->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_TWO] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the two byte value
+ of gravity z data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GRAVITY_DATA_Z_LSB_VALUEZ__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_GRAVITY_DATA_Z_LSB_VALUEZ);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_GRAVITY_DATA_Z_MSB_VALUEZ);
+ *v_gravity_z_s16 = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_ONE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gravity data xyz values
+ * from register 0x2E to 0x33 it is a six byte data
+ *
+ *
+ * @param gravity : The value of gravity xyz data's
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | The gravity x data
+ * y | The gravity y data
+ * z | The gravity z data
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_xyz(
+struct bno055_gravity_t *gravity)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the gravity xyz value
+ v_data_u8[INDEX_ZERO] - x->LSB
+ v_data_u8[INDEX_ONE] - x->MSB
+ v_data_u8[INDEX_TWO] - y->MSB
+ v_data_u8[INDEX_THREE] - y->MSB
+ v_data_u8[INDEX_FOUR] - z->MSB
+ v_data_u8[INDEX_FIVE] - z->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_SIX] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the six byte value
+ of gravity xyz data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GRAVITY_DATA_X_LSB_VALUEX__REG,
+ v_data_u8, BNO055_SIX_U8X);
+ /* Data x*/
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_GRAVITY_DATA_X_LSB_VALUEX);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_GRAVITY_DATA_X_MSB_VALUEX);
+ gravity->x = (s16)(((s32)
+ ((s8)v_data_u8[INDEX_ONE]) <<
+ BNO055_SHIFT_8_POSITION) |
+ (v_data_u8[INDEX_ZERO]));
+ /* Data y*/
+ v_data_u8[INDEX_TWO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_TWO],
+ BNO055_GRAVITY_DATA_Y_LSB_VALUEY);
+ v_data_u8[INDEX_THREE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_THREE],
+ BNO055_GRAVITY_DATA_Y_MSB_VALUEY);
+ gravity->y = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_THREE])) <<
+ BNO055_SHIFT_8_POSITION) | (v_data_u8[INDEX_TWO]));
+ /* Data z*/
+ v_data_u8[INDEX_FOUR] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FOUR],
+ BNO055_GRAVITY_DATA_Z_LSB_VALUEZ);
+ v_data_u8[INDEX_FIVE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FIVE],
+ BNO055_GRAVITY_DATA_Z_MSB_VALUEZ);
+ gravity->z = (s16)((((s32)
+ ((s8)v_data_u8[INDEX_FIVE])) <<
+ BNO055_SHIFT_8_POSITION)
+ | (v_data_u8[INDEX_FOUR]));
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads temperature values
+ * from register 0x33 it is a byte data
+ *
+ * @param v_temp_s8 : The raw temperature data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_temp_data(s8 *v_temp_s8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8 = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the raw temperature data */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TEMP__REG, &v_data_u8, BNO055_ONE_U8X);
+ *v_temp_s8 = v_data_u8;
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+#ifdef BNO055_FLOAT_ENABLE
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to meterpersecseq output as float
+ *
+ * @param v_accel_x_f : The accel x meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_x_msq(
+float *v_accel_x_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_accel_x_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_accel_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&v_accel_unit_u8);
+ if (v_accel_unit_u8 != ACCEL_UNIT_MSQ)
+ com_rslt += bno055_set_accel_unit(ACCEL_UNIT_MSQ);
+ if (com_rslt == SUCCESS) {
+ /* Read the accel raw x data*/
+ com_rslt += bno055_read_accel_x(&v_reg_accel_x_s16);
+ p_bno055->delay_msec(BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw accel x to m/s2*/
+ v_data_f =
+ (float)(v_reg_accel_x_s16/ACCEL_DIV_MSQ);
+ *v_accel_x_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to millig output as float
+ *
+ * @param v_accel_x_f : The accel x millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_x_mg(
+float *v_accel_x_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_accel_x_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_accel_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current accel unit and set the
+ unit as mg if the unit is in m/s2*/
+ com_rslt = bno055_get_accel_unit(&v_accel_unit_u8);
+ if (v_accel_unit_u8 != ACCEL_UNIT_MG)
+ com_rslt += bno055_set_accel_unit(ACCEL_UNIT_MG);
+ if (com_rslt == SUCCESS) {
+ /* Read the accel raw x data*/
+ com_rslt += bno055_read_accel_x(&v_reg_accel_x_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw accel x to m/s2*/
+ v_data_f =
+ (float)(v_reg_accel_x_s16/ACCEL_DIV_MG);
+ *v_accel_x_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to meterpersecseq output as float
+ *
+ * @param v_accel_y_f : The accel y meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_y_msq(
+float *v_accel_y_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_accel_y_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_accel_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&v_accel_unit_u8);
+ if (v_accel_unit_u8 != ACCEL_UNIT_MSQ)
+ com_rslt += bno055_set_accel_unit(ACCEL_UNIT_MSQ);
+ if (com_rslt == SUCCESS) {
+ com_rslt += bno055_read_accel_y(&v_reg_accel_y_s16);
+ p_bno055->delay_msec(BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw accel y to m/s2*/
+ v_data_f =
+ (float)(v_reg_accel_y_s16/ACCEL_DIV_MSQ);
+ *v_accel_y_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel y raw data
+ * to millig output as float
+ *
+ * @param v_accel_y_f : The accel y millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_y_mg(
+float *v_accel_y_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_accel_y_s16 = BNO055_ZERO_U8X;
+ float data = BNO055_ZERO_U8X;
+ u8 v_accel_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current accel unit and set the
+ unit as mg if the unit is in m/s2*/
+ com_rslt = bno055_get_accel_unit(&v_accel_unit_u8);
+ if (v_accel_unit_u8 != ACCEL_UNIT_MG)
+ com_rslt += bno055_set_accel_unit(ACCEL_UNIT_MG);
+ if (com_rslt == SUCCESS) {
+ /* Read the accel raw z data*/
+ com_rslt += bno055_read_accel_y(&v_reg_accel_y_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw accel z to mg*/
+ data = (float)(v_reg_accel_y_s16/ACCEL_DIV_MG);
+ *v_accel_y_f = data;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to meterpersecseq output as float
+ *
+ * @param v_accel_z_f : The accel z meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_z_msq(
+float *v_accel_z_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_accel_z_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_accel_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&v_accel_unit_u8);
+ if (v_accel_unit_u8 != ACCEL_UNIT_MSQ)
+ com_rslt += bno055_set_accel_unit(ACCEL_UNIT_MSQ);
+ if (com_rslt == SUCCESS) {
+ /* Read the accel raw z data*/
+ com_rslt += bno055_read_accel_z(&v_reg_accel_z_s16);
+ p_bno055->delay_msec(BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw accel z to m/s2*/
+ v_data_f =
+ (float)(v_reg_accel_z_s16/ACCEL_DIV_MSQ);
+ *v_accel_z_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to millig output as float
+ *
+ * @param v_accel_z_f : The accel z millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_z_mg(
+float *v_accel_z_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_accel_z_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_accel_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current accel unit and set the
+ unit as mg if the unit is in m/s2 */
+ com_rslt = bno055_get_accel_unit(&v_accel_unit_u8);
+ if (v_accel_unit_u8 != ACCEL_UNIT_MG)
+ com_rslt += bno055_set_accel_unit(ACCEL_UNIT_MG);
+ if (com_rslt == SUCCESS) {
+ /* Read the accel raw z data*/
+ com_rslt += bno055_read_accel_z(&v_reg_accel_z_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw accel x to mg*/
+ v_data_f =
+ (float)(v_reg_accel_z_s16/ACCEL_DIV_MG);
+ *v_accel_z_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel xyz raw data
+ * to meterpersecseq output as float
+ *
+ * @param accel_xyz : The meterpersecseq data of accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of accel
+ * y | meterpersecseq data of accel
+ * z | meterpersecseq data of accel
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_xyz_msq(
+struct bno055_accel_float_t *accel_xyz)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_accel_t reg_accel_xyz = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ u8 v_accel_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&v_accel_unit_u8);
+ if (v_accel_unit_u8 != ACCEL_UNIT_MSQ)
+ com_rslt += bno055_set_accel_unit(ACCEL_UNIT_MSQ);
+ if (com_rslt == SUCCESS) {
+ /* Read the accel raw xyz data*/
+ com_rslt += bno055_read_accel_xyz(&reg_accel_xyz);
+ if (com_rslt == SUCCESS) {
+ /* Convert the accel raw xyz to meterpersecseq*/
+ accel_xyz->x =
+ (float)(reg_accel_xyz.x/ACCEL_DIV_MSQ);
+ accel_xyz->y =
+ (float)(reg_accel_xyz.y/ACCEL_DIV_MSQ);
+ accel_xyz->z =
+ (float)(reg_accel_xyz.z/ACCEL_DIV_MSQ);
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel xyz raw data
+ * to millig output as float
+ *
+ * @param accel_xyz : The millig data of accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | millig data of accel
+ * y | millig data of accel
+ * z | millig data of accel
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_xyz_mg(
+struct bno055_accel_float_t *accel_xyz)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_accel_t reg_accel_xyz = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ u8 v_accel_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current accel unit and set the
+ unit as mg if the unit is in m/s2*/
+ com_rslt = bno055_get_accel_unit(&v_accel_unit_u8);
+ if (v_accel_unit_u8 != ACCEL_UNIT_MG)
+ com_rslt += bno055_set_accel_unit(ACCEL_UNIT_MG);
+ if (com_rslt == SUCCESS) {
+ /* Read the accel raw y data*/
+ com_rslt += bno055_read_accel_xyz(&reg_accel_xyz);
+ if (com_rslt == SUCCESS) {
+ /*Convert the accel raw xyz to millig */
+ accel_xyz->x =
+ (float)(reg_accel_xyz.x/ACCEL_DIV_MG);
+ accel_xyz->y =
+ (float)(reg_accel_xyz.y/ACCEL_DIV_MG);
+ accel_xyz->z =
+ (float)(reg_accel_xyz.z/ACCEL_DIV_MG);
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the mag x raw data
+ * to microTesla output as float
+ *
+ * @param v_mag_x_f : The mag x microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_x_uT(
+float *v_mag_x_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_mag_x_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ /* Read raw mag x data */
+ com_rslt = bno055_read_mag_x(&v_reg_mag_x_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw mag x to microTesla*/
+ v_data_f = (float)(v_reg_mag_x_s16/MAG_DIV_UT);
+ *v_mag_x_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the mag y raw data
+ * to microTesla output as float
+ *
+ * @param v_mag_y_f : The mag y microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_y_uT(
+float *v_mag_y_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_mag_y_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ /* Read raw mag y data */
+ com_rslt = bno055_read_mag_y(&v_reg_mag_y_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw mag y to microTesla*/
+ v_data_f = (float)(v_reg_mag_y_s16/MAG_DIV_UT);
+ *v_mag_y_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the mag z raw data
+ * to microTesla output as float
+ *
+ * @param v_mag_z_f : The mag z microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_z_uT(
+float *v_mag_z_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_mag_z_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ /* Read raw mag z data */
+ com_rslt = bno055_read_mag_z(&v_reg_mag_z_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw mag z to microTesla*/
+ v_data_f = (float)(v_reg_mag_z_s16/MAG_DIV_UT);
+ *v_mag_z_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the mag yz raw data
+ * to microTesla output as float
+ *
+ * @param mag_xyz_data : The microTesla data of mag xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | microTesla data of mag
+ * y | microTesla data of mag
+ * z | microTesla data of mag
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_xyz_uT(
+struct bno055_mag_float_t *mag_xyz_data)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_mag_t mag_xyz = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ /* Read raw mag x data */
+ com_rslt = bno055_read_mag_xyz(&mag_xyz);
+ if (com_rslt == SUCCESS) {
+ /* Convert mag raw xyz to microTesla*/
+ mag_xyz_data->x = (float)(mag_xyz.x/MAG_DIV_UT);
+ mag_xyz_data->y = (float)(mag_xyz.y/MAG_DIV_UT);
+ mag_xyz_data->z = (float)(mag_xyz.z/MAG_DIV_UT);
+ } else {
+ com_rslt = ERROR;
+ }
+
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to dps output as float
+ *
+ * @param v_gyro_x_f : The gyro x dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_x_dps(
+float *v_gyro_x_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gyro_x_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_gyro_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current gyro unit and set the
+ unit as dps if the unit is in rps */
+ com_rslt = bno055_get_gyro_unit(&v_gyro_unit_u8);
+ if (v_gyro_unit_u8 != GYRO_UNIT_DPS)
+ com_rslt += bno055_set_gyro_unit(GYRO_UNIT_DPS);
+ if (com_rslt == SUCCESS) {
+ /* Read gyro raw x data */
+ com_rslt += bno055_read_gyro_x(&v_reg_gyro_x_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw gyro x to dps*/
+ v_data_f =
+ (float)(v_reg_gyro_x_s16/GYRO_DIV_DPS);
+ *v_gyro_x_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to rps output as float
+ *
+ * @param v_gyro_x_f : The gyro x dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_x_rps(
+float *v_gyro_x_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gyro_x_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_gyro_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current gyro unit and set the
+ unit as rps if the unit is in dps */
+ com_rslt = bno055_get_gyro_unit(&v_gyro_unit_u8);
+ if (v_gyro_unit_u8 != GYRO_UNIT_RPS)
+ com_rslt += bno055_set_gyro_unit(GYRO_UNIT_RPS);
+ if (com_rslt == SUCCESS) {
+ /* Read gyro raw x data */
+ com_rslt += bno055_read_gyro_x(&v_reg_gyro_x_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw gyro x to rps*/
+ v_data_f =
+ (float)(v_reg_gyro_x_s16/GYRO_DIV_RPS);
+ *v_gyro_x_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to dps output as float
+ *
+ * @param v_gyro_y_f : The gyro y dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_y_dps(
+float *v_gyro_y_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gyro_y_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_gyro_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current gyro unit and set the
+ unit as dps if the unit is in rps */
+ com_rslt = bno055_get_gyro_unit(&v_gyro_unit_u8);
+ if (v_gyro_unit_u8 != GYRO_UNIT_DPS)
+ com_rslt += bno055_set_gyro_unit(GYRO_UNIT_DPS);
+ if (com_rslt == SUCCESS) {
+ /* Read gyro raw y data */
+ com_rslt += bno055_read_gyro_y(&v_reg_gyro_y_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw gyro x to dps*/
+ v_data_f =
+ (float)(v_reg_gyro_y_s16/GYRO_DIV_DPS);
+ *v_gyro_y_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to rps output as float
+ *
+ * @param v_gyro_y_f : The gyro y dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_y_rps(
+float *v_gyro_y_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gyro_y_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_gyro_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current gyro unit and set the
+ unit as rps if the unit is in dps */
+ com_rslt = bno055_get_gyro_unit(&v_gyro_unit_u8);
+ if (v_gyro_unit_u8 != GYRO_UNIT_RPS)
+ com_rslt += bno055_set_gyro_unit(GYRO_UNIT_RPS);
+ if (com_rslt == SUCCESS) {
+ /* Read gyro raw y data */
+ com_rslt += bno055_read_gyro_y(&v_reg_gyro_y_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw gyro x to rps*/
+ v_data_f =
+ (float)(v_reg_gyro_y_s16/GYRO_DIV_RPS);
+ *v_gyro_y_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to dps output as float
+ *
+ * @param v_gyro_z_f : The gyro z dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_z_dps(
+float *v_gyro_z_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gyro_z_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_gyro_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current gyro unit and set the
+ unit as dps if the unit is in rps */
+ com_rslt = bno055_get_gyro_unit(&v_gyro_unit_u8);
+ if (v_gyro_unit_u8 != GYRO_UNIT_DPS)
+ com_rslt += bno055_set_gyro_unit(GYRO_UNIT_DPS);
+ if (com_rslt == SUCCESS) {
+ /* Read gyro raw z data */
+ com_rslt += bno055_read_gyro_z(&v_reg_gyro_z_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw gyro x to dps*/
+ v_data_f =
+ (float)(v_reg_gyro_z_s16/GYRO_DIV_DPS);
+ *v_gyro_z_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to rps output as float
+ *
+ * @param v_gyro_z_f : The gyro z rps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_z_rps(
+float *v_gyro_z_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gyro_z_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_gyro_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current gyro unit and set the
+ unit as rps if the unit is in dps */
+ com_rslt = bno055_get_gyro_unit(&v_gyro_unit_u8);
+ if (v_gyro_unit_u8 != GYRO_UNIT_RPS)
+ com_rslt += bno055_set_gyro_unit(GYRO_UNIT_RPS);
+ if (com_rslt == SUCCESS) {
+ /* Read gyro raw x data */
+ com_rslt += bno055_read_gyro_z(&v_reg_gyro_z_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw gyro x to rps*/
+ v_data_f =
+ (float)(v_reg_gyro_z_s16/GYRO_DIV_RPS);
+ *v_gyro_z_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro xyz raw data
+ * to dps output as float
+ *
+ * @param gyro_xyz_data : The dps data of gyro xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | dps data of gyro
+ * y | dps data of gyro
+ * z | dps data of gyro
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_xyz_dps(
+struct bno055_gyro_float_t *gyro_xyz_data)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_gyro_t gyro_xyz = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ u8 v_gyro_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current gyro unit and set the
+ unit as dps if the unit is in rps */
+ com_rslt = bno055_get_gyro_unit(&v_gyro_unit_u8);
+ if (v_gyro_unit_u8 != GYRO_UNIT_DPS)
+ com_rslt += bno055_set_gyro_unit(GYRO_UNIT_DPS);
+ if (com_rslt == SUCCESS) {
+ /* Read gyro raw xyz data */
+ com_rslt += bno055_read_gyro_xyz(&gyro_xyz);
+ if (com_rslt == SUCCESS) {
+ /* Convert gyro raw xyz to dps*/
+ gyro_xyz_data->x =
+ (float)(gyro_xyz.x/GYRO_DIV_DPS);
+ gyro_xyz_data->y =
+ (float)(gyro_xyz.y/GYRO_DIV_DPS);
+ gyro_xyz_data->z =
+ (float)(gyro_xyz.z/GYRO_DIV_DPS);
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro xyz raw data
+ * to rps output as float
+ *
+ * @param gyro_xyz_data : The rps data of gyro xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | rps data of gyro
+ * y | rps data of gyro
+ * z | rps data of gyro
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_xyz_rps(
+struct bno055_gyro_float_t *gyro_xyz_data)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_gyro_t gyro_xyz = {BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ u8 v_gyro_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current gyro unit and set the
+ unit as rps if the unit is in dps */
+ com_rslt = bno055_get_gyro_unit(&v_gyro_unit_u8);
+ if (v_gyro_unit_u8 != GYRO_UNIT_RPS)
+ com_rslt += bno055_set_gyro_unit(GYRO_UNIT_RPS);
+ if (com_rslt == SUCCESS) {
+ /* Read gyro raw xyz data */
+ com_rslt += bno055_read_gyro_xyz(&gyro_xyz);
+ if (com_rslt == SUCCESS) {
+ /* Convert gyro raw xyz to rps*/
+ gyro_xyz_data->x =
+ (float)(gyro_xyz.x/GYRO_DIV_RPS);
+ gyro_xyz_data->y =
+ (float)(gyro_xyz.y/GYRO_DIV_RPS);
+ gyro_xyz_data->z =
+ (float)(gyro_xyz.z/GYRO_DIV_RPS);
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to degree output as float
+ *
+ * @param v_euler_h_f : The float value of Euler h degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_h_deg(
+float *v_euler_h_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_euler_h_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_euler_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current Euler unit and set the
+ unit as degree if the unit is in radians */
+ com_rslt = bno055_get_euler_unit(&v_euler_unit_u8);
+ if (v_euler_unit_u8 != EULER_UNIT_DEG)
+ com_rslt += bno055_set_euler_unit(EULER_UNIT_DEG);
+ if (com_rslt == SUCCESS) {
+ /* Read Euler raw h data*/
+ com_rslt += bno055_read_euler_h(&v_reg_euler_h_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw Euler h data to degree*/
+ v_data_f =
+ (float)(v_reg_euler_h_s16/EULER_DIV_DEG);
+ *v_euler_h_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to radians output as float
+ *
+ * @param v_euler_h_f : The float value of Euler h radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_h_rad(
+float *v_euler_h_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_euler_h_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_euler_unit_u8 = BNO055_ZERO_U8X;
+ com_rslt = bno055_get_euler_unit(&v_euler_unit_u8);
+ if (v_euler_unit_u8 != EULER_UNIT_RAD)
+ /* Read the current Euler unit and set the
+ unit as radians if the unit is in degree */
+ com_rslt += bno055_set_euler_unit(EULER_UNIT_RAD);
+ if (com_rslt == SUCCESS) {
+ /* Read Euler raw h data*/
+ com_rslt += bno055_read_euler_h(&v_reg_euler_h_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw Euler h data to degree*/
+ v_data_f =
+ (float)(v_reg_euler_h_s16/EULER_DIV_RAD);
+ *v_euler_h_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to degree output as float
+ *
+ * @param v_euler_r_f : The float value of Euler r degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_r_deg(
+float *v_euler_r_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 reg_euler_r = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_euler_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current Euler unit and set the
+ unit as degree if the unit is in radians */
+ com_rslt = bno055_get_euler_unit(&v_euler_unit_u8);
+ if (v_euler_unit_u8 != EULER_UNIT_DEG)
+ com_rslt += bno055_set_euler_unit(EULER_UNIT_DEG);
+ if (com_rslt == SUCCESS) {
+ /* Read Euler raw r data*/
+ com_rslt += bno055_read_euler_r(&reg_euler_r);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw Euler r data to degree*/
+ v_data_f = (float)(reg_euler_r/EULER_DIV_DEG);
+ *v_euler_r_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to radians output as float
+ *
+ * @param v_euler_r_f : The float value of Euler r radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_r_rad(
+float *v_euler_r_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 reg_v_euler_r_f = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_euler_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current Euler unit and set the
+ unit as radians if the unit is in degree */
+ com_rslt = bno055_get_euler_unit(&v_euler_unit_u8);
+ if (v_euler_unit_u8 != EULER_UNIT_RAD)
+ com_rslt += bno055_set_euler_unit(EULER_UNIT_RAD);
+ if (com_rslt == SUCCESS) {
+ /* Read Euler raw r data*/
+ com_rslt += bno055_read_euler_r(&reg_v_euler_r_f);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw Euler r data to radians*/
+ v_data_f =
+ (float)(reg_v_euler_r_f/EULER_DIV_RAD);
+ *v_euler_r_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to degree output as float
+ *
+ * @param v_euler_p_f : The float value of Euler p degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_p_deg(
+float *v_euler_p_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 reg_v_euler_p_f = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_euler_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current Euler unit and set the
+ unit as degree if the unit is in radians */
+ com_rslt = bno055_get_euler_unit(&v_euler_unit_u8);
+ if (v_euler_unit_u8 != EULER_UNIT_DEG)
+ com_rslt += bno055_set_euler_unit(EULER_UNIT_DEG);
+ if (com_rslt == SUCCESS) {
+ /* Read Euler raw p data*/
+ com_rslt += bno055_read_euler_p(&reg_v_euler_p_f);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw Euler p data to degree*/
+ v_data_f =
+ (float)(reg_v_euler_p_f/EULER_DIV_DEG);
+ *v_euler_p_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to radians output as float
+ *
+ * @param v_euler_p_f : The float value of Euler p radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_p_rad(
+float *v_euler_p_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 reg_v_euler_p_f = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_euler_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current Euler unit and set the
+ unit as radians if the unit is in degree */
+ com_rslt = bno055_get_euler_unit(&v_euler_unit_u8);
+ if (v_euler_unit_u8 != EULER_UNIT_RAD)
+ com_rslt += bno055_set_euler_unit(EULER_UNIT_RAD);
+ if (com_rslt == SUCCESS) {
+ /* Read Euler raw r data*/
+ com_rslt += bno055_read_euler_p(&reg_v_euler_p_f);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw Euler r data to radians*/
+ v_data_f =
+ (float)(reg_v_euler_p_f/EULER_DIV_RAD);
+ *v_euler_p_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler hrp raw data
+ * to degree output as float
+ *
+ * @param euler_hpr : The degree data of Euler hrp
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * h | degree data of Euler
+ * r | degree data of Euler
+ * p | degree data of Euler
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_hpr_deg(
+struct bno055_euler_float_t *euler_hpr)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_euler_t reg_euler = {BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ u8 v_euler_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current Euler unit and set the
+ unit as degree if the unit is in radians */
+ com_rslt = bno055_get_euler_unit(&v_euler_unit_u8);
+ if (v_euler_unit_u8 != EULER_UNIT_DEG)
+ com_rslt += bno055_set_euler_unit(EULER_UNIT_DEG);
+ if (com_rslt == SUCCESS) {
+ /* Read Euler raw hrp data*/
+ com_rslt += bno055_read_euler_hrp(&reg_euler);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw Euler hrp to degree*/
+ euler_hpr->h =
+ (float)(reg_euler.h/EULER_DIV_DEG);
+ euler_hpr->p =
+ (float)(reg_euler.p/EULER_DIV_DEG);
+ euler_hpr->r =
+ (float)(reg_euler.r/EULER_DIV_DEG);
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler xyz raw data
+ * to radians output as float
+ *
+ * @param euler_hpr : The radians data of Euler hrp
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * h | radians data of Euler
+ * r | radians data of Euler
+ * p | radians data of Euler
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_hpr_rad(
+struct bno055_euler_float_t *euler_hpr)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_euler_t reg_euler = {BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ u8 v_euler_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current Euler unit and set the
+ unit as radians if the unit is in degree */
+ com_rslt = bno055_get_euler_unit(&v_euler_unit_u8);
+ if (v_euler_unit_u8 != EULER_UNIT_RAD)
+ com_rslt += bno055_set_euler_unit(EULER_UNIT_RAD);
+ if (com_rslt == SUCCESS) {
+ /* Read Euler raw hrp data*/
+ com_rslt += bno055_read_euler_hrp(&reg_euler);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw hrp to radians */
+ euler_hpr->h =
+ (float)(reg_euler.h/EULER_DIV_RAD);
+ euler_hpr->p =
+ (float)(reg_euler.p/EULER_DIV_RAD);
+ euler_hpr->r =
+ (float)(reg_euler.r/EULER_DIV_RAD);
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the linear
+ * accel x raw data to meterpersecseq output as float
+ *
+ * @param v_linear_accel_x_f : The float value of linear accel x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_x_msq(
+float *v_linear_accel_x_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_linear_accel_x_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ /* Read the raw x of linear accel */
+ com_rslt = bno055_read_linear_accel_x(&v_reg_linear_accel_x_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw linear accel x to m/s2*/
+ v_data_f =
+ (float)(v_reg_linear_accel_x_s16/LINEAR_ACCEL_DIV_MSQ);
+ *v_linear_accel_x_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the linear
+ * accel y raw data to meterpersecseq output as float
+ *
+ * @param v_linear_accel_y_f : The float value of linear accel y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_y_msq(
+float *v_linear_accel_y_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 reg_linear_accel_y = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ /* Read the raw y of linear accel */
+ com_rslt = bno055_read_linear_accel_y(&reg_linear_accel_y);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw linear accel x to m/s2*/
+ v_data_f = (float)
+ (reg_linear_accel_y/LINEAR_ACCEL_DIV_MSQ);
+ *v_linear_accel_y_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the linear
+ * accel z raw data to meterpersecseq output as float
+ *
+ * @param v_linear_accel_z_f : The float value of linear accel z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_z_msq(
+float *v_linear_accel_z_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 reg_linear_accel_z = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ /* Read the raw x of linear accel */
+ com_rslt = bno055_read_linear_accel_z(&reg_linear_accel_z);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw linear accel z to m/s2*/
+ v_data_f = (float)
+ (reg_linear_accel_z/LINEAR_ACCEL_DIV_MSQ);
+ *v_linear_accel_z_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the linear accel xyz raw data
+ * to meterpersecseq output as float
+ *
+ * @param linear_accel_xyz : The meterpersecseq data of linear accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of linear accel
+ * y | meterpersecseq data of linear accel
+ * z | meterpersecseq data of linear accel
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_xyz_msq(
+struct bno055_linear_accel_float_t *linear_accel_xyz)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_linear_accel_t reg_linear_accel = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ /* Read the raw x of linear accel */
+ com_rslt = bno055_read_linear_accel_xyz(&reg_linear_accel);
+ if (com_rslt == SUCCESS) {
+ linear_accel_xyz->x =
+ (float)(reg_linear_accel.x/LINEAR_ACCEL_DIV_MSQ);
+ linear_accel_xyz->y =
+ (float)(reg_linear_accel.y/LINEAR_ACCEL_DIV_MSQ);
+ linear_accel_xyz->z =
+ (float)(reg_linear_accel.z/LINEAR_ACCEL_DIV_MSQ);
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gravity
+ * x raw data to meterpersecseq output as float
+ *
+ * @param v_gravity_x_f : The float value of gravity x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_float_x_msq(
+float *v_gravity_x_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gravity_x_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ /* Read raw gravity of x*/
+ com_rslt = bno055_read_gravity_x(&v_reg_gravity_x_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw gravity x to m/s2*/
+ v_data_f = (float)(v_reg_gravity_x_s16/GRAVITY_DIV_MSQ);
+ *v_gravity_x_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gravity
+ * y raw data to meterpersecseq output as float
+ *
+ * @param v_gravity_y_f : The float value of gravity y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_float_y_msq(
+float *v_gravity_y_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gravity_y_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ /* Read raw gravity of y*/
+ com_rslt = bno055_read_gravity_y(&v_reg_gravity_y_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw gravity y to m/s2*/
+ v_data_f = (float)(v_reg_gravity_y_s16/GRAVITY_DIV_MSQ);
+ *v_gravity_y_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gravity
+ * z raw data to meterpersecseq output as float
+ *
+ * @param v_gravity_z_f : The float value of gravity z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_float_z_msq(
+float *v_gravity_z_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gravity_z_s16 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ /* Read raw gravity of z */
+ com_rslt = bno055_read_gravity_z(&v_reg_gravity_z_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw gravity z to m/s2*/
+ v_data_f = (float)(v_reg_gravity_z_s16/GRAVITY_DIV_MSQ);
+ *v_gravity_z_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gravity xyz raw data
+ * to meterpersecseq output as float
+ *
+ * @param gravity_xyz : The meterpersecseq data of gravity xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of gravity
+ * y | meterpersecseq data of gravity
+ * z | meterpersecseq data of gravity
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gravity_xyz_msq(
+struct bno055_gravity_float_t *gravity_xyz)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_gravity_t reg_gravity_xyz = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ /* Read raw gravity of xyz */
+ com_rslt = bno055_read_gravity_xyz(&reg_gravity_xyz);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw gravity xyz to meterpersecseq */
+ gravity_xyz->x =
+ (float)(reg_gravity_xyz.x/GRAVITY_DIV_MSQ);
+ gravity_xyz->y =
+ (float)(reg_gravity_xyz.y/GRAVITY_DIV_MSQ);
+ gravity_xyz->z =
+ (float)(reg_gravity_xyz.z/GRAVITY_DIV_MSQ);
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Fahrenheit output as float
+ *
+ * @param v_temp_f : The float value of temperature Fahrenheit
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_temp_fahrenheit(
+float *v_temp_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s8 v_reg_temp_s8 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_temp_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current temperature unit and set the
+ unit as Fahrenheit if the unit is in Celsius */
+ com_rslt = bno055_get_temp_unit(&v_temp_unit_u8);
+ if (v_temp_unit_u8 != TEMP_UNIT_FAHRENHEIT)
+ com_rslt += bno055_set_temp_unit(TEMP_UNIT_FAHRENHEIT);
+ if (com_rslt == SUCCESS) {
+ /* Read the raw temperature data */
+ com_rslt += bno055_read_temp_data(&v_reg_temp_s8);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw temperature data to Fahrenheit*/
+ v_data_f = (float)
+ (v_reg_temp_s8/TEMP_DIV_FAHRENHEIT);
+ *v_temp_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Celsius output as float
+ *
+ * @param v_temp_f : The float value of temperature Celsius
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_temp_celsius(
+float *v_temp_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s8 v_reg_temp_s8 = BNO055_ZERO_U8X;
+ float v_data_f = BNO055_ZERO_U8X;
+ u8 v_temp_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current temperature unit and set the
+ unit as Fahrenheit if the unit is in Celsius */
+ com_rslt = bno055_get_temp_unit(&v_temp_unit_u8);
+ if (v_temp_unit_u8 != TEMP_UNIT_CELSIUS)
+ com_rslt += bno055_set_temp_unit(TEMP_UNIT_CELSIUS);
+ if (com_rslt == SUCCESS) {
+ /* Read the raw temperature data */
+ com_rslt += bno055_read_temp_data(&v_reg_temp_s8);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw temperature data to Fahrenheit*/
+ v_data_f =
+ (float)(v_reg_temp_s8/TEMP_DIV_CELSIUS);
+ *v_temp_f = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+#endif
+#ifdef BNO055_DOUBLE_ENABLE
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to meterpersecseq output as double
+ *
+ * @param v_accel_x_d : The accel x meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_x_msq(
+double *v_accel_x_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_accel_x_s16 = BNO055_ZERO_U8X;
+ double v_data_f = BNO055_ZERO_U8X;
+ u8 v_accel_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&v_accel_unit_u8);
+ if (v_accel_unit_u8 != ACCEL_UNIT_MSQ)
+ com_rslt += bno055_set_accel_unit(ACCEL_UNIT_MSQ);
+ if (com_rslt == SUCCESS) {
+ /* Read the accel raw y data*/
+ com_rslt += bno055_read_accel_x(&v_reg_accel_x_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw x to m/s2 */
+ v_data_f =
+ (double)(v_reg_accel_x_s16/ACCEL_DIV_MSQ);
+ *v_accel_x_d = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to millig output as double
+ *
+ * @param v_accel_x_d : The accel x millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_x_mg(
+double *v_accel_x_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_accel_x_s16 = BNO055_ZERO_U8X;
+ double v_data_f = BNO055_ZERO_U8X;
+ u8 v_accel_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current accel unit and set the
+ unit as mg if the unit is in m/s2*/
+ com_rslt = bno055_get_accel_unit(&v_accel_unit_u8);
+ if (v_accel_unit_u8 != ACCEL_UNIT_MG)
+ com_rslt += bno055_set_accel_unit(ACCEL_UNIT_MG);
+ if (com_rslt == SUCCESS) {
+ /* Read the accel raw y data*/
+ com_rslt += bno055_read_accel_x(&v_reg_accel_x_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw x to mg */
+ v_data_f =
+ (double)(v_reg_accel_x_s16/ACCEL_DIV_MG);
+ *v_accel_x_d = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel y raw data
+ * to meterpersecseq output as double
+ *
+ * @param v_accel_y_d : The accel y meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_y_msq(
+double *v_accel_y_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_accel_y_s16 = BNO055_ZERO_U8X;
+ double v_data_f = BNO055_ZERO_U8X;
+ u8 v_accel_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&v_accel_unit_u8);
+ if (v_accel_unit_u8 != ACCEL_UNIT_MSQ)
+ com_rslt += bno055_set_accel_unit(ACCEL_UNIT_MSQ);
+ if (com_rslt == SUCCESS) {
+ /* Read the accel raw y data*/
+ com_rslt += bno055_read_accel_y(&v_reg_accel_y_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw x to m/s2 */
+ v_data_f =
+ (double)(v_reg_accel_y_s16/ACCEL_DIV_MSQ);
+ *v_accel_y_d = v_data_f;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel y raw data
+ * to millig output as double
+ *
+ * @param v_accel_y_d : The accel y millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_y_mg(
+double *v_accel_y_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_accel_y_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ u8 v_accel_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current accel unit and set the
+ unit as mg if the unit is in m/s2*/
+ com_rslt = bno055_get_accel_unit(&v_accel_unit_u8);
+ if (v_accel_unit_u8 != ACCEL_UNIT_MG)
+ com_rslt += bno055_set_accel_unit(ACCEL_UNIT_MG);
+ if (com_rslt == SUCCESS) {
+ /* Read the accel raw y data*/
+ com_rslt += bno055_read_accel_y(&v_reg_accel_y_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw y to mg */
+ v_data_d =
+ (double)(v_reg_accel_y_s16/ACCEL_DIV_MG);
+ *v_accel_y_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to meterpersecseq output as double
+ *
+ * @param v_accel_z_d : The accel z meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_z_msq(
+double *v_accel_z_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_accel_z_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ u8 v_accel_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&v_accel_unit_u8);
+ if (v_accel_unit_u8 != ACCEL_UNIT_MSQ)
+ com_rslt += bno055_set_accel_unit(ACCEL_UNIT_MSQ);
+ if (com_rslt == SUCCESS) {
+ /* Read the accel raw z data*/
+ com_rslt += bno055_read_accel_z(&v_reg_accel_z_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw z to m/s2 */
+ v_data_d =
+ (double)(v_reg_accel_z_s16/ACCEL_DIV_MSQ);
+ *v_accel_z_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to millig output as double
+ *
+ * @param v_accel_z_d : The accel z millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_z_mg(
+double *v_accel_z_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_accel_z_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ u8 v_accel_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current accel unit and set the
+ unit as mg if the unit is in m/s2*/
+ com_rslt = bno055_get_accel_unit(&v_accel_unit_u8);
+ if (v_accel_unit_u8 != ACCEL_UNIT_MG)
+ com_rslt += bno055_set_accel_unit(ACCEL_UNIT_MG);
+ if (com_rslt == SUCCESS) {
+ /* Read the accel raw z data*/
+ com_rslt += bno055_read_accel_z(&v_reg_accel_z_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw z to mg */
+ v_data_d =
+ (double)(v_reg_accel_z_s16/ACCEL_DIV_MG);
+ *v_accel_z_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel xyz raw data
+ * to meterpersecseq output as double
+ *
+ * @param accel_xyz : The meterpersecseq data of accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of accel
+ * y | meterpersecseq data of accel
+ * z | meterpersecseq data of accel
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_xyz_msq(
+struct bno055_accel_double_t *accel_xyz)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_accel_t reg_accel_xyz = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ u8 v_accel_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&v_accel_unit_u8);
+ if (v_accel_unit_u8 != ACCEL_UNIT_MSQ)
+ com_rslt += bno055_set_accel_unit(ACCEL_UNIT_MSQ);
+ if (com_rslt == SUCCESS) {
+ /* Read the accel raw xyz data*/
+ com_rslt += bno055_read_accel_xyz(&reg_accel_xyz);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw xyz to m/s2*/
+ accel_xyz->x =
+ (double)(reg_accel_xyz.x/ACCEL_DIV_MSQ);
+ accel_xyz->y =
+ (double)(reg_accel_xyz.y/ACCEL_DIV_MSQ);
+ accel_xyz->z =
+ (double)(reg_accel_xyz.z/ACCEL_DIV_MSQ);
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel xyz raw data
+ * to millig output as double
+ *
+ * @param accel_xyz : The millig data of accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | millig data of accel
+ * y | millig data of accel
+ * z | millig data of accel
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_xyz_mg(
+struct bno055_accel_double_t *accel_xyz)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_accel_t reg_accel_xyz = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ u8 v_accel_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&v_accel_unit_u8);
+ if (v_accel_unit_u8 != ACCEL_UNIT_MG)
+ com_rslt += bno055_set_accel_unit(ACCEL_UNIT_MG);
+ if (com_rslt == SUCCESS) {
+ /* Read the accel raw xyz data*/
+ com_rslt += bno055_read_accel_xyz(&reg_accel_xyz);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw xyz to mg*/
+ accel_xyz->x =
+ (double)(reg_accel_xyz.x/ACCEL_DIV_MG);
+ accel_xyz->y =
+ (double)(reg_accel_xyz.y/ACCEL_DIV_MG);
+ accel_xyz->z =
+ (double)(reg_accel_xyz.z/ACCEL_DIV_MG);
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the mag x raw data
+ * to microTesla output as double
+ *
+ * @param v_mag_x_d : The mag x microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_x_uT(
+double *v_mag_x_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_v_mag_x_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ /* Read raw mag x data */
+ com_rslt = bno055_read_mag_x(&v_reg_v_mag_x_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw mag x to microTesla */
+ v_data_d = (double)(v_reg_v_mag_x_s16/MAG_DIV_UT);
+ *v_mag_x_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the mag y raw data
+ * to microTesla output as double
+ *
+ * @param v_mag_y_d : The mag y microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_y_uT(
+double *v_mag_y_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_mag_y_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ /* Read raw mag y data */
+ com_rslt = bno055_read_mag_y(&v_reg_mag_y_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw mag y to microTesla */
+ v_data_d = (double)(v_reg_mag_y_s16/MAG_DIV_UT);
+ *v_mag_y_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the mag z raw data
+ * to microTesla output as double
+ *
+ * @param v_mag_z_d : The mag z microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_z_uT(
+double *v_mag_z_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_mag_z_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ /* Read raw mag x */
+ com_rslt = bno055_read_mag_z(&v_reg_mag_z_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw mag x to microTesla */
+ v_data_d = (double)(v_reg_mag_z_s16/MAG_DIV_UT);
+ *v_mag_z_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the mag yz raw data
+ * to microTesla output as double
+ *
+ * @param mag_xyz : The microTesla data of mag xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | microTesla data of mag
+ * y | microTesla data of mag
+ * z | microTesla data of mag
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_xyz_uT(
+struct bno055_mag_double_t *mag_xyz)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_mag_t reg_mag_xyz = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ /* Read raw mag xyz data */
+ com_rslt = bno055_read_mag_xyz(&reg_mag_xyz);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw mag xyz to microTesla*/
+ mag_xyz->x =
+ (double)(reg_mag_xyz.x/MAG_DIV_UT);
+ mag_xyz->y =
+ (double)(reg_mag_xyz.y/MAG_DIV_UT);
+ mag_xyz->z =
+ (double)(reg_mag_xyz.z/MAG_DIV_UT);
+ } else {
+ com_rslt = ERROR;
+ }
+
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to dps output as double
+ *
+ * @param v_gyro_x_d : The gyro x dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_x_dps(
+double *v_gyro_x_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gyro_x_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ u8 v_gyro_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current gyro unit and set the
+ unit as dps if the unit is in rps */
+ com_rslt = bno055_get_gyro_unit(&v_gyro_unit_u8);
+ if (v_gyro_unit_u8 != GYRO_UNIT_DPS)
+ com_rslt += bno055_set_gyro_unit(GYRO_UNIT_DPS);
+ if (com_rslt == SUCCESS) {
+ /* Read gyro raw x data */
+ com_rslt += bno055_read_gyro_x(&v_reg_gyro_x_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw gyro x to dps */
+ v_data_d =
+ (double)(v_reg_gyro_x_s16/GYRO_DIV_DPS);
+ *v_gyro_x_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to rps output as double
+ *
+ * @param v_gyro_x_d : The gyro x dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_x_rps(
+double *v_gyro_x_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gyro_x_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ u8 v_gyro_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current gyro unit and set the
+ unit as rps if the unit is in dps */
+ com_rslt = bno055_get_gyro_unit(&v_gyro_unit_u8);
+ if (v_gyro_unit_u8 != GYRO_UNIT_RPS)
+ com_rslt += bno055_set_gyro_unit(GYRO_UNIT_RPS);
+ if (com_rslt == SUCCESS) {
+ /* Read gyro raw x data */
+ com_rslt += bno055_read_gyro_x(&v_reg_gyro_x_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw gyro x to rps */
+ v_data_d =
+ (double)(v_reg_gyro_x_s16/GYRO_DIV_RPS);
+ *v_gyro_x_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to dps output as double
+ *
+ * @param v_gyro_y_d : The gyro y dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_y_dps(
+double *v_gyro_y_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gyro_y_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ u8 v_gyro_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current gyro unit and set the
+ unit as dps if the unit is in rps */
+ com_rslt = bno055_get_gyro_unit(&v_gyro_unit_u8);
+ if (v_gyro_unit_u8 != GYRO_UNIT_DPS)
+ com_rslt += bno055_set_gyro_unit(GYRO_UNIT_DPS);
+ if (com_rslt == SUCCESS) {
+ /* Read gyro raw y data */
+ com_rslt += bno055_read_gyro_y(&v_reg_gyro_y_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw gyro y to dps */
+ v_data_d =
+ (double)(v_reg_gyro_y_s16/GYRO_DIV_DPS);
+ *v_gyro_y_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to rps output as double
+ *
+ * @param v_gyro_y_d : The gyro y dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_y_rps(
+double *v_gyro_y_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gyro_y_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ u8 v_gyro_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current gyro unit and set the
+ unit as rps if the unit is in dps */
+ com_rslt = bno055_get_gyro_unit(&v_gyro_unit_u8);
+ if (v_gyro_unit_u8 != GYRO_UNIT_RPS)
+ com_rslt += bno055_set_gyro_unit(GYRO_UNIT_RPS);
+ if (com_rslt == SUCCESS) {
+ /* Read gyro raw y data */
+ com_rslt += bno055_read_gyro_y(&v_reg_gyro_y_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw gyro y to rps */
+ v_data_d =
+ (double)(v_reg_gyro_y_s16/GYRO_DIV_RPS);
+ *v_gyro_y_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to dps output as double
+ *
+ * @param v_gyro_z_d : The gyro z dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_z_dps(
+double *v_gyro_z_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gyro_z_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ u8 v_gyro_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current gyro unit and set the
+ unit as dps if the unit is in rps */
+ com_rslt = bno055_get_gyro_unit(&v_gyro_unit_u8);
+ if (v_gyro_unit_u8 != GYRO_UNIT_DPS)
+ com_rslt += bno055_set_gyro_unit(GYRO_UNIT_DPS);
+ if (com_rslt == SUCCESS) {
+ /* Read gyro raw z data */
+ com_rslt += bno055_read_gyro_z(&v_reg_gyro_z_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw gyro z to dps */
+ v_data_d =
+ (double)(v_reg_gyro_z_s16/GYRO_DIV_DPS);
+ *v_gyro_z_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to rps output as double
+ *
+ * @param v_gyro_z_d : The gyro z rps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_z_rps(
+double *v_gyro_z_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gyro_z_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ u8 v_gyro_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current gyro unit and set the
+ unit as rps if the unit is in dps */
+ com_rslt = bno055_get_gyro_unit(&v_gyro_unit_u8);
+ if (v_gyro_unit_u8 != GYRO_UNIT_RPS)
+ com_rslt += bno055_set_gyro_unit(GYRO_UNIT_RPS);
+ if (com_rslt == SUCCESS) {
+ /* Read gyro raw x data */
+ com_rslt += bno055_read_gyro_z(&v_reg_gyro_z_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw gyro x to rps */
+ v_data_d =
+ (double)(v_reg_gyro_z_s16/GYRO_DIV_RPS);
+ *v_gyro_z_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro xyz raw data
+ * to dps output as double
+ *
+ * @param gyro_xyz : The dps data of gyro xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | dps data of gyro
+ * y | dps data of gyro
+ * z | dps data of gyro
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_xyz_dps(
+struct bno055_gyro_double_t *gyro_xyz)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_gyro_t reg_gyro_xyz = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ u8 v_gyro_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current gyro unit and set the
+ unit as dps if the unit is in rps */
+ com_rslt = bno055_get_gyro_unit(&v_gyro_unit_u8);
+ if (v_gyro_unit_u8 != GYRO_UNIT_DPS)
+ com_rslt += bno055_set_gyro_unit(GYRO_UNIT_DPS);
+ if (com_rslt == SUCCESS) {
+ /* Read gyro raw xyz data */
+ com_rslt += bno055_read_gyro_xyz(&reg_gyro_xyz);
+ if (com_rslt == SUCCESS) {
+ /* Convert gyro raw xyz to dps*/
+ gyro_xyz->x =
+ (double)(reg_gyro_xyz.x/GYRO_DIV_DPS);
+ gyro_xyz->y =
+ (double)(reg_gyro_xyz.y/GYRO_DIV_DPS);
+ gyro_xyz->z =
+ (double)(reg_gyro_xyz.z/GYRO_DIV_DPS);
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro xyz raw data
+ * to rps output as double
+ *
+ * @param gyro_xyz : The rps data of gyro xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | rps data of gyro
+ * y | rps data of gyro
+ * z | rps data of gyro
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_xyz_rps(
+struct bno055_gyro_double_t *gyro_xyz)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_gyro_t reg_gyro_xyz = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ u8 v_gyro_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current gyro unit and set the
+ unit as rps if the unit is in dps */
+ com_rslt = bno055_get_gyro_unit(&v_gyro_unit_u8);
+ if (v_gyro_unit_u8 != GYRO_UNIT_RPS)
+ com_rslt += bno055_set_gyro_unit(GYRO_UNIT_RPS);
+ if (com_rslt == SUCCESS) {
+ /* Read gyro raw x data */
+ com_rslt += bno055_read_gyro_xyz(&reg_gyro_xyz);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw gyro xyz to rps*/
+ gyro_xyz->x =
+ (double)(reg_gyro_xyz.x/GYRO_DIV_RPS);
+ gyro_xyz->y =
+ (double)(reg_gyro_xyz.y/GYRO_DIV_RPS);
+ gyro_xyz->z =
+ (double)(reg_gyro_xyz.z/GYRO_DIV_RPS);
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to degree output as double
+ *
+ * @param v_euler_h_d : The double value of Euler h degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_h_deg(
+double *v_euler_h_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_euler_h_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ u8 v_euler_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current Euler unit and set the
+ unit as degree if the unit is in radians */
+ com_rslt = bno055_get_euler_unit(&v_euler_unit_u8);
+ if (v_euler_unit_u8 != EULER_UNIT_DEG)
+ com_rslt += bno055_set_euler_unit(EULER_UNIT_DEG);
+ if (com_rslt == SUCCESS) {
+ /* Read Euler raw h data*/
+ com_rslt += bno055_read_euler_h(&v_reg_euler_h_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw Euler h to degree */
+ v_data_d =
+ (double)(v_reg_euler_h_s16/EULER_DIV_DEG);
+ *v_euler_h_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to radians output as double
+ *
+ * @param v_euler_h_d : The double value of Euler h radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_h_rad(
+double *v_euler_h_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_euler_h_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ u8 v_euler_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current Euler unit and set the
+ unit as radians if the unit is in degree */
+ com_rslt = bno055_get_euler_unit(&v_euler_unit_u8);
+ if (v_euler_unit_u8 != EULER_UNIT_RAD)
+ com_rslt += bno055_set_euler_unit(EULER_UNIT_RAD);
+ if (com_rslt == SUCCESS) {
+ /* Read Euler raw h data*/
+ com_rslt += bno055_read_euler_h(&v_reg_euler_h_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw Euler h to radians */
+ v_data_d =
+ (double)(v_reg_euler_h_s16/EULER_DIV_RAD);
+ *v_euler_h_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to degree output as double
+ *
+ * @param v_euler_r_d : The double value of Euler r degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_r_deg(
+double *v_euler_r_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_euler_r_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ u8 v_euler_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current Euler unit and set the
+ unit as degree if the unit is in radians */
+ com_rslt = bno055_get_euler_unit(&v_euler_unit_u8);
+ if (v_euler_unit_u8 != EULER_UNIT_DEG)
+ com_rslt += bno055_set_euler_unit(EULER_UNIT_DEG);
+ if (com_rslt == SUCCESS) {
+ /* Read Euler raw r data*/
+ com_rslt += bno055_read_euler_r(&v_reg_euler_r_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw Euler r to degree */
+ v_data_d =
+ (double)(v_reg_euler_r_s16/EULER_DIV_DEG);
+ *v_euler_r_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to radians output as double
+ *
+ * @param v_euler_r_d : The double value of Euler r radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_r_rad(
+double *v_euler_r_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_euler_r_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ u8 v_euler_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current Euler unit and set the
+ unit as radians if the unit is in degree */
+ com_rslt = bno055_get_euler_unit(&v_euler_unit_u8);
+ if (v_euler_unit_u8 != EULER_UNIT_RAD)
+ com_rslt += bno055_set_euler_unit(EULER_UNIT_RAD);
+ if (com_rslt == SUCCESS) {
+ /* Read Euler raw r data*/
+ com_rslt += bno055_read_euler_r(&v_reg_euler_r_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw Euler r to radians */
+ v_data_d =
+ (double)(v_reg_euler_r_s16/EULER_DIV_RAD);
+ *v_euler_r_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to degree output as double
+ *
+ * @param v_euler_p_d : The double value of Euler p degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_p_deg(
+double *v_euler_p_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_euler_p_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ u8 v_euler_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current Euler unit and set the
+ unit as degree if the unit is in radians */
+ com_rslt = bno055_get_euler_unit(&v_euler_unit_u8);
+ if (v_euler_unit_u8 != EULER_UNIT_DEG)
+ com_rslt += bno055_set_euler_unit(EULER_UNIT_DEG);
+ if (com_rslt == SUCCESS) {
+ /* Read Euler raw p data*/
+ com_rslt += bno055_read_euler_p(&v_reg_euler_p_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw Euler p to degree*/
+ v_data_d =
+ (double)(v_reg_euler_p_s16/EULER_DIV_DEG);
+ *v_euler_p_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to radians output as double
+ *
+ * @param v_euler_p_d : The double value of Euler p radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_p_rad(
+double *v_euler_p_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_euler_p_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ u8 v_euler_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current Euler unit and set the
+ unit as radians if the unit is in degree */
+ com_rslt = bno055_get_euler_unit(&v_euler_unit_u8);
+ if (v_euler_unit_u8 != EULER_UNIT_RAD)
+ com_rslt += bno055_set_euler_unit(EULER_UNIT_RAD);
+ if (com_rslt == SUCCESS) {
+ /* Read Euler raw p data*/
+ com_rslt += bno055_read_euler_p(&v_reg_euler_p_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw p to radians*/
+ v_data_d =
+ (double)(v_reg_euler_p_s16/EULER_DIV_RAD);
+ *v_euler_p_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler hpr raw data
+ * to degree output as double
+ *
+ * @param euler_hpr : The degree data of Euler hpr
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * h | degree data of Euler
+ * r | degree data of Euler
+ * p | degree data of Euler
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_hpr_deg(
+struct bno055_euler_double_t *euler_hpr)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_euler_t reg_euler = {BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ u8 v_euler_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current Euler unit and set the
+ unit as degree if the unit is in radians */
+ com_rslt = bno055_get_euler_unit(&v_euler_unit_u8);
+ if (v_euler_unit_u8 != EULER_UNIT_DEG)
+ com_rslt += bno055_set_euler_unit(EULER_UNIT_DEG);
+ if (com_rslt == SUCCESS) {
+ /* Read Euler raw h data*/
+ com_rslt += bno055_read_euler_hrp(&reg_euler);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw Euler hrp to degree*/
+ euler_hpr->h =
+ (double)(reg_euler.h/EULER_DIV_DEG);
+ euler_hpr->p =
+ (double)(reg_euler.p/EULER_DIV_DEG);
+ euler_hpr->r =
+ (double)(reg_euler.r/EULER_DIV_DEG);
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler hpr raw data
+ * to radians output as double
+ *
+ * @param euler_hpr : The radians data of Euler hpr
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * h | radians data of Euler
+ * r | radians data of Euler
+ * p | radians data of Euler
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_hpr_rad(
+struct bno055_euler_double_t *euler_hpr)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_euler_t reg_euler = {BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ u8 v_euler_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current Euler unit and set the
+ unit as radians if the unit is in degree */
+ com_rslt = bno055_get_euler_unit(&v_euler_unit_u8);
+ if (v_euler_unit_u8 != EULER_UNIT_RAD)
+ com_rslt = bno055_set_euler_unit(EULER_UNIT_RAD);
+ if (com_rslt == SUCCESS) {
+ /* Read the raw hrp */
+ com_rslt = bno055_read_euler_hrp(&reg_euler);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw Euler hrp to radians*/
+ euler_hpr->h =
+ (double)(reg_euler.h/EULER_DIV_RAD);
+ euler_hpr->p =
+ (double)(reg_euler.p/EULER_DIV_RAD);
+ euler_hpr->r =
+ (double)(reg_euler.r/EULER_DIV_RAD);
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the linear
+ * accel x raw data to meterpersecseq output as double
+ *
+ * @param v_linear_accel_x_d : The double value of
+ * linear accel x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_x_msq(
+double *v_linear_accel_x_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_linear_accel_x_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ /* Read the raw x of linear accel */
+ com_rslt = bno055_read_linear_accel_x(&v_reg_linear_accel_x_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw x to m/s2 */
+ v_data_d = (double)
+ (v_reg_linear_accel_x_s16/LINEAR_ACCEL_DIV_MSQ);
+ *v_linear_accel_x_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the linear
+ * accel y raw data to meterpersecseq output as double
+ *
+ * @param v_linear_accel_y_d : The double value of
+ * linear accel y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_y_msq(
+double *v_linear_accel_y_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_linear_accel_y_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ /* Read the raw x of linear accel */
+ com_rslt = bno055_read_linear_accel_y(&v_reg_linear_accel_y_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw y to m/s2 */
+ v_data_d = (double)
+ (v_reg_linear_accel_y_s16/LINEAR_ACCEL_DIV_MSQ);
+ *v_linear_accel_y_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the linear
+ * accel z raw data to meterpersecseq output as double
+ *
+ * @param v_linear_accel_z_d : The double value of
+ * linear accel z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_z_msq(
+double *v_linear_accel_z_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_linear_accel_z_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ /* Read the raw x of linear accel */
+ com_rslt = bno055_read_linear_accel_z(&v_reg_linear_accel_z_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw z to m/s2 */
+ v_data_d =
+ (double)(v_reg_linear_accel_z_s16/LINEAR_ACCEL_DIV_MSQ);
+ *v_linear_accel_z_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the linear accel xyz raw data
+ * to meterpersecseq output as double
+ *
+ * @param linear_accel_xyz : The meterpersecseq data of linear accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of linear accel
+ * y | meterpersecseq data of linear accel
+ * z | meterpersecseq data of linear accel
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_xyz_msq(
+struct bno055_linear_accel_double_t *linear_accel_xyz)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_linear_accel_t reg_linear_accel_xyz = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ /* Read the raw xyz of linear accel */
+ com_rslt = bno055_read_linear_accel_xyz(&reg_linear_accel_xyz);
+ if (com_rslt == SUCCESS) {
+ /* Convert the raw xyz of linear accel to m/s2 */
+ linear_accel_xyz->x =
+ (double)(reg_linear_accel_xyz.x/LINEAR_ACCEL_DIV_MSQ);
+ linear_accel_xyz->y =
+ (double)(reg_linear_accel_xyz.y/LINEAR_ACCEL_DIV_MSQ);
+ linear_accel_xyz->z =
+ (double)(reg_linear_accel_xyz.z/LINEAR_ACCEL_DIV_MSQ);
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gravity
+ * x raw data to meterpersecseq output as double
+ *
+ * @param v_gravity_x_d : The double value of gravity x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_double_x_msq(
+double *v_gravity_x_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gravity_x_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ /* Read raw gravity of x*/
+ com_rslt = bno055_read_gravity_x(&v_reg_gravity_x_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw gravity of x to m/s2 */
+ v_data_d =
+ (double)(v_reg_gravity_x_s16/GRAVITY_DIV_MSQ);
+ *v_gravity_x_d = v_data_d;
+ } else {
+ com_rslt = ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gravity
+ * y raw data to meterpersecseq output as double
+ *
+ * @param v_gravity_y_d : The double value of gravity y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_double_y_msq(
+double *v_gravity_y_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gravity_y_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ /* Read raw gravity of y */
+ com_rslt = bno055_read_gravity_y(&v_reg_gravity_y_s16);
+ if (com_rslt == SUCCESS) {
+ /* convert raw gravity of y to m/s2 */
+ v_data_d =
+ (double)(v_reg_gravity_y_s16/GRAVITY_DIV_MSQ);
+ *v_gravity_y_d = v_data_d;
+ } else {
+ com_rslt += ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gravity
+ * z raw data to meterpersecseq output as double
+ *
+ * @param v_gravity_z_d : The double value of gravity z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_double_z_msq(
+double *v_gravity_z_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s16 v_reg_gravity_z_s16 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ /* Read raw gravity of z */
+ com_rslt = bno055_read_gravity_z(&v_reg_gravity_z_s16);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw gravity of z to m/s2 */
+ v_data_d =
+ (double)(v_reg_gravity_z_s16/GRAVITY_DIV_MSQ);
+ *v_gravity_z_d = v_data_d;
+ } else {
+ com_rslt += ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gravity xyz raw data
+ * to meterpersecseq output as double
+ *
+ * @param gravity_xyz : The meterpersecseq data of gravity xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of gravity
+ * y | meterpersecseq data of gravity
+ * z | meterpersecseq data of gravity
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gravity_xyz_msq(
+struct bno055_gravity_double_t *gravity_xyz)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ struct bno055_gravity_t reg_gravity_xyz = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ /* Read raw gravity of xyz */
+ com_rslt = bno055_read_gravity_xyz(&reg_gravity_xyz);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw gravity of xyz to m/s2 */
+ gravity_xyz->x =
+ (double)(reg_gravity_xyz.x/GRAVITY_DIV_MSQ);
+ gravity_xyz->y =
+ (double)(reg_gravity_xyz.y/GRAVITY_DIV_MSQ);
+ gravity_xyz->z =
+ (double)(reg_gravity_xyz.z/GRAVITY_DIV_MSQ);
+ } else {
+ com_rslt += ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Fahrenheit output as double
+ *
+ * @param v_temp_d : The double value of temperature Fahrenheit
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_temp_fahrenheit(
+double *v_temp_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s8 v_reg_temp_s8 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ u8 v_temp_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current temperature unit and set the
+ unit as Fahrenheit if the unit is in Celsius */
+ com_rslt = bno055_get_temp_unit(&v_temp_unit_u8);
+ if (v_temp_unit_u8 != TEMP_UNIT_FAHRENHEIT)
+ com_rslt += bno055_set_temp_unit(TEMP_UNIT_FAHRENHEIT);
+ if (com_rslt == SUCCESS) {
+ /* Read the raw temperature data */
+ com_rslt += bno055_read_temp_data(&v_reg_temp_s8);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw temperature data to Fahrenheit*/
+ v_data_d =
+ (double)(v_reg_temp_s8/TEMP_DIV_FAHRENHEIT);
+ *v_temp_d = v_data_d;
+ } else {
+ com_rslt += ERROR;
+ }
+ } else {
+ com_rslt += ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Celsius output as double
+ *
+ * @param v_temp_d : The double value of temperature Celsius
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_temp_celsius(
+double *v_temp_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ s8 v_reg_temp_s8 = BNO055_ZERO_U8X;
+ double v_data_d = BNO055_ZERO_U8X;
+ u8 v_temp_unit_u8 = BNO055_ZERO_U8X;
+ /* Read the current temperature unit and set the
+ unit as Fahrenheit if the unit is in Celsius */
+ com_rslt = bno055_get_temp_unit(&v_temp_unit_u8);
+ if (v_temp_unit_u8 != TEMP_UNIT_CELSIUS)
+ com_rslt += bno055_set_temp_unit(TEMP_UNIT_CELSIUS);
+ if (com_rslt == SUCCESS) {
+ /* Read the raw temperature data */
+ com_rslt += bno055_read_temp_data(&v_reg_temp_s8);
+ if (com_rslt == SUCCESS) {
+ /* Convert raw temperature data to Fahrenheit*/
+ v_data_d =
+ (double)(v_reg_temp_s8/TEMP_DIV_CELSIUS);
+ *v_temp_d = v_data_d;
+ } else {
+ com_rslt += ERROR;
+ }
+ } else {
+ com_rslt += ERROR;
+ }
+ return com_rslt;
+}
+#endif
+/*!
+ * @brief This API used to read
+ * mag calibration status from register from 0x35 bit 0 and 1
+ *
+ * @param v_mag_calib_u8 : The value of mag calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_calib_stat(
+u8 *v_mag_calib_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, mag calib
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the mag calib v_stat_s8 */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_CALIB_STAT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_mag_calib_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_MAG_CALIB_STAT);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read
+ * accel calibration status from register from 0x35 bit 2 and 3
+ *
+ * @param v_accel_calib_u8 : The value of accel calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_calib_stat(
+u8 *v_accel_calib_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty*/
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel calib
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the accel calib v_stat_s8 */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_CALIB_STAT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_calib_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_CALIB_STAT);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read
+ * gyro calibration status from register from 0x35 bit 4 and 5
+ *
+ * @param v_gyro_calib_u8 : The value of gyro calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_calib_stat(
+u8 *v_gyro_calib_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro calib
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the gyro calib status */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_CALIB_STAT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_calib_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_CALIB_STAT);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read
+ * system calibration status from register from 0x35 bit 6 and 7
+ *
+ * @param v_sys_calib_u8 : The value of system calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_calib_stat(
+u8 *v_sys_calib_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty*/
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page,system calib
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the system calib */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SYS_CALIB_STAT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_sys_calib_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r, BNO055_SYS_CALIB_STAT);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read
+ * self test of accel from register from 0x36 bit 0
+ *
+ * @param v_selftest_accel_u8 : The value of self test of accel
+ *
+ * v_selftest_accel_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_accel(
+u8 *v_selftest_accel_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel self test is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the accel self test */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SELFTEST_ACCEL__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_selftest_accel_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_SELFTEST_ACCEL);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read
+ * self test of mag from register from 0x36 bit 1
+ *
+ * @param v_selftest_mag_u8 : The value of self test of mag
+ *
+ * v_selftest_mag_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_mag(
+u8 *v_selftest_mag_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, self test of mag is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the mag self test */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SELFTEST_MAG__REG, &v_data_u8r, BNO055_ONE_U8X);
+ *v_selftest_mag_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r, BNO055_SELFTEST_MAG);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read
+ * self test of gyro from register from 0x36 bit 2
+ *
+ * @param v_selftest_gyro_u8 : The value of self test of gyro
+ *
+ * v_selftest_gyro_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_gyro(
+u8 *v_selftest_gyro_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page self test of gyro is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the gyro self test */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SELFTEST_GYRO__REG, &v_data_u8r, BNO055_ONE_U8X);
+ *v_selftest_gyro_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r, BNO055_SELFTEST_GYRO);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read
+ * self test of micro controller from register from 0x36 bit 3
+ *
+ * @param v_selftest_mcu_u8 : The value of self test of micro controller
+ *
+ * v_selftest_mcu_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_mcu(
+u8 *v_selftest_mcu_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page self test of micro controller
+ is available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the self test of micro controller*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SELFTEST_MCU__REG, &v_data_u8r, BNO055_ONE_U8X);
+ *v_selftest_mcu_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r, BNO055_SELFTEST_MCU);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the v_stat_s8 of
+ * gyro anymotion interrupt from register from 0x37 bit 2
+ *
+ * @param v_gyro_any_motion_u8 : The value of gyro anymotion interrupt
+ *
+ * v_gyro_any_motion_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro anymotion interrupt can be enabled
+ * by the following APIs
+ *
+ * bno055_set_intr_mask_gyro_any_motion()
+ *
+ * bno055_set_intr_gyro_any_motion()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_stat_gyro_any_motion(
+u8 *v_gyro_any_motion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro anymotion interrupt
+ status is available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the gyro anymotion interrupt v_stat_s8*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_INTR_STAT_GYRO_ANY_MOTION__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_any_motion_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_INTR_STAT_GYRO_ANY_MOTION);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the v_stat_s8 of
+ * gyro highrate interrupt from register from 0x37 bit 3
+ *
+ * @param v_gyro_highrate_u8 : The value of gyro highrate interrupt
+ *
+ * v_gyro_highrate_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate interrupt can be configured
+ * by the following APIs
+ *
+ * bno055_set_intr_mask_gyro_highrate()
+ *
+ * bno055_set_intr_gyro_highrate()
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_stat_gyro_highrate(
+u8 *v_gyro_highrate_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the gyro highrate interrupt v_stat_s8*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_INTR_STAT_GYRO_HIGHRATE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_highrate_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_INTR_STAT_GYRO_HIGHRATE);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the v_stat_s8 of
+ * accel highg interrupt from register from 0x37 bit 5
+ *
+ * @param v_accel_high_g_u8 : The value of accel highg interrupt
+ *
+ * v_accel_high_g_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel highg interrupt can be configured
+ * by the following APIs
+ *
+ * bno055_set_intr_mask_accel_high_g()
+ *
+ * bno055_set_intr_accel_high_g()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_stat_accel_high_g(
+u8 *v_accel_high_g_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel highg is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the accel highg interrupt v_stat_s8 */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_INTR_STAT_ACCEL_HIGH_G__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_high_g_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_INTR_STAT_ACCEL_HIGH_G);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the v_stat_s8 of
+ * accel anymotion interrupt from register from 0x37 bit 6
+ *
+ * @param v_accel_any_motion_u8 : The value of accel anymotion interrupt
+ *
+ * v_accel_any_motion_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel anymotion interrupt can be configured
+ * by the following APIs
+ *
+ * bno055_set_intr_mask_accel_any_motion()
+ *
+ * bno055_set_intr_accel_any_motion()
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_stat_accel_any_motion(
+u8 *v_accel_any_motion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel anymotion is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the accel anymotion interrupt v_stat_s8 */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_INTR_STAT_ACCEL_ANY_MOTION__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_any_motion_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_INTR_STAT_ACCEL_ANY_MOTION);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the v_stat_s8 of
+ * accel nomotion/slowmotion interrupt from register from 0x37 bit 6
+ *
+ * @param v_accel_no_motion_u8 : The value of accel
+ * nomotion/slowmotion interrupt
+ *
+ * v_accel_no_motion_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel nomotion/slowmotion interrupt can be configured
+ * by the following APIs
+ *
+ * bno055_set_intr_mask_accel_nomotion()
+ *
+ * bno055_set_intr_accel_nomotion()
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_stat_accel_no_motion(
+u8 *v_accel_no_motion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel
+ nomotion/slowmotion interrupt
+ is available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the v_stat_s8 of accel
+ nomotion/slowmotion interrupt*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_INTR_STAT_ACCEL_NO_MOTION__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_no_motion_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_INTR_STAT_ACCEL_NO_MOTION);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to read status of main clock
+ * from the register 0x38 bit 0
+ *
+ * @param v_stat_main_clk_u8 : the status of main clock
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_stat_main_clk(
+u8 *v_stat_main_clk_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, status of main clk is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the status of main clk */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SYS_MAIN_CLK__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_stat_main_clk_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r, BNO055_SYS_MAIN_CLK);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to read system status
+ * code from the register 0x39 it is a byte of data
+ *
+ * @param v_sys_stat_u8 : the status of system
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_stat_code(
+u8 *v_sys_stat_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, the status of system is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the the status of system*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SYS_STAT_CODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_sys_stat_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_SYS_STAT_CODE);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to read system error
+ * code from the register 0x3A it is a byte of data
+ *
+ * @param v_sys_error_u8 : The value of system error code
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_error_code(
+u8 *v_sys_error_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, system error code is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the system error code*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SYS_ERROR_CODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_sys_error_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_SYS_ERROR_CODE);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel unit
+ * from register from 0x3B bit 0
+ *
+ * @param v_accel_unit_u8 : The value of accel unit
+ *
+ * v_accel_unit_u8 | result
+ * ------------- | ---------------
+ * 0x00 | ACCEL_UNIT_MSQ
+ * 0x01 | ACCEL_UNIT_MG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_unit(
+u8 *v_accel_unit_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel unit is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the accel unit */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_UNIT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_unit_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r, BNO055_ACCEL_UNIT);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel unit
+ * from register from 0x3B bit 0
+ *
+ * @param v_accel_unit_u8 : The value of accel unit
+ *
+ * v_accel_unit_u8 | result
+ * ------------- | ---------------
+ * 0x00 | ACCEL_UNIT_MSQ
+ * 0x01 | ACCEL_UNIT_MG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_unit(
+u8 v_accel_unit_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write the accel unit */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_UNIT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_UNIT, v_accel_unit_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_UNIT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the gyro unit
+ * from register from 0x3B bit 1
+ *
+ * @param v_gyro_unit_u8 : The value of accel unit
+ *
+ * v_gyro_unit_u8 | result
+ * ------------- | -----------
+ * 0x00 | GYRO_UNIT_DPS
+ * 0x01 | GYRO_UNIT_RPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_unit(
+u8 *v_gyro_unit_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro unit is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the gyro unit */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_UNIT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_unit_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r, BNO055_GYRO_UNIT);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro unit
+ * from register from 0x3B bit 1
+ *
+ * @param v_gyro_unit_u8 : The value of accel unit
+ *
+ * v_gyro_unit_u8 | result
+ * ------------- | -----------
+ * 0x00 | GYRO_UNIT_DPS
+ * 0x01 | GYRO_UNIT_RPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_unit(u8 v_gyro_unit_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write the gyro unit */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_UNIT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_UNIT, v_gyro_unit_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_UNIT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the Euler unit
+ * from register from 0x3B bit 2
+ *
+ * @param v_euler_unit_u8 : The value of accel unit
+ *
+ * v_euler_unit_u8 | result
+ * -------------- | -----------
+ * 0x00 | EULER_UNIT_DEG
+ * 0x01 | EULER_UNIT_RAD
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_euler_unit(
+u8 *v_euler_unit_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, Euler unit is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the Euler unit */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_EULER_UNIT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_euler_unit_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_EULER_UNIT);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the Euler unit
+ * from register from 0x3B bit 2
+ *
+ * @param v_euler_unit_u8 : The value of Euler unit
+ *
+ * v_euler_unit_u8 | result
+ * -------------- | -----------
+ * 0x00 | EULER_UNIT_DEG
+ * 0x01 | EULER_UNIT_RAD
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_euler_unit(u8 v_euler_unit_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write the Euler unit*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_EULER_UNIT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_EULER_UNIT, v_euler_unit_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_EULER_UNIT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the tilt unit
+ * from register from 0x3B bit 3
+ *
+ * @param v_tilt_unit_u8 : The value of tilt unit
+ *
+ * v_tilt_unit_u8 | result
+ * --------------- | ---------
+ * 0x00 | degrees
+ * 0x01 | radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_tilt_unit(
+u8 *v_tilt_unit_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TILT_UNIT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_tilt_unit_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r, BNO055_TILT_UNIT);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the tilt unit
+ * from register from 0x3B bit 3
+ *
+ * @param v_tilt_unit_u8 : The value of tilt unit
+ *
+ * v_tilt_unit_u8 | result
+ * --------------- | ---------
+ * 0x00 | degrees
+ * 0x01 | radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ * \return Communication results
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_tilt_unit(u8 v_tilt_unit_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TILT_UNIT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_TILT_UNIT, v_tilt_unit_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TILT_UNIT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the temperature unit
+ * from register from 0x3B bit 4
+ *
+ * @param v_temp_unit_u8 : The value of temperature unit
+ *
+ * v_temp_unit_u8 | result
+ * ----------- | --------------
+ * 0x00 | TEMP_UNIT_CELCIUS
+ * 0x01 | TEMP_UNIT_FAHRENHEIT
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_temp_unit(
+u8 *v_temp_unit_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, temperature unit is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the temperature unit */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TEMP_UNIT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_temp_unit_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_TEMP_UNIT);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the temperature unit
+ * from register from 0x3B bit 4
+ *
+ * @param v_temp_unit_u8 : The value of temperature unit
+ *
+ * v_temp_unit_u8 | result
+ * ----------- | --------------
+ * 0x00 | TEMP_UNIT_CELCIUS
+ * 0x01 | TEMP_UNIT_FAHRENHEIT
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_temp_unit(
+u8 v_temp_unit_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write the temperature unit */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TEMP_UNIT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_TEMP_UNIT,
+ v_temp_unit_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TEMP_UNIT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the current selected orientation mode
+ * from register from 0x3B bit 7
+ *
+ * @param v_data_output_format_u8 : The value of data output format
+ *
+ * v_data_output_format_u8 | result
+ * -------------------- | --------
+ * 0x00 | Windows
+ * 0x01 | Android
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_data_output_format(
+u8 *v_data_output_format_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, data output format is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the data output format */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_DATA_OUTPUT_FORMAT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_data_output_format_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_DATA_OUTPUT_FORMAT);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the current selected orientation mode
+ * from register from 0x3B bit 7
+ *
+ * @param v_data_output_format_u8 : The value of data output format
+ *
+ * v_data_output_format_u8 | result
+ * -------------------- | --------
+ * 0x00 | Windows
+ * 0x01 | Android
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_data_output_format(
+u8 v_data_output_format_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write the data output format */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_DATA_OUTPUT_FORMAT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_DATA_OUTPUT_FORMAT,
+ v_data_output_format_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_DATA_OUTPUT_FORMAT__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*! @brief This API used to read the operation mode
+ * from register from 0x3D bit 0 to 3
+ *
+ * @param v_operation_mode_u8 : The value of operation mode
+ *
+ * v_operation_mode_u8 | result | comments
+ * ----------|----------------------------|----------------------------
+ * 0x00 | OPERATION_MODE_CONFIG | Configuration mode
+ * 0x01 | OPERATION_MODE_ACCONLY | Reads accel data alone
+ * 0x02 | OPERATION_MODE_MAGONLY | Reads mag data alone
+ * 0x03 | OPERATION_MODE_GYRONLY | Reads gyro data alone
+ * 0x04 | OPERATION_MODE_ACCMAG | Reads accel and mag data
+ * 0x05 | OPERATION_MODE_ACCGYRO | Reads accel and gyro data
+ * 0x06 | OPERATION_MODE_MAGGYRO | Reads accel and mag data
+ * 0x07 | OPERATION_MODE_ANY_MOTION | Reads accel mag and gyro data
+ * 0x08 | OPERATION_MODE_IMUPLUS | Inertial measurement unit
+ * - | - | Reads accel,gyro and fusion data
+ * 0x09 | OPERATION_MODE_COMPASS | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0A | OPERATION_MODE_M4G | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0B | OPERATION_MODE_NDOF_FMC_OFF| Nine degrees of freedom with
+ * - | - | fast magnetic calibration
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ * 0x0C | OPERATION_MODE_NDOF | Nine degrees of freedom
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note In the config mode, all sensor and fusion data
+ * becomes zero and it is mainly derived
+ * to configure the various settings of the BNO
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_operation_mode(
+u8 *v_operation_mode_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, operation mode is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the value of operation mode*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_OPERATION_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_operation_mode_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_OPERATION_MODE);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*! @brief This API used to write the operation mode
+ * from register from 0x3D bit 0 to 3
+ *
+ * @param v_operation_mode_u8 : The value of operation mode
+ *
+ * v_operation_mode_u8 | result | comments
+ * ----------|----------------------------|----------------------------
+ * 0x00 | OPERATION_MODE_CONFIG | Configuration mode
+ * 0x01 | OPERATION_MODE_ACCONLY | Reads accel data alone
+ * 0x02 | OPERATION_MODE_MAGONLY | Reads mag data alone
+ * 0x03 | OPERATION_MODE_GYRONLY | Reads gyro data alone
+ * 0x04 | OPERATION_MODE_ACCMAG | Reads accel and mag data
+ * 0x05 | OPERATION_MODE_ACCGYRO | Reads accel and gyro data
+ * 0x06 | OPERATION_MODE_MAGGYRO | Reads accel and mag data
+ * 0x07 | OPERATION_MODE_ANY_MOTION | Reads accel mag and gyro data
+ * 0x08 | OPERATION_MODE_IMUPLUS | Inertial measurement unit
+ * - | - | Reads accel,gyro and fusion data
+ * 0x09 | OPERATION_MODE_COMPASS | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0A | OPERATION_MODE_M4G | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0B | OPERATION_MODE_NDOF_FMC_OFF| Nine degrees of freedom with
+ * - | - | fast magnetic calibration
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ * 0x0C | OPERATION_MODE_NDOF | Nine degrees of freedom
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note In the config mode, all sensor and fusion data
+ * becomes zero and it is mainly derived
+ * to configure the various settings of the BNO
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_operation_mode(u8 v_operation_mode_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ /* If the previous operation mode is config it is
+ directly write the operation mode */
+ if (v_prev_opmode_u8 == OPERATION_MODE_CONFIG) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_OPERATION_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_OPERATION_MODE,
+ v_operation_mode_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_OPERATION_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ /* Config mode to other
+ operation mode switching
+ required delay of 600ms*/
+ p_bno055->delay_msec(
+ BNO055_SIX_HUNDRES_U8X);
+ }
+ } else {
+ /* If the previous operation
+ mode is not config it is
+ write the config mode */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_OPERATION_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_OPERATION_MODE,
+ OPERATION_MODE_CONFIG);
+ com_rslt += bno055_write_register(
+ BNO055_OPERATION_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ /* other mode to config mode switching
+ required delay of 20ms*/
+ p_bno055->delay_msec(BNO055_TWENTY_U8X);
+ }
+ /* Write the operation mode */
+ if (v_operation_mode_u8 !=
+ OPERATION_MODE_CONFIG) {
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_OPERATION_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_OPERATION_MODE,
+ v_operation_mode_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_OPERATION_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ /* Config mode to other
+ operation mode switching
+ required delay of 600ms*/
+ p_bno055->delay_msec(
+ BNO055_SIX_HUNDRES_U8X);
+ }
+ }
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*! @brief This API used to read the power mode
+ * from register from 0x3E bit 0 to 1
+ *
+ * @param v_power_mode_u8 : The value of power mode
+ *
+ * v_power_mode_u8| result | comments
+ * ----------|---------------------|-------------------------------------
+ * 0x00 | POWER_MODE_NORMAL | In the NORMAL mode the register
+ * - | - | map and the internal peripherals
+ * - | - | of the MCU are always
+ * - | - | operative in this mode
+ * 0x01 | POWER_MODE_LOWPOWER | This is first level of power saving mode
+ * 0x02 | POWER_MODE_SUSPEND | In suspend mode the system is
+ * - | - | paused and all the sensors and
+ * - | - | the micro controller are
+ * - | - | put into sleep mode.
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note For detailed about LOWPOWER mode
+ * refer data sheet 3.4.2
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_power_mode(
+u8 *v_power_mode_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, power mode is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the value of power mode */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_POWER_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_power_mode_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_POWER_MODE);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*! @brief This API used to write the power mode
+ * from register from 0x3E bit 0 to 1
+ *
+ * @param v_power_mode_u8 : The value of power mode
+ *
+ * v_power_mode_u8 | result | comments
+ * ----------|---------------------|-------------------------------------
+ * 0x00 | POWER_MODE_NORMAL | In the NORMAL mode the register
+ * - | - | map and the internal peripherals
+ * - | - | of the MCU are always
+ * - | - | operative in this mode
+ * 0x01 | POWER_MODE_LOWPOWER | This is first level of power saving mode
+ * 0x02 | POWER_MODE_SUSPEND | In suspend mode the system is
+ * - | - | paused and all the sensors and
+ * - | - | the micro controller are
+ * - | - | put into sleep mode.
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note For detailed about LOWPOWER mode
+ * refer data sheet 3.4.2
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_power_mode(u8 v_power_mode_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write the value of power mode */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_POWER_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_POWER_MODE, v_power_mode_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_POWER_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the reset interrupt
+ * from register from 0x3F bit 6
+ * It resets all the interrupt bit and interrupt output
+ *
+ * @param v_intr_rst_u8 : The value of reset interrupt
+ *
+ * v_intr_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_rst(
+u8 *v_intr_rst_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, reset interrupt is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the value of reset interrupt*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_INTR_RST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_intr_rst_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r, BNO055_INTR_RST);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the reset interrupt
+ * from register from 0x3F bit 6
+ * It resets all the interrupt bit and interrupt output
+ *
+ * @param v_intr_rst_u8 : The value of reset interrupt
+ *
+ * v_intr_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_rst(u8 v_intr_rst_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, reset interrupt
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Write the value of reset interrupt */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_INTR_RST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_INTR_RST, v_intr_rst_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_INTR_RST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the clk source
+ * from register from 0x3F bit 7
+ *
+ * @param v_clk_src_u8 : The value of clk source
+ *
+ * v_clk_src_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_clk_src(
+u8 *v_clk_src_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, clk source is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the value of clk source */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_CLK_SRC__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_clk_src_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r, BNO055_CLK_SRC);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the clk source
+ * from register from 0x3F bit 7
+ *
+ * @param v_clk_src_u8 : The value of clk source
+ *
+ * v_clk_src_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_clk_src(u8 v_clk_src_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, clk source is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Write the value of clk source */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_CLK_SRC__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_CLK_SRC, v_clk_src_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_CLK_SRC__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the reset system
+ * from register from 0x3F bit 5
+ *
+ * @param v_sys_rst_u8 : The value of reset system
+ *
+ * v_sys_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note It resets the whole system
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_rst(
+u8 *v_sys_rst_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, reset system is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the value of reset system */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SYS_RST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_sys_rst_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_SYS_RST);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the reset system
+ * from register from 0x3F bit 5
+ *
+ * @param v_sys_rst_u8 : The value of reset system
+ *
+ * v_sys_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note It resets the whole system
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_sys_rst(u8 v_sys_rst_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, reset system is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Write the value of reset system */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SYS_RST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_SYS_RST, v_sys_rst_u8);
+ com_rslt =
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SYS_RST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the self test
+ * from register from 0x3F bit 0
+ *
+ * @param v_selftest_u8 : The value of self test
+ *
+ * v_selftest_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note It triggers the self test
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest(
+u8 *v_selftest_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, self test is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the value of self test */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SELFTEST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_selftest_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_SELFTEST);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the self test
+ * from register from 0x3F bit 0
+ *
+ * @param v_selftest_u8 : The value of self test
+ *
+ * v_selftest_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note It triggers the self test
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_selftest(u8 v_selftest_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write the value of self test */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SELFTEST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_SELFTEST,
+ v_selftest_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SELFTEST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the temperature source
+ * from register from 0x40 bit 0 and 1
+ *
+ * @param v_temp_source_u8 : The value of selected temperature source
+ *
+ * v_temp_source_u8 | result
+ * ---------------- |---------------
+ * 0x00 | ACCEL_TEMP_EN
+ * 0X01 | GYRO_TEMP_EN
+ * 0X03 | MCU_TEMP_EN
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_temp_source(
+u8 *v_temp_source_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, temperature source is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the value of temperature source */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TEMP_SOURCE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_temp_source_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_TEMP_SOURCE);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the temperature source
+ * from register from 0x40 bit 0 and 1
+ *
+ * @param v_temp_source_u8 : The value of selected temperature source
+ *
+ * v_temp_source_u8 | result
+ * ---------------- |---------------
+ * 0x00 | ACCEL_TEMP_EN
+ * 0X01 | GYRO_TEMP_EN
+ * 0X03 | MCU_TEMP_EN
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_temp_source(u8 v_temp_source_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write the value of temperature source*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TEMP_SOURCE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_TEMP_SOURCE, v_temp_source_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TEMP_SOURCE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the axis remap value
+ * from register from 0x41 bit 0 and 5
+ *
+ * @param v_remap_axis_u8 : The value of axis remapping
+ *
+ * v_remap_axis_u8 | result | comments
+ * ------------|-------------------|------------
+ * 0X21 | REMAP_X_Y | Z=Z;X=Y;Y=X
+ * 0X18 | REMAP_Y_Z | X=X;Y=Z;Z=Y
+ * 0X06 | REMAP_Z_X | Y=Y;X=Z;Z=X
+ * 0X12 | REMAP_X_Y_Z_TYPE0 | X=Z;Y=X;Z=Y
+ * 0X09 | REMAP_X_Y_Z_TYPE1 | X=Y;Y=Z;Z=X
+ * 0X24 | DEFAULT_AXIS | X=X;Y=Y;Z=Z
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note : For axis sign remap refer the following functions
+ * x-axis :
+ *
+ * bno055_set_x_remap_sign()
+ *
+ * y-axis :
+ *
+ * bno055_set_y_remap_sign()
+ *
+ * z-axis :
+ *
+ * bno055_set_z_remap_sign()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_axis_remap_value(
+u8 *v_remap_axis_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, axis remap is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the value of axis remap*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_AXIS_VALUE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_remap_axis_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_REMAP_AXIS_VALUE);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the axis remap value
+ * from register from 0x41 bit 0 and 5
+ *
+ * @param v_remap_axis_u8 : The value of axis remapping
+ *
+ * v_remap_axis_u8 | result | comments
+ * ------------|-------------------|------------
+ * 0X21 | REMAP_X_Y | Z=Z;X=Y;Y=X
+ * 0X18 | REMAP_Y_Z | X=X;Y=Z;Z=Y
+ * 0X06 | REMAP_Z_X | Y=Y;X=Z;Z=X
+ * 0X12 | REMAP_X_Y_Z_TYPE0 | X=Z;Y=X;Z=Y
+ * 0X09 | REMAP_X_Y_Z_TYPE1 | X=Y;Y=Z;Z=X
+ * 0X24 | DEFAULT_AXIS | X=X;Y=Y;Z=Z
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note : For axis sign remap refer the following functions
+ * x-axis :
+ *
+ * bno055_set_x_remap_sign()
+ *
+ * y-axis :
+ *
+ * bno055_set_y_remap_sign()
+ *
+ * z-axis :
+ *
+ * bno055_set_z_remap_sign()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_axis_remap_value(
+u8 v_remap_axis_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ /* Write the value of axis remap */
+ if (v_stat_s8 == SUCCESS) {
+ switch (v_remap_axis_u8) {
+ case REMAP_X_Y:
+ case REMAP_Y_Z:
+ case REMAP_Z_X:
+ case REMAP_X_Y_Z_TYPE0:
+ case REMAP_X_Y_Z_TYPE1:
+ case DEFAULT_AXIS:
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_AXIS_VALUE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_REMAP_AXIS_VALUE,
+ v_remap_axis_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_AXIS_VALUE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ break;
+ default:
+ /* Write the default axis remap value */
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_AXIS_VALUE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_REMAP_AXIS_VALUE,
+ DEFAULT_AXIS);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_AXIS_VALUE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ break;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the x-axis remap
+ * sign from register from 0x42 bit 2
+ *
+ * @param v_remap_x_sign_u8 : The value of x-axis remap sign
+ *
+ * v_remap_x_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_remap_x_sign(
+u8 *v_remap_x_sign_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, x-axis remap sign is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the value of x-axis remap sign */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_X_SIGN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_remap_x_sign_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_REMAP_X_SIGN);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the x-axis remap
+ * sign from register from 0x42 bit 2
+ *
+ * @param v_remap_x_sign_u8 : The value of x-axis remap sign
+ *
+ * v_remap_x_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_remap_x_sign(
+u8 v_remap_x_sign_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write the value of x-axis remap */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_X_SIGN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_REMAP_X_SIGN,
+ v_remap_x_sign_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_X_SIGN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the y-axis remap
+ * sign from register from 0x42 bit 1
+ *
+ * @param v_remap_y_sign_u8 : The value of y-axis remap sign
+ *
+ * v_remap_y_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_remap_y_sign(
+u8 *v_remap_y_sign_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, y-axis remap sign is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the value of y-axis remap sign*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_Y_SIGN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_remap_y_sign_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_REMAP_Y_SIGN);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the y-axis remap
+ * sign from register from 0x42 bit 1
+ *
+ * @param v_remap_y_sign_u8 : The value of y-axis remap sign
+ *
+ * v_remap_y_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_remap_y_sign(
+u8 v_remap_y_sign_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write the value of y-axis remap sign*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_Y_SIGN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_REMAP_Y_SIGN,
+ v_remap_y_sign_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_Y_SIGN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the z-axis remap
+ * sign from register from 0x42 bit 0
+ *
+ * @param v_remap_z_sign_u8 : The value of z-axis remap sign
+ *
+ * v_remap_z_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_remap_z_sign(
+u8 *v_remap_z_sign_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, z-axis remap sign is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read the value of z-axis remap sign*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_Z_SIGN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_remap_z_sign_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_REMAP_Z_SIGN);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the z-axis remap
+ * sign from register from 0x42 bit 0
+ *
+ * @param v_remap_z_sign_u8 : The value of z-axis remap sign
+ *
+ * v_remap_z_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_remap_z_sign(
+u8 v_remap_z_sign_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write the value of z-axis remap sign*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_Z_SIGN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_REMAP_Z_SIGN,
+ v_remap_z_sign_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_Z_SIGN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to read soft iron calibration matrix
+ * from the register 0x43 to 0x53 it is a 18 bytes of data
+ *
+ * @param sic_matrix : The value of soft iron calibration matrix
+ *
+ * sic_matrix | result
+ * --------------------|----------------------------------
+ * sic_0 | soft iron calibration matrix zero
+ * sic_1 | soft iron calibration matrix one
+ * sic_2 | soft iron calibration matrix two
+ * sic_3 | soft iron calibration matrix three
+ * sic_4 | soft iron calibration matrix four
+ * sic_5 | soft iron calibration matrix five
+ * sic_6 | soft iron calibration matrix six
+ * sic_7 | soft iron calibration matrix seven
+ * sic_8 | soft iron calibration matrix eight
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note : Each soft iron calibration matrix range from -32768 to +32767
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_sic_matrix(
+struct bno055_sic_matrix_t *sic_matrix)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the soft iron calibration matrix values
+ v_data_u8[INDEX_ZERO] - sic_0->LSB
+ v_data_u8[INDEX_ONE] - sic_0->MSB
+ v_data_u8[INDEX_TWO] - sic_1->LSB
+ v_data_u8[INDEX_THREE] - sic_1->MSB
+ v_data_u8[INDEX_FOUR] - sic_2->LSB
+ v_data_u8[INDEX_FIVE] - sic_2->MSB
+ v_data_u8[6] - sic_3->LSB
+ v_data_u8[7] - sic_3->MSB
+ v_data_u8[8] - sic_4->LSB
+ v_data_u8[9] - sic_4->MSB
+ v_data_u8[10] - sic_5->LSB
+ v_data_u8[11] - sic_5->MSB
+ v_data_u8[12] - sic_6->LSB
+ v_data_u8[13] - sic_6->MSB
+ v_data_u8[14] - sic_7->LSB
+ v_data_u8[15] - sic_7->MSB
+ v_data_u8[16] - sic_8->LSB
+ v_data_u8[17] - sic_8->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_EIGHTEEN] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, soft iron calibration matrix is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read soft iron calibration matrix value
+ it is eighteen bytes of data */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_0_LSB__REG,
+ v_data_u8, BNO055_EIGHTEEN_U8X);
+ if (com_rslt == SUCCESS) {
+ /*soft iron calibration matrix zero*/
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_SIC_MATRIX_0_LSB);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_SIC_MATRIX_0_MSB);
+ sic_matrix->sic_0 = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_ONE])) <<
+ (BNO055_SHIFT_8_POSITION))
+ | (v_data_u8[INDEX_ZERO]));
+
+ /*soft iron calibration matrix one*/
+ v_data_u8[INDEX_TWO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_TWO],
+ BNO055_SIC_MATRIX_1_LSB);
+ v_data_u8[INDEX_THREE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_THREE],
+ BNO055_SIC_MATRIX_1_MSB);
+ sic_matrix->sic_1 = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_THREE])) <<
+ (BNO055_SHIFT_8_POSITION))
+ | (v_data_u8[INDEX_TWO]));
+
+ /*soft iron calibration matrix two*/
+ v_data_u8[INDEX_FOUR] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FOUR],
+ BNO055_SIC_MATRIX_2_LSB);
+ v_data_u8[INDEX_FIVE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FIVE],
+ BNO055_SIC_MATRIX_2_MSB);
+ sic_matrix->sic_2 = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_FIVE])) <<
+ (BNO055_SHIFT_8_POSITION))
+ | (v_data_u8[INDEX_FOUR]));
+
+ /*soft iron calibration matrix three*/
+ v_data_u8[INDEX_SIX] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_SIX],
+ BNO055_SIC_MATRIX_3_LSB);
+ v_data_u8[INDEX_SEVEN] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_SEVEN],
+ BNO055_SIC_MATRIX_3_LSB);
+ sic_matrix->sic_3 = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_SEVEN])) <<
+ (BNO055_SHIFT_8_POSITION)) |
+ (v_data_u8[INDEX_SIX]));
+
+ /*soft iron calibration matrix four*/
+ v_data_u8[INDEX_EIGHT] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_EIGHT],
+ BNO055_SIC_MATRIX_4_LSB);
+ v_data_u8[INDEX_NINE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_NINE],
+ BNO055_SIC_MATRIX_4_LSB);
+ sic_matrix->sic_4 = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_NINE])) <<
+ (BNO055_SHIFT_8_POSITION)) |
+ (v_data_u8[INDEX_EIGHT]));
+
+ /*soft iron calibration matrix five*/
+ v_data_u8[INDEX_TEN] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_TEN],
+ BNO055_SIC_MATRIX_5_LSB);
+ v_data_u8[INDEX_ELEVEN] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ELEVEN],
+ BNO055_SIC_MATRIX_5_LSB);
+ sic_matrix->sic_5 = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_ELEVEN])) <<
+ (BNO055_SHIFT_8_POSITION)) |
+ (v_data_u8[INDEX_TEN]));
+
+ /*soft iron calibration matrix six*/
+ v_data_u8[INDEX_TWELVE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_TWELVE],
+ BNO055_SIC_MATRIX_6_LSB);
+ v_data_u8[INDEX_THIRTEEN] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_THIRTEEN],
+ BNO055_SIC_MATRIX_6_LSB);
+ sic_matrix->sic_6 = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_THIRTEEN])) <<
+ (BNO055_SHIFT_8_POSITION)) |
+ (v_data_u8[INDEX_TWELVE]));
+
+ /*soft iron calibration matrix seven*/
+ v_data_u8[INDEX_FOURTEEN] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FOURTEEN],
+ BNO055_SIC_MATRIX_7_LSB);
+ v_data_u8[INDEX_FIVETEEN] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FIVETEEN],
+ BNO055_SIC_MATRIX_7_LSB);
+ sic_matrix->sic_7 = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_FIVETEEN])) <<
+ (BNO055_SHIFT_8_POSITION)) |
+ (v_data_u8[INDEX_FOURTEEN]));
+
+ /*soft iron calibration matrix eight*/
+ v_data_u8[INDEX_SIXTEEN] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_SIXTEEN],
+ BNO055_SIC_MATRIX_8_LSB);
+ v_data_u8[INDEX_SEVENTEEN] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_SEVENTEEN],
+ BNO055_SIC_MATRIX_8_LSB);
+ sic_matrix->sic_8 = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_SEVENTEEN])) <<
+ (BNO055_SHIFT_8_POSITION)) |
+ (v_data_u8[INDEX_SIXTEEN]));
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to write soft iron calibration matrix
+ * from the register 0x43 to 0x53 it is a 18 bytes of data
+ *
+ * @param sic_matrix : The value of soft iron calibration matrix
+ *
+ * sic_matrix | result
+ * --------------------|----------------------------------
+ * sic_0 | soft iron calibration matrix zero
+ * sic_1 | soft iron calibration matrix one
+ * sic_2 | soft iron calibration matrix two
+ * sic_3 | soft iron calibration matrix three
+ * sic_4 | soft iron calibration matrix four
+ * sic_5 | soft iron calibration matrix five
+ * sic_6 | soft iron calibration matrix six
+ * sic_7 | soft iron calibration matrix seven
+ * sic_8 | soft iron calibration matrix eight
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note : Each soft iron calibration matrix range from -32768 to +32767
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_sic_matrix(
+struct bno055_sic_matrix_t *sic_matrix)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data1_u8r = BNO055_ZERO_U8X;
+u8 v_data2_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* write soft iron calibration
+ matrix zero value*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_0_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_0
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_0_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_0_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_0_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_0 >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_0_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_0_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ /* write soft iron calibration
+ matrix one value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_1_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_1
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_1_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_1_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_1_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_1 >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_1_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_1_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ /* write soft iron calibration
+ matrix two value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_2_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_2
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_2_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_2_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_2_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_2 >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_2_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_2_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ /* write soft iron calibration
+ matrix three value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_3_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_3
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_3_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_3_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_3_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_3 >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_3_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_3_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ /* write soft iron calibration
+ matrix four value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_4_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_4
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_4_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_4_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_4_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_4 >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_4_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_4_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ /* write soft iron calibration
+ matrix five value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_5_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_5
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_5_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_5_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_5_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_5 >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_5_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_5_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ /* write soft iron calibration
+ matrix six value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_6_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_6
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_6_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_6_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_6_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_6 >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_6_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_6_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ /* write soft iron calibration
+ matrix seven value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_7_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_7
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_7_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_7_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_7_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_7 >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_7_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_7_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ /* write soft iron calibration
+ matrix eight value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_8_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_8
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_8_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_8_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_8_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (sic_matrix->sic_8 >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_SIC_MATRIX_8_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_8_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to read accel offset and accel radius
+ * offset form register 0x55 to 0x5A and radius form 0x67 and 0x68
+ *
+ * @param accel_offset : The value of accel offset and radius
+ *
+ * bno055_accel_offset_t | result
+ * ------------------- | ----------------
+ * x | accel offset x
+ * y | accel offset y
+ * z | accel offset z
+ * r | accel offset r
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the accel offset varies based on
+ * the G-range of accel sensor.
+ *
+ * accel G range | offset range
+ * --------------- | --------------
+ * ACCEL_RANGE_2G | +/-2000
+ * ACCEL_RANGE_4G | +/-4000
+ * ACCEL_RANGE_8G | +/-8000
+ * ACCEL_RANGE_16G | +/-16000
+ *
+ * accel G range can be configured by using the
+ * bno055_set_accel_range() function
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_offset(
+struct bno055_accel_offset_t *accel_offset)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the accel offset values
+ v_data_u8[INDEX_ZERO] - offset x->LSB
+ v_data_u8[INDEX_ONE] - offset x->MSB
+ v_data_u8[INDEX_TWO] - offset y->LSB
+ v_data_u8[INDEX_THREE] - offset y->MSB
+ v_data_u8[INDEX_FOUR] - offset z->LSB
+ v_data_u8[INDEX_FIVE] - offset z->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_SIX] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel offset is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read accel offset value it is six bytes of data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_X_LSB__REG,
+ v_data_u8, BNO055_SIX_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Read accel x offset value*/
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_ACCEL_OFFSET_X_LSB);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_ACCEL_OFFSET_X_MSB);
+ accel_offset->x = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_ONE])) <<
+ (BNO055_SHIFT_8_POSITION)) |
+ (v_data_u8[INDEX_ZERO]));
+
+ /* Read accel y offset value*/
+ v_data_u8[INDEX_TWO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_TWO],
+ BNO055_ACCEL_OFFSET_Y_LSB);
+ v_data_u8[INDEX_THREE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_THREE],
+ BNO055_ACCEL_OFFSET_Y_MSB);
+ accel_offset->y = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_THREE])) <<
+ (BNO055_SHIFT_8_POSITION))
+ | (v_data_u8[INDEX_TWO]));
+
+ /* Read accel z offset value*/
+ v_data_u8[INDEX_FOUR] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FOUR],
+ BNO055_ACCEL_OFFSET_Z_LSB);
+ v_data_u8[INDEX_FIVE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FIVE],
+ BNO055_ACCEL_OFFSET_Z_MSB);
+ accel_offset->z = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_FIVE])) <<
+ (BNO055_SHIFT_8_POSITION)) |
+ (v_data_u8[INDEX_FOUR]));
+
+ /* Read accel radius value
+ it is two bytes of data*/
+ com_rslt += p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_RADIUS_LSB__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ /* Array holding the accel radius values
+ v_data_u8[INDEX_ZERO] - radius->LSB
+ v_data_u8[INDEX_ONE] - radius->MSB
+ */
+ if (com_rslt == SUCCESS) {
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(
+ v_data_u8[INDEX_ZERO],
+ BNO055_ACCEL_RADIUS_LSB);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(
+ v_data_u8[INDEX_ONE],
+ BNO055_ACCEL_RADIUS_MSB);
+ accel_offset->r = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_ONE])) <<
+ (BNO055_SHIFT_8_POSITION)) |
+ (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to write accel offset and accel radius
+ * offset form register 0x55 to 0x5A and radius form 0x67 and 0x68
+ *
+ * @param accel_offset : The value of accel offset and radius
+ *
+ * bno055_accel_offset_t | result
+ * ------------------- | ----------------
+ * x | accel offset x
+ * y | accel offset y
+ * z | accel offset z
+ * r | accel offset r
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the accel offset varies based on
+ * the G-range of accel sensor.
+ *
+ * accel G range | offset range
+ * --------------- | --------------
+ * ACCEL_RANGE_2G | +/-2000
+ * ACCEL_RANGE_4G | +/-4000
+ * ACCEL_RANGE_8G | +/-8000
+ * ACCEL_RANGE_16G | +/-16000
+ *
+ * accel G range can be configured by using the
+ * bno055_set_accel_range() function
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_accel_offset(
+struct bno055_accel_offset_t *accel_offset)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data1_u8r = BNO055_ZERO_U8X;
+u8 v_data2_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* write accel offset x value*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_X_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (accel_offset->x
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_ACCEL_OFFSET_X_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_X_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_X_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (accel_offset->x >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_ACCEL_OFFSET_X_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_X_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ /* write accel offset y value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_Y_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (accel_offset->y
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_ACCEL_OFFSET_Y_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_Y_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_Y_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (accel_offset->y >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_ACCEL_OFFSET_Y_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_Y_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+ /* write accel offset z value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_Z_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (accel_offset->z
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_ACCEL_OFFSET_Z_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_Z_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_Z_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (accel_offset->z >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_ACCEL_OFFSET_Z_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_Z_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ /*write accel radius value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_RADIUS_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (accel_offset->r
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_ACCEL_RADIUS_LSB,
+ v_data1_u8r);
+ com_rslt =
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_RADIUS_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_RADIUS_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (accel_offset->r >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_ACCEL_RADIUS_MSB,
+ v_data1_u8r);
+ com_rslt =
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_RADIUS_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+
+/*!
+ * @brief This API is used to read mag offset
+ * offset form register 0x69 to 0x6A
+ *
+ * @param mag_offset : The value of mag offset and radius
+ *
+ * bno055_mag_offset_t | result
+ * ------------------- | ----------------
+ * x | mag offset x
+ * y | mag offset y
+ * z | mag offset z
+ * r | mag radius r
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the magnetometer offset is +/-6400 in LSB
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_offset(
+struct bno055_mag_offset_t *mag_offset)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the mag offset values
+ v_data_u8[INDEX_ZERO] - offset x->LSB
+ v_data_u8[INDEX_ONE] - offset x->MSB
+ v_data_u8[INDEX_TWO] - offset y->LSB
+ v_data_u8[INDEX_THREE] - offset y->MSB
+ v_data_u8[INDEX_FOUR] - offset z->LSB
+ v_data_u8[INDEX_FIVE] - offset z->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_SIX] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, mag offset is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read mag offset value it the six bytes of data */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_X_LSB__REG,
+ v_data_u8, BNO055_SIX_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Read mag x offset value*/
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_MAG_OFFSET_X_LSB);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_MAG_OFFSET_X_MSB);
+ mag_offset->x = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_ONE])) <<
+ (BNO055_SHIFT_8_POSITION)) |
+ (v_data_u8[INDEX_ZERO]));
+
+ /* Read mag y offset value*/
+ v_data_u8[INDEX_TWO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_TWO],
+ BNO055_MAG_OFFSET_Y_LSB);
+ v_data_u8[INDEX_THREE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_THREE],
+ BNO055_MAG_OFFSET_Y_MSB);
+ mag_offset->y = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_THREE])) <<
+ (BNO055_SHIFT_8_POSITION))
+ | (v_data_u8[INDEX_TWO]));
+
+ /* Read mag z offset value*/
+ v_data_u8[INDEX_FOUR] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FOUR],
+ BNO055_MAG_OFFSET_Z_LSB);
+ v_data_u8[INDEX_FIVE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FIVE],
+ BNO055_MAG_OFFSET_Z_MSB);
+ mag_offset->z = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_FIVE])) <<
+ (BNO055_SHIFT_8_POSITION))
+ | (v_data_u8[INDEX_FOUR]));
+
+ /* Read mag radius value
+ it the two bytes of data */
+ com_rslt += p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_RADIUS_LSB__REG,
+ v_data_u8, BNO055_TWO_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Array holding the mag radius values
+ v_data_u8[INDEX_ZERO] - radius->LSB
+ v_data_u8[INDEX_ONE] - radius->MSB
+ */
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(
+ v_data_u8[INDEX_ZERO],
+ BNO055_MAG_RADIUS_LSB);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(
+ v_data_u8[INDEX_ONE],
+ BNO055_MAG_RADIUS_MSB);
+ mag_offset->r = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_ONE])) <<
+ (BNO055_SHIFT_8_POSITION)) |
+ (v_data_u8[INDEX_ZERO]));
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+
+/*!
+ * @brief This API is used to read mag offset
+ * offset form register 0x69 to 0x6A
+ *
+ * @param mag_offset : The value of mag offset and radius
+ *
+ * bno055_mag_offset_t | result
+ * ------------------- | ----------------
+ * x | mag offset x
+ * y | mag offset y
+ * z | mag offset z
+ * r | mag radius r
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the magnetometer offset is +/-6400 in LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_mag_offset(
+struct bno055_mag_offset_t *mag_offset)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data1_u8r = BNO055_ZERO_U8X;
+u8 v_data2_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* write Mag offset x value*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_X_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (mag_offset->x
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_MAG_OFFSET_X_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_X_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_X_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (mag_offset->x >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_MAG_OFFSET_X_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_X_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ /* write Mag offset y value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_Y_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (mag_offset->y &
+ BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_MAG_OFFSET_Y_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_Y_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_Y_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (mag_offset->y >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_MAG_OFFSET_Y_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_Y_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+ /* write Mag offset z value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_Z_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (mag_offset->z &
+ BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_MAG_OFFSET_Z_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_Z_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_Z_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (mag_offset->z >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_MAG_OFFSET_Z_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_Z_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ /* write Mag radius value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_RADIUS_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (mag_offset->r &
+ BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_MAG_RADIUS_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_RADIUS_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_RADIUS_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (mag_offset->r >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_MAG_RADIUS_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_RADIUS_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to read gyro offset
+ * offset form register 0x61 to 0x66
+ *
+ * @param gyro_offset : The value of gyro offset
+ *
+ * bno055_gyro_offset_t | result
+ * ------------------- | ----------------
+ * x | gyro offset x
+ * y | gyro offset y
+ * z | gyro offset z
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the gyro offset varies based on
+ * the range of gyro sensor
+ *
+ * gyro G range | offset range
+ * -------------------- | ------------
+ * GYRO_RANGE_2000DPS | +/-32000
+ * GYRO_RANGE_1000DPS | +/-16000
+ * GYRO_RANGE_500DPS | +/-8000
+ * GYRO_RANGE_250DPS | +/-4000
+ * GYRO_RANGE_125DPS | +/-2000
+ *
+ * Gyro range can be configured by using the
+ * bno055_set_gyro_range() function
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_offset(
+struct bno055_gyro_offset_t *gyro_offset)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ /* Array holding the gyro offset values
+ v_data_u8[INDEX_ZERO] - offset x->LSB
+ v_data_u8[INDEX_ONE] - offset x->MSB
+ v_data_u8[INDEX_TWO] - offset y->LSB
+ v_data_u8[INDEX_THREE] - offset y->MSB
+ v_data_u8[INDEX_FOUR] - offset z->LSB
+ v_data_u8[INDEX_FIVE] - offset z->MSB
+ */
+ u8 v_data_u8[ARRAY_SIZE_SIX] = {
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X,
+ BNO055_ZERO_U8X, BNO055_ZERO_U8X};
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro offset is
+ available in the page zero*/
+ if (p_bno055->page_id != PAGE_ZERO)
+ /* Write the page zero*/
+ v_stat_s8 = bno055_write_page_id(PAGE_ZERO);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ZERO)) {
+ /* Read gyro offset value it the six bytes of data*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_X_LSB__REG,
+ v_data_u8, BNO055_SIX_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Read gyro x offset value*/
+ v_data_u8[INDEX_ZERO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ZERO],
+ BNO055_GYRO_OFFSET_X_LSB);
+ v_data_u8[INDEX_ONE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_ONE],
+ BNO055_GYRO_OFFSET_X_MSB);
+ gyro_offset->x = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_ONE])) <<
+ (BNO055_SHIFT_8_POSITION)) |
+ (v_data_u8[INDEX_ZERO]));
+
+ /* Read gyro y offset value*/
+ v_data_u8[INDEX_TWO] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_TWO],
+ BNO055_GYRO_OFFSET_Y_LSB);
+ v_data_u8[INDEX_THREE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_THREE],
+ BNO055_GYRO_OFFSET_Y_MSB);
+ gyro_offset->y = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_THREE])) <<
+ (BNO055_SHIFT_8_POSITION)) |
+ (v_data_u8[INDEX_TWO]));
+
+ /* Read gyro z offset value*/
+ v_data_u8[INDEX_FOUR] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FOUR],
+ BNO055_GYRO_OFFSET_Z_LSB);
+ v_data_u8[INDEX_FIVE] =
+ BNO055_GET_BITSLICE(v_data_u8[INDEX_FIVE],
+ BNO055_GYRO_OFFSET_Z_MSB);
+ gyro_offset->z = (s16)((((s32)
+ (s8)(v_data_u8[INDEX_FIVE])) <<
+ (BNO055_SHIFT_8_POSITION)) |
+ (v_data_u8[INDEX_FOUR]));
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to read gyro offset
+ * offset form register 0x61 to 0x66
+ *
+ * @param gyro_offset : The value of gyro offset
+ *
+ * bno055_gyro_offset_t | result
+ * ------------------- | ----------------
+ * x | gyro offset x
+ * y | gyro offset y
+ * z | gyro offset z
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the gyro offset varies based on
+ * the range of gyro sensor
+ *
+ * gyro G range | offset range
+ * -------------------- | ------------
+ * GYRO_RANGE_2000DPS | +/-32000
+ * GYRO_RANGE_1000DPS | +/-16000
+ * GYRO_RANGE_500DPS | +/-8000
+ * GYRO_RANGE_250DPS | +/-4000
+ * GYRO_RANGE_125DPS | +/-2000
+ *
+ * Gyro range can be configured by using the
+ * bno055_set_gyro_range() function
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_gyro_offset(
+struct bno055_gyro_offset_t *gyro_offset)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data1_u8r = BNO055_ZERO_U8X;
+u8 v_data2_u8r = BNO055_ZERO_U8X;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* write gryo offset x value*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_X_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (gyro_offset->x
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_GYRO_OFFSET_X_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_X_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_X_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (gyro_offset->x >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_GYRO_OFFSET_X_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_X_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ /* write gryo offset y value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_Y_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (gyro_offset->y
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_GYRO_OFFSET_Y_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_Y_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_Y_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (gyro_offset->y >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_GYRO_OFFSET_Y_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_Y_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+ /* write gryo offset z value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_Z_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (gyro_offset->z
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_GYRO_OFFSET_Z_LSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_Z_LSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_Z_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data1_u8r = ((s8)
+ (gyro_offset->z >>
+ BNO055_SHIFT_8_POSITION)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ v_data2_u8r =
+ BNO055_SET_BITSLICE(v_data2_u8r,
+ BNO055_GYRO_OFFSET_Z_MSB,
+ v_data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_Z_MSB__REG,
+ &v_data2_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/********************************************************/
+ /************** PAGE1 Functions *********************/
+/********************************************************/
+/*!
+ * @brief This API used to read the accel range
+ * from page one register from 0x08 bit 0 and 1
+ *
+ * @param v_accel_range_u8 : The value of accel range
+ * v_accel_range_u8 | result
+ * ----------------- | --------------
+ * 0x00 | ACCEL_RANGE_2G
+ * 0x01 | ACCEL_RANGE_4G
+ * 0x02 | ACCEL_RANGE_8G
+ * 0x03 | ACCEL_RANGE_16G
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_range(
+u8 *v_accel_range_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel range is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of accel g range */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_RANGE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_range_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_RANGE);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel range
+ * from page one register from 0x08 bit 0 and 1
+ *
+ * @param v_accel_range_u8 : The value of accel range
+ *
+ * v_accel_range_u8 | result
+ * ----------------- | --------------
+ * 0x00 | ACCEL_RANGE_2G
+ * 0x01 | ACCEL_RANGE_4G
+ * 0x02 | ACCEL_RANGE_8G
+ * 0x03 | ACCEL_RANGE_16G
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_range(
+u8 v_accel_range_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ if (v_accel_range_u8 < BNO055_FIVE_U8X) {
+ /* Write the value of accel range*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_RANGE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_ACCEL_RANGE,
+ v_accel_range_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_RANGE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel bandwidth
+ * from page one register from 0x08 bit 2 to 4
+ *
+ * @param v_accel_bw_u8 : The value of accel bandwidth
+ *
+ * v_accel_bw_u8 | result
+ * ----------------- | ---------------
+ * 0x00 | ACCEL_BW_7_81HZ
+ * 0x01 | ACCEL_BW_15_63HZ
+ * 0x02 | ACCEL_BW_31_25HZ
+ * 0x03 | ACCEL_BW_62_5HZ
+ * 0x04 | ACCEL_BW_125HZ
+ * 0x05 | ACCEL_BW_250HZ
+ * 0x06 | ACCEL_BW_500HZ
+ * 0x07 | ACCEL_BW_1000HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_bw(
+u8 *v_accel_bw_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel bandwidth is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of accel bandwidth */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_BW__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_bw_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_BW);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel bandwidth
+ * from page one register from 0x08 bit 2 to 4
+ *
+ * @param v_accel_bw_u8 : The value of accel bandwidth
+ *
+ * v_accel_bw_u8 | result
+ * ----------------- | ---------------
+ * 0x00 | ACCEL_BW_7_81HZ
+ * 0x01 | ACCEL_BW_15_63HZ
+ * 0x02 | ACCEL_BW_31_25HZ
+ * 0x03 | ACCEL_BW_62_5HZ
+ * 0x04 | ACCEL_BW_125HZ
+ * 0x05 | ACCEL_BW_250HZ
+ * 0x06 | ACCEL_BW_500HZ
+ * 0x07 | ACCEL_BW_1000HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_bw(
+u8 v_accel_bw_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ if (v_accel_bw_u8 < BNO055_EIGHT_U8X) {
+ /* Write the accel */
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_BW__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r, BNO055_ACCEL_BW,
+ v_accel_bw_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_BW__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel power mode
+ * from page one register from 0x08 bit 5 to 7
+ *
+ * @param v_accel_power_mode_u8 : The value of accel power mode
+ * v_accel_power_mode_u8 | result
+ * ----------------- | -------------
+ * 0x00 | ACCEL_NORMAL
+ * 0x01 | ACCEL_SUSPEND
+ * 0x02 | ACCEL_LOWPOWER_1
+ * 0x03 | ACCEL_STANDBY
+ * 0x04 | ACCEL_LOWPOWER_2
+ * 0x05 | ACCEL_DEEPSUSPEND
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_power_mode(
+u8 *v_accel_power_mode_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel power mode is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of accel bandwidth */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_POWER_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_power_mode_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_POWER_MODE);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel power mode
+ * from page one register from 0x08 bit 5 to 7
+ *
+ * @param v_accel_power_mode_u8 : The value of accel power mode
+ * v_accel_power_mode_u8 | result
+ * ----------------- | -------------
+ * 0x00 | ACCEL_NORMAL
+ * 0x01 | ACCEL_SUSPEND
+ * 0x02 | ACCEL_LOWPOWER_1
+ * 0x03 | ACCEL_STANDBY
+ * 0x04 | ACCEL_LOWPOWER_2
+ * 0x05 | ACCEL_DEEPSUSPEND
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_power_mode(
+u8 v_accel_power_mode_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ if (v_accel_power_mode_u8 < BNO055_SIX_U8X) {
+ /* Write the value of accel bandwidth*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_POWER_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_ACCEL_POWER_MODE,
+ v_accel_power_mode_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_POWER_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the mag output data rate
+ * from page one register from 0x09 bit 0 to 2
+ *
+ * @param v_mag_data_output_rate_u8 : The value of mag output data rate
+ *
+ * v_mag_data_output_rate_u8 | result
+ * ---------------------- |----------------------
+ * 0x00 | MAG_DATA_OUTPUT_RATE_2HZ
+ * 0x01 | MAG_DATA_OUTPUT_RATE_6HZ
+ * 0x02 | MAG_DATA_OUTPUT_RATE_8HZ
+ * 0x03 | MAG_DATA_OUTPUT_RATE_10HZ
+ * 0x04 | MAG_DATA_OUTPUT_RATE_15HZ
+ * 0x05 | MAG_DATA_OUTPUT_RATE_20HZ
+ * 0x06 | MAG_DATA_OUTPUT_RATE_25HZ
+ * 0x07 | MAG_DATA_OUTPUT_RATE_30HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_data_output_rate(
+u8 *v_mag_data_output_rate_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, output data rate
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the mag output data rate*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_DATA_OUTPUT_RATE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_mag_data_output_rate_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_MAG_DATA_OUTPUT_RATE);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the mag output data rate
+ * from page one register from 0x09 bit 0 to 2
+ *
+ * @param v_mag_data_output_rate_u8 : The value of mag output data rate
+ *
+ * v_mag_data_output_rate_u8 | result
+ * ---------------------- |----------------------
+ * 0x00 | MAG_DATA_OUTPUT_RATE_2HZ
+ * 0x01 | MAG_DATA_OUTPUT_RATE_6HZ
+ * 0x02 | MAG_DATA_OUTPUT_RATE_8HZ
+ * 0x03 | MAG_DATA_OUTPUT_RATE_10HZ
+ * 0x04 | MAG_DATA_OUTPUT_RATE_15HZ
+ * 0x05 | MAG_DATA_OUTPUT_RATE_20HZ
+ * 0x06 | MAG_DATA_OUTPUT_RATE_25HZ
+ * 0x07 | MAG_DATA_OUTPUT_RATE_30HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_data_output_rate(
+u8 v_mag_data_output_rate_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+s8 v_pg_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ if (v_mag_data_output_rate_u8
+ < BNO055_EIGHT_U8X) {
+ /* Write the value of
+ mag output data rate*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_DATA_OUTPUT_RATE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_MAG_DATA_OUTPUT_RATE,
+ v_mag_data_output_rate_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_DATA_OUTPUT_RATE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+} else {
+com_rslt = ERROR;
+}
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the mag operation mode
+ * from page one register from 0x09 bit 3 to 4
+ *
+ * @param v_mag_operation_mode_u8 : The value of mag operation mode
+ *
+ * v_mag_operation_mode_u8 | result
+ * ------------------------- |--------------------------
+ * 0x00 | MAG_OPR_MODE_LOWPOWER
+ * 0x01 | MAG_OPR_MODE_REGULAR
+ * 0x02 | MAG_OPR_MODE_ENHANCED_REGULAR
+ * 0x03 | MAG_OPR_MODE_HIGH_ACCURACY
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_operation_mode(
+u8 *v_mag_operation_mode_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, mag operation mode is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of mag operation mode*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OPERATION_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_mag_operation_mode_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_MAG_OPERATION_MODE);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the mag operation mode
+ * from page one register from 0x09 bit 3 to 4
+ *
+ * @param v_mag_operation_mode_u8 : The value of mag operation mode
+ *
+ * v_mag_operation_mode_u8 | result
+ * ------------------------- |--------------------------
+ * 0x00 | MAG_OPR_MODE_LOWPOWER
+ * 0x01 | MAG_OPR_MODE_REGULAR
+ * 0x02 | MAG_OPR_MODE_ENHANCED_REGULAR
+ * 0x03 | MAG_OPR_MODE_HIGH_ACCURACY
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_operation_mode(
+u8 v_mag_operation_mode_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+s8 v_pg_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ if (v_mag_operation_mode_u8
+ < BNO055_FIVE_U8X) {
+ /* Write the value
+ of mag operation mode*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OPERATION_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_MAG_OPERATION_MODE,
+ v_mag_operation_mode_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OPERATION_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the mag power mode
+ * from page one register from 0x09 bit 4 to 6
+ *
+ * @param v_mag_power_mode_u8 : The value of mag power mode
+ *
+ * v_mag_power_mode_u8 | result
+ * --------------------|-----------------
+ * 0x00 | MAG_POWER_MODE_NORMAL
+ * 0x01 | MAG_POWER_MODE_SLEEP
+ * 0x02 | MAG_POWER_MODE_SUSPEND
+ * 0x03 | MAG_POWER_MODE_FORCE_MODE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_power_mode(
+u8 *v_mag_power_mode_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, mag power mode is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of mag power mode */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_POWER_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_mag_power_mode_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_MAG_POWER_MODE);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the mag power mode
+ * from page one register from 0x09 bit 4 to 6
+ *
+ * @param v_mag_power_mode_u8 : The value of mag power mode
+ *
+ * v_mag_power_mode_u8 | result
+ * --------------------|-----------------
+ * 0x00 | MAG_POWER_MODE_NORMAL
+ * 0x01 | MAG_POWER_MODE_SLEEP
+ * 0x02 | MAG_POWER_MODE_SUSPEND
+ * 0x03 | MAG_POWER_MODE_FORCE_MODE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_power_mode(
+u8 v_mag_power_mode_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+s8 v_pg_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode(
+ OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ if (v_mag_power_mode_u8 < BNO055_FOUR_U8X) {
+ /* Write the value of mag power mode*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_POWER_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_MAG_POWER_MODE,
+ v_mag_power_mode_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_POWER_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+} else {
+ com_rslt = ERROR;
+}
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the gyro range
+ * from page one register from 0x0A bit 0 to 3
+ *
+ * @param v_gyro_range_u8 : The value of gyro range
+ *
+ * v_gyro_range_u8 | result
+ * --------------------|-----------------
+ * 0x00 | GYRO_RANGE_2000DPS
+ * 0x01 | GYRO_RANGE_1000DPS
+ * 0x02 | GYRO_RANGE_500DPS
+ * 0x03 | GYRO_RANGE_250DPS
+ * 0x04 | GYRO_RANGE_125DPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_range(
+u8 *v_gyro_range_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro range is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro range */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_RANGE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_range_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_RANGE);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro range
+ * from page one register from 0x0A bit 0 to 3
+ *
+ * @param v_gyro_range_u8 : The value of gyro range
+ *
+ * v_gyro_range_u8 | result
+ * --------------------|-----------------
+ * 0x00 | GYRO_RANGE_2000DPS
+ * 0x01 | GYRO_RANGE_1000DPS
+ * 0x02 | GYRO_RANGE_500DPS
+ * 0x03 | GYRO_RANGE_250DPS
+ * 0x04 | GYRO_RANGE_125DPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_range(
+u8 v_gyro_range_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+s8 v_pg_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ if (v_gyro_range_u8 < BNO055_FIVE_U8X) {
+ /* Write the value of gyro range*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_RANGE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_GYRO_RANGE,
+ v_gyro_range_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_RANGE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the gyro bandwidth
+ * from page one register from 0x0A bit 3 to 5
+ *
+ * @param v_gyro_bw_u8 : The value of gyro bandwidth
+ *
+ * v_gyro_bw_u8 | result
+ * --------------------|-----------------
+ * 0x00 | GYRO_BW_523HZ
+ * 0x01 | GYRO_BW_230HZ
+ * 0x02 | GYRO_BW_116HZ
+ * 0x03 | GYRO_BW_47HZ
+ * 0x04 | GYRO_BW_23HZ
+ * 0x05 | GYRO_BW_12HZ
+ * 0x06 | GYRO_BW_64HZ
+ * 0x07 | GYRO_BW_32HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_bw(
+u8 *v_gyro_bw_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro bandwidth is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_BW__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_bw_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_BW);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro bandwidth
+ * from page one register from 0x0A bit 3 to 5
+ *
+ * @param v_gyro_bw_u8 : The value of gyro bandwidth
+ *
+ * v_gyro_bw_u8 | result
+ * --------------------|-----------------
+ * 0x00 | GYRO_BW_523HZ
+ * 0x01 | GYRO_BW_230HZ
+ * 0x02 | GYRO_BW_116HZ
+ * 0x03 | GYRO_BW_47HZ
+ * 0x04 | GYRO_BW_23HZ
+ * 0x05 | GYRO_BW_12HZ
+ * 0x06 | GYRO_BW_64HZ
+ * 0x07 | GYRO_BW_32HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_bw(
+u8 v_gyro_bw_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 gyro_opmode = BNO055_ZERO_U8X;
+u8 gyro_auto_sleep_durn = BNO055_ZERO_U8X;
+s8 v_pg_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /* Write the value of gyro bandwidth */
+ if ((v_gyro_bw_u8 == BNO055_ZERO_U8X ||
+ v_gyro_bw_u8 > BNO055_ZERO_U8X) &&
+ v_gyro_bw_u8 < BNO055_EIGHT_U8X) {
+ switch (v_gyro_bw_u8) {
+ case GYRO_BW_523HZ:
+ v_gyro_bw_u8 = GYRO_BW_523HZ;
+ break;
+ case GYRO_BW_230HZ:
+ v_gyro_bw_u8 = GYRO_BW_230HZ;
+ break;
+ case GYRO_BW_116HZ:
+ v_gyro_bw_u8 = GYRO_BW_116HZ;
+ break;
+ case GYRO_BW_47HZ:
+ v_gyro_bw_u8 = GYRO_BW_47HZ;
+ break;
+ case GYRO_BW_23HZ:
+ v_gyro_bw_u8 = GYRO_BW_23HZ;
+ break;
+ case GYRO_BW_12HZ:
+ v_gyro_bw_u8 = GYRO_BW_12HZ;
+ break;
+ case GYRO_BW_64HZ:
+ v_gyro_bw_u8 = GYRO_BW_64HZ;
+ break;
+ case GYRO_BW_32HZ:
+ v_gyro_bw_u8 = GYRO_BW_32HZ;
+ break;
+ default:
+ break;
+ }
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_BW__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_GYRO_BW,
+ v_gyro_bw_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_BW__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ com_rslt = bno055_get_gyro_power_mode
+ (&gyro_opmode);
+ if (com_rslt == SUCCESS) {
+ if (gyro_opmode ==
+ GYRO_POWER_MODE_ADVANCE_POWERSAVE) {
+ com_rslt +=
+ bno055_get_gyro_auto_sleep_durn
+ (&gyro_auto_sleep_durn);
+ if (com_rslt == SUCCESS) {
+ com_rslt +=
+ bno055_gyro_set_auto_sleep_durn
+ (gyro_auto_sleep_durn,
+ v_gyro_bw_u8);
+ }
+ }
+ }
+ } else {
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+} else {
+com_rslt = ERROR;
+}
+} else {
+com_rslt = ERROR;
+}
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the gyro power mode
+ * from page one register from 0x0B bit 0 to 2
+ *
+ * @param v_gyro_power_mode_u8 : The value of gyro power mode
+ *
+ * v_gyro_power_mode_u8 | result
+ * ----------------------|----------------------------
+ * 0x00 | GYRO_OPR_MODE_NORMAL
+ * 0x01 | GYRO_OPR_MODE_FASTPOWERUP
+ * 0x02 | GYRO_OPR_MODE_DEEPSUSPEND
+ * 0x03 | GYRO_OPR_MODE_SUSPEND
+ * 0x04 | GYRO_OPR_MODE_ADVANCE_POWERSAVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_power_mode(
+u8 *v_gyro_power_mode_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro power mode is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Write the value of gyro power mode*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_POWER_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_power_mode_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_POWER_MODE);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro power mode
+ * from page one register from 0x0B bit 0 to 2
+ *
+ * @param v_gyro_power_mode_u8 : The value of gyro power mode
+ *
+ * v_gyro_power_mode_u8 | result
+ * ----------------------|----------------------------
+ * 0x00 | GYRO_OPR_MODE_NORMAL
+ * 0x01 | GYRO_OPR_MODE_FASTPOWERUP
+ * 0x02 | GYRO_OPR_MODE_DEEPSUSPEND
+ * 0x03 | GYRO_OPR_MODE_SUSPEND
+ * 0x04 | GYRO_OPR_MODE_ADVANCE_POWERSAVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_power_mode(
+u8 v_gyro_power_mode_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 gyro_auto_sleep_durn = BNO055_ZERO_U8X;
+u8 v_gyro_bw_u8 = BNO055_ZERO_U8X;
+s8 v_pg_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /* Write the value of power mode*/
+ if ((v_gyro_power_mode_u8 == BNO055_ZERO_U8X ||
+ v_gyro_power_mode_u8 > BNO055_ZERO_U8X) &&
+ v_gyro_power_mode_u8 < BNO055_FIVE_U8X) {
+ switch (v_gyro_power_mode_u8) {
+ case GYRO_POWER_MODE_NORMAL:
+ v_gyro_power_mode_u8 =
+ GYRO_POWER_MODE_NORMAL;
+ break;
+ case GYRO_POWER_MODE_FASTPOWERUP:
+ v_gyro_power_mode_u8 =
+ GYRO_POWER_MODE_FASTPOWERUP;
+ break;
+ case GYRO_POWER_MODE_DEEPSUSPEND:
+ v_gyro_power_mode_u8 =
+ GYRO_POWER_MODE_DEEPSUSPEND;
+ break;
+ case GYRO_POWER_MODE_SUSPEND:
+ v_gyro_power_mode_u8 =
+ GYRO_POWER_MODE_SUSPEND;
+ break;
+ case GYRO_POWER_MODE_ADVANCE_POWERSAVE:
+ com_rslt = bno055_get_gyro_bw
+ (&v_gyro_bw_u8);
+ com_rslt += bno055_get_gyro_auto_sleep_durn
+ (&gyro_auto_sleep_durn);
+ if (com_rslt == SUCCESS)
+ bno055_gyro_set_auto_sleep_durn
+ (gyro_auto_sleep_durn,
+ v_gyro_bw_u8);
+ com_rslt +=
+ bno055_write_page_id(PAGE_ONE);
+ v_gyro_power_mode_u8 =
+ GYRO_POWER_MODE_ADVANCE_POWERSAVE;
+ break;
+ default:
+ break;
+ }
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_POWER_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_GYRO_POWER_MODE,
+ v_gyro_power_mode_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_POWER_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+} else {
+ com_rslt = ERROR;
+}
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel sleep mode
+ * from page one register from 0x0C bit 0
+ *
+ * @param v_sleep_tmr_u8 : The value of accel sleep mode
+ *
+ * v_sleep_tmr_u8 | result
+ * ----------------- |------------------------------------
+ * 0x00 | enable EventDrivenSampling(EDT)
+ * 0x01 | enable Equidistant sampling mode(EST)
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_sleep_tmr_mode(
+u8 *v_sleep_tmr_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel sleep mode is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* read the value of accel sleep mode */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLEEP_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_sleep_tmr_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_SLEEP_MODE);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel sleep mode
+ * from page one register from 0x0C bit 0
+ *
+ * @param v_sleep_tmr_u8 : The value of accel sleep mode
+ *
+ * v_sleep_tmr_u8 | result
+ * ----------------- |------------------------------------
+ * 0x00 | enable EventDrivenSampling(EDT)
+ * 0x01 | enable Equidistant sampling mode(EST)
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_sleep_tmr_mode(
+u8 v_sleep_tmr_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ if (v_sleep_tmr_u8 < BNO055_TWO_U8X) {
+ /*Write the value
+ of accel sleep mode*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLEEP_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_ACCEL_SLEEP_MODE,
+ v_sleep_tmr_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLEEP_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel sleep duration
+ * from page one register from 0x0C bit 1 to 4
+ *
+ * @param v_sleep_durn_u8 : The value of accel sleep duration
+ *
+ * v_sleep_durn_u8 | result
+ * ---------------- |-----------------------------
+ * 0x05 | BNO055_ACCEL_SLEEP_DURN_0_5MS
+ * 0x06 | BNO055_ACCEL_SLEEP_DURN_1MS
+ * 0x07 | BNO055_ACCEL_SLEEP_DURN_2MS
+ * 0x08 | BNO055_ACCEL_SLEEP_DURN_4MS
+ * 0x09 | BNO055_ACCEL_SLEEP_DURN_6MS
+ * 0x0A | BNO055_ACCEL_SLEEP_DURN_10MS
+ * 0x0B | BNO055_ACCEL_SLEEP_DURN_25MS
+ * 0x0C | BNO055_ACCEL_SLEEP_DURN_50MS
+ * 0x0D | BNO055_ACCEL_SLEEP_DURN_100MS
+ * 0x0E | BNO055_ACCEL_SLEEP_DURN_500MS
+ * 0x0F | BNO055_ACCEL_SLEEP_DURN_1S
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_sleep_durn(
+u8 *v_sleep_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel sleep duration
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of accel sleep duration */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLEEP_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_sleep_durn_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_SLEEP_DURN);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel sleep duration
+ * from page one register from 0x0C bit 1 to 4
+ *
+ * @param v_sleep_durn_u8 : The value of accel sleep duration
+ *
+ * v_sleep_durn_u8 | result
+ * ---------------- |-----------------------------
+ * 0x05 | BNO055_ACCEL_SLEEP_DURN_0_5MS
+ * 0x06 | BNO055_ACCEL_SLEEP_DURN_1MS
+ * 0x07 | BNO055_ACCEL_SLEEP_DURN_2MS
+ * 0x08 | BNO055_ACCEL_SLEEP_DURN_4MS
+ * 0x09 | BNO055_ACCEL_SLEEP_DURN_6MS
+ * 0x0A | BNO055_ACCEL_SLEEP_DURN_10MS
+ * 0x0B | BNO055_ACCEL_SLEEP_DURN_25MS
+ * 0x0C | BNO055_ACCEL_SLEEP_DURN_50MS
+ * 0x0D | BNO055_ACCEL_SLEEP_DURN_100MS
+ * 0x0E | BNO055_ACCEL_SLEEP_DURN_500MS
+ * 0x0F | BNO055_ACCEL_SLEEP_DURN_1S
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_sleep_durn(
+u8 v_sleep_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ if (v_sleep_durn_u8 <
+ BNO055_SIXTEEN_U8X) {
+ /* Write the accel
+ sleep duration*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLEEP_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_ACCEL_SLEEP_DURN,
+ v_sleep_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLEEP_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro sleep duration
+ * from page one register from 0x0D bit 0 to 2
+ *
+ * @param v_sleep_durn_u8 : The value of gyro sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_sleep_durn(u8 *v_sleep_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel range is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the gyro sleep duration */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_SLEEP_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_sleep_durn_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_SLEEP_DURN);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro sleep duration
+ * from page one register from 0x0D bit 0 to 2
+ *
+ * @param v_sleep_durn_u8 : The value of gyro sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_sleep_durn(u8 v_sleep_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+s8 v_pg_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ if (v_sleep_durn_u8 < BNO055_EIGHT_U8X) {
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_SLEEP_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Write the gyro
+ sleep duration */
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_GYRO_SLEEP_DURN,
+ v_sleep_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_SLEEP_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the gyro auto sleep duration
+ * from page one register from 0x0D bit 3 to 5
+ *
+ * @param v_auto_sleep_durn_u8 : The value of gyro auto sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_auto_sleep_durn(
+u8 *v_auto_sleep_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel range is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro auto sleep duration */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_AUTO_SLEEP_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_auto_sleep_durn_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_AUTO_SLEEP_DURN);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro auto sleep duration
+ * from page one register from 0x0D bit 3 to 5
+ *
+ * @param v_auto_sleep_durn_u8 : The value of gyro auto sleep duration
+ * @param bw : The value of gyro bandwidth
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_gyro_set_auto_sleep_durn(
+u8 v_auto_sleep_durn_u8, u8 bw)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_auto_sleep_durn_u8r;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /* Write the value of gyro sleep duration */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_AUTO_SLEEP_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (v_auto_sleep_durn_u8 < BNO055_EIGHT_U8X) {
+ switch (bw) {
+ case GYRO_BW_523HZ:
+ if (v_auto_sleep_durn_u8 >
+ BNO055_GYRO_4MS_AUTOSLPDUR)
+ v_auto_sleep_durn_u8r =
+ v_auto_sleep_durn_u8;
+ else
+ v_auto_sleep_durn_u8r =
+ BNO055_GYRO_4MS_AUTOSLPDUR;
+ break;
+ case GYRO_BW_230HZ:
+ if (v_auto_sleep_durn_u8 >
+ BNO055_GYRO_4MS_AUTOSLPDUR)
+ v_auto_sleep_durn_u8r =
+ v_auto_sleep_durn_u8;
+ else
+ v_auto_sleep_durn_u8r =
+ BNO055_GYRO_4MS_AUTOSLPDUR;
+ break;
+ case GYRO_BW_116HZ:
+ if (v_auto_sleep_durn_u8 >
+ BNO055_GYRO_4MS_AUTOSLPDUR)
+ v_auto_sleep_durn_u8r =
+ v_auto_sleep_durn_u8;
+ else
+ v_auto_sleep_durn_u8r =
+ BNO055_GYRO_4MS_AUTOSLPDUR;
+ break;
+ case GYRO_BW_47HZ:
+ if (v_auto_sleep_durn_u8 >
+ BNO055_GYRO_5MS_AUTOSLPDUR)
+ v_auto_sleep_durn_u8r =
+ v_auto_sleep_durn_u8;
+ else
+ v_auto_sleep_durn_u8r =
+ BNO055_GYRO_5MS_AUTOSLPDUR;
+ break;
+ case GYRO_BW_23HZ:
+ if (v_auto_sleep_durn_u8 >
+ BNO055_GYRO_10MS_AUTOSLPDUR)
+ v_auto_sleep_durn_u8r =
+ v_auto_sleep_durn_u8;
+ else
+ v_auto_sleep_durn_u8r =
+ BNO055_GYRO_10MS_AUTOSLPDUR;
+ break;
+ case GYRO_BW_12HZ:
+ if (v_auto_sleep_durn_u8 >
+ BNO055_GYRO_20MS_AUTOSLPDUR)
+ v_auto_sleep_durn_u8r =
+ v_auto_sleep_durn_u8;
+ else
+ v_auto_sleep_durn_u8r =
+ BNO055_GYRO_20MS_AUTOSLPDUR;
+ break;
+ case GYRO_BW_64HZ:
+ if (v_auto_sleep_durn_u8 >
+ BNO055_GYRO_10MS_AUTOSLPDUR)
+ v_auto_sleep_durn_u8r =
+ v_auto_sleep_durn_u8;
+ else
+ v_auto_sleep_durn_u8r =
+ BNO055_GYRO_10MS_AUTOSLPDUR;
+ break;
+ case GYRO_BW_32HZ:
+ if (v_auto_sleep_durn_u8 >
+ BNO055_GYRO_20MS_AUTOSLPDUR)
+ v_auto_sleep_durn_u8r =
+ v_auto_sleep_durn_u8;
+ else
+ v_auto_sleep_durn_u8r =
+ BNO055_GYRO_20MS_AUTOSLPDUR;
+ break;
+ default:
+ if (v_auto_sleep_durn_u8 >
+ BNO055_GYRO_4MS_AUTOSLPDUR)
+ v_auto_sleep_durn_u8r =
+ v_auto_sleep_durn_u8;
+ else
+ v_auto_sleep_durn_u8r =
+ BNO055_GYRO_4MS_AUTOSLPDUR;
+ break;
+ }
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_GYRO_AUTO_SLEEP_DURN,
+ v_auto_sleep_durn_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_AUTO_SLEEP_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+} else {
+com_rslt = ERROR;
+}
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the mag sleep mode
+ * from page one register from 0x0E bit 0
+ *
+ * @param v_sleep_mode_u8 : The value of mag sleep mode
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_sleep_mode(
+u8 *v_sleep_mode_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page,mag sleep mode is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of mag sleep mode*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_SLEEP_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_sleep_mode_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_MAG_SLEEP_MODE);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the mag sleep mode
+ * from page one register from 0x0E bit 0
+ *
+ * @param v_sleep_mode_u8 : The value of mag sleep mode
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_sleep_mode(
+u8 v_sleep_mode_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+s8 v_pg_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_SLEEP_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Write the value
+ of mag sleep mode*/
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_MAG_SLEEP_MODE,
+ v_sleep_mode_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_SLEEP_MODE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the mag sleep duration
+ * from page one register from 0x0E bit 1 to 4
+ *
+ * @param v_sleep_durn_u8 : The value of mag sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_sleep_durn(
+u8 *v_sleep_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page,mag sleep duration is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of mag sleep duration*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_SLEEP_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_sleep_durn_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_MAG_SLEEP_DURN);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the mag sleep duration
+ * from page one register from 0x0E bit 1 to 4
+ *
+ * @param v_sleep_durn_u8 : The value of mag sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_sleep_durn(
+u8 v_sleep_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+s8 v_pg_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_SLEEP_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Write the value of
+ mag sleep duration */
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_MAG_SLEEP_DURN,
+ v_sleep_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_SLEEP_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the gyro anymotion interrupt mask
+ * from page one register from 0x0F bit 2
+ *
+ * @param v_gyro_any_motion_u8 : The value of gyro anymotion interrupt mask
+ * v_gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ * bno055_set_gyro_any_motion_axis_enable()
+ *
+ * Filter setting:
+ * bno055_set_gyro_any_motion_filter()
+ *
+ * Threshold :
+ *
+ * bno055_set_gyro_any_motion_thres()
+ *
+ * Slope samples :
+ *
+ * bno055_set_gyro_any_motion_slope_samples()
+ *
+ * Awake duration :
+ *
+ * bno055_set_gyro_any_motion_awake_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_mask_gyro_any_motion(
+u8 *v_gyro_any_motion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro anymotion interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro anymotion interrupt mask*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_INTR_MASK__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_any_motion_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_ANY_MOTION_INTR_MASK);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro anymotion interrupt mask
+ * from page one register from 0x0F bit 2
+ *
+ * @param v_gyro_any_motion_u8 : The value of gyro anymotion interrupt mask
+ * v_gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ * bno055_set_gyro_any_motion_axis_enable()
+ *
+ * Filter setting:
+ * bno055_set_gyro_any_motion_filter()
+ *
+ * Threshold :
+ *
+ * bno055_set_gyro_any_motion_thres()
+ *
+ * Slope samples :
+ *
+ * bno055_set_gyro_any_motion_slope_samples()
+ *
+ * Awake duration :
+ *
+ * bno055_set_gyro_any_motion_awake_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_mask_gyro_any_motion(
+u8 v_gyro_any_motion_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel range is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Write the value of gyro anymotion interrupt mask*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_INTR_MASK__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_ANY_MOTION_INTR_MASK,
+ v_gyro_any_motion_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_INTR_MASK__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the gyro highrate interrupt mask
+ * from page one register from 0x0F bit 3
+ *
+ * @param v_gyro_highrate_u8 : The value of gyro highrate interrupt mask
+ * v_gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_gyro_highrate_axis_enable()
+ *
+ * Filter :
+ *
+ * bno055_set_gyro_highrate_filter()
+ *
+ * Threshold :
+ *
+ * bno055_get_gyro_highrate_x_thres()
+ *
+ * bno055_get_gyro_highrate_y_thres()
+ *
+ * bno055_get_gyro_highrate_z_thres()
+ *
+ * Hysteresis :
+ *
+ * bno055_set_gyro_highrate_x_hyst()
+ *
+ * bno055_set_gyro_highrate_y_hyst()
+ *
+ * bno055_set_gyro_highrate_z_hyst()
+ *
+ * Duration :
+ *
+ * bno055_set_gyro_highrate_x_durn()
+ *
+ * bno055_set_gyro_highrate_y_durn()
+ *
+ * bno055_set_gyro_highrate_z_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_mask_gyro_highrate(
+u8 *v_gyro_highrate_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro highrate interrupt mask*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_INTR_MASK__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_highrate_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_INTR_MASK);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro highrate interrupt mask
+ * from page one register from 0x0F bit 3
+ *
+ * @param v_gyro_highrate_u8 : The value of gyro highrate interrupt mask
+ * v_gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_gyro_highrate_axis_enable()
+ *
+ * Filter :
+ *
+ * bno055_set_gyro_highrate_filter()
+ *
+ * Threshold :
+ *
+ * bno055_get_gyro_highrate_x_thres()
+ *
+ * bno055_get_gyro_highrate_y_thres()
+ *
+ * bno055_get_gyro_highrate_z_thres()
+ *
+ * Hysteresis :
+ *
+ * bno055_set_gyro_highrate_x_hyst()
+ *
+ * bno055_set_gyro_highrate_y_hyst()
+ *
+ * bno055_set_gyro_highrate_z_hyst()
+ *
+ * Duration :
+ *
+ * bno055_set_gyro_highrate_x_durn()
+ *
+ * bno055_set_gyro_highrate_y_durn()
+ *
+ * bno055_set_gyro_highrate_z_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_mask_gyro_highrate(
+u8 v_gyro_highrate_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_INTR_MASK__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Write the value of gyro
+ highrate interrupt mask*/
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_INTR_MASK,
+ v_gyro_highrate_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_INTR_MASK__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel highg interrupt mask
+ * from page one register from 0x0F bit 5
+ *
+ * @param v_accel_high_g_u8 : The value of accel highg interrupt mask
+ * v_accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_accel_high_g_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_high_g_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_high_g_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_mask_accel_high_g(
+u8 *v_accel_high_g_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel highg interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of accel highg interrupt mask*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_INTR_MASK__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_high_g_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_HIGH_G_INTR_MASK);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel highg interrupt mask
+ * from page one register from 0x0F bit 5
+ *
+ * @param v_accel_high_g_u8 : The value of accel highg interrupt mask
+ * v_accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_accel_high_g_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_high_g_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_high_g_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_mask_accel_high_g(
+u8 v_accel_high_g_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel highg interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_INTR_MASK__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Write the value of accel
+ highg interrupt mask*/
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_HIGH_G_INTR_MASK,
+ v_accel_high_g_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_INTR_MASK__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel anymotion interrupt mask
+ * from page one register from 0x0F bit 6
+ *
+ * @param v_accel_any_motion_u8 : The value of accel anymotion interrupt mask
+ * v_accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_accel_high_g_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_high_g_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_high_g_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_mask_accel_any_motion(
+u8 *v_accel_any_motion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel anymotion interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* The value of accel anymotion interrupt mask*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_INTR_MASK__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_any_motion_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_ANY_MOTION_INTR_MASK);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel anymotion interrupt mask
+ * from page one register from 0x0F bit 6
+ *
+ * @param v_accel_any_motion_u8 : The value of accel anymotion interrupt mask
+ * v_accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Duration:
+ *
+ * bno055_set_accel_any_motion_durn()
+ *
+ * Threshold:
+ *
+ * bno055_set_accel_any_motion_thres()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_mask_accel_any_motion(
+u8 v_accel_any_motion_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel anymotion interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Write the value of accel anymotion interrupt mask*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_INTR_MASK__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_ANY_MOTION_INTR_MASK,
+ v_accel_any_motion_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_INTR_MASK__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel nomotion interrupt mask
+ * from page one register from 0x0F bit 7
+ *
+ * @param v_accel_nomotion_u8 : The value of accel nomotion interrupt mask
+ * v_accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ *
+ * @note While enabling the accel anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Duration:
+ *
+ * bno055_set_accel_any_motion_durn()
+ *
+ * Threshold:
+ *
+ * bno055_set_accel_any_motion_thres())
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_mask_accel_no_motion(
+u8 *v_accel_nomotion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel nomotion interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of accel nomotion interrupt mask*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_NO_MOTION_INTR_MASK__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_nomotion_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_NO_MOTION_INTR_MASK);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel nomotion interrupt mask
+ * from page one register from 0x0F bit 7
+ *
+ * @param v_accel_nomotion_u8 : The value of accel nomotion interrupt mask
+ * v_accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel nomotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_slow_no_motion_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_slow_no_motion_durn()
+ *
+ * Slow/no motion enable:
+ *
+ * bno055_set_accel_slow_no_motion_enable()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_mask_accel_no_motion(
+u8 v_accel_nomotion_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel
+ nomotion interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_NO_MOTION_INTR_MASK__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Write the value of accel
+ nomotion interrupt mask*/
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_NO_MOTION_INTR_MASK,
+ v_accel_nomotion_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_NO_MOTION_INTR_MASK__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the gyro anymotion interrupt
+ * from page one register from 0x10 bit 2
+ *
+ * @param v_gyro_any_motion_u8 : The value of gyro anymotion interrupt
+ * v_gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ * bno055_set_gyro_any_motion_axis_enable()
+ *
+ * Filter setting:
+ * bno055_set_gyro_any_motion_filter()
+ *
+ * Threshold :
+ *
+ * bno055_set_gyro_any_motion_thres()
+ *
+ * Slope samples :
+ *
+ * bno055_set_gyro_any_motion_slope_samples()
+ *
+ * Awake duration :
+ *
+ * bno055_set_gyro_any_motion_awake_durn()
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_gyro_any_motion(
+u8 *v_gyro_any_motion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro anymotion interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro anymotion interrupt */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_INTR__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_any_motion_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_ANY_MOTION_INTR);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro anymotion interrupt
+ * from page one register from 0x10 bit 2
+ *
+ * @param v_gyro_any_motion_u8 : The value of gyro anymotion interrupt
+ * v_gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ * bno055_set_gyro_any_motion_axis_enable()
+ *
+ * Filter setting:
+ * bno055_set_gyro_any_motion_filter()
+ *
+ * Threshold :
+ *
+ * bno055_set_gyro_any_motion_thres()
+ *
+ * Slope samples :
+ *
+ * bno055_set_gyro_any_motion_slope_samples()
+ *
+ * Awake duration :
+ *
+ * bno055_set_gyro_any_motion_awake_durn()
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_gyro_any_motion(
+u8 v_gyro_any_motion_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro anymotion interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Write the value of gyro anymotion interrupt */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_INTR__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_ANY_MOTION_INTR,
+ v_gyro_any_motion_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_INTR__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the gyro highrate interrupt
+ * from page one register from 0x10 bit 3
+ *
+ * @param v_gyro_highrate_u8 : The value of gyro highrate interrupt
+ * v_gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_gyro_highrate_axis_enable()
+ *
+ * Filter :
+ *
+ * bno055_set_gyro_highrate_filter()
+ *
+ * Threshold :
+ *
+ * bno055_get_gyro_highrate_x_thres()
+ *
+ * bno055_get_gyro_highrate_y_thres()
+ *
+ * bno055_get_gyro_highrate_z_thres()
+ *
+ * Hysteresis :
+ *
+ * bno055_set_gyro_highrate_x_hyst()
+ *
+ * bno055_set_gyro_highrate_y_hyst()
+ *
+ * bno055_set_gyro_highrate_z_hyst()
+ *
+ * Duration :
+ *
+ * bno055_set_gyro_highrate_x_durn()
+ *
+ * bno055_set_gyro_highrate_y_durn()
+ *
+ * bno055_set_gyro_highrate_z_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_gyro_highrate(
+u8 *v_gyro_highrate_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro highrate interrupt */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_INTR__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_highrate_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_INTR);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro highrate interrupt
+ * from page one register from 0x10 bit 3
+ *
+ * @param v_gyro_highrate_u8 : The value of gyro highrate interrupt
+ * v_gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_gyro_highrate_axis_enable()
+ *
+ * Filter :
+ *
+ * bno055_set_gyro_highrate_filter()
+ *
+ * Threshold :
+ *
+ * bno055_get_gyro_highrate_x_thres()
+ *
+ * bno055_get_gyro_highrate_y_thres()
+ *
+ * bno055_get_gyro_highrate_z_thres()
+ *
+ * Hysteresis :
+ *
+ * bno055_set_gyro_highrate_x_hyst()
+ *
+ * bno055_set_gyro_highrate_y_hyst()
+ *
+ * bno055_set_gyro_highrate_z_hyst()
+ *
+ * Duration :
+ *
+ * bno055_set_gyro_highrate_x_durn()
+ *
+ * bno055_set_gyro_highrate_y_durn()
+ *
+ * bno055_set_gyro_highrate_z_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_gyro_highrate(
+u8 v_gyro_highrate_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_INTR__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Write the value of gyro highrate interrupt */
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_INTR, v_gyro_highrate_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_INTR__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel highg interrupt
+ * from page one register from 0x10 bit 5
+ *
+ * @param v_accel_high_g_u8 : The value of accel highg interrupt
+ * v_accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_accel_high_g_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_high_g_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_high_g_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_accel_high_g(
+u8 *v_accel_high_g_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel highg interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of accel highg interrupt*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_INTR__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_high_g_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_HIGH_G_INTR);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel highg interrupt
+ * from page one register from 0x10 bit 5
+ *
+ * @param v_accel_high_g_u8 : The value of accel highg interrupt
+ * v_accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_accel_high_g_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_high_g_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_high_g_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_accel_high_g(
+u8 v_accel_high_g_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel highg interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_INTR__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Write the value of accel highg interrupt*/
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_HIGH_G_INTR,
+ v_accel_high_g_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_INTR__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel anymotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param v_accel_any_motion_u8 : The value of accel anymotion interrupt
+ * v_accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Duration:
+ *
+ * bno055_set_accel_any_motion_durn()
+ *
+ * Threshold:
+ *
+ * bno055_set_accel_any_motion_thres()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_accel_any_motion(
+u8 *v_accel_any_motion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel anymotion interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of accel anymotion interrupt */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_INTR__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_any_motion_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_ANY_MOTION_INTR);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel anymotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param v_accel_any_motion_u8 : The value of accel anymotion interrupt
+ * v_accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Duration:
+ *
+ * bno055_set_accel_any_motion_durn()
+ *
+ * Threshold:
+ *
+ * bno055_set_accel_any_motion_thres()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_accel_any_motion(
+u8 v_accel_any_motion_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel range is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Write the value of accel anymotion interrupt */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_INTR__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_ANY_MOTION_INTR,
+ v_accel_any_motion_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_INTR__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel nomotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param v_accel_nomotion_u8 : The value of accel nomotion interrupt
+ * v_accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel nomotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_slow_no_motion_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_slow_no_motion_durn()
+ *
+ * Slow/no motion enable:
+ *
+ * bno055_set_accel_slow_no_motion_enable()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_accel_no_motion(
+u8 *v_accel_nomotion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel nomotion interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of accel nomotion interrupt*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_NO_MOTION_INTR__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_nomotion_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_NO_MOTION_INTR);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel nomotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param v_accel_nomotion_u8 : The value of accel nomotion interrupt
+ * v_accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel nomotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_slow_no_motion_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_slow_no_motion_durn()
+ *
+ * Slow/no motion enable:
+ *
+ * bno055_set_accel_slow_no_motion_enable()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_accel_no_motion(
+u8 v_accel_nomotion_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page,
+ accel nomotion interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_NO_MOTION_INTR__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Write the value of
+ accel nomotion interrupt */
+ v_data_u8r = BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_NO_MOTION_INTR,
+ v_accel_nomotion_u8);
+ com_rslt += p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_NO_MOTION_INTR__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel any motion threshold
+ * from page one register from 0x11 bit 0 to 7
+ *
+ * @param v_accel_any_motion_thres_u8 : The value of any motion threshold
+ * v_accel_any_motion_thres_u8 | result
+ * ------------------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel anymotion threshold dependent on the
+ * range values
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 3.19mg | 1LSB
+ * 4g | 7.81mg | 1LSB
+ * 8g | 15.63mg | 1LSB
+ * 16g | 31.25mg | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_any_motion_thres(
+u8 *v_accel_any_motion_thres_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel any motion threshold is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of accel any motion threshold */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_any_motion_thres_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_ANY_MOTION_THRES);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel any motion threshold
+ * from page one register from 0x11 bit 0 to 7
+ *
+ * @param v_accel_any_motion_thres_u8 : The value of any motion threshold
+ * v_accel_any_motion_thres_u8 | result
+ * ------------------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel anymotion threshold dependent on the
+ * range values
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 3.19mg | 1LSB
+ * 4g | 7.81mg | 1LSB
+ * 8g | 15.63mg | 1LSB
+ * 16g | 31.25mg | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_any_motion_thres(
+u8 v_accel_any_motion_thres_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+s8 v_pg_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Write the value of
+ accel any motion threshold*/
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_ANY_MOTION_THRES,
+ v_accel_any_motion_thres_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel anymotion duration
+ * from page one register from 0x12 bit 0 to 1
+ *
+ * @param v_accel_any_motion_durn_u8 : The value of accel anymotion duration
+ * v_accel_any_motion_durn_u8 | result
+ * ------------------------- | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_any_motion_durn(
+u8 *v_accel_any_motion_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel anymotion duration is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of accel anymotion duration */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_DURN_SET__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_any_motion_durn_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_ANY_MOTION_DURN_SET);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel anymotion duration
+ * from page one register from 0x12 bit 0 to 1
+ *
+ * @param v_accel_any_motion_durn_u8 : The value of accel anymotion duration
+ *
+ * v_accel_any_motion_durn_u8 | result
+ * ------------------------- | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_any_motion_durn(
+u8 v_accel_any_motion_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+s8 v_pg_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_DURN_SET__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Write the value of
+ accel anymotion duration*/
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_ANY_MOTION_DURN_SET,
+ v_accel_any_motion_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_DURN_SET__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel anymotion enable
+ * from page one register from 0x12 bit 2 to 4
+ *
+ * @param v_data_u8 : The value of accel anymotion enable
+ * v_data_u8 | result
+ * ------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of accel anymotion axis selection
+ * v_channel_u8 | value
+ * -------------------------- | ----------
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_X_AXIS | 0
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS | 1
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_any_motion_no_motion_axis_enable(
+u8 v_channel_u8, u8 *v_data_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel anymotion enable is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ switch (v_channel_u8) {
+ case BNO055_ACCEL_ANY_MOTION_NO_MOTION_X_AXIS:
+ /* Read the value of accel anymotion x enable*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_X_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_data_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_ANY_MOTION_X_AXIS);
+ break;
+ case BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS:
+ /* Read the value of accel anymotion y enable*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_Y_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_data_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_ANY_MOTION_Y_AXIS);
+ break;
+ case BNO055_ACCEL_ANY_MOTION_NO_MOTION_Z_AXIS:
+ /* Read the value of accel anymotion z enable*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_Z_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_data_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_ANY_MOTION_Z_AXIS);
+ break;
+ default:
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ break;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel anymotion enable
+ * from page one register from 0x12 bit 2 to 4
+ *
+ * @param v_data_u8 : The value of accel anymotion enable
+ * v_data_u8 | result
+ * ------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of accel anymotion axis selection
+ * v_channel_u8 | value
+ * -------------------------- | ----------
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_X_AXIS | 0
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS | 1
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_any_motion_no_motion_axis_enable(
+u8 v_channel_u8, u8 v_data_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+s8 v_pg_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ switch (v_channel_u8) {
+ case BNO055_ACCEL_ANY_MOTION_NO_MOTION_X_AXIS:
+ /* Write the value of
+ accel anymotion x enable*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_X_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_ACCEL_ANY_MOTION_X_AXIS,
+ v_data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_X_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ break;
+ case BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS:
+ /* Write the value of
+ accel anymotion y enable*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_Y_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_ACCEL_ANY_MOTION_Y_AXIS,
+ v_data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_Y_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ break;
+ case BNO055_ACCEL_ANY_MOTION_NO_MOTION_Z_AXIS:
+ /* Write the value of
+ accel anymotion z enable*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_Z_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_ACCEL_ANY_MOTION_Z_AXIS,
+ v_data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_Z_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ break;
+ default:
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ break;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel highg enable
+ * from page one register from 0x12 bit 5 to 7
+ *
+ * @param v_data_u8 : The value of accel highg enable
+ * v_data_u8| result
+ * ------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of accel highg axis selection
+ * v_channel_u8 | value
+ * -------------------------- | ----------
+ * BNO055_ACCEL_HIGH_G_X_AXIS | 0
+ * BNO055_ACCEL_HIGH_G_Y_AXIS | 1
+ * BNO055_ACCEL_HIGH_G_Z_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_high_g_axis_enable(
+u8 v_channel_u8, u8 *v_data_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel highg enable is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ switch (v_channel_u8) {
+ case BNO055_ACCEL_HIGH_G_X_AXIS:
+ /* Read the value of accel x highg enable*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_X_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_data_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_HIGH_G_X_AXIS);
+ break;
+ case BNO055_ACCEL_HIGH_G_Y_AXIS:
+ /* Read the value of accel y highg enable*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_Y_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_data_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_HIGH_G_Y_AXIS);
+ break;
+ case BNO055_ACCEL_HIGH_G_Z_AXIS:
+ /* Read the value of accel z highg enable*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_Z_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_data_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_HIGH_G_Z_AXIS);
+ break;
+ default:
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ break;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel highg enable
+ * from page one register from 0x12 bit 5 to 7
+ *
+ * @param v_data_u8 : The value of accel highg enable
+ * v_data_u8| result
+ * ------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of accel highg axis selection
+ * v_channel_u8 | value
+ * -------------------------- | ----------
+ * BNO055_ACCEL_HIGH_G_X_AXIS | 0
+ * BNO055_ACCEL_HIGH_G_Y_AXIS | 1
+ * BNO055_ACCEL_HIGH_G_Z_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_high_g_axis_enable(
+u8 v_channel_u8, u8 v_data_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+s8 v_pg_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ switch (v_channel_u8) {
+ case BNO055_ACCEL_HIGH_G_X_AXIS:
+ /* Write the value of
+ accel x highg enable*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_X_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_HIGH_G_X_AXIS, v_data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_X_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ break;
+ case BNO055_ACCEL_HIGH_G_Y_AXIS:
+ /* Write the value of
+ accel y highg enable*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_Y_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_HIGH_G_Y_AXIS,
+ v_data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_Y_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ break;
+ case BNO055_ACCEL_HIGH_G_Z_AXIS:
+ /* Write the value of
+ accel z highg enable*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_Z_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_HIGH_G_Z_AXIS, v_data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_Z_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ break;
+ default:
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ break;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel highg duration
+ * from page one register from 0x13 bit 0 to 7
+ *
+ * @param v_accel_high_g_durn_u8 : The value of accel highg duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The high-g interrupt trigger delay according
+ * to [highg duration + 1] * 2 ms
+ *
+ * in a range from 2 ms to 512 ms
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_high_g_durn(
+u8 *v_accel_high_g_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel highg duration is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of accel highg duration*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_high_g_durn_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_HIGH_G_DURN);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel highg duration
+ * from page one register from 0x13 bit 0 to 7
+ *
+ * @param v_accel_high_g_durn_u8 : The value of accel highg duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The high-g interrupt trigger delay according
+ * to [highg duration + 1] * 2 ms
+ *
+ * in a range from 2 ms to 512 ms
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_high_g_durn(
+u8 v_accel_high_g_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Write the value of
+ accel highg duration*/
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_HIGH_G_DURN,
+ v_accel_high_g_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel highg threshold
+ * from page one register from 0x14 bit 0 to 7
+ *
+ * @param v_accel_high_g_thres_u8 : The value of accel highg threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel highg interrupt threshold dependent
+ * for accel g range
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 7.81mg | 1LSB
+ * 4g | 15.63mg | 1LSB
+ * 8g | 31.25mg | 1LSB
+ * 16g | 62.5mg | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_high_g_thres(
+u8 *v_accel_high_g_thres_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, highg threshold is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of highg threshold */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_high_g_thres_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_HIGH_G_THRES);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel highg threshold
+ * from page one register from 0x14 bit 0 to 7
+ *
+ * @param v_accel_high_g_thres_u8 : The value of accel highg threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel highg interrupt threshold dependent
+ * for accel g range
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 7.81mg | 1LSB
+ * 4g | 15.63mg | 1LSB
+ * 8g | 31.25mg | 1LSB
+ * 16g | 62.5mg | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_high_g_thres(
+u8 v_accel_high_g_thres_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Write the value of
+ accel highg threshold */
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_HIGH_G_THRES,
+ v_accel_high_g_thres_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel slownomotion threshold
+ * from page one register from 0x15 bit 0 to 7
+ *
+ * @param v_accel_slow_no_motion_thres_u8 :
+ * The value of accel slownomotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel slow no motion interrupt threshold dependent
+ * for accel g range
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 3.19mg | 1LSB
+ * 4g | 7.81mg | 1LSB
+ * 8g | 15.63mg | 1LSB
+ * 16g | 31.25mg | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_slow_no_motion_thres(
+u8 *v_accel_slow_no_motion_thres_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel slownomotion threshold is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of slownomotion threshold */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLOW_NO_MOTION_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_slow_no_motion_thres_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_SLOW_NO_MOTION_THRES);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel slownomotion threshold
+ * from page one register from 0x15 bit 0 to 7
+ *
+ * @param v_accel_slow_no_motion_thres_u8 :
+ * The value of accel slownomotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel slow no motion interrupt threshold dependent
+ * for accel g range
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 3.19mg | 1LSB
+ * 4g | 7.81mg | 1LSB
+ * 8g | 15.63mg | 1LSB
+ * 16g | 31.25mg | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_slow_no_motion_thres(
+u8 v_accel_slow_no_motion_thres_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /* Write the value of
+ slownomotion threshold */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLOW_NO_MOTION_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_SLOW_NO_MOTION_THRES,
+ v_accel_slow_no_motion_thres_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLOW_NO_MOTION_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read accel slownomotion enable
+ * from page one register from 0x16 bit 0
+ *
+ * @param v_accel_slow_no_motion_en_u8 : The value of accel slownomotion enable
+ * v_accel_slow_no_motion_en_u8 | result
+ * ------------------------ | --------
+ * 0x01 | Slow motion
+ * 0x00 | No motion
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_slow_no_motion_enable(
+u8 *v_accel_slow_no_motion_en_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel slownomotion enable is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of accel slownomotion enable */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLOW_NO_MOTION_ENABLE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_slow_no_motion_en_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_SLOW_NO_MOTION_ENABLE);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write accel slownomotion enable
+ * from page one register from 0x16 bit 0
+ *
+ * @param v_accel_slow_no_motion_en_u8 : The value of accel slownomotion enable
+ * v_accel_slow_no_motion_en_u8 | result
+ * ------------------------ | --------
+ * 0x01 | Slow motion
+ * 0x00 | No motion
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_slow_no_motion_enable(
+u8 v_accel_slow_no_motion_en_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLOW_NO_MOTION_ENABLE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /* Read the value of
+ accel slownomotion enable */
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_SLOW_NO_MOTION_ENABLE,
+ v_accel_slow_no_motion_en_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLOW_NO_MOTION_ENABLE__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read accel slownomotion duration
+ * from page one register from 0x16 bit 1 to 6
+ *
+ * @param v_accel_slow_no_motion_durn_u8 :
+ * The value of accel slownomotion duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_slow_no_motion_durn(
+u8 *v_accel_slow_no_motion_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, accel slownomotion duration is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /*read value of accel slownomotion duration*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLOW_NO_MOTION_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_accel_slow_no_motion_durn_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_SLOW_NO_MOTION_DURN);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write accel slownomotion duration
+ * from page one register from 0x16 bit 1 to 6
+ *
+ * @param v_accel_slow_no_motion_durn_u8 :
+ * The value of accel slownomotion duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_slow_no_motion_durn(
+u8 v_accel_slow_no_motion_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLOW_NO_MOTION_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ /*Write the value of accel
+ slownomotion duration*/
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_ACCEL_SLOW_NO_MOTION_DURN,
+ v_accel_slow_no_motion_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLOW_NO_MOTION_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the gyro anymotion enable
+ * from page one register from 0x17 bit 0 to 2
+ *
+ * @param v_data_u8 : The value of gyro anymotion enable
+ * v_data_u8 | result
+ * ----------------- |-------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of gyro anymotion axis selection
+ * v_channel_u8 | value
+ * --------------------------- | ----------
+ * BNO055_GYRO_ANY_MOTIONX_AXIS | 0
+ * BNO055_GYRO_ANY_MOTIONY_AXIS | 1
+ * BNO055_GYRO_ANY_MOTIONZ_AXIS | 2
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_axis_enable(
+u8 v_channel_u8, u8 *v_data_u8)
+{
+/* Variable used to return value of
+communication routine*/
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro anymotion axis is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ switch (v_channel_u8) {
+ case BNO055_GYRO_ANY_MOTION_X_AXIS:
+ /* Read the gyro anymotion x enable*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_X_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_data_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_ANY_MOTION_X_AXIS);
+ break;
+ case BNO055_GYRO_ANY_MOTION_Y_AXIS:
+ /* Read the gyro anymotion y enable*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_Y_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_data_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_ANY_MOTION_Y_AXIS);
+ break;
+ case BNO055_GYRO_ANY_MOTION_Z_AXIS:
+ /* Read the gyro anymotion z enable*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_Z_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_data_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_ANY_MOTION_Z_AXIS);
+ break;
+ default:
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ break;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro anymotion enable
+ * from page one register from 0x17 bit 0 to 2
+ *
+ * @param v_data_u8 : The value of gyro anymotion enable
+ * v_data_u8 | result
+ * ----------------- |-------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of gyro anymotion axis selection
+ * v_channel_u8 | value
+ * --------------------------- | ----------
+ * BNO055_GYRO_ANY_MOTIONX_AXIS | 0
+ * BNO055_GYRO_ANY_MOTIONY_AXIS | 1
+ * BNO055_GYRO_ANY_MOTIONZ_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_axis_enable(
+u8 v_channel_u8, u8 v_data_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ switch (v_channel_u8) {
+ case BNO055_GYRO_ANY_MOTION_X_AXIS:
+ /* Write the gyro
+ anymotion x enable*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_X_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_GYRO_ANY_MOTION_X_AXIS,
+ v_data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_X_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ break;
+ case BNO055_GYRO_ANY_MOTION_Y_AXIS:
+ /* Write the gyro
+ anymotion y enable*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_Y_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_GYRO_ANY_MOTION_Y_AXIS, v_data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_Y_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ break;
+ case BNO055_GYRO_ANY_MOTION_Z_AXIS:
+ /* Write the gyro
+ anymotion z enable*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_Z_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_GYRO_ANY_MOTION_Z_AXIS,
+ v_data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_Z_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ break;
+ default:
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ break;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+} else {
+com_rslt = ERROR;
+}
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the gyro highrate enable
+ * from page one register from 0x17 bit 3 to 5
+ *
+ * @param v_data_u8 : The value of gyro highrate enable
+ * v_data_u8 | result
+ * ---------------- |-------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of gyro highrate axis selection
+ * v_channel_u8 | value
+ * ------------------------ | ----------
+ * BNO055_GYRO_HIGHRATE_X_AXIS | 0
+ * BNO055_GYRO_HIGHRATE_Y_AXIS | 1
+ * BNO055_GYRO_HIGHRATE_Z_AXIS | 2
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_axis_enable(
+u8 v_channel_u8, u8 *v_data_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate enable is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ switch (v_channel_u8) {
+ case BNO055_GYRO_HIGHRATE_X_AXIS:
+ /* Read the gyro highrate x enable */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_X_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_data_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_X_AXIS);
+ break;
+ case BNO055_GYRO_HIGHRATE_Y_AXIS:
+ /* Read the gyro highrate y enable */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Y_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_data_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_Y_AXIS);
+ break;
+ case BNO055_GYRO_HIGHRATE_Z_AXIS:
+ /* Read the gyro highrate z enable */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Z_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_data_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_Z_AXIS);
+ break;
+ default:
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ break;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro highrate enable
+ * from page one register from 0x17 bit 3 to 5
+ *
+ * @param v_data_u8 : The value of gyro highrate enable
+ * v_data_u8 | result
+ * ---------------- |-------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of gyro highrate axis selection
+ * v_channel_u8 | value
+ * ------------------------ | ----------
+ * BNO055_GYRO_HIGHRATE_X_AXIS | 0
+ * BNO055_GYRO_HIGHRATE_Y_AXIS | 1
+ * BNO055_GYRO_HIGHRATE_Z_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_axis_enable(
+u8 v_channel_u8, u8 v_data_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ switch (v_channel_u8) {
+ case BNO055_GYRO_HIGHRATE_X_AXIS:
+ /* Write the value of
+ gyro highrate x enable*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_X_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_GYRO_HIGHRATE_X_AXIS, v_data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_X_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ break;
+ case BNO055_GYRO_HIGHRATE_Y_AXIS:
+ /* Write the value of
+ gyro highrate y enable*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Y_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(
+ v_data_u8r,
+ BNO055_GYRO_HIGHRATE_Y_AXIS, v_data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Y_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ break;
+ case BNO055_GYRO_HIGHRATE_Z_AXIS:
+ /* Write the value of
+ gyro highrate z enable*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Z_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r = BNO055_SET_BITSLICE
+ (v_data_u8r,
+ BNO055_GYRO_HIGHRATE_Z_AXIS, v_data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Z_AXIS__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ break;
+ default:
+ com_rslt = E_BNO055_OUT_OF_RANGE;
+ break;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read gyro anymotion filter
+ * from page one register from 0x17 bit 6
+ *
+ * @param v_gyro_any_motion_filter_u8 : The value of gyro anymotion filter
+ * v_gyro_any_motion_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | FILTERED
+ * 0x01 | UNFILTERED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_filter(
+u8 *v_gyro_any_motion_filter_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro anymotion filter is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro anymotion filter*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_FILTER__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_any_motion_filter_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_ANY_MOTION_FILTER);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write gyro anymotion filter
+ * from page one register from 0x17 bit 6
+ *
+ * @param v_gyro_any_motion_filter_u8 : The value of gyro anymotion filter
+ * v_gyro_any_motion_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | FILTERED
+ * 0x01 | UNFILTERED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_filter(
+u8 v_gyro_any_motion_filter_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /* Write the value of
+ gyro anymotion filter*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_FILTER__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_ANY_MOTION_FILTER,
+ v_gyro_any_motion_filter_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_FILTER__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read gyro highrate filter
+ * from page one register from 0x17 bit 7
+ *
+ * @param v_gyro_highrate_filter_u8 : The value of gyro highrate filter
+ * v_gyro_highrate_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | FILTERED
+ * 0x01 | UNFILTERED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_filter(
+u8 *v_gyro_highrate_filter_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate filter is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro highrate filter */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_FILTER__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_highrate_filter_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_FILTER);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write gyro highrate filter
+ * from page one register from 0x17 bit 7
+ *
+ * @param v_gyro_highrate_filter_u8 : The value of gyro highrate filter
+ * v_gyro_highrate_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | FILTERED
+ * 0x01 | UNFILTERED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_filter(
+u8 v_gyro_highrate_filter_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+s8 v_pg_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /* Write the value of
+ gyro highrate filter*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_FILTER__REG,
+ &v_data_u8r,
+ BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_FILTER,
+ v_gyro_highrate_filter_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_FILTER__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read gyro highrate x threshold
+ * from page one register from 0x18 bit 0 to 4
+ *
+ * @param v_gyro_highrate_x_thres_u8 : The value of gyro x highrate threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_x_thres(
+u8 *v_gyro_highrate_x_thres_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate x threshold is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro highrate threshold*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_X_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_highrate_x_thres_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_X_THRES);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write gyro highrate x threshold
+ * from page one register from 0x18 bit 0 to 4
+ *
+ * @param v_gyro_highrate_x_thres_u8 : The value of gyro x highrate threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_x_thres(
+u8 v_gyro_highrate_x_thres_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /* Write the value of
+ gyro highrate x threshold*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_X_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_X_THRES,
+ v_gyro_highrate_x_thres_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_X_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read gyro highrate x hysteresis
+ * from page one register from 0x18 bit 5 to 6
+ *
+ * @param v_gyro_highrate_x_hyst_u8 : The value of gyro highrate x hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_x_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_x_hyst(
+u8 *v_gyro_highrate_x_hyst_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page,gyro highrate x hysteresis is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro highrate x hysteresis*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_X_HYST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_highrate_x_hyst_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_X_HYST);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write gyro highrate x hysteresis
+ * from page one register from 0x18 bit 5 to 6
+ *
+ * @param v_gyro_highrate_x_hyst_u8 : The value of gyro highrate x hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_x_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_x_hyst(
+u8 v_gyro_highrate_x_hyst_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /*Write the value of
+ gyro highrate x hysteresis*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_X_HYST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_X_HYST,
+ v_gyro_highrate_x_hyst_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_X_HYST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read gyro highrate x duration
+ * from page one register from 0x19 bit 0 to 7
+ *
+ * @param v_gyro_highrate_x_durn_u8 : The value of gyro highrate x duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_x_durn_u8)*2.5ms
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_x_durn(
+u8 *v_gyro_highrate_x_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate x duration is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro highrate x duration*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_X_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_highrate_x_durn_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_X_DURN);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write gyro highrate x duration
+ * from page one register from 0x19 bit 0 to 7
+ *
+ * @param v_gyro_highrate_x_durn_u8 : The value of gyro highrate x duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_x_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_x_durn(
+u8 v_gyro_highrate_x_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /* Write the value
+ of gyro highrate x duration*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_X_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_X_DURN,
+ v_gyro_highrate_x_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_X_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read gyro highrate y threshold
+ * from page one register from 0x1A bit 0 to 4
+ *
+ * @param v_gyro_highrate_y_thres_u8 : The value of gyro highrate y threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_y_thres(
+u8 *v_gyro_highrate_y_thres_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate y threshold is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro highrate y threshold*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Y_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_highrate_y_thres_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_Y_THRES);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write gyro highrate y threshold
+ * from page one register from 0x1A bit 0 to 4
+ *
+ * @param v_gyro_highrate_y_thres_u8 : The value of gyro highrate y threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_y_thres(
+u8 v_gyro_highrate_y_thres_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /* Write the value
+ of gyro highrate y threshold*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Y_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_Y_THRES,
+ v_gyro_highrate_y_thres_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Y_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read gyro highrate y hysteresis
+ * from page one register from 0x1A bit 5 to 6
+ *
+ * @param v_gyro_highrate_y_hyst_u8 : The value of gyro highrate y hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_y_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_y_hyst(
+u8 *v_gyro_highrate_y_hyst_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate y hysteresis is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro highrate y hysteresis*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Y_HYST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_highrate_y_hyst_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_Y_HYST);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write gyro highrate y hysteresis
+ * from page one register from 0x1A bit 5 to 6
+ *
+ * @param v_gyro_highrate_y_hyst_u8 : The value of gyro highrate y hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_y_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_y_hyst(
+u8 v_gyro_highrate_y_hyst_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /* Write the value of
+ gyro highrate y hysteresis*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Y_HYST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_Y_HYST,
+ v_gyro_highrate_y_hyst_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Y_HYST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read gyro highrate y duration
+ * from page one register from 0x1B bit 0 to 7
+ *
+ * @param v_gyro_highrate_y_durn_u8 : The value of gyro highrate y duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_y_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_y_durn(
+u8 *v_gyro_highrate_y_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate y duration is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro highrate y duration*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Y_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_highrate_y_durn_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_Y_DURN);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write gyro highrate y duration
+ * from page one register from 0x1B bit 0 to 7
+ *
+ * @param v_gyro_highrate_y_durn_u8 : The value of gyro highrate y duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_y_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_y_durn(
+u8 v_gyro_highrate_y_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /* Write the value
+ of gyro highrate y duration*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Y_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_Y_DURN,
+ v_gyro_highrate_y_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Y_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read gyro highrate z threshold
+ * from page one register from 0x1C bit 0 to 4
+ *
+ * @param v_gyro_highrate_z_thres_u8 : The value of gyro highrate z threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_z_thres(
+u8 *v_gyro_highrate_z_thres_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate z threshold is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro highrate z threshold*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Z_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_highrate_z_thres_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_Z_THRES);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write gyro highrate z threshold
+ * from page one register from 0x1C bit 0 to 4
+ *
+ * @param v_gyro_highrate_z_thres_u8 : The value of gyro highrate z threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_z_thres(
+u8 v_gyro_highrate_z_thres_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /* Write the value
+ of gyro highrate z threshold*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Z_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_Z_THRES,
+ v_gyro_highrate_z_thres_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Z_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read gyro highrate z hysteresis
+ * from page one register from 0x1C bit 5 to 6
+ *
+ * @param v_gyro_highrate_z_hyst_u8 : The value of gyro highrate z hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_z_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_z_hyst(
+u8 *v_gyro_highrate_z_hyst_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate z hysteresis is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro highrate z hysteresis*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Z_HYST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_highrate_z_hyst_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_Z_HYST);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write gyro highrate z hysteresis
+ * from page one register from 0x1C bit 5 to 6
+ *
+ * @param v_gyro_highrate_z_hyst_u8 : The value of gyro highrate z hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_z_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_z_hyst(
+u8 v_gyro_highrate_z_hyst_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /* Write the value
+ of gyro highrate z hysteresis*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Z_HYST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_Z_HYST,
+ v_gyro_highrate_z_hyst_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Z_HYST__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read gyro highrate z duration
+ * from page one register from 0x1D bit 0 to 7
+ *
+ * @param v_gyro_highrate_z_durn_u8 : The value of gyro highrate z duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_z_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_z_durn(
+u8 *v_gyro_highrate_z_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate z duration is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro highrate z duration*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Z_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_highrate_z_durn_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_Z_DURN);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write gyro highrate z duration
+ * from page one register from 0x1D bit 0 to 7
+ *
+ * @param v_gyro_highrate_z_durn_u8 : The value of gyro highrate z duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_z_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_z_durn(
+u8 v_gyro_highrate_z_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+s8 v_pg_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /* Write the value of
+ gyro highrate z duration*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Z_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_HIGHRATE_Z_DURN,
+ v_gyro_highrate_z_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Z_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read gyro anymotion threshold
+ * from page one register from 0x1E bit 0 to 6
+ *
+ * @param v_gyro_any_motion_thres_u8 : The value of gyro anymotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro anymotion interrupt threshold dependent
+ * on the selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 1dps | 1LSB
+ * 1000 | 0.5dps | 1LSB
+ * 500 | 0.25dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_thres(
+u8 *v_gyro_any_motion_thres_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page,gyro anymotion threshold is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro anymotion threshold*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_any_motion_thres_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_ANY_MOTION_THRES);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write gyro anymotion threshold
+ * from page one register from 0x1E bit 0 to 6
+ *
+ * @param v_gyro_any_motion_thres_u8 : The value of gyro anymotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro anymotion interrupt threshold dependent
+ * on the selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 1dps | 1LSB
+ * 1000 | 0.5dps | 1LSB
+ * 500 | 0.25dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_thres(
+u8 v_gyro_any_motion_thres_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+s8 v_pg_stat_s8 = ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /* Write the value
+ of gyro anymotion threshold*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_ANY_MOTION_THRES,
+ v_gyro_any_motion_thres_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_THRES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+}
+if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read gyro anymotion slope samples
+ * from page one register from 0x1F bit 0 to 1
+ *
+ * @param v_gyro_any_motion_slope_samples_u8 :
+ * The value of gyro anymotion slope samples
+ * v_gyro_any_motion_slope_samples_u8 | result
+ * ---------------------------------- | -----------
+ * 0 | 8 samples
+ * 1 | 16 samples
+ * 2 | 32 samples
+ * 3 | 64 samples
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_slope_samples(
+u8 *v_gyro_any_motion_slope_samples_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro anymotion slope samples is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /*Read the value of gyro anymotion slope samples*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_SLOPE_SAMPLES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_any_motion_slope_samples_u8 =
+ BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_SLOPE_SAMPLES);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write gyro anymotion slope samples
+ * from page one register from 0x1F bit 0 to 1
+ *
+ * @param v_gyro_any_motion_slope_samples_u8 :
+ * The value of gyro anymotion slope samples
+ * v_gyro_any_motion_slope_samples_u8 | result
+ * ---------------------------------- | -----------
+ * 0 | 8 samples
+ * 1 | 16 samples
+ * 2 | 32 samples
+ * 3 | 64 samples
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_slope_samples(
+u8 v_gyro_any_motion_slope_samples_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+s8 v_pg_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+} else {
+/* The write operation effective only if the operation
+mode is in config mode, this part of code is checking the
+current operation mode and set the config mode */
+v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /* Write the value of
+ gyro anymotion slope samples*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_SLOPE_SAMPLES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_SLOPE_SAMPLES,
+ v_gyro_any_motion_slope_samples_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_SLOPE_SAMPLES__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read gyro anymotion awake duration
+ * from page one register from 0x1F bit 2 to 3
+ *
+ * @param v_gyro_awake_durn_u8 : The value of gyro anymotion awake duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_awake_durn(
+u8 *v_gyro_awake_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+ u8 v_data_u8r = BNO055_ZERO_U8X;
+ s8 v_stat_s8 = ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro anymotion awake duration is
+ available in the page one*/
+ if (p_bno055->page_id != PAGE_ONE)
+ /* Write page as one */
+ v_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if ((v_stat_s8 == SUCCESS) ||
+ (p_bno055->page_id == PAGE_ONE)) {
+ /* Read the value of gyro anymotion awake duration*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_AWAKE_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ *v_gyro_awake_durn_u8 = BNO055_GET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_AWAKE_DURN);
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write gyro anymotion awake duration
+ * from page one register from 0x1F bit 2 to 3
+ *
+ * @param v_gyro_awake_durn_u8 : The value of gyro anymotion awake duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_awake_durn(
+u8 v_gyro_awake_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = ERROR;
+u8 v_data_u8r = BNO055_ZERO_U8X;
+s8 v_stat_s8 = ERROR;
+s8 v_pg_stat_s8 = ERROR;
+u8 v_prev_opmode_u8 = OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_ZERO_U8X) {
+ return E_NULL_PTR;
+ } else {
+ /* The write operation effective only if the operation
+ mode is in config mode, this part of code is checking the
+ current operation mode and set the config mode */
+ v_stat_s8 = bno055_get_operation_mode(&v_prev_opmode_u8);
+ if (v_stat_s8 == SUCCESS) {
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ v_stat_s8 += bno055_set_operation_mode
+ (OPERATION_MODE_CONFIG);
+ if (v_stat_s8 == SUCCESS) {
+ /* Write page as one */
+ v_pg_stat_s8 = bno055_write_page_id(PAGE_ONE);
+ if (v_pg_stat_s8 == SUCCESS) {
+ /* Write the value of gyro
+ anymotion awake duration*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_AWAKE_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ if (com_rslt == SUCCESS) {
+ v_data_u8r =
+ BNO055_SET_BITSLICE(v_data_u8r,
+ BNO055_GYRO_AWAKE_DURN,
+ v_gyro_awake_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_AWAKE_DURN__REG,
+ &v_data_u8r, BNO055_ONE_U8X);
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ } else {
+ com_rslt = ERROR;
+ }
+ }
+ if (v_prev_opmode_u8 != OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (v_prev_opmode_u8);
+ return com_rslt;
+}
diff --git a/thirdparty/sensor/bno055/bno055.h b/thirdparty/sensor/bno055/bno055.h
new file mode 100644
index 00000000..6a45f4ed
--- /dev/null
+++ b/thirdparty/sensor/bno055/bno055.h
@@ -0,0 +1,7935 @@
+/** \mainpage
+*
+****************************************************************************
+* Copyright (C) 2013 - 2014 Bosch Sensortec GmbH
+*
+* File : bno055.h
+*
+* Date : 2014/12/12
+*
+* Revision : 2.0.2 $
+*
+* Usage: Sensor Driver file for BNO055 sensor
+*
+****************************************************************************
+* \section License
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+*
+* Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+*
+* Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the distribution.
+*
+* Neither the name of the copyright holder nor the names of the
+* contributors may be used to endorse or promote products derived from
+* this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER
+* OR CONTRIBUTORS BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+* OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO,
+* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+* ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
+*
+* The information provided is believed to be accurate and reliable.
+* The copyright holder assumes no responsibility
+* for the consequences of use
+* of such information nor for any infringement of patents or
+* other rights of third parties which may result from its use.
+* No license is granted by implication or otherwise under any patent or
+* patent rights of the copyright holder.
+**************************************************************************/
+/*! \file bno055.h
+ \brief BNO055 Sensor Driver Support Header File */
+
+#ifndef __BNO055_H__
+#define __BNO055_H__
+/****************************************************************/
+/**\name DATA TYPES INCLUDES */
+/************************************************************/
+/*!
+* @brief The following definition uses for define the data types
+*
+* @note While porting the API please consider the following
+* @note Please check the version of C standard
+* @note Are you using Linux platform
+*/
+
+/*!
+* @brief For the Linux platform support
+* Please use the types.h for your data types definitions
+*/
+#ifdef __KERNEL__
+
+#include <linux/types.h>
+/* singed integer type*/
+typedef int8_t s8;/**< used for signed 8bit */
+typedef int16_t s16;/**< used for signed 16bit */
+typedef int32_t s32;/**< used for signed 32bit */
+typedef int64_t s64;/**< used for signed 64bit */
+
+typedef u_int8_t u8;/**< used for unsigned 8bit */
+typedef u_int16_t u16;/**< used for unsigned 16bit */
+typedef u_int32_t u32;/**< used for unsigned 32bit */
+typedef u_int64_t u64;/**< used for unsigned 64bit */
+
+
+
+#else /* ! __KERNEL__ */
+/**********************************************************
+* These definition uses for define the C
+* standard version data types
+***********************************************************/
+# if !defined(__STDC_VERSION__)
+
+/************************************************
+ * compiler is C11 C standard
+************************************************/
+#if (__STDC_VERSION__ == 201112L)
+
+/************************************************/
+#include <stdint.h>
+/************************************************/
+
+/*unsigned integer types*/
+typedef uint8_t u8;/**< used for unsigned 8bit */
+typedef uint16_t u16;/**< used for unsigned 16bit */
+typedef uint32_t u32;/**< used for unsigned 32bit */
+typedef uint64_t u64;/**< used for unsigned 64bit */
+
+/*signed integer types*/
+typedef int8_t s8;/**< used for signed 8bit */
+typedef int16_t s16;/**< used for signed 16bit */
+typedef int32_t s32;/**< used for signed 32bit */
+typedef int64_t s64;/**< used for signed 64bit */
+/************************************************
+ * compiler is C99 C standard
+************************************************/
+
+#elif (__STDC_VERSION__ == 199901L)
+
+/* stdint.h is a C99 supported c library.
+which is used to fixed the integer size*/
+/************************************************/
+#include <stdint.h>
+/************************************************/
+
+/*unsigned integer types*/
+typedef uint8_t u8;/**< used for unsigned 8bit */
+typedef uint16_t u16;/**< used for unsigned 16bit */
+typedef uint32_t u32;/**< used for unsigned 32bit */
+typedef uint64_t u64;/**< used for unsigned 64bit */
+
+/*signed integer types*/
+typedef int8_t s8;/**< used for signed 8bit */
+typedef int16_t s16;/**< used for signed 16bit */
+typedef int32_t s32;/**< used for signed 32bit */
+typedef int64_t s64;/**< used for signed 64bit */
+/************************************************
+ * compiler is C89 or other C standard
+************************************************/
+
+#else /* !defined(__STDC_VERSION__) */
+/*!
+* @brief By default it is defined as 32 bit machine configuration
+* define your data types based on your
+* machine/compiler/controller configuration
+*/
+#define MACHINE_32_BIT
+
+/*! @brief
+ * If your machine support 16 bit
+ * define the MACHINE_16_BIT
+ */
+#ifdef MACHINE_16_BIT
+#include <limits.h>
+/*signed integer types*/
+typedef signed char s8;/**< used for signed 8bit */
+typedef signed short int s16;/**< used for signed 16bit */
+typedef signed long int s32;/**< used for signed 32bit */
+
+#if defined(LONG_MAX) && LONG_MAX == 0x7fffffffffffffffL
+typedef long int s64;/**< used for signed 64bit */
+typedef unsigned long int u64;/**< used for unsigned 64bit */
+#elif defined(LLONG_MAX) && (LLONG_MAX == 0x7fffffffffffffffLL)
+typedef long long int s64;/**< used for signed 64bit */
+typedef unsigned long long int u64;/**< used for unsigned 64bit */
+#else
+#warning Either the correct data type for signed 64 bit integer \
+could not be found, or 64 bit integers are not supported in your environment.
+#warning If 64 bit integers are supported on your platform, \
+please set s64 manually.
+#endif
+
+/*unsigned integer types*/
+typedef unsigned char u8;/**< used for unsigned 8bit */
+typedef unsigned short int u16;/**< used for unsigned 16bit */
+typedef unsigned long int u32;/**< used for unsigned 32bit */
+
+/* If your machine support 32 bit
+define the MACHINE_32_BIT*/
+#elif defined MACHINE_32_BIT
+/*signed integer types*/
+typedef signed char s8;/**< used for signed 8bit */
+typedef signed short int s16;/**< used for signed 16bit */
+typedef signed int s32;/**< used for signed 32bit */
+typedef signed long long int s64;/**< used for signed 64bit */
+
+/*unsigned integer types*/
+typedef unsigned char u8;/**< used for unsigned 8bit */
+typedef unsigned short int u16;/**< used for unsigned 16bit */
+typedef unsigned int u32;/**< used for unsigned 32bit */
+typedef unsigned long long int u64;/**< used for unsigned 64bit */
+
+/* If your machine support 64 bit
+define the MACHINE_64_BIT*/
+#elif defined MACHINE_64_BIT
+/*signed integer types*/
+typedef signed char s8;/**< used for signed 8bit */
+typedef signed short int s16;/**< used for signed 16bit */
+typedef signed int s32;/**< used for signed 32bit */
+typedef signed long int s64;/**< used for signed 64bit */
+
+/*unsigned integer types*/
+typedef unsigned char u8;/**< used for unsigned 8bit */
+typedef unsigned short int u16;/**< used for unsigned 16bit */
+typedef unsigned int u32;/**< used for unsigned 32bit */
+typedef unsigned long int u64;/**< used for unsigned 64bit */
+
+#else
+#warning The data types defined above which not supported \
+define the data types manually
+#endif
+#endif
+
+/*** This else will execute for the compilers
+ * which are not supported the C standards
+ * Like C89/C99/C11***/
+#else
+/*!
+* @brief By default it is defined as 32 bit machine configuration
+* define your data types based on your
+* machine/compiler/controller configuration
+*/
+#define MACHINE_32_BIT
+
+/* If your machine support 16 bit
+define the MACHINE_16_BIT*/
+#ifdef MACHINE_16_BIT
+#include <limits.h>
+/*signed integer types*/
+typedef signed char s8;/**< used for signed 8bit */
+typedef signed short int s16;/**< used for signed 16bit */
+typedef signed long int s32;/**< used for signed 32bit */
+
+#if defined(LONG_MAX) && LONG_MAX == 0x7fffffffffffffffL
+typedef long int s64;/**< used for signed 64bit */
+typedef unsigned long int u64;/**< used for unsigned 64bit */
+#elif defined(LLONG_MAX) && (LLONG_MAX == 0x7fffffffffffffffLL)
+typedef long long int s64;/**< used for signed 64bit */
+typedef unsigned long long int u64;/**< used for unsigned 64bit */
+#else
+#warning Either the correct data type for signed 64 bit integer \
+could not be found, or 64 bit integers are not supported in your environment.
+#warning If 64 bit integers are supported on your platform, \
+please set s64 manually.
+#endif
+
+/*unsigned integer types*/
+typedef unsigned char u8;/**< used for unsigned 8bit */
+typedef unsigned short int u16;/**< used for unsigned 16bit */
+typedef unsigned long int u32;/**< used for unsigned 32bit */
+
+/*! @brief If your machine support 32 bit
+define the MACHINE_32_BIT*/
+#elif defined MACHINE_32_BIT
+/*signed integer types*/
+typedef signed char s8;/**< used for signed 8bit */
+typedef signed short int s16;/**< used for signed 16bit */
+typedef signed int s32;/**< used for signed 32bit */
+typedef signed long long int s64;/**< used for signed 64bit */
+
+/*unsigned integer types*/
+typedef unsigned char u8;/**< used for unsigned 8bit */
+typedef unsigned short int u16;/**< used for unsigned 16bit */
+typedef unsigned int u32;/**< used for unsigned 32bit */
+typedef unsigned long long int u64;/**< used for unsigned 64bit */
+
+/* If your machine support 64 bit
+define the MACHINE_64_BIT*/
+#elif defined MACHINE_64_BIT
+/*signed integer types*/
+typedef signed char s8;/**< used for signed 8bit */
+typedef signed short int s16;/**< used for signed 16bit */
+typedef signed int s32;/**< used for signed 32bit */
+typedef signed long int s64;/**< used for signed 64bit */
+
+/*unsigned integer types*/
+typedef unsigned char u8;/**< used for unsigned 8bit */
+typedef unsigned short int u16;/**< used for unsigned 16bit */
+typedef unsigned int u32;/**< used for unsigned 32bit */
+typedef unsigned long int u64;/**< used for unsigned 64bit */
+
+#else
+#warning The data types defined above which not supported \
+define the data types manually
+#endif
+#endif
+#endif
+/***************************************************************/
+/**\name BUS READ AND WRITE FUNCTIONS */
+/***************************************************************/
+#define BNO055_WR_FUNC_PTR s8 (*bus_write)\
+(u8, u8 , u8 *, u8)
+
+#define BNO055_BUS_WRITE_FUNC(dev_addr, reg_addr, reg_data, wr_len)\
+ bus_write(dev_addr, reg_addr, reg_data, wr_len)
+
+#define BNO055_RD_FUNC_PTR s8 \
+(*bus_read)(u8, u8 , u8 *, u8)
+
+#define BNO055_BUS_READ_FUNC(dev_addr, reg_addr, reg_data, r_len)\
+bus_read(dev_addr, reg_addr, reg_data, r_len)
+
+#define BNO055_DELAY_RETURN_TYPE void
+
+#define BNO055_DELAY_PARAM_TYPES u32
+
+#define BNO055_DELAY_FUNC(delay_in_msec)\
+ delay_func(delay_in_msec)
+
+/********************************************************/
+/**\name I2C ADDRESS DEFINITION FOR BNO055 */
+/********************************************************/
+/* bno055 I2C Address */
+#define BNO055_I2C_ADDR1 0x28
+#define BNO055_I2C_ADDR2 0x29
+
+/***************************************************/
+/**\name REGISTER ADDRESS DEFINITION */
+/***************************************************/
+/* Page id register definition*/
+#define BNO055_PAGE_ID_ADDR 0X07
+
+/* PAGE0 REGISTER DEFINITION START*/
+#define BNO055_CHIP_ID_ADDR 0x00
+#define BNO055_ACCEL_REV_ID_ADDR 0x01
+#define BNO055_MAG_REV_ID_ADDR 0x02
+#define BNO055_GYRO_REV_ID_ADDR 0x03
+#define BNO055_SW_REV_ID_LSB_ADDR 0x04
+#define BNO055_SW_REV_ID_MSB_ADDR 0x05
+#define BNO055_BL_REV_ID_ADDR 0X06
+
+/* Accel data register*/
+#define BNO055_ACCEL_DATA_X_LSB_ADDR 0X08
+#define BNO055_ACCEL_DATA_X_MSB_ADDR 0X09
+#define BNO055_ACCEL_DATA_Y_LSB_ADDR 0X0A
+#define BNO055_ACCEL_DATA_Y_MSB_ADDR 0X0B
+#define BNO055_ACCEL_DATA_Z_LSB_ADDR 0X0C
+#define BNO055_ACCEL_DATA_Z_MSB_ADDR 0X0D
+
+/*Mag data register*/
+#define BNO055_MAG_DATA_X_LSB_ADDR 0X0E
+#define BNO055_MAG_DATA_X_MSB_ADDR 0X0F
+#define BNO055_MAG_DATA_Y_LSB_ADDR 0X10
+#define BNO055_MAG_DATA_Y_MSB_ADDR 0X11
+#define BNO055_MAG_DATA_Z_LSB_ADDR 0X12
+#define BNO055_MAG_DATA_Z_MSB_ADDR 0X13
+
+/*Gyro data registers*/
+#define BNO055_GYRO_DATA_X_LSB_ADDR 0X14
+#define BNO055_GYRO_DATA_X_MSB_ADDR 0X15
+#define BNO055_GYRO_DATA_Y_LSB_ADDR 0X16
+#define BNO055_GYRO_DATA_Y_MSB_ADDR 0X17
+#define BNO055_GYRO_DATA_Z_LSB_ADDR 0X18
+#define BNO055_GYRO_DATA_Z_MSB_ADDR 0X19
+
+/*Euler data registers*/
+#define BNO055_EULER_H_LSB_ADDR 0X1A
+#define BNO055_EULER_H_MSB_ADDR 0X1B
+
+#define BNO055_EULER_R_LSB_ADDR 0X1C
+#define BNO055_EULER_R_MSB_ADDR 0X1D
+
+#define BNO055_EULER_P_LSB_ADDR 0X1E
+#define BNO055_EULER_P_MSB_ADDR 0X1F
+
+/*Quaternion data registers*/
+#define BNO055_QUATERNION_DATA_W_LSB_ADDR 0X20
+#define BNO055_QUATERNION_DATA_W_MSB_ADDR 0X21
+#define BNO055_QUATERNION_DATA_X_LSB_ADDR 0X22
+#define BNO055_QUATERNION_DATA_X_MSB_ADDR 0X23
+#define BNO055_QUATERNION_DATA_Y_LSB_ADDR 0X24
+#define BNO055_QUATERNION_DATA_Y_MSB_ADDR 0X25
+#define BNO055_QUATERNION_DATA_Z_LSB_ADDR 0X26
+#define BNO055_QUATERNION_DATA_Z_MSB_ADDR 0X27
+
+/* Linear acceleration data registers*/
+#define BNO055_LINEAR_ACCEL_DATA_X_LSB_ADDR 0X28
+#define BNO055_LINEAR_ACCEL_DATA_X_MSB_ADDR 0X29
+#define BNO055_LINEAR_ACCEL_DATA_Y_LSB_ADDR 0X2A
+#define BNO055_LINEAR_ACCEL_DATA_Y_MSB_ADDR 0X2B
+#define BNO055_LINEAR_ACCEL_DATA_Z_LSB_ADDR 0X2C
+#define BNO055_LINEAR_ACCEL_DATA_Z_MSB_ADDR 0X2D
+
+/*Gravity data registers*/
+#define BNO055_GRAVITY_DATA_X_LSB_ADDR 0X2E
+#define BNO055_GRAVITY_DATA_X_MSB_ADDR 0X2F
+#define BNO055_GRAVITY_DATA_Y_LSB_ADDR 0X30
+#define BNO055_GRAVITY_DATA_Y_MSB_ADDR 0X31
+#define BNO055_GRAVITY_DATA_Z_LSB_ADDR 0X32
+#define BNO055_GRAVITY_DATA_Z_MSB_ADDR 0X33
+
+/* Temperature data register*/
+#define BNO055_TEMP_ADDR 0X34
+
+/* Status registers*/
+#define BNO055_CALIB_STAT_ADDR 0X35
+#define BNO055_SELFTEST_RESULT_ADDR 0X36
+#define BNO055_INTR_STAT_ADDR 0X37
+#define BNO055_SYS_CLK_STAT_ADDR 0X38
+#define BNO055_SYS_STAT_ADDR 0X39
+#define BNO055_SYS_ERR_ADDR 0X3A
+
+/* Unit selection register*/
+#define BNO055_UNIT_SEL_ADDR 0X3B
+#define BNO055_DATA_SELECT_ADDR 0X3C
+
+/* Mode registers*/
+#define BNO055_OPR_MODE_ADDR 0X3D
+#define BNO055_PWR_MODE_ADDR 0X3E
+
+#define BNO055_SYS_TRIGGER_ADDR 0X3F
+#define BNO055_TEMP_SOURCE_ADDR 0X40
+/* Axis remap registers*/
+#define BNO055_AXIS_MAP_CONFIG_ADDR 0X41
+#define BNO055_AXIS_MAP_SIGN_ADDR 0X42
+
+/* SIC registers*/
+#define BNO055_SIC_MATRIX_0_LSB_ADDR 0X43
+#define BNO055_SIC_MATRIX_0_MSB_ADDR 0X44
+#define BNO055_SIC_MATRIX_1_LSB_ADDR 0X45
+#define BNO055_SIC_MATRIX_1_MSB_ADDR 0X46
+#define BNO055_SIC_MATRIX_2_LSB_ADDR 0X47
+#define BNO055_SIC_MATRIX_2_MSB_ADDR 0X48
+#define BNO055_SIC_MATRIX_3_LSB_ADDR 0X49
+#define BNO055_SIC_MATRIX_3_MSB_ADDR 0X4A
+#define BNO055_SIC_MATRIX_4_LSB_ADDR 0X4B
+#define BNO055_SIC_MATRIX_4_MSB_ADDR 0X4C
+#define BNO055_SIC_MATRIX_5_LSB_ADDR 0X4D
+#define BNO055_SIC_MATRIX_5_MSB_ADDR 0X4E
+#define BNO055_SIC_MATRIX_6_LSB_ADDR 0X4F
+#define BNO055_SIC_MATRIX_6_MSB_ADDR 0X50
+#define BNO055_SIC_MATRIX_7_LSB_ADDR 0X51
+#define BNO055_SIC_MATRIX_7_MSB_ADDR 0X52
+#define BNO055_SIC_MATRIX_8_LSB_ADDR 0X53
+#define BNO055_SIC_MATRIX_8_MSB_ADDR 0X54
+
+/* Accelerometer Offset registers*/
+#define ACCEL_OFFSET_X_LSB_ADDR 0X55
+#define ACCEL_OFFSET_X_MSB_ADDR 0X56
+#define ACCEL_OFFSET_Y_LSB_ADDR 0X57
+#define ACCEL_OFFSET_Y_MSB_ADDR 0X58
+#define ACCEL_OFFSET_Z_LSB_ADDR 0X59
+#define ACCEL_OFFSET_Z_MSB_ADDR 0X5A
+
+/* Magnetometer Offset registers*/
+#define MAG_OFFSET_X_LSB_ADDR 0X5B
+#define MAG_OFFSET_X_MSB_ADDR 0X5C
+#define MAG_OFFSET_Y_LSB_ADDR 0X5D
+#define MAG_OFFSET_Y_MSB_ADDR 0X5E
+#define MAG_OFFSET_Z_LSB_ADDR 0X5F
+#define MAG_OFFSET_Z_MSB_ADDR 0X60
+
+/* Gyroscope Offset registers*/
+#define GYRO_OFFSET_X_LSB_ADDR 0X61
+#define GYRO_OFFSET_X_MSB_ADDR 0X62
+#define GYRO_OFFSET_Y_LSB_ADDR 0X63
+#define GYRO_OFFSET_Y_MSB_ADDR 0X64
+#define GYRO_OFFSET_Z_LSB_ADDR 0X65
+#define GYRO_OFFSET_Z_MSB_ADDR 0X66
+
+/* Radius registers*/
+#define ACCEL_RADIUS_LSB_ADDR 0X67
+#define ACCEL_RADIUS_MSB_ADDR 0X68
+#define MAG_RADIUS_LSB_ADDR 0X69
+#define MAG_RADIUS_MSB_ADDR 0X6A
+/* PAGE0 REGISTERS DEFINITION END*/
+
+/* PAGE1 REGISTERS DEFINITION START*/
+/* Configuration registers*/
+#define ACCEL_CONFIG_ADDR 0X08
+#define MAG_CONFIG_ADDR 0X09
+#define GYRO_CONFIG_ADDR 0X0A
+#define GYRO_MODE_CONFIG_ADDR 0X0B
+#define ACCEL_SLEEP_CONFIG_ADDR 0X0C
+#define GYRO_SLEEP_CONFIG_ADDR 0X0D
+#define MAG_SLEEP_CONFIG_ADDR 0x0E
+
+/* Interrupt registers*/
+#define INT_MASK_ADDR 0X0F
+#define INT_ADDR 0X10
+#define ACCEL_ANY_MOTION_THRES_ADDR 0X11
+#define ACCEL_INTR_SETTINGS_ADDR 0X12
+#define ACCEL_HIGH_G_DURN_ADDR 0X13
+#define ACCEL_HIGH_G_THRES_ADDR 0X14
+#define ACCEL_NO_MOTION_THRES_ADDR 0X15
+#define ACCEL_NO_MOTION_SET_ADDR 0X16
+#define GYRO_INTR_SETING_ADDR 0X17
+#define GYRO_HIGHRATE_X_SET_ADDR 0X18
+#define GYRO_DURN_X_ADDR 0X19
+#define GYRO_HIGHRATE_Y_SET_ADDR 0X1A
+#define GYRO_DURN_Y_ADDR 0X1B
+#define GYRO_HIGHRATE_Z_SET_ADDR 0X1C
+#define GYRO_DURN_Z_ADDR 0X1D
+#define GYRO_ANY_MOTION_THRES_ADDR 0X1E
+#define GYRO_ANY_MOTION_SET_ADDR 0X1F
+/* PAGE1 REGISTERS DEFINITION END*/
+
+
+#define BNO055_MDELAY_DATA_TYPE u32
+
+/*< This refers BNO055 return type as s8 */
+#define BNO055_RETURN_FUNCTION_TYPE s8
+
+/* Compile switch definition for Float and double*/
+#define BNO055_FLOAT_ENABLE
+#define BNO055_DOUBLE_ENABLE
+/**************************************************************/
+/**\name STRUCTURE DEFINITIONS */
+/**************************************************************/
+/*!
+* @brief bno055 struct
+*/
+struct bno055_t {
+u8 chip_id;/**< chip_id of bno055 */
+u16 sw_rev_id;/**< software revision id of bno055 */
+u8 page_id;/**< page_id of bno055 */
+u8 accel_rev_id;/**< accel revision id of bno055 */
+u8 mag_rev_id;/**< mag revision id of bno055 */
+u8 gyro_rev_id;/**< gyro revision id of bno055 */
+u8 bl_rev_id;/**< boot loader revision id of bno055 */
+u8 dev_addr;/**< i2c device address of bno055 */
+BNO055_WR_FUNC_PTR;/**< bus write function pointer */
+BNO055_RD_FUNC_PTR;/**<bus read function pointer */
+void (*delay_msec)(BNO055_MDELAY_DATA_TYPE);/**< delay function pointer */
+};
+/*!
+* @brief struct for accel data read from registers
+*/
+struct bno055_accel_t {
+s16 x;/**< accel x data */
+s16 y;/**< accel y data */
+s16 z;/**< accel z data */
+};
+/*!
+* @brief struct for Mag data read from registers
+*/
+struct bno055_mag_t {
+s16 x;/**< mag x data */
+s16 y;/**< mag y data */
+s16 z;/**< mag z data */
+};
+/*!
+* @brief struct for Gyro data read from registers
+*/
+struct bno055_gyro_t {
+s16 x;/**< gyro x data */
+s16 y;/**< gyro y data */
+s16 z;/**< gyro z data */
+};
+/*!
+* @brief struct for Euler data read from registers
+*/
+struct bno055_euler_t {
+s16 h;/**< Euler h data */
+s16 r;/**< Euler r data */
+s16 p;/**< Euler p data */
+};
+/*!
+* @brief struct for Quaternion data read from registers
+*/
+struct bno055_quaternion_t {
+s16 w;/**< Quaternion w data */
+s16 x;/**< Quaternion x data */
+s16 y;/**< Quaternion y data */
+s16 z;/**< Quaternion z data */
+};
+/*!
+* @brief struct for Linear Accel data read from registers
+*/
+struct bno055_linear_accel_t {
+s16 x; /**< Linear Accel x data */
+s16 y; /**< Linear Accel y data */
+s16 z; /**< Linear Accel z data */
+};
+/*!
+* @brief struct for Gravity data read from registers
+*/
+struct bno055_gravity_t {
+s16 x;/**< Gravity x data */
+s16 y;/**< Gravity y data */
+s16 z;/**< Gravity z data */
+};
+#ifdef BNO055_DOUBLE_ENABLE
+/*!
+* @brief struct for Accel-output data of precision double
+*/
+struct bno055_accel_double_t {
+double x;/**< Accel x double data */
+double y;/**< Accel y double data */
+double z;/**< Accel z double data */
+};
+/*!
+* @brief struct for Mag-output data of precision double
+*/
+struct bno055_mag_double_t {
+double x;/**< Mag x double data */
+double y;/**< Mag y double data */
+double z;/**< Mag z double data */
+};
+/*!
+* @brief struct for Gyro-output data of precision double
+*/
+struct bno055_gyro_double_t {
+double x;/**< Gyro x double data */
+double y;/**< Gyro y double data */
+double z;/**< Gyro z double data */
+};
+/*!
+* @brief struct for Euler-output data of precision double
+*/
+struct bno055_euler_double_t {
+double h;/**< Euler h double data */
+double r;/**< Euler r double data */
+double p;/**< Euler p double data */
+};
+/*!
+* @brief struct for Linear Accel-output data of precision double
+*/
+struct bno055_linear_accel_double_t {
+double x;/**< linear accel x double data */
+double y;/**< linear accel y double data */
+double z;/**< linear accel z double data */
+};
+/*!
+* @brief struct for Gravity-output data of precision double
+*/
+struct bno055_gravity_double_t {
+double x;/**< Gravity x double data */
+double y;/**< Gravity y double data */
+double z;/**< Gravity z double data */
+};
+#endif
+#ifdef BNO055_FLOAT_ENABLE
+/*!
+* @brief struct for Accel-output data of precision float
+*/
+struct bno055_accel_float_t {
+float x;/**< accel x float data */
+float y;/**< accel y float data */
+float z;/**< accel z float data */
+};
+/*!
+* @brief struct for Mag-output data of precision float
+*/
+struct bno055_mag_float_t {
+float x;/**< Mag x float data */
+float y;/**< Mag y float data */
+float z;/**< Mag z float data */
+};
+/*!
+* @brief struct for Gyro-output data of precision float
+*/
+struct bno055_gyro_float_t {
+float x;/**< Gyro x float data */
+float y;/**< Gyro y float data */
+float z;/**< Gyro z float data */
+};
+/*!
+* @brief struct for Euler-output data of precision float
+*/
+struct bno055_euler_float_t {
+float h;/**< Euler h float data */
+float r;/**< Euler r float data */
+float p;/**< Euler p float data */
+};
+/*!
+* @brief struct for Linear accel-output data of precision float
+*/
+struct bno055_linear_accel_float_t {
+float x;/**< Linear accel x float data */
+float y;/**< Linear accel y float data */
+float z;/**< Linear accel z float data */
+};
+/*!
+* @brief struct for Gravity-output data of precision float
+*/
+struct bno055_gravity_float_t {
+float x;/**< Gravity x float data */
+float y;/**< Gravity y float data */
+float z;/**< Gravity z float data */
+};
+#endif
+/*!
+* @brief struct for Accel offset
+*/
+struct bno055_accel_offset_t {
+s16 x;/**< Accel offset x data */
+s16 y;/**< Accel offset y data */
+s16 z;/**< Accel offset z data */
+s16 r;/**< Accel radius r data */
+};
+/*!
+* @brief struct for Gyro offset
+*/
+struct bno055_gyro_offset_t {
+s16 x;/**< Gyro offset x data */
+s16 y;/**< Gyro offset y data */
+s16 z;/**< Gyro offset z data */
+};
+/*!
+* @brief struct for Mag offset
+*/
+struct bno055_mag_offset_t {
+s16 x;/**< Mag offset x data */
+s16 y;/**< Mag offset y data */
+s16 z;/**< Mag offset z data */
+s16 r;/**< Mag radius x data */
+};
+/*!
+* @brief struct for soft iron calibration matrix
+*/
+struct bno055_sic_matrix_t {
+s16 sic_0;/**< soft iron calibration matrix 0 data */
+s16 sic_1;/**< soft iron calibration matrix 1 data */
+s16 sic_2;/**< soft iron calibration matrix 2 data */
+s16 sic_3;/**< soft iron calibration matrix 3 data */
+s16 sic_4;/**< soft iron calibration matrix 4 data */
+s16 sic_5;/**< soft iron calibration matrix 5 data */
+s16 sic_6;/**< soft iron calibration matrix 6 data */
+s16 sic_7;/**< soft iron calibration matrix 7 data */
+s16 sic_8;/**< soft iron calibration matrix 8 data */
+};
+/***************************************************/
+/**\name CONSTANT DEFINITIONS */
+/***************************************************/
+#define BNO055_ZERO_U8X ((u8)0)
+#define BNO055_ONE_U8X ((u8)1)
+#define BNO055_TWO_U8X ((u8)2)
+#define BNO055_FOUR_U8X ((u8)4)
+#define BNO055_FIVE_U8X ((u8)5)
+#define BNO055_SIX_U8X ((u8)6)
+#define BNO055_SEVEN_U8X ((u8)7)
+#define BNO055_ELEVEN_U8X ((u8)11)
+#define BNO055_SIXTEEN_U8X ((u8)16)
+#define BNO055_EIGHT_U8X ((u8)8)
+#define BNO055_TWENTY_U8X ((u8)20)
+#define BNO055_EIGHTEEN_U8X ((u8)18)
+
+
+#define BNO055_SHIFT_8_POSITION ((u8)8)
+
+
+/* BNO055 API error codes */
+#define E_NULL_PTR ((s8)-127)
+#define E_BNO055_OUT_OF_RANGE ((s8)-2)
+#define SUCCESS ((u8)0)
+#define ERROR ((s8)-1)
+
+/* Selection for bit enable and disable */
+#define ENABLED 0x01
+#define DISABLED 0x00
+
+/* Page ID */
+#define PAGE_ZERO 0X00
+#define PAGE_ONE 0X01
+
+/* Enable the temperature source */
+#define ACCEL_TEMP_EN 0x00
+#define GYRO_TEMP_EN 0x01
+#define MCU_TEMP_EN 0x03
+
+/*Accel unit*/
+#define ACCEL_UNIT_MSQ 0x00
+#define ACCEL_UNIT_MG 0x01
+
+/*Gyro unit*/
+#define GYRO_UNIT_DPS 0x00
+#define GYRO_UNIT_RPS 0x01
+
+/* Euler unit*/
+#define EULER_UNIT_DEG 0x00
+#define EULER_UNIT_RAD 0x01
+
+/*Temperature unit*/
+#define TEMP_UNIT_CELSIUS 0x00
+#define TEMP_UNIT_FAHRENHEIT 0x01
+
+/*Accel division factor*/
+#define ACCEL_DIV_MSQ 100.0
+#define ACCEL_DIV_MG 1
+
+/*Mag division factor*/
+#define MAG_DIV_UT 16.0
+
+/*Gyro division factor*/
+#define GYRO_DIV_DPS 16.0
+#define GYRO_DIV_RPS 900.0
+
+/*Euler division factor*/
+#define EULER_DIV_DEG 16.0
+#define EULER_DIV_RAD 900.0
+
+/*Linear accel division factor*/
+#define LINEAR_ACCEL_DIV_MSQ 100.0
+
+/*Gravity accel division factor*/
+#define GRAVITY_DIV_MSQ 100.0
+
+/* Temperature division factor*/
+#define TEMP_DIV_FAHRENHEIT 0.5
+#define TEMP_DIV_CELSIUS 1
+
+#define BNO055_SIX_HUNDRES_U8X 600
+
+
+
+/* Operation mode settings*/
+#define OPERATION_MODE_CONFIG 0X00
+#define OPERATION_MODE_ACCONLY 0X01
+#define OPERATION_MODE_MAGONLY 0X02
+#define OPERATION_MODE_GYRONLY 0X03
+#define OPERATION_MODE_ACCMAG 0X04
+#define OPERATION_MODE_ACCGYRO 0X05
+#define OPERATION_MODE_MAGGYRO 0X06
+#define OPERATION_MODE_AMG 0X07
+#define OPERATION_MODE_IMUPLUS 0X08
+#define OPERATION_MODE_COMPASS 0X09
+#define OPERATION_MODE_M4G 0X0A
+#define OPERATION_MODE_NDOF_FMC_OFF 0X0B
+#define OPERATION_MODE_NDOF 0X0C
+
+/* Power mode*/
+#define POWER_MODE_NORMAL 0X00
+#define POWER_MODE_LOWPOWER 0X01
+#define POWER_MODE_SUSPEND 0X02
+
+/* PAGE-1 definitions*/
+/* Accel Range */
+
+#define ACCEL_RANGE_2G 0X00
+#define ACCEL_RANGE_4G 0X01
+#define ACCEL_RANGE_8G 0X02
+#define ACCEL_RANGE_16G 0X03
+
+/* Accel Bandwidth*/
+#define ACCEL_BW_7_81HZ 0x00
+#define ACCEL_BW_15_63HZ 0x01
+#define ACCEL_BW_31_25HZ 0x02
+#define ACCEL_BW_62_5HZ 0X03
+#define ACCEL_BW_125HZ 0X04
+#define ACCEL_BW_250HZ 0X05
+#define ACCEL_BW_500HZ 0X06
+#define ACCEL_BW_1000HZ 0X07
+
+/* Accel Power mode*/
+#define ACCEL_NORMAL 0X00
+#define ACCEL_SUSPEND 0X01
+#define ACCEL_LOWPOWER_1 0X02
+#define ACCEL_STANDBY 0X03
+#define ACCEL_LOWPOWER_2 0X04
+#define ACCEL_DEEPSUSPEND 0X05
+
+/* Mag data output rate*/
+#define MAG_DATA_OUTRATE_2HZ 0X00
+#define MAG_DATA_OUTRATE_6HZ 0X01
+#define MAG_DATA_OUTRATE_8HZ 0X02
+#define MAG_DATA_OUTRATE_10HZ 0X03
+#define MAG_DATA_OUTRATE_15HZ 0X04
+#define MAG_DATA_OUTRATE_20HZ 0X05
+#define MAG_DATA_OUTRATE_25HZ 0X06
+#define MAG_DATA_OUTRATE_30HZ 0X07
+
+/* Mag Operation mode*/
+#define MAG_OPERATION_MODE_LOWPOWER 0X00
+#define MAG_OPERATION_MODE_REGULAR 0X01
+#define MAG_OPERATION_MODE_ENHANCED_REGULAR 0X02
+#define MAG_OPERATION_MODE_HIGH_ACCURACY 0X03
+
+/* Mag power mode*/
+#define MAG_POWER_MODE_NORMAL 0X00
+#define MAG_POWER_MODE_SLEEP 0X01
+#define MAG_POWER_MODE_SUSPEND 0X02
+#define MAG_POWER_MODE_FORCE_MODE 0X03
+
+/* Gyro range*/
+#define GYRO_RANGE_2000DPS 0x00
+#define GYRO_RANGE_1000DPS 0x01
+#define GYRO_RANGE_500DPS 0x02
+#define GYRO_RANGE_250DPS 0x03
+#define GYRO_RANGE_125DPS 0x04
+
+/* Gyro Bandwidth*/
+#define GYRO_BW_523HZ 0x00
+#define GYRO_BW_230HZ 0x01
+#define GYRO_BW_116HZ 0x02
+#define GYRO_BW_47HZ 0x03
+#define GYRO_BW_23HZ 0x04
+#define GYRO_BW_12HZ 0x05
+#define GYRO_BW_64HZ 0x06
+#define GYRO_BW_32HZ 0x07
+
+/* Gyro power mode*/
+#define GYRO_POWER_MODE_NORMAL 0X00
+#define GYRO_POWER_MODE_FASTPOWERUP 0X01
+#define GYRO_POWER_MODE_DEEPSUSPEND 0X02
+#define GYRO_POWER_MODE_SUSPEND 0X03
+#define GYRO_POWER_MODE_ADVANCE_POWERSAVE 0X04
+
+/* Accel Sleep Duration */
+#define BNO055_ACCEL_SLEEP_DURN_0_5MS 0x05
+/* sets sleep duration to 0.5 ms */
+#define BNO055_ACCEL_SLEEP_DURN_1MS 0x06
+/* sets sleep duration to 1 ms */
+#define BNO055_ACCEL_SLEEP_DURN_2MS 0x07
+/* sets sleep duration to 2 ms */
+#define BNO055_ACCEL_SLEEP_DURN_4MS 0x08
+/* sets sleep duration to 4 ms */
+#define BNO055_ACCEL_SLEEP_DURN_6MS 0x09
+/* sets sleep duration to 6 ms*/
+#define BNO055_ACCEL_SLEEP_DURN_10MS 0x0A
+/* sets sleep duration to 10 ms */
+#define BNO055_ACCEL_SLEEP_DURN_25MS 0x0B
+ /* sets sleep duration to 25 ms */
+#define BNO055_ACCEL_SLEEP_DURN_50MS 0x0C
+ /* sets sleep duration to 50 ms */
+#define BNO055_ACCEL_SLEEP_DURN_100MS 0x0D
+ /* sets sleep duration to 100 ms */
+#define BNO055_ACCEL_SLEEP_DURN_500MS 0x0E
+ /* sets sleep duration to 500 ms */
+#define BNO055_ACCEL_SLEEP_DURN_1S 0x0F
+/* sets sleep duration to 1 s */
+
+/* Gyro Auto sleep duration*/
+#define BNO055_GYRO_No_AUTOSLPDUR 0x00
+#define BNO055_GYRO_4MS_AUTOSLPDUR 0x01
+#define BNO055_GYRO_5MS_AUTOSLPDUR 0x02
+#define BNO055_GYRO_8MS_AUTOSLPDUR 0x03
+#define BNO055_GYRO_10MS_AUTOSLPDUR 0x04
+#define BNO055_GYRO_15MS_AUTOSLPDUR 0x05
+#define BNO055_GYRO_20MS_AUTOSLPDUR 0x06
+#define BNO055_GYRO_40MS_AUTOSLPDUR 0x07
+
+/* Accel Any/No motion axis selection*/
+#define BNO055_ACCEL_ANY_MOTION_NO_MOTION_X_AXIS 0
+#define BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS 1
+#define BNO055_ACCEL_ANY_MOTION_NO_MOTION_Z_AXIS 2
+
+/* Accel High g axis selection*/
+#define BNO055_ACCEL_HIGH_G_X_AXIS 0
+#define BNO055_ACCEL_HIGH_G_Y_AXIS 1
+#define BNO055_ACCEL_HIGH_G_Z_AXIS 2
+
+/* Gyro Any motion axis selection*/
+#define BNO055_GYRO_ANY_MOTION_X_AXIS 0
+#define BNO055_GYRO_ANY_MOTION_Y_AXIS 1
+#define BNO055_GYRO_ANY_MOTION_Z_AXIS 2
+
+
+/* Gyro High rate axis selection*/
+#define BNO055_GYRO_HIGHRATE_X_AXIS 0
+#define BNO055_GYRO_HIGHRATE_Y_AXIS 1
+#define BNO055_GYRO_HIGHRATE_Z_AXIS 2
+
+/* Axis remap values*/
+#define REMAP_X_Y 0X21
+#define REMAP_Y_Z 0X18
+#define REMAP_Z_X 0X06
+#define REMAP_X_Y_Z_TYPE0 0X12
+#define REMAP_X_Y_Z_TYPE1 0X09
+#define DEFAULT_AXIS 0X24
+
+/* Axis remap sign */
+#define REMAP_AXIS_POSITIVE 0X00
+#define REMAP_AXIS_NEGATIVE 0X01
+
+/* Gyro anymotion and high rate filter configuration */
+#define FILTERED 0x00
+#define UNFILTERED 0x01
+
+/* mask definitions*/
+#define BNO055_SIC_HEX_0_0_F_F_DATA 0x00FF
+/****************************************************/
+/**\name ARRAY SIZE DEFINITIONS */
+/***************************************************/
+#define ARRAY_SIZE_TWO 2
+#define ARRAY_SIZE_THREE 3
+#define ARRAY_SIZE_SIX 6
+#define ARRAY_SIZE_FIVE 5
+#define ARRAY_SIZE_EIGHT 8
+#define ARRAY_SIZE_TWELVE 12
+#define ARRAY_SIZE_FOURTEEN 14
+#define ARRAY_SIZE_EIGHTEEN 18
+#define ARRAY_SIZE_TWENTY_SIX 26
+
+#define INDEX_ZERO 0
+#define INDEX_ONE 1
+#define INDEX_TWO 2
+#define INDEX_THREE 3
+#define INDEX_FOUR 4
+#define INDEX_FIVE 5
+#define INDEX_SIX 6
+#define INDEX_SEVEN 7
+#define INDEX_EIGHT 8
+#define INDEX_NINE 9
+#define INDEX_TEN 10
+#define INDEX_ELEVEN 11
+#define INDEX_TWELVE 12
+#define INDEX_THIRTEEN 13
+#define INDEX_FOURTEEN 14
+#define INDEX_FIVETEEN 15
+#define INDEX_SIXTEEN 16
+#define INDEX_SEVENTEEN 17
+#define INDEX_EIGHTEEN 18
+#define INDEX_NINETEEN 19
+#define INDEX_TWENTY 20
+#define INDEX_TWENTY_ONE 21
+#define INDEX_TWENTY_TWO 22
+#define INDEX_TWENTY_THREE 23
+#define INDEX_TWENTY_FIVE 25
+/****************************************************/
+/**\name ARRAY PARAMETERS */
+/***************************************************/
+#define LSB_ZERO 0
+#define MSB_ONE 1
+#define LSB_TWO 2
+#define MSB_THREE 3
+#define LSB_FOUR 4
+#define MSB_FIVE 5
+#define LSB_SIX 6
+#define MSB_SEVEN 7
+/*********************************************************/
+/**\name PAGE0 DATA REGISTERS DEFINITION */
+/*********************************************************/
+/* Chip ID */
+#define BNO055_CHIP_ID__POS 0
+#define BNO055_CHIP_ID__MSK 0xFF
+#define BNO055_CHIP_ID__LEN 8
+#define BNO055_CHIP_ID__REG BNO055_CHIP_ID_ADDR
+
+/* Accel revision id*/
+#define BNO055_ACCEL_REV_ID__POS 0
+#define BNO055_ACCEL_REV_ID__MSK 0xFF
+#define BNO055_ACCEL_REV_ID__LEN 8
+#define BNO055_ACCEL_REV_ID__REG BNO055_ACCEL_REV_ID_ADDR
+
+/* Mag revision id*/
+#define BNO055_MAG_REV_ID__POS 0
+#define BNO055_MAG_REV_ID__MSK 0xFF
+#define BNO055_MAG_REV_ID__LEN 8
+#define BNO055_MAG_REV_ID__REG BNO055_MAG_REV_ID_ADDR
+
+/* Gyro revision id*/
+#define BNO055_GYRO_REV_ID__POS 0
+#define BNO055_GYRO_REV_ID__MSK 0xFF
+#define BNO055_GYRO_REV_ID__LEN 8
+#define BNO055_GYRO_REV_ID__REG BNO055_GYRO_REV_ID_ADDR
+
+/*Software revision id LSB*/
+#define BNO055_SW_REV_ID_LSB__POS 0
+#define BNO055_SW_REV_ID_LSB__MSK 0xFF
+#define BNO055_SW_REV_ID_LSB__LEN 8
+#define BNO055_SW_REV_ID_LSB__REG BNO055_SW_REV_ID_LSB_ADDR
+
+/*Software revision id MSB*/
+#define BNO055_SW_REV_ID_MSB__POS 0
+#define BNO055_SW_REV_ID_MSB__MSK 0xFF
+#define BNO055_SW_REV_ID_MSB__LEN 8
+#define BNO055_SW_REV_ID_MSB__REG BNO055_SW_REV_ID_MSB_ADDR
+
+/* BOOTLODER revision id*/
+#define BNO055_BL_REV_ID__POS 0
+#define BNO055_BL_REV_ID__MSK 0xFF
+#define BNO055_BL_REV_ID__LEN 8
+#define BNO055_BL_REV_ID__REG BNO055_BL_REV_ID_ADDR
+
+/*Page id*/
+#define BNO055_PAGE_ID__POS 0
+#define BNO055_PAGE_ID__MSK 0xFF
+#define BNO055_PAGE_ID__LEN 8
+#define BNO055_PAGE_ID__REG BNO055_PAGE_ID_ADDR
+
+/* Accel data X-LSB register*/
+#define BNO055_ACCEL_DATA_X_LSB_VALUEX__POS 0
+#define BNO055_ACCEL_DATA_X_LSB_VALUEX__MSK 0xFF
+#define BNO055_ACCEL_DATA_X_LSB_VALUEX__LEN 8
+#define BNO055_ACCEL_DATA_X_LSB_VALUEX__REG \
+BNO055_ACCEL_DATA_X_LSB_ADDR
+
+/* Accel data X-MSB register*/
+#define BNO055_ACCEL_DATA_X_MSB_VALUEX__POS 0
+#define BNO055_ACCEL_DATA_X_MSB_VALUEX__MSK 0xFF
+#define BNO055_ACCEL_DATA_X_MSB_VALUEX__LEN 8
+#define BNO055_ACCEL_DATA_X_MSB_VALUEX__REG \
+BNO055_ACCEL_DATA_X_MSB_ADDR
+
+/* Accel data Y-LSB register*/
+#define BNO055_ACCEL_DATA_Y_LSB_VALUEY__POS 0
+#define BNO055_ACCEL_DATA_Y_LSB_VALUEY__MSK 0xFF
+#define BNO055_ACCEL_DATA_Y_LSB_VALUEY__LEN 8
+#define BNO055_ACCEL_DATA_Y_LSB_VALUEY__REG \
+BNO055_ACCEL_DATA_Y_LSB_ADDR
+
+/* Accel data Y-MSB register*/
+#define BNO055_ACCEL_DATA_Y_MSB_VALUEY__POS 0
+#define BNO055_ACCEL_DATA_Y_MSB_VALUEY__MSK 0xFF
+#define BNO055_ACCEL_DATA_Y_MSB_VALUEY__LEN 8
+#define BNO055_ACCEL_DATA_Y_MSB_VALUEY__REG \
+BNO055_ACCEL_DATA_Y_MSB_ADDR
+
+/* Accel data Z-LSB register*/
+#define BNO055_ACCEL_DATA_Z_LSB_VALUEZ__POS 0
+#define BNO055_ACCEL_DATA_Z_LSB_VALUEZ__MSK 0xFF
+#define BNO055_ACCEL_DATA_Z_LSB_VALUEZ__LEN 8
+#define BNO055_ACCEL_DATA_Z_LSB_VALUEZ__REG \
+BNO055_ACCEL_DATA_Z_LSB_ADDR
+
+/* Accel data Z-MSB register*/
+#define BNO055_ACCEL_DATA_Z_MSB_VALUEZ__POS 0
+#define BNO055_ACCEL_DATA_Z_MSB_VALUEZ__MSK 0xFF
+#define BNO055_ACCEL_DATA_Z_MSB_VALUEZ__LEN 8
+#define BNO055_ACCEL_DATA_Z_MSB_VALUEZ__REG \
+BNO055_ACCEL_DATA_Z_MSB_ADDR
+
+/* Mag data X-LSB register*/
+#define BNO055_MAG_DATA_X_LSB_VALUEX__POS 0
+#define BNO055_MAG_DATA_X_LSB_VALUEX__MSK 0xFF
+#define BNO055_MAG_DATA_X_LSB_VALUEX__LEN 8
+#define BNO055_MAG_DATA_X_LSB_VALUEX__REG \
+BNO055_MAG_DATA_X_LSB_ADDR
+
+/* Mag data X-MSB register*/
+#define BNO055_MAG_DATA_X_MSB_VALUEX__POS 0
+#define BNO055_MAG_DATA_X_MSB_VALUEX__MSK 0xFF
+#define BNO055_MAG_DATA_X_MSB_VALUEX__LEN 8
+#define BNO055_MAG_DATA_X_MSB_VALUEX__REG BNO055_MAG_DATA_X_MSB_ADDR
+
+/* Mag data Y-LSB register*/
+#define BNO055_MAG_DATA_Y_LSB_VALUEY__POS 0
+#define BNO055_MAG_DATA_Y_LSB_VALUEY__MSK 0xFF
+#define BNO055_MAG_DATA_Y_LSB_VALUEY__LEN 8
+#define BNO055_MAG_DATA_Y_LSB_VALUEY__REG BNO055_MAG_DATA_Y_LSB_ADDR
+
+/* Mag data Y-MSB register*/
+#define BNO055_MAG_DATA_Y_MSB_VALUEY__POS 0
+#define BNO055_MAG_DATA_Y_MSB_VALUEY__MSK 0xFF
+#define BNO055_MAG_DATA_Y_MSB_VALUEY__LEN 8
+#define BNO055_MAG_DATA_Y_MSB_VALUEY__REG BNO055_MAG_DATA_Y_MSB_ADDR
+
+/* Mag data Z-LSB register*/
+#define BNO055_MAG_DATA_Z_LSB_VALUEZ__POS 0
+#define BNO055_MAG_DATA_Z_LSB_VALUEZ__MSK 0xFF
+#define BNO055_MAG_DATA_Z_LSB_VALUEZ__LEN 8
+#define BNO055_MAG_DATA_Z_LSB_VALUEZ__REG BNO055_MAG_DATA_Z_LSB_ADDR
+
+/* Mag data Z-MSB register*/
+#define BNO055_MAG_DATA_Z_MSB_VALUEZ__POS 0
+#define BNO055_MAG_DATA_Z_MSB_VALUEZ__MSK 0xFF
+#define BNO055_MAG_DATA_Z_MSB_VALUEZ__LEN 8
+#define BNO055_MAG_DATA_Z_MSB_VALUEZ__REG BNO055_MAG_DATA_Z_MSB_ADDR
+
+/* Gyro data X-LSB register*/
+#define BNO055_GYRO_DATA_X_LSB_VALUEX__POS 0
+#define BNO055_GYRO_DATA_X_LSB_VALUEX__MSK 0xFF
+#define BNO055_GYRO_DATA_X_LSB_VALUEX__LEN 8
+#define BNO055_GYRO_DATA_X_LSB_VALUEX__REG BNO055_GYRO_DATA_X_LSB_ADDR
+
+/* Gyro data X-MSB register*/
+#define BNO055_GYRO_DATA_X_MSB_VALUEX__POS 0
+#define BNO055_GYRO_DATA_X_MSB_VALUEX__MSK 0xFF
+#define BNO055_GYRO_DATA_X_MSB_VALUEX__LEN 8
+#define BNO055_GYRO_DATA_X_MSB_VALUEX__REG BNO055_GYRO_DATA_X_MSB_ADDR
+
+/* Gyro data Y-LSB register*/
+#define BNO055_GYRO_DATA_Y_LSB_VALUEY__POS 0
+#define BNO055_GYRO_DATA_Y_LSB_VALUEY__MSK 0xFF
+#define BNO055_GYRO_DATA_Y_LSB_VALUEY__LEN 8
+#define BNO055_GYRO_DATA_Y_LSB_VALUEY__REG BNO055_GYRO_DATA_Y_LSB_ADDR
+
+/* Gyro data Y-MSB register*/
+#define BNO055_GYRO_DATA_Y_MSB_VALUEY__POS 0
+#define BNO055_GYRO_DATA_Y_MSB_VALUEY__MSK 0xFF
+#define BNO055_GYRO_DATA_Y_MSB_VALUEY__LEN 8
+#define BNO055_GYRO_DATA_Y_MSB_VALUEY__REG BNO055_GYRO_DATA_Y_MSB_ADDR
+
+/* Gyro data Z-LSB register*/
+#define BNO055_GYRO_DATA_Z_LSB_VALUEZ__POS 0
+#define BNO055_GYRO_DATA_Z_LSB_VALUEZ__MSK 0xFF
+#define BNO055_GYRO_DATA_Z_LSB_VALUEZ__LEN 8
+#define BNO055_GYRO_DATA_Z_LSB_VALUEZ__REG BNO055_GYRO_DATA_Z_LSB_ADDR
+
+/* Gyro data Z-MSB register*/
+#define BNO055_GYRO_DATA_Z_MSB_VALUEZ__POS 0
+#define BNO055_GYRO_DATA_Z_MSB_VALUEZ__MSK 0xFF
+#define BNO055_GYRO_DATA_Z_MSB_VALUEZ__LEN 8
+#define BNO055_GYRO_DATA_Z_MSB_VALUEZ__REG BNO055_GYRO_DATA_Z_MSB_ADDR
+
+/* Euler data HEADING-LSB register*/
+#define BNO055_EULER_H_LSB_VALUEH__POS 0
+#define BNO055_EULER_H_LSB_VALUEH__MSK 0xFF
+#define BNO055_EULER_H_LSB_VALUEH__LEN 8
+#define BNO055_EULER_H_LSB_VALUEH__REG BNO055_EULER_H_LSB_ADDR
+
+/* Euler data HEADING-MSB register*/
+#define BNO055_EULER_H_MSB_VALUEH__POS 0
+#define BNO055_EULER_H_MSB_VALUEH__MSK 0xFF
+#define BNO055_EULER_H_MSB_VALUEH__LEN 8
+#define BNO055_EULER_H_MSB_VALUEH__REG BNO055_EULER_H_MSB_ADDR
+
+/* Euler data ROLL-LSB register*/
+#define BNO055_EULER_R_LSB_VALUER__POS 0
+#define BNO055_EULER_R_LSB_VALUER__MSK 0xFF
+#define BNO055_EULER_R_LSB_VALUER__LEN 8
+#define BNO055_EULER_R_LSB_VALUER__REG BNO055_EULER_R_LSB_ADDR
+
+/* Euler data ROLL-MSB register*/
+#define BNO055_EULER_R_MSB_VALUER__POS 0
+#define BNO055_EULER_R_MSB_VALUER__MSK 0xFF
+#define BNO055_EULER_R_MSB_VALUER__LEN 8
+#define BNO055_EULER_R_MSB_VALUER__REG BNO055_EULER_R_MSB_ADDR
+
+/* Euler data PITCH-LSB register*/
+#define BNO055_EULER_P_LSB_VALUEP__POS 0
+#define BNO055_EULER_P_LSB_VALUEP__MSK 0xFF
+#define BNO055_EULER_P_LSB_VALUEP__LEN 8
+#define BNO055_EULER_P_LSB_VALUEP__REG BNO055_EULER_P_LSB_ADDR
+
+/* Euler data HEADING-MSB register*/
+#define BNO055_EULER_P_MSB_VALUEP__POS 0
+#define BNO055_EULER_P_MSB_VALUEP__MSK 0xFF
+#define BNO055_EULER_P_MSB_VALUEP__LEN 8
+#define BNO055_EULER_P_MSB_VALUEP__REG BNO055_EULER_P_MSB_ADDR
+
+/* Quaternion data W-LSB register*/
+#define BNO055_QUATERNION_DATA_W_LSB_VALUEW__POS 0
+#define BNO055_QUATERNION_DATA_W_LSB_VALUEW__MSK 0xFF
+#define BNO055_QUATERNION_DATA_W_LSB_VALUEW__LEN 8
+#define BNO055_QUATERNION_DATA_W_LSB_VALUEW__REG \
+BNO055_QUATERNION_DATA_W_LSB_ADDR
+
+/* Quaternion data W-MSB register*/
+#define BNO055_QUATERNION_DATA_W_MSB_VALUEW__POS 0
+#define BNO055_QUATERNION_DATA_W_MSB_VALUEW__MSK 0xFF
+#define BNO055_QUATERNION_DATA_W_MSB_VALUEW__LEN 8
+#define BNO055_QUATERNION_DATA_W_MSB_VALUEW__REG \
+BNO055_QUATERNION_DATA_W_MSB_ADDR
+
+/* Quaternion data X-LSB register*/
+#define BNO055_QUATERNION_DATA_X_LSB_VALUEX__POS 0
+#define BNO055_QUATERNION_DATA_X_LSB_VALUEX__MSK 0xFF
+#define BNO055_QUATERNION_DATA_X_LSB_VALUEX__LEN 8
+#define BNO055_QUATERNION_DATA_X_LSB_VALUEX__REG \
+BNO055_QUATERNION_DATA_X_LSB_ADDR
+
+/* Quaternion data X-MSB register*/
+#define BNO055_QUATERNION_DATA_X_MSB_VALUEX__POS 0
+#define BNO055_QUATERNION_DATA_X_MSB_VALUEX__MSK 0xFF
+#define BNO055_QUATERNION_DATA_X_MSB_VALUEX__LEN 8
+#define BNO055_QUATERNION_DATA_X_MSB_VALUEX__REG \
+BNO055_QUATERNION_DATA_X_MSB_ADDR
+
+/* Quaternion data Y-LSB register*/
+#define BNO055_QUATERNION_DATA_Y_LSB_VALUEY__POS 0
+#define BNO055_QUATERNION_DATA_Y_LSB_VALUEY__MSK 0xFF
+#define BNO055_QUATERNION_DATA_Y_LSB_VALUEY__LEN 8
+#define BNO055_QUATERNION_DATA_Y_LSB_VALUEY__REG \
+BNO055_QUATERNION_DATA_Y_LSB_ADDR
+
+/* Quaternion data Y-MSB register*/
+#define BNO055_QUATERNION_DATA_Y_MSB_VALUEY__POS 0
+#define BNO055_QUATERNION_DATA_Y_MSB_VALUEY__MSK 0xFF
+#define BNO055_QUATERNION_DATA_Y_MSB_VALUEY__LEN 8
+#define BNO055_QUATERNION_DATA_Y_MSB_VALUEY__REG \
+NO055_QUATERNION_DATA_Y_MSB_ADDR
+
+/* Quaternion data Z-LSB register*/
+#define BNO055_QUATERNION_DATA_Z_LSB_VALUEZ__POS 0
+#define BNO055_QUATERNION_DATA_Z_LSB_VALUEZ__MSK 0xFF
+#define BNO055_QUATERNION_DATA_Z_LSB_VALUEZ__LEN 8
+#define BNO055_QUATERNION_DATA_Z_LSB_VALUEZ__REG \
+BNO055_QUATERNION_DATA_Z_LSB_ADDR
+
+/* Quaternion data Z-MSB register*/
+#define BNO055_QUATERNION_DATA_Z_MSB_VALUEZ__POS 0
+#define BNO055_QUATERNION_DATA_Z_MSB_VALUEZ__MSK 0xFF
+#define BNO055_QUATERNION_DATA_Z_MSB_VALUEZ__LEN 8
+#define BNO055_QUATERNION_DATA_Z_MSB_VALUEZ__REG \
+BNO055_QUATERNION_DATA_Z_MSB_ADDR
+
+/* Linear acceleration data X-LSB register*/
+#define BNO055_LINEAR_ACCEL_DATA_X_LSB_VALUEX__POS 0
+#define BNO055_LINEAR_ACCEL_DATA_X_LSB_VALUEX__MSK 0xFF
+#define BNO055_LINEAR_ACCEL_DATA_X_LSB_VALUEX__LEN 8
+#define BNO055_LINEAR_ACCEL_DATA_X_LSB_VALUEX__REG \
+BNO055_LINEAR_ACCEL_DATA_X_LSB_ADDR
+
+/* Linear acceleration data X-MSB register*/
+#define BNO055_LINEAR_ACCEL_DATA_X_MSB_VALUEX__POS 0
+#define BNO055_LINEAR_ACCEL_DATA_X_MSB_VALUEX__MSK 0xFF
+#define BNO055_LINEAR_ACCEL_DATA_X_MSB_VALUEX__LEN 8
+#define BNO055_LINEAR_ACCEL_DATA_X_MSB_VALUEX__REG \
+BNO055_LINEAR_ACCEL_DATA_X_MSB_ADDR
+
+/* Linear acceleration data Y-LSB register*/
+#define BNO055_LINEAR_ACCEL_DATA_Y_LSB_VALUEY__POS 0
+#define BNO055_LINEAR_ACCEL_DATA_Y_LSB_VALUEY__MSK 0xFF
+#define BNO055_LINEAR_ACCEL_DATA_Y_LSB_VALUEY__LEN 8
+#define BNO055_LINEAR_ACCEL_DATA_Y_LSB_VALUEY__REG \
+BNO055_LINEAR_ACCEL_DATA_Y_LSB_ADDR
+
+/* Linear acceleration data Y-MSB register*/
+#define BNO055_LINEAR_ACCEL_DATA_Y_MSB_VALUEY__POS 0
+#define BNO055_LINEAR_ACCEL_DATA_Y_MSB_VALUEY__MSK 0xFF
+#define BNO055_LINEAR_ACCEL_DATA_Y_MSB_VALUEY__LEN 8
+#define BNO055_LINEAR_ACCEL_DATA_Y_MSB_VALUEY__REG \
+BNO055_LINEAR_ACCEL_DATA_Y_MSB_ADDR
+
+/* Linear acceleration data Z-LSB register*/
+#define BNO055_LINEAR_ACCEL_DATA_Z_LSB_VALUEZ__POS 0
+#define BNO055_LINEAR_ACCEL_DATA_Z_LSB_VALUEZ__MSK 0xFF
+#define BNO055_LINEAR_ACCEL_DATA_Z_LSB_VALUEZ__LEN 8
+#define BNO055_LINEAR_ACCEL_DATA_Z_LSB_VALUEZ__REG \
+BNO055_LINEAR_ACCEL_DATA_Z_LSB_ADDR
+
+/* Linear acceleration data Z-MSB register*/
+#define BNO055_LINEAR_ACCEL_DATA_Z_MSB_VALUEZ__POS 0
+#define BNO055_LINEAR_ACCEL_DATA_Z_MSB_VALUEZ__MSK 0xFF
+#define BNO055_LINEAR_ACCEL_DATA_Z_MSB_VALUEZ__LEN 8
+#define BNO055_LINEAR_ACCEL_DATA_Z_MSB_VALUEZ__REG \
+BNO055_LINEAR_ACCEL_DATA_Z_MSB_ADDR
+
+/* Gravity data X-LSB register*/
+#define BNO055_GRAVITY_DATA_X_LSB_VALUEX__POS 0
+#define BNO055_GRAVITY_DATA_X_LSB_VALUEX__MSK 0xFF
+#define BNO055_GRAVITY_DATA_X_LSB_VALUEX__LEN 8
+#define BNO055_GRAVITY_DATA_X_LSB_VALUEX__REG \
+BNO055_GRAVITY_DATA_X_LSB_ADDR
+
+/* Gravity data X-MSB register*/
+#define BNO055_GRAVITY_DATA_X_MSB_VALUEX__POS 0
+#define BNO055_GRAVITY_DATA_X_MSB_VALUEX__MSK 0xFF
+#define BNO055_GRAVITY_DATA_X_MSB_VALUEX__LEN 8
+#define BNO055_GRAVITY_DATA_X_MSB_VALUEX__REG \
+BNO055_GRAVITY_DATA_X_MSB_ADDR
+
+/* Gravity data Y-LSB register*/
+#define BNO055_GRAVITY_DATA_Y_LSB_VALUEY__POS 0
+#define BNO055_GRAVITY_DATA_Y_LSB_VALUEY__MSK 0xFF
+#define BNO055_GRAVITY_DATA_Y_LSB_VALUEY__LEN 8
+#define BNO055_GRAVITY_DATA_Y_LSB_VALUEY__REG \
+BNO055_GRAVITY_DATA_Y_LSB_ADDR
+
+/* Gravity data Y-MSB register*/
+#define BNO055_GRAVITY_DATA_Y_MSB_VALUEY__POS 0
+#define BNO055_GRAVITY_DATA_Y_MSB_VALUEY__MSK 0xFF
+#define BNO055_GRAVITY_DATA_Y_MSB_VALUEY__LEN 8
+#define BNO055_GRAVITY_DATA_Y_MSB_VALUEY__REG \
+BNO055_GRAVITY_DATA_Y_MSB_ADDR
+
+/* Gravity data Z-LSB register*/
+#define BNO055_GRAVITY_DATA_Z_LSB_VALUEZ__POS 0
+#define BNO055_GRAVITY_DATA_Z_LSB_VALUEZ__MSK 0xFF
+#define BNO055_GRAVITY_DATA_Z_LSB_VALUEZ__LEN 8
+#define BNO055_GRAVITY_DATA_Z_LSB_VALUEZ__REG \
+BNO055_GRAVITY_DATA_Z_LSB_ADDR
+
+/* Gravity data Z-MSB register*/
+#define BNO055_GRAVITY_DATA_Z_MSB_VALUEZ__POS 0
+#define BNO055_GRAVITY_DATA_Z_MSB_VALUEZ__MSK 0xFF
+#define BNO055_GRAVITY_DATA_Z_MSB_VALUEZ__LEN 8
+#define BNO055_GRAVITY_DATA_Z_MSB_VALUEZ__REG \
+BNO055_GRAVITY_DATA_Z_MSB_ADDR
+
+/* Temperature register*/
+#define BNO055_TEMP__POS 0
+#define BNO055_TEMP__MSK 0xFF
+#define BNO055_TEMP__LEN 8
+#define BNO055_TEMP__REG BNO055_TEMP_ADDR
+
+/*Mag_Calib status register*/
+#define BNO055_MAG_CALIB_STAT__POS 0
+#define BNO055_MAG_CALIB_STAT__MSK 0X03
+#define BNO055_MAG_CALIB_STAT__LEN 2
+#define BNO055_MAG_CALIB_STAT__REG BNO055_CALIB_STAT_ADDR
+
+/*Acc_Calib status register*/
+#define BNO055_ACCEL_CALIB_STAT__POS 2
+#define BNO055_ACCEL_CALIB_STAT__MSK 0X0C
+#define BNO055_ACCEL_CALIB_STAT__LEN 2
+#define BNO055_ACCEL_CALIB_STAT__REG BNO055_CALIB_STAT_ADDR
+
+/*Gyro_Calib status register*/
+#define BNO055_GYRO_CALIB_STAT__POS 4
+#define BNO055_GYRO_CALIB_STAT__MSK 0X30
+#define BNO055_GYRO_CALIB_STAT__LEN 2
+#define BNO055_GYRO_CALIB_STAT__REG BNO055_CALIB_STAT_ADDR
+
+/*Sys_Calib status register*/
+#define BNO055_SYS_CALIB_STAT__POS 6
+#define BNO055_SYS_CALIB_STAT__MSK 0XC0
+#define BNO055_SYS_CALIB_STAT__LEN 2
+#define BNO055_SYS_CALIB_STAT__REG BNO055_CALIB_STAT_ADDR
+
+/*ST_ACCEL register*/
+#define BNO055_SELFTEST_ACCEL__POS 0
+#define BNO055_SELFTEST_ACCEL__MSK 0X01
+#define BNO055_SELFTEST_ACCEL__LEN 1
+#define BNO055_SELFTEST_ACCEL__REG BNO055_SELFTEST_RESULT_ADDR
+
+/*ST_MAG register*/
+#define BNO055_SELFTEST_MAG__POS 1
+#define BNO055_SELFTEST_MAG__MSK 0X02
+#define BNO055_SELFTEST_MAG__LEN 1
+#define BNO055_SELFTEST_MAG__REG BNO055_SELFTEST_RESULT_ADDR
+
+/*ST_GYRO register*/
+#define BNO055_SELFTEST_GYRO__POS 2
+#define BNO055_SELFTEST_GYRO__MSK 0X04
+#define BNO055_SELFTEST_GYRO__LEN 1
+#define BNO055_SELFTEST_GYRO__REG BNO055_SELFTEST_RESULT_ADDR
+
+/*ST_MCU register*/
+#define BNO055_SELFTEST_MCU__POS 3
+#define BNO055_SELFTEST_MCU__MSK 0X08
+#define BNO055_SELFTEST_MCU__LEN 1
+#define BNO055_SELFTEST_MCU__REG BNO055_SELFTEST_RESULT_ADDR
+
+/*Interrupt status registers*/
+#define BNO055_INTR_STAT_GYRO_ANY_MOTION__POS 2
+#define BNO055_INTR_STAT_GYRO_ANY_MOTION__MSK 0X04
+#define BNO055_INTR_STAT_GYRO_ANY_MOTION__LEN 1
+#define BNO055_INTR_STAT_GYRO_ANY_MOTION__REG BNO055_INTR_STAT_ADDR
+
+#define BNO055_INTR_STAT_GYRO_HIGHRATE__POS 3
+#define BNO055_INTR_STAT_GYRO_HIGHRATE__MSK 0X08
+#define BNO055_INTR_STAT_GYRO_HIGHRATE__LEN 1
+#define BNO055_INTR_STAT_GYRO_HIGHRATE__REG BNO055_INTR_STAT_ADDR
+
+#define BNO055_INTR_STAT_ACCEL_HIGH_G__POS 5
+#define BNO055_INTR_STAT_ACCEL_HIGH_G__MSK 0X20
+#define BNO055_INTR_STAT_ACCEL_HIGH_G__LEN 1
+#define BNO055_INTR_STAT_ACCEL_HIGH_G__REG BNO055_INTR_STAT_ADDR
+
+#define BNO055_INTR_STAT_ACCEL_ANY_MOTION__POS 6
+#define BNO055_INTR_STAT_ACCEL_ANY_MOTION__MSK 0X40
+#define BNO055_INTR_STAT_ACCEL_ANY_MOTION__LEN 1
+#define BNO055_INTR_STAT_ACCEL_ANY_MOTION__REG BNO055_INTR_STAT_ADDR
+
+#define BNO055_INTR_STAT_ACCEL_NO_MOTION__POS 7
+#define BNO055_INTR_STAT_ACCEL_NO_MOTION__MSK 0X80
+#define BNO055_INTR_STAT_ACCEL_NO_MOTION__LEN 1
+#define BNO055_INTR_STAT_ACCEL_NO_MOTION__REG BNO055_INTR_STAT_ADDR
+
+/* system clock status register*/
+#define BNO055_SYS_MAIN_CLK__POS 0
+#define BNO055_SYS_MAIN_CLK__MSK 0X10
+#define BNO055_SYS_MAIN_CLK__LEN 1
+#define BNO055_SYS_MAIN_CLK__REG BNO055_SYS_CLK_STAT_ADDR
+
+/* System registers*/
+#define BNO055_SYS_STAT_CODE__POS 0
+#define BNO055_SYS_STAT_CODE__MSK 0XFF
+#define BNO055_SYS_STAT_CODE__LEN 8
+#define BNO055_SYS_STAT_CODE__REG BNO055_SYS_STAT_ADDR
+
+#define BNO055_SYS_ERROR_CODE__POS 0
+#define BNO055_SYS_ERROR_CODE__MSK 0XFF
+#define BNO055_SYS_ERROR_CODE__LEN 8
+#define BNO055_SYS_ERROR_CODE__REG BNO055_SYS_ERR_ADDR
+
+/* Accel_Unit register*/
+#define BNO055_ACCEL_UNIT__POS 0
+#define BNO055_ACCEL_UNIT__MSK 0X01
+#define BNO055_ACCEL_UNIT__LEN 1
+#define BNO055_ACCEL_UNIT__REG BNO055_UNIT_SEL_ADDR
+
+/* Gyro_Unit register*/
+#define BNO055_GYRO_UNIT__POS 1
+#define BNO055_GYRO_UNIT__MSK 0X02
+#define BNO055_GYRO_UNIT__LEN 1
+#define BNO055_GYRO_UNIT__REG BNO055_UNIT_SEL_ADDR
+
+/* Euler_Unit register*/
+#define BNO055_EULER_UNIT__POS 2
+#define BNO055_EULER_UNIT__MSK 0X04
+#define BNO055_EULER_UNIT__LEN 1
+#define BNO055_EULER_UNIT__REG BNO055_UNIT_SEL_ADDR
+
+/* Tilt_Unit register*/
+#define BNO055_TILT_UNIT__POS 3
+#define BNO055_TILT_UNIT__MSK 0X08
+#define BNO055_TILT_UNIT__LEN 1
+#define BNO055_TILT_UNIT__REG BNO055_UNIT_SEL_ADDR
+
+/* Temperature_Unit register*/
+#define BNO055_TEMP_UNIT__POS 4
+#define BNO055_TEMP_UNIT__MSK 0X10
+#define BNO055_TEMP_UNIT__LEN 1
+#define BNO055_TEMP_UNIT__REG BNO055_UNIT_SEL_ADDR
+
+/* ORI android-windows register*/
+#define BNO055_DATA_OUTPUT_FORMAT__POS 7
+#define BNO055_DATA_OUTPUT_FORMAT__MSK 0X80
+#define BNO055_DATA_OUTPUT_FORMAT__LEN 1
+#define BNO055_DATA_OUTPUT_FORMAT__REG BNO055_UNIT_SEL_ADDR
+/*Operation Mode data register*/
+#define BNO055_OPERATION_MODE__POS 0
+#define BNO055_OPERATION_MODE__MSK 0X0F
+#define BNO055_OPERATION_MODE__LEN 4
+#define BNO055_OPERATION_MODE__REG BNO055_OPR_MODE_ADDR
+/* Power Mode register*/
+#define BNO055_POWER_MODE__POS 0
+#define BNO055_POWER_MODE__MSK 0X03
+#define BNO055_POWER_MODE__LEN 2
+#define BNO055_POWER_MODE__REG BNO055_PWR_MODE_ADDR
+
+/*Self Test register*/
+#define BNO055_SELFTEST__POS 0
+#define BNO055_SELFTEST__MSK 0X01
+#define BNO055_SELFTEST__LEN 1
+#define BNO055_SELFTEST__REG BNO055_SYS_TRIGGER_ADDR
+
+/* RST_SYS register*/
+#define BNO055_SYS_RST__POS 5
+#define BNO055_SYS_RST__MSK 0X20
+#define BNO055_SYS_RST__LEN 1
+#define BNO055_SYS_RST__REG BNO055_SYS_TRIGGER_ADDR
+
+/* RST_INT register*/
+#define BNO055_INTR_RST__POS 6
+#define BNO055_INTR_RST__MSK 0X40
+#define BNO055_INTR_RST__LEN 1
+#define BNO055_INTR_RST__REG BNO055_SYS_TRIGGER_ADDR
+
+/* CLK_SRC register*/
+#define BNO055_CLK_SRC__POS 7
+#define BNO055_CLK_SRC__MSK 0X80
+#define BNO055_CLK_SRC__LEN 1
+#define BNO055_CLK_SRC__REG BNO055_SYS_TRIGGER_ADDR
+
+/* Temp source register*/
+#define BNO055_TEMP_SOURCE__POS 0
+#define BNO055_TEMP_SOURCE__MSK 0X03
+#define BNO055_TEMP_SOURCE__LEN 2
+#define BNO055_TEMP_SOURCE__REG BNO055_TEMP_SOURCE_ADDR
+
+/* Axis remap value register*/
+#define BNO055_REMAP_AXIS_VALUE__POS 0
+#define BNO055_REMAP_AXIS_VALUE__MSK 0X3F
+#define BNO055_REMAP_AXIS_VALUE__LEN 6
+#define BNO055_REMAP_AXIS_VALUE__REG BNO055_AXIS_MAP_CONFIG_ADDR
+
+/* Axis sign value register*/
+#define BNO055_REMAP_Z_SIGN__POS 0
+#define BNO055_REMAP_Z_SIGN__MSK 0X01
+#define BNO055_REMAP_Z_SIGN__LEN 1
+#define BNO055_REMAP_Z_SIGN__REG BNO055_AXIS_MAP_SIGN_ADDR
+
+#define BNO055_REMAP_Y_SIGN__POS 1
+#define BNO055_REMAP_Y_SIGN__MSK 0X02
+#define BNO055_REMAP_Y_SIGN__LEN 1
+#define BNO055_REMAP_Y_SIGN__REG BNO055_AXIS_MAP_SIGN_ADDR
+
+#define BNO055_REMAP_X_SIGN__POS 2
+#define BNO055_REMAP_X_SIGN__MSK 0X04
+#define BNO055_REMAP_X_SIGN__LEN 1
+#define BNO055_REMAP_X_SIGN__REG BNO055_AXIS_MAP_SIGN_ADDR
+
+/* Soft Iron Calibration matrix register*/
+#define BNO055_SIC_MATRIX_0_LSB__POS 0
+#define BNO055_SIC_MATRIX_0_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_0_LSB__LEN 8
+#define BNO055_SIC_MATRIX_0_LSB__REG BNO055_SIC_MATRIX_0_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_0_MSB__POS 0
+#define BNO055_SIC_MATRIX_0_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_0_MSB__LEN 8
+#define BNO055_SIC_MATRIX_0_MSB__REG BNO055_SIC_MATRIX_0_MSB_ADDR
+
+#define BNO055_SIC_MATRIX_1_LSB__POS 0
+#define BNO055_SIC_MATRIX_1_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_1_LSB__LEN 8
+#define BNO055_SIC_MATRIX_1_LSB__REG BNO055_SIC_MATRIX_1_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_1_MSB__POS 0
+#define BNO055_SIC_MATRIX_1_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_1_MSB__LEN 8
+#define BNO055_SIC_MATRIX_1_MSB__REG BNO055_SIC_MATRIX_1_MSB_ADDR
+
+#define BNO055_SIC_MATRIX_2_LSB__POS 0
+#define BNO055_SIC_MATRIX_2_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_2_LSB__LEN 8
+#define BNO055_SIC_MATRIX_2_LSB__REG BNO055_SIC_MATRIX_2_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_2_MSB__POS 0
+#define BNO055_SIC_MATRIX_2_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_2_MSB__LEN 8
+#define BNO055_SIC_MATRIX_2_MSB__REG BNO055_SIC_MATRIX_2_MSB_ADDR
+
+#define BNO055_SIC_MATRIX_3_LSB__POS 0
+#define BNO055_SIC_MATRIX_3_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_3_LSB__LEN 8
+#define BNO055_SIC_MATRIX_3_LSB__REG BNO055_SIC_MATRIX_3_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_3_MSB__POS 0
+#define BNO055_SIC_MATRIX_3_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_3_MSB__LEN 8
+#define BNO055_SIC_MATRIX_3_MSB__REG BNO055_SIC_MATRIX_3_MSB_ADDR
+
+#define BNO055_SIC_MATRIX_4_LSB__POS 0
+#define BNO055_SIC_MATRIX_4_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_4_LSB__LEN 8
+#define BNO055_SIC_MATRIX_4_LSB__REG BNO055_SIC_MATRIX_4_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_4_MSB__POS 0
+#define BNO055_SIC_MATRIX_4_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_4_MSB__LEN 8
+#define BNO055_SIC_MATRIX_4_MSB__REG BNO055_SIC_MATRIX_4_MSB_ADDR
+
+#define BNO055_SIC_MATRIX_5_LSB__POS 0
+#define BNO055_SIC_MATRIX_5_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_5_LSB__LEN 8
+#define BNO055_SIC_MATRIX_5_LSB__REG BNO055_SIC_MATRIX_5_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_5_MSB__POS 0
+#define BNO055_SIC_MATRIX_5_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_5_MSB__LEN 8
+#define BNO055_SIC_MATRIX_5_MSB__REG BNO055_SIC_MATRIX_5_MSB_ADDR
+
+#define BNO055_SIC_MATRIX_6_LSB__POS 0
+#define BNO055_SIC_MATRIX_6_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_6_LSB__LEN 8
+#define BNO055_SIC_MATRIX_6_LSB__REG BNO055_SIC_MATRIX_6_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_6_MSB__POS 0
+#define BNO055_SIC_MATRIX_6_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_6_MSB__LEN 8
+#define BNO055_SIC_MATRIX_6_MSB__REG BNO055_SIC_MATRIX_6_MSB_ADDR
+
+#define BNO055_SIC_MATRIX_7_LSB__POS 0
+#define BNO055_SIC_MATRIX_7_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_7_LSB__LEN 8
+#define BNO055_SIC_MATRIX_7_LSB__REG BNO055_SIC_MATRIX_7_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_7_MSB__POS 0
+#define BNO055_SIC_MATRIX_7_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_7_MSB__LEN 8
+#define BNO055_SIC_MATRIX_7_MSB__REG BNO055_SIC_MATRIX_7_MSB_ADDR
+
+#define BNO055_SIC_MATRIX_8_LSB__POS 0
+#define BNO055_SIC_MATRIX_8_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_8_LSB__LEN 8
+#define BNO055_SIC_MATRIX_8_LSB__REG BNO055_SIC_MATRIX_8_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_8_MSB__POS 0
+#define BNO055_SIC_MATRIX_8_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_8_MSB__LEN 8
+#define BNO055_SIC_MATRIX_8_MSB__REG BNO055_SIC_MATRIX_8_MSB_ADDR
+
+/*Accel Offset registers*/
+#define BNO055_ACCEL_OFFSET_X_LSB__POS 0
+#define BNO055_ACCEL_OFFSET_X_LSB__MSK 0XFF
+#define BNO055_ACCEL_OFFSET_X_LSB__LEN 8
+#define BNO055_ACCEL_OFFSET_X_LSB__REG ACCEL_OFFSET_X_LSB_ADDR
+
+#define BNO055_ACCEL_OFFSET_X_MSB__POS 0
+#define BNO055_ACCEL_OFFSET_X_MSB__MSK 0XFF
+#define BNO055_ACCEL_OFFSET_X_MSB__LEN 8
+#define BNO055_ACCEL_OFFSET_X_MSB__REG ACCEL_OFFSET_X_MSB_ADDR
+
+#define BNO055_ACCEL_OFFSET_Y_LSB__POS 0
+#define BNO055_ACCEL_OFFSET_Y_LSB__MSK 0XFF
+#define BNO055_ACCEL_OFFSET_Y_LSB__LEN 8
+#define BNO055_ACCEL_OFFSET_Y_LSB__REG ACCEL_OFFSET_Y_LSB_ADDR
+
+#define BNO055_ACCEL_OFFSET_Y_MSB__POS 0
+#define BNO055_ACCEL_OFFSET_Y_MSB__MSK 0XFF
+#define BNO055_ACCEL_OFFSET_Y_MSB__LEN 8
+#define BNO055_ACCEL_OFFSET_Y_MSB__REG ACCEL_OFFSET_Y_MSB_ADDR
+
+#define BNO055_ACCEL_OFFSET_Z_LSB__POS 0
+#define BNO055_ACCEL_OFFSET_Z_LSB__MSK 0XFF
+#define BNO055_ACCEL_OFFSET_Z_LSB__LEN 8
+#define BNO055_ACCEL_OFFSET_Z_LSB__REG ACCEL_OFFSET_Z_LSB_ADDR
+
+#define BNO055_ACCEL_OFFSET_Z_MSB__POS 0
+#define BNO055_ACCEL_OFFSET_Z_MSB__MSK 0XFF
+#define BNO055_ACCEL_OFFSET_Z_MSB__LEN 8
+#define BNO055_ACCEL_OFFSET_Z_MSB__REG ACCEL_OFFSET_Z_MSB_ADDR
+
+/*Mag Offset registers*/
+#define BNO055_MAG_OFFSET_X_LSB__POS 0
+#define BNO055_MAG_OFFSET_X_LSB__MSK 0XFF
+#define BNO055_MAG_OFFSET_X_LSB__LEN 8
+#define BNO055_MAG_OFFSET_X_LSB__REG MAG_OFFSET_X_LSB_ADDR
+
+#define BNO055_MAG_OFFSET_X_MSB__POS 0
+#define BNO055_MAG_OFFSET_X_MSB__MSK 0XFF
+#define BNO055_MAG_OFFSET_X_MSB__LEN 8
+#define BNO055_MAG_OFFSET_X_MSB__REG MAG_OFFSET_X_MSB_ADDR
+
+#define BNO055_MAG_OFFSET_Y_LSB__POS 0
+#define BNO055_MAG_OFFSET_Y_LSB__MSK 0XFF
+#define BNO055_MAG_OFFSET_Y_LSB__LEN 8
+#define BNO055_MAG_OFFSET_Y_LSB__REG MAG_OFFSET_Y_LSB_ADDR
+
+#define BNO055_MAG_OFFSET_Y_MSB__POS 0
+#define BNO055_MAG_OFFSET_Y_MSB__MSK 0XFF
+#define BNO055_MAG_OFFSET_Y_MSB__LEN 8
+#define BNO055_MAG_OFFSET_Y_MSB__REG MAG_OFFSET_Y_MSB_ADDR
+
+#define BNO055_MAG_OFFSET_Z_LSB__POS 0
+#define BNO055_MAG_OFFSET_Z_LSB__MSK 0XFF
+#define BNO055_MAG_OFFSET_Z_LSB__LEN 8
+#define BNO055_MAG_OFFSET_Z_LSB__REG MAG_OFFSET_Z_LSB_ADDR
+
+#define BNO055_MAG_OFFSET_Z_MSB__POS 0
+#define BNO055_MAG_OFFSET_Z_MSB__MSK 0XFF
+#define BNO055_MAG_OFFSET_Z_MSB__LEN 8
+#define BNO055_MAG_OFFSET_Z_MSB__REG MAG_OFFSET_Z_MSB_ADDR
+
+/* Gyro Offset registers*/
+#define BNO055_GYRO_OFFSET_X_LSB__POS 0
+#define BNO055_GYRO_OFFSET_X_LSB__MSK 0XFF
+#define BNO055_GYRO_OFFSET_X_LSB__LEN 8
+#define BNO055_GYRO_OFFSET_X_LSB__REG GYRO_OFFSET_X_LSB_ADDR
+
+#define BNO055_GYRO_OFFSET_X_MSB__POS 0
+#define BNO055_GYRO_OFFSET_X_MSB__MSK 0XFF
+#define BNO055_GYRO_OFFSET_X_MSB__LEN 8
+#define BNO055_GYRO_OFFSET_X_MSB__REG GYRO_OFFSET_X_MSB_ADDR
+
+#define BNO055_GYRO_OFFSET_Y_LSB__POS 0
+#define BNO055_GYRO_OFFSET_Y_LSB__MSK 0XFF
+#define BNO055_GYRO_OFFSET_Y_LSB__LEN 8
+#define BNO055_GYRO_OFFSET_Y_LSB__REG GYRO_OFFSET_Y_LSB_ADDR
+
+#define BNO055_GYRO_OFFSET_Y_MSB__POS 0
+#define BNO055_GYRO_OFFSET_Y_MSB__MSK 0XFF
+#define BNO055_GYRO_OFFSET_Y_MSB__LEN 8
+#define BNO055_GYRO_OFFSET_Y_MSB__REG GYRO_OFFSET_Y_MSB_ADDR
+
+#define BNO055_GYRO_OFFSET_Z_LSB__POS 0
+#define BNO055_GYRO_OFFSET_Z_LSB__MSK 0XFF
+#define BNO055_GYRO_OFFSET_Z_LSB__LEN 8
+#define BNO055_GYRO_OFFSET_Z_LSB__REG GYRO_OFFSET_Z_LSB_ADDR
+
+#define BNO055_GYRO_OFFSET_Z_MSB__POS 0
+#define BNO055_GYRO_OFFSET_Z_MSB__MSK 0XFF
+#define BNO055_GYRO_OFFSET_Z_MSB__LEN 8
+#define BNO055_GYRO_OFFSET_Z_MSB__REG GYRO_OFFSET_Z_MSB_ADDR
+
+/* Radius register definition*/
+#define BNO055_ACCEL_RADIUS_LSB__POS 0
+#define BNO055_ACCEL_RADIUS_LSB__MSK 0XFF
+#define BNO055_ACCEL_RADIUS_LSB__LEN 8
+#define BNO055_ACCEL_RADIUS_LSB__REG ACCEL_RADIUS_LSB_ADDR
+
+#define BNO055_ACCEL_RADIUS_MSB__POS 0
+#define BNO055_ACCEL_RADIUS_MSB__MSK 0XFF
+#define BNO055_ACCEL_RADIUS_MSB__LEN 8
+#define BNO055_ACCEL_RADIUS_MSB__REG ACCEL_RADIUS_MSB_ADDR
+
+#define BNO055_MAG_RADIUS_LSB__POS 0
+#define BNO055_MAG_RADIUS_LSB__MSK 0XFF
+#define BNO055_MAG_RADIUS_LSB__LEN 8
+#define BNO055_MAG_RADIUS_LSB__REG MAG_RADIUS_LSB_ADDR
+
+#define BNO055_MAG_RADIUS_MSB__POS 0
+#define BNO055_MAG_RADIUS_MSB__MSK 0XFF
+#define BNO055_MAG_RADIUS_MSB__LEN 8
+#define BNO055_MAG_RADIUS_MSB__REG MAG_RADIUS_MSB_ADDR
+
+/* PAGE0 DATA REGISTERS DEFINITION END*/
+/*************************************************/
+/**\name PAGE1 DATA REGISTERS DEFINITION */
+/*************************************************/
+/* Configuration registers*/
+/* Accel range configuration register*/
+#define BNO055_ACCEL_RANGE__POS 0
+#define BNO055_ACCEL_RANGE__MSK 0X03
+#define BNO055_ACCEL_RANGE__LEN 2
+#define BNO055_ACCEL_RANGE__REG ACCEL_CONFIG_ADDR
+
+/* Accel bandwidth configuration register*/
+#define BNO055_ACCEL_BW__POS 2
+#define BNO055_ACCEL_BW__MSK 0X1C
+#define BNO055_ACCEL_BW__LEN 3
+#define BNO055_ACCEL_BW__REG ACCEL_CONFIG_ADDR
+
+/* Accel power mode configuration register*/
+#define BNO055_ACCEL_POWER_MODE__POS 5
+#define BNO055_ACCEL_POWER_MODE__MSK 0XE0
+#define BNO055_ACCEL_POWER_MODE__LEN 3
+#define BNO055_ACCEL_POWER_MODE__REG ACCEL_CONFIG_ADDR
+
+/* Mag data output rate configuration register*/
+#define BNO055_MAG_DATA_OUTPUT_RATE__POS 0
+#define BNO055_MAG_DATA_OUTPUT_RATE__MSK 0X07
+#define BNO055_MAG_DATA_OUTPUT_RATE__LEN 3
+#define BNO055_MAG_DATA_OUTPUT_RATE__REG MAG_CONFIG_ADDR
+
+/* Mag operation mode configuration register*/
+#define BNO055_MAG_OPERATION_MODE__POS 3
+#define BNO055_MAG_OPERATION_MODE__MSK 0X18
+#define BNO055_MAG_OPERATION_MODE__LEN 2
+#define BNO055_MAG_OPERATION_MODE__REG MAG_CONFIG_ADDR
+
+/* Mag power mode configuration register*/
+#define BNO055_MAG_POWER_MODE__POS 5
+#define BNO055_MAG_POWER_MODE__MSK 0X60
+#define BNO055_MAG_POWER_MODE__LEN 2
+#define BNO055_MAG_POWER_MODE__REG MAG_CONFIG_ADDR
+
+/* Gyro range configuration register*/
+#define BNO055_GYRO_RANGE__POS 0
+#define BNO055_GYRO_RANGE__MSK 0X07
+#define BNO055_GYRO_RANGE__LEN 3
+#define BNO055_GYRO_RANGE__REG GYRO_CONFIG_ADDR
+
+/* Gyro bandwidth configuration register*/
+#define BNO055_GYRO_BW__POS 3
+#define BNO055_GYRO_BW__MSK 0X38
+#define BNO055_GYRO_BW__LEN 3
+#define BNO055_GYRO_BW__REG GYRO_CONFIG_ADDR
+
+/* Gyro power mode configuration register*/
+#define BNO055_GYRO_POWER_MODE__POS 0
+#define BNO055_GYRO_POWER_MODE__MSK 0X07
+#define BNO055_GYRO_POWER_MODE__LEN 3
+#define BNO055_GYRO_POWER_MODE__REG GYRO_MODE_CONFIG_ADDR
+
+/* Sleep configuration registers*/
+/* Accel sleep mode configuration register*/
+#define BNO055_ACCEL_SLEEP_MODE__POS 0
+#define BNO055_ACCEL_SLEEP_MODE__MSK 0X01
+#define BNO055_ACCEL_SLEEP_MODE__LEN 1
+#define BNO055_ACCEL_SLEEP_MODE__REG ACCEL_SLEEP_CONFIG_ADDR
+
+/* Accel sleep duration configuration register*/
+#define BNO055_ACCEL_SLEEP_DURN__POS 1
+#define BNO055_ACCEL_SLEEP_DURN__MSK 0X1E
+#define BNO055_ACCEL_SLEEP_DURN__LEN 4
+#define BNO055_ACCEL_SLEEP_DURN__REG ACCEL_SLEEP_CONFIG_ADDR
+
+/* Gyro sleep duration configuration register*/
+#define BNO055_GYRO_SLEEP_DURN__POS 0
+#define BNO055_GYRO_SLEEP_DURN__MSK 0X07
+#define BNO055_GYRO_SLEEP_DURN__LEN 3
+#define BNO055_GYRO_SLEEP_DURN__REG GYRO_SLEEP_CONFIG_ADDR
+
+/* Gyro auto sleep duration configuration register*/
+#define BNO055_GYRO_AUTO_SLEEP_DURN__POS 3
+#define BNO055_GYRO_AUTO_SLEEP_DURN__MSK 0X38
+#define BNO055_GYRO_AUTO_SLEEP_DURN__LEN 3
+#define BNO055_GYRO_AUTO_SLEEP_DURN__REG GYRO_SLEEP_CONFIG_ADDR
+
+/* Mag sleep mode configuration register*/
+#define BNO055_MAG_SLEEP_MODE__POS 0
+#define BNO055_MAG_SLEEP_MODE__MSK 0X01
+#define BNO055_MAG_SLEEP_MODE__LEN 1
+#define BNO055_MAG_SLEEP_MODE__REG MAG_SLEEP_CONFIG_ADDR
+
+/* Mag sleep duration configuration register*/
+#define BNO055_MAG_SLEEP_DURN__POS 1
+#define BNO055_MAG_SLEEP_DURN__MSK 0X1E
+#define BNO055_MAG_SLEEP_DURN__LEN 4
+#define BNO055_MAG_SLEEP_DURN__REG MAG_SLEEP_CONFIG_ADDR
+
+/* Interrupt registers*/
+/* Gyro any motion interrupt msk register*/
+#define BNO055_GYRO_ANY_MOTION_INTR_MASK__POS 2
+#define BNO055_GYRO_ANY_MOTION_INTR_MASK__MSK 0X04
+#define BNO055_GYRO_ANY_MOTION_INTR_MASK__LEN 1
+#define BNO055_GYRO_ANY_MOTION_INTR_MASK__REG INT_MASK_ADDR
+
+/* Gyro high rate interrupt msk register*/
+#define BNO055_GYRO_HIGHRATE_INTR_MASK__POS 3
+#define BNO055_GYRO_HIGHRATE_INTR_MASK__MSK 0X08
+#define BNO055_GYRO_HIGHRATE_INTR_MASK__LEN 1
+#define BNO055_GYRO_HIGHRATE_INTR_MASK__REG INT_MASK_ADDR
+
+/* Accel high g interrupt msk register*/
+#define BNO055_ACCEL_HIGH_G_INTR_MASK__POS 5
+#define BNO055_ACCEL_HIGH_G_INTR_MASK__MSK 0X20
+#define BNO055_ACCEL_HIGH_G_INTR_MASK__LEN 1
+#define BNO055_ACCEL_HIGH_G_INTR_MASK__REG INT_MASK_ADDR
+
+/* Accel any motion interrupt msk register*/
+#define BNO055_ACCEL_ANY_MOTION_INTR_MASK__POS 6
+#define BNO055_ACCEL_ANY_MOTION_INTR_MASK__MSK 0X40
+#define BNO055_ACCEL_ANY_MOTION_INTR_MASK__LEN 1
+#define BNO055_ACCEL_ANY_MOTION_INTR_MASK__REG INT_MASK_ADDR
+
+/* Accel any motion interrupt msk register*/
+#define BNO055_ACCEL_NO_MOTION_INTR_MASK__POS 7
+#define BNO055_ACCEL_NO_MOTION_INTR_MASK__MSK 0X80
+#define BNO055_ACCEL_NO_MOTION_INTR_MASK__LEN 1
+#define BNO055_ACCEL_NO_MOTION_INTR_MASK__REG INT_MASK_ADDR
+
+/* Gyro any motion interrupt register*/
+#define BNO055_GYRO_ANY_MOTION_INTR__POS 2
+#define BNO055_GYRO_ANY_MOTION_INTR__MSK 0X04
+#define BNO055_GYRO_ANY_MOTION_INTR__LEN 1
+#define BNO055_GYRO_ANY_MOTION_INTR__REG INT_ADDR
+
+/* Gyro high rate interrupt register*/
+#define BNO055_GYRO_HIGHRATE_INTR__POS 3
+#define BNO055_GYRO_HIGHRATE_INTR__MSK 0X08
+#define BNO055_GYRO_HIGHRATE_INTR__LEN 1
+#define BNO055_GYRO_HIGHRATE_INTR__REG INT_ADDR
+
+/* Accel high g interrupt register*/
+#define BNO055_ACCEL_HIGH_G_INTR__POS 5
+#define BNO055_ACCEL_HIGH_G_INTR__MSK 0X20
+#define BNO055_ACCEL_HIGH_G_INTR__LEN 1
+#define BNO055_ACCEL_HIGH_G_INTR__REG INT_ADDR
+
+/* Accel any motion interrupt register*/
+#define BNO055_ACCEL_ANY_MOTION_INTR__POS 6
+#define BNO055_ACCEL_ANY_MOTION_INTR__MSK 0X40
+#define BNO055_ACCEL_ANY_MOTION_INTR__LEN 1
+#define BNO055_ACCEL_ANY_MOTION_INTR__REG INT_ADDR
+
+/*Accel any motion interrupt register*/
+#define BNO055_ACCEL_NO_MOTION_INTR__POS 7
+#define BNO055_ACCEL_NO_MOTION_INTR__MSK 0X80
+#define BNO055_ACCEL_NO_MOTION_INTR__LEN 1
+#define BNO055_ACCEL_NO_MOTION_INTR__REG INT_ADDR
+
+/*Accel any motion threshold setting*/
+#define BNO055_ACCEL_ANY_MOTION_THRES__POS 0
+#define BNO055_ACCEL_ANY_MOTION_THRES__MSK 0XFF
+#define BNO055_ACCEL_ANY_MOTION_THRES__LEN 8
+#define BNO055_ACCEL_ANY_MOTION_THRES__REG ACCEL_ANY_MOTION_THRES_ADDR
+
+/*Accel interrupt setting register*/
+#define BNO055_ACCEL_ANY_MOTION_DURN_SET__POS 0
+#define BNO055_ACCEL_ANY_MOTION_DURN_SET__MSK 0X03
+#define BNO055_ACCEL_ANY_MOTION_DURN_SET__LEN 2
+#define BNO055_ACCEL_ANY_MOTION_DURN_SET__REG ACCEL_INTR_SETTINGS_ADDR
+
+/* Accel AM/NM axis selection register*/
+#define BNO055_ACCEL_ANY_MOTION_X_AXIS__POS 2
+#define BNO055_ACCEL_ANY_MOTION_X_AXIS__MSK 0X04
+#define BNO055_ACCEL_ANY_MOTION_X_AXIS__LEN 1
+#define BNO055_ACCEL_ANY_MOTION_X_AXIS__REG ACCEL_INTR_SETTINGS_ADDR
+
+#define BNO055_ACCEL_ANY_MOTION_Y_AXIS__POS 3
+#define BNO055_ACCEL_ANY_MOTION_Y_AXIS__MSK 0X08
+#define BNO055_ACCEL_ANY_MOTION_Y_AXIS__LEN 1
+#define BNO055_ACCEL_ANY_MOTION_Y_AXIS__REG ACCEL_INTR_SETTINGS_ADDR
+
+#define BNO055_ACCEL_ANY_MOTION_Z_AXIS__POS 4
+#define BNO055_ACCEL_ANY_MOTION_Z_AXIS__MSK 0X10
+#define BNO055_ACCEL_ANY_MOTION_Z_AXIS__LEN 1
+#define BNO055_ACCEL_ANY_MOTION_Z_AXIS__REG ACCEL_INTR_SETTINGS_ADDR
+
+/* Accel high g axis selection register*/
+#define BNO055_ACCEL_HIGH_G_X_AXIS__POS 5
+#define BNO055_ACCEL_HIGH_G_X_AXIS__MSK 0X20
+#define BNO055_ACCEL_HIGH_G_X_AXIS__LEN 1
+#define BNO055_ACCEL_HIGH_G_X_AXIS__REG ACCEL_INTR_SETTINGS_ADDR
+
+#define BNO055_ACCEL_HIGH_G_Y_AXIS__POS 6
+#define BNO055_ACCEL_HIGH_G_Y_AXIS__MSK 0X40
+#define BNO055_ACCEL_HIGH_G_Y_AXIS__LEN 1
+#define BNO055_ACCEL_HIGH_G_Y_AXIS__REG ACCEL_INTR_SETTINGS_ADDR
+
+#define BNO055_ACCEL_HIGH_G_Z_AXIS__POS 7
+#define BNO055_ACCEL_HIGH_G_Z_AXIS__MSK 0X80
+#define BNO055_ACCEL_HIGH_G_Z_AXIS__LEN 1
+#define BNO055_ACCEL_HIGH_G_Z_AXIS__REG ACCEL_INTR_SETTINGS_ADDR
+
+/* Accel High g duration setting register*/
+#define BNO055_ACCEL_HIGH_G_DURN__POS 0
+#define BNO055_ACCEL_HIGH_G_DURN__MSK 0XFF
+#define BNO055_ACCEL_HIGH_G_DURN__LEN 8
+#define BNO055_ACCEL_HIGH_G_DURN__REG ACCEL_HIGH_G_DURN_ADDR
+
+/* Accel High g threshold setting register*/
+#define BNO055_ACCEL_HIGH_G_THRES__POS 0
+#define BNO055_ACCEL_HIGH_G_THRES__MSK 0XFF
+#define BNO055_ACCEL_HIGH_G_THRES__LEN 8
+#define BNO055_ACCEL_HIGH_G_THRES__REG ACCEL_HIGH_G_THRES_ADDR
+
+/* Accel no/slow motion threshold setting*/
+#define BNO055_ACCEL_SLOW_NO_MOTION_THRES__POS 0
+#define BNO055_ACCEL_SLOW_NO_MOTION_THRES__MSK 0XFF
+#define BNO055_ACCEL_SLOW_NO_MOTION_THRES__LEN 8
+#define BNO055_ACCEL_SLOW_NO_MOTION_THRES__REG \
+ACCEL_NO_MOTION_THRES_ADDR
+
+/* Accel no/slow motion enable setting*/
+#define BNO055_ACCEL_SLOW_NO_MOTION_ENABLE__POS 0
+#define BNO055_ACCEL_SLOW_NO_MOTION_ENABLE__MSK 0X01
+#define BNO055_ACCEL_SLOW_NO_MOTION_ENABLE__LEN 1
+#define BNO055_ACCEL_SLOW_NO_MOTION_ENABLE__REG ACCEL_NO_MOTION_SET_ADDR
+
+/* Accel no/slow motion duration setting*/
+#define BNO055_ACCEL_SLOW_NO_MOTION_DURN__POS 1
+#define BNO055_ACCEL_SLOW_NO_MOTION_DURN__MSK 0X7E
+#define BNO055_ACCEL_SLOW_NO_MOTION_DURN__LEN 6
+#define BNO055_ACCEL_SLOW_NO_MOTION_DURN__REG ACCEL_NO_MOTION_SET_ADDR
+
+/*Gyro interrupt setting register*/
+/*Gyro any motion axis setting*/
+#define BNO055_GYRO_ANY_MOTION_X_AXIS__POS 0
+#define BNO055_GYRO_ANY_MOTION_X_AXIS__MSK 0X01
+#define BNO055_GYRO_ANY_MOTION_X_AXIS__LEN 1
+#define BNO055_GYRO_ANY_MOTION_X_AXIS__REG GYRO_INTR_SETING_ADDR
+
+#define BNO055_GYRO_ANY_MOTION_Y_AXIS__POS 1
+#define BNO055_GYRO_ANY_MOTION_Y_AXIS__MSK 0X02
+#define BNO055_GYRO_ANY_MOTION_Y_AXIS__LEN 1
+#define BNO055_GYRO_ANY_MOTION_Y_AXIS__REG GYRO_INTR_SETING_ADDR
+
+#define BNO055_GYRO_ANY_MOTION_Z_AXIS__POS 2
+#define BNO055_GYRO_ANY_MOTION_Z_AXIS__MSK 0X04
+#define BNO055_GYRO_ANY_MOTION_Z_AXIS__LEN 1
+#define BNO055_GYRO_ANY_MOTION_Z_AXIS__REG GYRO_INTR_SETING_ADDR
+
+/*Gyro high rate axis setting*/
+#define BNO055_GYRO_HIGHRATE_X_AXIS__POS 3
+#define BNO055_GYRO_HIGHRATE_X_AXIS__MSK 0X08
+#define BNO055_GYRO_HIGHRATE_X_AXIS__LEN 1
+#define BNO055_GYRO_HIGHRATE_X_AXIS__REG GYRO_INTR_SETING_ADDR
+
+#define BNO055_GYRO_HIGHRATE_Y_AXIS__POS 4
+#define BNO055_GYRO_HIGHRATE_Y_AXIS__MSK 0X10
+#define BNO055_GYRO_HIGHRATE_Y_AXIS__LEN 1
+#define BNO055_GYRO_HIGHRATE_Y_AXIS__REG GYRO_INTR_SETING_ADDR
+
+#define BNO055_GYRO_HIGHRATE_Z_AXIS__POS 5
+#define BNO055_GYRO_HIGHRATE_Z_AXIS__MSK 0X20
+#define BNO055_GYRO_HIGHRATE_Z_AXIS__LEN 1
+#define BNO055_GYRO_HIGHRATE_Z_AXIS__REG GYRO_INTR_SETING_ADDR
+
+/* Gyro filter setting*/
+#define BNO055_GYRO_ANY_MOTION_FILTER__POS 6
+#define BNO055_GYRO_ANY_MOTION_FILTER__MSK 0X40
+#define BNO055_GYRO_ANY_MOTION_FILTER__LEN 1
+#define BNO055_GYRO_ANY_MOTION_FILTER__REG GYRO_INTR_SETING_ADDR
+
+#define BNO055_GYRO_HIGHRATE_FILTER__POS 7
+#define BNO055_GYRO_HIGHRATE_FILTER__MSK 0X80
+#define BNO055_GYRO_HIGHRATE_FILTER__LEN 1
+#define BNO055_GYRO_HIGHRATE_FILTER__REG GYRO_INTR_SETING_ADDR
+
+/* Gyro high rate X axis settings*/
+#define BNO055_GYRO_HIGHRATE_X_THRES__POS 0
+#define BNO055_GYRO_HIGHRATE_X_THRES__MSK 0X1F
+#define BNO055_GYRO_HIGHRATE_X_THRES__LEN 5
+#define BNO055_GYRO_HIGHRATE_X_THRES__REG GYRO_HIGHRATE_X_SET_ADDR
+
+#define BNO055_GYRO_HIGHRATE_X_HYST__POS 5
+#define BNO055_GYRO_HIGHRATE_X_HYST__MSK 0X60
+#define BNO055_GYRO_HIGHRATE_X_HYST__LEN 2
+#define BNO055_GYRO_HIGHRATE_X_HYST__REG GYRO_HIGHRATE_X_SET_ADDR
+
+#define BNO055_GYRO_HIGHRATE_X_DURN__POS 0
+#define BNO055_GYRO_HIGHRATE_X_DURN__MSK 0XFF
+#define BNO055_GYRO_HIGHRATE_X_DURN__LEN 8
+#define BNO055_GYRO_HIGHRATE_X_DURN__REG GYRO_DURN_X_ADDR
+
+/* Gyro high rate Y axis settings*/
+#define BNO055_GYRO_HIGHRATE_Y_THRES__POS 0
+#define BNO055_GYRO_HIGHRATE_Y_THRES__MSK 0X1F
+#define BNO055_GYRO_HIGHRATE_Y_THRES__LEN 5
+#define BNO055_GYRO_HIGHRATE_Y_THRES__REG GYRO_HIGHRATE_Y_SET_ADDR
+
+#define BNO055_GYRO_HIGHRATE_Y_HYST__POS 5
+#define BNO055_GYRO_HIGHRATE_Y_HYST__MSK 0X60
+#define BNO055_GYRO_HIGHRATE_Y_HYST__LEN 2
+#define BNO055_GYRO_HIGHRATE_Y_HYST__REG GYRO_HIGHRATE_Y_SET_ADDR
+
+#define BNO055_GYRO_HIGHRATE_Y_DURN__POS 0
+#define BNO055_GYRO_HIGHRATE_Y_DURN__MSK 0XFF
+#define BNO055_GYRO_HIGHRATE_Y_DURN__LEN 8
+#define BNO055_GYRO_HIGHRATE_Y_DURN__REG GYRO_DURN_Y_ADDR
+
+/* Gyro high rate Z axis settings*/
+#define BNO055_GYRO_HIGHRATE_Z_THRES__POS 0
+#define BNO055_GYRO_HIGHRATE_Z_THRES__MSK 0X1F
+#define BNO055_GYRO_HIGHRATE_Z_THRES__LEN 5
+#define BNO055_GYRO_HIGHRATE_Z_THRES__REG GYRO_HIGHRATE_Z_SET_ADDR
+
+#define BNO055_GYRO_HIGHRATE_Z_HYST__POS 5
+#define BNO055_GYRO_HIGHRATE_Z_HYST__MSK 0X60
+#define BNO055_GYRO_HIGHRATE_Z_HYST__LEN 2
+#define BNO055_GYRO_HIGHRATE_Z_HYST__REG GYRO_HIGHRATE_Z_SET_ADDR
+
+#define BNO055_GYRO_HIGHRATE_Z_DURN__POS 0
+#define BNO055_GYRO_HIGHRATE_Z_DURN__MSK 0XFF
+#define BNO055_GYRO_HIGHRATE_Z_DURN__LEN 8
+#define BNO055_GYRO_HIGHRATE_Z_DURN__REG GYRO_DURN_Z_ADDR
+
+/*Gyro any motion threshold setting*/
+#define BNO055_GYRO_ANY_MOTION_THRES__POS 0
+#define BNO055_GYRO_ANY_MOTION_THRES__MSK 0X7F
+#define BNO055_GYRO_ANY_MOTION_THRES__LEN 7
+#define BNO055_GYRO_ANY_MOTION_THRES__REG \
+GYRO_ANY_MOTION_THRES_ADDR
+
+/* Gyro any motion slope sample setting*/
+#define BNO055_GYRO_SLOPE_SAMPLES__POS 0
+#define BNO055_GYRO_SLOPE_SAMPLES__MSK 0X03
+#define BNO055_GYRO_SLOPE_SAMPLES__LEN 2
+#define BNO055_GYRO_SLOPE_SAMPLES__REG GYRO_ANY_MOTION_SET_ADDR
+
+/* Gyro awake duration setting*/
+#define BNO055_GYRO_AWAKE_DURN__POS 2
+#define BNO055_GYRO_AWAKE_DURN__MSK 0X0C
+#define BNO055_GYRO_AWAKE_DURN__LEN 2
+#define BNO055_GYRO_AWAKE_DURN__REG GYRO_ANY_MOTION_SET_ADDR
+
+/* PAGE1 DATA REGISTERS DEFINITION END*/
+/*************************************************/
+/**\name GET AND SET BITSLICE FUNCTIONS */
+/*************************************************/
+#define BNO055_GET_BITSLICE(regvar, bitname)\
+((regvar & bitname##__MSK) >> bitname##__POS)
+
+
+#define BNO055_SET_BITSLICE(regvar, bitname, val)\
+((regvar & ~bitname##__MSK) | ((val<<bitname##__POS)&bitname##__MSK))
+/*************************************************/
+/**\name FUNCTION DECLARATION */
+/*************************************************/
+/**************************************************/
+/**\name INITIALIZATION AND REVISION ID FUNCTIONS */
+/**************************************************/
+/*!
+ * @brief
+ * This function is used for initialize
+ * bus read, bus write function pointers,device
+ * address,accel revision id, gyro revision id
+ * mag revision id, software revision id, boot loader
+ * revision id and page id
+ *
+ * @param bno055 - structure pointer
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While changing the parameter of the bno055_t
+ * consider the following point:
+ * Changing the reference value of the parameter
+ * will changes the local copy or local reference
+ * make sure your changes will not
+ * affect the reference value of the parameter
+ * (Better case don't change the reference value of the parameter)
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_init(struct bno055_t *bno055);
+/*!
+ * @brief
+ * This API gives data to the given register and
+ * the data is written in the corresponding register address
+ *
+ * @param v_addr_u8 : Address of the register
+ * @param p_data_u8 : Data to be written to the register
+ * @param v_len_u8 : Length of the Data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+*/
+BNO055_RETURN_FUNCTION_TYPE bno055_write_register(u8 v_addr_u8,
+u8 *p_data_u8, u8 v_len_u8);
+/*!
+ * @brief This API reads the data from
+ * the given register address
+ *
+ * @param v_addr_u8 : Address of the register
+ * @param p_data_u8 : address of the variable,
+ * read value will be kept
+ * @param v_len_u8 : Length of the data
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_register(u8 v_addr_u8,
+u8 *p_data_u8, u8 v_len_u8);
+/*!
+ * @brief This API reads chip id
+ * from register 0x00 it is a byte of data
+ *
+ *
+ * @param v_chip_id_u8 : The chip id value 0xA0
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_chip_id(u8 *v_chip_id_u8);
+/*!
+ * @brief This API reads software revision id
+ * from register 0x04 and 0x05 it is a two byte of data
+ *
+ * @param v_sw_id_u8 : The SW revision id
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_sw_rev_id(u16 *v_sw_id_u8);
+/*!
+ * @brief This API reads page id
+ * from register 0x07 it is a byte of data
+ *
+ *
+ * @param v_page_id_u8 : The value of page id
+ *
+ * PAGE_ZERO -> 0x00
+ * PAGE_ONE -> 0x01
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_page_id(u8 *v_page_id_u8);
+/*!
+ * @brief This API used to write
+ * the page id register 0x07
+ *
+ * @param v_page_id_u8 : The value of page id
+ *
+ * PAGE_ZERO -> 0x00
+ * PAGE_ONE -> 0x01
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_page_id(u8 v_page_id_u8);
+/*!
+ * @brief This API reads accel revision id
+ * from register 0x01 it is a byte of value
+ *
+ * @param v_accel_rev_id_u8 : The accel revision id 0xFB
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_rev_id(
+u8 *v_accel_rev_id_u8);
+/*!
+ * @brief This API reads mag revision id
+ * from register 0x02 it is a byte of value
+ *
+ * @param v_mag_rev_id_u8 : The mag revision id 0x32
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_rev_id(
+u8 *v_mag_rev_id_u8);
+/*!
+ * @brief This API reads gyro revision id
+ * from register 0x03 it is a byte of value
+ *
+ * @param v_gyro_rev_id_u8 : The gyro revision id 0xF0
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_rev_id(
+u8 *v_gyro_rev_id_u8);
+/*!
+ * @brief This API used to read boot loader revision id
+ * from register 0x06 it is a byte of value
+ *
+ * @param v_bl_rev_id_u8 : The boot loader revision id
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_bl_rev_id(
+u8 *v_bl_rev_id_u8);
+/**************************************************/
+/**\name ACCEL DATA READ FUNCTIONS */
+/**************************************************/
+/*!
+ * @brief This API reads acceleration data X values
+ * from register 0x08 and 0x09 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_accel_x_s16 : The X raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_x(s16 *v_accel_x_s16);
+/*!
+ * @brief This API reads acceleration data Y values
+ * from register 0x0A and 0x0B it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_accel_y_s16 : The Y raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_y(s16 *v_accel_y_s16);
+/*!
+ * @brief This API reads acceleration data z values
+ * from register 0x0C and 0x0D it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_accel_z_s16 : The z raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_z(s16 *v_accel_z_s16);
+/*!
+ * @brief This API reads acceleration data xyz values
+ * from register 0x08 to 0x0D it is a six byte data
+ *
+ *
+ * @param accel : The value of accel xyz data
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | The accel x data
+ * y | The accel y data
+ * z | The accel z data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_xyz(
+struct bno055_accel_t *accel);
+/**************************************************/
+/**\name MAG DATA READ FUNCTIONS */
+/**************************************************/
+/*!
+ * @brief This API reads mag data x values
+ * from register 0x0E and 0x0F it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_mag_x_s16 : The x raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_x(s16 *v_mag_x_s16);
+/*!
+ * @brief This API reads mag data y values
+ * from register 0x10 and 0x11 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_mag_y_s16 : The y raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_y(s16 *v_mag_y_s16);
+/*!
+ * @brief This API reads mag data z values
+ * from register 0x12 and 0x13 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_mag_z_s16 : The z raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_z(s16 *v_mag_z_s16);
+/*!
+ * @brief This API reads mag data xyz values
+ * from register 0x0E to 0x13 it is a six byte data
+ *
+ *
+ * @param mag : The mag xyz values
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | The mag x data
+ * y | The mag y data
+ * z | The mag z data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_xyz(struct bno055_mag_t *mag);
+/**************************************************/
+/**\name GYRO DATA READ FUNCTIONS */
+/**************************************************/
+/*!
+ * @brief This API reads gyro data x values
+ * from register 0x14 and 0x15 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_gyro_x_s16 : The x raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_x(s16 *v_gyro_x_s16);
+/*!
+ * @brief This API reads gyro data y values
+ * from register 0x16 and 0x17 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_gyro_y_s16 : The y raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_y(s16 *v_gyro_y_s16);
+/*!
+ * @brief This API reads gyro data z values
+ * from register 0x18 and 0x19 it is a two byte data
+ *
+ * @param v_gyro_z_s16 : The z raw data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_z(s16 *v_gyro_z_s16);
+/*!
+ * @brief This API reads gyro data xyz values
+ * from register 0x14 to 0x19 it is a six byte data
+ *
+ *
+ * @param gyro : The value of gyro xyz data's
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | The gyro x data
+ * y | The gyro y data
+ * z | The gyro z data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_xyz(struct bno055_gyro_t *gyro);
+/**************************************************/
+/**\name EULER DATA READ FUNCTIONS */
+/**************************************************/
+/*!
+ * @brief This API reads gyro data z values
+ * from register 0x1A and 0x1B it is a two byte data
+ *
+ * @param v_euler_h_s16 : The raw h data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_h(s16 *v_euler_h_s16);
+/*!
+ * @brief This API reads Euler data r values
+ * from register 0x1C and 0x1D it is a two byte data
+ *
+ * @param v_euler_r_s16 : The raw r data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_r(s16 *v_euler_r_s16);
+/*!
+ * @brief This API reads Euler data p values
+ * from register 0x1E and 0x1F it is a two byte data
+ *
+ * @param v_euler_p_s16 : The raw p data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_p(s16 *v_euler_p_s16);
+/*!
+ * @brief This API reads Euler data hrp values
+ * from register 0x1A to 0x1F it is a six byte data
+ *
+ *
+ * @param euler : The Euler hrp data's
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * h | The Euler h data
+ * r | The Euler r data
+ * p | The Euler p data
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_hrp(
+struct bno055_euler_t *euler);
+/**************************************************/
+/**\name QUATERNION DATA READ FUNCTIONS */
+/**************************************************/
+/*!
+ * @brief This API reads quaternion data w values
+ * from register 0x20 and 0x21 it is a two byte data
+ *
+ * @param v_quaternion_w_s16 : The raw w data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_w(
+s16 *v_quaternion_w_s16);
+/*!
+ * @brief This API reads quaternion data x values
+ * from register 0x22 and 0x23 it is a two byte data
+ *
+ * @param v_quaternion_x_s16 : The raw x data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_x(
+s16 *v_quaternion_x_s16);
+/*!
+ * @brief This API reads quaternion data y values
+ * from register 0x24 and 0x25 it is a two byte data
+ *
+ * @param v_quaternion_y_s16 : The raw y data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_y(
+s16 *v_quaternion_y_s16);
+/*!
+ * @brief This API reads quaternion data z values
+ * from register 0x26 and 0x27 it is a two byte data
+ *
+ * @param v_quaternion_z_s16 : The raw z data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_z(
+s16 *v_quaternion_z_s16);
+/*!
+ * @brief This API reads Quaternion data wxyz values
+ * from register 0x20 to 0x27 it is a six byte data
+ *
+ *
+ * @param quaternion : The value of quaternion wxyz data's
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * w | The quaternion w data
+ * x | The quaternion x data
+ * y | The quaternion y data
+ * z | The quaternion z data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_wxyz(
+struct bno055_quaternion_t *quaternion);
+/**************************************************/
+/**\name LINEAR ACCEL DATA READ FUNCTIONS */
+/**************************************************/
+/*!
+ * @brief This API reads Linear accel data x values
+ * from register 0x29 and 0x2A it is a two byte data
+ *
+ * @param v_linear_accel_x_s16 : The raw x data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_x(
+s16 *v_linear_accel_x_s16);
+/*!
+ * @brief This API reads Linear accel data x values
+ * from register 0x2B and 0x2C it is a two byte data
+ *
+ * @param v_linear_accel_y_s16 : The raw y data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_y(
+s16 *v_linear_accel_y_s16);
+/*!
+ * @brief This API reads Linear accel data x values
+ * from register 0x2C and 0x2D it is a two byte data
+ *
+ * @param v_linear_accel_z_s16 : The raw z data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_z(
+s16 *v_linear_accel_z_s16);
+/*!
+ * @brief This API reads Linear accel data xyz values
+ * from register 0x28 to 0x2D it is a six byte data
+ *
+ *
+ * @param linear_accel : The value of linear accel xyz data's
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | The linear accel x data
+ * y | The linear accel y data
+ * z | The linear accel z data
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_xyz(
+struct bno055_linear_accel_t *linear_accel);
+/**************************************************/
+/**\name GRAVITY DATA READ FUNCTIONS */
+/**************************************************/
+/*!
+ * @brief This API reads gravity data x values
+ * from register 0x2E and 0x2F it is a two byte data
+ *
+ * @param v_gravity_x_s16 : The raw x data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_x(
+s16 *v_gravity_x_s16);
+/*!
+ * @brief This API reads gravity data y values
+ * from register 0x30 and 0x31 it is a two byte data
+ *
+ * @param v_gravity_y_s16 : The raw y data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_y(
+s16 *v_gravity_y_s16);
+/*!
+ * @brief This API reads gravity data z values
+ * from register 0x32 and 0x33 it is a two byte data
+ *
+ * @param v_gravity_z_s16 : The raw z data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_z(
+s16 *v_gravity_z_s16);
+/*!
+ * @brief This API reads gravity data xyz values
+ * from register 0x2E to 0x33 it is a six byte data
+ *
+ *
+ * @param gravity : The value of gravity xyz data's
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | The gravity x data
+ * y | The gravity y data
+ * z | The gravity z data
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_xyz(
+struct bno055_gravity_t *gravity);
+/**************************************************/
+/**\name TEMPERATURE DATA READ FUNCTIONS */
+/**************************************************/
+/*!
+ * @brief This API reads temperature values
+ * from register 0x33 it is a byte data
+ *
+ * @param v_temp_s8 : The raw temperature data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_temp_data(s8 *v_temp_s8);
+#ifdef BNO055_FLOAT_ENABLE
+/********************************************************************/
+/**\name FUNCTIONS FOR READING ACCEL DATA OUTPUT AS FLOAT PRECISION */
+/********************************************************************/
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to meterpersecseq output as float
+ *
+ * @param v_accel_x_f : The accel x meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_x_msq(
+float *v_accel_x_f);
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to meterpersecseq output as float
+ *
+ * @param v_accel_y_f : The accel y meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_y_msq(
+float *v_accel_y_f);
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to meterpersecseq output as float
+ *
+ * @param v_accel_z_f : The accel z meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_z_msq(
+float *v_accel_z_f);
+/*!
+ * @brief This API is used to convert the accel y raw data
+ * to millig output as float
+ *
+ * @param v_accel_x_f : The accel y millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_x_mg(
+float *v_accel_x_f);
+/*!
+ * @brief This API is used to convert the accel y raw data
+ * to millig output as float
+ *
+ * @param v_accel_y_f : The accel y millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_y_mg(
+float *v_accel_y_f);
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to millig output as float
+ *
+ * @param v_accel_z_f : The accel z millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_z_mg(
+float *v_accel_z_f);
+/*!
+ * @brief This API is used to convert the accel xyz raw data
+ * to meterpersecseq output as float
+ *
+ * @param accel_xyz : The meterpersecseq data of accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of accel
+ * y | meterpersecseq data of accel
+ * z | meterpersecseq data of accel
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_xyz_msq(
+struct bno055_accel_float_t *accel_xyz);
+/*!
+ * @brief This API is used to convert the accel xyz raw data
+ * to millig output as float
+ *
+ * @param accel_xyz : The millig data of accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | millig data of accel
+ * y | millig data of accel
+ * z | millig data of accel
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_xyz_mg(
+struct bno055_accel_float_t *accel_xyz);
+/********************************************************************/
+/**\name FUNCTIONS FOR READING MAG DATA OUTPUT AS FLOAT PRECISION */
+/********************************************************************/
+/*!
+ * @brief This API is used to convert the mag x raw data
+ * to microTesla output as float
+ *
+ * @param v_mag_x_f : The mag x microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_x_uT(
+float *v_mag_x_f);
+/*!
+ * @brief This API is used to convert the mag y raw data
+ * to microTesla output as float
+ *
+ * @param v_mag_y_f : The mag y microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_y_uT(
+float *v_mag_y_f);
+/*!
+ * @brief This API is used to convert the mag z raw data
+ * to microTesla output as float
+ *
+ * @param v_mag_z_f : The mag z microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_z_uT(
+float *v_mag_z_f);
+/*!
+ * @brief This API is used to convert the mag yz raw data
+ * to microTesla output as float
+ *
+ * @param mag_xyz_data : The microTesla data of mag xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | microTesla data of mag
+ * y | microTesla data of mag
+ * z | microTesla data of mag
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_xyz_uT(
+struct bno055_mag_float_t *mag_xyz_data);
+/********************************************************************/
+/**\name FUNCTIONS FOR READING GYRO DATA OUTPUT AS FLOAT PRECISION */
+/********************************************************************/
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to dps output as float
+ *
+ * @param v_gyro_x_f : The gyro x dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_x_dps(
+float *v_gyro_x_f);
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to rps output as float
+ *
+ * @param v_gyro_x_f : The gyro x dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_x_rps(
+float *v_gyro_x_f);
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to dps output as float
+ *
+ * @param v_gyro_y_f : The gyro y dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_y_dps(
+float *v_gyro_y_f);
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to rps output as float
+ *
+ * @param v_gyro_y_f : The gyro y dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_y_rps(
+float *v_gyro_y_f);
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to dps output as float
+ *
+ * @param v_gyro_z_f : The gyro z dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_z_dps(
+float *v_gyro_z_f);
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to rps output as float
+ *
+ * @param v_gyro_z_f : The gyro z rps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_z_rps(
+float *v_gyro_z_f);
+/*!
+ * @brief This API is used to convert the gyro xyz raw data
+ * to dps output as float
+ *
+ * @param gyro_xyz_data : The dps data of gyro xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | dps data of gyro
+ * y | dps data of gyro
+ * z | dps data of gyro
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_xyz_dps(
+struct bno055_gyro_float_t *gyro_xyz_data);
+/*!
+ * @brief This API is used to convert the gyro xyz raw data
+ * to rps output as float
+ *
+ * @param gyro_xyz_data : The rps data of gyro xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | rps data of gyro
+ * y | rps data of gyro
+ * z | rps data of gyro
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_xyz_rps(
+struct bno055_gyro_float_t *gyro_xyz_data);
+/********************************************************************/
+/**\name FUNCTIONS FOR READING EULER DATA OUTPUT AS FLOAT PRECISION */
+/********************************************************************/
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to degree output as float
+ *
+ * @param v_euler_h_f : The float value of Euler h degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_h_deg(
+float *v_euler_h_f);
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to radians output as float
+ *
+ * @param v_euler_h_f : The float value of Euler h radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_h_rad(
+float *v_euler_h_f);
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to degree output as float
+ *
+ * @param v_euler_r_f : The float value of Euler r degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_r_deg(
+float *v_euler_r_f);
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to radians output as float
+ *
+ * @param v_euler_r_f : The float value of Euler r radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_r_rad(
+float *v_euler_r_f);
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to degree output as float
+ *
+ * @param v_euler_p_f : The float value of Euler p degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_p_deg(
+float *v_euler_p_f);
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to radians output as float
+ *
+ * @param v_euler_p_f : The float value of Euler p radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_p_rad(
+float *v_euler_p_f);
+/*!
+ * @brief This API is used to convert the Euler hrp raw data
+ * to degree output as float
+ *
+ * @param euler_hpr : The degree data of Euler hrp
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * h | degree data of Euler
+ * r | degree data of Euler
+ * p | degree data of Euler
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_hpr_deg(
+struct bno055_euler_float_t *euler_hpr);
+/*!
+ * @brief This API is used to convert the Euler xyz raw data
+ * to radians output as float
+ *
+ * @param euler_hpr : The radians data of Euler hrp
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * h | radians data of Euler
+ * r | radians data of Euler
+ * p | radians data of Euler
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_hpr_rad(
+struct bno055_euler_float_t *euler_hpr);
+/***************************************************************************/
+/**\name FUNCTIONS FOR READING LINEAR ACCEL DATA OUTPUT AS FLOAT PRECISION */
+/**************************************************************************/
+/*!
+ * @brief This API is used to convert the linear
+ * accel x raw data to meterpersecseq output as float
+ *
+ * @param v_linear_accel_x_f : The float value of linear accel x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_x_msq(
+float *v_linear_accel_x_f);
+/*!
+ * @brief This API is used to convert the linear
+ * accel y raw data to meterpersecseq output as float
+ *
+ * @param v_linear_accel_y_f : The float value of linear accel y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_y_msq(
+float *v_linear_accel_y_f);
+/*!
+ * @brief This API is used to convert the linear
+ * accel z raw data to meterpersecseq output as float
+ *
+ * @param v_linear_accel_z_f : The float value of linear accel z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_z_msq(
+float *v_linear_accel_z_f);
+/*!
+ * @brief This API is used to convert the linear accel xyz raw data
+ * to meterpersecseq output as float
+ *
+ * @param linear_accel_xyz : The meterpersecseq data of linear accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of linear accel
+ * y | meterpersecseq data of linear accel
+ * z | meterpersecseq data of linear accel
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_xyz_msq(
+struct bno055_linear_accel_float_t *linear_accel_xyz);
+/********************************************************************/
+/**\name FUNCTIONS FOR READING GRAVITY DATA OUTPUT AS FLOAT PRECISION */
+/********************************************************************/
+/*!
+ * @brief This API is used to convert the gravity
+ * x raw data to meterpersecseq output as float
+ *
+ * @param v_gravity_x_f : The float value of gravity x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_float_x_msq(
+float *v_gravity_x_f);
+/*!
+ * @brief This API is used to convert the gravity
+ * y raw data to meterpersecseq output as float
+ *
+ * @param v_gravity_y_f : The float value of gravity y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_float_y_msq(
+float *v_gravity_y_f);
+/*!
+ * @brief This API is used to convert the gravity
+ * z raw data to meterpersecseq output as float
+ *
+ * @param v_gravity_z_f : The float value of gravity z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_float_z_msq(
+float *gravity_z);
+/*!
+ * @brief This API is used to convert the gravity xyz raw data
+ * to meterpersecseq output as float
+ *
+ * @param gravity_xyz : The meterpersecseq data of gravity xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of gravity
+ * y | meterpersecseq data of gravity
+ * z | meterpersecseq data of gravity
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gravity_xyz_msq(
+struct bno055_gravity_float_t *gravity_xyz);
+/**************************************************************************/
+/**\name FUNCTIONS FOR READING TEMPERATURE DATA OUTPUT AS FLOAT PRECISION */
+/*************************************************************************/
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Fahrenheit output as float
+ *
+ * @param v_temp_f : The float value of temperature Fahrenheit
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_temp_fahrenheit(
+float *v_temp_f);
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Celsius output as float
+ *
+ * @param v_temp_f : The float value of temperature Celsius
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_temp_celsius(
+float *v_temp_f);
+#endif
+#ifdef BNO055_DOUBLE_ENABLE
+/**************************************************************************/
+/**\name FUNCTIONS FOR READING ACCEL DATA OUTPUT AS DOUBLE PRECISION */
+/*************************************************************************/
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to meterpersecseq output as double
+ *
+ * @param v_accel_x_d : The accel x meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_x_msq(
+double *v_accel_x_d);
+/*!
+ * @brief This API is used to convert the accel y raw data
+ * to meterpersecseq output as double
+ *
+ * @param v_accel_y_d : The accel y meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_y_msq(
+double *v_accel_y_d);
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to meterpersecseq output as double
+ *
+ * @param v_accel_z_d : The accel z meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_z_msq(
+double *v_accel_z_d);
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to millig output as double
+ *
+ * @param v_accel_x_d : The accel x millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_x_mg(
+double *v_accel_x_d);
+/*!
+ * @brief This API is used to convert the accel y raw data
+ * to millig output as double
+ *
+ * @param v_accel_y_d : The accel y millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_y_mg(
+double *v_accel_y_d);
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to millig output as double
+ *
+ * @param v_accel_z_d : The accel z millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_z_mg(
+double *v_accel_z_d);
+/*!
+ * @brief This API is used to convert the accel xyz raw data
+ * to meterpersecseq output as double
+ *
+ * @param accel_xyz : The meterpersecseq data of accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of accel
+ * y | meterpersecseq data of accel
+ * z | meterpersecseq data of accel
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_xyz_msq(
+struct bno055_accel_double_t *accel_xyz);
+/*!
+ * @brief This API is used to convert the accel xyz raw data
+ * to millig output as double
+ *
+ * @param accel_xyz : The millig data of accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | millig data of accel
+ * y | millig data of accel
+ * z | millig data of accel
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_xyz_mg(
+struct bno055_accel_double_t *accel_xyz);
+/**************************************************************************/
+/**\name FUNCTIONS FOR READING MAG DATA OUTPUT AS DOUBLE PRECISION */
+/*************************************************************************/
+/*!
+ * @brief This API is used to convert the mag x raw data
+ * to microTesla output as double
+ *
+ * @param v_mag_x_d : The mag x microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_x_uT(
+double *v_mag_x_d);
+/*!
+ * @brief This API is used to convert the mag x raw data
+ * to microTesla output as double
+ *
+ * @param v_mag_y_d : The mag x microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_y_uT(
+double *v_mag_y_d);
+/*!
+ * @brief This API is used to convert the mag z raw data
+ * to microTesla output as double
+ *
+ * @param v_mag_z_d : The mag z microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_z_uT(
+double *v_mag_z_d);
+/*!
+ * @brief This API is used to convert the mag yz raw data
+ * to microTesla output as double
+ *
+ * @param mag_xyz : The microTesla data of mag xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | microTesla data of mag
+ * y | microTesla data of mag
+ * z | microTesla data of mag
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_xyz_uT(
+struct bno055_mag_double_t *mag_xyz);
+/**************************************************************************/
+/**\name FUNCTIONS FOR READING GYRO DATA OUTPUT AS DOUBLE PRECISION */
+/*************************************************************************/
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to dps output as double
+ *
+ * @param v_gyro_x_d : The gyro x dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_x_dps(
+double *v_gyro_x_d);
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to dps output as double
+ *
+ * @param v_gyro_y_d : The gyro y dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_y_dps(
+double *v_gyro_y_d);
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to dps output as double
+ *
+ * @param v_gyro_z_d : The gyro z dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_z_dps(
+double *v_gyro_z_d);
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to rps output as double
+ *
+ * @param v_gyro_x_d : The gyro x dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_x_rps(
+double *v_gyro_x_d);
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to rps output as double
+ *
+ * @param v_gyro_y_d : The gyro y dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_y_rps(
+double *v_gyro_y_d);
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to rps output as double
+ *
+ * @param v_gyro_z_d : The gyro z rps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_z_rps(
+double *v_gyro_z_d);
+/*!
+ * @brief This API is used to convert the gyro xyz raw data
+ * to dps output as double
+ *
+ * @param gyro_xyz : The dps data of gyro xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | dps data of gyro
+ * y | dps data of gyro
+ * z | dps data of gyro
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_xyz_dps(
+struct bno055_gyro_double_t *gyro_xyz);
+/*!
+ * @brief This API is used to convert the gyro xyz raw data
+ * to rps output as double
+ *
+ * @param gyro_xyz : The rps data of gyro xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | rps data of gyro
+ * y | rps data of gyro
+ * z | rps data of gyro
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_xyz_rps(
+struct bno055_gyro_double_t *gyro_xyz);
+/**************************************************************************/
+/**\name FUNCTIONS FOR READING EULER DATA OUTPUT AS DOUBLE PRECISION */
+/*************************************************************************/
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to degree output as double
+ *
+ * @param v_euler_h_d : The double value of Euler h degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_h_deg(
+double *v_euler_h_d);
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to degree output as double
+ *
+ * @param v_euler_p_d : The double value of Euler p degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_p_deg(
+double *v_euler_p_d);
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to degree output as double
+ *
+ * @param v_euler_r_d : The double value of Euler r degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_r_deg(
+double *v_euler_r_d);
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to radians output as double
+ *
+ * @param v_euler_h_d : The double value of Euler h radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_h_rad(
+double *v_euler_h_d);
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to radians output as double
+ *
+ * @param v_euler_p_d : The double value of Euler p radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_p_rad(
+double *v_euler_p_d);
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to radians output as double
+ *
+ * @param v_euler_r_d : The double value of Euler r radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_r_rad(
+double *v_euler_r_d);
+/*!
+ * @brief This API is used to convert the Euler hpr raw data
+ * to degree output as double
+ *
+ * @param euler_hpr : The degree data of Euler hpr
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * h | degree data of Euler
+ * r | degree data of Euler
+ * p | degree data of Euler
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_hpr_deg(
+struct bno055_euler_double_t *euler_hpr);
+/*!
+ * @brief This API is used to convert the Euler hpr raw data
+ * to radians output as double
+ *
+ * @param euler_hpr : The radians data of Euler hpr
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * h | radians data of Euler
+ * r | radians data of Euler
+ * p | radians data of Euler
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_hpr_rad(
+struct bno055_euler_double_t *euler_hpr);
+/****************************************************************************/
+/**\name FUNCTIONS FOR READING LINEAR ACCEL DATA OUTPUT AS DOUBLE PRECISION */
+/****************************************************************************/
+/*!
+ * @brief This API is used to convert the linear
+ * accel x raw data to meterpersecseq output as double
+ *
+ * @param v_linear_accel_x_d : The double value of
+ * linear accel x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_x_msq(
+double *v_linear_accel_x_d);
+/*!
+ * @brief This API is used to convert the linear
+ * accel y raw data to meterpersecseq output as double
+ *
+ * @param v_linear_accel_y_d : The double value of
+ * linear accel y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_y_msq(
+double *v_linear_accel_y_d);
+/*!
+ * @brief This API is used to convert the linear
+ * accel z raw data to meterpersecseq output as double
+ *
+ * @param v_linear_accel_z_d : The double value of
+ * linear accel z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_z_msq(
+double *v_linear_accel_z_d);
+/*!
+ * @brief This API is used to convert the linear accel xyz raw data
+ * to meterpersecseq output as double
+ *
+ * @param linear_accel_xyz : The meterpersecseq data of linear accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of linear accel
+ * y | meterpersecseq data of linear accel
+ * z | meterpersecseq data of linear accel
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_xyz_msq(
+struct bno055_linear_accel_double_t *linear_accel_xyz);
+/**************************************************************************/
+/**\name FUNCTIONS FOR READING GRAVITY DATA OUTPUT AS DOUBLE PRECISION */
+/*************************************************************************/
+/*!
+ * @brief This API is used to convert the gravity
+ * x raw data to meterpersecseq output as double
+ *
+ * @param v_gravity_x_d : The double value of gravity x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_double_x_msq(
+double *v_gravity_x_d);
+/*!
+ * @brief This API is used to convert the gravity
+ * y raw data to meterpersecseq output as double
+ *
+ * @param v_gravity_y_d : The double value of gravity y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_double_y_msq(
+double *v_gravity_y_d);
+/*!
+ * @brief This API is used to convert the gravity
+ * z raw data to meterpersecseq output as double
+ *
+ * @param v_gravity_z_d : The double value of gravity z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_double_z_msq(
+double *v_gravity_z_d);
+/*!
+ * @brief This API is used to convert the gravity xyz raw data
+ * to meterpersecseq output as double
+ *
+ * @param gravity_xyz : The meterpersecseq data of gravity xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of gravity
+ * y | meterpersecseq data of gravity
+ * z | meterpersecseq data of gravity
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gravity_xyz_msq(
+struct bno055_gravity_double_t *gravity_xyz);
+/**************************************************************************/
+/**\name FUNCTIONS FOR READING TEMPERATURE DATA OUTPUT AS DOUBLE PRECISION*/
+/*************************************************************************/
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Fahrenheit output as double
+ *
+ * @param v_temp_d : The double value of temperature Fahrenheit
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_temp_fahrenheit(
+double *v_temp_d);
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Celsius output as double
+ *
+ * @param v_temp_d : The double value of temperature Celsius
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_temp_celsius(
+double *v_temp_d);
+#endif
+/**************************************************************************/
+/**\name FUNCTIONS FOR READING ACCEL,MAG,GYRO AND SYTEM CALIBRATION STATUS*/
+/*************************************************************************/
+/*!
+ * @brief This API used to read
+ * mag calibration status from register from 0x35 bit 0 and 1
+ *
+ * @param v_mag_calib_u8 : The value of mag calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_calib_stat(
+u8 *v_mag_calib_u8);
+/*!
+ * @brief This API used to read
+ * accel calibration status from register from 0x35 bit 2 and 3
+ *
+ * @param v_accel_calib_u8 : The value of accel calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_calib_stat(
+u8 *v_accel_calib_u8);
+/*!
+ * @brief This API used to read
+ * gyro calibration status from register from 0x35 bit 4 and 5
+ *
+ * @param v_gyro_calib_u8 : The value of gyro calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_calib_stat(
+u8 *v_gyro_calib_u8);
+/*!
+ * @brief This API used to read
+ * system calibration status from register from 0x35 bit 6 and 7
+ *
+ * @param v_sys_calib_u8 : The value of system calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_calib_stat(
+u8 *v_sys_calib_u8);
+/******************************************************************/
+/**\name FUNCTIONS FOR READING ACCEL,MAG,GYRO AND SYTEM SELF TEST */
+/******************************************************************/
+/*!
+ * @brief This API used to read
+ * self test of accel from register from 0x36 bit 0
+ *
+ * @param v_selftest_accel_u8 : The value of self test of accel
+ *
+ * v_selftest_accel_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_accel(
+u8 *v_selftest_accel_u8);
+/*!
+ * @brief This API used to read
+ * self test of mag from register from 0x36 bit 1
+ *
+ * @param v_selftest_mag_u8 : The value of self test of mag
+ *
+ * v_selftest_mag_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_mag(
+u8 *v_selftest_mag_u8);
+/*!
+ * @brief This API used to read
+ * self test of gyro from register from 0x36 bit 2
+ *
+ * @param v_selftest_gyro_u8 : The value of self test of gyro
+ *
+ * v_selftest_gyro_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_gyro(
+u8 *v_selftest_gyro_u8);
+/*!
+ * @brief This API used to read
+ * self test of micro controller from register from 0x36 bit 3
+ *
+ * @param v_selftest_mcu_u8 : The value of self test of micro controller
+ *
+ * v_selftest_mcu_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_mcu(
+u8 *v_selftest_mcu_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR READING GYRO INTERRUPT STATUS */
+/*****************************************************/
+/*!
+ * @brief This API used to read the v_stat_s8 of
+ * gyro anymotion interrupt from register from 0x37 bit 2
+ *
+ * @param v_gyro_any_motion_u8 : The value of gyro anymotion interrupt
+ *
+ * v_gyro_any_motion_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro anymotion interrupt can be enabled
+ * by the following APIs
+ *
+ * bno055_set_intr_mask_gyro_any_motion()
+ *
+ * bno055_set_intr_gyro_any_motion()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_stat_gyro_any_motion(
+u8 *v_gyro_any_motion_u8);
+/*!
+ * @brief This API used to read the v_stat_s8 of
+ * gyro highrate interrupt from register from 0x37 bit 3
+ *
+ * @param v_gyro_highrate_u8 : The value of gyro highrate interrupt
+ *
+ * v_gyro_highrate_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate interrupt can be configured
+ * by the following APIs
+ *
+ * bno055_set_intr_mask_gyro_highrate()
+ *
+ * bno055_set_intr_gyro_highrate()
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_stat_gyro_highrate(
+u8 *v_gyro_highrate_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR READING ACCEL INTERRUPT STATUS */
+/*****************************************************/
+/*!
+ * @brief This API used to read the status of
+ * accel highg interrupt from register from 0x37 bit 5
+ *
+ * @param v_accel_high_g_u8 : The value of accel highg interrupt
+ *
+ * v_accel_high_g_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel highg interrupt can be configured
+ * by the following APIs
+ *
+ * bno055_set_intr_mask_accel_high_g()
+ *
+ * bno055_set_intr_accel_high_g()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_stat_accel_high_g(
+u8 *v_accel_high_g_u8);
+/*!
+ * @brief This API used to read the v_stat_s8 of
+ * accel anymotion interrupt from register from 0x37 bit 6
+ *
+ * @param v_accel_any_motion_u8 : The value of accel anymotion interrupt
+ *
+ * v_accel_any_motion_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel anymotion interrupt can be configured
+ * by the following APIs
+ *
+ * bno055_set_intr_mask_accel_any_motion()
+ *
+ * bno055_set_intr_accel_any_motion()
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_stat_accel_any_motion(
+u8 *v_accel_any_motion_u8);
+/*!
+ * @brief This API used to read the v_stat_s8 of
+ * accel nomotion/slowmotion interrupt from register from 0x37 bit 6
+ *
+ * @param v_accel_no_motion_u8 :
+ * The value of accel nomotion/slowmotion interrupt
+ *
+ * v_accel_no_motion_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel nomotion/slowmotion interrupt can be configured
+ * by the following APIs
+ *
+ * bno055_set_intr_mask_accel_nomotion()
+ *
+ * bno055_set_intr_accel_nomotion()
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_stat_accel_no_motion(
+u8 *v_accel_no_motion_u8);
+/**************************************************************************/
+/**\name FUNCTIONS FOR READING SYSTEM CLOCK, STATUS AND ERROR CODE */
+/*************************************************************************/
+/*!
+ * @brief This API is used to read status of main clock
+ * from the register 0x38 bit 0
+ *
+ * @param v_stat_main_clk_u8 : the status of main clock
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_stat_main_clk(
+u8 *v_stat_main_clk_u8);
+/*!
+ * @brief This API is used to read system status
+ * code from the register 0x39 it is a byte of data
+ *
+ * @param v_sys_stat_u8 : the status of system
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_stat_code(
+u8 *v_sys_stat_u8);
+/*!
+ * @brief This API is used to read system error
+ * code from the register 0x3A it is a byte of data
+ *
+ * @param v_sys_error_u8 : The value of system error code
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_error_code(
+u8 *v_sys_error_u8);
+/********************************************/
+/**\name FUNCTIONS FOR ACCEL UNIT SELECTION */
+/********************************************/
+/*!
+ * @brief This API used to read the accel unit
+ * from register from 0x3B bit 0
+ *
+ * @param v_accel_unit_u8 : The value of accel unit
+ *
+ * v_accel_unit_u8 | result
+ * ------------- | ---------------
+ * 0x00 | ACCEL_UNIT_MSQ
+ * 0x01 | ACCEL_UNIT_MG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_unit(
+u8 *v_accel_unit_u8);
+/*!
+ * @brief This API used to write the accel unit
+ * from register from 0x3B bit 0
+ *
+ * @param v_accel_unit_u8 : The value of accel unit
+ *
+ * v_accel_unit_u8 | result
+ * ------------- | ---------------
+ * 0x00 | ACCEL_UNIT_MSQ
+ * 0x01 | ACCEL_UNIT_MG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_unit(
+u8 v_accel_unit_u8);
+/********************************************/
+/**\name FUNCTIONS FOR GYRO UNIT SELECTION */
+/********************************************/
+/*!
+ * @brief This API used to read the gyro unit
+ * from register from 0x3B bit 1
+ *
+ * @param v_gyro_unit_u8 : The value of accel unit
+ *
+ * v_gyro_unit_u8 | result
+ * ------------- | -----------
+ * 0x00 | GYRO_UNIT_DPS
+ * 0x01 | GYRO_UNIT_RPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_unit(
+u8 *v_gyro_unit_u8);
+/*!
+ * @brief This API used to write the gyro unit
+ * from register from 0x3B bit 1
+ *
+ * @param v_gyro_unit_u8 : The value of accel unit
+ *
+ * v_gyro_unit_u8 | result
+ * ------------- | -----------
+ * 0x00 | GYRO_UNIT_DPS
+ * 0x01 | GYRO_UNIT_RPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_unit(u8 v_gyro_unit_u8);
+/********************************************/
+/**\name FUNCTIONS FOR EULER UNIT SELECTION */
+/********************************************/
+/*!
+ * @brief This API used to read the Euler unit
+ * from register from 0x3B bit 2
+ *
+ * @param v_euler_unit_u8 : The value of accel unit
+ *
+ * v_euler_unit_u8 | result
+ * -------------- | -----------
+ * 0x00 | EULER_UNIT_DEG
+ * 0x01 | EULER_UNIT_RAD
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_euler_unit(
+u8 *v_euler_unit_u8);
+/*!
+ * @brief This API used to write the Euler unit
+ * from register from 0x3B bit 2
+ *
+ * @param v_euler_unit_u8 : The value of Euler unit
+ *
+ * v_euler_unit_u8 | result
+ * -------------- | -----------
+ * 0x00 | EULER_UNIT_DEG
+ * 0x01 | EULER_UNIT_RAD
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_euler_unit(u8 v_euler_unit_u8);
+/********************************************/
+/**\name FUNCTIONS FOR TILT UNIT SELECTION */
+/********************************************/
+/*!
+ * @brief This API used to write the tilt unit
+ * from register from 0x3B bit 3
+ *
+ * @param v_tilt_unit_u8 : The value of tilt unit
+ *
+ * v_tilt_unit_u8 | result
+ * --------------- | ---------
+ * 0x00 | degrees
+ * 0x01 | radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_tilt_unit(
+u8 *v_tilt_unit_u8);
+/*!
+ * @brief This API used to write the tilt unit
+ * from register from 0x3B bit 3
+ *
+ * @param v_tilt_unit_u8 : The value of tilt unit
+ *
+ * v_tilt_unit_u8 | result
+ * --------------- | ---------
+ * 0x00 | degrees
+ * 0x01 | radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ * \return Communication results
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_tilt_unit(
+u8 v_tilt_unit_u8);
+/**************************************************/
+/**\name FUNCTIONS FOR TEMPERATURE UNIT SELECTION */
+/**************************************************/
+/*!
+ * @brief This API used to read the temperature unit
+ * from register from 0x3B bit 4
+ *
+ * @param v_temp_unit_u8 : The value of temperature unit
+ *
+ * v_temp_unit_u8 | result
+ * ----------- | --------------
+ * 0x00 | TEMP_UNIT_CELCIUS
+ * 0x01 | TEMP_UNIT_FAHRENHEIT
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_temp_unit(
+u8 *v_temp_unit_u8);
+/*!
+ * @brief This API used to write the temperature unit
+ * from register from 0x3B bit 4
+ *
+ * @param v_temp_unit_u8 : The value of temperature unit
+ *
+ * v_temp_unit_u8 | result
+ * ----------- | --------------
+ * 0x00 | TEMP_UNIT_CELCIUS
+ * 0x01 | TEMP_UNIT_FAHRENHEIT
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_temp_unit(
+u8 v_temp_unit_u8);
+/**************************************************/
+/**\name FUNCTIONS FOR DATA OUTPUT FORMAT SELECT */
+/**************************************************/
+/*!
+ * @brief This API used to read the current selected orientation mode
+ * from register from 0x3B bit 7
+ *
+ * @param v_data_output_format_u8 : The value of data output format
+ *
+ * v_data_output_format_u8 | result
+ * -------------------- | --------
+ * 0x00 | Windows
+ * 0x01 | Android
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_data_output_format(
+u8 *v_data_output_format_u8);
+/*!
+ * @brief This API used to read the current selected orientation mode
+ * from register from 0x3B bit 7
+ *
+ * @param v_data_output_format_u8 : The value of data output format
+ *
+ * v_data_output_format_u8 | result
+ * -------------------- | --------
+ * 0x00 | Windows
+ * 0x01 | Android
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_data_output_format(
+u8 v_data_output_format_u8);
+/**************************************************/
+/**\name FUNCTIONS FOR DATA OPERATION MODE */
+/**************************************************/
+/*! @brief This API used to read the operation mode
+ * from register from 0x3D bit 0 to 3
+ *
+ * @param v_operation_mode_u8 : The value of operation mode
+ *
+ * v_operation_mode_u8 | result | comments
+ * ----------|----------------------------|----------------------------
+ * 0x00 | OPERATION_MODE_CONFIG | Configuration mode
+ * 0x01 | OPERATION_MODE_ACCONLY | Reads accel data alone
+ * 0x02 | OPERATION_MODE_MAGONLY | Reads mag data alone
+ * 0x03 | OPERATION_MODE_GYRONLY | Reads gyro data alone
+ * 0x04 | OPERATION_MODE_ACCMAG | Reads accel and mag data
+ * 0x05 | OPERATION_MODE_ACCGYRO | Reads accel and gyro data
+ * 0x06 | OPERATION_MODE_MAGGYRO | Reads accel and mag data
+ * 0x07 | OPERATION_MODE_ANY_MOTION | Reads accel mag and gyro data
+ * 0x08 | OPERATION_MODE_IMUPLUS | Inertial measurement unit
+ * - | - | Reads accel,gyro and fusion data
+ * 0x09 | OPERATION_MODE_COMPASS | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0A | OPERATION_MODE_M4G | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0B | OPERATION_MODE_NDOF_FMC_OFF| Nine degrees of freedom with
+ * - | - | fast magnetic calibration
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ * 0x0C | OPERATION_MODE_NDOF | Nine degrees of freedom
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note In the config mode, all sensor and fusion data
+ * becomes zero and it is mainly derived
+ * to configure the various settings of the BNO
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_operation_mode(
+u8 *v_operation_mode_u8);
+/*! @brief This API used to write the operation mode
+ * from register from 0x3D bit 0 to 3
+ *
+ * @param v_operation_mode_u8 : The value of operation mode
+ *
+ * v_operation_mode_u8 | result | comments
+ * ----------|----------------------------|----------------------------
+ * 0x00 | OPERATION_MODE_CONFIG | Configuration mode
+ * 0x01 | OPERATION_MODE_ACCONLY | Reads accel data alone
+ * 0x02 | OPERATION_MODE_MAGONLY | Reads mag data alone
+ * 0x03 | OPERATION_MODE_GYRONLY | Reads gyro data alone
+ * 0x04 | OPERATION_MODE_ACCMAG | Reads accel and mag data
+ * 0x05 | OPERATION_MODE_ACCGYRO | Reads accel and gyro data
+ * 0x06 | OPERATION_MODE_MAGGYRO | Reads accel and mag data
+ * 0x07 | OPERATION_MODE_ANY_MOTION | Reads accel mag and gyro data
+ * 0x08 | OPERATION_MODE_IMUPLUS | Inertial measurement unit
+ * - | - | Reads accel,gyro and fusion data
+ * 0x09 | OPERATION_MODE_COMPASS | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0A | OPERATION_MODE_M4G | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0B | OPERATION_MODE_NDOF_FMC_OFF| Nine degrees of freedom with
+ * - | - | fast magnetic calibration
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ * 0x0C | OPERATION_MODE_NDOF | Nine degrees of freedom
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note In the config mode, all sensor and fusion data
+ * becomes zero and it is mainly derived
+ * to configure the various settings of the BNO
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_operation_mode(u8 v_operation_mode_u8);
+/**************************************************/
+/**\name FUNCTIONS FOR POWER MODE */
+/**************************************************/
+/*! @brief This API used to read the power mode
+ * from register from 0x3E bit 0 to 1
+ *
+ * @param v_power_mode_u8 : The value of power mode
+ *
+ * v_power_mode_u8| result | comments
+ * ----------|---------------------|-------------------------------------
+ * 0x00 | POWER_MODE_NORMAL | In the NORMAL mode the register
+ * - | - | map and the internal peripherals
+ * - | - | of the MCU are always
+ * - | - | operative in this mode
+ * 0x01 | POWER_MODE_LOWPOWER | This is first level of power saving mode
+ * 0x02 | POWER_MODE_SUSPEND | In suspend mode the system is
+ * - | - | paused and all the sensors and
+ * - | - | the micro controller are
+ * - | - | put into sleep mode.
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note For detailed about LOWPOWER mode
+ * refer data sheet 3.4.2
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_power_mode(
+u8 *v_power_mode_u8);
+/*! @brief This API used to write the power mode
+ * from register from 0x3E bit 0 to 1
+ *
+ * @param v_power_mode_u8 : The value of power mode
+ *
+ * v_power_mode_u8 | result | comments
+ * ----------|---------------------|-------------------------------------
+ * 0x00 | POWER_MODE_NORMAL | In the NORMAL mode the register
+ * - | - | map and the internal peripherals
+ * - | - | of the MCU are always
+ * - | - | operative in this mode
+ * 0x01 | POWER_MODE_LOWPOWER | This is first level of power saving mode
+ * 0x02 | POWER_MODE_SUSPEND | In suspend mode the system is
+ * - | - | paused and all the sensors and
+ * - | - | the micro controller are
+ * - | - | put into sleep mode.
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note For detailed about LOWPOWER mode
+ * refer data sheet 3.4.2
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_power_mode(u8 v_power_mode_u8);
+/**************************************************/
+/**\name FUNCTIONS FOR RESET INTERRUPT */
+/**************************************************/
+/*!
+ * @brief This API used to read the reset interrupt
+ * from register from 0x3F bit 6
+ * It resets all the interrupt bit and interrupt output
+ *
+ * @param v_intr_rst_u8 : The value of reset interrupt
+ *
+ * v_intr_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_rst(
+u8 *v_intr_rst_u8);
+/*!
+ * @brief This API used to write the reset interrupt
+ * from register from 0x3F bit 6
+ * It resets all the interrupt bit and interrupt output
+ *
+ * @param v_intr_rst_u8 : The value of reset interrupt
+ *
+ * v_intr_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_rst(u8 v_intr_rst_u8);
+/**************************************************/
+/**\name FUNCTIONS FOR CLOCK SOURCE */
+/**************************************************/
+/*!
+ * @brief This API used to read the clk source
+ * from register from 0x3F bit 7
+ *
+ * @param v_clk_src_u8 : The value of clk source
+ *
+ * v_clk_src_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_clk_src(
+u8 *v_clk_src_u8);
+/*!
+ * @brief This API used to write the clk source
+ * from register from 0x3F bit 7
+ *
+ * @param v_clk_src_u8 : The value of clk source
+ *
+ * v_clk_src_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_clk_src(u8 v_clk_src_u8);
+/**************************************************/
+/**\name FUNCTIONS FOR RESET SYSTEM */
+/**************************************************/
+/*!
+ * @brief This API used to read the reset system
+ * from register from 0x3F bit 5
+ *
+ * @param v_sys_rst_u8 : The value of reset system
+ *
+ * v_sys_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note It resets the whole system
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_rst(
+u8 *v_sys_rst_u8);
+/*!
+ * @brief This API used to write the reset system
+ * from register from 0x3F bit 5
+ *
+ * @param v_sys_rst_u8 : The value of reset system
+ *
+ * v_sys_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note It resets the whole system
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_sys_rst(u8 v_sys_rst_u8);
+/**************************************************/
+/**\name FUNCTIONS FOR SELF TEST */
+/**************************************************/
+/*!
+ * @brief This API used to read the self test
+ * from register from 0x3F bit 0
+ *
+ * @param v_selftest_u8 : The value of self test
+ *
+ * v_selftest_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note It triggers the self test
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest(
+u8 *v_selftest_u8);
+/*!
+ * @brief This API used to write the self test
+ * from register from 0x3F bit 0
+ *
+ * @param v_selftest_u8 : The value of self test
+ *
+ * v_selftest_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note It triggers the self test
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_selftest(u8 v_selftest_u8);
+/**************************************************/
+/**\name FUNCTIONS FOR TEMPERATURE SOURCE */
+/**************************************************/
+/*!
+ * @brief This API used to read the temperature source
+ * from register from 0x40 bit 0 and 1
+ *
+ * @param v_temp_source_u8 : The value of selected temperature source
+ *
+ * v_temp_source_u8 | result
+ * ---------------- |---------------
+ * 0x00 | ACCEL_TEMP_EN
+ * 0X01 | GYRO_TEMP_EN
+ * 0X03 | MCU_TEMP_EN
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_temp_source(
+u8 *v_temp_source_u8);
+/*!
+ * @brief This API used to write the temperature source
+ * from register from 0x40 bit 0 and 1
+ *
+ * @param v_temp_source_u8 : The value of selected temperature source
+ *
+ * v_temp_source_u8 | result
+ * ---------------- |---------------
+ * 0x00 | ACCEL_TEMP_EN
+ * 0X01 | GYRO_TEMP_EN
+ * 0X03 | MCU_TEMP_EN
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_temp_source(u8 v_temp_source_u8);
+/**************************************************/
+/**\name FUNCTIONS FOR AXIS REMAP */
+/**************************************************/
+/*!
+ * @brief This API used to read the axis remap value
+ * from register from 0x41 bit 0 and 5
+ *
+ * @param v_remap_axis_u8 : The value of axis remapping
+ *
+ * v_remap_axis_u8 | result | comments
+ * ------------|-------------------|------------
+ * 0X21 | REMAP_X_Y | Z=Z;X=Y;Y=X
+ * 0X18 | REMAP_Y_Z | X=X;Y=Z;Z=Y
+ * 0X06 | REMAP_Z_X | Y=Y;X=Z;Z=X
+ * 0X12 | REMAP_X_Y_Z_TYPE0 | X=Z;Y=X;Z=Y
+ * 0X09 | REMAP_X_Y_Z_TYPE1 | X=Y;Y=Z;Z=X
+ * 0X24 | DEFAULT_AXIS | X=X;Y=Y;Z=Z
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note : For axis sign remap refer the following functions
+ * x-axis :
+ *
+ * bno055_set_x_remap_sign()
+ *
+ * y-axis :
+ *
+ * bno055_set_y_remap_sign()
+ *
+ * z-axis :
+ *
+ * bno055_set_z_remap_sign()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_axis_remap_value(
+u8 *v_remap_axis_u8);
+/*!
+ * @brief This API used to write the axis remap value
+ * from register from 0x41 bit 0 and 5
+ *
+ * @param v_remap_axis_u8 : The value of axis remapping
+ *
+ * v_remap_axis_u8 | result | comments
+ * ------------|-------------------|------------
+ * 0X21 | REMAP_X_Y | Z=Z;X=Y;Y=X
+ * 0X18 | REMAP_Y_Z | X=X;Y=Z;Z=Y
+ * 0X06 | REMAP_Z_X | Y=Y;X=Z;Z=X
+ * 0X12 | REMAP_X_Y_Z_TYPE0 | X=Z;Y=X;Z=Y
+ * 0X09 | REMAP_X_Y_Z_TYPE1 | X=Y;Y=Z;Z=X
+ * 0X24 | DEFAULT_AXIS | X=X;Y=Y;Z=Z
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note : For axis sign remap refer the following functions
+ * x-axis :
+ *
+ * bno055_set_x_remap_sign()
+ *
+ * y-axis :
+ *
+ * bno055_set_y_remap_sign()
+ *
+ * z-axis :
+ *
+ * bno055_set_z_remap_sign()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_axis_remap_value(
+u8 v_remap_axis_u8);
+/**************************************************/
+/**\name FUNCTIONS FOR AXIS REMAP SIGN */
+/**************************************************/
+/*!
+ * @brief This API used to read the x-axis remap
+ * sign from register from 0x42 bit 2
+ *
+ * @param v_remap_x_sign_u8 : The value of x-axis remap sign
+ *
+ * v_remap_x_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_remap_x_sign(
+u8 *v_remap_x_sign_u8);
+/*!
+ * @brief This API used to write the x-axis remap
+ * sign from register from 0x42 bit 2
+ *
+ * @param v_remap_x_sign_u8 : The value of x-axis remap sign
+ *
+ * v_remap_x_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_remap_x_sign(
+u8 v_remap_x_sign_u8);
+/*!
+ * @brief This API used to read the y-axis remap
+ * sign from register from 0x42 bit 1
+ *
+ * @param v_remap_y_sign_u8 : The value of y-axis remap sign
+ *
+ * v_remap_y_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_remap_y_sign(
+u8 *v_remap_y_sign_u8);
+/*!
+ * @brief This API used to write the y-axis remap
+ * sign from register from 0x42 bit 1
+ *
+ * @param v_remap_y_sign_u8 : The value of y-axis remap sign
+ *
+ * v_remap_y_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_remap_y_sign(
+u8 v_remap_y_sign_u8);
+/*!
+ * @brief This API used to read the z-axis remap
+ * sign from register from 0x42 bit 0
+ *
+ * @param v_remap_z_sign_u8 : The value of z-axis remap sign
+ *
+ * v_remap_z_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_remap_z_sign(
+u8 *v_remap_z_sign_u8);
+/*!
+ * @brief This API used to write the z-axis remap
+ * sign from register from 0x42 bit 0
+ *
+ * @param v_remap_z_sign_u8 : The value of z-axis remap sign
+ *
+ * v_remap_z_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_remap_z_sign(
+u8 v_remap_z_sign_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR SOFT IRON CALIBRATION MATRIX */
+/*****************************************************/
+/*!
+ * @brief This API is used to read soft iron calibration matrix
+ * from the register 0x43 to 0x53 it is a 18 bytes of data
+ *
+ * @param sic_matrix : The value of soft iron calibration matrix
+ *
+ * sic_matrix | result
+ * --------------------|----------------------------------
+ * sic_0 | soft iron calibration matrix zero
+ * sic_1 | soft iron calibration matrix one
+ * sic_2 | soft iron calibration matrix two
+ * sic_3 | soft iron calibration matrix three
+ * sic_4 | soft iron calibration matrix four
+ * sic_5 | soft iron calibration matrix five
+ * sic_6 | soft iron calibration matrix six
+ * sic_7 | soft iron calibration matrix seven
+ * sic_8 | soft iron calibration matrix eight
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note : Each soft iron calibration matrix range from -32768 to +32767
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_sic_matrix(
+struct bno055_sic_matrix_t *sic_matrix);
+/*!
+ * @brief This API is used to write soft iron calibration matrix
+ * from the register 0x43 to 0x53 it is a 18 bytes of data
+ *
+ * @param sic_matrix : The value of soft iron calibration matrix
+ *
+ * sic_matrix | result
+ * --------------------|----------------------------------
+ * sic_0 | soft iron calibration matrix zero
+ * sic_1 | soft iron calibration matrix one
+ * sic_2 | soft iron calibration matrix two
+ * sic_3 | soft iron calibration matrix three
+ * sic_4 | soft iron calibration matrix four
+ * sic_5 | soft iron calibration matrix five
+ * sic_6 | soft iron calibration matrix six
+ * sic_7 | soft iron calibration matrix seven
+ * sic_8 | soft iron calibration matrix eight
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note : Each soft iron calibration matrix range from -32768 to +32767
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_sic_matrix(
+struct bno055_sic_matrix_t *sic_matrix);
+/*****************************************************/
+/**\name FUNCTIONS FOR ACCEL OFFSET AND RADIUS */
+/*****************************************************/
+/*!
+ * @brief This API is used to read accel offset and accel radius
+ * offset form register 0x55 to 0x5A and radius form 0x67 and 0x68
+ *
+ * @param accel_offset : The value of accel offset and radius
+ *
+ * bno055_accel_offset_t | result
+ * ------------------- | ----------------
+ * x | accel offset x
+ * y | accel offset y
+ * z | accel offset z
+ * r | accel offset r
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the accel offset varies based on
+ * the G-range of accel sensor.
+ *
+ * accel G range | offset range
+ * --------------- | --------------
+ * ACCEL_RANGE_2G | +/-2000
+ * ACCEL_RANGE_4G | +/-4000
+ * ACCEL_RANGE_8G | +/-8000
+ * ACCEL_RANGE_16G | +/-16000
+ *
+ * accel G range can be configured by using the
+ * bno055_set_accel_range() function
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_offset(
+struct bno055_accel_offset_t *accel_offset);
+/*!
+ * @brief This API is used to write accel offset and accel radius
+ * offset form register 0x55 to 0x5A and radius form 0x67 and 0x68
+ *
+ * @param accel_offset : The value of accel offset and radius
+ *
+ * bno055_accel_offset_t | result
+ * ------------------- | ----------------
+ * x | accel offset x
+ * y | accel offset y
+ * z | accel offset z
+ * r | accel offset r
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the accel offset varies based on
+ * the G-range of accel sensor.
+ *
+ * accel G range | offset range
+ * --------------- | --------------
+ * ACCEL_RANGE_2G | +/-2000
+ * ACCEL_RANGE_4G | +/-4000
+ * ACCEL_RANGE_8G | +/-8000
+ * ACCEL_RANGE_16G | +/-16000
+ *
+ * accel G range can be configured by using the
+ * bno055_set_accel_range() function
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_accel_offset(
+struct bno055_accel_offset_t *accel_offset);
+/*****************************************************/
+/**\name FUNCTIONS FOR MAG OFFSET AND RADIUS*/
+/*****************************************************/
+/*!
+ * @brief This API is used to read mag offset
+ * offset form register 0x69 to 0x6A
+ *
+ * @param mag_offset : The value of mag offset and radius
+ *
+ * bno055_mag_offset_t | result
+ * ------------------- | ----------------
+ * x | mag offset x
+ * y | mag offset y
+ * z | mag offset z
+ * r | mag radius r
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the magnetometer offset is +/-6400 in LSB
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_offset(
+struct bno055_mag_offset_t *mag_offset);
+/*!
+ * @brief This API is used to read mag offset
+ * offset form register 0x69 to 0x6A
+ *
+ * @param mag_offset : The value of mag offset and radius
+ *
+ * bno055_mag_offset_t | result
+ * ------------------- | ----------------
+ * x | mag offset x
+ * y | mag offset y
+ * z | mag offset z
+ * r | mag radius r
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the magnetometer offset is +/-6400 in LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_mag_offset(
+struct bno055_mag_offset_t *mag_offset);
+/*****************************************************/
+/**\name FUNCTIONS FOR GYRO OFFSET */
+/*****************************************************/
+/*!
+ * @brief This API is used to read gyro offset
+ * offset form register 0x61 to 0x66
+ *
+ * @param gyro_offset : The value of gyro offset
+ *
+ * bno055_gyro_offset_t | result
+ * ------------------- | ----------------
+ * x | gyro offset x
+ * y | gyro offset y
+ * z | gyro offset z
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the gyro offset varies based on
+ * the range of gyro sensor
+ *
+ * gyro G range | offset range
+ * -------------------- | ------------
+ * GYRO_RANGE_2000DPS | +/-32000
+ * GYRO_RANGE_1000DPS | +/-16000
+ * GYRO_RANGE_500DPS | +/-8000
+ * GYRO_RANGE_250DPS | +/-4000
+ * GYRO_RANGE_125DPS | +/-2000
+ *
+ * Gyro range can be configured by using the
+ * bno055_set_gyro_range() function
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_offset(
+struct bno055_gyro_offset_t *gyro_offset);
+/*!
+ * @brief This API is used to read gyro offset
+ * offset form register 0x61 to 0x66
+ *
+ * @param gyro_offset : The value of gyro offset
+ *
+ * bno055_gyro_offset_t | result
+ * ------------------- | ----------------
+ * x | gyro offset x
+ * y | gyro offset y
+ * z | gyro offset z
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the gyro offset varies based on
+ * the range of gyro sensor
+ *
+ * gyro G range | offset range
+ * -------------------- | ------------
+ * GYRO_RANGE_2000DPS | +/-32000
+ * GYRO_RANGE_1000DPS | +/-16000
+ * GYRO_RANGE_500DPS | +/-8000
+ * GYRO_RANGE_250DPS | +/-4000
+ * GYRO_RANGE_125DPS | +/-2000
+ *
+ * Gyro range can be configured by using the
+ * bno055_set_gyro_range() function
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_gyro_offset(
+struct bno055_gyro_offset_t *gyro_offset);
+/********************************************************/
+/************** PAGE1 Functions *********************/
+/********************************************************/
+/*****************************************************/
+/**\name FUNCTIONS FOR ACCEL CONFIGURATION */
+/*****************************************************/
+/*!
+ * @brief This API used to read the accel range
+ * from page one register from 0x08 bit 0 and 1
+ *
+ * @param v_accel_range_u8 : The value of accel range
+ * v_accel_range_u8 | result
+ * ----------------- | --------------
+ * 0x00 | ACCEL_RANGE_2G
+ * 0x01 | ACCEL_RANGE_4G
+ * 0x02 | ACCEL_RANGE_8G
+ * 0x03 | ACCEL_RANGE_16G
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_range(
+u8 *v_accel_range_u8);
+/*!
+ * @brief This API used to write the accel range
+ * from page one register from 0x08 bit 0 and 1
+ *
+ * @param v_accel_range_u8 : The value of accel range
+ *
+ * v_accel_range_u8 | result
+ * ----------------- | --------------
+ * 0x00 | ACCEL_RANGE_2G
+ * 0x01 | ACCEL_RANGE_4G
+ * 0x02 | ACCEL_RANGE_8G
+ * 0x03 | ACCEL_RANGE_16G
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_range(
+u8 v_accel_range_u8);
+/*!
+ * @brief This API used to read the accel bandwidth
+ * from page one register from 0x08 bit 2 to 4
+ *
+ * @param v_accel_bw_u8 : The value of accel bandwidth
+ *
+ * v_accel_bw_u8 | result
+ * ----------------- | ---------------
+ * 0x00 | ACCEL_BW_7_81HZ
+ * 0x01 | ACCEL_BW_15_63HZ
+ * 0x02 | ACCEL_BW_31_25HZ
+ * 0x03 | ACCEL_BW_62_5HZ
+ * 0x04 | ACCEL_BW_125HZ
+ * 0x05 | ACCEL_BW_250HZ
+ * 0x06 | ACCEL_BW_500HZ
+ * 0x07 | ACCEL_BW_1000HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_bw(
+u8 *v_accel_bw_u8);
+/*!
+ * @brief This API used to write the accel bandwidth
+ * from page one register from 0x08 bit 2 to 4
+ *
+ * @param v_accel_bw_u8 : The value of accel bandwidth
+ *
+ * v_accel_bw_u8 | result
+ * ----------------- | ---------------
+ * 0x00 | ACCEL_BW_7_81HZ
+ * 0x01 | ACCEL_BW_15_63HZ
+ * 0x02 | ACCEL_BW_31_25HZ
+ * 0x03 | ACCEL_BW_62_5HZ
+ * 0x04 | ACCEL_BW_125HZ
+ * 0x05 | ACCEL_BW_250HZ
+ * 0x06 | ACCEL_BW_500HZ
+ * 0x07 | ACCEL_BW_1000HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_bw(
+u8 v_accel_bw_u8);
+/*!
+ * @brief This API used to read the accel power mode
+ * from page one register from 0x08 bit 5 to 7
+ *
+ * @param v_accel_power_mode_u8 : The value of accel power mode
+ * v_accel_power_mode_u8 | result
+ * ----------------- | -------------
+ * 0x00 | ACCEL_NORMAL
+ * 0x01 | ACCEL_SUSPEND
+ * 0x02 | ACCEL_LOWPOWER_1
+ * 0x03 | ACCEL_STANDBY
+ * 0x04 | ACCEL_LOWPOWER_2
+ * 0x05 | ACCEL_DEEPSUSPEND
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_power_mode(
+u8 *v_accel_power_mode_u8);
+/*!
+ * @brief This API used to write the accel power mode
+ * from page one register from 0x08 bit 5 to 7
+ *
+ * @param v_accel_power_mode_u8 : The value of accel power mode
+ * v_accel_power_mode_u8 | result
+ * ----------------- | -------------
+ * 0x00 | ACCEL_NORMAL
+ * 0x01 | ACCEL_SUSPEND
+ * 0x02 | ACCEL_LOWPOWER_1
+ * 0x03 | ACCEL_STANDBY
+ * 0x04 | ACCEL_LOWPOWER_2
+ * 0x05 | ACCEL_DEEPSUSPEND
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_power_mode(
+u8 v_accel_power_mode_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR MAG CONFIGURATION */
+/*****************************************************/
+/*!
+ * @brief This API used to read the mag output data rate
+ * from page one register from 0x09 bit 0 to 2
+ *
+ * @param v_mag_data_output_rate_u8 : The value of mag output data rate
+ *
+ * v_mag_data_output_rate_u8 | result
+ * ---------------------- |----------------------
+ * 0x00 | MAG_DATA_OUTPUT_RATE_2HZ
+ * 0x01 | MAG_DATA_OUTPUT_RATE_6HZ
+ * 0x02 | MAG_DATA_OUTPUT_RATE_8HZ
+ * 0x03 | MAG_DATA_OUTPUT_RATE_10HZ
+ * 0x04 | MAG_DATA_OUTPUT_RATE_15HZ
+ * 0x05 | MAG_DATA_OUTPUT_RATE_20HZ
+ * 0x06 | MAG_DATA_OUTPUT_RATE_25HZ
+ * 0x07 | MAG_DATA_OUTPUT_RATE_30HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_data_output_rate(
+u8 *v_mag_data_output_rate_u8);
+/*!
+ * @brief This API used to write the mag output data rate
+ * from page one register from 0x09 bit 0 to 2
+ *
+ * @param v_mag_data_output_rate_u8 : The value of mag output data rate
+ *
+ * v_mag_data_output_rate_u8 | result
+ * ---------------------- |----------------------
+ * 0x00 | MAG_DATA_OUTPUT_RATE_2HZ
+ * 0x01 | MAG_DATA_OUTPUT_RATE_6HZ
+ * 0x02 | MAG_DATA_OUTPUT_RATE_8HZ
+ * 0x03 | MAG_DATA_OUTPUT_RATE_10HZ
+ * 0x04 | MAG_DATA_OUTPUT_RATE_15HZ
+ * 0x05 | MAG_DATA_OUTPUT_RATE_20HZ
+ * 0x06 | MAG_DATA_OUTPUT_RATE_25HZ
+ * 0x07 | MAG_DATA_OUTPUT_RATE_30HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_data_output_rate(
+u8 v_mag_data_output_rate_u8);
+/*!
+ * @brief This API used to read the mag operation mode
+ * from page one register from 0x09 bit 3 to 4
+ *
+ * @param v_mag_operation_mode_u8 : The value of mag operation mode
+ *
+ * v_mag_operation_mode_u8 | result
+ * ------------------------- |--------------------------
+ * 0x00 | MAG_OPR_MODE_LOWPOWER
+ * 0x01 | MAG_OPR_MODE_REGULAR
+ * 0x02 | MAG_OPR_MODE_ENHANCED_REGULAR
+ * 0x03 | MAG_OPR_MODE_HIGH_ACCURACY
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_operation_mode(
+u8 *v_mag_operation_mode_u8);
+/*!
+ * @brief This API used to write the mag operation mode
+ * from page one register from 0x09 bit 3 to 4
+ *
+ * @param v_mag_operation_mode_u8 : The value of mag operation mode
+ *
+ * v_mag_operation_mode_u8 | result
+ * ------------------------- |--------------------------
+ * 0x00 | MAG_OPR_MODE_LOWPOWER
+ * 0x01 | MAG_OPR_MODE_REGULAR
+ * 0x02 | MAG_OPR_MODE_ENHANCED_REGULAR
+ * 0x03 | MAG_OPR_MODE_HIGH_ACCURACY
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_operation_mode(
+u8 v_mag_operation_mode_u8);
+/*!
+ * @brief This API used to read the mag power mode
+ * from page one register from 0x09 bit 4 to 6
+ *
+ * @param v_mag_power_mode_u8 : The value of mag power mode
+ *
+ * v_mag_power_mode_u8 | result
+ * --------------------|-----------------
+ * 0x00 | MAG_POWER_MODE_NORMAL
+ * 0x01 | MAG_POWER_MODE_SLEEP
+ * 0x02 | MAG_POWER_MODE_SUSPEND
+ * 0x03 | MAG_POWER_MODE_FORCE_MODE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_power_mode(
+u8 *v_mag_power_mode_u8);
+/*!
+ * @brief This API used to write the mag power mode
+ * from page one register from 0x09 bit 4 to 6
+ *
+ * @param v_mag_power_mode_u8 : The value of mag power mode
+ *
+ * v_mag_power_mode_u8 | result
+ * --------------------|-----------------
+ * 0x00 | MAG_POWER_MODE_NORMAL
+ * 0x01 | MAG_POWER_MODE_SLEEP
+ * 0x02 | MAG_POWER_MODE_SUSPEND
+ * 0x03 | MAG_POWER_MODE_FORCE_MODE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_power_mode(
+u8 v_mag_power_mode_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR GYRO CONFIGURATION */
+/*****************************************************/
+/*!
+ * @brief This API used to read the gyro range
+ * from page one register from 0x0A bit 0 to 3
+ *
+ * @param v_gyro_range_u8 : The value of gyro range
+ *
+ * v_gyro_range_u8 | result
+ * --------------------|-----------------
+ * 0x00 | GYRO_RANGE_2000DPS
+ * 0x01 | GYRO_RANGE_1000DPS
+ * 0x02 | GYRO_RANGE_500DPS
+ * 0x03 | GYRO_RANGE_250DPS
+ * 0x04 | GYRO_RANGE_125DPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_range(
+u8 *v_gyro_range_u8);
+/*!
+ * @brief This API used to write the gyro range
+ * from page one register from 0x0A bit 0 to 3
+ *
+ * @param v_gyro_range_u8 : The value of gyro range
+ *
+ * v_gyro_range_u8 | result
+ * --------------------|-----------------
+ * 0x00 | GYRO_RANGE_2000DPS
+ * 0x01 | GYRO_RANGE_1000DPS
+ * 0x02 | GYRO_RANGE_500DPS
+ * 0x03 | GYRO_RANGE_250DPS
+ * 0x04 | GYRO_RANGE_125DPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_range(
+u8 v_gyro_range_u8);
+/*!
+ * @brief This API used to read the gyro bandwidth
+ * from page one register from 0x0A bit 3 to 5
+ *
+ * @param v_gyro_bw_u8 : The value of gyro bandwidth
+ *
+ * v_gyro_bw_u8 | result
+ * --------------------|-----------------
+ * 0x00 | GYRO_BW_523HZ
+ * 0x01 | GYRO_BW_230HZ
+ * 0x02 | GYRO_BW_116HZ
+ * 0x03 | GYRO_BW_47HZ
+ * 0x04 | GYRO_BW_23HZ
+ * 0x05 | GYRO_BW_12HZ
+ * 0x06 | GYRO_BW_64HZ
+ * 0x07 | GYRO_BW_32HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_bw(
+u8 *v_gyro_bw_u8);
+/*!
+ * @brief This API used to write the gyro bandwidth
+ * from page one register from 0x0A bit 3 to 5
+ *
+ * @param v_gyro_bw_u8 : The value of gyro bandwidth
+ *
+ * v_gyro_bw_u8 | result
+ * --------------------|-----------------
+ * 0x00 | GYRO_BW_523HZ
+ * 0x01 | GYRO_BW_230HZ
+ * 0x02 | GYRO_BW_116HZ
+ * 0x03 | GYRO_BW_47HZ
+ * 0x04 | GYRO_BW_23HZ
+ * 0x05 | GYRO_BW_12HZ
+ * 0x06 | GYRO_BW_64HZ
+ * 0x07 | GYRO_BW_32HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_bw(
+u8 v_gyro_bw_u8);
+/*!
+ * @brief This API used to read the gyro power mode
+ * from page one register from 0x0B bit 0 to 2
+ *
+ * @param v_gyro_power_mode_u8 : The value of gyro power mode
+ *
+ * v_gyro_power_mode_u8 | result
+ * ----------------------|----------------------------
+ * 0x00 | GYRO_OPR_MODE_NORMAL
+ * 0x01 | GYRO_OPR_MODE_FASTPOWERUP
+ * 0x02 | GYRO_OPR_MODE_DEEPSUSPEND
+ * 0x03 | GYRO_OPR_MODE_SUSPEND
+ * 0x04 | GYRO_OPR_MODE_ADVANCE_POWERSAVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_power_mode(
+u8 *v_gyro_power_mode_u8);
+/*!
+ * @brief This API used to write the gyro power mode
+ * from page one register from 0x0B bit 0 to 2
+ *
+ * @param v_gyro_power_mode_u8 : The value of gyro power mode
+ *
+ * v_gyro_power_mode_u8 | result
+ * ----------------------|----------------------------
+ * 0x00 | GYRO_OPR_MODE_NORMAL
+ * 0x01 | GYRO_OPR_MODE_FASTPOWERUP
+ * 0x02 | GYRO_OPR_MODE_DEEPSUSPEND
+ * 0x03 | GYRO_OPR_MODE_SUSPEND
+ * 0x04 | GYRO_OPR_MODE_ADVANCE_POWERSAVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_power_mode(
+u8 v_gyro_power_mode_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR ACCEL SLEEP SETTINGS */
+/*****************************************************/
+/*!
+ * @brief This API used to read the accel sleep mode
+ * from page one register from 0x0C bit 0
+ *
+ * @param v_sleep_tmr_u8 : The value of accel sleep mode
+ *
+ * v_sleep_tmr_u8 | result
+ * ----------------- |------------------------------------
+ * 0x00 | enable EventDrivenSampling(EDT)
+ * 0x01 | enable Equidistant sampling mode(EST)
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_sleep_tmr_mode(
+u8 *v_sleep_tmr_u8);
+/*!
+ * @brief This API used to write the accel sleep mode
+ * from page one register from 0x0C bit 0
+ *
+ * @param v_sleep_tmr_u8 : The value of accel sleep mode
+ *
+ * v_sleep_tmr_u8 | result
+ * ----------------- |------------------------------------
+ * 0x00 | enable EventDrivenSampling(EDT)
+ * 0x01 | enable Equidistant sampling mode(EST)
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_sleep_tmr_mode(
+u8 v_sleep_tmr_u8);
+/*!
+ * @brief This API used to read the accel sleep duration
+ * from page one register from 0x0C bit 1 to 4
+ *
+ * @param v_sleep_durn_u8 : The value of accel sleep duration
+ *
+ * v_sleep_durn_u8 | result
+ * ---------------- |-----------------------------
+ * 0x05 | BNO055_ACCEL_SLEEP_DURN_0_5MS
+ * 0x06 | BNO055_ACCEL_SLEEP_DURN_1MS
+ * 0x07 | BNO055_ACCEL_SLEEP_DURN_2MS
+ * 0x08 | BNO055_ACCEL_SLEEP_DURN_4MS
+ * 0x09 | BNO055_ACCEL_SLEEP_DURN_6MS
+ * 0x0A | BNO055_ACCEL_SLEEP_DURN_10MS
+ * 0x0B | BNO055_ACCEL_SLEEP_DURN_25MS
+ * 0x0C | BNO055_ACCEL_SLEEP_DURN_50MS
+ * 0x0D | BNO055_ACCEL_SLEEP_DURN_100MS
+ * 0x0E | BNO055_ACCEL_SLEEP_DURN_500MS
+ * 0x0F | BNO055_ACCEL_SLEEP_DURN_1S
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_sleep_durn(
+u8 *v_sleep_durn_u8);
+/*!
+ * @brief This API used to write the accel sleep duration
+ * from page one register from 0x0C bit 1 to 4
+ *
+ * @param v_sleep_durn_u8 : The value of accel sleep duration
+ *
+ * v_sleep_durn_u8 | result
+ * ---------------- |-----------------------------
+ * 0x05 | BNO055_ACCEL_SLEEP_DURN_0_5MS
+ * 0x06 | BNO055_ACCEL_SLEEP_DURN_1MS
+ * 0x07 | BNO055_ACCEL_SLEEP_DURN_2MS
+ * 0x08 | BNO055_ACCEL_SLEEP_DURN_4MS
+ * 0x09 | BNO055_ACCEL_SLEEP_DURN_6MS
+ * 0x0A | BNO055_ACCEL_SLEEP_DURN_10MS
+ * 0x0B | BNO055_ACCEL_SLEEP_DURN_25MS
+ * 0x0C | BNO055_ACCEL_SLEEP_DURN_50MS
+ * 0x0D | BNO055_ACCEL_SLEEP_DURN_100MS
+ * 0x0E | BNO055_ACCEL_SLEEP_DURN_500MS
+ * 0x0F | BNO055_ACCEL_SLEEP_DURN_1S
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_sleep_durn(
+u8 v_sleep_durn_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR GYRO SLEEP SETTINGS */
+/*****************************************************/
+/*!
+ * @brief This API used to write the gyro sleep duration
+ * from page one register from 0x0D bit 0 to 2
+ *
+ * @param v_sleep_durn_u8 : The value of gyro sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_sleep_durn(
+u8 *v_sleep_durn_u8);
+/*!
+ * @brief This API used to write the gyro sleep duration
+ * from page one register from 0x0D bit 0 to 2
+ *
+ * @param v_sleep_durn_u8 : The value of gyro sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_sleep_durn(
+u8 sleep_durn);
+/*!
+ * @brief This API used to read the gyro auto sleep duration
+ * from page one register from 0x0D bit 3 to 5
+ *
+ * @param v_auto_sleep_durn_u8 : The value of gyro auto sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_auto_sleep_durn(
+u8 *v_auto_sleep_durn_u8);
+/*!
+ * @brief This API used to write the gyro auto sleep duration
+ * from page one register from 0x0D bit 3 to 5
+ *
+ * @param v_auto_sleep_durn_u8 : The value of gyro auto sleep duration
+ * @param bw : The value of gyro bandwidth
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_gyro_set_auto_sleep_durn(
+u8 v_auto_sleep_durn_u8, u8 bw);
+/*****************************************************/
+/**\name FUNCTIONS FOR MAG SLEEP SETTINGS */
+/*****************************************************/
+/*!
+ * @brief This API used to read the mag sleep mode
+ * from page one register from 0x0E bit 0
+ *
+ * @param v_sleep_mode_u8 : The value of mag sleep mode
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_sleep_mode(
+u8 *v_sleep_mode_u8);
+/*!
+ * @brief This API used to write the mag sleep mode
+ * from page one register from 0x0E bit 0
+ *
+ * @param v_sleep_mode_u8 : The value of mag sleep mode
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_sleep_mode(
+u8 v_sleep_mode_u8);
+/*!
+ * @brief This API used to read the mag sleep duration
+ * from page one register from 0x0E bit 1 to 4
+ *
+ * @param v_sleep_durn_u8 : The value of mag sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_sleep_durn(
+u8 *v_sleep_durn_u8);
+/*!
+ * @brief This API used to write the mag sleep duration
+ * from page one register from 0x0E bit 1 to 4
+ *
+ * @param v_sleep_durn_u8 : The value of mag sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_sleep_durn(
+u8 v_sleep_durn_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR GYRO INTERRUPT MASK */
+/*****************************************************/
+/*!
+ * @brief This API used to read the gyro anymotion interrupt mask
+ * from page one register from 0x0F bit 2
+ *
+ * @param v_gyro_any_motion_u8 : The value of gyro anymotion interrupt mask
+ * v_gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ * bno055_set_gyro_any_motion_axis_enable()
+ *
+ * Filter setting:
+ * bno055_set_gyro_any_motion_filter()
+ *
+ * Threshold :
+ *
+ * bno055_set_gyro_any_motion_thres()
+ *
+ * Slope samples :
+ *
+ * bno055_set_gyro_any_motion_slope_samples()
+ *
+ * Awake duration :
+ *
+ * bno055_set_gyro_any_motion_awake_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_mask_gyro_any_motion(
+u8 *v_gyro_any_motion_u8);
+/*!
+ * @brief This API used to write the gyro anymotion interrupt mask
+ * from page one register from 0x0F bit 2
+ *
+ * @param v_gyro_any_motion_u8 : The value of gyro anymotion interrupt mask
+ * v_gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ * bno055_set_gyro_any_motion_axis_enable()
+ *
+ * Filter setting:
+ * bno055_set_gyro_any_motion_filter()
+ *
+ * Threshold :
+ *
+ * bno055_set_gyro_any_motion_thres()
+ *
+ * Slope samples :
+ *
+ * bno055_set_gyro_any_motion_slope_samples()
+ *
+ * Awake duration :
+ *
+ * bno055_set_gyro_any_motion_awake_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_mask_gyro_any_motion(
+u8 v_gyro_any_motion_u8);
+/*!
+ * @brief This API used to read the gyro highrate interrupt mask
+ * from page one register from 0x0F bit 3
+ *
+ * @param v_gyro_highrate_u8 : The value of gyro highrate interrupt mask
+ * v_gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_gyro_highrate_axis_enable()
+ *
+ * Filter :
+ *
+ * bno055_set_gyro_highrate_filter()
+ *
+ * Threshold :
+ *
+ * bno055_get_gyro_highrate_x_thres()
+ *
+ * bno055_get_gyro_highrate_y_thres()
+ *
+ * bno055_get_gyro_highrate_z_thres()
+ *
+ * Hysteresis :
+ *
+ * bno055_set_gyro_highrate_x_hyst()
+ *
+ * bno055_set_gyro_highrate_y_hyst()
+ *
+ * bno055_set_gyro_highrate_z_hyst()
+ *
+ * Duration :
+ *
+ * bno055_set_gyro_highrate_x_durn()
+ *
+ * bno055_set_gyro_highrate_y_durn()
+ *
+ * bno055_set_gyro_highrate_z_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_mask_gyro_highrate(
+u8 *v_gyro_highrate_u8);
+/*!
+ * @brief This API used to write the gyro highrate interrupt mask
+ * from page one register from 0x0F bit 3
+ *
+ * @param v_gyro_highrate_u8 : The value of gyro highrate interrupt mask
+ * v_gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_gyro_highrate_axis_enable()
+ *
+ * Filter :
+ *
+ * bno055_set_gyro_highrate_filter()
+ *
+ * Threshold :
+ *
+ * bno055_get_gyro_highrate_x_thres()
+ *
+ * bno055_get_gyro_highrate_y_thres()
+ *
+ * bno055_get_gyro_highrate_z_thres()
+ *
+ * Hysteresis :
+ *
+ * bno055_set_gyro_highrate_x_hyst()
+ *
+ * bno055_set_gyro_highrate_y_hyst()
+ *
+ * bno055_set_gyro_highrate_z_hyst()
+ *
+ * Duration :
+ *
+ * bno055_set_gyro_highrate_x_durn()
+ *
+ * bno055_set_gyro_highrate_y_durn()
+ *
+ * bno055_set_gyro_highrate_z_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_mask_gyro_highrate(
+u8 v_gyro_highrate_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR ACCEL INTERRUPT MASK */
+/*****************************************************/
+/*!
+ * @brief This API used to read the accel highg interrupt mask
+ * from page one register from 0x0F bit 5
+ *
+ * @param v_accel_high_g_u8 : The value of accel highg interrupt mask
+ * v_accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_accel_high_g_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_high_g_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_high_g_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_mask_accel_high_g(
+u8 *v_accel_high_g_u8);
+/*!
+ * @brief This API used to write the accel highg interrupt mask
+ * from page one register from 0x0F bit 5
+ *
+ * @param v_accel_high_g_u8 : The value of accel highg interrupt mask
+ * v_accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_accel_high_g_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_high_g_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_high_g_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_mask_accel_high_g(
+u8 v_accel_high_g_u8);
+/*!
+ * @brief This API used to read the accel anymotion interrupt mask
+ * from page one register from 0x0F bit 6
+ *
+ * @param v_accel_any_motion_u8 : The value of accel anymotion interrupt mask
+ * v_accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_accel_high_g_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_high_g_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_high_g_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_mask_accel_any_motion(
+u8 *v_accel_any_motion_u8);
+/*!
+ * @brief This API used to write the accel anymotion interrupt mask
+ * from page one register from 0x0F bit 6
+ *
+ * @param v_accel_any_motion_u8 : The value of accel anymotion interrupt mask
+ * v_accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Duration:
+ *
+ * bno055_set_accel_any_motion_durn()
+ *
+ * Threshold:
+ *
+ * bno055_set_accel_any_motion_thres()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_mask_accel_any_motion(
+u8 v_accel_any_motion_u8);
+/*!
+ * @brief This API used to read the accel nomotion interrupt mask
+ * from page one register from 0x0F bit 7
+ *
+ * @param v_accel_nomotion_u8 : The value of accel nomotion interrupt mask
+ * v_accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ *
+ * @note While enabling the accel anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Duration:
+ *
+ * bno055_set_accel_any_motion_durn()
+ *
+ * Threshold:
+ *
+ * bno055_set_accel_any_motion_thres())
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_mask_accel_no_motion(
+u8 *v_accel_nomotion_u8);
+/*!
+ * @brief This API used to write the accel nomotion interrupt mask
+ * from page one register from 0x0F bit 7
+ *
+ * @param v_accel_nomotion_u8 : The value of accel nomotion interrupt mask
+ * v_accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel nomotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_slow_no_motion_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_slow_no_motion_durn()
+ *
+ * Slow/no motion enable:
+ *
+ * bno055_set_accel_slow_no_motion_enable()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_mask_accel_no_motion(
+u8 v_accel_nomotion_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR GYRO INTERRUPT */
+/*****************************************************/
+/*!
+ * @brief This API used to read the gyro anymotion interrupt
+ * from page one register from 0x10 bit 2
+ *
+ * @param v_gyro_any_motion_u8 : The value of gyro anymotion interrupt
+ * v_gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ * bno055_set_gyro_any_motion_axis_enable()
+ *
+ * Filter setting:
+ * bno055_set_gyro_any_motion_filter()
+ *
+ * Threshold :
+ *
+ * bno055_set_gyro_any_motion_thres()
+ *
+ * Slope samples :
+ *
+ * bno055_set_gyro_any_motion_slope_samples()
+ *
+ * Awake duration :
+ *
+ * bno055_set_gyro_any_motion_awake_durn()
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_gyro_any_motion(
+u8 *v_gyro_any_motion_u8);
+/*!
+ * @brief This API used to write the gyro anymotion interrupt
+ * from page one register from 0x10 bit 2
+ *
+ * @param v_gyro_any_motion_u8 : The value of gyro anymotion interrupt
+ * v_gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ * bno055_set_gyro_any_motion_axis_enable()
+ *
+ * Filter setting:
+ * bno055_set_gyro_any_motion_filter()
+ *
+ * Threshold :
+ *
+ * bno055_set_gyro_any_motion_thres()
+ *
+ * Slope samples :
+ *
+ * bno055_set_gyro_any_motion_slope_samples()
+ *
+ * Awake duration :
+ *
+ * bno055_set_gyro_any_motion_awake_durn()
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_gyro_any_motion(
+u8 v_gyro_any_motion_u8);
+/*!
+ * @brief This API used to read the gyro highrate interrupt
+ * from page one register from 0x10 bit 3
+ *
+ * @param v_gyro_highrate_u8 : The value of gyro highrate interrupt
+ * v_gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_gyro_highrate_axis_enable()
+ *
+ * Filter :
+ *
+ * bno055_set_gyro_highrate_filter()
+ *
+ * Threshold :
+ *
+ * bno055_get_gyro_highrate_x_thres()
+ *
+ * bno055_get_gyro_highrate_y_thres()
+ *
+ * bno055_get_gyro_highrate_z_thres()
+ *
+ * Hysteresis :
+ *
+ * bno055_set_gyro_highrate_x_hyst()
+ *
+ * bno055_set_gyro_highrate_y_hyst()
+ *
+ * bno055_set_gyro_highrate_z_hyst()
+ *
+ * Duration :
+ *
+ * bno055_set_gyro_highrate_x_durn()
+ *
+ * bno055_set_gyro_highrate_y_durn()
+ *
+ * bno055_set_gyro_highrate_z_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_gyro_highrate(
+u8 *v_gyro_highrate_u8);
+/*!
+ * @brief This API used to write the gyro highrate interrupt
+ * from page one register from 0x10 bit 3
+ *
+ * @param v_gyro_highrate_u8 : The value of gyro highrate interrupt
+ * v_gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_gyro_highrate_axis_enable()
+ *
+ * Filter :
+ *
+ * bno055_set_gyro_highrate_filter()
+ *
+ * Threshold :
+ *
+ * bno055_get_gyro_highrate_x_thres()
+ *
+ * bno055_get_gyro_highrate_y_thres()
+ *
+ * bno055_get_gyro_highrate_z_thres()
+ *
+ * Hysteresis :
+ *
+ * bno055_set_gyro_highrate_x_hyst()
+ *
+ * bno055_set_gyro_highrate_y_hyst()
+ *
+ * bno055_set_gyro_highrate_z_hyst()
+ *
+ * Duration :
+ *
+ * bno055_set_gyro_highrate_x_durn()
+ *
+ * bno055_set_gyro_highrate_y_durn()
+ *
+ * bno055_set_gyro_highrate_z_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_gyro_highrate(
+u8 v_gyro_highrate_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR ACCEL INTERRUPT */
+/*****************************************************/
+/*!
+ * @brief This API used to read the accel highg interrupt
+ * from page one register from 0x10 bit 5
+ *
+ * @param v_accel_high_g_u8 : The value of accel highg interrupt
+ * v_accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_accel_high_g_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_high_g_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_high_g_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_accel_high_g(
+u8 *v_accel_high_g_u8);
+/*!
+ * @brief This API used to write the accel highg interrupt
+ * from page one register from 0x10 bit 5
+ *
+ * @param v_accel_high_g_u8 : The value of accel highg interrupt
+ * v_accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_accel_high_g_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_high_g_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_high_g_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_accel_high_g(
+u8 v_accel_high_g_u8);
+/*!
+ * @brief This API used to read the accel anymotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param v_accel_any_motion_u8 : The value of accel anymotion interrupt
+ * v_accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Duration:
+ *
+ * bno055_set_accel_any_motion_durn()
+ *
+ * Threshold:
+ *
+ * bno055_set_accel_any_motion_thres()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_accel_any_motion(
+u8 *v_accel_any_motion_u8);
+/*!
+ * @brief This API used to write the accel anymotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param v_accel_any_motion_u8 : The value of accel anymotion interrupt
+ * v_accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Duration:
+ *
+ * bno055_set_accel_any_motion_durn()
+ *
+ * Threshold:
+ *
+ * bno055_set_accel_any_motion_thres()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_accel_any_motion(
+u8 v_accel_any_motion_u8);
+/*!
+ * @brief This API used to read the accel nomotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param v_accel_nomotion_u8 : The value of accel nomotion interrupt
+ * v_accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel nomotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_slow_no_motion_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_slow_no_motion_durn()
+ *
+ * Slow/no motion enable:
+ *
+ * bno055_set_accel_slow_no_motion_enable()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_accel_no_motion(
+u8 *v_accel_nomotion_u8);
+/*!
+ * @brief This API used to write the accel nomotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param v_accel_nomotion_u8 : The value of accel nomotion interrupt
+ * v_accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel nomotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_slow_no_motion_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_slow_no_motion_durn()
+ *
+ * Slow/no motion enable:
+ *
+ * bno055_set_accel_slow_no_motion_enable()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_accel_no_motion(
+u8 v_accel_nomotion_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR ACCEL ANY_MOTION THRESHOLD */
+/*****************************************************/
+/*!
+ * @brief This API used to read the accel any motion threshold
+ * from page one register from 0x11 bit 0 to 7
+ *
+ * @param v_accel_any_motion_thres_u8 : The value of any motion threshold
+ * v_accel_any_motion_thres_u8 | result
+ * ------------------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel anymotion threshold dependent on the
+ * range values
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 3.19mg | 1LSB
+ * 4g | 7.81mg | 1LSB
+ * 8g | 15.63mg | 1LSB
+ * 16g | 31.25mg | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_any_motion_thres(
+u8 *v_accel_any_motion_thres_u8);
+/*!
+ * @brief This API used to write the accel any motion threshold
+ * from page one register from 0x11 bit 0 to 7
+ *
+ * @param v_accel_any_motion_thres_u8 : The value of any motion threshold
+ * v_accel_any_motion_thres_u8 | result
+ * ------------------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel anymotion threshold dependent on the
+ * range values
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 3.19mg | 1LSB
+ * 4g | 7.81mg | 1LSB
+ * 8g | 15.63mg | 1LSB
+ * 16g | 31.25mg | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_any_motion_thres(
+u8 v_accel_any_motion_thres_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR ACCEL ANY_MOTION DURATION */
+/*****************************************************/
+/*!
+ * @brief This API used to read the accel anymotion duration
+ * from page one register from 0x12 bit 0 to 1
+ *
+ * @param v_accel_any_motion_durn_u8 : The value of accel anymotion duration
+ * v_accel_any_motion_durn_u8 | result
+ * ------------------------- | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_any_motion_durn(
+u8 *v_accel_any_motion_durn_u8);
+/*!
+ * @brief This API used to write the accel anymotion duration
+ * from page one register from 0x12 bit 0 to 1
+ *
+ * @param v_accel_any_motion_durn_u8 : The value of accel anymotion duration
+ *
+ * v_accel_any_motion_durn_u8 | result
+ * ------------------------- | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_any_motion_durn(
+u8 v_accel_any_motion_durn_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR ACCEL ANY_MOTION AXIS ENABLE */
+/*****************************************************/
+/*!
+ * @brief This API used to read the accel anymotion enable
+ * from page one register from 0x12 bit 2 to 4
+ *
+ * @param v_data_u8 : The value of accel anymotion enable
+ * v_data_u8 | result
+ * ------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of accel anymotion axis selection
+ * v_channel_u8 | value
+ * -------------------------- | ----------
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_X_AXIS | 0
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS | 1
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_any_motion_no_motion_axis_enable(
+u8 v_channel_u8, u8 *v_data_u8);
+/*!
+ * @brief This API used to write the accel anymotion enable
+ * from page one register from 0x12 bit 2 to 4
+ *
+ * @param v_data_u8 : The value of accel anymotion enable
+ * v_data_u8 | result
+ * ------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of accel anymotion axis selection
+ * v_channel_u8 | value
+ * -------------------------- | ----------
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_X_AXIS | 0
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS | 1
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_any_motion_no_motion_axis_enable(
+u8 v_channel_u8, u8 v_data_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR ACCEL HIGHG AXIS ENABLE */
+/*****************************************************/
+/*!
+ * @brief This API used to read the accel highg enable
+ * from page one register from 0x12 bit 5 to 7
+ *
+ * @param v_data_u8 : The value of accel highg enable
+ * v_data_u8| result
+ * ------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of accel highg axis selection
+ * v_channel_u8 | value
+ * -------------------------- | ----------
+ * BNO055_ACCEL_HIGH_G_X_AXIS | 0
+ * BNO055_ACCEL_HIGH_G_Y_AXIS | 1
+ * BNO055_ACCEL_HIGH_G_Z_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_high_g_axis_enable(
+u8 v_channel_u8, u8 *v_data_u8);
+/*!
+ * @brief This API used to write the accel highg enable
+ * from page one register from 0x12 bit 5 to 7
+ *
+ * @param v_data_u8 : The value of accel highg enable
+ * v_data_u8| result
+ * ------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of accel highg axis selection
+ * v_channel_u8 | value
+ * -------------------------- | ----------
+ * BNO055_ACCEL_HIGH_G_X_AXIS | 0
+ * BNO055_ACCEL_HIGH_G_Y_AXIS | 1
+ * BNO055_ACCEL_HIGH_G_Z_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_high_g_axis_enable(
+u8 v_channel_u8, u8 v_data_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR ACCEL HIGHG DURATION */
+/*****************************************************/
+/*!
+ * @brief This API used to read the accel highg duration
+ * from page one register from 0x13 bit 0 to 7
+ *
+ * @param v_accel_high_g_durn_u8 : The value of accel highg duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The high-g interrupt trigger delay according
+ * to [highg duration + 1] * 2 ms
+ *
+ * in a range from 2 ms to 512 ms
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_high_g_durn(
+u8 *v_accel_high_g_durn_u8);
+/*!
+ * @brief This API used to write the accel highg duration
+ * from page one register from 0x13 bit 0 to 7
+ *
+ * @param v_accel_high_g_durn_u8 : The value of accel highg duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The high-g interrupt trigger delay according
+ * to [highg duration + 1] * 2 ms
+ *
+ * in a range from 2 ms to 512 ms
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_high_g_durn(
+u8 v_accel_high_g_durn_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR ACCEL HIGHG THRESHOLD */
+/*****************************************************/
+/*!
+ * @brief This API used to read the accel highg threshold
+ * from page one register from 0x14 bit 0 to 7
+ *
+ * @param v_accel_high_g_thres_u8 : The value of accel highg threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel highg interrupt threshold dependent
+ * for accel g range
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 7.81mg | 1LSB
+ * 4g | 15.63mg | 1LSB
+ * 8g | 31.25mg | 1LSB
+ * 16g | 62.5mg | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_high_g_thres(
+u8 *v_accel_high_g_thres_u8);
+/*!
+ * @brief This API used to write the accel highg threshold
+ * from page one register from 0x14 bit 0 to 7
+ *
+ * @param v_accel_high_g_thres_u8 : The value of accel highg threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel highg interrupt threshold dependent
+ * for accel g range
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 7.81mg | 1LSB
+ * 4g | 15.63mg | 1LSB
+ * 8g | 31.25mg | 1LSB
+ * 16g | 62.5mg | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_high_g_thres(
+u8 v_accel_high_g_thres_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR ACCEL SLOWNOMOTION THRESHOLD */
+/**************************************************************/
+/*!
+ * @brief This API used to read the accel slownomotion threshold
+ * from page one register from 0x15 bit 0 to 7
+ *
+ * @param v_accel_slow_no_motion_thres_u8 :
+ * The value of accel slownomotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel slow no motion interrupt threshold dependent
+ * for accel g range
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 3.19mg | 1LSB
+ * 4g | 7.81mg | 1LSB
+ * 8g | 15.63mg | 1LSB
+ * 16g | 31.25mg | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_slow_no_motion_thres(
+u8 *v_accel_slow_no_motion_thres_u8);
+/*!
+ * @brief This API used to write the accel slownomotion threshold
+ * from page one register from 0x15 bit 0 to 7
+ *
+ * @param v_accel_slow_no_motion_thres_u8 :
+ * The value of accel slownomotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel slow no motion interrupt threshold dependent
+ * for accel g range
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 3.19mg | 1LSB
+ * 4g | 7.81mg | 1LSB
+ * 8g | 15.63mg | 1LSB
+ * 16g | 31.25mg | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_slow_no_motion_thres(
+u8 v_accel_slow_no_motion_thres_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR ACCEL SLOWNOMOTION ENABLE */
+/**************************************************************/
+/*!
+ * @brief This API used to read accel slownomotion enable
+ * from page one register from 0x16 bit 0
+ *
+ * @param v_accel_slow_no_motion_en_u8 : The value of accel slownomotion enable
+ * v_accel_slow_no_motion_en_u8 | result
+ * ------------------------ | --------
+ * 0x01 | Slow motion
+ * 0x00 | No motion
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_slow_no_motion_enable(
+u8 *v_accel_slow_no_motion_en_u8);
+/*!
+ * @brief This API used to write accel slownomotion enable
+ * from page one register from 0x16 bit 0
+ *
+ * @param v_accel_slow_no_motion_en_u8 : The value of accel slownomotion enable
+ * v_accel_slow_no_motion_en_u8 | result
+ * ------------------------ | --------
+ * 0x01 | Slow motion
+ * 0x00 | No motion
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_slow_no_motion_enable(
+u8 v_accel_slow_no_motion_en_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR ACCEL SLOWNOMOTION DURATION */
+/**************************************************************/
+/*!
+ * @brief This API used to read accel slownomotion duration
+ * from page one register from 0x16 bit 1 to 6
+ *
+ * @param v_accel_slow_no_motion_durn_u8 :
+ * The value of accel slownomotion duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_slow_no_motion_durn(
+u8 *v_accel_slow_no_motion_durn_u8);
+/*!
+ * @brief This API used to write accel slownomotion duration
+ * from page one register from 0x16 bit 1 to 6
+ *
+ * @param v_accel_slow_no_motion_durn_u8 :
+ * The value of accel slownomotion duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_slow_no_motion_durn(
+u8 v_accel_slow_no_motion_durn_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR GYRO ANY_MOTION AXIS ENABLE */
+/**************************************************************/
+/*!
+ * @brief This API used to read the gyro anymotion enable
+ * from page one register from 0x17 bit 0 to 2
+ *
+ * @param v_data_u8 : The value of gyro anymotion enable
+ * v_data_u8 | result
+ * ----------------- |-------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of gyro anymotion axis selection
+ * v_channel_u8 | value
+ * --------------------------- | ----------
+ * BNO055_GYRO_ANY_MOTIONX_AXIS | 0
+ * BNO055_GYRO_ANY_MOTIONY_AXIS | 1
+ * BNO055_GYRO_ANY_MOTIONZ_AXIS | 2
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_axis_enable(
+u8 v_channel_u8, u8 *v_data_u8);
+/*!
+ * @brief This API used to write the gyro anymotion enable
+ * from page one register from 0x17 bit 0 to 2
+ *
+ * @param v_data_u8 : The value of gyro anymotion enable
+ * v_data_u8 | result
+ * ----------------- |-------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of gyro anymotion axis selection
+ * v_channel_u8 | value
+ * --------------------------- | ----------
+ * BNO055_GYRO_ANY_MOTIONX_AXIS | 0
+ * BNO055_GYRO_ANY_MOTIONY_AXIS | 1
+ * BNO055_GYRO_ANY_MOTIONZ_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_axis_enable(
+u8 v_channel_u8, u8 v_data_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR GYRO HIGHRATE ENABLE */
+/**************************************************************/
+/*!
+ * @brief This API used to read the gyro highrate enable
+ * from page one register from 0x17 bit 3 to 5
+ *
+ * @param v_data_u8 : The value of gyro highrate enable
+ * v_data_u8 | result
+ * ---------------- |-------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of gyro highrate axis selection
+ * v_channel_u8 | value
+ * ------------------------ | ----------
+ * BNO055_GYRO_HIGHRATE_X_AXIS | 0
+ * BNO055_GYRO_HIGHRATE_Y_AXIS | 1
+ * BNO055_GYRO_HIGHRATE_Z_AXIS | 2
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_axis_enable(
+u8 v_channel_u8, u8 *v_data_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR GYRO HIGHRATE AXIS ENABLE */
+/**************************************************************/
+/*!
+ * @brief This API used to write the gyro highrate enable
+ * from page one register from 0x17 bit 3 to 5
+ *
+ * @param v_data_u8 : The value of gyro highrate enable
+ * v_data_u8 | result
+ * ---------------- |-------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of gyro highrate axis selection
+ * v_channel_u8 | value
+ * ------------------------ | ----------
+ * BNO055_GYRO_HIGHRATE_X_AXIS | 0
+ * BNO055_GYRO_HIGHRATE_Y_AXIS | 1
+ * BNO055_GYRO_HIGHRATE_Z_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_axis_enable(
+u8 v_channel_u8, u8 v_data_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR GYRO ANY_MOTION FILTER */
+/**************************************************************/
+/*!
+ * @brief This API used to read gyro anymotion filter
+ * from page one register from 0x17 bit 6
+ *
+ * @param v_gyro_any_motion_filter_u8 : The value of gyro anymotion filter
+ * v_gyro_any_motion_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | FILTERED
+ * 0x01 | UNFILTERED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_filter(
+u8 *v_gyro_any_motion_filter_u8);
+/*!
+ * @brief This API used to write gyro anymotion filter
+ * from page one register from 0x17 bit 6
+ *
+ * @param v_gyro_any_motion_filter_u8 : The value of gyro anymotion filter
+ * v_gyro_any_motion_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | FILTERED
+ * 0x01 | UNFILTERED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_filter(
+u8 v_gyro_any_motion_filter_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR GYRO HIGHRATE FILTER */
+/**************************************************************/
+/*!
+ * @brief This API used to read gyro highrate filter
+ * from page one register from 0x17 bit 7
+ *
+ * @param v_gyro_highrate_filter_u8 : The value of gyro highrate filter
+ * v_gyro_highrate_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | FILTERED
+ * 0x01 | UNFILTERED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_filter(
+u8 *v_gyro_highrate_filter_u8);
+/*!
+ * @brief This API used to write gyro highrate filter
+ * from page one register from 0x17 bit 7
+ *
+ * @param v_gyro_highrate_filter_u8 : The value of gyro highrate filter
+ * v_gyro_highrate_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | FILTERED
+ * 0x01 | UNFILTERED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_filter(
+u8 v_gyro_highrate_filter_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR GYRO HIGHRATE X THRESHOLD */
+/**************************************************************/
+/*!
+ * @brief This API used to read gyro highrate x threshold
+ * from page one register from 0x18 bit 0 to 4
+ *
+ * @param v_gyro_highrate_x_thres_u8 : The value of gyro x highrate threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_x_thres(
+u8 *v_gyro_highrate_x_thres_u8);
+/*!
+ * @brief This API used to write gyro highrate x threshold
+ * from page one register from 0x18 bit 0 to 4
+ *
+ * @param v_gyro_highrate_x_thres_u8 : The value of gyro x highrate threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_x_thres(
+u8 v_gyro_highrate_x_thres_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR GYRO HIGHRATE X HYSTERESIS */
+/**************************************************************/
+/*!
+ * @brief This API used to read gyro highrate x hysteresis
+ * from page one register from 0x18 bit 5 to 6
+ *
+ * @param v_gyro_highrate_x_hyst_u8 : The value of gyro highrate x hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_x_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_x_hyst(
+u8 *v_gyro_highrate_x_hyst_u8);
+/*!
+ * @brief This API used to write gyro highrate x hysteresis
+ * from page one register from 0x18 bit 5 to 6
+ *
+ * @param v_gyro_highrate_x_hyst_u8 : The value of gyro highrate x hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_x_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_x_hyst(
+u8 v_gyro_highrate_x_hyst_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR GYRO HIGHRATE X DURATION */
+/**************************************************************/
+/*!
+ * @brief This API used to read gyro highrate x duration
+ * from page one register from 0x19 bit 0 to 7
+ *
+ * @param v_gyro_highrate_x_durn_u8 : The value of gyro highrate x duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_x_durn_u8)*2.5ms
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_x_durn(
+u8 *v_gyro_highrate_x_durn_u8);
+/*!
+ * @brief This API used to write gyro highrate x duration
+ * from page one register from 0x19 bit 0 to 7
+ *
+ * @param v_gyro_highrate_x_durn_u8 : The value of gyro highrate x duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_x_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_x_durn(
+u8 v_gyro_highrate_x_durn_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR GYRO HIGHRATE Y THRESHOLD */
+/**************************************************************/
+/*!
+ * @brief This API used to read gyro highrate y threshold
+ * from page one register from 0x1A bit 0 to 4
+ *
+ * @param v_gyro_highrate_y_thres_u8 : The value of gyro highrate y threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_y_thres(
+u8 *v_gyro_highrate_y_thres_u8);
+/*!
+ * @brief This API used to write gyro highrate y threshold
+ * from page one register from 0x1A bit 0 to 4
+ *
+ * @param v_gyro_highrate_y_thres_u8 : The value of gyro highrate y threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_y_thres(
+u8 v_gyro_highrate_y_thres_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR GYRO HIGHRATE Y HYSTERESIS */
+/**************************************************************/
+/*!
+ * @brief This API used to read gyro highrate y hysteresis
+ * from page one register from 0x1A bit 5 to 6
+ *
+ * @param v_gyro_highrate_y_hyst_u8 : The value of gyro highrate y hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_y_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_y_hyst(
+u8 *v_gyro_highrate_y_hyst_u8);
+/*!
+ * @brief This API used to write gyro highrate y hysteresis
+ * from page one register from 0x1A bit 5 to 6
+ *
+ * @param v_gyro_highrate_y_hyst_u8 : The value of gyro highrate y hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_y_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_y_hyst(
+u8 v_gyro_highrate_y_hyst_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR GYRO HIGHRATE Y DURATION */
+/**************************************************************/
+/*!
+ * @brief This API used to read gyro highrate y duration
+ * from page one register from 0x1B bit 0 to 7
+ *
+ * @param v_gyro_highrate_y_durn_u8 : The value of gyro highrate y duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_y_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_y_durn(
+u8 *v_gyro_highrate_y_durn_u8);
+/*!
+ * @brief This API used to write gyro highrate y duration
+ * from page one register from 0x1B bit 0 to 7
+ *
+ * @param v_gyro_highrate_y_durn_u8 : The value of gyro highrate y duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_y_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_y_durn(
+u8 v_gyro_highrate_y_durn_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR GYRO HIGHRATE Z THRESHOLD */
+/**************************************************************/
+/*!
+ * @brief This API used to read gyro highrate z threshold
+ * from page one register from 0x1C bit 0 to 4
+ *
+ * @param v_gyro_highrate_z_thres_u8 : The value of gyro highrate z threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_z_thres(
+u8 *v_gyro_highrate_z_thres_u8);
+/*!
+ * @brief This API used to write gyro highrate z threshold
+ * from page one register from 0x1C bit 0 to 4
+ *
+ * @param v_gyro_highrate_z_thres_u8 : The value of gyro highrate z threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_z_thres(
+u8 v_gyro_highrate_z_thres_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR GYRO HIGHRATE Z HYSTERESIS */
+/**************************************************************/
+/*!
+ * @brief This API used to read gyro highrate z hysteresis
+ * from page one register from 0x1C bit 5 to 6
+ *
+ * @param v_gyro_highrate_z_hyst_u8 : The value of gyro highrate z hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_z_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_z_hyst(
+u8 *v_gyro_highrate_z_hyst_u8);
+/*!
+ * @brief This API used to write gyro highrate z hysteresis
+ * from page one register from 0x1C bit 5 to 6
+ *
+ * @param v_gyro_highrate_z_hyst_u8 : The value of gyro highrate z hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_z_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_z_hyst(
+u8 v_gyro_highrate_z_hyst_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR GYRO HIGHRATE Z DURATION */
+/**************************************************************/
+/*!
+ * @brief This API used to read gyro highrate z duration
+ * from page one register from 0x1D bit 0 to 7
+ *
+ * @param v_gyro_highrate_z_durn_u8 : The value of gyro highrate z duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_z_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_z_durn(
+u8 *v_gyro_highrate_z_durn_u8);
+/*!
+ * @brief This API used to write gyro highrate z duration
+ * from page one register from 0x1D bit 0 to 7
+ *
+ * @param v_gyro_highrate_z_durn_u8 : The value of gyro highrate z duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_z_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_z_durn(
+u8 v_gyro_highrate_z_durn_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR GYRO ANY_MOTION THRESHOLD */
+/**************************************************************/
+/*!
+ * @brief This API used to read gyro anymotion threshold
+ * from page one register from 0x1E bit 0 to 6
+ *
+ * @param v_gyro_any_motion_thres_u8 : The value of gyro anymotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro anymotion interrupt threshold dependent
+ * on the selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 1dps | 1LSB
+ * 1000 | 0.5dps | 1LSB
+ * 500 | 0.25dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_thres(
+u8 *v_gyro_any_motion_thres_u8);
+/*!
+ * @brief This API used to write gyro anymotion threshold
+ * from page one register from 0x1E bit 0 to 6
+ *
+ * @param v_gyro_any_motion_thres_u8 : The value of gyro anymotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro anymotion interrupt threshold dependent
+ * on the selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 1dps | 1LSB
+ * 1000 | 0.5dps | 1LSB
+ * 500 | 0.25dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_thres(
+u8 v_gyro_any_motion_thres_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR GYRO ANY_MOTION SLOPE SAMPLES */
+/**************************************************************/
+/*!
+ * @brief This API used to read gyro anymotion slope samples
+ * from page one register from 0x1F bit 0 to 1
+ *
+ * @param v_gyro_any_motion_slope_samples_u8 :
+ * The value of gyro anymotion slope samples
+ * v_gyro_any_motion_slope_samples_u8 | result
+ * ---------------------------------- | -----------
+ * 0 | 8 samples
+ * 1 | 16 samples
+ * 2 | 32 samples
+ * 3 | 64 samples
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_slope_samples(
+u8 *v_gyro_any_motion_slope_samples_u8);
+/*!
+ * @brief This API used to write gyro anymotion slope samples
+ * from page one register from 0x1F bit 0 to 1
+ *
+ * @param v_gyro_any_motion_slope_samples_u8 :
+ * The value of gyro anymotion slope samples
+ * v_gyro_any_motion_slope_samples_u8 | result
+ * ---------------------------------- | -----------
+ * 0 | 8 samples
+ * 1 | 16 samples
+ * 2 | 32 samples
+ * 3 | 64 samples
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_slope_samples(
+u8 v_gyro_any_motion_slope_samples_u8);
+/**************************************************************/
+/**\name FUNCTIONS FOR GYRO ANY_MOTION AWAKE DURATION */
+/**************************************************************/
+/*!
+ * @brief This API used to read gyro anymotion awake duration
+ * from page one register from 0x1F bit 2 to 3
+ *
+ * @param v_gyro_awake_durn_u8 : The value of gyro anymotion awake duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_awake_durn(
+u8 *v_gyro_awake_durn_u8);
+/*!
+ * @brief This API used to write gyro anymotion awake duration
+ * from page one register from 0x1F bit 2 to 3
+ *
+ * @param v_gyro_awake_durn_u8 : The value of gyro anymotion awake duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_awake_durn(
+u8 v_gyro_awake_durn_u8);
+#endif
diff --git a/thirdparty/sensor/bno055/bno055_doc.h b/thirdparty/sensor/bno055/bno055_doc.h
new file mode 100644
index 00000000..b566cef8
--- /dev/null
+++ b/thirdparty/sensor/bno055/bno055_doc.h
@@ -0,0 +1,7966 @@
+/**
+ * \file
+ *
+ * \brief Accelerometer BNO055 Sensor
+ *
+ * Copyright (c) 2016 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ * Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+
+/**
+ * \defgroup bno055_sensor_group Accelerometer BNO055
+ * Sensor
+ *
+ * This driver provides access to the main features of the BNO055 sensor.
+ *
+ * \{
+ */
+
+/*********************************************************/
+/* INCLUDES */
+/*******************************************************/
+#include "bno055.h"
+/*! file <BNO055 >
+ brief <Sensor driver for BNO055> */
+/* STRUCTURE DEFINITIONS */
+static struct bno055_t *p_bno055;
+/* LOCAL FUNCTIONS */
+/*!
+ * @brief
+ * This function is used for initialize
+ * bus read, bus write function pointers,device
+ * address,accel revision id, gyro revision id
+ * mag revision id, software revision id, boot loader
+ * revision id and page id
+ *
+ * @param bno055 - structure pointer
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While changing the parameter of the bno055_t
+ * consider the following point:
+ * Changing the reference value of the parameter
+ * will changes the local copy or local reference
+ * make sure your changes will not
+ * affect the reference value of the parameter
+ * (Better case don't change the reference value of the parameter)
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_init(struct bno055_t *bno055);
+
+/*!
+ * @brief
+ * This API gives data to the given register and
+ * the data is written in the corresponding register address
+ *
+ * @param v_addr_u8 : Address of the register
+ * @param p_data_u8 : Data to be written to the register
+ * @param v_len_u8 : Length of the Data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+*/
+BNO055_RETURN_FUNCTION_TYPE bno055_write_register(u8 v_addr_u8,
+u8 *p_data_u8, u8 v_len_u8);
+
+/*!
+ * @brief This API reads the data from
+ * the given register address
+ *
+ * @param v_addr_u8 : Address of the register
+ * @param p_data_u8 : address of the variable,
+ * read value will be kept
+ * @param v_len_u8 : Length of the data
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_register(u8 v_addr_u8,
+u8 *p_data_u8, u8 v_len_u8);
+
+/*!
+ * @brief This API reads chip id
+ * from register 0x00 it is a byte of data
+ *
+ *
+ * @param v_chip_id_u8 : The chip id value 0xA0
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_chip_id(u8 *v_chip_id_u8);
+
+/*!
+ * @brief This API reads software revision id
+ * from register 0x04 and 0x05 it is a two byte of data
+ *
+ * @param v_sw_id_u8 : The SW revision id
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_sw_rev_id(u16 *v_sw_id_u8);
+
+/*!
+ * @brief This API reads page id
+ * from register 0x07 it is a byte of data
+ *
+ *
+ * @param v_page_id_u8 : The value of page id
+ *
+ * PAGE_ZERO -> 0x00
+ * PAGE_ONE -> 0x01
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_page_id(u8 *v_page_id_u8);
+
+/*!
+ * @brief This API used to write
+ * the page id register 0x07
+ *
+ * @param v_page_id_u8 : The value of page id
+ *
+ * PAGE_ZERO -> 0x00
+ * PAGE_ONE -> 0x01
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_page_id(u8 v_page_id_u8);
+
+/*!
+ * @brief This API reads accel revision id
+ * from register 0x01 it is a byte of value
+ *
+ * @param v_accel_rev_id_u8 : The accel revision id 0xFB
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_rev_id(
+u8 *v_accel_rev_id_u8);
+
+/*!
+ * @brief This API reads mag revision id
+ * from register 0x02 it is a byte of value
+ *
+ * @param v_mag_rev_id_u8 : The mag revision id 0x32
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_rev_id(
+u8 *v_mag_rev_id_u8);
+
+/*!
+ * @brief This API reads gyro revision id
+ * from register 0x03 it is a byte of value
+ *
+ * @param v_gyro_rev_id_u8 : The gyro revision id 0xF0
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_rev_id(
+u8 *v_gyro_rev_id_u8);
+
+/*!
+ * @brief This API used to read boot loader revision id
+ * from register 0x06 it is a byte of value
+ *
+ * @param v_bl_rev_id_u8 : The boot loader revision id
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_bl_rev_id(
+u8 *v_bl_rev_id_u8);
+
+/*!
+ * @brief This API reads acceleration data X values
+ * from register 0x08 and 0x09 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_accel_x_s16 : The X raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_x(s16 *v_accel_x_s16);
+
+/*!
+ * @brief This API reads acceleration data Y values
+ * from register 0x0A and 0x0B it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_accel_y_s16 : The Y raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_y(s16 *v_accel_y_s16);
+
+/*!
+ * @brief This API reads acceleration data z values
+ * from register 0x0C and 0x0D it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_accel_z_s16 : The z raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_z(s16 *v_accel_z_s16);
+
+/*!
+ * @brief This API reads acceleration data xyz values
+ * from register 0x08 to 0x0D it is a six byte data
+ *
+ *
+ * @param accel : The value of accel xyz data
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | The accel x data
+ * y | The accel y data
+ * z | The accel z data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_xyz(
+struct bno055_accel_t *accel);
+
+/*!
+ * @brief This API reads mag data x values
+ * from register 0x0E and 0x0F it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_mag_x_s16 : The x raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_x(s16 *v_mag_x_s16);
+
+/*!
+ * @brief This API reads mag data y values
+ * from register 0x10 and 0x11 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_mag_y_s16 : The y raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_y(s16 *v_mag_y_s16);
+
+/*!
+ * @brief This API reads mag data z values
+ * from register 0x12 and 0x13 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_mag_z_s16 : The z raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_z(s16 *v_mag_z_s16);
+
+/*!
+ * @brief This API reads mag data xyz values
+ * from register 0x0E to 0x13 it is a six byte data
+ *
+ *
+ * @param mag : The mag xyz values
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | The mag x data
+ * y | The mag y data
+ * z | The mag z data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_xyz(struct bno055_mag_t *mag);
+
+/*!
+ * @brief This API reads gyro data x values
+ * from register 0x14 and 0x15 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_gyro_x_s16 : The x raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_x(s16 *v_gyro_x_s16);
+
+/*!
+ * @brief This API reads gyro data y values
+ * from register 0x16 and 0x17 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param v_gyro_y_s16 : The y raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_y(s16 *v_gyro_y_s16);
+
+/*!
+ * @brief This API reads gyro data z values
+ * from register 0x18 and 0x19 it is a two byte data
+ *
+ * @param v_gyro_z_s16 : The z raw data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_z(s16 *v_gyro_z_s16);
+
+/*!
+ * @brief This API reads gyro data xyz values
+ * from register 0x14 to 0x19 it is a six byte data
+ *
+ *
+ * @param gyro : The value of gyro xyz data's
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | The gyro x data
+ * y | The gyro y data
+ * z | The gyro z data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_xyz(struct bno055_gyro_t *gyro);
+
+/*!
+ * @brief This API reads gyro data z values
+ * from register 0x1A and 0x1B it is a two byte data
+ *
+ * @param v_euler_h_s16 : The raw h data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_h(s16 *v_euler_h_s16);
+
+/*!
+ * @brief This API reads Euler data r values
+ * from register 0x1C and 0x1D it is a two byte data
+ *
+ * @param v_euler_r_s16 : The raw r data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_r(s16 *v_euler_r_s16);
+
+/*!
+ * @brief This API reads Euler data p values
+ * from register 0x1E and 0x1F it is a two byte data
+ *
+ * @param v_euler_p_s16 : The raw p data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_p(s16 *v_euler_p_s16);
+
+/*!
+ * @brief This API reads Euler data hrp values
+ * from register 0x1A to 0x1F it is a six byte data
+ *
+ *
+ * @param euler : The Euler hrp data's
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * h | The Euler h data
+ * r | The Euler r data
+ * p | The Euler p data
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_hrp(
+struct bno055_euler_t *euler);
+
+/*!
+ * @brief This API reads quaternion data w values
+ * from register 0x20 and 0x21 it is a two byte data
+ *
+ * @param v_quaternion_w_s16 : The raw w data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_w(
+s16 *v_quaternion_w_s16);
+
+/*!
+ * @brief This API reads quaternion data x values
+ * from register 0x22 and 0x23 it is a two byte data
+ *
+ * @param v_quaternion_x_s16 : The raw x data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_x(
+s16 *v_quaternion_x_s16);
+
+/*!
+ * @brief This API reads quaternion data y values
+ * from register 0x24 and 0x25 it is a two byte data
+ *
+ * @param v_quaternion_y_s16 : The raw y data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_y(
+s16 *v_quaternion_y_s16);
+
+/*!
+ * @brief This API reads quaternion data z values
+ * from register 0x26 and 0x27 it is a two byte data
+ *
+ * @param v_quaternion_z_s16 : The raw z data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_z(
+s16 *v_quaternion_z_s16);
+
+/*!
+ * @brief This API reads Quaternion data wxyz values
+ * from register 0x20 to 0x27 it is a six byte data
+ *
+ *
+ * @param quaternion : The value of quaternion wxyz data's
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * w | The quaternion w data
+ * x | The quaternion x data
+ * y | The quaternion y data
+ * z | The quaternion z data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_wxyz(
+struct bno055_quaternion_t *quaternion);
+
+/*!
+ * @brief This API reads Linear accel data x values
+ * from register 0x29 and 0x2A it is a two byte data
+ *
+ * @param v_linear_accel_x_s16 : The raw x data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_x(
+s16 *v_linear_accel_x_s16);
+
+/*!
+ * @brief This API reads Linear accel data x values
+ * from register 0x2B and 0x2C it is a two byte data
+ *
+ * @param v_linear_accel_y_s16 : The raw y data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_y(
+s16 *v_linear_accel_y_s16);
+
+/*!
+ * @brief This API reads Linear accel data x values
+ * from register 0x2C and 0x2D it is a two byte data
+ *
+ * @param v_linear_accel_z_s16 : The raw z data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_z(
+s16 *v_linear_accel_z_s16);
+
+/*!
+ * @brief This API reads Linear accel data xyz values
+ * from register 0x28 to 0x2D it is a six byte data
+ *
+ *
+ * @param linear_accel : The value of linear accel xyz data's
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | The linear accel x data
+ * y | The linear accel y data
+ * z | The linear accel z data
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_xyz(
+struct bno055_linear_accel_t *linear_accel);
+
+/*!
+ * @brief This API reads gravity data x values
+ * from register 0x2E and 0x2F it is a two byte data
+ *
+ * @param v_gravity_x_s16 : The raw x data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_x(
+s16 *v_gravity_x_s16);
+
+/*!
+ * @brief This API reads gravity data y values
+ * from register 0x30 and 0x31 it is a two byte data
+ *
+ * @param v_gravity_y_s16 : The raw y data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_y(
+s16 *v_gravity_y_s16);
+
+/*!
+ * @brief This API reads gravity data z values
+ * from register 0x32 and 0x33 it is a two byte data
+ *
+ * @param v_gravity_z_s16 : The raw z data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_z(
+s16 *v_gravity_z_s16);
+
+/*!
+ * @brief This API reads gravity data xyz values
+ * from register 0x2E to 0x33 it is a six byte data
+ *
+ *
+ * @param gravity : The value of gravity xyz data's
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | The gravity x data
+ * y | The gravity y data
+ * z | The gravity z data
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_xyz(
+struct bno055_gravity_t *gravity);
+
+/*!
+ * @brief This API reads temperature values
+ * from register 0x33 it is a byte data
+ *
+ * @param v_temp_s8 : The raw temperature data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_temp_data(s8 *v_temp_s8);
+
+#ifdef BNO055_FLOAT_ENABLE
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to meterpersecseq output as float
+ *
+ * @param v_accel_x_f : The accel x meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_x_msq(
+float *v_accel_x_f);
+
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to millig output as float
+ *
+ * @param v_accel_x_f : The accel x millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_x_mg(
+float *v_accel_x_f);
+
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to meterpersecseq output as float
+ *
+ * @param v_accel_y_f : The accel y meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_y_msq(
+float *v_accel_y_f);
+
+/*!
+ * @brief This API is used to convert the accel y raw data
+ * to millig output as float
+ *
+ * @param v_accel_y_f : The accel y millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_y_mg(
+float *v_accel_y_f);
+
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to meterpersecseq output as float
+ *
+ * @param v_accel_z_f : The accel z meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_z_msq(
+float *v_accel_z_f);
+
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to millig output as float
+ *
+ * @param v_accel_z_f : The accel z millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_z_mg(
+float *v_accel_z_f);
+
+/*!
+ * @brief This API is used to convert the accel xyz raw data
+ * to meterpersecseq output as float
+ *
+ * @param accel_xyz : The meterpersecseq data of accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of accel
+ * y | meterpersecseq data of accel
+ * z | meterpersecseq data of accel
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_xyz_msq(
+struct bno055_accel_float_t *accel_xyz);
+
+/*!
+ * @brief This API is used to convert the accel xyz raw data
+ * to millig output as float
+ *
+ * @param accel_xyz : The millig data of accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | millig data of accel
+ * y | millig data of accel
+ * z | millig data of accel
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_xyz_mg(
+struct bno055_accel_float_t *accel_xyz);
+
+/*!
+ * @brief This API is used to convert the mag x raw data
+ * to microTesla output as float
+ *
+ * @param v_mag_x_f : The mag x microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_x_uT(
+float *v_mag_x_f);
+
+/*!
+ * @brief This API is used to convert the mag y raw data
+ * to microTesla output as float
+ *
+ * @param v_mag_y_f : The mag y microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_y_uT(
+float *v_mag_y_f);
+
+/*!
+ * @brief This API is used to convert the mag z raw data
+ * to microTesla output as float
+ *
+ * @param v_mag_z_f : The mag z microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_z_uT(
+float *v_mag_z_f);
+
+/*!
+ * @brief This API is used to convert the mag yz raw data
+ * to microTesla output as float
+ *
+ * @param mag_xyz_data : The microTesla data of mag xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | microTesla data of mag
+ * y | microTesla data of mag
+ * z | microTesla data of mag
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_xyz_uT(
+struct bno055_mag_float_t *mag_xyz_data);
+
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to dps output as float
+ *
+ * @param v_gyro_x_f : The gyro x dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_x_dps(
+float *v_gyro_x_f);
+
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to rps output as float
+ *
+ * @param v_gyro_x_f : The gyro x dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_x_rps(
+float *v_gyro_x_f);
+
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to dps output as float
+ *
+ * @param v_gyro_y_f : The gyro y dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_y_dps(
+float *v_gyro_y_f);
+
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to rps output as float
+ *
+ * @param v_gyro_y_f : The gyro y dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_y_rps(
+float *v_gyro_y_f);
+
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to dps output as float
+ *
+ * @param v_gyro_z_f : The gyro z dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_z_dps(
+float *v_gyro_z_f);
+
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to rps output as float
+ *
+ * @param v_gyro_z_f : The gyro z rps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_z_rps(
+float *v_gyro_z_f);
+
+/*!
+ * @brief This API is used to convert the gyro xyz raw data
+ * to dps output as float
+ *
+ * @param gyro_xyz_data : The dps data of gyro xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | dps data of gyro
+ * y | dps data of gyro
+ * z | dps data of gyro
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_xyz_dps(
+struct bno055_gyro_float_t *gyro_xyz_data);
+
+/*!
+ * @brief This API is used to convert the gyro xyz raw data
+ * to rps output as float
+ *
+ * @param gyro_xyz_data : The rps data of gyro xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | rps data of gyro
+ * y | rps data of gyro
+ * z | rps data of gyro
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_xyz_rps(
+struct bno055_gyro_float_t *gyro_xyz_data);
+
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to degree output as float
+ *
+ * @param v_euler_h_f : The float value of Euler h degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_h_deg(
+float *v_euler_h_f);
+
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to radians output as float
+ *
+ * @param v_euler_h_f : The float value of Euler h radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_h_rad(
+float *v_euler_h_f);
+
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to degree output as float
+ *
+ * @param v_euler_r_f : The float value of Euler r degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_r_deg(
+float *v_euler_r_f);
+
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to radians output as float
+ *
+ * @param v_euler_r_f : The float value of Euler r radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_r_rad(
+float *v_euler_r_f);
+
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to degree output as float
+ *
+ * @param v_euler_p_f : The float value of Euler p degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_p_deg(
+float *v_euler_p_f);
+
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to radians output as float
+ *
+ * @param v_euler_p_f : The float value of Euler p radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_p_rad(
+float *v_euler_p_f);
+
+/*!
+ * @brief This API is used to convert the Euler hrp raw data
+ * to degree output as float
+ *
+ * @param euler_hpr : The degree data of Euler hrp
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * h | degree data of Euler
+ * r | degree data of Euler
+ * p | degree data of Euler
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_hpr_deg(
+struct bno055_euler_float_t *euler_hpr);
+
+/*!
+ * @brief This API is used to convert the Euler xyz raw data
+ * to radians output as float
+ *
+ * @param euler_hpr : The radians data of Euler hrp
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * h | radians data of Euler
+ * r | radians data of Euler
+ * p | radians data of Euler
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_hpr_rad(
+struct bno055_euler_float_t *euler_hpr);
+
+/*!
+ * @brief This API is used to convert the linear
+ * accel x raw data to meterpersecseq output as float
+ *
+ * @param v_linear_accel_x_f : The float value of linear accel x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_x_msq(
+float *v_linear_accel_x_f);
+
+/*!
+ * @brief This API is used to convert the linear
+ * accel y raw data to meterpersecseq output as float
+ *
+ * @param v_linear_accel_y_f : The float value of linear accel y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_y_msq(
+float *v_linear_accel_y_f);
+
+/*!
+ * @brief This API is used to convert the linear
+ * accel z raw data to meterpersecseq output as float
+ *
+ * @param v_linear_accel_z_f : The float value of linear accel z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_z_msq(
+float *v_linear_accel_z_f);
+
+/*!
+ * @brief This API is used to convert the linear accel xyz raw data
+ * to meterpersecseq output as float
+ *
+ * @param linear_accel_xyz : The meterpersecseq data of linear accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of linear accel
+ * y | meterpersecseq data of linear accel
+ * z | meterpersecseq data of linear accel
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_xyz_msq(
+struct bno055_linear_accel_float_t *linear_accel_xyz);
+
+/*!
+ * @brief This API is used to convert the gravity
+ * x raw data to meterpersecseq output as float
+ *
+ * @param v_gravity_x_f : The float value of gravity x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_float_x_msq(
+float *v_gravity_x_f);
+
+/*!
+ * @brief This API is used to convert the gravity
+ * y raw data to meterpersecseq output as float
+ *
+ * @param v_gravity_y_f : The float value of gravity y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_float_y_msq(
+float *v_gravity_y_f);
+
+/*!
+ * @brief This API is used to convert the gravity
+ * z raw data to meterpersecseq output as float
+ *
+ * @param v_gravity_z_f : The float value of gravity z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_float_z_msq(
+float *v_gravity_z_f);
+
+/*!
+ * @brief This API is used to convert the gravity xyz raw data
+ * to meterpersecseq output as float
+ *
+ * @param gravity_xyz : The meterpersecseq data of gravity xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of gravity
+ * y | meterpersecseq data of gravity
+ * z | meterpersecseq data of gravity
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gravity_xyz_msq(
+struct bno055_gravity_float_t *gravity_xyz);
+
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Fahrenheit output as float
+ *
+ * @param v_temp_f : The float value of temperature Fahrenheit
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_temp_fahrenheit(
+float *v_temp_f);
+
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Celsius output as float
+ *
+ * @param v_temp_f : The float value of temperature Celsius
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_temp_celsius(
+float *v_temp_f);
+
+#endif
+#ifdef BNO055_DOUBLE_ENABLE
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to meterpersecseq output as double
+ *
+ * @param v_accel_x_d : The accel x meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_x_msq(
+double *v_accel_x_d);
+
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to millig output as double
+ *
+ * @param v_accel_x_d : The accel x millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_x_mg(
+double *v_accel_x_d);
+
+/*!
+ * @brief This API is used to convert the accel y raw data
+ * to meterpersecseq output as double
+ *
+ * @param v_accel_y_d : The accel y meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_y_msq(
+double *v_accel_y_d);
+
+/*!
+ * @brief This API is used to convert the accel y raw data
+ * to millig output as double
+ *
+ * @param v_accel_y_d : The accel y millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_y_mg(
+double *v_accel_y_d);
+
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to meterpersecseq output as double
+ *
+ * @param v_accel_z_d : The accel z meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_z_msq(
+double *v_accel_z_d);
+
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to millig output as double
+ *
+ * @param v_accel_z_d : The accel z millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_z_mg(
+double *v_accel_z_d);
+
+/*!
+ * @brief This API is used to convert the accel xyz raw data
+ * to meterpersecseq output as double
+ *
+ * @param accel_xyz : The meterpersecseq data of accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of accel
+ * y | meterpersecseq data of accel
+ * z | meterpersecseq data of accel
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_xyz_msq(
+struct bno055_accel_double_t *accel_xyz);
+
+/*!
+ * @brief This API is used to convert the accel xyz raw data
+ * to millig output as double
+ *
+ * @param accel_xyz : The millig data of accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | millig data of accel
+ * y | millig data of accel
+ * z | millig data of accel
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_xyz_mg(
+struct bno055_accel_double_t *accel_xyz);
+
+/*!
+ * @brief This API is used to convert the mag x raw data
+ * to microTesla output as double
+ *
+ * @param v_mag_x_d : The mag x microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_x_uT(
+double *v_mag_x_d);
+
+/*!
+ * @brief This API is used to convert the mag y raw data
+ * to microTesla output as double
+ *
+ * @param v_mag_y_d : The mag y microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_y_uT(
+double *v_mag_y_d);
+
+/*!
+ * @brief This API is used to convert the mag z raw data
+ * to microTesla output as double
+ *
+ * @param v_mag_z_d : The mag z microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_z_uT(
+double *v_mag_z_d);
+
+/*!
+ * @brief This API is used to convert the mag yz raw data
+ * to microTesla output as double
+ *
+ * @param mag_xyz : The microTesla data of mag xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | microTesla data of mag
+ * y | microTesla data of mag
+ * z | microTesla data of mag
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_xyz_uT(
+struct bno055_mag_double_t *mag_xyz);
+
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to dps output as double
+ *
+ * @param v_gyro_x_d : The gyro x dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_x_dps(
+double *v_gyro_x_d);
+
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to rps output as double
+ *
+ * @param v_gyro_x_d : The gyro x dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_x_rps(
+double *v_gyro_x_d);
+
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to dps output as double
+ *
+ * @param v_gyro_y_d : The gyro y dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_y_dps(
+double *v_gyro_y_d);
+
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to rps output as double
+ *
+ * @param v_gyro_y_d : The gyro y dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_y_rps(
+double *v_gyro_y_d);
+
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to dps output as double
+ *
+ * @param v_gyro_z_d : The gyro z dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_z_dps(
+double *v_gyro_z_d);
+
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to rps output as double
+ *
+ * @param v_gyro_z_d : The gyro z rps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_z_rps(
+double *v_gyro_z_d);
+
+/*!
+ * @brief This API is used to convert the gyro xyz raw data
+ * to dps output as double
+ *
+ * @param gyro_xyz : The dps data of gyro xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | dps data of gyro
+ * y | dps data of gyro
+ * z | dps data of gyro
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_xyz_dps(
+struct bno055_gyro_double_t *gyro_xyz);
+
+/*!
+ * @brief This API is used to convert the gyro xyz raw data
+ * to rps output as double
+ *
+ * @param gyro_xyz : The rps data of gyro xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | rps data of gyro
+ * y | rps data of gyro
+ * z | rps data of gyro
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_xyz_rps(
+struct bno055_gyro_double_t *gyro_xyz);
+
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to degree output as double
+ *
+ * @param v_euler_h_d : The double value of Euler h degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_h_deg(
+double *v_euler_h_d);
+
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to radians output as double
+ *
+ * @param v_euler_h_d : The double value of Euler h radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_h_rad(
+double *v_euler_h_d);
+
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to degree output as double
+ *
+ * @param v_euler_r_d : The double value of Euler r degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_r_deg(
+double *v_euler_r_d);
+
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to radians output as double
+ *
+ * @param v_euler_r_d : The double value of Euler r radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_r_rad(
+double *v_euler_r_d);
+
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to degree output as double
+ *
+ * @param v_euler_p_d : The double value of Euler p degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_p_deg(
+double *v_euler_p_d);
+
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to radians output as double
+ *
+ * @param v_euler_p_d : The double value of Euler p radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_p_rad(
+double *v_euler_p_d);
+
+/*!
+ * @brief This API is used to convert the Euler hpr raw data
+ * to degree output as double
+ *
+ * @param euler_hpr : The degree data of Euler hpr
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * h | degree data of Euler
+ * r | degree data of Euler
+ * p | degree data of Euler
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_hpr_deg(
+struct bno055_euler_double_t *euler_hpr);
+
+/*!
+ * @brief This API is used to convert the Euler hpr raw data
+ * to radians output as double
+ *
+ * @param euler_hpr : The radians data of Euler hpr
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * h | radians data of Euler
+ * r | radians data of Euler
+ * p | radians data of Euler
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_hpr_rad(
+struct bno055_euler_double_t *euler_hpr);
+
+/*!
+ * @brief This API is used to convert the linear
+ * accel x raw data to meterpersecseq output as double
+ *
+ * @param v_linear_accel_x_d : The double value of
+ * linear accel x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_x_msq(
+double *v_linear_accel_x_d);
+
+/*!
+ * @brief This API is used to convert the linear
+ * accel y raw data to meterpersecseq output as double
+ *
+ * @param v_linear_accel_y_d : The double value of
+ * linear accel y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_y_msq(
+double *v_linear_accel_y_d);
+
+/*!
+ * @brief This API is used to convert the linear
+ * accel z raw data to meterpersecseq output as double
+ *
+ * @param v_linear_accel_z_d : The double value of
+ * linear accel z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_z_msq(
+double *v_linear_accel_z_d);
+
+/*!
+ * @brief This API is used to convert the linear accel xyz raw data
+ * to meterpersecseq output as double
+ *
+ * @param linear_accel_xyz : The meterpersecseq data of linear accel xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of linear accel
+ * y | meterpersecseq data of linear accel
+ * z | meterpersecseq data of linear accel
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_xyz_msq(
+struct bno055_linear_accel_double_t *linear_accel_xyz);
+
+/*!
+ * @brief This API is used to convert the gravity
+ * x raw data to meterpersecseq output as double
+ *
+ * @param v_gravity_x_d : The double value of gravity x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_double_x_msq(
+double *v_gravity_x_d);
+
+/*!
+ * @brief This API is used to convert the gravity
+ * y raw data to meterpersecseq output as double
+ *
+ * @param v_gravity_y_d : The double value of gravity y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_double_y_msq(
+double *v_gravity_y_d);
+
+/*!
+ * @brief This API is used to convert the gravity
+ * z raw data to meterpersecseq output as double
+ *
+ * @param v_gravity_z_d : The double value of gravity z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_double_z_msq(
+double *v_gravity_z_d);
+
+/*!
+ * @brief This API is used to convert the gravity xyz raw data
+ * to meterpersecseq output as double
+ *
+ * @param gravity_xyz : The meterpersecseq data of gravity xyz
+ *
+ * Parameter | result
+ * --------- | -----------------
+ * x | meterpersecseq data of gravity
+ * y | meterpersecseq data of gravity
+ * z | meterpersecseq data of gravity
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gravity_xyz_msq(
+struct bno055_gravity_double_t *gravity_xyz);
+
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Fahrenheit output as double
+ *
+ * @param v_temp_d : The double value of temperature Fahrenheit
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_temp_fahrenheit(
+double *v_temp_d);
+
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Celsius output as double
+ *
+ * @param v_temp_d : The double value of temperature Celsius
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_temp_celsius(
+double *v_temp_d);
+
+#endif
+/*!
+ * @brief This API used to read
+ * mag calibration status from register from 0x35 bit 0 and 1
+ *
+ * @param v_mag_calib_u8 : The value of mag calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_calib_stat(
+u8 *v_mag_calib_u8);
+
+/*!
+ * @brief This API used to read
+ * accel calibration status from register from 0x35 bit 2 and 3
+ *
+ * @param v_accel_calib_u8 : The value of accel calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_calib_stat(
+u8 *v_accel_calib_u8);
+
+/*!
+ * @brief This API used to read
+ * gyro calibration status from register from 0x35 bit 4 and 5
+ *
+ * @param v_gyro_calib_u8 : The value of gyro calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_calib_stat(
+u8 *v_gyro_calib_u8);
+
+/*!
+ * @brief This API used to read
+ * system calibration status from register from 0x35 bit 6 and 7
+ *
+ * @param v_sys_calib_u8 : The value of system calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_calib_stat(
+u8 *v_sys_calib_u8);
+
+/*!
+ * @brief This API used to read
+ * self test of accel from register from 0x36 bit 0
+ *
+ * @param v_selftest_accel_u8 : The value of self test of accel
+ *
+ * v_selftest_accel_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_accel(
+u8 *v_selftest_accel_u8);
+
+/*!
+ * @brief This API used to read
+ * self test of mag from register from 0x36 bit 1
+ *
+ * @param v_selftest_mag_u8 : The value of self test of mag
+ *
+ * v_selftest_mag_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_mag(
+u8 *v_selftest_mag_u8);
+
+/*!
+ * @brief This API used to read
+ * self test of gyro from register from 0x36 bit 2
+ *
+ * @param v_selftest_gyro_u8 : The value of self test of gyro
+ *
+ * v_selftest_gyro_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_gyro(
+u8 *v_selftest_gyro_u8);
+
+/*!
+ * @brief This API used to read
+ * self test of micro controller from register from 0x36 bit 3
+ *
+ * @param v_selftest_mcu_u8 : The value of self test of micro controller
+ *
+ * v_selftest_mcu_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_mcu(
+u8 *v_selftest_mcu_u8);
+
+/*!
+ * @brief This API used to read the v_stat_s8 of
+ * gyro anymotion interrupt from register from 0x37 bit 2
+ *
+ * @param v_gyro_any_motion_u8 : The value of gyro anymotion interrupt
+ *
+ * v_gyro_any_motion_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro anymotion interrupt can be enabled
+ * by the following APIs
+ *
+ * bno055_set_intr_mask_gyro_any_motion()
+ *
+ * bno055_set_intr_gyro_any_motion()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_stat_gyro_any_motion(
+u8 *v_gyro_any_motion_u8);
+
+/*!
+ * @brief This API used to read the v_stat_s8 of
+ * gyro highrate interrupt from register from 0x37 bit 3
+ *
+ * @param v_gyro_highrate_u8 : The value of gyro highrate interrupt
+ *
+ * v_gyro_highrate_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate interrupt can be configured
+ * by the following APIs
+ *
+ * bno055_set_intr_mask_gyro_highrate()
+ *
+ * bno055_set_intr_gyro_highrate()
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_stat_gyro_highrate(
+u8 *v_gyro_highrate_u8);
+
+/*!
+ * @brief This API used to read the v_stat_s8 of
+ * accel highg interrupt from register from 0x37 bit 5
+ *
+ * @param v_accel_high_g_u8 : The value of accel highg interrupt
+ *
+ * v_accel_high_g_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel highg interrupt can be configured
+ * by the following APIs
+ *
+ * bno055_set_intr_mask_accel_high_g()
+ *
+ * bno055_set_intr_accel_high_g()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_stat_accel_high_g(
+u8 *v_accel_high_g_u8);
+
+/*!
+ * @brief This API used to read the v_stat_s8 of
+ * accel anymotion interrupt from register from 0x37 bit 6
+ *
+ * @param v_accel_any_motion_u8 : The value of accel anymotion interrupt
+ *
+ * v_accel_any_motion_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel anymotion interrupt can be configured
+ * by the following APIs
+ *
+ * bno055_set_intr_mask_accel_any_motion()
+ *
+ * bno055_set_intr_accel_any_motion()
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_stat_accel_any_motion(
+u8 *v_accel_any_motion_u8);
+
+/*!
+ * @brief This API used to read the v_stat_s8 of
+ * accel nomotion/slowmotion interrupt from register from 0x37 bit 6
+ *
+ * @param v_accel_no_motion_u8 : The value of accel
+ * nomotion/slowmotion interrupt
+ *
+ * v_accel_no_motion_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel nomotion/slowmotion interrupt can be configured
+ * by the following APIs
+ *
+ * bno055_set_intr_mask_accel_nomotion()
+ *
+ * bno055_set_intr_accel_nomotion()
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_stat_accel_no_motion(
+u8 *v_accel_no_motion_u8);
+
+/*!
+ * @brief This API is used to read status of main clock
+ * from the register 0x38 bit 0
+ *
+ * @param v_stat_main_clk_u8 : the status of main clock
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_stat_main_clk(
+u8 *v_stat_main_clk_u8);
+
+/*!
+ * @brief This API is used to read system status
+ * code from the register 0x39 it is a byte of data
+ *
+ * @param v_sys_stat_u8 : the status of system
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_stat_code(
+u8 *v_sys_stat_u8);
+
+/*!
+ * @brief This API is used to read system error
+ * code from the register 0x3A it is a byte of data
+ *
+ * @param v_sys_error_u8 : The value of system error code
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_error_code(
+u8 *v_sys_error_u8);
+
+/*!
+ * @brief This API used to read the accel unit
+ * from register from 0x3B bit 0
+ *
+ * @param v_accel_unit_u8 : The value of accel unit
+ *
+ * v_accel_unit_u8 | result
+ * ------------- | ---------------
+ * 0x00 | ACCEL_UNIT_MSQ
+ * 0x01 | ACCEL_UNIT_MG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_unit(
+u8 *v_accel_unit_u8);
+
+/*!
+ * @brief This API used to write the accel unit
+ * from register from 0x3B bit 0
+ *
+ * @param v_accel_unit_u8 : The value of accel unit
+ *
+ * v_accel_unit_u8 | result
+ * ------------- | ---------------
+ * 0x00 | ACCEL_UNIT_MSQ
+ * 0x01 | ACCEL_UNIT_MG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_unit(
+u8 v_accel_unit_u8);
+
+/*!
+ * @brief This API used to read the gyro unit
+ * from register from 0x3B bit 1
+ *
+ * @param v_gyro_unit_u8 : The value of accel unit
+ *
+ * v_gyro_unit_u8 | result
+ * ------------- | -----------
+ * 0x00 | GYRO_UNIT_DPS
+ * 0x01 | GYRO_UNIT_RPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_unit(
+u8 *v_gyro_unit_u8);
+
+/*!
+ * @brief This API used to write the gyro unit
+ * from register from 0x3B bit 1
+ *
+ * @param v_gyro_unit_u8 : The value of accel unit
+ *
+ * v_gyro_unit_u8 | result
+ * ------------- | -----------
+ * 0x00 | GYRO_UNIT_DPS
+ * 0x01 | GYRO_UNIT_RPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_unit(u8 v_gyro_unit_u8);
+
+/*!
+ * @brief This API used to read the Euler unit
+ * from register from 0x3B bit 2
+ *
+ * @param v_euler_unit_u8 : The value of accel unit
+ *
+ * v_euler_unit_u8 | result
+ * -------------- | -----------
+ * 0x00 | EULER_UNIT_DEG
+ * 0x01 | EULER_UNIT_RAD
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_euler_unit(
+u8 *v_euler_unit_u8);
+
+/*!
+ * @brief This API used to write the Euler unit
+ * from register from 0x3B bit 2
+ *
+ * @param v_euler_unit_u8 : The value of Euler unit
+ *
+ * v_euler_unit_u8 | result
+ * -------------- | -----------
+ * 0x00 | EULER_UNIT_DEG
+ * 0x01 | EULER_UNIT_RAD
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_euler_unit(u8 v_euler_unit_u8);
+
+/*!
+ * @brief This API used to write the tilt unit
+ * from register from 0x3B bit 3
+ *
+ * @param v_tilt_unit_u8 : The value of tilt unit
+ *
+ * v_tilt_unit_u8 | result
+ * --------------- | ---------
+ * 0x00 | degrees
+ * 0x01 | radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_tilt_unit(
+u8 *v_tilt_unit_u8);
+
+/*!
+ * @brief This API used to write the tilt unit
+ * from register from 0x3B bit 3
+ *
+ * @param v_tilt_unit_u8 : The value of tilt unit
+ *
+ * v_tilt_unit_u8 | result
+ * --------------- | ---------
+ * 0x00 | degrees
+ * 0x01 | radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ *
+ * \return Communication results
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_tilt_unit(u8 v_tilt_unit_u8);
+
+/*!
+ * @brief This API used to read the temperature unit
+ * from register from 0x3B bit 4
+ *
+ * @param v_temp_unit_u8 : The value of temperature unit
+ *
+ * v_temp_unit_u8 | result
+ * ----------- | --------------
+ * 0x00 | TEMP_UNIT_CELCIUS
+ * 0x01 | TEMP_UNIT_FAHRENHEIT
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_temp_unit(
+u8 *v_temp_unit_u8);
+
+/*!
+ * @brief This API used to write the temperature unit
+ * from register from 0x3B bit 4
+ *
+ * @param v_temp_unit_u8 : The value of temperature unit
+ *
+ * v_temp_unit_u8 | result
+ * ----------- | --------------
+ * 0x00 | TEMP_UNIT_CELCIUS
+ * 0x01 | TEMP_UNIT_FAHRENHEIT
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_temp_unit(
+u8 v_temp_unit_u8);
+
+/*!
+ * @brief This API used to read the current selected orientation mode
+ * from register from 0x3B bit 7
+ *
+ * @param v_data_output_format_u8 : The value of data output format
+ *
+ * v_data_output_format_u8 | result
+ * -------------------- | --------
+ * 0x00 | Windows
+ * 0x01 | Android
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_data_output_format(
+u8 *v_data_output_format_u8);
+
+/*!
+ * @brief This API used to write the current selected orientation mode
+ * from register from 0x3B bit 7
+ *
+ * @param v_data_output_format_u8 : The value of data output format
+ *
+ * v_data_output_format_u8 | result
+ * -------------------- | --------
+ * 0x00 | Windows
+ * 0x01 | Android
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_data_output_format(
+u8 v_data_output_format_u8);
+
+/*! @brief This API used to read the operation mode
+ * from register from 0x3D bit 0 to 3
+ *
+ * @param v_operation_mode_u8 : The value of operation mode
+ *
+ * v_operation_mode_u8 | result | comments
+ * ----------|----------------------------|----------------------------
+ * 0x00 | OPERATION_MODE_CONFIG | Configuration mode
+ * 0x01 | OPERATION_MODE_ACCONLY | Reads accel data alone
+ * 0x02 | OPERATION_MODE_MAGONLY | Reads mag data alone
+ * 0x03 | OPERATION_MODE_GYRONLY | Reads gyro data alone
+ * 0x04 | OPERATION_MODE_ACCMAG | Reads accel and mag data
+ * 0x05 | OPERATION_MODE_ACCGYRO | Reads accel and gyro data
+ * 0x06 | OPERATION_MODE_MAGGYRO | Reads accel and mag data
+ * 0x07 | OPERATION_MODE_ANY_MOTION | Reads accel mag and gyro data
+ * 0x08 | OPERATION_MODE_IMUPLUS | Inertial measurement unit
+ * - | - | Reads accel,gyro and fusion data
+ * 0x09 | OPERATION_MODE_COMPASS | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0A | OPERATION_MODE_M4G | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0B | OPERATION_MODE_NDOF_FMC_OFF| Nine degrees of freedom with
+ * - | - | fast magnetic calibration
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ * 0x0C | OPERATION_MODE_NDOF | Nine degrees of freedom
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note In the config mode, all sensor and fusion data
+ * becomes zero and it is mainly derived
+ * to configure the various settings of the BNO
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_operation_mode(
+u8 *v_operation_mode_u8);
+
+/*! @brief This API used to write the operation mode
+ * from register from 0x3D bit 0 to 3
+ *
+ * @param v_operation_mode_u8 : The value of operation mode
+ *
+ * v_operation_mode_u8 | result | comments
+ * ----------|----------------------------|----------------------------
+ * 0x00 | OPERATION_MODE_CONFIG | Configuration mode
+ * 0x01 | OPERATION_MODE_ACCONLY | Reads accel data alone
+ * 0x02 | OPERATION_MODE_MAGONLY | Reads mag data alone
+ * 0x03 | OPERATION_MODE_GYRONLY | Reads gyro data alone
+ * 0x04 | OPERATION_MODE_ACCMAG | Reads accel and mag data
+ * 0x05 | OPERATION_MODE_ACCGYRO | Reads accel and gyro data
+ * 0x06 | OPERATION_MODE_MAGGYRO | Reads accel and mag data
+ * 0x07 | OPERATION_MODE_ANY_MOTION | Reads accel mag and gyro data
+ * 0x08 | OPERATION_MODE_IMUPLUS | Inertial measurement unit
+ * - | - | Reads accel,gyro and fusion data
+ * 0x09 | OPERATION_MODE_COMPASS | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0A | OPERATION_MODE_M4G | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0B | OPERATION_MODE_NDOF_FMC_OFF| Nine degrees of freedom with
+ * - | - | fast magnetic calibration
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ * 0x0C | OPERATION_MODE_NDOF | Nine degrees of freedom
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note In the config mode, all sensor and fusion data
+ * becomes zero and it is mainly derived
+ * to configure the various settings of the BNO
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_operation_mode(u8 v_operation_mode_u8);
+
+/*! @brief This API used to read the power mode
+ * from register from 0x3E bit 0 to 1
+ *
+ * @param v_power_mode_u8 : The value of power mode
+ *
+ * v_power_mode_u8| result | comments
+ * ----------|---------------------|-------------------------------------
+ * 0x00 | POWER_MODE_NORMAL | In the NORMAL mode the register
+ * - | - | map and the internal peripherals
+ * - | - | of the MCU are always
+ * - | - | operative in this mode
+ * 0x01 | POWER_MODE_LOWPOWER | This is first level of power saving mode
+ * 0x02 | POWER_MODE_SUSPEND | In suspend mode the system is
+ * - | - | paused and all the sensors and
+ * - | - | the micro controller are
+ * - | - | put into sleep mode.
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note For detailed about LOWPOWER mode
+ * refer data sheet 3.4.2
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_power_mode(
+u8 *v_power_mode_u8);
+
+/*! @brief This API used to write the power mode
+ * from register from 0x3E bit 0 to 1
+ *
+ * @param v_power_mode_u8 : The value of power mode
+ *
+ * v_power_mode_u8 | result | comments
+ * ----------|---------------------|-------------------------------------
+ * 0x00 | POWER_MODE_NORMAL | In the NORMAL mode the register
+ * - | - | map and the internal peripherals
+ * - | - | of the MCU are always
+ * - | - | operative in this mode
+ * 0x01 | POWER_MODE_LOWPOWER | This is first level of power saving mode
+ * 0x02 | POWER_MODE_SUSPEND | In suspend mode the system is
+ * - | - | paused and all the sensors and
+ * - | - | the micro controller are
+ * - | - | put into sleep mode.
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note For detailed about LOWPOWER mode
+ * refer data sheet 3.4.2
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_power_mode(u8 v_power_mode_u8);
+
+/*!
+ * @brief This API used to read the reset interrupt
+ * from register from 0x3F bit 6
+ * It resets all the interrupt bit and interrupt output
+ *
+ * @param v_intr_rst_u8 : The value of reset interrupt
+ *
+ * v_intr_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_rst(
+u8 *v_intr_rst_u8);
+
+/*!
+ * @brief This API used to write the reset interrupt
+ * from register from 0x3F bit 6
+ * It resets all the interrupt bit and interrupt output
+ *
+ * @param v_intr_rst_u8 : The value of reset interrupt
+ *
+ * v_intr_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_rst(u8 v_intr_rst_u8);
+
+/*!
+ * @brief This API used to read the clk source
+ * from register from 0x3F bit 7
+ *
+ * @param v_clk_src_u8 : The value of clk source
+ *
+ * v_clk_src_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_clk_src(
+u8 *v_clk_src_u8);
+
+/*!
+ * @brief This API used to write the clk source
+ * from register from 0x3F bit 7
+ *
+ * @param v_clk_src_u8 : The value of clk source
+ *
+ * v_clk_src_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_clk_src(u8 v_clk_src_u8);
+
+/*!
+ * @brief This API used to read the reset system
+ * from register from 0x3F bit 5
+ *
+ * @param v_sys_rst_u8 : The value of reset system
+ *
+ * v_sys_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note It resets the whole system
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_rst(
+u8 *v_sys_rst_u8);
+
+/*!
+ * @brief This API used to write the reset system
+ * from register from 0x3F bit 5
+ *
+ * @param v_sys_rst_u8 : The value of reset system
+ *
+ * v_sys_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note It resets the whole system
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_sys_rst(u8 v_sys_rst_u8);
+
+/*!
+ * @brief This API used to read the self test
+ * from register from 0x3F bit 0
+ *
+ * @param v_selftest_u8 : The value of self test
+ *
+ * v_selftest_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note It triggers the self test
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest(
+u8 *v_selftest_u8);
+
+/*!
+ * @brief This API used to write the self test
+ * from register from 0x3F bit 0
+ *
+ * @param v_selftest_u8 : The value of self test
+ *
+ * v_selftest_u8 | result
+ * -------------- |----------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note It triggers the self test
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_selftest(u8 v_selftest_u8);
+
+/*!
+ * @brief This API used to read the temperature source
+ * from register from 0x40 bit 0 and 1
+ *
+ * @param v_temp_source_u8 : The value of selected temperature source
+ *
+ * v_temp_source_u8 | result
+ * ---------------- |---------------
+ * 0x00 | ACCEL_TEMP_EN
+ * 0X01 | GYRO_TEMP_EN
+ * 0X03 | MCU_TEMP_EN
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_temp_source(
+u8 *v_temp_source_u8);
+
+/*!
+ * @brief This API used to write the temperature source
+ * from register from 0x40 bit 0 and 1
+ *
+ * @param v_temp_source_u8 : The value of selected temperature source
+ *
+ * v_temp_source_u8 | result
+ * ---------------- |---------------
+ * 0x00 | ACCEL_TEMP_EN
+ * 0X01 | GYRO_TEMP_EN
+ * 0X03 | MCU_TEMP_EN
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_temp_source(u8 v_temp_source_u8);
+
+/*!
+ * @brief This API used to read the axis remap value
+ * from register from 0x41 bit 0 and 5
+ *
+ * @param v_remap_axis_u8 : The value of axis remapping
+ *
+ * v_remap_axis_u8 | result | comments
+ * ------------|-------------------|------------
+ * 0X21 | REMAP_X_Y | Z=Z;X=Y;Y=X
+ * 0X18 | REMAP_Y_Z | X=X;Y=Z;Z=Y
+ * 0X06 | REMAP_Z_X | Y=Y;X=Z;Z=X
+ * 0X12 | REMAP_X_Y_Z_TYPE0 | X=Z;Y=X;Z=Y
+ * 0X09 | REMAP_X_Y_Z_TYPE1 | X=Y;Y=Z;Z=X
+ * 0X24 | DEFAULT_AXIS | X=X;Y=Y;Z=Z
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note : For axis sign remap refer the following functions
+ * x-axis :
+ *
+ * bno055_set_x_remap_sign()
+ *
+ * y-axis :
+ *
+ * bno055_set_y_remap_sign()
+ *
+ * z-axis :
+ *
+ * bno055_set_z_remap_sign()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_axis_remap_value(
+u8 *v_remap_axis_u8);
+
+/*!
+ * @brief This API used to write the axis remap value
+ * from register from 0x41 bit 0 and 5
+ *
+ * @param v_remap_axis_u8 : The value of axis remapping
+ *
+ * v_remap_axis_u8 | result | comments
+ * ------------|-------------------|------------
+ * 0X21 | REMAP_X_Y | Z=Z;X=Y;Y=X
+ * 0X18 | REMAP_Y_Z | X=X;Y=Z;Z=Y
+ * 0X06 | REMAP_Z_X | Y=Y;X=Z;Z=X
+ * 0X12 | REMAP_X_Y_Z_TYPE0 | X=Z;Y=X;Z=Y
+ * 0X09 | REMAP_X_Y_Z_TYPE1 | X=Y;Y=Z;Z=X
+ * 0X24 | DEFAULT_AXIS | X=X;Y=Y;Z=Z
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note : For axis sign remap refer the following functions
+ * x-axis :
+ *
+ * bno055_set_x_remap_sign()
+ *
+ * y-axis :
+ *
+ * bno055_set_y_remap_sign()
+ *
+ * z-axis :
+ *
+ * bno055_set_z_remap_sign()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_axis_remap_value(
+u8 v_remap_axis_u8);
+
+/*!
+ * @brief This API used to read the x-axis remap
+ * sign from register from 0x42 bit 2
+ *
+ * @param v_remap_x_sign_u8 : The value of x-axis remap sign
+ *
+ * v_remap_x_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_remap_x_sign(
+u8 *v_remap_x_sign_u8);
+
+/*!
+ * @brief This API used to write the x-axis remap
+ * sign from register from 0x42 bit 2
+ *
+ * @param v_remap_x_sign_u8 : The value of x-axis remap sign
+ *
+ * v_remap_x_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_remap_x_sign(
+u8 v_remap_x_sign_u8);
+
+/*!
+ * @brief This API used to read the y-axis remap
+ * sign from register from 0x42 bit 1
+ *
+ * @param v_remap_y_sign_u8 : The value of y-axis remap sign
+ *
+ * v_remap_y_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_remap_y_sign(
+u8 *v_remap_y_sign_u8);
+
+/*!
+ * @brief This API used to write the y-axis remap
+ * sign from register from 0x42 bit 1
+ *
+ * @param v_remap_y_sign_u8 : The value of y-axis remap sign
+ *
+ * v_remap_y_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_remap_y_sign(
+u8 v_remap_y_sign_u8);
+
+/*!
+ * @brief This API used to read the z-axis remap
+ * sign from register from 0x42 bit 0
+ *
+ * @param v_remap_z_sign_u8 : The value of z-axis remap sign
+ *
+ * v_remap_z_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_remap_z_sign(
+u8 *v_remap_z_sign_u8);
+
+/*!
+ * @brief This API used to write the z-axis remap
+ * sign from register from 0x42 bit 0
+ *
+ * @param v_remap_z_sign_u8 : The value of z-axis remap sign
+ *
+ * v_remap_z_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | REMAP_AXIS_POSITIVE
+ * 0X01 | REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_remap_z_sign(
+u8 v_remap_z_sign_u8);
+
+/*!
+ * @brief This API is used to read soft iron calibration matrix
+ * from the register 0x43 to 0x53 it is a 18 bytes of data
+ *
+ * @param sic_matrix : The value of soft iron calibration matrix
+ *
+ * sic_matrix | result
+ * --------------------|----------------------------------
+ * sic_0 | soft iron calibration matrix zero
+ * sic_1 | soft iron calibration matrix one
+ * sic_2 | soft iron calibration matrix two
+ * sic_3 | soft iron calibration matrix three
+ * sic_4 | soft iron calibration matrix four
+ * sic_5 | soft iron calibration matrix five
+ * sic_6 | soft iron calibration matrix six
+ * sic_7 | soft iron calibration matrix seven
+ * sic_8 | soft iron calibration matrix eight
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note : Each soft iron calibration matrix range from -32768 to +32767
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_sic_matrix(
+struct bno055_sic_matrix_t *sic_matrix);
+
+/*!
+ * @brief This API is used to write soft iron calibration matrix
+ * from the register 0x43 to 0x53 it is a 18 bytes of data
+ *
+ * @param sic_matrix : The value of soft iron calibration matrix
+ *
+ * sic_matrix | result
+ * --------------------|----------------------------------
+ * sic_0 | soft iron calibration matrix zero
+ * sic_1 | soft iron calibration matrix one
+ * sic_2 | soft iron calibration matrix two
+ * sic_3 | soft iron calibration matrix three
+ * sic_4 | soft iron calibration matrix four
+ * sic_5 | soft iron calibration matrix five
+ * sic_6 | soft iron calibration matrix six
+ * sic_7 | soft iron calibration matrix seven
+ * sic_8 | soft iron calibration matrix eight
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note : Each soft iron calibration matrix range from -32768 to +32767
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_sic_matrix(
+struct bno055_sic_matrix_t *sic_matrix);
+
+/*!
+ * @brief This API is used to read accel offset and accel radius
+ * offset form register 0x55 to 0x5A and radius form 0x67 and 0x68
+ *
+ * @param accel_offset : The value of accel offset and radius
+ *
+ * bno055_accel_offset_t | result
+ * ------------------- | ----------------
+ * x | accel offset x
+ * y | accel offset y
+ * z | accel offset z
+ * r | accel offset r
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the accel offset varies based on
+ * the G-range of accel sensor.
+ *
+ * accel G range | offset range
+ * --------------- | --------------
+ * ACCEL_RANGE_2G | +/-2000
+ * ACCEL_RANGE_4G | +/-4000
+ * ACCEL_RANGE_8G | +/-8000
+ * ACCEL_RANGE_16G | +/-16000
+ *
+ * accel G range can be configured by using the
+ * bno055_set_accel_range() function
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_offset(
+struct bno055_accel_offset_t *accel_offset);
+
+/*!
+ * @brief This API is used to write accel offset and accel radius
+ * offset form register 0x55 to 0x5A and radius form 0x67 and 0x68
+ *
+ * @param accel_offset : The value of accel offset and radius
+ *
+ * bno055_accel_offset_t | result
+ * ------------------- | ----------------
+ * x | accel offset x
+ * y | accel offset y
+ * z | accel offset z
+ * r | accel offset r
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the accel offset varies based on
+ * the G-range of accel sensor.
+ *
+ * accel G range | offset range
+ * --------------- | --------------
+ * ACCEL_RANGE_2G | +/-2000
+ * ACCEL_RANGE_4G | +/-4000
+ * ACCEL_RANGE_8G | +/-8000
+ * ACCEL_RANGE_16G | +/-16000
+ *
+ * accel G range can be configured by using the
+ * bno055_set_accel_range() function
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_accel_offset(
+struct bno055_accel_offset_t *accel_offset);
+
+/*!
+ * @brief This API is used to read mag offset
+ * offset form register 0x69 to 0x6A
+ *
+ * @param mag_offset : The value of mag offset and radius
+ *
+ * bno055_mag_offset_t | result
+ * ------------------- | ----------------
+ * x | mag offset x
+ * y | mag offset y
+ * z | mag offset z
+ * r | mag radius r
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the magnetometer offset is +/-6400 in LSB
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_offset(
+struct bno055_mag_offset_t *mag_offset);
+
+/*!
+ * @brief This API is used to read mag offset
+ * offset form register 0x69 to 0x6A
+ *
+ * @param mag_offset : The value of mag offset and radius
+ *
+ * bno055_mag_offset_t | result
+ * ------------------- | ----------------
+ * x | mag offset x
+ * y | mag offset y
+ * z | mag offset z
+ * r | mag radius r
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the magnetometer offset is +/-6400 in LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_mag_offset(
+struct bno055_mag_offset_t *mag_offset);
+
+/*!
+ * @brief This API is used to read gyro offset
+ * offset form register 0x61 to 0x66
+ *
+ * @param gyro_offset : The value of gyro offset
+ *
+ * bno055_gyro_offset_t | result
+ * ------------------- | ----------------
+ * x | gyro offset x
+ * y | gyro offset y
+ * z | gyro offset z
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the gyro offset varies based on
+ * the range of gyro sensor
+ *
+ * gyro G range | offset range
+ * -------------------- | ------------
+ * GYRO_RANGE_2000DPS | +/-32000
+ * GYRO_RANGE_1000DPS | +/-16000
+ * GYRO_RANGE_500DPS | +/-8000
+ * GYRO_RANGE_250DPS | +/-4000
+ * GYRO_RANGE_125DPS | +/-2000
+ *
+ * Gyro range can be configured by using the
+ * bno055_set_gyro_range() function
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_offset(
+struct bno055_gyro_offset_t *gyro_offset);
+
+/*!
+ * @brief This API is used to read gyro offset
+ * offset form register 0x61 to 0x66
+ *
+ * @param gyro_offset : The value of gyro offset
+ *
+ * bno055_gyro_offset_t | result
+ * ------------------- | ----------------
+ * x | gyro offset x
+ * y | gyro offset y
+ * z | gyro offset z
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The range of the gyro offset varies based on
+ * the range of gyro sensor
+ *
+ * gyro G range | offset range
+ * -------------------- | ------------
+ * GYRO_RANGE_2000DPS | +/-32000
+ * GYRO_RANGE_1000DPS | +/-16000
+ * GYRO_RANGE_500DPS | +/-8000
+ * GYRO_RANGE_250DPS | +/-4000
+ * GYRO_RANGE_125DPS | +/-2000
+ *
+ * Gyro range can be configured by using the
+ * bno055_set_gyro_range() function
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_gyro_offset(
+struct bno055_gyro_offset_t *gyro_offset);
+
+/********************************************************/
+ /************** PAGE1 Functions *********************/
+/********************************************************/
+/*!
+ * @brief This API used to read the accel range
+ * from page one register from 0x08 bit 0 and 1
+ *
+ * @param v_accel_range_u8 : The value of accel range
+ * v_accel_range_u8 | result
+ * ----------------- | --------------
+ * 0x00 | ACCEL_RANGE_2G
+ * 0x01 | ACCEL_RANGE_4G
+ * 0x02 | ACCEL_RANGE_8G
+ * 0x03 | ACCEL_RANGE_16G
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_range(
+u8 *v_accel_range_u8);
+
+/*!
+ * @brief This API used to write the accel range
+ * from page one register from 0x08 bit 0 and 1
+ *
+ * @param v_accel_range_u8 : The value of accel range
+ *
+ * v_accel_range_u8 | result
+ * ----------------- | --------------
+ * 0x00 | ACCEL_RANGE_2G
+ * 0x01 | ACCEL_RANGE_4G
+ * 0x02 | ACCEL_RANGE_8G
+ * 0x03 | ACCEL_RANGE_16G
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_range(
+u8 v_accel_range_u8);
+
+/*!
+ * @brief This API used to read the accel bandwidth
+ * from page one register from 0x08 bit 2 to 4
+ *
+ * @param v_accel_bw_u8 : The value of accel bandwidth
+ *
+ * v_accel_bw_u8 | result
+ * ----------------- | ---------------
+ * 0x00 | ACCEL_BW_7_81HZ
+ * 0x01 | ACCEL_BW_15_63HZ
+ * 0x02 | ACCEL_BW_31_25HZ
+ * 0x03 | ACCEL_BW_62_5HZ
+ * 0x04 | ACCEL_BW_125HZ
+ * 0x05 | ACCEL_BW_250HZ
+ * 0x06 | ACCEL_BW_500HZ
+ * 0x07 | ACCEL_BW_1000HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_bw(
+u8 *v_accel_bw_u8);
+
+/*!
+ * @brief This API used to write the accel bandwidth
+ * from page one register from 0x08 bit 2 to 4
+ *
+ * @param v_accel_bw_u8 : The value of accel bandwidth
+ *
+ * v_accel_bw_u8 | result
+ * ----------------- | ---------------
+ * 0x00 | ACCEL_BW_7_81HZ
+ * 0x01 | ACCEL_BW_15_63HZ
+ * 0x02 | ACCEL_BW_31_25HZ
+ * 0x03 | ACCEL_BW_62_5HZ
+ * 0x04 | ACCEL_BW_125HZ
+ * 0x05 | ACCEL_BW_250HZ
+ * 0x06 | ACCEL_BW_500HZ
+ * 0x07 | ACCEL_BW_1000HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_bw(
+u8 v_accel_bw_u8);
+
+/*!
+ * @brief This API used to read the accel power mode
+ * from page one register from 0x08 bit 5 to 7
+ *
+ * @param v_accel_power_mode_u8 : The value of accel power mode
+ * v_accel_power_mode_u8 | result
+ * ----------------- | -------------
+ * 0x00 | ACCEL_NORMAL
+ * 0x01 | ACCEL_SUSPEND
+ * 0x02 | ACCEL_LOWPOWER_1
+ * 0x03 | ACCEL_STANDBY
+ * 0x04 | ACCEL_LOWPOWER_2
+ * 0x05 | ACCEL_DEEPSUSPEND
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_power_mode(
+u8 *v_accel_power_mode_u8);
+
+/*!
+ * @brief This API used to write the accel power mode
+ * from page one register from 0x08 bit 5 to 7
+ *
+ * @param v_accel_power_mode_u8 : The value of accel power mode
+ * v_accel_power_mode_u8 | result
+ * ----------------- | -------------
+ * 0x00 | ACCEL_NORMAL
+ * 0x01 | ACCEL_SUSPEND
+ * 0x02 | ACCEL_LOWPOWER_1
+ * 0x03 | ACCEL_STANDBY
+ * 0x04 | ACCEL_LOWPOWER_2
+ * 0x05 | ACCEL_DEEPSUSPEND
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_power_mode(
+u8 v_accel_power_mode_u8);
+
+/*!
+ * @brief This API used to read the mag output data rate
+ * from page one register from 0x09 bit 0 to 2
+ *
+ * @param v_mag_data_output_rate_u8 : The value of mag output data rate
+ *
+ * v_mag_data_output_rate_u8 | result
+ * ---------------------- |----------------------
+ * 0x00 | MAG_DATA_OUTPUT_RATE_2HZ
+ * 0x01 | MAG_DATA_OUTPUT_RATE_6HZ
+ * 0x02 | MAG_DATA_OUTPUT_RATE_8HZ
+ * 0x03 | MAG_DATA_OUTPUT_RATE_10HZ
+ * 0x04 | MAG_DATA_OUTPUT_RATE_15HZ
+ * 0x05 | MAG_DATA_OUTPUT_RATE_20HZ
+ * 0x06 | MAG_DATA_OUTPUT_RATE_25HZ
+ * 0x07 | MAG_DATA_OUTPUT_RATE_30HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_data_output_rate(
+u8 *v_mag_data_output_rate_u8);
+
+/*!
+ * @brief This API used to write the mag output data rate
+ * from page one register from 0x09 bit 0 to 2
+ *
+ * @param v_mag_data_output_rate_u8 : The value of mag output data rate
+ *
+ * v_mag_data_output_rate_u8 | result
+ * ---------------------- |----------------------
+ * 0x00 | MAG_DATA_OUTPUT_RATE_2HZ
+ * 0x01 | MAG_DATA_OUTPUT_RATE_6HZ
+ * 0x02 | MAG_DATA_OUTPUT_RATE_8HZ
+ * 0x03 | MAG_DATA_OUTPUT_RATE_10HZ
+ * 0x04 | MAG_DATA_OUTPUT_RATE_15HZ
+ * 0x05 | MAG_DATA_OUTPUT_RATE_20HZ
+ * 0x06 | MAG_DATA_OUTPUT_RATE_25HZ
+ * 0x07 | MAG_DATA_OUTPUT_RATE_30HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_data_output_rate(
+u8 v_mag_data_output_rate_u8);
+
+/*!
+ * @brief This API used to read the mag operation mode
+ * from page one register from 0x09 bit 3 to 4
+ *
+ * @param v_mag_operation_mode_u8 : The value of mag operation mode
+ *
+ * v_mag_operation_mode_u8 | result
+ * ------------------------- |--------------------------
+ * 0x00 | MAG_OPR_MODE_LOWPOWER
+ * 0x01 | MAG_OPR_MODE_REGULAR
+ * 0x02 | MAG_OPR_MODE_ENHANCED_REGULAR
+ * 0x03 | MAG_OPR_MODE_HIGH_ACCURACY
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_operation_mode(
+u8 *v_mag_operation_mode_u8);
+
+/*!
+ * @brief This API used to write the mag operation mode
+ * from page one register from 0x09 bit 3 to 4
+ *
+ * @param v_mag_operation_mode_u8 : The value of mag operation mode
+ *
+ * v_mag_operation_mode_u8 | result
+ * ------------------------- |--------------------------
+ * 0x00 | MAG_OPR_MODE_LOWPOWER
+ * 0x01 | MAG_OPR_MODE_REGULAR
+ * 0x02 | MAG_OPR_MODE_ENHANCED_REGULAR
+ * 0x03 | MAG_OPR_MODE_HIGH_ACCURACY
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_operation_mode(
+u8 v_mag_operation_mode_u8);
+
+/*!
+ * @brief This API used to read the mag power mode
+ * from page one register from 0x09 bit 4 to 6
+ *
+ * @param v_mag_power_mode_u8 : The value of mag power mode
+ *
+ * v_mag_power_mode_u8 | result
+ * --------------------|-----------------
+ * 0x00 | MAG_POWER_MODE_NORMAL
+ * 0x01 | MAG_POWER_MODE_SLEEP
+ * 0x02 | MAG_POWER_MODE_SUSPEND
+ * 0x03 | MAG_POWER_MODE_FORCE_MODE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_power_mode(
+u8 *v_mag_power_mode_u8);
+
+/*!
+ * @brief This API used to write the mag power mode
+ * from page one register from 0x09 bit 4 to 6
+ *
+ * @param v_mag_power_mode_u8 : The value of mag power mode
+ *
+ * v_mag_power_mode_u8 | result
+ * --------------------|-----------------
+ * 0x00 | MAG_POWER_MODE_NORMAL
+ * 0x01 | MAG_POWER_MODE_SLEEP
+ * 0x02 | MAG_POWER_MODE_SUSPEND
+ * 0x03 | MAG_POWER_MODE_FORCE_MODE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_power_mode(
+u8 v_mag_power_mode_u8);
+
+/*!
+ * @brief This API used to read the gyro range
+ * from page one register from 0x0A bit 0 to 3
+ *
+ * @param v_gyro_range_u8 : The value of gyro range
+ *
+ * v_gyro_range_u8 | result
+ * --------------------|-----------------
+ * 0x00 | GYRO_RANGE_2000DPS
+ * 0x01 | GYRO_RANGE_1000DPS
+ * 0x02 | GYRO_RANGE_500DPS
+ * 0x03 | GYRO_RANGE_250DPS
+ * 0x04 | GYRO_RANGE_125DPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_range(
+u8 *v_gyro_range_u8);
+
+/*!
+ * @brief This API used to write the gyro range
+ * from page one register from 0x0A bit 0 to 3
+ *
+ * @param v_gyro_range_u8 : The value of gyro range
+ *
+ * v_gyro_range_u8 | result
+ * --------------------|-----------------
+ * 0x00 | GYRO_RANGE_2000DPS
+ * 0x01 | GYRO_RANGE_1000DPS
+ * 0x02 | GYRO_RANGE_500DPS
+ * 0x03 | GYRO_RANGE_250DPS
+ * 0x04 | GYRO_RANGE_125DPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_range(
+u8 v_gyro_range_u8);
+
+/*!
+ * @brief This API used to read the gyro bandwidth
+ * from page one register from 0x0A bit 3 to 5
+ *
+ * @param v_gyro_bw_u8 : The value of gyro bandwidth
+ *
+ * v_gyro_bw_u8 | result
+ * --------------------|-----------------
+ * 0x00 | GYRO_BW_523HZ
+ * 0x01 | GYRO_BW_230HZ
+ * 0x02 | GYRO_BW_116HZ
+ * 0x03 | GYRO_BW_47HZ
+ * 0x04 | GYRO_BW_23HZ
+ * 0x05 | GYRO_BW_12HZ
+ * 0x06 | GYRO_BW_64HZ
+ * 0x07 | GYRO_BW_32HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_bw(
+u8 *v_gyro_bw_u8);
+
+/*!
+ * @brief This API used to write the gyro bandwidth
+ * from page one register from 0x0A bit 3 to 5
+ *
+ * @param v_gyro_bw_u8 : The value of gyro bandwidth
+ *
+ * v_gyro_bw_u8 | result
+ * --------------------|-----------------
+ * 0x00 | GYRO_BW_523HZ
+ * 0x01 | GYRO_BW_230HZ
+ * 0x02 | GYRO_BW_116HZ
+ * 0x03 | GYRO_BW_47HZ
+ * 0x04 | GYRO_BW_23HZ
+ * 0x05 | GYRO_BW_12HZ
+ * 0x06 | GYRO_BW_64HZ
+ * 0x07 | GYRO_BW_32HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_bw(
+u8 v_gyro_bw_u8);
+
+/*!
+ * @brief This API used to read the gyro power mode
+ * from page one register from 0x0B bit 0 to 2
+ *
+ * @param v_gyro_power_mode_u8 : The value of gyro power mode
+ *
+ * v_gyro_power_mode_u8 | result
+ * ----------------------|----------------------------
+ * 0x00 | GYRO_OPR_MODE_NORMAL
+ * 0x01 | GYRO_OPR_MODE_FASTPOWERUP
+ * 0x02 | GYRO_OPR_MODE_DEEPSUSPEND
+ * 0x03 | GYRO_OPR_MODE_SUSPEND
+ * 0x04 | GYRO_OPR_MODE_ADVANCE_POWERSAVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_power_mode(
+u8 *v_gyro_power_mode_u8);
+
+/*!
+ * @brief This API used to write the gyro power mode
+ * from page one register from 0x0B bit 0 to 2
+ *
+ * @param v_gyro_power_mode_u8 : The value of gyro power mode
+ *
+ * v_gyro_power_mode_u8 | result
+ * ----------------------|----------------------------
+ * 0x00 | GYRO_OPR_MODE_NORMAL
+ * 0x01 | GYRO_OPR_MODE_FASTPOWERUP
+ * 0x02 | GYRO_OPR_MODE_DEEPSUSPEND
+ * 0x03 | GYRO_OPR_MODE_SUSPEND
+ * 0x04 | GYRO_OPR_MODE_ADVANCE_POWERSAVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_power_mode(
+u8 v_gyro_power_mode_u8);
+
+/*!
+ * @brief This API used to read the accel sleep mode
+ * from page one register from 0x0C bit 0
+ *
+ * @param v_sleep_tmr_u8 : The value of accel sleep mode
+ *
+ * v_sleep_tmr_u8 | result
+ * ----------------- |------------------------------------
+ * 0x00 | enable EventDrivenSampling(EDT)
+ * 0x01 | enable Equidistant sampling mode(EST)
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_sleep_tmr_mode(
+u8 *v_sleep_tmr_u8);
+
+/*!
+ * @brief This API used to write the accel sleep mode
+ * from page one register from 0x0C bit 0
+ *
+ * @param v_sleep_tmr_u8 : The value of accel sleep mode
+ *
+ * v_sleep_tmr_u8 | result
+ * ----------------- |------------------------------------
+ * 0x00 | enable EventDrivenSampling(EDT)
+ * 0x01 | enable Equidistant sampling mode(EST)
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_sleep_tmr_mode(
+u8 v_sleep_tmr_u8);
+
+/*!
+ * @brief This API used to read the accel sleep duration
+ * from page one register from 0x0C bit 1 to 4
+ *
+ * @param v_sleep_durn_u8 : The value of accel sleep duration
+ *
+ * v_sleep_durn_u8 | result
+ * ---------------- |-----------------------------
+ * 0x05 | BNO055_ACCEL_SLEEP_DURN_0_5MS
+ * 0x06 | BNO055_ACCEL_SLEEP_DURN_1MS
+ * 0x07 | BNO055_ACCEL_SLEEP_DURN_2MS
+ * 0x08 | BNO055_ACCEL_SLEEP_DURN_4MS
+ * 0x09 | BNO055_ACCEL_SLEEP_DURN_6MS
+ * 0x0A | BNO055_ACCEL_SLEEP_DURN_10MS
+ * 0x0B | BNO055_ACCEL_SLEEP_DURN_25MS
+ * 0x0C | BNO055_ACCEL_SLEEP_DURN_50MS
+ * 0x0D | BNO055_ACCEL_SLEEP_DURN_100MS
+ * 0x0E | BNO055_ACCEL_SLEEP_DURN_500MS
+ * 0x0F | BNO055_ACCEL_SLEEP_DURN_1S
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_sleep_durn(
+u8 *v_sleep_durn_u8);
+
+/*!
+ * @brief This API used to write the accel sleep duration
+ * from page one register from 0x0C bit 1 to 4
+ *
+ * @param v_sleep_durn_u8 : The value of accel sleep duration
+ *
+ * v_sleep_durn_u8 | result
+ * ---------------- |-----------------------------
+ * 0x05 | BNO055_ACCEL_SLEEP_DURN_0_5MS
+ * 0x06 | BNO055_ACCEL_SLEEP_DURN_1MS
+ * 0x07 | BNO055_ACCEL_SLEEP_DURN_2MS
+ * 0x08 | BNO055_ACCEL_SLEEP_DURN_4MS
+ * 0x09 | BNO055_ACCEL_SLEEP_DURN_6MS
+ * 0x0A | BNO055_ACCEL_SLEEP_DURN_10MS
+ * 0x0B | BNO055_ACCEL_SLEEP_DURN_25MS
+ * 0x0C | BNO055_ACCEL_SLEEP_DURN_50MS
+ * 0x0D | BNO055_ACCEL_SLEEP_DURN_100MS
+ * 0x0E | BNO055_ACCEL_SLEEP_DURN_500MS
+ * 0x0F | BNO055_ACCEL_SLEEP_DURN_1S
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_sleep_durn(
+u8 v_sleep_durn_u8);
+
+/*!
+ * @brief This API used to write the gyro sleep duration
+ * from page one register from 0x0D bit 0 to 2
+ *
+ * @param v_sleep_durn_u8 : The value of gyro sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_sleep_durn(u8 *v_sleep_durn_u8);
+
+/*!
+ * @brief This API used to write the gyro sleep duration
+ * from page one register from 0x0D bit 0 to 2
+ *
+ * @param v_sleep_durn_u8 : The value of gyro sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_sleep_durn(u8 v_sleep_durn_u8);
+
+/*!
+ * @brief This API used to read the gyro auto sleep duration
+ * from page one register from 0x0D bit 3 to 5
+ *
+ * @param v_auto_sleep_durn_u8 : The value of gyro auto sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_auto_sleep_durn(
+u8 *v_auto_sleep_durn_u8);
+
+/*!
+ * @brief This API used to write the gyro auto sleep duration
+ * from page one register from 0x0D bit 3 to 5
+ *
+ * @param v_auto_sleep_durn_u8 : The value of gyro auto sleep duration
+ * @param bw : The value of gyro bandwidth
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_gyro_set_auto_sleep_durn(
+u8 v_auto_sleep_durn_u8, u8 bw);
+
+/*!
+ * @brief This API used to read the mag sleep mode
+ * from page one register from 0x0E bit 0
+ *
+ * @param v_sleep_mode_u8 : The value of mag sleep mode
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_sleep_mode(
+u8 *v_sleep_mode_u8);
+
+/*!
+ * @brief This API used to write the mag sleep mode
+ * from page one register from 0x0E bit 0
+ *
+ * @param v_sleep_mode_u8 : The value of mag sleep mode
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_sleep_mode(
+u8 v_sleep_mode_u8);
+
+/*!
+ * @brief This API used to read the mag sleep duration
+ * from page one register from 0x0E bit 1 to 4
+ *
+ * @param v_sleep_durn_u8 : The value of mag sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_sleep_durn(
+u8 *v_sleep_durn_u8);
+
+/*!
+ * @brief This API used to write the mag sleep duration
+ * from page one register from 0x0E bit 1 to 4
+ *
+ * @param v_sleep_durn_u8 : The value of mag sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_sleep_durn(
+u8 v_sleep_durn_u8);
+
+/*!
+ * @brief This API used to read the gyro anymotion interrupt mask
+ * from page one register from 0x0F bit 2
+ *
+ * @param v_gyro_any_motion_u8 : The value of gyro anymotion interrupt mask
+ * v_gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ * bno055_set_gyro_any_motion_axis_enable()
+ *
+ * Filter setting:
+ * bno055_set_gyro_any_motion_filter()
+ *
+ * Threshold :
+ *
+ * bno055_set_gyro_any_motion_thres()
+ *
+ * Slope samples :
+ *
+ * bno055_set_gyro_any_motion_slope_samples()
+ *
+ * Awake duration :
+ *
+ * bno055_set_gyro_any_motion_awake_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_mask_gyro_any_motion(
+u8 *v_gyro_any_motion_u8);
+
+/*!
+ * @brief This API used to write the gyro anymotion interrupt mask
+ * from page one register from 0x0F bit 2
+ *
+ * @param v_gyro_any_motion_u8 : The value of gyro anymotion interrupt mask
+ * v_gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ * bno055_set_gyro_any_motion_axis_enable()
+ *
+ * Filter setting:
+ * bno055_set_gyro_any_motion_filter()
+ *
+ * Threshold :
+ *
+ * bno055_set_gyro_any_motion_thres()
+ *
+ * Slope samples :
+ *
+ * bno055_set_gyro_any_motion_slope_samples()
+ *
+ * Awake duration :
+ *
+ * bno055_set_gyro_any_motion_awake_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_mask_gyro_any_motion(
+u8 v_gyro_any_motion_u8);
+
+/*!
+ * @brief This API used to read the gyro highrate interrupt mask
+ * from page one register from 0x0F bit 3
+ *
+ * @param v_gyro_highrate_u8 : The value of gyro highrate interrupt mask
+ * v_gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_gyro_highrate_axis_enable()
+ *
+ * Filter :
+ *
+ * bno055_set_gyro_highrate_filter()
+ *
+ * Threshold :
+ *
+ * bno055_get_gyro_highrate_x_thres()
+ *
+ * bno055_get_gyro_highrate_y_thres()
+ *
+ * bno055_get_gyro_highrate_z_thres()
+ *
+ * Hysteresis :
+ *
+ * bno055_set_gyro_highrate_x_hyst()
+ *
+ * bno055_set_gyro_highrate_y_hyst()
+ *
+ * bno055_set_gyro_highrate_z_hyst()
+ *
+ * Duration :
+ *
+ * bno055_set_gyro_highrate_x_durn()
+ *
+ * bno055_set_gyro_highrate_y_durn()
+ *
+ * bno055_set_gyro_highrate_z_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_mask_gyro_highrate(
+u8 *v_gyro_highrate_u8);
+
+/*!
+ * @brief This API used to write the gyro highrate interrupt mask
+ * from page one register from 0x0F bit 3
+ *
+ * @param v_gyro_highrate_u8 : The value of gyro highrate interrupt mask
+ * v_gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_gyro_highrate_axis_enable()
+ *
+ * Filter :
+ *
+ * bno055_set_gyro_highrate_filter()
+ *
+ * Threshold :
+ *
+ * bno055_get_gyro_highrate_x_thres()
+ *
+ * bno055_get_gyro_highrate_y_thres()
+ *
+ * bno055_get_gyro_highrate_z_thres()
+ *
+ * Hysteresis :
+ *
+ * bno055_set_gyro_highrate_x_hyst()
+ *
+ * bno055_set_gyro_highrate_y_hyst()
+ *
+ * bno055_set_gyro_highrate_z_hyst()
+ *
+ * Duration :
+ *
+ * bno055_set_gyro_highrate_x_durn()
+ *
+ * bno055_set_gyro_highrate_y_durn()
+ *
+ * bno055_set_gyro_highrate_z_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_mask_gyro_highrate(
+u8 v_gyro_highrate_u8);
+
+/*!
+ * @brief This API used to read the accel highg interrupt mask
+ * from page one register from 0x0F bit 5
+ *
+ * @param v_accel_high_g_u8 : The value of accel highg interrupt mask
+ * v_accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_accel_high_g_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_high_g_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_high_g_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_mask_accel_high_g(
+u8 *v_accel_high_g_u8);
+
+/*!
+ * @brief This API used to write the accel highg interrupt mask
+ * from page one register from 0x0F bit 5
+ *
+ * @param v_accel_high_g_u8 : The value of accel highg interrupt mask
+ * v_accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_accel_high_g_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_high_g_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_high_g_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_mask_accel_high_g(
+u8 v_accel_high_g_u8);
+
+/*!
+ * @brief This API used to read the accel anymotion interrupt mask
+ * from page one register from 0x0F bit 6
+ *
+ * @param v_accel_any_motion_u8 : The value of accel anymotion interrupt mask
+ * v_accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_accel_high_g_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_high_g_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_high_g_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_mask_accel_any_motion(
+u8 *v_accel_any_motion_u8);
+
+/*!
+ * @brief This API used to write the accel anymotion interrupt mask
+ * from page one register from 0x0F bit 6
+ *
+ * @param v_accel_any_motion_u8 : The value of accel anymotion interrupt mask
+ * v_accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Duration:
+ *
+ * bno055_set_accel_any_motion_durn()
+ *
+ * Threshold:
+ *
+ * bno055_set_accel_any_motion_thres()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_mask_accel_any_motion(
+u8 v_accel_any_motion_u8);
+
+/*!
+ * @brief This API used to read the accel nomotion interrupt mask
+ * from page one register from 0x0F bit 7
+ *
+ * @param v_accel_nomotion_u8 : The value of accel nomotion interrupt mask
+ * v_accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ *
+ * @note While enabling the accel anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Duration:
+ *
+ * bno055_set_accel_any_motion_durn()
+ *
+ * Threshold:
+ *
+ * bno055_set_accel_any_motion_thres())
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_mask_accel_no_motion(
+u8 *v_accel_nomotion_u8);
+
+/*!
+ * @brief This API used to write the accel nomotion interrupt mask
+ * from page one register from 0x0F bit 7
+ *
+ * @param v_accel_nomotion_u8 : The value of accel nomotion interrupt mask
+ * v_accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel nomotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_slow_no_motion_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_slow_no_motion_durn()
+ *
+ * Slow/no motion enable:
+ *
+ * bno055_set_accel_slow_no_motion_enable()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_mask_accel_no_motion(
+u8 v_accel_nomotion_u8);
+
+/*!
+ * @brief This API used to read the gyro anymotion interrupt
+ * from page one register from 0x10 bit 2
+ *
+ * @param v_gyro_any_motion_u8 : The value of gyro anymotion interrupt
+ * v_gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ * bno055_set_gyro_any_motion_axis_enable()
+ *
+ * Filter setting:
+ * bno055_set_gyro_any_motion_filter()
+ *
+ * Threshold :
+ *
+ * bno055_set_gyro_any_motion_thres()
+ *
+ * Slope samples :
+ *
+ * bno055_set_gyro_any_motion_slope_samples()
+ *
+ * Awake duration :
+ *
+ * bno055_set_gyro_any_motion_awake_durn()
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_gyro_any_motion(
+u8 *v_gyro_any_motion_u8);
+
+/*!
+ * @brief This API used to write the gyro anymotion interrupt
+ * from page one register from 0x10 bit 2
+ *
+ * @param v_gyro_any_motion_u8 : The value of gyro anymotion interrupt
+ * v_gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ * bno055_set_gyro_any_motion_axis_enable()
+ *
+ * Filter setting:
+ * bno055_set_gyro_any_motion_filter()
+ *
+ * Threshold :
+ *
+ * bno055_set_gyro_any_motion_thres()
+ *
+ * Slope samples :
+ *
+ * bno055_set_gyro_any_motion_slope_samples()
+ *
+ * Awake duration :
+ *
+ * bno055_set_gyro_any_motion_awake_durn()
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_gyro_any_motion(
+u8 v_gyro_any_motion_u8);
+
+/*!
+ * @brief This API used to read the gyro highrate interrupt
+ * from page one register from 0x10 bit 3
+ *
+ * @param v_gyro_highrate_u8 : The value of gyro highrate interrupt
+ * v_gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_gyro_highrate_axis_enable()
+ *
+ * Filter :
+ *
+ * bno055_set_gyro_highrate_filter()
+ *
+ * Threshold :
+ *
+ * bno055_get_gyro_highrate_x_thres()
+ *
+ * bno055_get_gyro_highrate_y_thres()
+ *
+ * bno055_get_gyro_highrate_z_thres()
+ *
+ * Hysteresis :
+ *
+ * bno055_set_gyro_highrate_x_hyst()
+ *
+ * bno055_set_gyro_highrate_y_hyst()
+ *
+ * bno055_set_gyro_highrate_z_hyst()
+ *
+ * Duration :
+ *
+ * bno055_set_gyro_highrate_x_durn()
+ *
+ * bno055_set_gyro_highrate_y_durn()
+ *
+ * bno055_set_gyro_highrate_z_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_gyro_highrate(
+u8 *v_gyro_highrate_u8);
+
+/*!
+ * @brief This API used to write the gyro highrate interrupt
+ * from page one register from 0x10 bit 3
+ *
+ * @param v_gyro_highrate_u8 : The value of gyro highrate interrupt
+ * v_gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_gyro_highrate_axis_enable()
+ *
+ * Filter :
+ *
+ * bno055_set_gyro_highrate_filter()
+ *
+ * Threshold :
+ *
+ * bno055_get_gyro_highrate_x_thres()
+ *
+ * bno055_get_gyro_highrate_y_thres()
+ *
+ * bno055_get_gyro_highrate_z_thres()
+ *
+ * Hysteresis :
+ *
+ * bno055_set_gyro_highrate_x_hyst()
+ *
+ * bno055_set_gyro_highrate_y_hyst()
+ *
+ * bno055_set_gyro_highrate_z_hyst()
+ *
+ * Duration :
+ *
+ * bno055_set_gyro_highrate_x_durn()
+ *
+ * bno055_set_gyro_highrate_y_durn()
+ *
+ * bno055_set_gyro_highrate_z_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_gyro_highrate(
+u8 v_gyro_highrate_u8);
+
+/*!
+ * @brief This API used to read the accel highg interrupt
+ * from page one register from 0x10 bit 5
+ *
+ * @param v_accel_high_g_u8 : The value of accel highg interrupt
+ * v_accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_accel_high_g_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_high_g_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_high_g_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_accel_high_g(
+u8 *v_accel_high_g_u8);
+
+/*!
+ * @brief This API used to write the accel highg interrupt
+ * from page one register from 0x10 bit 5
+ *
+ * @param v_accel_high_g_u8 : The value of accel highg interrupt
+ * v_accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following functions
+ *
+ * Axis :
+ *
+ * bno055_set_accel_high_g_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_high_g_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_high_g_durn()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_accel_high_g(
+u8 v_accel_high_g_u8);
+
+/*!
+ * @brief This API used to read the accel anymotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param v_accel_any_motion_u8 : The value of accel anymotion interrupt
+ * v_accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Duration:
+ *
+ * bno055_set_accel_any_motion_durn()
+ *
+ * Threshold:
+ *
+ * bno055_set_accel_any_motion_thres()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_accel_any_motion(
+u8 *v_accel_any_motion_u8);
+
+/*!
+ * @brief This API used to write the accel anymotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param v_accel_any_motion_u8 : The value of accel anymotion interrupt
+ * v_accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel anymotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Duration:
+ *
+ * bno055_set_accel_any_motion_durn()
+ *
+ * Threshold:
+ *
+ * bno055_set_accel_any_motion_thres()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_accel_any_motion(
+u8 v_accel_any_motion_u8);
+
+/*!
+ * @brief This API used to read the accel nomotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param v_accel_nomotion_u8 : The value of accel nomotion interrupt
+ * v_accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel nomotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_slow_no_motion_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_slow_no_motion_durn()
+ *
+ * Slow/no motion enable:
+ *
+ * bno055_set_accel_slow_no_motion_enable()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_accel_no_motion(
+u8 *v_accel_nomotion_u8);
+
+/*!
+ * @brief This API used to write the accel nomotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param v_accel_nomotion_u8 : The value of accel nomotion interrupt
+ * v_accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note While enabling the accel nomotion interrupt
+ * configure the following settings
+ *
+ * Axis:
+ *
+ * bno055_set_accel_any_motion_no_motion_axis_enable()
+ *
+ * Threshold :
+ *
+ * bno055_set_accel_slow_no_motion_thres()
+ *
+ * Duration :
+ *
+ * bno055_set_accel_slow_no_motion_durn()
+ *
+ * Slow/no motion enable:
+ *
+ * bno055_set_accel_slow_no_motion_enable()
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_accel_no_motion(
+u8 v_accel_nomotion_u8);
+
+/*!
+ * @brief This API used to read the accel any motion threshold
+ * from page one register from 0x11 bit 0 to 7
+ *
+ * @param v_accel_any_motion_thres_u8 : The value of any motion threshold
+ * v_accel_any_motion_thres_u8 | result
+ * ------------------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel anymotion threshold dependent on the
+ * range values
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 3.19mg | 1LSB
+ * 4g | 7.81mg | 1LSB
+ * 8g | 15.63mg | 1LSB
+ * 16g | 31.25mg | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_any_motion_thres(
+u8 *v_accel_any_motion_thres_u8);
+
+/*!
+ * @brief This API used to write the accel any motion threshold
+ * from page one register from 0x11 bit 0 to 7
+ *
+ * @param v_accel_any_motion_thres_u8 : The value of any motion threshold
+ * v_accel_any_motion_thres_u8 | result
+ * ------------------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel anymotion threshold dependent on the
+ * range values
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 3.19mg | 1LSB
+ * 4g | 7.81mg | 1LSB
+ * 8g | 15.63mg | 1LSB
+ * 16g | 31.25mg | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_any_motion_thres(
+u8 v_accel_any_motion_thres_u8);
+
+/*!
+ * @brief This API used to read the accel anymotion duration
+ * from page one register from 0x12 bit 0 to 1
+ *
+ * @param v_accel_any_motion_durn_u8 : The value of accel anymotion duration
+ * v_accel_any_motion_durn_u8 | result
+ * ------------------------- | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_any_motion_durn(
+u8 *v_accel_any_motion_durn_u8);
+
+/*!
+ * @brief This API used to write the accel anymotion duration
+ * from page one register from 0x12 bit 0 to 1
+ *
+ * @param v_accel_any_motion_durn_u8 : The value of accel anymotion duration
+ *
+ * v_accel_any_motion_durn_u8 | result
+ * ------------------------- | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_any_motion_durn(
+u8 v_accel_any_motion_durn_u8);
+
+/*!
+ * @brief This API used to read the accel anymotion enable
+ * from page one register from 0x12 bit 2 to 4
+ *
+ * @param v_data_u8 : The value of accel anymotion enable
+ * v_data_u8 | result
+ * ------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of accel anymotion axis selection
+ * v_channel_u8 | value
+ * -------------------------- | ----------
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_X_AXIS | 0
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS | 1
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_any_motion_no_motion_axis_enable(
+u8 v_channel_u8, u8 *v_data_u8);
+
+/*!
+ * @brief This API used to write the accel anymotion enable
+ * from page one register from 0x12 bit 2 to 4
+ *
+ * @param v_data_u8 : The value of accel anymotion enable
+ * v_data_u8 | result
+ * ------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of accel anymotion axis selection
+ * v_channel_u8 | value
+ * -------------------------- | ----------
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_X_AXIS | 0
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS | 1
+ * BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_any_motion_no_motion_axis_enable(
+u8 v_channel_u8, u8 v_data_u8);
+
+/*!
+ * @brief This API used to read the accel highg enable
+ * from page one register from 0x12 bit 5 to 7
+ *
+ * @param v_data_u8 : The value of accel highg enable
+ * v_data_u8| result
+ * ------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of accel highg axis selection
+ * v_channel_u8 | value
+ * -------------------------- | ----------
+ * BNO055_ACCEL_HIGH_G_X_AXIS | 0
+ * BNO055_ACCEL_HIGH_G_Y_AXIS | 1
+ * BNO055_ACCEL_HIGH_G_Z_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_high_g_axis_enable(
+u8 v_channel_u8, u8 *v_data_u8);
+
+/*!
+ * @brief This API used to write the accel highg enable
+ * from page one register from 0x12 bit 5 to 7
+ *
+ * @param v_data_u8 : The value of accel highg enable
+ * v_data_u8| result
+ * ------------ | -------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of accel highg axis selection
+ * v_channel_u8 | value
+ * -------------------------- | ----------
+ * BNO055_ACCEL_HIGH_G_X_AXIS | 0
+ * BNO055_ACCEL_HIGH_G_Y_AXIS | 1
+ * BNO055_ACCEL_HIGH_G_Z_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_high_g_axis_enable(
+u8 v_channel_u8, u8 v_data_u8);
+
+/*!
+ * @brief This API used to read the accel highg duration
+ * from page one register from 0x13 bit 0 to 7
+ *
+ * @param v_accel_high_g_durn_u8 : The value of accel highg duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The high-g interrupt trigger delay according
+ * to [highg duration + 1] * 2 ms
+ *
+ * in a range from 2 ms to 512 ms
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_high_g_durn(
+u8 *v_accel_high_g_durn_u8);
+
+/*!
+ * @brief This API used to write the accel highg duration
+ * from page one register from 0x13 bit 0 to 7
+ *
+ * @param v_accel_high_g_durn_u8 : The value of accel highg duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note The high-g interrupt trigger delay according
+ * to [highg duration + 1] * 2 ms
+ *
+ * in a range from 2 ms to 512 ms
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_high_g_durn(
+u8 v_accel_high_g_durn_u8);
+
+/*!
+ * @brief This API used to read the accel highg threshold
+ * from page one register from 0x14 bit 0 to 7
+ *
+ * @param v_accel_high_g_thres_u8 : The value of accel highg threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel highg interrupt threshold dependent
+ * for accel g range
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 7.81mg | 1LSB
+ * 4g | 15.63mg | 1LSB
+ * 8g | 31.25mg | 1LSB
+ * 16g | 62.5mg | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_high_g_thres(
+u8 *v_accel_high_g_thres_u8);
+
+/*!
+ * @brief This API used to write the accel highg threshold
+ * from page one register from 0x14 bit 0 to 7
+ *
+ * @param v_accel_high_g_thres_u8 : The value of accel highg threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel highg interrupt threshold dependent
+ * for accel g range
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 7.81mg | 1LSB
+ * 4g | 15.63mg | 1LSB
+ * 8g | 31.25mg | 1LSB
+ * 16g | 62.5mg | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_high_g_thres(
+u8 v_accel_high_g_thres_u8);
+
+/*!
+ * @brief This API used to read the accel slownomotion threshold
+ * from page one register from 0x15 bit 0 to 7
+ *
+ * @param v_accel_slow_no_motion_thres_u8 :
+ * The value of accel slownomotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel slow no motion interrupt threshold dependent
+ * for accel g range
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 3.19mg | 1LSB
+ * 4g | 7.81mg | 1LSB
+ * 8g | 15.63mg | 1LSB
+ * 16g | 31.25mg | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_slow_no_motion_thres(
+u8 *v_accel_slow_no_motion_thres_u8);
+
+/*!
+ * @brief This API used to write the accel slownomotion threshold
+ * from page one register from 0x15 bit 0 to 7
+ *
+ * @param v_accel_slow_no_motion_thres_u8 :
+ * The value of accel slownomotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Accel slow no motion interrupt threshold dependent
+ * for accel g range
+ *
+ * v_accel_range_u8 | threshold | LSB
+ * ------------- | ------------- | ---------
+ * 2g | 3.19mg | 1LSB
+ * 4g | 7.81mg | 1LSB
+ * 8g | 15.63mg | 1LSB
+ * 16g | 31.25mg | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_slow_no_motion_thres(
+u8 v_accel_slow_no_motion_thres_u8);
+
+/*!
+ * @brief This API used to read accel slownomotion enable
+ * from page one register from 0x16 bit 0
+ *
+ * @param v_accel_slow_no_motion_en_u8 : The value of accel slownomotion enable
+ * v_accel_slow_no_motion_en_u8 | result
+ * ------------------------ | --------
+ * 0x01 | Slow motion
+ * 0x00 | No motion
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_slow_no_motion_enable(
+u8 *v_accel_slow_no_motion_en_u8);
+
+/*!
+ * @brief This API used to write accel slownomotion enable
+ * from page one register from 0x16 bit 0
+ *
+ * @param v_accel_slow_no_motion_en_u8 : The value of accel slownomotion enable
+ * v_accel_slow_no_motion_en_u8 | result
+ * ------------------------ | --------
+ * 0x01 | Slow motion
+ * 0x00 | No motion
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_slow_no_motion_enable(
+u8 v_accel_slow_no_motion_en_u8);
+
+/*!
+ * @brief This API used to read accel slownomotion duration
+ * from page one register from 0x16 bit 1 to 6
+ *
+ * @param v_accel_slow_no_motion_durn_u8 :
+ * The value of accel slownomotion duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_slow_no_motion_durn(
+u8 *v_accel_slow_no_motion_durn_u8);
+
+/*!
+ * @brief This API used to write accel slownomotion duration
+ * from page one register from 0x16 bit 1 to 6
+ *
+ * @param v_accel_slow_no_motion_durn_u8 :
+ * The value of accel slownomotion duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_slow_no_motion_durn(
+u8 v_accel_slow_no_motion_durn_u8);
+
+/*!
+ * @brief This API used to read the gyro anymotion enable
+ * from page one register from 0x17 bit 0 to 2
+ *
+ * @param v_data_u8 : The value of gyro anymotion enable
+ * v_data_u8 | result
+ * ----------------- |-------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of gyro anymotion axis selection
+ * v_channel_u8 | value
+ * --------------------------- | ----------
+ * BNO055_GYRO_ANY_MOTIONX_AXIS | 0
+ * BNO055_GYRO_ANY_MOTIONY_AXIS | 1
+ * BNO055_GYRO_ANY_MOTIONZ_AXIS | 2
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_axis_enable(
+u8 v_channel_u8, u8 *v_data_u8);
+
+/*!
+ * @brief This API used to write the gyro anymotion enable
+ * from page one register from 0x17 bit 0 to 2
+ *
+ * @param v_data_u8 : The value of gyro anymotion enable
+ * v_data_u8 | result
+ * ----------------- |-------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of gyro anymotion axis selection
+ * v_channel_u8 | value
+ * --------------------------- | ----------
+ * BNO055_GYRO_ANY_MOTIONX_AXIS | 0
+ * BNO055_GYRO_ANY_MOTIONY_AXIS | 1
+ * BNO055_GYRO_ANY_MOTIONZ_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_axis_enable(
+u8 v_channel_u8, u8 v_data_u8);
+
+/*!
+ * @brief This API used to read the gyro highrate enable
+ * from page one register from 0x17 bit 3 to 5
+ *
+ * @param v_data_u8 : The value of gyro highrate enable
+ * v_data_u8 | result
+ * ---------------- |-------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of gyro highrate axis selection
+ * v_channel_u8 | value
+ * ------------------------ | ----------
+ * BNO055_GYRO_HIGHRATE_X_AXIS | 0
+ * BNO055_GYRO_HIGHRATE_Y_AXIS | 1
+ * BNO055_GYRO_HIGHRATE_Z_AXIS | 2
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_axis_enable(
+u8 v_channel_u8, u8 *v_data_u8);
+
+/*!
+ * @brief This API used to write the gyro highrate enable
+ * from page one register from 0x17 bit 3 to 5
+ *
+ * @param v_data_u8 : The value of gyro highrate enable
+ * v_data_u8 | result
+ * ---------------- |-------------
+ * 0x01 | ENABLED
+ * 0x00 | DISABLED
+ * @param v_channel_u8 : The value of gyro highrate axis selection
+ * v_channel_u8 | value
+ * ------------------------ | ----------
+ * BNO055_GYRO_HIGHRATE_X_AXIS | 0
+ * BNO055_GYRO_HIGHRATE_Y_AXIS | 1
+ * BNO055_GYRO_HIGHRATE_Z_AXIS | 2
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_axis_enable(
+u8 v_channel_u8, u8 v_data_u8);
+
+/*!
+ * @brief This API used to read gyro anymotion filter
+ * from page one register from 0x17 bit 6
+ *
+ * @param v_gyro_any_motion_filter_u8 : The value of gyro anymotion filter
+ * v_gyro_any_motion_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | FILTERED
+ * 0x01 | UNFILTERED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_filter(
+u8 *v_gyro_any_motion_filter_u8);
+
+/*!
+ * @brief This API used to write gyro anymotion filter
+ * from page one register from 0x17 bit 6
+ *
+ * @param v_gyro_any_motion_filter_u8 : The value of gyro anymotion filter
+ * v_gyro_any_motion_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | FILTERED
+ * 0x01 | UNFILTERED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_filter(
+u8 v_gyro_any_motion_filter_u8);
+
+/*!
+ * @brief This API used to read gyro highrate filter
+ * from page one register from 0x17 bit 7
+ *
+ * @param v_gyro_highrate_filter_u8 : The value of gyro highrate filter
+ * v_gyro_highrate_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | FILTERED
+ * 0x01 | UNFILTERED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_filter(
+u8 *v_gyro_highrate_filter_u8);
+
+/*!
+ * @brief This API used to write gyro highrate filter
+ * from page one register from 0x17 bit 7
+ *
+ * @param v_gyro_highrate_filter_u8 : The value of gyro highrate filter
+ * v_gyro_highrate_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | FILTERED
+ * 0x01 | UNFILTERED
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_filter(
+u8 v_gyro_highrate_filter_u8);
+
+/*!
+ * @brief This API used to read gyro highrate x threshold
+ * from page one register from 0x18 bit 0 to 4
+ *
+ * @param v_gyro_highrate_x_thres_u8 : The value of gyro x highrate threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_x_thres(
+u8 *v_gyro_highrate_x_thres_u8);
+
+/*!
+ * @brief This API used to write gyro highrate x threshold
+ * from page one register from 0x18 bit 0 to 4
+ *
+ * @param v_gyro_highrate_x_thres_u8 : The value of gyro x highrate threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_x_thres(
+u8 v_gyro_highrate_x_thres_u8);
+
+/*!
+ * @brief This API used to read gyro highrate x hysteresis
+ * from page one register from 0x18 bit 5 to 6
+ *
+ * @param v_gyro_highrate_x_hyst_u8 : The value of gyro highrate x hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_x_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_x_hyst(
+u8 *v_gyro_highrate_x_hyst_u8);
+
+/*!
+ * @brief This API used to write gyro highrate x hysteresis
+ * from page one register from 0x18 bit 5 to 6
+ *
+ * @param v_gyro_highrate_x_hyst_u8 : The value of gyro highrate x hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_x_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_x_hyst(
+u8 v_gyro_highrate_x_hyst_u8);
+
+/*!
+ * @brief This API used to read gyro highrate x duration
+ * from page one register from 0x19 bit 0 to 7
+ *
+ * @param v_gyro_highrate_x_durn_u8 : The value of gyro highrate x duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_x_durn_u8)*2.5ms
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_x_durn(
+u8 *v_gyro_highrate_x_durn_u8);
+
+/*!
+ * @brief This API used to write gyro highrate x duration
+ * from page one register from 0x19 bit 0 to 7
+ *
+ * @param v_gyro_highrate_x_durn_u8 : The value of gyro highrate x duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_x_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_x_durn(
+u8 v_gyro_highrate_x_durn_u8);
+
+/*!
+ * @brief This API used to read gyro highrate y threshold
+ * from page one register from 0x1A bit 0 to 4
+ *
+ * @param v_gyro_highrate_y_thres_u8 : The value of gyro highrate y threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_y_thres(
+u8 *v_gyro_highrate_y_thres_u8);
+
+/*!
+ * @brief This API used to write gyro highrate y threshold
+ * from page one register from 0x1A bit 0 to 4
+ *
+ * @param v_gyro_highrate_y_thres_u8 : The value of gyro highrate y threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_y_thres(
+u8 v_gyro_highrate_y_thres_u8);
+
+/*!
+ * @brief This API used to read gyro highrate y hysteresis
+ * from page one register from 0x1A bit 5 to 6
+ *
+ * @param v_gyro_highrate_y_hyst_u8 : The value of gyro highrate y hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_y_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_y_hyst(
+u8 *v_gyro_highrate_y_hyst_u8);
+
+/*!
+ * @brief This API used to write gyro highrate y hysteresis
+ * from page one register from 0x1A bit 5 to 6
+ *
+ * @param v_gyro_highrate_y_hyst_u8 : The value of gyro highrate y hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_y_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_y_hyst(
+u8 v_gyro_highrate_y_hyst_u8);
+
+/*!
+ * @brief This API used to read gyro highrate y duration
+ * from page one register from 0x1B bit 0 to 7
+ *
+ * @param v_gyro_highrate_y_durn_u8 : The value of gyro highrate y duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_y_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_y_durn(
+u8 *v_gyro_highrate_y_durn_u8);
+
+/*!
+ * @brief This API used to write gyro highrate y duration
+ * from page one register from 0x1B bit 0 to 7
+ *
+ * @param v_gyro_highrate_y_durn_u8 : The value of gyro highrate y duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_y_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_y_durn(
+u8 v_gyro_highrate_y_durn_u8);
+
+/*!
+ * @brief This API used to read gyro highrate z threshold
+ * from page one register from 0x1C bit 0 to 4
+ *
+ * @param v_gyro_highrate_z_thres_u8 : The value of gyro highrate z threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_z_thres(
+u8 *v_gyro_highrate_z_thres_u8);
+
+/*!
+ * @brief This API used to write gyro highrate z threshold
+ * from page one register from 0x1C bit 0 to 4
+ *
+ * @param v_gyro_highrate_z_thres_u8 : The value of gyro highrate z threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.5dps | 1LSB
+ * 1000 | 31.25dps | 1LSB
+ * 500 | 15.625dps | 1LSB
+ * 125 | 7.8125dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_z_thres(
+u8 v_gyro_highrate_z_thres_u8);
+
+/*!
+ * @brief This API used to read gyro highrate z hysteresis
+ * from page one register from 0x1C bit 5 to 6
+ *
+ * @param v_gyro_highrate_z_hyst_u8 : The value of gyro highrate z hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_z_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_z_hyst(
+u8 *v_gyro_highrate_z_hyst_u8);
+
+/*!
+ * @brief This API used to write gyro highrate z hysteresis
+ * from page one register from 0x1C bit 5 to 6
+ *
+ * @param v_gyro_highrate_z_hyst_u8 : The value of gyro highrate z hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * v_gyro_highrate_z_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * v_gyro_range_u8 | hysteresis | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 62.26dps | 1LSB
+ * 1000 | 31.13dps | 1LSB
+ * 500 | 15.56dps | 1LSB
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_z_hyst(
+u8 v_gyro_highrate_z_hyst_u8);
+
+/*!
+ * @brief This API used to read gyro highrate z duration
+ * from page one register from 0x1D bit 0 to 7
+ *
+ * @param v_gyro_highrate_z_durn_u8 : The value of gyro highrate z duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_z_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_z_durn(
+u8 *v_gyro_highrate_z_durn_u8);
+
+/*!
+ * @brief This API used to write gyro highrate z duration
+ * from page one register from 0x1D bit 0 to 7
+ *
+ * @param v_gyro_highrate_z_durn_u8 : The value of gyro highrate z duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + v_gyro_highrate_z_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_z_durn(
+u8 v_gyro_highrate_z_durn_u8);
+
+/*!
+ * @brief This API used to read gyro anymotion threshold
+ * from page one register from 0x1E bit 0 to 6
+ *
+ * @param v_gyro_any_motion_thres_u8 : The value of gyro anymotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro anymotion interrupt threshold dependent
+ * on the selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 1dps | 1LSB
+ * 1000 | 0.5dps | 1LSB
+ * 500 | 0.25dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_thres(
+u8 *v_gyro_any_motion_thres_u8);
+
+/*!
+ * @brief This API used to write gyro anymotion threshold
+ * from page one register from 0x1E bit 0 to 6
+ *
+ * @param v_gyro_any_motion_thres_u8 : The value of gyro anymotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ * @note Gyro anymotion interrupt threshold dependent
+ * on the selection of gyro range
+ *
+ * v_gyro_range_u8 | threshold | LSB
+ * ----------------- | ------------- | ---------
+ * 2000 | 1dps | 1LSB
+ * 1000 | 0.5dps | 1LSB
+ * 500 | 0.25dps | 1LSB
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_thres(
+u8 v_gyro_any_motion_thres_u8);
+
+/*!
+ * @brief This API used to read gyro anymotion slope samples
+ * from page one register from 0x1F bit 0 to 1
+ *
+ * @param v_gyro_any_motion_slope_samples_u8 :
+ * The value of gyro anymotion slope samples
+ * v_gyro_any_motion_slope_samples_u8 | result
+ * ---------------------------------- | -----------
+ * 0 | 8 samples
+ * 1 | 16 samples
+ * 2 | 32 samples
+ * 3 | 64 samples
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_slope_samples(
+u8 *v_gyro_any_motion_slope_samples_u8);
+
+/*!
+ * @brief This API used to write gyro anymotion slope samples
+ * from page one register from 0x1F bit 0 to 1
+ *
+ * @param v_gyro_any_motion_slope_samples_u8 :
+ * The value of gyro anymotion slope samples
+ * v_gyro_any_motion_slope_samples_u8 | result
+ * ---------------------------------- | -----------
+ * 0 | 8 samples
+ * 1 | 16 samples
+ * 2 | 32 samples
+ * 3 | 64 samples
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_slope_samples(
+u8 v_gyro_any_motion_slope_samples_u8);
+
+/*!
+ * @brief This API used to read gyro anymotion awake duration
+ * from page one register from 0x1F bit 2 to 3
+ *
+ * @param v_gyro_awake_durn_u8 : The value of gyro anymotion awake duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_awake_durn(
+u8 *v_gyro_awake_durn_u8);
+
+/*!
+ * @brief This API used to write gyro anymotion awake duration
+ * from page one register from 0x1F bit 2 to 3
+ *
+ * @param v_gyro_awake_durn_u8 : The value of gyro anymotion awake duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> Success
+ * @retval 1 -> Error
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_awake_durn(
+u8 v_gyro_awake_durn_u8);
+
+
+
+/****************************************************************/
+/**\name DATA TYPES INCLUDES */
+/************************************************************/
+/*!
+* @brief The following definition uses for define the data types
+*
+* @note While porting the API please consider the following
+* @note Please check the version of C standard
+* @note Are you using Linux platform
+*/
+
+/*!
+* @brief For the Linux platform support
+* Please use the types.h for your data types definitions
+*/
+#ifdef __KERNEL__
+
+#include <linux/types.h>
+/* singed integer type*/
+typedef int8_t s8;/**< used for signed 8bit */
+typedef int16_t s16;/**< used for signed 16bit */
+typedef int32_t s32;/**< used for signed 32bit */
+typedef int64_t s64;/**< used for signed 64bit */
+
+typedef u_int8_t u8;/**< used for unsigned 8bit */
+typedef u_int16_t u16;/**< used for unsigned 16bit */
+typedef u_int32_t u32;/**< used for unsigned 32bit */
+typedef u_int64_t u64;/**< used for unsigned 64bit */
+
+
+
+#else /* ! __KERNEL__ */
+/**********************************************************
+* These definition uses for define the C
+* standard version data types
+***********************************************************/
+# if !defined(__STDC_VERSION__)
+
+/************************************************
+ * compiler is C11 C standard
+************************************************/
+#if (__STDC_VERSION__ == 201112L)
+
+/************************************************/
+#include <stdint.h>
+/************************************************/
+
+/*unsigned integer types*/
+typedef uint8_t u8;/**< used for unsigned 8bit */
+typedef uint16_t u16;/**< used for unsigned 16bit */
+typedef uint32_t u32;/**< used for unsigned 32bit */
+typedef uint64_t u64;/**< used for unsigned 64bit */
+
+/*signed integer types*/
+typedef int8_t s8;/**< used for signed 8bit */
+typedef int16_t s16;/**< used for signed 16bit */
+typedef int32_t s32;/**< used for signed 32bit */
+typedef int64_t s64;/**< used for signed 64bit */
+/************************************************
+ * compiler is C99 C standard
+************************************************/
+
+#elif (__STDC_VERSION__ == 199901L)
+
+/* stdint.h is a C99 supported c library.
+which is used to fixed the integer size*/
+/************************************************/
+#include <stdint.h>
+/************************************************/
+
+/*unsigned integer types*/
+typedef uint8_t u8;/**< used for unsigned 8bit */
+typedef uint16_t u16;/**< used for unsigned 16bit */
+typedef uint32_t u32;/**< used for unsigned 32bit */
+typedef uint64_t u64;/**< used for unsigned 64bit */
+
+/*signed integer types*/
+typedef int8_t s8;/**< used for signed 8bit */
+typedef int16_t s16;/**< used for signed 16bit */
+typedef int32_t s32;/**< used for signed 32bit */
+typedef int64_t s64;/**< used for signed 64bit */
+/************************************************
+ * compiler is C89 or other C standard
+************************************************/
+
+#else /* !defined(__STDC_VERSION__) */
+/*!
+* @brief By default it is defined as 32 bit machine configuration
+* define your data types based on your
+* machine/compiler/controller configuration
+*/
+#define MACHINE_32_BIT
+
+/*! @brief
+ * If your machine support 16 bit
+ * define the MACHINE_16_BIT
+ */
+#ifdef MACHINE_16_BIT
+#include <limits.h>
+/*signed integer types*/
+typedef signed char s8;/**< used for signed 8bit */
+typedef signed short int s16;/**< used for signed 16bit */
+typedef signed long int s32;/**< used for signed 32bit */
+
+#if defined(LONG_MAX) && LONG_MAX == 0x7fffffffffffffffL
+typedef long int s64;/**< used for signed 64bit */
+typedef unsigned long int u64;/**< used for unsigned 64bit */
+#elif defined(LLONG_MAX) && (LLONG_MAX == 0x7fffffffffffffffLL)
+typedef long long int s64;/**< used for signed 64bit */
+typedef unsigned long long int u64;/**< used for unsigned 64bit */
+#else
+#warning Either the correct data type for signed 64 bit integer \
+could not be found, or 64 bit integers are not supported in your environment.
+#warning If 64 bit integers are supported on your platform, \
+please set s64 manually.
+#endif
+
+/*unsigned integer types*/
+typedef unsigned char u8;/**< used for unsigned 8bit */
+typedef unsigned short int u16;/**< used for unsigned 16bit */
+typedef unsigned long int u32;/**< used for unsigned 32bit */
+
+/* If your machine support 32 bit
+define the MACHINE_32_BIT*/
+#elif defined MACHINE_32_BIT
+/*signed integer types*/
+typedef signed char s8;/**< used for signed 8bit */
+typedef signed short int s16;/**< used for signed 16bit */
+typedef signed int s32;/**< used for signed 32bit */
+typedef signed long long int s64;/**< used for signed 64bit */
+
+/*unsigned integer types*/
+typedef unsigned char u8;/**< used for unsigned 8bit */
+typedef unsigned short int u16;/**< used for unsigned 16bit */
+typedef unsigned int u32;/**< used for unsigned 32bit */
+typedef unsigned long long int u64;/**< used for unsigned 64bit */
+
+/* If your machine support 64 bit
+define the MACHINE_64_BIT*/
+#elif defined MACHINE_64_BIT
+/*signed integer types*/
+typedef signed char s8;/**< used for signed 8bit */
+typedef signed short int s16;/**< used for signed 16bit */
+typedef signed int s32;/**< used for signed 32bit */
+typedef signed long int s64;/**< used for signed 64bit */
+
+/*unsigned integer types*/
+typedef unsigned char u8;/**< used for unsigned 8bit */
+typedef unsigned short int u16;/**< used for unsigned 16bit */
+typedef unsigned int u32;/**< used for unsigned 32bit */
+typedef unsigned long int u64;/**< used for unsigned 64bit */
+
+#else
+#warning The data types defined above which not supported \
+define the data types manually
+#endif
+#endif
+
+/*** This else will execute for the compilers
+ * which are not supported the C standards
+ * Like C89/C99/C11***/
+#else
+/*!
+* @brief By default it is defined as 32 bit machine configuration
+* define your data types based on your
+* machine/compiler/controller configuration
+*/
+#define MACHINE_32_BIT
+
+/* If your machine support 16 bit
+define the MACHINE_16_BIT*/
+#ifdef MACHINE_16_BIT
+#include <limits.h>
+/*signed integer types*/
+typedef signed char s8;/**< used for signed 8bit */
+typedef signed short int s16;/**< used for signed 16bit */
+typedef signed long int s32;/**< used for signed 32bit */
+
+#if defined(LONG_MAX) && LONG_MAX == 0x7fffffffffffffffL
+typedef long int s64;/**< used for signed 64bit */
+typedef unsigned long int u64;/**< used for unsigned 64bit */
+#elif defined(LLONG_MAX) && (LLONG_MAX == 0x7fffffffffffffffLL)
+typedef long long int s64;/**< used for signed 64bit */
+typedef unsigned long long int u64;/**< used for unsigned 64bit */
+#else
+#warning Either the correct data type for signed 64 bit integer \
+could not be found, or 64 bit integers are not supported in your environment.
+#warning If 64 bit integers are supported on your platform, \
+please set s64 manually.
+#endif
+
+/*unsigned integer types*/
+typedef unsigned char u8;/**< used for unsigned 8bit */
+typedef unsigned short int u16;/**< used for unsigned 16bit */
+typedef unsigned long int u32;/**< used for unsigned 32bit */
+
+/*! @brief If your machine support 32 bit
+define the MACHINE_32_BIT*/
+#elif defined MACHINE_32_BIT
+/*signed integer types*/
+typedef signed char s8;/**< used for signed 8bit */
+typedef signed short int s16;/**< used for signed 16bit */
+typedef signed int s32;/**< used for signed 32bit */
+typedef signed long long int s64;/**< used for signed 64bit */
+
+/*unsigned integer types*/
+typedef unsigned char u8;/**< used for unsigned 8bit */
+typedef unsigned short int u16;/**< used for unsigned 16bit */
+typedef unsigned int u32;/**< used for unsigned 32bit */
+typedef unsigned long long int u64;/**< used for unsigned 64bit */
+
+/* If your machine support 64 bit
+define the MACHINE_64_BIT*/
+#elif defined MACHINE_64_BIT
+/*signed integer types*/
+typedef signed char s8;/**< used for signed 8bit */
+typedef signed short int s16;/**< used for signed 16bit */
+typedef signed int s32;/**< used for signed 32bit */
+typedef signed long int s64;/**< used for signed 64bit */
+
+/*unsigned integer types*/
+typedef unsigned char u8;/**< used for unsigned 8bit */
+typedef unsigned short int u16;/**< used for unsigned 16bit */
+typedef unsigned int u32;/**< used for unsigned 32bit */
+typedef unsigned long int u64;/**< used for unsigned 64bit */
+
+#else
+#warning The data types defined above which not supported \
+define the data types manually
+#endif
+#endif
+#endif
+/***************************************************************/
+/**\name BUS READ AND WRITE FUNCTIONS */
+/***************************************************************/
+#define BNO055_WR_FUNC_PTR s8 (*bus_write)\
+(u8, u8 , u8 *, u8)
+
+#define BNO055_BUS_WRITE_FUNC(dev_addr, reg_addr, reg_data, wr_len)\
+ bus_write(dev_addr, reg_addr, reg_data, wr_len)
+
+#define BNO055_RD_FUNC_PTR s8 \
+(*bus_read)(u8, u8 , u8 *, u8)
+
+#define BNO055_BUS_READ_FUNC(dev_addr, reg_addr, reg_data, r_len)\
+bus_read(dev_addr, reg_addr, reg_data, r_len)
+
+#define BNO055_DELAY_RETURN_TYPE void
+
+#define BNO055_DELAY_PARAM_TYPES u32
+
+#define BNO055_DELAY_FUNC(delay_in_msec)\
+ delay_func(delay_in_msec)
+
+/********************************************************/
+/**\name I2C ADDRESS DEFINITION FOR BNO055 */
+/********************************************************/
+/* bno055 I2C Address */
+#define BNO055_I2C_ADDR1 0x28
+#define BNO055_I2C_ADDR2 0x29
+
+/***************************************************/
+/**\name REGISTER ADDRESS DEFINITION */
+/***************************************************/
+/* Page id register definition*/
+#define BNO055_PAGE_ID_ADDR 0X07
+
+/* PAGE0 REGISTER DEFINITION START*/
+#define BNO055_CHIP_ID_ADDR 0x00
+#define BNO055_ACCEL_REV_ID_ADDR 0x01
+#define BNO055_MAG_REV_ID_ADDR 0x02
+#define BNO055_GYRO_REV_ID_ADDR 0x03
+#define BNO055_SW_REV_ID_LSB_ADDR 0x04
+#define BNO055_SW_REV_ID_MSB_ADDR 0x05
+#define BNO055_BL_REV_ID_ADDR 0X06
+
+/* Accel data register*/
+#define BNO055_ACCEL_DATA_X_LSB_ADDR 0X08
+#define BNO055_ACCEL_DATA_X_MSB_ADDR 0X09
+#define BNO055_ACCEL_DATA_Y_LSB_ADDR 0X0A
+#define BNO055_ACCEL_DATA_Y_MSB_ADDR 0X0B
+#define BNO055_ACCEL_DATA_Z_LSB_ADDR 0X0C
+#define BNO055_ACCEL_DATA_Z_MSB_ADDR 0X0D
+
+/*Mag data register*/
+#define BNO055_MAG_DATA_X_LSB_ADDR 0X0E
+#define BNO055_MAG_DATA_X_MSB_ADDR 0X0F
+#define BNO055_MAG_DATA_Y_LSB_ADDR 0X10
+#define BNO055_MAG_DATA_Y_MSB_ADDR 0X11
+#define BNO055_MAG_DATA_Z_LSB_ADDR 0X12
+#define BNO055_MAG_DATA_Z_MSB_ADDR 0X13
+
+/*Gyro data registers*/
+#define BNO055_GYRO_DATA_X_LSB_ADDR 0X14
+#define BNO055_GYRO_DATA_X_MSB_ADDR 0X15
+#define BNO055_GYRO_DATA_Y_LSB_ADDR 0X16
+#define BNO055_GYRO_DATA_Y_MSB_ADDR 0X17
+#define BNO055_GYRO_DATA_Z_LSB_ADDR 0X18
+#define BNO055_GYRO_DATA_Z_MSB_ADDR 0X19
+
+/*Euler data registers*/
+#define BNO055_EULER_H_LSB_ADDR 0X1A
+#define BNO055_EULER_H_MSB_ADDR 0X1B
+
+#define BNO055_EULER_R_LSB_ADDR 0X1C
+#define BNO055_EULER_R_MSB_ADDR 0X1D
+
+#define BNO055_EULER_P_LSB_ADDR 0X1E
+#define BNO055_EULER_P_MSB_ADDR 0X1F
+
+/*Quaternion data registers*/
+#define BNO055_QUATERNION_DATA_W_LSB_ADDR 0X20
+#define BNO055_QUATERNION_DATA_W_MSB_ADDR 0X21
+#define BNO055_QUATERNION_DATA_X_LSB_ADDR 0X22
+#define BNO055_QUATERNION_DATA_X_MSB_ADDR 0X23
+#define BNO055_QUATERNION_DATA_Y_LSB_ADDR 0X24
+#define BNO055_QUATERNION_DATA_Y_MSB_ADDR 0X25
+#define BNO055_QUATERNION_DATA_Z_LSB_ADDR 0X26
+#define BNO055_QUATERNION_DATA_Z_MSB_ADDR 0X27
+
+/* Linear acceleration data registers*/
+#define BNO055_LINEAR_ACCEL_DATA_X_LSB_ADDR 0X28
+#define BNO055_LINEAR_ACCEL_DATA_X_MSB_ADDR 0X29
+#define BNO055_LINEAR_ACCEL_DATA_Y_LSB_ADDR 0X2A
+#define BNO055_LINEAR_ACCEL_DATA_Y_MSB_ADDR 0X2B
+#define BNO055_LINEAR_ACCEL_DATA_Z_LSB_ADDR 0X2C
+#define BNO055_LINEAR_ACCEL_DATA_Z_MSB_ADDR 0X2D
+
+/*Gravity data registers*/
+#define BNO055_GRAVITY_DATA_X_LSB_ADDR 0X2E
+#define BNO055_GRAVITY_DATA_X_MSB_ADDR 0X2F
+#define BNO055_GRAVITY_DATA_Y_LSB_ADDR 0X30
+#define BNO055_GRAVITY_DATA_Y_MSB_ADDR 0X31
+#define BNO055_GRAVITY_DATA_Z_LSB_ADDR 0X32
+#define BNO055_GRAVITY_DATA_Z_MSB_ADDR 0X33
+
+/* Temperature data register*/
+#define BNO055_TEMP_ADDR 0X34
+
+/* Status registers*/
+#define BNO055_CALIB_STAT_ADDR 0X35
+#define BNO055_SELFTEST_RESULT_ADDR 0X36
+#define BNO055_INTR_STAT_ADDR 0X37
+#define BNO055_SYS_CLK_STAT_ADDR 0X38
+#define BNO055_SYS_STAT_ADDR 0X39
+#define BNO055_SYS_ERR_ADDR 0X3A
+
+/* Unit selection register*/
+#define BNO055_UNIT_SEL_ADDR 0X3B
+#define BNO055_DATA_SELECT_ADDR 0X3C
+
+/* Mode registers*/
+#define BNO055_OPR_MODE_ADDR 0X3D
+#define BNO055_PWR_MODE_ADDR 0X3E
+
+#define BNO055_SYS_TRIGGER_ADDR 0X3F
+#define BNO055_TEMP_SOURCE_ADDR 0X40
+/* Axis remap registers*/
+#define BNO055_AXIS_MAP_CONFIG_ADDR 0X41
+#define BNO055_AXIS_MAP_SIGN_ADDR 0X42
+
+/* SIC registers*/
+#define BNO055_SIC_MATRIX_0_LSB_ADDR 0X43
+#define BNO055_SIC_MATRIX_0_MSB_ADDR 0X44
+#define BNO055_SIC_MATRIX_1_LSB_ADDR 0X45
+#define BNO055_SIC_MATRIX_1_MSB_ADDR 0X46
+#define BNO055_SIC_MATRIX_2_LSB_ADDR 0X47
+#define BNO055_SIC_MATRIX_2_MSB_ADDR 0X48
+#define BNO055_SIC_MATRIX_3_LSB_ADDR 0X49
+#define BNO055_SIC_MATRIX_3_MSB_ADDR 0X4A
+#define BNO055_SIC_MATRIX_4_LSB_ADDR 0X4B
+#define BNO055_SIC_MATRIX_4_MSB_ADDR 0X4C
+#define BNO055_SIC_MATRIX_5_LSB_ADDR 0X4D
+#define BNO055_SIC_MATRIX_5_MSB_ADDR 0X4E
+#define BNO055_SIC_MATRIX_6_LSB_ADDR 0X4F
+#define BNO055_SIC_MATRIX_6_MSB_ADDR 0X50
+#define BNO055_SIC_MATRIX_7_LSB_ADDR 0X51
+#define BNO055_SIC_MATRIX_7_MSB_ADDR 0X52
+#define BNO055_SIC_MATRIX_8_LSB_ADDR 0X53
+#define BNO055_SIC_MATRIX_8_MSB_ADDR 0X54
+
+/* Accelerometer Offset registers*/
+#define ACCEL_OFFSET_X_LSB_ADDR 0X55
+#define ACCEL_OFFSET_X_MSB_ADDR 0X56
+#define ACCEL_OFFSET_Y_LSB_ADDR 0X57
+#define ACCEL_OFFSET_Y_MSB_ADDR 0X58
+#define ACCEL_OFFSET_Z_LSB_ADDR 0X59
+#define ACCEL_OFFSET_Z_MSB_ADDR 0X5A
+
+/* Magnetometer Offset registers*/
+#define MAG_OFFSET_X_LSB_ADDR 0X5B
+#define MAG_OFFSET_X_MSB_ADDR 0X5C
+#define MAG_OFFSET_Y_LSB_ADDR 0X5D
+#define MAG_OFFSET_Y_MSB_ADDR 0X5E
+#define MAG_OFFSET_Z_LSB_ADDR 0X5F
+#define MAG_OFFSET_Z_MSB_ADDR 0X60
+
+/* Gyroscope Offset registers*/
+#define GYRO_OFFSET_X_LSB_ADDR 0X61
+#define GYRO_OFFSET_X_MSB_ADDR 0X62
+#define GYRO_OFFSET_Y_LSB_ADDR 0X63
+#define GYRO_OFFSET_Y_MSB_ADDR 0X64
+#define GYRO_OFFSET_Z_LSB_ADDR 0X65
+#define GYRO_OFFSET_Z_MSB_ADDR 0X66
+
+/* Radius registers*/
+#define ACCEL_RADIUS_LSB_ADDR 0X67
+#define ACCEL_RADIUS_MSB_ADDR 0X68
+#define MAG_RADIUS_LSB_ADDR 0X69
+#define MAG_RADIUS_MSB_ADDR 0X6A
+/* PAGE0 REGISTERS DEFINITION END*/
+
+/* PAGE1 REGISTERS DEFINITION START*/
+/* Configuration registers*/
+#define ACCEL_CONFIG_ADDR 0X08
+#define MAG_CONFIG_ADDR 0X09
+#define GYRO_CONFIG_ADDR 0X0A
+#define GYRO_MODE_CONFIG_ADDR 0X0B
+#define ACCEL_SLEEP_CONFIG_ADDR 0X0C
+#define GYRO_SLEEP_CONFIG_ADDR 0X0D
+#define MAG_SLEEP_CONFIG_ADDR 0x0E
+
+/* Interrupt registers*/
+#define INT_MASK_ADDR 0X0F
+#define INT_ADDR 0X10
+#define ACCEL_ANY_MOTION_THRES_ADDR 0X11
+#define ACCEL_INTR_SETTINGS_ADDR 0X12
+#define ACCEL_HIGH_G_DURN_ADDR 0X13
+#define ACCEL_HIGH_G_THRES_ADDR 0X14
+#define ACCEL_NO_MOTION_THRES_ADDR 0X15
+#define ACCEL_NO_MOTION_SET_ADDR 0X16
+#define GYRO_INTR_SETING_ADDR 0X17
+#define GYRO_HIGHRATE_X_SET_ADDR 0X18
+#define GYRO_DURN_X_ADDR 0X19
+#define GYRO_HIGHRATE_Y_SET_ADDR 0X1A
+#define GYRO_DURN_Y_ADDR 0X1B
+#define GYRO_HIGHRATE_Z_SET_ADDR 0X1C
+#define GYRO_DURN_Z_ADDR 0X1D
+#define GYRO_ANY_MOTION_THRES_ADDR 0X1E
+#define GYRO_ANY_MOTION_SET_ADDR 0X1F
+/* PAGE1 REGISTERS DEFINITION END*/
+
+
+#define BNO055_MDELAY_DATA_TYPE u32
+
+/*< This refers BNO055 return type as s8 */
+#define BNO055_RETURN_FUNCTION_TYPE s8
+
+/* Compile switch definition for Float and double*/
+#define BNO055_FLOAT_ENABLE
+#define BNO055_DOUBLE_ENABLE
+/**************************************************************/
+/**\name STRUCTURE DEFINITIONS */
+/**************************************************************/
+/*!
+* @brief bno055 struct
+*/
+struct bno055_t {
+u8 chip_id;/**< chip_id of bno055 */
+u16 sw_rev_id;/**< software revision id of bno055 */
+u8 page_id;/**< page_id of bno055 */
+u8 accel_rev_id;/**< accel revision id of bno055 */
+u8 mag_rev_id;/**< mag revision id of bno055 */
+u8 gyro_rev_id;/**< gyro revision id of bno055 */
+u8 bl_rev_id;/**< boot loader revision id of bno055 */
+u8 dev_addr;/**< i2c device address of bno055 */
+BNO055_WR_FUNC_PTR;/**< bus write function pointer */
+BNO055_RD_FUNC_PTR;/**<bus read function pointer */
+void (*delay_msec)(BNO055_MDELAY_DATA_TYPE);/**< delay function pointer */
+};
+/*!
+* @brief struct for accel data read from registers
+*/
+struct bno055_accel_t {
+s16 x;/**< accel x data */
+s16 y;/**< accel y data */
+s16 z;/**< accel z data */
+};
+/*!
+* @brief struct for Mag data read from registers
+*/
+struct bno055_mag_t {
+s16 x;/**< mag x data */
+s16 y;/**< mag y data */
+s16 z;/**< mag z data */
+};
+/*!
+* @brief struct for Gyro data read from registers
+*/
+struct bno055_gyro_t {
+s16 x;/**< gyro x data */
+s16 y;/**< gyro y data */
+s16 z;/**< gyro z data */
+};
+/*!
+* @brief struct for Euler data read from registers
+*/
+struct bno055_euler_t {
+s16 h;/**< Euler h data */
+s16 r;/**< Euler r data */
+s16 p;/**< Euler p data */
+};
+/*!
+* @brief struct for Quaternion data read from registers
+*/
+struct bno055_quaternion_t {
+s16 w;/**< Quaternion w data */
+s16 x;/**< Quaternion x data */
+s16 y;/**< Quaternion y data */
+s16 z;/**< Quaternion z data */
+};
+/*!
+* @brief struct for Linear Accel data read from registers
+*/
+struct bno055_linear_accel_t {
+s16 x; /**< Linear Accel x data */
+s16 y; /**< Linear Accel y data */
+s16 z; /**< Linear Accel z data */
+};
+/*!
+* @brief struct for Gravity data read from registers
+*/
+struct bno055_gravity_t {
+s16 x;/**< Gravity x data */
+s16 y;/**< Gravity y data */
+s16 z;/**< Gravity z data */
+};
+#ifdef BNO055_DOUBLE_ENABLE
+/*!
+* @brief struct for Accel-output data of precision double
+*/
+struct bno055_accel_double_t {
+double x;/**< Accel x double data */
+double y;/**< Accel y double data */
+double z;/**< Accel z double data */
+};
+/*!
+* @brief struct for Mag-output data of precision double
+*/
+struct bno055_mag_double_t {
+double x;/**< Mag x double data */
+double y;/**< Mag y double data */
+double z;/**< Mag z double data */
+};
+/*!
+* @brief struct for Gyro-output data of precision double
+*/
+struct bno055_gyro_double_t {
+double x;/**< Gyro x double data */
+double y;/**< Gyro y double data */
+double z;/**< Gyro z double data */
+};
+/*!
+* @brief struct for Euler-output data of precision double
+*/
+struct bno055_euler_double_t {
+double h;/**< Euler h double data */
+double r;/**< Euler r double data */
+double p;/**< Euler p double data */
+};
+/*!
+* @brief struct for Linear Accel-output data of precision double
+*/
+struct bno055_linear_accel_double_t {
+double x;/**< linear accel x double data */
+double y;/**< linear accel y double data */
+double z;/**< linear accel z double data */
+};
+/*!
+* @brief struct for Gravity-output data of precision double
+*/
+struct bno055_gravity_double_t {
+double x;/**< Gravity x double data */
+double y;/**< Gravity y double data */
+double z;/**< Gravity z double data */
+};
+#endif
+#ifdef BNO055_FLOAT_ENABLE
+/*!
+* @brief struct for Accel-output data of precision float
+*/
+struct bno055_accel_float_t {
+float x;/**< accel x float data */
+float y;/**< accel y float data */
+float z;/**< accel z float data */
+};
+/*!
+* @brief struct for Mag-output data of precision float
+*/
+struct bno055_mag_float_t {
+float x;/**< Mag x float data */
+float y;/**< Mag y float data */
+float z;/**< Mag z float data */
+};
+/*!
+* @brief struct for Gyro-output data of precision float
+*/
+struct bno055_gyro_float_t {
+float x;/**< Gyro x float data */
+float y;/**< Gyro y float data */
+float z;/**< Gyro z float data */
+};
+/*!
+* @brief struct for Euler-output data of precision float
+*/
+struct bno055_euler_float_t {
+float h;/**< Euler h float data */
+float r;/**< Euler r float data */
+float p;/**< Euler p float data */
+};
+/*!
+* @brief struct for Linear accel-output data of precision float
+*/
+struct bno055_linear_accel_float_t {
+float x;/**< Linear accel x float data */
+float y;/**< Linear accel y float data */
+float z;/**< Linear accel z float data */
+};
+/*!
+* @brief struct for Gravity-output data of precision float
+*/
+struct bno055_gravity_float_t {
+float x;/**< Gravity x float data */
+float y;/**< Gravity y float data */
+float z;/**< Gravity z float data */
+};
+#endif
+/*!
+* @brief struct for Accel offset
+*/
+struct bno055_accel_offset_t {
+s16 x;/**< Accel offset x data */
+s16 y;/**< Accel offset y data */
+s16 z;/**< Accel offset z data */
+s16 r;/**< Accel radius r data */
+};
+/*!
+* @brief struct for Gyro offset
+*/
+struct bno055_gyro_offset_t {
+s16 x;/**< Gyro offset x data */
+s16 y;/**< Gyro offset y data */
+s16 z;/**< Gyro offset z data */
+};
+/*!
+* @brief struct for Mag offset
+*/
+struct bno055_mag_offset_t {
+s16 x;/**< Mag offset x data */
+s16 y;/**< Mag offset y data */
+s16 z;/**< Mag offset z data */
+s16 r;/**< Mag radius x data */
+};
+/*!
+* @brief struct for soft iron calibration matrix
+*/
+struct bno055_sic_matrix_t {
+s16 sic_0;/**< soft iron calibration matrix 0 data */
+s16 sic_1;/**< soft iron calibration matrix 1 data */
+s16 sic_2;/**< soft iron calibration matrix 2 data */
+s16 sic_3;/**< soft iron calibration matrix 3 data */
+s16 sic_4;/**< soft iron calibration matrix 4 data */
+s16 sic_5;/**< soft iron calibration matrix 5 data */
+s16 sic_6;/**< soft iron calibration matrix 6 data */
+s16 sic_7;/**< soft iron calibration matrix 7 data */
+s16 sic_8;/**< soft iron calibration matrix 8 data */
+};
+/***************************************************/
+/**\name CONSTANT DEFINITIONS */
+/***************************************************/
+#define BNO055_ZERO_U8X ((u8)0)
+#define BNO055_ONE_U8X ((u8)1)
+#define BNO055_TWO_U8X ((u8)2)
+#define BNO055_FOUR_U8X ((u8)4)
+#define BNO055_FIVE_U8X ((u8)5)
+#define BNO055_SIX_U8X ((u8)6)
+#define BNO055_SEVEN_U8X ((u8)7)
+#define BNO055_ELEVEN_U8X ((u8)11)
+#define BNO055_SIXTEEN_U8X ((u8)16)
+#define BNO055_EIGHT_U8X ((u8)8)
+#define BNO055_TWENTY_U8X ((u8)20)
+#define BNO055_EIGHTEEN_U8X ((u8)18)
+
+
+#define BNO055_SHIFT_8_POSITION ((u8)8)
+
+
+/* BNO055 API error codes */
+#define E_NULL_PTR ((s8)-127)
+#define E_BNO055_OUT_OF_RANGE ((s8)-2)
+#define SUCCESS ((u8)0)
+#define ERROR ((s8)-1)
+
+/* Selection for bit enable and disable */
+#define ENABLED 0x01
+#define DISABLED 0x00
+
+/* Page ID */
+#define PAGE_ZERO 0X00
+#define PAGE_ONE 0X01
+
+/* Enable the temperature source */
+#define ACCEL_TEMP_EN 0x00
+#define GYRO_TEMP_EN 0x01
+#define MCU_TEMP_EN 0x03
+
+/*Accel unit*/
+#define ACCEL_UNIT_MSQ 0x00
+#define ACCEL_UNIT_MG 0x01
+
+/*Gyro unit*/
+#define GYRO_UNIT_DPS 0x00
+#define GYRO_UNIT_RPS 0x01
+
+/* Euler unit*/
+#define EULER_UNIT_DEG 0x00
+#define EULER_UNIT_RAD 0x01
+
+/*Temperature unit*/
+#define TEMP_UNIT_CELSIUS 0x00
+#define TEMP_UNIT_FAHRENHEIT 0x01
+
+/*Accel division factor*/
+#define ACCEL_DIV_MSQ 100.0
+#define ACCEL_DIV_MG 1
+
+/*Mag division factor*/
+#define MAG_DIV_UT 16.0
+
+/*Gyro division factor*/
+#define GYRO_DIV_DPS 16.0
+#define GYRO_DIV_RPS 900.0
+
+/*Euler division factor*/
+#define EULER_DIV_DEG 16.0
+#define EULER_DIV_RAD 900.0
+
+/*Linear accel division factor*/
+#define LINEAR_ACCEL_DIV_MSQ 100.0
+
+/*Gravity accel division factor*/
+#define GRAVITY_DIV_MSQ 100.0
+
+/* Temperature division factor*/
+#define TEMP_DIV_FAHRENHEIT 0.5
+#define TEMP_DIV_CELSIUS 1
+
+#define BNO055_SIX_HUNDRES_U8X 600
+
+
+
+/* Operation mode settings*/
+#define OPERATION_MODE_CONFIG 0X00
+#define OPERATION_MODE_ACCONLY 0X01
+#define OPERATION_MODE_MAGONLY 0X02
+#define OPERATION_MODE_GYRONLY 0X03
+#define OPERATION_MODE_ACCMAG 0X04
+#define OPERATION_MODE_ACCGYRO 0X05
+#define OPERATION_MODE_MAGGYRO 0X06
+#define OPERATION_MODE_AMG 0X07
+#define OPERATION_MODE_IMUPLUS 0X08
+#define OPERATION_MODE_COMPASS 0X09
+#define OPERATION_MODE_M4G 0X0A
+#define OPERATION_MODE_NDOF_FMC_OFF 0X0B
+#define OPERATION_MODE_NDOF 0X0C
+
+/* Power mode*/
+#define POWER_MODE_NORMAL 0X00
+#define POWER_MODE_LOWPOWER 0X01
+#define POWER_MODE_SUSPEND 0X02
+
+/* PAGE-1 definitions*/
+/* Accel Range */
+
+#define ACCEL_RANGE_2G 0X00
+#define ACCEL_RANGE_4G 0X01
+#define ACCEL_RANGE_8G 0X02
+#define ACCEL_RANGE_16G 0X03
+
+/* Accel Bandwidth*/
+#define ACCEL_BW_7_81HZ 0x00
+#define ACCEL_BW_15_63HZ 0x01
+#define ACCEL_BW_31_25HZ 0x02
+#define ACCEL_BW_62_5HZ 0X03
+#define ACCEL_BW_125HZ 0X04
+#define ACCEL_BW_250HZ 0X05
+#define ACCEL_BW_500HZ 0X06
+#define ACCEL_BW_1000HZ 0X07
+
+/* Accel Power mode*/
+#define ACCEL_NORMAL 0X00
+#define ACCEL_SUSPEND 0X01
+#define ACCEL_LOWPOWER_1 0X02
+#define ACCEL_STANDBY 0X03
+#define ACCEL_LOWPOWER_2 0X04
+#define ACCEL_DEEPSUSPEND 0X05
+
+/* Mag data output rate*/
+#define MAG_DATA_OUTRATE_2HZ 0X00
+#define MAG_DATA_OUTRATE_6HZ 0X01
+#define MAG_DATA_OUTRATE_8HZ 0X02
+#define MAG_DATA_OUTRATE_10HZ 0X03
+#define MAG_DATA_OUTRATE_15HZ 0X04
+#define MAG_DATA_OUTRATE_20HZ 0X05
+#define MAG_DATA_OUTRATE_25HZ 0X06
+#define MAG_DATA_OUTRATE_30HZ 0X07
+
+/* Mag Operation mode*/
+#define MAG_OPERATION_MODE_LOWPOWER 0X00
+#define MAG_OPERATION_MODE_REGULAR 0X01
+#define MAG_OPERATION_MODE_ENHANCED_REGULAR 0X02
+#define MAG_OPERATION_MODE_HIGH_ACCURACY 0X03
+
+/* Mag power mode*/
+#define MAG_POWER_MODE_NORMAL 0X00
+#define MAG_POWER_MODE_SLEEP 0X01
+#define MAG_POWER_MODE_SUSPEND 0X02
+#define MAG_POWER_MODE_FORCE_MODE 0X03
+
+/* Gyro range*/
+#define GYRO_RANGE_2000DPS 0x00
+#define GYRO_RANGE_1000DPS 0x01
+#define GYRO_RANGE_500DPS 0x02
+#define GYRO_RANGE_250DPS 0x03
+#define GYRO_RANGE_125DPS 0x04
+
+/* Gyro Bandwidth*/
+#define GYRO_BW_523HZ 0x00
+#define GYRO_BW_230HZ 0x01
+#define GYRO_BW_116HZ 0x02
+#define GYRO_BW_47HZ 0x03
+#define GYRO_BW_23HZ 0x04
+#define GYRO_BW_12HZ 0x05
+#define GYRO_BW_64HZ 0x06
+#define GYRO_BW_32HZ 0x07
+
+/* Gyro power mode*/
+#define GYRO_POWER_MODE_NORMAL 0X00
+#define GYRO_POWER_MODE_FASTPOWERUP 0X01
+#define GYRO_POWER_MODE_DEEPSUSPEND 0X02
+#define GYRO_POWER_MODE_SUSPEND 0X03
+#define GYRO_POWER_MODE_ADVANCE_POWERSAVE 0X04
+
+/* Accel Sleep Duration */
+#define BNO055_ACCEL_SLEEP_DURN_0_5MS 0x05
+/* sets sleep duration to 0.5 ms */
+#define BNO055_ACCEL_SLEEP_DURN_1MS 0x06
+/* sets sleep duration to 1 ms */
+#define BNO055_ACCEL_SLEEP_DURN_2MS 0x07
+/* sets sleep duration to 2 ms */
+#define BNO055_ACCEL_SLEEP_DURN_4MS 0x08
+/* sets sleep duration to 4 ms */
+#define BNO055_ACCEL_SLEEP_DURN_6MS 0x09
+/* sets sleep duration to 6 ms*/
+#define BNO055_ACCEL_SLEEP_DURN_10MS 0x0A
+/* sets sleep duration to 10 ms */
+#define BNO055_ACCEL_SLEEP_DURN_25MS 0x0B
+ /* sets sleep duration to 25 ms */
+#define BNO055_ACCEL_SLEEP_DURN_50MS 0x0C
+ /* sets sleep duration to 50 ms */
+#define BNO055_ACCEL_SLEEP_DURN_100MS 0x0D
+ /* sets sleep duration to 100 ms */
+#define BNO055_ACCEL_SLEEP_DURN_500MS 0x0E
+ /* sets sleep duration to 500 ms */
+#define BNO055_ACCEL_SLEEP_DURN_1S 0x0F
+/* sets sleep duration to 1 s */
+
+/* Gyro Auto sleep duration*/
+#define BNO055_GYRO_No_AUTOSLPDUR 0x00
+#define BNO055_GYRO_4MS_AUTOSLPDUR 0x01
+#define BNO055_GYRO_5MS_AUTOSLPDUR 0x02
+#define BNO055_GYRO_8MS_AUTOSLPDUR 0x03
+#define BNO055_GYRO_10MS_AUTOSLPDUR 0x04
+#define BNO055_GYRO_15MS_AUTOSLPDUR 0x05
+#define BNO055_GYRO_20MS_AUTOSLPDUR 0x06
+#define BNO055_GYRO_40MS_AUTOSLPDUR 0x07
+
+/* Accel Any/No motion axis selection*/
+#define BNO055_ACCEL_ANY_MOTION_NO_MOTION_X_AXIS 0
+#define BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS 1
+#define BNO055_ACCEL_ANY_MOTION_NO_MOTION_Z_AXIS 2
+
+/* Accel High g axis selection*/
+#define BNO055_ACCEL_HIGH_G_X_AXIS 0
+#define BNO055_ACCEL_HIGH_G_Y_AXIS 1
+#define BNO055_ACCEL_HIGH_G_Z_AXIS 2
+
+/* Gyro Any motion axis selection*/
+#define BNO055_GYRO_ANY_MOTION_X_AXIS 0
+#define BNO055_GYRO_ANY_MOTION_Y_AXIS 1
+#define BNO055_GYRO_ANY_MOTION_Z_AXIS 2
+
+
+/* Gyro High rate axis selection*/
+#define BNO055_GYRO_HIGHRATE_X_AXIS 0
+#define BNO055_GYRO_HIGHRATE_Y_AXIS 1
+#define BNO055_GYRO_HIGHRATE_Z_AXIS 2
+
+/* Axis remap values*/
+#define REMAP_X_Y 0X21
+#define REMAP_Y_Z 0X18
+#define REMAP_Z_X 0X06
+#define REMAP_X_Y_Z_TYPE0 0X12
+#define REMAP_X_Y_Z_TYPE1 0X09
+#define DEFAULT_AXIS 0X24
+
+/* Axis remap sign */
+#define REMAP_AXIS_POSITIVE 0X00
+#define REMAP_AXIS_NEGATIVE 0X01
+
+/* Gyro anymotion and high rate filter configuration */
+#define FILTERED 0x00
+#define UNFILTERED 0x01
+
+/* mask definitions*/
+#define BNO055_SIC_HEX_0_0_F_F_DATA 0x00FF
+/****************************************************/
+/**\name ARRAY SIZE DEFINITIONS */
+/***************************************************/
+#define ARRAY_SIZE_TWO 2
+#define ARRAY_SIZE_THREE 3
+#define ARRAY_SIZE_SIX 6
+#define ARRAY_SIZE_FIVE 5
+#define ARRAY_SIZE_EIGHT 8
+#define ARRAY_SIZE_TWELVE 12
+#define ARRAY_SIZE_FOURTEEN 14
+#define ARRAY_SIZE_EIGHTEEN 18
+#define ARRAY_SIZE_TWENTY_SIX 26
+
+#define INDEX_ZERO 0
+#define INDEX_ONE 1
+#define INDEX_TWO 2
+#define INDEX_THREE 3
+#define INDEX_FOUR 4
+#define INDEX_FIVE 5
+#define INDEX_SIX 6
+#define INDEX_SEVEN 7
+#define INDEX_EIGHT 8
+#define INDEX_NINE 9
+#define INDEX_TEN 10
+#define INDEX_ELEVEN 11
+#define INDEX_TWELVE 12
+#define INDEX_THIRTEEN 13
+#define INDEX_FOURTEEN 14
+#define INDEX_FIVETEEN 15
+#define INDEX_SIXTEEN 16
+#define INDEX_SEVENTEEN 17
+#define INDEX_EIGHTEEN 18
+#define INDEX_NINETEEN 19
+#define INDEX_TWENTY 20
+#define INDEX_TWENTY_ONE 21
+#define INDEX_TWENTY_TWO 22
+#define INDEX_TWENTY_THREE 23
+#define INDEX_TWENTY_FIVE 25
+/****************************************************/
+/**\name ARRAY PARAMETERS */
+/***************************************************/
+#define LSB_ZERO 0
+#define MSB_ONE 1
+#define LSB_TWO 2
+#define MSB_THREE 3
+#define LSB_FOUR 4
+#define MSB_FIVE 5
+#define LSB_SIX 6
+#define MSB_SEVEN 7
+/*********************************************************/
+/**\name PAGE0 DATA REGISTERS DEFINITION */
+/*********************************************************/
+/* Chip ID */
+#define BNO055_CHIP_ID__POS 0
+#define BNO055_CHIP_ID__MSK 0xFF
+#define BNO055_CHIP_ID__LEN 8
+#define BNO055_CHIP_ID__REG BNO055_CHIP_ID_ADDR
+
+/* Accel revision id*/
+#define BNO055_ACCEL_REV_ID__POS 0
+#define BNO055_ACCEL_REV_ID__MSK 0xFF
+#define BNO055_ACCEL_REV_ID__LEN 8
+#define BNO055_ACCEL_REV_ID__REG BNO055_ACCEL_REV_ID_ADDR
+
+/* Mag revision id*/
+#define BNO055_MAG_REV_ID__POS 0
+#define BNO055_MAG_REV_ID__MSK 0xFF
+#define BNO055_MAG_REV_ID__LEN 8
+#define BNO055_MAG_REV_ID__REG BNO055_MAG_REV_ID_ADDR
+
+/* Gyro revision id*/
+#define BNO055_GYRO_REV_ID__POS 0
+#define BNO055_GYRO_REV_ID__MSK 0xFF
+#define BNO055_GYRO_REV_ID__LEN 8
+#define BNO055_GYRO_REV_ID__REG BNO055_GYRO_REV_ID_ADDR
+
+/*Software revision id LSB*/
+#define BNO055_SW_REV_ID_LSB__POS 0
+#define BNO055_SW_REV_ID_LSB__MSK 0xFF
+#define BNO055_SW_REV_ID_LSB__LEN 8
+#define BNO055_SW_REV_ID_LSB__REG BNO055_SW_REV_ID_LSB_ADDR
+
+/*Software revision id MSB*/
+#define BNO055_SW_REV_ID_MSB__POS 0
+#define BNO055_SW_REV_ID_MSB__MSK 0xFF
+#define BNO055_SW_REV_ID_MSB__LEN 8
+#define BNO055_SW_REV_ID_MSB__REG BNO055_SW_REV_ID_MSB_ADDR
+
+/* BOOTLODER revision id*/
+#define BNO055_BL_REV_ID__POS 0
+#define BNO055_BL_REV_ID__MSK 0xFF
+#define BNO055_BL_REV_ID__LEN 8
+#define BNO055_BL_REV_ID__REG BNO055_BL_REV_ID_ADDR
+
+/*Page id*/
+#define BNO055_PAGE_ID__POS 0
+#define BNO055_PAGE_ID__MSK 0xFF
+#define BNO055_PAGE_ID__LEN 8
+#define BNO055_PAGE_ID__REG BNO055_PAGE_ID_ADDR
+
+/* Accel data X-LSB register*/
+#define BNO055_ACCEL_DATA_X_LSB_VALUEX__POS 0
+#define BNO055_ACCEL_DATA_X_LSB_VALUEX__MSK 0xFF
+#define BNO055_ACCEL_DATA_X_LSB_VALUEX__LEN 8
+#define BNO055_ACCEL_DATA_X_LSB_VALUEX__REG \
+BNO055_ACCEL_DATA_X_LSB_ADDR
+
+/* Accel data X-MSB register*/
+#define BNO055_ACCEL_DATA_X_MSB_VALUEX__POS 0
+#define BNO055_ACCEL_DATA_X_MSB_VALUEX__MSK 0xFF
+#define BNO055_ACCEL_DATA_X_MSB_VALUEX__LEN 8
+#define BNO055_ACCEL_DATA_X_MSB_VALUEX__REG \
+BNO055_ACCEL_DATA_X_MSB_ADDR
+
+/* Accel data Y-LSB register*/
+#define BNO055_ACCEL_DATA_Y_LSB_VALUEY__POS 0
+#define BNO055_ACCEL_DATA_Y_LSB_VALUEY__MSK 0xFF
+#define BNO055_ACCEL_DATA_Y_LSB_VALUEY__LEN 8
+#define BNO055_ACCEL_DATA_Y_LSB_VALUEY__REG \
+BNO055_ACCEL_DATA_Y_LSB_ADDR
+
+/* Accel data Y-MSB register*/
+#define BNO055_ACCEL_DATA_Y_MSB_VALUEY__POS 0
+#define BNO055_ACCEL_DATA_Y_MSB_VALUEY__MSK 0xFF
+#define BNO055_ACCEL_DATA_Y_MSB_VALUEY__LEN 8
+#define BNO055_ACCEL_DATA_Y_MSB_VALUEY__REG \
+BNO055_ACCEL_DATA_Y_MSB_ADDR
+
+/* Accel data Z-LSB register*/
+#define BNO055_ACCEL_DATA_Z_LSB_VALUEZ__POS 0
+#define BNO055_ACCEL_DATA_Z_LSB_VALUEZ__MSK 0xFF
+#define BNO055_ACCEL_DATA_Z_LSB_VALUEZ__LEN 8
+#define BNO055_ACCEL_DATA_Z_LSB_VALUEZ__REG \
+BNO055_ACCEL_DATA_Z_LSB_ADDR
+
+/* Accel data Z-MSB register*/
+#define BNO055_ACCEL_DATA_Z_MSB_VALUEZ__POS 0
+#define BNO055_ACCEL_DATA_Z_MSB_VALUEZ__MSK 0xFF
+#define BNO055_ACCEL_DATA_Z_MSB_VALUEZ__LEN 8
+#define BNO055_ACCEL_DATA_Z_MSB_VALUEZ__REG \
+BNO055_ACCEL_DATA_Z_MSB_ADDR
+
+/* Mag data X-LSB register*/
+#define BNO055_MAG_DATA_X_LSB_VALUEX__POS 0
+#define BNO055_MAG_DATA_X_LSB_VALUEX__MSK 0xFF
+#define BNO055_MAG_DATA_X_LSB_VALUEX__LEN 8
+#define BNO055_MAG_DATA_X_LSB_VALUEX__REG \
+BNO055_MAG_DATA_X_LSB_ADDR
+
+/* Mag data X-MSB register*/
+#define BNO055_MAG_DATA_X_MSB_VALUEX__POS 0
+#define BNO055_MAG_DATA_X_MSB_VALUEX__MSK 0xFF
+#define BNO055_MAG_DATA_X_MSB_VALUEX__LEN 8
+#define BNO055_MAG_DATA_X_MSB_VALUEX__REG BNO055_MAG_DATA_X_MSB_ADDR
+
+/* Mag data Y-LSB register*/
+#define BNO055_MAG_DATA_Y_LSB_VALUEY__POS 0
+#define BNO055_MAG_DATA_Y_LSB_VALUEY__MSK 0xFF
+#define BNO055_MAG_DATA_Y_LSB_VALUEY__LEN 8
+#define BNO055_MAG_DATA_Y_LSB_VALUEY__REG BNO055_MAG_DATA_Y_LSB_ADDR
+
+/* Mag data Y-MSB register*/
+#define BNO055_MAG_DATA_Y_MSB_VALUEY__POS 0
+#define BNO055_MAG_DATA_Y_MSB_VALUEY__MSK 0xFF
+#define BNO055_MAG_DATA_Y_MSB_VALUEY__LEN 8
+#define BNO055_MAG_DATA_Y_MSB_VALUEY__REG BNO055_MAG_DATA_Y_MSB_ADDR
+
+/* Mag data Z-LSB register*/
+#define BNO055_MAG_DATA_Z_LSB_VALUEZ__POS 0
+#define BNO055_MAG_DATA_Z_LSB_VALUEZ__MSK 0xFF
+#define BNO055_MAG_DATA_Z_LSB_VALUEZ__LEN 8
+#define BNO055_MAG_DATA_Z_LSB_VALUEZ__REG BNO055_MAG_DATA_Z_LSB_ADDR
+
+/* Mag data Z-MSB register*/
+#define BNO055_MAG_DATA_Z_MSB_VALUEZ__POS 0
+#define BNO055_MAG_DATA_Z_MSB_VALUEZ__MSK 0xFF
+#define BNO055_MAG_DATA_Z_MSB_VALUEZ__LEN 8
+#define BNO055_MAG_DATA_Z_MSB_VALUEZ__REG BNO055_MAG_DATA_Z_MSB_ADDR
+
+/* Gyro data X-LSB register*/
+#define BNO055_GYRO_DATA_X_LSB_VALUEX__POS 0
+#define BNO055_GYRO_DATA_X_LSB_VALUEX__MSK 0xFF
+#define BNO055_GYRO_DATA_X_LSB_VALUEX__LEN 8
+#define BNO055_GYRO_DATA_X_LSB_VALUEX__REG BNO055_GYRO_DATA_X_LSB_ADDR
+
+/* Gyro data X-MSB register*/
+#define BNO055_GYRO_DATA_X_MSB_VALUEX__POS 0
+#define BNO055_GYRO_DATA_X_MSB_VALUEX__MSK 0xFF
+#define BNO055_GYRO_DATA_X_MSB_VALUEX__LEN 8
+#define BNO055_GYRO_DATA_X_MSB_VALUEX__REG BNO055_GYRO_DATA_X_MSB_ADDR
+
+/* Gyro data Y-LSB register*/
+#define BNO055_GYRO_DATA_Y_LSB_VALUEY__POS 0
+#define BNO055_GYRO_DATA_Y_LSB_VALUEY__MSK 0xFF
+#define BNO055_GYRO_DATA_Y_LSB_VALUEY__LEN 8
+#define BNO055_GYRO_DATA_Y_LSB_VALUEY__REG BNO055_GYRO_DATA_Y_LSB_ADDR
+
+/* Gyro data Y-MSB register*/
+#define BNO055_GYRO_DATA_Y_MSB_VALUEY__POS 0
+#define BNO055_GYRO_DATA_Y_MSB_VALUEY__MSK 0xFF
+#define BNO055_GYRO_DATA_Y_MSB_VALUEY__LEN 8
+#define BNO055_GYRO_DATA_Y_MSB_VALUEY__REG BNO055_GYRO_DATA_Y_MSB_ADDR
+
+/* Gyro data Z-LSB register*/
+#define BNO055_GYRO_DATA_Z_LSB_VALUEZ__POS 0
+#define BNO055_GYRO_DATA_Z_LSB_VALUEZ__MSK 0xFF
+#define BNO055_GYRO_DATA_Z_LSB_VALUEZ__LEN 8
+#define BNO055_GYRO_DATA_Z_LSB_VALUEZ__REG BNO055_GYRO_DATA_Z_LSB_ADDR
+
+/* Gyro data Z-MSB register*/
+#define BNO055_GYRO_DATA_Z_MSB_VALUEZ__POS 0
+#define BNO055_GYRO_DATA_Z_MSB_VALUEZ__MSK 0xFF
+#define BNO055_GYRO_DATA_Z_MSB_VALUEZ__LEN 8
+#define BNO055_GYRO_DATA_Z_MSB_VALUEZ__REG BNO055_GYRO_DATA_Z_MSB_ADDR
+
+/* Euler data HEADING-LSB register*/
+#define BNO055_EULER_H_LSB_VALUEH__POS 0
+#define BNO055_EULER_H_LSB_VALUEH__MSK 0xFF
+#define BNO055_EULER_H_LSB_VALUEH__LEN 8
+#define BNO055_EULER_H_LSB_VALUEH__REG BNO055_EULER_H_LSB_ADDR
+
+/* Euler data HEADING-MSB register*/
+#define BNO055_EULER_H_MSB_VALUEH__POS 0
+#define BNO055_EULER_H_MSB_VALUEH__MSK 0xFF
+#define BNO055_EULER_H_MSB_VALUEH__LEN 8
+#define BNO055_EULER_H_MSB_VALUEH__REG BNO055_EULER_H_MSB_ADDR
+
+/* Euler data ROLL-LSB register*/
+#define BNO055_EULER_R_LSB_VALUER__POS 0
+#define BNO055_EULER_R_LSB_VALUER__MSK 0xFF
+#define BNO055_EULER_R_LSB_VALUER__LEN 8
+#define BNO055_EULER_R_LSB_VALUER__REG BNO055_EULER_R_LSB_ADDR
+
+/* Euler data ROLL-MSB register*/
+#define BNO055_EULER_R_MSB_VALUER__POS 0
+#define BNO055_EULER_R_MSB_VALUER__MSK 0xFF
+#define BNO055_EULER_R_MSB_VALUER__LEN 8
+#define BNO055_EULER_R_MSB_VALUER__REG BNO055_EULER_R_MSB_ADDR
+
+/* Euler data PITCH-LSB register*/
+#define BNO055_EULER_P_LSB_VALUEP__POS 0
+#define BNO055_EULER_P_LSB_VALUEP__MSK 0xFF
+#define BNO055_EULER_P_LSB_VALUEP__LEN 8
+#define BNO055_EULER_P_LSB_VALUEP__REG BNO055_EULER_P_LSB_ADDR
+
+/* Euler data HEADING-MSB register*/
+#define BNO055_EULER_P_MSB_VALUEP__POS 0
+#define BNO055_EULER_P_MSB_VALUEP__MSK 0xFF
+#define BNO055_EULER_P_MSB_VALUEP__LEN 8
+#define BNO055_EULER_P_MSB_VALUEP__REG BNO055_EULER_P_MSB_ADDR
+
+/* Quaternion data W-LSB register*/
+#define BNO055_QUATERNION_DATA_W_LSB_VALUEW__POS 0
+#define BNO055_QUATERNION_DATA_W_LSB_VALUEW__MSK 0xFF
+#define BNO055_QUATERNION_DATA_W_LSB_VALUEW__LEN 8
+#define BNO055_QUATERNION_DATA_W_LSB_VALUEW__REG \
+BNO055_QUATERNION_DATA_W_LSB_ADDR
+
+/* Quaternion data W-MSB register*/
+#define BNO055_QUATERNION_DATA_W_MSB_VALUEW__POS 0
+#define BNO055_QUATERNION_DATA_W_MSB_VALUEW__MSK 0xFF
+#define BNO055_QUATERNION_DATA_W_MSB_VALUEW__LEN 8
+#define BNO055_QUATERNION_DATA_W_MSB_VALUEW__REG \
+BNO055_QUATERNION_DATA_W_MSB_ADDR
+
+/* Quaternion data X-LSB register*/
+#define BNO055_QUATERNION_DATA_X_LSB_VALUEX__POS 0
+#define BNO055_QUATERNION_DATA_X_LSB_VALUEX__MSK 0xFF
+#define BNO055_QUATERNION_DATA_X_LSB_VALUEX__LEN 8
+#define BNO055_QUATERNION_DATA_X_LSB_VALUEX__REG \
+BNO055_QUATERNION_DATA_X_LSB_ADDR
+
+/* Quaternion data X-MSB register*/
+#define BNO055_QUATERNION_DATA_X_MSB_VALUEX__POS 0
+#define BNO055_QUATERNION_DATA_X_MSB_VALUEX__MSK 0xFF
+#define BNO055_QUATERNION_DATA_X_MSB_VALUEX__LEN 8
+#define BNO055_QUATERNION_DATA_X_MSB_VALUEX__REG \
+BNO055_QUATERNION_DATA_X_MSB_ADDR
+
+/* Quaternion data Y-LSB register*/
+#define BNO055_QUATERNION_DATA_Y_LSB_VALUEY__POS 0
+#define BNO055_QUATERNION_DATA_Y_LSB_VALUEY__MSK 0xFF
+#define BNO055_QUATERNION_DATA_Y_LSB_VALUEY__LEN 8
+#define BNO055_QUATERNION_DATA_Y_LSB_VALUEY__REG \
+BNO055_QUATERNION_DATA_Y_LSB_ADDR
+
+/* Quaternion data Y-MSB register*/
+#define BNO055_QUATERNION_DATA_Y_MSB_VALUEY__POS 0
+#define BNO055_QUATERNION_DATA_Y_MSB_VALUEY__MSK 0xFF
+#define BNO055_QUATERNION_DATA_Y_MSB_VALUEY__LEN 8
+#define BNO055_QUATERNION_DATA_Y_MSB_VALUEY__REG \
+NO055_QUATERNION_DATA_Y_MSB_ADDR
+
+/* Quaternion data Z-LSB register*/
+#define BNO055_QUATERNION_DATA_Z_LSB_VALUEZ__POS 0
+#define BNO055_QUATERNION_DATA_Z_LSB_VALUEZ__MSK 0xFF
+#define BNO055_QUATERNION_DATA_Z_LSB_VALUEZ__LEN 8
+#define BNO055_QUATERNION_DATA_Z_LSB_VALUEZ__REG \
+BNO055_QUATERNION_DATA_Z_LSB_ADDR
+
+/* Quaternion data Z-MSB register*/
+#define BNO055_QUATERNION_DATA_Z_MSB_VALUEZ__POS 0
+#define BNO055_QUATERNION_DATA_Z_MSB_VALUEZ__MSK 0xFF
+#define BNO055_QUATERNION_DATA_Z_MSB_VALUEZ__LEN 8
+#define BNO055_QUATERNION_DATA_Z_MSB_VALUEZ__REG \
+BNO055_QUATERNION_DATA_Z_MSB_ADDR
+
+/* Linear acceleration data X-LSB register*/
+#define BNO055_LINEAR_ACCEL_DATA_X_LSB_VALUEX__POS 0
+#define BNO055_LINEAR_ACCEL_DATA_X_LSB_VALUEX__MSK 0xFF
+#define BNO055_LINEAR_ACCEL_DATA_X_LSB_VALUEX__LEN 8
+#define BNO055_LINEAR_ACCEL_DATA_X_LSB_VALUEX__REG \
+BNO055_LINEAR_ACCEL_DATA_X_LSB_ADDR
+
+/* Linear acceleration data X-MSB register*/
+#define BNO055_LINEAR_ACCEL_DATA_X_MSB_VALUEX__POS 0
+#define BNO055_LINEAR_ACCEL_DATA_X_MSB_VALUEX__MSK 0xFF
+#define BNO055_LINEAR_ACCEL_DATA_X_MSB_VALUEX__LEN 8
+#define BNO055_LINEAR_ACCEL_DATA_X_MSB_VALUEX__REG \
+BNO055_LINEAR_ACCEL_DATA_X_MSB_ADDR
+
+/* Linear acceleration data Y-LSB register*/
+#define BNO055_LINEAR_ACCEL_DATA_Y_LSB_VALUEY__POS 0
+#define BNO055_LINEAR_ACCEL_DATA_Y_LSB_VALUEY__MSK 0xFF
+#define BNO055_LINEAR_ACCEL_DATA_Y_LSB_VALUEY__LEN 8
+#define BNO055_LINEAR_ACCEL_DATA_Y_LSB_VALUEY__REG \
+BNO055_LINEAR_ACCEL_DATA_Y_LSB_ADDR
+
+/* Linear acceleration data Y-MSB register*/
+#define BNO055_LINEAR_ACCEL_DATA_Y_MSB_VALUEY__POS 0
+#define BNO055_LINEAR_ACCEL_DATA_Y_MSB_VALUEY__MSK 0xFF
+#define BNO055_LINEAR_ACCEL_DATA_Y_MSB_VALUEY__LEN 8
+#define BNO055_LINEAR_ACCEL_DATA_Y_MSB_VALUEY__REG \
+BNO055_LINEAR_ACCEL_DATA_Y_MSB_ADDR
+
+/* Linear acceleration data Z-LSB register*/
+#define BNO055_LINEAR_ACCEL_DATA_Z_LSB_VALUEZ__POS 0
+#define BNO055_LINEAR_ACCEL_DATA_Z_LSB_VALUEZ__MSK 0xFF
+#define BNO055_LINEAR_ACCEL_DATA_Z_LSB_VALUEZ__LEN 8
+#define BNO055_LINEAR_ACCEL_DATA_Z_LSB_VALUEZ__REG \
+BNO055_LINEAR_ACCEL_DATA_Z_LSB_ADDR
+
+/* Linear acceleration data Z-MSB register*/
+#define BNO055_LINEAR_ACCEL_DATA_Z_MSB_VALUEZ__POS 0
+#define BNO055_LINEAR_ACCEL_DATA_Z_MSB_VALUEZ__MSK 0xFF
+#define BNO055_LINEAR_ACCEL_DATA_Z_MSB_VALUEZ__LEN 8
+#define BNO055_LINEAR_ACCEL_DATA_Z_MSB_VALUEZ__REG \
+BNO055_LINEAR_ACCEL_DATA_Z_MSB_ADDR
+
+/* Gravity data X-LSB register*/
+#define BNO055_GRAVITY_DATA_X_LSB_VALUEX__POS 0
+#define BNO055_GRAVITY_DATA_X_LSB_VALUEX__MSK 0xFF
+#define BNO055_GRAVITY_DATA_X_LSB_VALUEX__LEN 8
+#define BNO055_GRAVITY_DATA_X_LSB_VALUEX__REG \
+BNO055_GRAVITY_DATA_X_LSB_ADDR
+
+/* Gravity data X-MSB register*/
+#define BNO055_GRAVITY_DATA_X_MSB_VALUEX__POS 0
+#define BNO055_GRAVITY_DATA_X_MSB_VALUEX__MSK 0xFF
+#define BNO055_GRAVITY_DATA_X_MSB_VALUEX__LEN 8
+#define BNO055_GRAVITY_DATA_X_MSB_VALUEX__REG \
+BNO055_GRAVITY_DATA_X_MSB_ADDR
+
+/* Gravity data Y-LSB register*/
+#define BNO055_GRAVITY_DATA_Y_LSB_VALUEY__POS 0
+#define BNO055_GRAVITY_DATA_Y_LSB_VALUEY__MSK 0xFF
+#define BNO055_GRAVITY_DATA_Y_LSB_VALUEY__LEN 8
+#define BNO055_GRAVITY_DATA_Y_LSB_VALUEY__REG \
+BNO055_GRAVITY_DATA_Y_LSB_ADDR
+
+/* Gravity data Y-MSB register*/
+#define BNO055_GRAVITY_DATA_Y_MSB_VALUEY__POS 0
+#define BNO055_GRAVITY_DATA_Y_MSB_VALUEY__MSK 0xFF
+#define BNO055_GRAVITY_DATA_Y_MSB_VALUEY__LEN 8
+#define BNO055_GRAVITY_DATA_Y_MSB_VALUEY__REG \
+BNO055_GRAVITY_DATA_Y_MSB_ADDR
+
+/* Gravity data Z-LSB register*/
+#define BNO055_GRAVITY_DATA_Z_LSB_VALUEZ__POS 0
+#define BNO055_GRAVITY_DATA_Z_LSB_VALUEZ__MSK 0xFF
+#define BNO055_GRAVITY_DATA_Z_LSB_VALUEZ__LEN 8
+#define BNO055_GRAVITY_DATA_Z_LSB_VALUEZ__REG \
+BNO055_GRAVITY_DATA_Z_LSB_ADDR
+
+/* Gravity data Z-MSB register*/
+#define BNO055_GRAVITY_DATA_Z_MSB_VALUEZ__POS 0
+#define BNO055_GRAVITY_DATA_Z_MSB_VALUEZ__MSK 0xFF
+#define BNO055_GRAVITY_DATA_Z_MSB_VALUEZ__LEN 8
+#define BNO055_GRAVITY_DATA_Z_MSB_VALUEZ__REG \
+BNO055_GRAVITY_DATA_Z_MSB_ADDR
+
+/* Temperature register*/
+#define BNO055_TEMP__POS 0
+#define BNO055_TEMP__MSK 0xFF
+#define BNO055_TEMP__LEN 8
+#define BNO055_TEMP__REG BNO055_TEMP_ADDR
+
+/*Mag_Calib status register*/
+#define BNO055_MAG_CALIB_STAT__POS 0
+#define BNO055_MAG_CALIB_STAT__MSK 0X03
+#define BNO055_MAG_CALIB_STAT__LEN 2
+#define BNO055_MAG_CALIB_STAT__REG BNO055_CALIB_STAT_ADDR
+
+/*Acc_Calib status register*/
+#define BNO055_ACCEL_CALIB_STAT__POS 2
+#define BNO055_ACCEL_CALIB_STAT__MSK 0X0C
+#define BNO055_ACCEL_CALIB_STAT__LEN 2
+#define BNO055_ACCEL_CALIB_STAT__REG BNO055_CALIB_STAT_ADDR
+
+/*Gyro_Calib status register*/
+#define BNO055_GYRO_CALIB_STAT__POS 4
+#define BNO055_GYRO_CALIB_STAT__MSK 0X30
+#define BNO055_GYRO_CALIB_STAT__LEN 2
+#define BNO055_GYRO_CALIB_STAT__REG BNO055_CALIB_STAT_ADDR
+
+/*Sys_Calib status register*/
+#define BNO055_SYS_CALIB_STAT__POS 6
+#define BNO055_SYS_CALIB_STAT__MSK 0XC0
+#define BNO055_SYS_CALIB_STAT__LEN 2
+#define BNO055_SYS_CALIB_STAT__REG BNO055_CALIB_STAT_ADDR
+
+/*ST_ACCEL register*/
+#define BNO055_SELFTEST_ACCEL__POS 0
+#define BNO055_SELFTEST_ACCEL__MSK 0X01
+#define BNO055_SELFTEST_ACCEL__LEN 1
+#define BNO055_SELFTEST_ACCEL__REG BNO055_SELFTEST_RESULT_ADDR
+
+/*ST_MAG register*/
+#define BNO055_SELFTEST_MAG__POS 1
+#define BNO055_SELFTEST_MAG__MSK 0X02
+#define BNO055_SELFTEST_MAG__LEN 1
+#define BNO055_SELFTEST_MAG__REG BNO055_SELFTEST_RESULT_ADDR
+
+/*ST_GYRO register*/
+#define BNO055_SELFTEST_GYRO__POS 2
+#define BNO055_SELFTEST_GYRO__MSK 0X04
+#define BNO055_SELFTEST_GYRO__LEN 1
+#define BNO055_SELFTEST_GYRO__REG BNO055_SELFTEST_RESULT_ADDR
+
+/*ST_MCU register*/
+#define BNO055_SELFTEST_MCU__POS 3
+#define BNO055_SELFTEST_MCU__MSK 0X08
+#define BNO055_SELFTEST_MCU__LEN 1
+#define BNO055_SELFTEST_MCU__REG BNO055_SELFTEST_RESULT_ADDR
+
+/*Interrupt status registers*/
+#define BNO055_INTR_STAT_GYRO_ANY_MOTION__POS 2
+#define BNO055_INTR_STAT_GYRO_ANY_MOTION__MSK 0X04
+#define BNO055_INTR_STAT_GYRO_ANY_MOTION__LEN 1
+#define BNO055_INTR_STAT_GYRO_ANY_MOTION__REG BNO055_INTR_STAT_ADDR
+
+#define BNO055_INTR_STAT_GYRO_HIGHRATE__POS 3
+#define BNO055_INTR_STAT_GYRO_HIGHRATE__MSK 0X08
+#define BNO055_INTR_STAT_GYRO_HIGHRATE__LEN 1
+#define BNO055_INTR_STAT_GYRO_HIGHRATE__REG BNO055_INTR_STAT_ADDR
+
+#define BNO055_INTR_STAT_ACCEL_HIGH_G__POS 5
+#define BNO055_INTR_STAT_ACCEL_HIGH_G__MSK 0X20
+#define BNO055_INTR_STAT_ACCEL_HIGH_G__LEN 1
+#define BNO055_INTR_STAT_ACCEL_HIGH_G__REG BNO055_INTR_STAT_ADDR
+
+#define BNO055_INTR_STAT_ACCEL_ANY_MOTION__POS 6
+#define BNO055_INTR_STAT_ACCEL_ANY_MOTION__MSK 0X40
+#define BNO055_INTR_STAT_ACCEL_ANY_MOTION__LEN 1
+#define BNO055_INTR_STAT_ACCEL_ANY_MOTION__REG BNO055_INTR_STAT_ADDR
+
+#define BNO055_INTR_STAT_ACCEL_NO_MOTION__POS 7
+#define BNO055_INTR_STAT_ACCEL_NO_MOTION__MSK 0X80
+#define BNO055_INTR_STAT_ACCEL_NO_MOTION__LEN 1
+#define BNO055_INTR_STAT_ACCEL_NO_MOTION__REG BNO055_INTR_STAT_ADDR
+
+/* system clock status register*/
+#define BNO055_SYS_MAIN_CLK__POS 0
+#define BNO055_SYS_MAIN_CLK__MSK 0X10
+#define BNO055_SYS_MAIN_CLK__LEN 1
+#define BNO055_SYS_MAIN_CLK__REG BNO055_SYS_CLK_STAT_ADDR
+
+/* System registers*/
+#define BNO055_SYS_STAT_CODE__POS 0
+#define BNO055_SYS_STAT_CODE__MSK 0XFF
+#define BNO055_SYS_STAT_CODE__LEN 8
+#define BNO055_SYS_STAT_CODE__REG BNO055_SYS_STAT_ADDR
+
+#define BNO055_SYS_ERROR_CODE__POS 0
+#define BNO055_SYS_ERROR_CODE__MSK 0XFF
+#define BNO055_SYS_ERROR_CODE__LEN 8
+#define BNO055_SYS_ERROR_CODE__REG BNO055_SYS_ERR_ADDR
+
+/* Accel_Unit register*/
+#define BNO055_ACCEL_UNIT__POS 0
+#define BNO055_ACCEL_UNIT__MSK 0X01
+#define BNO055_ACCEL_UNIT__LEN 1
+#define BNO055_ACCEL_UNIT__REG BNO055_UNIT_SEL_ADDR
+
+/* Gyro_Unit register*/
+#define BNO055_GYRO_UNIT__POS 1
+#define BNO055_GYRO_UNIT__MSK 0X02
+#define BNO055_GYRO_UNIT__LEN 1
+#define BNO055_GYRO_UNIT__REG BNO055_UNIT_SEL_ADDR
+
+/* Euler_Unit register*/
+#define BNO055_EULER_UNIT__POS 2
+#define BNO055_EULER_UNIT__MSK 0X04
+#define BNO055_EULER_UNIT__LEN 1
+#define BNO055_EULER_UNIT__REG BNO055_UNIT_SEL_ADDR
+
+/* Tilt_Unit register*/
+#define BNO055_TILT_UNIT__POS 3
+#define BNO055_TILT_UNIT__MSK 0X08
+#define BNO055_TILT_UNIT__LEN 1
+#define BNO055_TILT_UNIT__REG BNO055_UNIT_SEL_ADDR
+
+/* Temperature_Unit register*/
+#define BNO055_TEMP_UNIT__POS 4
+#define BNO055_TEMP_UNIT__MSK 0X10
+#define BNO055_TEMP_UNIT__LEN 1
+#define BNO055_TEMP_UNIT__REG BNO055_UNIT_SEL_ADDR
+
+/* ORI android-windows register*/
+#define BNO055_DATA_OUTPUT_FORMAT__POS 7
+#define BNO055_DATA_OUTPUT_FORMAT__MSK 0X80
+#define BNO055_DATA_OUTPUT_FORMAT__LEN 1
+#define BNO055_DATA_OUTPUT_FORMAT__REG BNO055_UNIT_SEL_ADDR
+/*Operation Mode data register*/
+#define BNO055_OPERATION_MODE__POS 0
+#define BNO055_OPERATION_MODE__MSK 0X0F
+#define BNO055_OPERATION_MODE__LEN 4
+#define BNO055_OPERATION_MODE__REG BNO055_OPR_MODE_ADDR
+/* Power Mode register*/
+#define BNO055_POWER_MODE__POS 0
+#define BNO055_POWER_MODE__MSK 0X03
+#define BNO055_POWER_MODE__LEN 2
+#define BNO055_POWER_MODE__REG BNO055_PWR_MODE_ADDR
+
+/*Self Test register*/
+#define BNO055_SELFTEST__POS 0
+#define BNO055_SELFTEST__MSK 0X01
+#define BNO055_SELFTEST__LEN 1
+#define BNO055_SELFTEST__REG BNO055_SYS_TRIGGER_ADDR
+
+/* RST_SYS register*/
+#define BNO055_SYS_RST__POS 5
+#define BNO055_SYS_RST__MSK 0X20
+#define BNO055_SYS_RST__LEN 1
+#define BNO055_SYS_RST__REG BNO055_SYS_TRIGGER_ADDR
+
+/* RST_INT register*/
+#define BNO055_INTR_RST__POS 6
+#define BNO055_INTR_RST__MSK 0X40
+#define BNO055_INTR_RST__LEN 1
+#define BNO055_INTR_RST__REG BNO055_SYS_TRIGGER_ADDR
+
+/* CLK_SRC register*/
+#define BNO055_CLK_SRC__POS 7
+#define BNO055_CLK_SRC__MSK 0X80
+#define BNO055_CLK_SRC__LEN 1
+#define BNO055_CLK_SRC__REG BNO055_SYS_TRIGGER_ADDR
+
+/* Temp source register*/
+#define BNO055_TEMP_SOURCE__POS 0
+#define BNO055_TEMP_SOURCE__MSK 0X03
+#define BNO055_TEMP_SOURCE__LEN 2
+#define BNO055_TEMP_SOURCE__REG BNO055_TEMP_SOURCE_ADDR
+
+/* Axis remap value register*/
+#define BNO055_REMAP_AXIS_VALUE__POS 0
+#define BNO055_REMAP_AXIS_VALUE__MSK 0X3F
+#define BNO055_REMAP_AXIS_VALUE__LEN 6
+#define BNO055_REMAP_AXIS_VALUE__REG BNO055_AXIS_MAP_CONFIG_ADDR
+
+/* Axis sign value register*/
+#define BNO055_REMAP_Z_SIGN__POS 0
+#define BNO055_REMAP_Z_SIGN__MSK 0X01
+#define BNO055_REMAP_Z_SIGN__LEN 1
+#define BNO055_REMAP_Z_SIGN__REG BNO055_AXIS_MAP_SIGN_ADDR
+
+#define BNO055_REMAP_Y_SIGN__POS 1
+#define BNO055_REMAP_Y_SIGN__MSK 0X02
+#define BNO055_REMAP_Y_SIGN__LEN 1
+#define BNO055_REMAP_Y_SIGN__REG BNO055_AXIS_MAP_SIGN_ADDR
+
+#define BNO055_REMAP_X_SIGN__POS 2
+#define BNO055_REMAP_X_SIGN__MSK 0X04
+#define BNO055_REMAP_X_SIGN__LEN 1
+#define BNO055_REMAP_X_SIGN__REG BNO055_AXIS_MAP_SIGN_ADDR
+
+/* Soft Iron Calibration matrix register*/
+#define BNO055_SIC_MATRIX_0_LSB__POS 0
+#define BNO055_SIC_MATRIX_0_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_0_LSB__LEN 8
+#define BNO055_SIC_MATRIX_0_LSB__REG BNO055_SIC_MATRIX_0_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_0_MSB__POS 0
+#define BNO055_SIC_MATRIX_0_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_0_MSB__LEN 8
+#define BNO055_SIC_MATRIX_0_MSB__REG BNO055_SIC_MATRIX_0_MSB_ADDR
+
+#define BNO055_SIC_MATRIX_1_LSB__POS 0
+#define BNO055_SIC_MATRIX_1_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_1_LSB__LEN 8
+#define BNO055_SIC_MATRIX_1_LSB__REG BNO055_SIC_MATRIX_1_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_1_MSB__POS 0
+#define BNO055_SIC_MATRIX_1_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_1_MSB__LEN 8
+#define BNO055_SIC_MATRIX_1_MSB__REG BNO055_SIC_MATRIX_1_MSB_ADDR
+
+#define BNO055_SIC_MATRIX_2_LSB__POS 0
+#define BNO055_SIC_MATRIX_2_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_2_LSB__LEN 8
+#define BNO055_SIC_MATRIX_2_LSB__REG BNO055_SIC_MATRIX_2_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_2_MSB__POS 0
+#define BNO055_SIC_MATRIX_2_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_2_MSB__LEN 8
+#define BNO055_SIC_MATRIX_2_MSB__REG BNO055_SIC_MATRIX_2_MSB_ADDR
+
+#define BNO055_SIC_MATRIX_3_LSB__POS 0
+#define BNO055_SIC_MATRIX_3_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_3_LSB__LEN 8
+#define BNO055_SIC_MATRIX_3_LSB__REG BNO055_SIC_MATRIX_3_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_3_MSB__POS 0
+#define BNO055_SIC_MATRIX_3_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_3_MSB__LEN 8
+#define BNO055_SIC_MATRIX_3_MSB__REG BNO055_SIC_MATRIX_3_MSB_ADDR
+
+#define BNO055_SIC_MATRIX_4_LSB__POS 0
+#define BNO055_SIC_MATRIX_4_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_4_LSB__LEN 8
+#define BNO055_SIC_MATRIX_4_LSB__REG BNO055_SIC_MATRIX_4_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_4_MSB__POS 0
+#define BNO055_SIC_MATRIX_4_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_4_MSB__LEN 8
+#define BNO055_SIC_MATRIX_4_MSB__REG BNO055_SIC_MATRIX_4_MSB_ADDR
+
+#define BNO055_SIC_MATRIX_5_LSB__POS 0
+#define BNO055_SIC_MATRIX_5_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_5_LSB__LEN 8
+#define BNO055_SIC_MATRIX_5_LSB__REG BNO055_SIC_MATRIX_5_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_5_MSB__POS 0
+#define BNO055_SIC_MATRIX_5_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_5_MSB__LEN 8
+#define BNO055_SIC_MATRIX_5_MSB__REG BNO055_SIC_MATRIX_5_MSB_ADDR
+
+#define BNO055_SIC_MATRIX_6_LSB__POS 0
+#define BNO055_SIC_MATRIX_6_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_6_LSB__LEN 8
+#define BNO055_SIC_MATRIX_6_LSB__REG BNO055_SIC_MATRIX_6_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_6_MSB__POS 0
+#define BNO055_SIC_MATRIX_6_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_6_MSB__LEN 8
+#define BNO055_SIC_MATRIX_6_MSB__REG BNO055_SIC_MATRIX_6_MSB_ADDR
+
+#define BNO055_SIC_MATRIX_7_LSB__POS 0
+#define BNO055_SIC_MATRIX_7_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_7_LSB__LEN 8
+#define BNO055_SIC_MATRIX_7_LSB__REG BNO055_SIC_MATRIX_7_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_7_MSB__POS 0
+#define BNO055_SIC_MATRIX_7_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_7_MSB__LEN 8
+#define BNO055_SIC_MATRIX_7_MSB__REG BNO055_SIC_MATRIX_7_MSB_ADDR
+
+#define BNO055_SIC_MATRIX_8_LSB__POS 0
+#define BNO055_SIC_MATRIX_8_LSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_8_LSB__LEN 8
+#define BNO055_SIC_MATRIX_8_LSB__REG BNO055_SIC_MATRIX_8_LSB_ADDR
+
+#define BNO055_SIC_MATRIX_8_MSB__POS 0
+#define BNO055_SIC_MATRIX_8_MSB__MSK 0XFF
+#define BNO055_SIC_MATRIX_8_MSB__LEN 8
+#define BNO055_SIC_MATRIX_8_MSB__REG BNO055_SIC_MATRIX_8_MSB_ADDR
+
+/*Accel Offset registers*/
+#define BNO055_ACCEL_OFFSET_X_LSB__POS 0
+#define BNO055_ACCEL_OFFSET_X_LSB__MSK 0XFF
+#define BNO055_ACCEL_OFFSET_X_LSB__LEN 8
+#define BNO055_ACCEL_OFFSET_X_LSB__REG ACCEL_OFFSET_X_LSB_ADDR
+
+#define BNO055_ACCEL_OFFSET_X_MSB__POS 0
+#define BNO055_ACCEL_OFFSET_X_MSB__MSK 0XFF
+#define BNO055_ACCEL_OFFSET_X_MSB__LEN 8
+#define BNO055_ACCEL_OFFSET_X_MSB__REG ACCEL_OFFSET_X_MSB_ADDR
+
+#define BNO055_ACCEL_OFFSET_Y_LSB__POS 0
+#define BNO055_ACCEL_OFFSET_Y_LSB__MSK 0XFF
+#define BNO055_ACCEL_OFFSET_Y_LSB__LEN 8
+#define BNO055_ACCEL_OFFSET_Y_LSB__REG ACCEL_OFFSET_Y_LSB_ADDR
+
+#define BNO055_ACCEL_OFFSET_Y_MSB__POS 0
+#define BNO055_ACCEL_OFFSET_Y_MSB__MSK 0XFF
+#define BNO055_ACCEL_OFFSET_Y_MSB__LEN 8
+#define BNO055_ACCEL_OFFSET_Y_MSB__REG ACCEL_OFFSET_Y_MSB_ADDR
+
+#define BNO055_ACCEL_OFFSET_Z_LSB__POS 0
+#define BNO055_ACCEL_OFFSET_Z_LSB__MSK 0XFF
+#define BNO055_ACCEL_OFFSET_Z_LSB__LEN 8
+#define BNO055_ACCEL_OFFSET_Z_LSB__REG ACCEL_OFFSET_Z_LSB_ADDR
+
+#define BNO055_ACCEL_OFFSET_Z_MSB__POS 0
+#define BNO055_ACCEL_OFFSET_Z_MSB__MSK 0XFF
+#define BNO055_ACCEL_OFFSET_Z_MSB__LEN 8
+#define BNO055_ACCEL_OFFSET_Z_MSB__REG ACCEL_OFFSET_Z_MSB_ADDR
+
+/*Mag Offset registers*/
+#define BNO055_MAG_OFFSET_X_LSB__POS 0
+#define BNO055_MAG_OFFSET_X_LSB__MSK 0XFF
+#define BNO055_MAG_OFFSET_X_LSB__LEN 8
+#define BNO055_MAG_OFFSET_X_LSB__REG MAG_OFFSET_X_LSB_ADDR
+
+#define BNO055_MAG_OFFSET_X_MSB__POS 0
+#define BNO055_MAG_OFFSET_X_MSB__MSK 0XFF
+#define BNO055_MAG_OFFSET_X_MSB__LEN 8
+#define BNO055_MAG_OFFSET_X_MSB__REG MAG_OFFSET_X_MSB_ADDR
+
+#define BNO055_MAG_OFFSET_Y_LSB__POS 0
+#define BNO055_MAG_OFFSET_Y_LSB__MSK 0XFF
+#define BNO055_MAG_OFFSET_Y_LSB__LEN 8
+#define BNO055_MAG_OFFSET_Y_LSB__REG MAG_OFFSET_Y_LSB_ADDR
+
+#define BNO055_MAG_OFFSET_Y_MSB__POS 0
+#define BNO055_MAG_OFFSET_Y_MSB__MSK 0XFF
+#define BNO055_MAG_OFFSET_Y_MSB__LEN 8
+#define BNO055_MAG_OFFSET_Y_MSB__REG MAG_OFFSET_Y_MSB_ADDR
+
+#define BNO055_MAG_OFFSET_Z_LSB__POS 0
+#define BNO055_MAG_OFFSET_Z_LSB__MSK 0XFF
+#define BNO055_MAG_OFFSET_Z_LSB__LEN 8
+#define BNO055_MAG_OFFSET_Z_LSB__REG MAG_OFFSET_Z_LSB_ADDR
+
+#define BNO055_MAG_OFFSET_Z_MSB__POS 0
+#define BNO055_MAG_OFFSET_Z_MSB__MSK 0XFF
+#define BNO055_MAG_OFFSET_Z_MSB__LEN 8
+#define BNO055_MAG_OFFSET_Z_MSB__REG MAG_OFFSET_Z_MSB_ADDR
+
+/* Gyro Offset registers*/
+#define BNO055_GYRO_OFFSET_X_LSB__POS 0
+#define BNO055_GYRO_OFFSET_X_LSB__MSK 0XFF
+#define BNO055_GYRO_OFFSET_X_LSB__LEN 8
+#define BNO055_GYRO_OFFSET_X_LSB__REG GYRO_OFFSET_X_LSB_ADDR
+
+#define BNO055_GYRO_OFFSET_X_MSB__POS 0
+#define BNO055_GYRO_OFFSET_X_MSB__MSK 0XFF
+#define BNO055_GYRO_OFFSET_X_MSB__LEN 8
+#define BNO055_GYRO_OFFSET_X_MSB__REG GYRO_OFFSET_X_MSB_ADDR
+
+#define BNO055_GYRO_OFFSET_Y_LSB__POS 0
+#define BNO055_GYRO_OFFSET_Y_LSB__MSK 0XFF
+#define BNO055_GYRO_OFFSET_Y_LSB__LEN 8
+#define BNO055_GYRO_OFFSET_Y_LSB__REG GYRO_OFFSET_Y_LSB_ADDR
+
+#define BNO055_GYRO_OFFSET_Y_MSB__POS 0
+#define BNO055_GYRO_OFFSET_Y_MSB__MSK 0XFF
+#define BNO055_GYRO_OFFSET_Y_MSB__LEN 8
+#define BNO055_GYRO_OFFSET_Y_MSB__REG GYRO_OFFSET_Y_MSB_ADDR
+
+#define BNO055_GYRO_OFFSET_Z_LSB__POS 0
+#define BNO055_GYRO_OFFSET_Z_LSB__MSK 0XFF
+#define BNO055_GYRO_OFFSET_Z_LSB__LEN 8
+#define BNO055_GYRO_OFFSET_Z_LSB__REG GYRO_OFFSET_Z_LSB_ADDR
+
+#define BNO055_GYRO_OFFSET_Z_MSB__POS 0
+#define BNO055_GYRO_OFFSET_Z_MSB__MSK 0XFF
+#define BNO055_GYRO_OFFSET_Z_MSB__LEN 8
+#define BNO055_GYRO_OFFSET_Z_MSB__REG GYRO_OFFSET_Z_MSB_ADDR
+
+/* Radius register definition*/
+#define BNO055_ACCEL_RADIUS_LSB__POS 0
+#define BNO055_ACCEL_RADIUS_LSB__MSK 0XFF
+#define BNO055_ACCEL_RADIUS_LSB__LEN 8
+#define BNO055_ACCEL_RADIUS_LSB__REG ACCEL_RADIUS_LSB_ADDR
+
+#define BNO055_ACCEL_RADIUS_MSB__POS 0
+#define BNO055_ACCEL_RADIUS_MSB__MSK 0XFF
+#define BNO055_ACCEL_RADIUS_MSB__LEN 8
+#define BNO055_ACCEL_RADIUS_MSB__REG ACCEL_RADIUS_MSB_ADDR
+
+#define BNO055_MAG_RADIUS_LSB__POS 0
+#define BNO055_MAG_RADIUS_LSB__MSK 0XFF
+#define BNO055_MAG_RADIUS_LSB__LEN 8
+#define BNO055_MAG_RADIUS_LSB__REG MAG_RADIUS_LSB_ADDR
+
+#define BNO055_MAG_RADIUS_MSB__POS 0
+#define BNO055_MAG_RADIUS_MSB__MSK 0XFF
+#define BNO055_MAG_RADIUS_MSB__LEN 8
+#define BNO055_MAG_RADIUS_MSB__REG MAG_RADIUS_MSB_ADDR
+
+/* PAGE0 DATA REGISTERS DEFINITION END*/
+/*************************************************/
+/**\name PAGE1 DATA REGISTERS DEFINITION */
+/*************************************************/
+/* Configuration registers*/
+/* Accel range configuration register*/
+#define BNO055_ACCEL_RANGE__POS 0
+#define BNO055_ACCEL_RANGE__MSK 0X03
+#define BNO055_ACCEL_RANGE__LEN 2
+#define BNO055_ACCEL_RANGE__REG ACCEL_CONFIG_ADDR
+
+/* Accel bandwidth configuration register*/
+#define BNO055_ACCEL_BW__POS 2
+#define BNO055_ACCEL_BW__MSK 0X1C
+#define BNO055_ACCEL_BW__LEN 3
+#define BNO055_ACCEL_BW__REG ACCEL_CONFIG_ADDR
+
+/* Accel power mode configuration register*/
+#define BNO055_ACCEL_POWER_MODE__POS 5
+#define BNO055_ACCEL_POWER_MODE__MSK 0XE0
+#define BNO055_ACCEL_POWER_MODE__LEN 3
+#define BNO055_ACCEL_POWER_MODE__REG ACCEL_CONFIG_ADDR
+
+/* Mag data output rate configuration register*/
+#define BNO055_MAG_DATA_OUTPUT_RATE__POS 0
+#define BNO055_MAG_DATA_OUTPUT_RATE__MSK 0X07
+#define BNO055_MAG_DATA_OUTPUT_RATE__LEN 3
+#define BNO055_MAG_DATA_OUTPUT_RATE__REG MAG_CONFIG_ADDR
+
+/* Mag operation mode configuration register*/
+#define BNO055_MAG_OPERATION_MODE__POS 3
+#define BNO055_MAG_OPERATION_MODE__MSK 0X18
+#define BNO055_MAG_OPERATION_MODE__LEN 2
+#define BNO055_MAG_OPERATION_MODE__REG MAG_CONFIG_ADDR
+
+/* Mag power mode configuration register*/
+#define BNO055_MAG_POWER_MODE__POS 5
+#define BNO055_MAG_POWER_MODE__MSK 0X60
+#define BNO055_MAG_POWER_MODE__LEN 2
+#define BNO055_MAG_POWER_MODE__REG MAG_CONFIG_ADDR
+
+/* Gyro range configuration register*/
+#define BNO055_GYRO_RANGE__POS 0
+#define BNO055_GYRO_RANGE__MSK 0X07
+#define BNO055_GYRO_RANGE__LEN 3
+#define BNO055_GYRO_RANGE__REG GYRO_CONFIG_ADDR
+
+/* Gyro bandwidth configuration register*/
+#define BNO055_GYRO_BW__POS 3
+#define BNO055_GYRO_BW__MSK 0X38
+#define BNO055_GYRO_BW__LEN 3
+#define BNO055_GYRO_BW__REG GYRO_CONFIG_ADDR
+
+/* Gyro power mode configuration register*/
+#define BNO055_GYRO_POWER_MODE__POS 0
+#define BNO055_GYRO_POWER_MODE__MSK 0X07
+#define BNO055_GYRO_POWER_MODE__LEN 3
+#define BNO055_GYRO_POWER_MODE__REG GYRO_MODE_CONFIG_ADDR
+
+/* Sleep configuration registers*/
+/* Accel sleep mode configuration register*/
+#define BNO055_ACCEL_SLEEP_MODE__POS 0
+#define BNO055_ACCEL_SLEEP_MODE__MSK 0X01
+#define BNO055_ACCEL_SLEEP_MODE__LEN 1
+#define BNO055_ACCEL_SLEEP_MODE__REG ACCEL_SLEEP_CONFIG_ADDR
+
+/* Accel sleep duration configuration register*/
+#define BNO055_ACCEL_SLEEP_DURN__POS 1
+#define BNO055_ACCEL_SLEEP_DURN__MSK 0X1E
+#define BNO055_ACCEL_SLEEP_DURN__LEN 4
+#define BNO055_ACCEL_SLEEP_DURN__REG ACCEL_SLEEP_CONFIG_ADDR
+
+/* Gyro sleep duration configuration register*/
+#define BNO055_GYRO_SLEEP_DURN__POS 0
+#define BNO055_GYRO_SLEEP_DURN__MSK 0X07
+#define BNO055_GYRO_SLEEP_DURN__LEN 3
+#define BNO055_GYRO_SLEEP_DURN__REG GYRO_SLEEP_CONFIG_ADDR
+
+/* Gyro auto sleep duration configuration register*/
+#define BNO055_GYRO_AUTO_SLEEP_DURN__POS 3
+#define BNO055_GYRO_AUTO_SLEEP_DURN__MSK 0X38
+#define BNO055_GYRO_AUTO_SLEEP_DURN__LEN 3
+#define BNO055_GYRO_AUTO_SLEEP_DURN__REG GYRO_SLEEP_CONFIG_ADDR
+
+/* Mag sleep mode configuration register*/
+#define BNO055_MAG_SLEEP_MODE__POS 0
+#define BNO055_MAG_SLEEP_MODE__MSK 0X01
+#define BNO055_MAG_SLEEP_MODE__LEN 1
+#define BNO055_MAG_SLEEP_MODE__REG MAG_SLEEP_CONFIG_ADDR
+
+/* Mag sleep duration configuration register*/
+#define BNO055_MAG_SLEEP_DURN__POS 1
+#define BNO055_MAG_SLEEP_DURN__MSK 0X1E
+#define BNO055_MAG_SLEEP_DURN__LEN 4
+#define BNO055_MAG_SLEEP_DURN__REG MAG_SLEEP_CONFIG_ADDR
+
+/* Interrupt registers*/
+/* Gyro any motion interrupt msk register*/
+#define BNO055_GYRO_ANY_MOTION_INTR_MASK__POS 2
+#define BNO055_GYRO_ANY_MOTION_INTR_MASK__MSK 0X04
+#define BNO055_GYRO_ANY_MOTION_INTR_MASK__LEN 1
+#define BNO055_GYRO_ANY_MOTION_INTR_MASK__REG INT_MASK_ADDR
+
+/* Gyro high rate interrupt msk register*/
+#define BNO055_GYRO_HIGHRATE_INTR_MASK__POS 3
+#define BNO055_GYRO_HIGHRATE_INTR_MASK__MSK 0X08
+#define BNO055_GYRO_HIGHRATE_INTR_MASK__LEN 1
+#define BNO055_GYRO_HIGHRATE_INTR_MASK__REG INT_MASK_ADDR
+
+/* Accel high g interrupt msk register*/
+#define BNO055_ACCEL_HIGH_G_INTR_MASK__POS 5
+#define BNO055_ACCEL_HIGH_G_INTR_MASK__MSK 0X20
+#define BNO055_ACCEL_HIGH_G_INTR_MASK__LEN 1
+#define BNO055_ACCEL_HIGH_G_INTR_MASK__REG INT_MASK_ADDR
+
+/* Accel any motion interrupt msk register*/
+#define BNO055_ACCEL_ANY_MOTION_INTR_MASK__POS 6
+#define BNO055_ACCEL_ANY_MOTION_INTR_MASK__MSK 0X40
+#define BNO055_ACCEL_ANY_MOTION_INTR_MASK__LEN 1
+#define BNO055_ACCEL_ANY_MOTION_INTR_MASK__REG INT_MASK_ADDR
+
+/* Accel any motion interrupt msk register*/
+#define BNO055_ACCEL_NO_MOTION_INTR_MASK__POS 7
+#define BNO055_ACCEL_NO_MOTION_INTR_MASK__MSK 0X80
+#define BNO055_ACCEL_NO_MOTION_INTR_MASK__LEN 1
+#define BNO055_ACCEL_NO_MOTION_INTR_MASK__REG INT_MASK_ADDR
+
+/* Gyro any motion interrupt register*/
+#define BNO055_GYRO_ANY_MOTION_INTR__POS 2
+#define BNO055_GYRO_ANY_MOTION_INTR__MSK 0X04
+#define BNO055_GYRO_ANY_MOTION_INTR__LEN 1
+#define BNO055_GYRO_ANY_MOTION_INTR__REG INT_ADDR
+
+/* Gyro high rate interrupt register*/
+#define BNO055_GYRO_HIGHRATE_INTR__POS 3
+#define BNO055_GYRO_HIGHRATE_INTR__MSK 0X08
+#define BNO055_GYRO_HIGHRATE_INTR__LEN 1
+#define BNO055_GYRO_HIGHRATE_INTR__REG INT_ADDR
+
+/* Accel high g interrupt register*/
+#define BNO055_ACCEL_HIGH_G_INTR__POS 5
+#define BNO055_ACCEL_HIGH_G_INTR__MSK 0X20
+#define BNO055_ACCEL_HIGH_G_INTR__LEN 1
+#define BNO055_ACCEL_HIGH_G_INTR__REG INT_ADDR
+
+/* Accel any motion interrupt register*/
+#define BNO055_ACCEL_ANY_MOTION_INTR__POS 6
+#define BNO055_ACCEL_ANY_MOTION_INTR__MSK 0X40
+#define BNO055_ACCEL_ANY_MOTION_INTR__LEN 1
+#define BNO055_ACCEL_ANY_MOTION_INTR__REG INT_ADDR
+
+/*Accel any motion interrupt register*/
+#define BNO055_ACCEL_NO_MOTION_INTR__POS 7
+#define BNO055_ACCEL_NO_MOTION_INTR__MSK 0X80
+#define BNO055_ACCEL_NO_MOTION_INTR__LEN 1
+#define BNO055_ACCEL_NO_MOTION_INTR__REG INT_ADDR
+
+/*Accel any motion threshold setting*/
+#define BNO055_ACCEL_ANY_MOTION_THRES__POS 0
+#define BNO055_ACCEL_ANY_MOTION_THRES__MSK 0XFF
+#define BNO055_ACCEL_ANY_MOTION_THRES__LEN 8
+#define BNO055_ACCEL_ANY_MOTION_THRES__REG ACCEL_ANY_MOTION_THRES_ADDR
+
+/*Accel interrupt setting register*/
+#define BNO055_ACCEL_ANY_MOTION_DURN_SET__POS 0
+#define BNO055_ACCEL_ANY_MOTION_DURN_SET__MSK 0X03
+#define BNO055_ACCEL_ANY_MOTION_DURN_SET__LEN 2
+#define BNO055_ACCEL_ANY_MOTION_DURN_SET__REG ACCEL_INTR_SETTINGS_ADDR
+
+/* Accel AM/NM axis selection register*/
+#define BNO055_ACCEL_ANY_MOTION_X_AXIS__POS 2
+#define BNO055_ACCEL_ANY_MOTION_X_AXIS__MSK 0X04
+#define BNO055_ACCEL_ANY_MOTION_X_AXIS__LEN 1
+#define BNO055_ACCEL_ANY_MOTION_X_AXIS__REG ACCEL_INTR_SETTINGS_ADDR
+
+#define BNO055_ACCEL_ANY_MOTION_Y_AXIS__POS 3
+#define BNO055_ACCEL_ANY_MOTION_Y_AXIS__MSK 0X08
+#define BNO055_ACCEL_ANY_MOTION_Y_AXIS__LEN 1
+#define BNO055_ACCEL_ANY_MOTION_Y_AXIS__REG ACCEL_INTR_SETTINGS_ADDR
+
+#define BNO055_ACCEL_ANY_MOTION_Z_AXIS__POS 4
+#define BNO055_ACCEL_ANY_MOTION_Z_AXIS__MSK 0X10
+#define BNO055_ACCEL_ANY_MOTION_Z_AXIS__LEN 1
+#define BNO055_ACCEL_ANY_MOTION_Z_AXIS__REG ACCEL_INTR_SETTINGS_ADDR
+
+/* Accel high g axis selection register*/
+#define BNO055_ACCEL_HIGH_G_X_AXIS__POS 5
+#define BNO055_ACCEL_HIGH_G_X_AXIS__MSK 0X20
+#define BNO055_ACCEL_HIGH_G_X_AXIS__LEN 1
+#define BNO055_ACCEL_HIGH_G_X_AXIS__REG ACCEL_INTR_SETTINGS_ADDR
+
+#define BNO055_ACCEL_HIGH_G_Y_AXIS__POS 6
+#define BNO055_ACCEL_HIGH_G_Y_AXIS__MSK 0X40
+#define BNO055_ACCEL_HIGH_G_Y_AXIS__LEN 1
+#define BNO055_ACCEL_HIGH_G_Y_AXIS__REG ACCEL_INTR_SETTINGS_ADDR
+
+#define BNO055_ACCEL_HIGH_G_Z_AXIS__POS 7
+#define BNO055_ACCEL_HIGH_G_Z_AXIS__MSK 0X80
+#define BNO055_ACCEL_HIGH_G_Z_AXIS__LEN 1
+#define BNO055_ACCEL_HIGH_G_Z_AXIS__REG ACCEL_INTR_SETTINGS_ADDR
+
+/* Accel High g duration setting register*/
+#define BNO055_ACCEL_HIGH_G_DURN__POS 0
+#define BNO055_ACCEL_HIGH_G_DURN__MSK 0XFF
+#define BNO055_ACCEL_HIGH_G_DURN__LEN 8
+#define BNO055_ACCEL_HIGH_G_DURN__REG ACCEL_HIGH_G_DURN_ADDR
+
+/* Accel High g threshold setting register*/
+#define BNO055_ACCEL_HIGH_G_THRES__POS 0
+#define BNO055_ACCEL_HIGH_G_THRES__MSK 0XFF
+#define BNO055_ACCEL_HIGH_G_THRES__LEN 8
+#define BNO055_ACCEL_HIGH_G_THRES__REG ACCEL_HIGH_G_THRES_ADDR
+
+/* Accel no/slow motion threshold setting*/
+#define BNO055_ACCEL_SLOW_NO_MOTION_THRES__POS 0
+#define BNO055_ACCEL_SLOW_NO_MOTION_THRES__MSK 0XFF
+#define BNO055_ACCEL_SLOW_NO_MOTION_THRES__LEN 8
+#define BNO055_ACCEL_SLOW_NO_MOTION_THRES__REG \
+ACCEL_NO_MOTION_THRES_ADDR
+
+/* Accel no/slow motion enable setting*/
+#define BNO055_ACCEL_SLOW_NO_MOTION_ENABLE__POS 0
+#define BNO055_ACCEL_SLOW_NO_MOTION_ENABLE__MSK 0X01
+#define BNO055_ACCEL_SLOW_NO_MOTION_ENABLE__LEN 1
+#define BNO055_ACCEL_SLOW_NO_MOTION_ENABLE__REG ACCEL_NO_MOTION_SET_ADDR
+
+/* Accel no/slow motion duration setting*/
+#define BNO055_ACCEL_SLOW_NO_MOTION_DURN__POS 1
+#define BNO055_ACCEL_SLOW_NO_MOTION_DURN__MSK 0X7E
+#define BNO055_ACCEL_SLOW_NO_MOTION_DURN__LEN 6
+#define BNO055_ACCEL_SLOW_NO_MOTION_DURN__REG ACCEL_NO_MOTION_SET_ADDR
+
+/*Gyro interrupt setting register*/
+/*Gyro any motion axis setting*/
+#define BNO055_GYRO_ANY_MOTION_X_AXIS__POS 0
+#define BNO055_GYRO_ANY_MOTION_X_AXIS__MSK 0X01
+#define BNO055_GYRO_ANY_MOTION_X_AXIS__LEN 1
+#define BNO055_GYRO_ANY_MOTION_X_AXIS__REG GYRO_INTR_SETING_ADDR
+
+#define BNO055_GYRO_ANY_MOTION_Y_AXIS__POS 1
+#define BNO055_GYRO_ANY_MOTION_Y_AXIS__MSK 0X02
+#define BNO055_GYRO_ANY_MOTION_Y_AXIS__LEN 1
+#define BNO055_GYRO_ANY_MOTION_Y_AXIS__REG GYRO_INTR_SETING_ADDR
+
+#define BNO055_GYRO_ANY_MOTION_Z_AXIS__POS 2
+#define BNO055_GYRO_ANY_MOTION_Z_AXIS__MSK 0X04
+#define BNO055_GYRO_ANY_MOTION_Z_AXIS__LEN 1
+#define BNO055_GYRO_ANY_MOTION_Z_AXIS__REG GYRO_INTR_SETING_ADDR
+
+/*Gyro high rate axis setting*/
+#define BNO055_GYRO_HIGHRATE_X_AXIS__POS 3
+#define BNO055_GYRO_HIGHRATE_X_AXIS__MSK 0X08
+#define BNO055_GYRO_HIGHRATE_X_AXIS__LEN 1
+#define BNO055_GYRO_HIGHRATE_X_AXIS__REG GYRO_INTR_SETING_ADDR
+
+#define BNO055_GYRO_HIGHRATE_Y_AXIS__POS 4
+#define BNO055_GYRO_HIGHRATE_Y_AXIS__MSK 0X10
+#define BNO055_GYRO_HIGHRATE_Y_AXIS__LEN 1
+#define BNO055_GYRO_HIGHRATE_Y_AXIS__REG GYRO_INTR_SETING_ADDR
+
+#define BNO055_GYRO_HIGHRATE_Z_AXIS__POS 5
+#define BNO055_GYRO_HIGHRATE_Z_AXIS__MSK 0X20
+#define BNO055_GYRO_HIGHRATE_Z_AXIS__LEN 1
+#define BNO055_GYRO_HIGHRATE_Z_AXIS__REG GYRO_INTR_SETING_ADDR
+
+/* Gyro filter setting*/
+#define BNO055_GYRO_ANY_MOTION_FILTER__POS 6
+#define BNO055_GYRO_ANY_MOTION_FILTER__MSK 0X40
+#define BNO055_GYRO_ANY_MOTION_FILTER__LEN 1
+#define BNO055_GYRO_ANY_MOTION_FILTER__REG GYRO_INTR_SETING_ADDR
+
+#define BNO055_GYRO_HIGHRATE_FILTER__POS 7
+#define BNO055_GYRO_HIGHRATE_FILTER__MSK 0X80
+#define BNO055_GYRO_HIGHRATE_FILTER__LEN 1
+#define BNO055_GYRO_HIGHRATE_FILTER__REG GYRO_INTR_SETING_ADDR
+
+/* Gyro high rate X axis settings*/
+#define BNO055_GYRO_HIGHRATE_X_THRES__POS 0
+#define BNO055_GYRO_HIGHRATE_X_THRES__MSK 0X1F
+#define BNO055_GYRO_HIGHRATE_X_THRES__LEN 5
+#define BNO055_GYRO_HIGHRATE_X_THRES__REG GYRO_HIGHRATE_X_SET_ADDR
+
+#define BNO055_GYRO_HIGHRATE_X_HYST__POS 5
+#define BNO055_GYRO_HIGHRATE_X_HYST__MSK 0X60
+#define BNO055_GYRO_HIGHRATE_X_HYST__LEN 2
+#define BNO055_GYRO_HIGHRATE_X_HYST__REG GYRO_HIGHRATE_X_SET_ADDR
+
+#define BNO055_GYRO_HIGHRATE_X_DURN__POS 0
+#define BNO055_GYRO_HIGHRATE_X_DURN__MSK 0XFF
+#define BNO055_GYRO_HIGHRATE_X_DURN__LEN 8
+#define BNO055_GYRO_HIGHRATE_X_DURN__REG GYRO_DURN_X_ADDR
+
+/* Gyro high rate Y axis settings*/
+#define BNO055_GYRO_HIGHRATE_Y_THRES__POS 0
+#define BNO055_GYRO_HIGHRATE_Y_THRES__MSK 0X1F
+#define BNO055_GYRO_HIGHRATE_Y_THRES__LEN 5
+#define BNO055_GYRO_HIGHRATE_Y_THRES__REG GYRO_HIGHRATE_Y_SET_ADDR
+
+#define BNO055_GYRO_HIGHRATE_Y_HYST__POS 5
+#define BNO055_GYRO_HIGHRATE_Y_HYST__MSK 0X60
+#define BNO055_GYRO_HIGHRATE_Y_HYST__LEN 2
+#define BNO055_GYRO_HIGHRATE_Y_HYST__REG GYRO_HIGHRATE_Y_SET_ADDR
+
+#define BNO055_GYRO_HIGHRATE_Y_DURN__POS 0
+#define BNO055_GYRO_HIGHRATE_Y_DURN__MSK 0XFF
+#define BNO055_GYRO_HIGHRATE_Y_DURN__LEN 8
+#define BNO055_GYRO_HIGHRATE_Y_DURN__REG GYRO_DURN_Y_ADDR
+
+/* Gyro high rate Z axis settings*/
+#define BNO055_GYRO_HIGHRATE_Z_THRES__POS 0
+#define BNO055_GYRO_HIGHRATE_Z_THRES__MSK 0X1F
+#define BNO055_GYRO_HIGHRATE_Z_THRES__LEN 5
+#define BNO055_GYRO_HIGHRATE_Z_THRES__REG GYRO_HIGHRATE_Z_SET_ADDR
+
+#define BNO055_GYRO_HIGHRATE_Z_HYST__POS 5
+#define BNO055_GYRO_HIGHRATE_Z_HYST__MSK 0X60
+#define BNO055_GYRO_HIGHRATE_Z_HYST__LEN 2
+#define BNO055_GYRO_HIGHRATE_Z_HYST__REG GYRO_HIGHRATE_Z_SET_ADDR
+
+#define BNO055_GYRO_HIGHRATE_Z_DURN__POS 0
+#define BNO055_GYRO_HIGHRATE_Z_DURN__MSK 0XFF
+#define BNO055_GYRO_HIGHRATE_Z_DURN__LEN 8
+#define BNO055_GYRO_HIGHRATE_Z_DURN__REG GYRO_DURN_Z_ADDR
+
+/*Gyro any motion threshold setting*/
+#define BNO055_GYRO_ANY_MOTION_THRES__POS 0
+#define BNO055_GYRO_ANY_MOTION_THRES__MSK 0X7F
+#define BNO055_GYRO_ANY_MOTION_THRES__LEN 7
+#define BNO055_GYRO_ANY_MOTION_THRES__REG \
+GYRO_ANY_MOTION_THRES_ADDR
+
+/* Gyro any motion slope sample setting*/
+#define BNO055_GYRO_SLOPE_SAMPLES__POS 0
+#define BNO055_GYRO_SLOPE_SAMPLES__MSK 0X03
+#define BNO055_GYRO_SLOPE_SAMPLES__LEN 2
+#define BNO055_GYRO_SLOPE_SAMPLES__REG GYRO_ANY_MOTION_SET_ADDR
+
+/* Gyro awake duration setting*/
+#define BNO055_GYRO_AWAKE_DURN__POS 2
+#define BNO055_GYRO_AWAKE_DURN__MSK 0X0C
+#define BNO055_GYRO_AWAKE_DURN__LEN 2
+#define BNO055_GYRO_AWAKE_DURN__REG GYRO_ANY_MOTION_SET_ADDR
+
+/* PAGE1 DATA REGISTERS DEFINITION END*/
+/*************************************************/
+/**\name GET AND SET BITSLICE FUNCTIONS */
+/*************************************************/
+#define BNO055_GET_BITSLICE(regvar, bitname)\
+((regvar & bitname##__MSK) >> bitname##__POS)
+
+
+#define BNO055_SET_BITSLICE(regvar, bitname, val)\
+((regvar & ~bitname##__MSK) | ((val<<bitname##__POS)&bitname##__MSK))
+
+ \ No newline at end of file
diff --git a/thirdparty/sensor/bno055/bno055_port.c b/thirdparty/sensor/bno055/bno055_port.c
new file mode 100644
index 00000000..2bdbeaf4
--- /dev/null
+++ b/thirdparty/sensor/bno055/bno055_port.c
@@ -0,0 +1,171 @@
+/**
+ * \file
+ *
+ * \brief BNO055 extension board example for SAME70.
+ *
+ * Copyright (c) 2015 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ * Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+
+#include "bno055_port.h"
+
+/* Instantiates a BNO055 software instance structure which retains
+* chip ID, internal sensors IDs, I2C address and pointers
+* to required functions (bus read/write and delay functions) */
+struct bno055_t bno055;
+
+void bno055_initialize(void)
+{
+ bno055.bus_write = bno055_i2c_bus_write;
+ bno055.bus_read = bno055_i2c_bus_read;
+ bno055.delay_msec = bno055_delay_msek;
+ bno055.dev_addr = BNO055_I2C_SLAVE_ADDRESS;
+
+#if BNO055_I2C_SLAVE_ADDRESS == BNO055_I2C_ADDR1
+ ioport_set_pin_level(BNO055_PIN_SLAVE_ADDR_SELECT, false);
+#else
+ ioport_set_pin_level(BNO055_PIN_SLAVE_ADDR_SELECT, true);
+#endif
+
+ ioport_set_pin_level(BNO055_PIN_BOOT, true);
+ bno055_reset();
+ bno055_init(&bno055);
+}
+
+/*
+ * \Brief: The function is used as I2C bus init
+ */
+void bno055_i2c_bus_init(void)
+{
+ twihs_options_t bno055_option;
+ pmc_enable_periph_clk(BOARD_BNO055_ID_TWIHS);
+
+ /* Configure the options of TWI driver */
+ bno055_option.master_clk = sysclk_get_cpu_hz();
+ bno055_option.speed = BNO055_TWIHS_CLK;
+ twihs_master_init(BOARD_BNO055_TWIHS, &bno055_option);
+}
+
+/* \Brief: The function is used as I2C bus write
+ * \Return : Status of the I2C write
+ * \param dev_addr : The device address of the sensor
+ * \param reg_addr : Address of the first register, will data is going to be written
+ * \param reg_data : It is a value hold in the array,
+ * will be used for write the value into the register
+ * \param cnt : The no of byte of data to be write
+ */
+int8_t bno055_i2c_bus_write(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data, uint8_t cnt)
+{
+ int32_t ierror = BNO055_ZERO_U8X;
+
+ twihs_packet_t p_packet;
+ p_packet.chip = dev_addr;
+ p_packet.addr[0] = reg_addr;
+ p_packet.addr_length = 1;
+ p_packet.buffer = reg_data;
+ p_packet.length = cnt;
+
+ ierror = twihs_master_write(BOARD_BNO055_TWIHS, &p_packet);
+
+ return (int8_t)ierror;
+}
+
+ /* \Brief: The function is used as I2C bus read
+ * \Return : Status of the I2C read
+ * \param dev_addr : The device address of the sensor
+ * \param reg_addr : Address of the first register, will data is going to be read
+ * \param reg_data : This data read from the sensor, which is hold in an array
+ * \param cnt : The no of byte of data to be read
+ */
+int8_t bno055_i2c_bus_read(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data, uint8_t cnt)
+{
+ int32_t ierror = BNO055_ZERO_U8X;
+
+ twihs_packet_t p_packet;
+ p_packet.chip = dev_addr;
+ p_packet.addr[0] = reg_addr;
+ p_packet.addr_length = 1;
+ p_packet.buffer = reg_data;
+ p_packet.length = cnt;
+
+ ierror = twihs_master_read(BOARD_BNO055_TWIHS, &p_packet);
+
+ return (int8_t)ierror;
+}
+/* Brief : The delay routine
+ * \param : delay in ms
+*/
+void bno055_delay_msek(uint32_t msek)
+{
+ /*Here you can write your own delay routine*/
+ delay_ms(msek);
+}
+
+void bno055_reset(void)
+{
+ ioport_set_pin_level(BNO055_PIN_RESET, BNO055_RESET_ACTIVE);
+ delay_ms(BNO055_RESET_DELAY_MS);
+ ioport_set_pin_level(BNO055_PIN_RESET, !BNO055_RESET_ACTIVE);
+ delay_ms(BNO055_RESET_DELAY_MS);
+}
+
+void extint_initialize(void (*handler_function)(void))
+{
+ /* Enable the peripheral clock for the BNO055 extension board interrupt pin. */
+ pmc_enable_periph_clk(PIN_BNO055_EXT_INIERRUPT_ID);
+ /* Configure PIOs as input pins. */
+ pio_configure(PIN_BNO055_EXT_INIERRUPT_PIO, PIN_BNO055_EXT_INIERRUPT_TYPE,
+ PIN_BNO055_EXT_INIERRUPT_MASK, PIN_BNO055_EXT_INIERRUPT_ATTR);
+ /* Initialize PIO interrupt handler, interrupt on rising edge. */
+ pio_handler_set(PIN_BNO055_EXT_INIERRUPT_PIO, PIN_BNO055_EXT_INIERRUPT_ID, PIN_BNO055_EXT_INIERRUPT_MASK,
+ PIN_BNO055_EXT_INIERRUPT_ATTR, (void (*) (uint32_t, uint32_t))handler_function);
+ /* Initialize and enable push button (PIO) interrupt. */
+ pio_handler_set_priority(PIN_BNO055_EXT_INIERRUPT_PIO, PIOD_IRQn, 0);
+ pio_enable_interrupt(PIN_BNO055_EXT_INIERRUPT_PIO, PIN_BNO055_EXT_INIERRUPT_MASK);
+}
+
+void bno055_gpio_config(void)
+{
+ /* Slave address */
+ ioport_set_pin_dir(BNO055_PIN_SLAVE_ADDR_SELECT, IOPORT_DIR_OUTPUT);
+ /* RGB leds */
+ ioport_set_pin_dir(RGB_LED_G, IOPORT_DIR_OUTPUT);
+ /* Boot */
+ ioport_set_pin_dir(BNO055_PIN_BOOT, IOPORT_DIR_OUTPUT);
+ /* Reset */
+ ioport_set_pin_dir(BNO055_PIN_RESET, IOPORT_DIR_OUTPUT);
+} \ No newline at end of file
diff --git a/thirdparty/sensor/bno055/bno055_port.h b/thirdparty/sensor/bno055/bno055_port.h
new file mode 100644
index 00000000..63977020
--- /dev/null
+++ b/thirdparty/sensor/bno055/bno055_port.h
@@ -0,0 +1,67 @@
+/**
+ * \file
+ *
+ * \brief BNO055 extension board example for SAME70.
+ *
+ * Copyright (c) 2015 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ * Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+
+#ifndef __BNO055_PORTING_I2C_H__
+#define __BNO055_PORTING_I2C_H__
+
+#include "asf.h"
+#include "conf_board.h"
+#include "conf_bno055.h"
+#include "bno055.h"
+#include "stdint.h"
+
+/* I2C buffer length */
+#define I2C_BUFFER_LEN 8
+
+extern struct bno055_t bno055;
+
+void bno055_initialize(void);
+void bno055_i2c_bus_init(void);
+int8_t bno055_i2c_bus_write(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data, uint8_t cnt);
+int8_t bno055_i2c_bus_read(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data, uint8_t cnt);
+void bno055_delay_msek(uint32_t msek);
+void bno055_reset(void);
+void extint_initialize(void (*handler_function)(void));
+void bno055_gpio_config(void);
+
+#endif /* __BNO055_PORTING_I2C_H__ */ \ No newline at end of file
diff --git a/thirdparty/sensor/bno055/example/bno055_example.c b/thirdparty/sensor/bno055/example/bno055_example.c
new file mode 100644
index 00000000..d0ca5e25
--- /dev/null
+++ b/thirdparty/sensor/bno055/example/bno055_example.c
@@ -0,0 +1,395 @@
+/**
+ * \file
+ *
+ * \brief BNO055 extension board example for SAME70.
+ *
+ * Copyright (c) 2015-2018 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ * Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+
+/**
+ * \mainpage BNO055 nine Axis sensor Example
+ *
+ * \section Purpose
+ *
+ * This example demonstrates how to configure BNO055 nine Axis sensor
+ * and check the values of nine axes by it.
+ *
+ * \section Requirements
+ *
+ * This package can be used with SAME70 evaluation kits, ATBNO055-XPRO Sensor module.
+ *
+ * \section Description
+ *
+ * This example first set BNO055 working mode and enable interrupt, then initialize it,
+ * and last get the sensor values of nine axes if the sensor position is changed.
+ *
+ * \section Usage
+ *
+ * -# Connect ATBNO055-XPRO Sensor module to EXT1 on SAME70 Xplained Pro kit.
+ * -# Build the program and download it into the evaluation board.
+ * -# On the computer, open and configure a terminal application
+ * (e.g., HyperTerminal on Microsoft Windows) with these settings:
+ * - 115200 bauds
+ * - 8 bits of data
+ * - No parity
+ * - 1 stop bit
+ * - No flow control
+ * -# In the terminal window, the
+ * following text should appear (values depend on the board and the chip used):
+ * \code
+ -- BNO055 Example xxx --
+ -- xxxxxx-xx
+ -- Compiled: xxx xx xxxx xx:xx:xx --
+ *
+ * Cailbration
+ * Compass, M4G & NDOF_FMC_OFF:
+ * Make some random movements (for example: writing the number "8" on air)
+ * until the CALIB_STAT register indicates fully calibrated.
+ *
+ * It takes more calibration movements to get the magnetometer calibrated than in the NDOF mode.
+ * Step 1:The same random movements have to be made to calibrate the sensor as in the FMC_OFF mode,
+ * but here it takes relatively less calibration movements (and slightly higher current consumption)
+ * to get the magnetometer calibrated.
+ * Step 2:The register CALIB_STAT can be read to see the calibration status of the magnetometer.
+\endcode
+ */
+
+#include "asf.h"
+#include "conf_board.h"
+#include "conf_bno055.h"
+#include "bno055_port.h"
+
+/// @cond 0
+/**INDENT-OFF**/
+#ifdef __cplusplus
+extern "C" {
+#endif
+/**INDENT-ON**/
+/// @endcond
+
+#define STRING_EOL "\r"
+#define STRING_HEADER "-- BNO055 Example --\r\n" \
+ "-- "BOARD_NAME" --\r\n" \
+ "-- Compiled: "__DATE__" "__TIME__" --"STRING_EOL
+
+/*! Holds sleep state of the system */
+uint8_t sleep_state;
+
+/*! the flag is set by the external interrupt callback function */
+bool read_sensor_data = false;
+bool sensor_data_changed = false;
+uint32_t systick_count = 0;
+
+/************************************************************************/
+/**\name Function Prototype Declaration */
+/************************************************************************/
+
+static void sensor_init(void);
+static void sensors_data_print(void);
+static void bno055_interrupt_handler_no_motion(void);
+static void bno055_interrupt_handler_any_motion(void);
+static void bno055_interrupt_handler(void);
+
+
+/*
+* This function calls initialization function of BNO055, sets sensor power mode
+* to LOWPOWER, sets sensor operation mode to NDOF and enables the required
+* interrupts (Accelerometer Any Motion, Accelerometer No Motion, Gyroscope Any Motion).
+*
+*/
+static void sensor_init(void)
+{
+ bno055_initialize();
+ bno055_set_power_mode(POWER_MODE_LOWPOWER);
+ bno055_set_intr_rst(ENABLED);
+
+ /* Configure sensor interrupts */
+ bno055_set_gyro_any_motion_axis_enable(0, ENABLED);
+ bno055_set_gyro_any_motion_axis_enable(1, ENABLED);
+ bno055_set_gyro_any_motion_axis_enable(2, ENABLED);
+
+ bno055_set_intr_gyro_any_motion(ENABLED);
+ bno055_set_intr_mask_gyro_any_motion(ENABLED);
+
+ bno055_set_accel_any_motion_no_motion_axis_enable(0, ENABLED);
+ bno055_set_accel_any_motion_no_motion_axis_enable(1, ENABLED);
+ bno055_set_accel_any_motion_no_motion_axis_enable(2, ENABLED);
+
+ bno055_set_accel_any_motion_thres(5);
+ bno055_set_accel_any_motion_durn(1);
+ bno055_set_intr_accel_any_motion(ENABLED);
+ bno055_set_intr_mask_accel_any_motion(ENABLED);
+
+ bno055_set_accel_slow_no_motion_thres(5);
+ bno055_set_accel_slow_no_motion_durn(1);
+ bno055_set_intr_accel_no_motion(ENABLED);
+ bno055_set_intr_mask_accel_no_motion(ENABLED);
+
+ bno055_set_operation_mode(OPERATION_MODE_NDOF);
+}
+
+/*!
+* @brief Reads output data of the sensor and sends them data via USART.
+*
+* This function reads output data of BNO055 (Three Euler angles) using
+* sensor API functions and sends sensor data in ASCII Format via USART.
+*
+* @param[in] NULL
+*
+* @param[out] NULL
+*
+* @return NULL
+*
+*/
+static void sensors_data_print (void)
+{
+ struct bno055_euler_t bno055_euler_data;
+ struct bno055_linear_accel_t bno055_linear_accel_data;
+ struct bno055_gravity_t bno055_gravity_data;
+ struct bno055_accel_t bno055_accel_data;
+ struct bno055_gyro_t bno055_gyro_data;
+ struct bno055_mag_t bno055_mag_data;
+
+ bno055_read_euler_hrp(&bno055_euler_data);
+ printf("Euler angles\t\t");
+ printf("H= %4d\t\tR= %4d\t\tP= %4d\r\n", bno055_euler_data.h, bno055_euler_data.p, bno055_euler_data.r);
+
+ bno055_read_linear_accel_xyz(&bno055_linear_accel_data);
+ printf("Linear acceleration\t");
+ printf("X= %4d\t\tY= %4d\t\tZ= %4d\r\n", bno055_linear_accel_data.x, bno055_linear_accel_data.y, bno055_linear_accel_data.z);
+
+ bno055_read_gravity_xyz(&bno055_gravity_data);
+ printf("Gravity\t\t\t");
+ printf("X= %4d\t\tY= %4d\t\tZ= %4d\r\n", bno055_gravity_data.x, bno055_gravity_data.y, bno055_gravity_data.z);
+
+ bno055_read_accel_xyz(&bno055_accel_data);
+ printf("Acceleration\t\t");
+ printf("X= %4d\t\tY= %4d\t\tZ= %4d\r\n", bno055_accel_data.x, bno055_accel_data.y, bno055_accel_data.z);
+
+ bno055_read_gyro_xyz(&bno055_gyro_data);
+ printf("Gyro\t\t\t");
+ printf("X= %4d\t\tY= %4d\t\tZ= %4d\r\n", bno055_gyro_data.x, bno055_gyro_data.y, bno055_gyro_data.z);
+
+ bno055_read_mag_xyz(&bno055_mag_data);
+ printf("Mag\t\t\t");
+ printf("X= %4d\t\tY= %4d\t\tZ= %4d\r\n", bno055_mag_data.x, bno055_mag_data.y, bno055_mag_data.z);
+}
+
+/*!
+* @brief No motion interrupt handler.
+*
+* This function is called when a no-motion interrupt is triggered
+* by the accelerometer in BNO055, turns the LED color to green,
+* stops data stream and sends a message to the terminal window.
+*/
+static void bno055_interrupt_handler_no_motion(void)
+{
+ const uint8_t str_sleeping_message[] = "\r\nShake me to wake me!\r\n\r\n";
+
+ ioport_set_pin_level(RGB_LED_G, RGB_LED_G_ON);
+ printf("%s", str_sleeping_message);
+}
+
+/*!
+* @brief Any motion interrupt handler.
+*
+* This function is called when an any-motion interrupt is triggered
+* by the accelerometer or gyroscope in BNO055, turns off the green light,
+* sends a message to the terminal window and starts data stream.
+*/
+static void bno055_interrupt_handler_any_motion(void)
+{
+ const uint8_t str_wakingup_message[] = "\r\nWell done!\r\n\r\n";
+
+ printf("%s", str_wakingup_message);
+ ioport_set_pin_level(RGB_LED_G, RGB_LED_G_OFF);
+}
+
+/*!
+* @brief Sensor general interrupt handler, calls specific handlers.
+*
+* This function is called when an external interrupt is triggered by the sensor,
+* checks interrupt registers of BNO055 to determine the source and type of interrupt
+* and calls the specific interrupt handler accordingly.
+*
+* @param[in] NULL
+*
+* @param[out] NULL
+*
+* @return NULL
+*
+*/
+static void bno055_interrupt_handler(void)
+{
+ uint8_t accel_no_motion_status = 0;
+ uint8_t accel_any_motion_status = 0;
+ uint8_t gyro_any_motion_status = 0;
+
+ bno055_get_intr_stat_accel_no_motion(&accel_no_motion_status);
+ bno055_get_intr_stat_accel_any_motion(&accel_any_motion_status);
+ bno055_get_intr_stat_gyro_any_motion(&gyro_any_motion_status);
+
+ switch (sleep_state) {
+ case SLEEP_STATE_AWAKE:
+ if (accel_no_motion_status) {
+ sleep_state = SLEEP_STATE_SLEEP;
+ bno055_interrupt_handler_no_motion();
+ sensor_data_changed = false;
+ }
+ break;
+ case SLEEP_STATE_SLEEP:
+ if (accel_any_motion_status || gyro_any_motion_status) {
+ sleep_state = SLEEP_STATE_AWAKE;
+ bno055_interrupt_handler_any_motion();
+ sensor_data_changed = true;
+ }
+ break;
+ default:
+ break;
+ }
+
+ bno055_set_intr_rst(ENABLED);
+}
+
+/**
+ * \brief Handler for System Tick interrupt.
+ */
+void SysTick_Handler(void)
+{
+ systick_count ++;
+ if(systick_count == 500) {
+ read_sensor_data = true;
+ systick_count = 0;
+ }
+}
+
+/**
+ * \brief Configure UART console.
+ */
+static void configure_console(void)
+{
+ const usart_serial_options_t uart_serial_options = {
+ .baudrate = CONF_UART_BAUDRATE,
+#ifdef CONF_UART_CHAR_LENGTH
+ .charlength = CONF_UART_CHAR_LENGTH,
+#endif
+ .paritytype = CONF_UART_PARITY,
+#ifdef CONF_UART_STOP_BITS
+ .stopbits = CONF_UART_STOP_BITS,
+#endif
+ };
+
+ /* Configure console UART. */
+ sysclk_enable_peripheral_clock(CONSOLE_UART_ID);
+ stdio_serial_init(CONF_UART, &uart_serial_options);
+}
+
+/************************************************************************/
+/* Main Function Definition */
+/************************************************************************/
+/*!
+* @brief Initializes the whole system and runs the desired application
+*
+* This is the main function of the project. It calls initialization functions
+* of the main board and the sensor. It initializes the host microcontroller unit
+* and all its required modules such as clock sources, I2C, TC, USART, PINMUX
+* and interrupt controllers. It also initializes the global variables.
+*/
+
+int main(void)
+{
+ /* Initialize the system */
+ sysclk_init();
+ board_init();
+
+ /* Initialize the console uart */
+ configure_console();
+
+ puts(STRING_HEADER);
+
+ /* Systick configuration. */
+ if (SysTick_Config(sysclk_get_cpu_hz() / 1000)) {
+ puts("-F- Systick configuration error\r");
+ }
+
+ bno055_i2c_bus_init();
+ /* (BNO055_RESET, BNO055_BOOT_LOAD, BNO055_I2C_ADDR, RGB_LEG_Green) */
+ bno055_gpio_config();
+
+ /* (BNO055 external interrupt) */
+ extint_initialize(&bno055_interrupt_handler);
+
+ /* Initialize BNO055 smart sensor */
+ sensor_init();
+
+ /* Assigns initial values to the global variable sleep_state */
+ sleep_state = SLEEP_STATE_AWAKE;
+
+ /* RGB LED Green = OFF */
+ ioport_set_pin_level(RGB_LED_G, RGB_LED_G_OFF);
+
+ /* Infinite loop */
+ while (true) {
+ if(read_sensor_data & sensor_data_changed) {
+ /* Read Euler angles from BNO055 and send it via USART */
+ sensors_data_print();
+ /* Reset the timer's interrupt flag */
+ read_sensor_data = false;
+ }
+
+ /* Check sensor reset button (SW0 button on the main board) */
+ if (ioport_get_pin_level(BUTTON_0_PIN) == BUTTON_0_ACTIVE) {
+ /* turn LED0 on */
+ ioport_set_pin_level(LED_0_PIN, LED_0_ACTIVE);
+ /* Reset BNO055 */
+ sensor_init();
+ } else {
+ /* turn LED off if the button is not pressed */
+ ioport_set_pin_level(LED_0_PIN, !LED_0_ACTIVE);
+ }
+ }
+}
+
+
+/// @cond 0
+/**INDENT-OFF**/
+#ifdef __cplusplus
+}
+#endif
+/**INDENT-ON**/
+/// @endcond \ No newline at end of file
diff --git a/thirdparty/sensor/bno055/example/same70q21_same70_xplained/conf_bno055.h b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/conf_bno055.h
new file mode 100644
index 00000000..c8568e7f
--- /dev/null
+++ b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/conf_bno055.h
@@ -0,0 +1,83 @@
+/**
+ * \file
+ *
+ * \brief BNO055 configuration.
+ *
+ * Copyright (c) 2015 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ * Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+
+/* Configuration of the mma7341 accelerometer driver */
+/*
+ * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
+ */
+
+#ifndef CONF_BNO055_H_INCLUDED
+#define CONF_BNO055_H_INCLUDED
+
+#define BNO055_I2C_SLAVE_ADDRESS BNO055_I2C_ADDR2
+
+/* Slave address select pin */
+#define BNO055_PIN_SLAVE_ADDR_SELECT PIO_PB3_IDX
+/* Boot */
+#define BNO055_PIN_BOOT PIO_PC17_IDX
+/* Reset */
+#define BNO055_PIN_RESET PIO_PD25_IDX
+
+/* Sleep State Macros */
+#define SLEEP_STATE_SLEEP UINT8_C(1)
+#define SLEEP_STATE_AWAKE UINT8_C(0)
+
+/* name RGB LED Macros */
+#define RGB_LED_R PIO_PC30_IDX
+#define RGB_LED_G PIO_PB2_IDX
+#define RGB_LED_B PIO_PA0_IDX
+#define RGB_LED_G_ON false
+#define RGB_LED_G_OFF true
+#define RGB_LED_B_VALUE (0xFFFF - ((bno055_euler_data.h) * 0xFFFF / 5759))
+#define RBG_LED_B_OFF UINT16_C(0xFFFF)
+#define RGB_LED_R_VALUE (0xFFFF - ((bno055_euler_data.p) * 0xFFFF / 5759))
+#define RBG_LED_R_OFF UINT16_C(0xFFFF)
+
+/* determines the active state of BNO055 reset */
+#define BNO055_RESET_ACTIVE false
+/* the delay required to wait for BNO055 chip to reset */
+#define BNO055_RESET_DELAY_MS UINT32_C(650)
+
+#define BNO055_TWIHS_CLK 400000
+
+#endif /* CONF_BNO055_H_INCLUDED */
diff --git a/thirdparty/sensor/bno055/example/same70q21_same70_xplained/conf_board.h b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/conf_board.h
new file mode 100644
index 00000000..5a6229c2
--- /dev/null
+++ b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/conf_board.h
@@ -0,0 +1,59 @@
+/**
+ * \file
+ *
+ * \brief Board configuration.
+ *
+ * Copyright (c) 2015-2016 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ * Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+/*
+ * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
+ */
+
+#ifndef CONF_BOARD_H_INCLUDED
+#define CONF_BOARD_H_INCLUDED
+
+/* Enable ICache and DCache */
+#define CONF_BOARD_ENABLE_CACHE
+
+/** Enable Com Port. */
+#define CONF_BOARD_UART_CONSOLE
+
+/** Enable TWIHS port. */
+#define CONF_BOARD_TWIHS0
+
+#endif /* CONF_BOARD_H_INCLUDED */
diff --git a/thirdparty/sensor/bno055/example/same70q21_same70_xplained/conf_clock.h b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/conf_clock.h
new file mode 100644
index 00000000..5e5927de
--- /dev/null
+++ b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/conf_clock.h
@@ -0,0 +1,104 @@
+/**
+ * \file
+ *
+ * \brief SAME70 clock configuration.
+ *
+ * Copyright (c) 2015 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ * Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+/*
+ * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
+ */
+
+#ifndef CONF_CLOCK_H_INCLUDED
+#define CONF_CLOCK_H_INCLUDED
+
+// ===== System Clock (MCK) Source Options
+//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_SLCK_RC
+//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_SLCK_XTAL
+//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_SLCK_BYPASS
+//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_MAINCK_4M_RC
+//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_MAINCK_8M_RC
+//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_MAINCK_12M_RC
+//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_MAINCK_XTAL
+//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_MAINCK_BYPASS
+#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_PLLACK
+//#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_UPLLCK
+
+// ===== Processor Clock (HCLK) Prescaler Options (Fhclk = Fsys / (SYSCLK_PRES))
+#define CONFIG_SYSCLK_PRES SYSCLK_PRES_1
+//#define CONFIG_SYSCLK_PRES SYSCLK_PRES_2
+//#define CONFIG_SYSCLK_PRES SYSCLK_PRES_4
+//#define CONFIG_SYSCLK_PRES SYSCLK_PRES_8
+//#define CONFIG_SYSCLK_PRES SYSCLK_PRES_16
+//#define CONFIG_SYSCLK_PRES SYSCLK_PRES_32
+//#define CONFIG_SYSCLK_PRES SYSCLK_PRES_64
+//#define CONFIG_SYSCLK_PRES SYSCLK_PRES_3
+
+// ===== System Clock (MCK) Division Options (Fmck = Fhclk / (SYSCLK_DIV))
+#define CONFIG_SYSCLK_DIV 2
+
+// ===== PLL0 (A) Options (Fpll = (Fclk * PLL_mul) / PLL_div)
+// Use mul and div effective values here.
+#define CONFIG_PLL0_SOURCE PLL_SRC_MAINCK_XTAL
+#define CONFIG_PLL0_MUL 25
+#define CONFIG_PLL0_DIV 1
+
+// ===== UPLL (UTMI) Hardware fixed at 480 MHz.
+
+// ===== USB Clock Source Options (Fusb = FpllX / USB_div)
+// Use div effective value here.
+//#define CONFIG_USBCLK_SOURCE USBCLK_SRC_PLL0
+#define CONFIG_USBCLK_SOURCE USBCLK_SRC_UPLL
+#define CONFIG_USBCLK_DIV 1
+
+// ===== Target frequency (Processor clock)
+// - XTAL frequency: 12MHz
+// - System clock source: PLLA
+// - System clock prescaler: 1 (divided by 1)
+// - System clock divider: 2 (divided by 2)
+// - PLLA source: XTAL
+// - PLLA output: XTAL * 25 / 1
+// - Processor clock: 12 * 25 / 1 / 1 = 300MHz
+// - System clock: 300 / 2 = 150MHz
+// ===== Target frequency (USB Clock)
+// - USB clock source: UPLL
+// - USB clock divider: 1 (not divided)
+// - UPLL frequency: 480MHz
+// - USB clock: 480 / 1 = 480MHz
+
+#endif /* CONF_CLOCK_H_INCLUDED */
diff --git a/thirdparty/sensor/bno055/example/same70q21_same70_xplained/conf_uart_serial.h b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/conf_uart_serial.h
new file mode 100644
index 00000000..3e418a5c
--- /dev/null
+++ b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/conf_uart_serial.h
@@ -0,0 +1,61 @@
+/**
+ * \file
+ *
+ * \brief USART Serial Configuration
+ *
+ * Copyright (C) 2015 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ * Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+/*
+ * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
+ */
+
+#ifndef CONF_USART_SERIAL_H_INCLUDED
+#define CONF_USART_SERIAL_H_INCLUDED
+
+/** UART Interface */
+#define CONF_UART CONSOLE_UART
+/** Baudrate setting */
+#define CONF_UART_BAUDRATE (115200UL)
+/** Character length setting */
+#define CONF_UART_CHAR_LENGTH US_MR_CHRL_8_BIT
+/** Parity setting */
+#define CONF_UART_PARITY US_MR_PAR_NO
+/** Stop bits setting */
+#define CONF_UART_STOP_BITS US_MR_NBSTOP_1_BIT
+
+#endif/* CONF_USART_SERIAL_H_INCLUDED */
diff --git a/thirdparty/sensor/bno055/example/same70q21_same70_xplained/doxygen/doxyfile.doxygen b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/doxygen/doxyfile.doxygen
new file mode 100644
index 00000000..12e88145
--- /dev/null
+++ b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/doxygen/doxyfile.doxygen
@@ -0,0 +1,1645 @@
+# Doxyfile 1.7.1
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = "BNO055 Accelerometer example for SAME70-XPLD"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = .
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF = YES
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES += asf_license_start=" "
+ALIASES += asf_license_stop=" "
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this
+# tag. The format is ext=language, where ext is a file extension, and language
+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter
+# and setter methods for a property. Setting this option to YES (the default)
+# will make doxygen to replace the get and set methods by a property in the
+# documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penality.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will rougly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = YES
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = YES
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = NO
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. The create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = YES
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "[WARNING]$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = ../../bno055_example.c ../../../bno055.c ../../../bno055_port.c ../../../../../../sam/drivers/pio/pio.c ../../../../../../sam/drivers/pio/pio_handler.c ../../../../../../common/utils/interrupt/interrupt_sam_nvic.c ../../../../../../sam/utils/cmsis/same70/source/templates/system_same70.c ../../../../../../common/services/clock/same70/sysclk.c ../../../../../../sam/drivers/pmc/pmc.c ../../../../../../sam/drivers/pmc/sleep.c ../../../../../../common/services/delay/sam/cycle_counter.c ../../../../../../sam/drivers/twihs/twihs.c ../../../../../../sam/drivers/uart/uart.c ../../../../../../common/services/serial/usart_serial.c ../../../../../../sam/drivers/usart/usart.c ../../../../../../common/utils/stdio/read.c ../../../../../../common/utils/stdio/write.c ../../../../../../sam/boards/same70_xplained/init.c ../../../../../../sam/drivers/mpu/mpu.c ../conf_bno055.h ../conf_board.h ../conf_clock.h ../conf_uart_serial.h ../../../bno055.h ../../../bno055_doc.h ../../../bno055_port.h ../../../../../../common/services/gpio/gpio.h ../../../../../../common/services/gpio/sam_gpio/sam_gpio.h ../../../../../../sam/drivers/pio/pio.h ../../../../../../sam/drivers/pio/pio_handler.h ../../../../../../sam/utils/compiler.h ../../../../../../sam/utils/header_files/io.h ../../../../../../sam/utils/status_codes.h ../../../../../../sam/utils/preprocessor/mrepeat.h ../../../../../../sam/utils/preprocessor/preprocessor.h ../../../../../../sam/utils/preprocessor/stringz.h ../../../../../../sam/utils/preprocessor/tpaste.h ../../../../../../sam/utils/fpu/fpu.h ../../../../../../common/utils/interrupt.h ../../../../../../common/utils/interrupt/interrupt_sam_nvic.h ../../../../../../common/utils/parts.h ../../../../../../sam/utils/cmsis/same70/include/same70.h ../../../../../../sam/utils/cmsis/same70/include/same70j19.h ../../../../../../sam/utils/cmsis/same70/include/same70j19b.h ../../../../../../sam/utils/cmsis/same70/include/same70j20.h ../../../../../../sam/utils/cmsis/same70/include/same70j20b.h ../../../../../../sam/utils/cmsis/same70/include/same70j21.h ../../../../../../sam/utils/cmsis/same70/include/same70j21b.h ../../../../../../sam/utils/cmsis/same70/include/same70n19.h ../../../../../../sam/utils/cmsis/same70/include/same70n19b.h ../../../../../../sam/utils/cmsis/same70/include/same70n20.h ../../../../../../sam/utils/cmsis/same70/include/same70n20b.h ../../../../../../sam/utils/cmsis/same70/include/same70n21.h ../../../../../../sam/utils/cmsis/same70/include/same70n21b.h ../../../../../../sam/utils/cmsis/same70/include/same70q19.h ../../../../../../sam/utils/cmsis/same70/include/same70q19b.h ../../../../../../sam/utils/cmsis/same70/include/same70q20.h ../../../../../../sam/utils/cmsis/same70/include/same70q20b.h ../../../../../../sam/utils/cmsis/same70/include/same70q21.h ../../../../../../sam/utils/cmsis/same70/include/same70q21b.h ../../../../../../sam/utils/cmsis/same70/include/component/acc.h ../../../../../../sam/utils/cmsis/same70/include/component/aes.h ../../../../../../sam/utils/cmsis/same70/include/component/afec.h ../../../../../../sam/utils/cmsis/same70/include/component/chipid.h ../../../../../../sam/utils/cmsis/same70/include/component/dacc.h ../../../../../../sam/utils/cmsis/same70/include/component/efc.h ../../../../../../sam/utils/cmsis/same70/include/component/gmac.h ../../../../../../sam/utils/cmsis/same70/include/component/gpbr.h ../../../../../../sam/utils/cmsis/same70/include/component/hsmci.h ../../../../../../sam/utils/cmsis/same70/include/component/i2sc.h ../../../../../../sam/utils/cmsis/same70/include/component/icm.h ../../../../../../sam/utils/cmsis/same70/include/component/isi.h ../../../../../../sam/utils/cmsis/same70/include/component/matrix.h ../../../../../../sam/utils/cmsis/same70/include/component/mcan.h ../../../../../../sam/utils/cmsis/same70/include/component/pio.h ../../../../../../sam/utils/cmsis/same70/include/component/pmc.h ../../../../../../sam/utils/cmsis/same70/include/component/pwm.h ../../../../../../sam/utils/cmsis/same70/include/component/qspi.h ../../../../../../sam/utils/cmsis/same70/include/component/rstc.h ../../../../../../sam/utils/cmsis/same70/include/component/rswdt.h ../../../../../../sam/utils/cmsis/same70/include/component/rtc.h ../../../../../../sam/utils/cmsis/same70/include/component/rtt.h ../../../../../../sam/utils/cmsis/same70/include/component/sdramc.h ../../../../../../sam/utils/cmsis/same70/include/component/smc.h ../../../../../../sam/utils/cmsis/same70/include/component/spi.h ../../../../../../sam/utils/cmsis/same70/include/component/ssc.h ../../../../../../sam/utils/cmsis/same70/include/component/supc.h ../../../../../../sam/utils/cmsis/same70/include/component/tc.h ../../../../../../sam/utils/cmsis/same70/include/component/trng.h ../../../../../../sam/utils/cmsis/same70/include/component/twihs.h ../../../../../../sam/utils/cmsis/same70/include/component/uart.h ../../../../../../sam/utils/cmsis/same70/include/component/usart.h ../../../../../../sam/utils/cmsis/same70/include/component/usbhs.h ../../../../../../sam/utils/cmsis/same70/include/component/utmi.h ../../../../../../sam/utils/cmsis/same70/include/component/wdt.h ../../../../../../sam/utils/cmsis/same70/include/component/xdmac.h ../../../../../../sam/utils/cmsis/same70/include/instance/acc.h ../../../../../../sam/utils/cmsis/same70/include/instance/aes.h ../../../../../../sam/utils/cmsis/same70/include/instance/afec0.h ../../../../../../sam/utils/cmsis/same70/include/instance/afec1.h ../../../../../../sam/utils/cmsis/same70/include/instance/chipid.h ../../../../../../sam/utils/cmsis/same70/include/instance/dacc.h ../../../../../../sam/utils/cmsis/same70/include/instance/efc.h ../../../../../../sam/utils/cmsis/same70/include/instance/gmac.h ../../../../../../sam/utils/cmsis/same70/include/instance/gpbr.h ../../../../../../sam/utils/cmsis/same70/include/instance/hsmci.h ../../../../../../sam/utils/cmsis/same70/include/instance/i2sc0.h ../../../../../../sam/utils/cmsis/same70/include/instance/i2sc1.h ../../../../../../sam/utils/cmsis/same70/include/instance/icm.h ../../../../../../sam/utils/cmsis/same70/include/instance/isi.h ../../../../../../sam/utils/cmsis/same70/include/instance/matrix.h ../../../../../../sam/utils/cmsis/same70/include/instance/mcan0.h ../../../../../../sam/utils/cmsis/same70/include/instance/mcan1.h ../../../../../../sam/utils/cmsis/same70/include/instance/pioa.h ../../../../../../sam/utils/cmsis/same70/include/instance/piob.h ../../../../../../sam/utils/cmsis/same70/include/instance/pioc.h ../../../../../../sam/utils/cmsis/same70/include/instance/piod.h ../../../../../../sam/utils/cmsis/same70/include/instance/pioe.h ../../../../../../sam/utils/cmsis/same70/include/instance/pmc.h ../../../../../../sam/utils/cmsis/same70/include/instance/pwm0.h ../../../../../../sam/utils/cmsis/same70/include/instance/pwm1.h ../../../../../../sam/utils/cmsis/same70/include/instance/qspi.h ../../../../../../sam/utils/cmsis/same70/include/instance/rstc.h ../../../../../../sam/utils/cmsis/same70/include/instance/rswdt.h ../../../../../../sam/utils/cmsis/same70/include/instance/rtc.h ../../../../../../sam/utils/cmsis/same70/include/instance/rtt.h ../../../../../../sam/utils/cmsis/same70/include/instance/sdramc.h ../../../../../../sam/utils/cmsis/same70/include/instance/smc.h ../../../../../../sam/utils/cmsis/same70/include/instance/spi0.h ../../../../../../sam/utils/cmsis/same70/include/instance/spi1.h ../../../../../../sam/utils/cmsis/same70/include/instance/ssc.h ../../../../../../sam/utils/cmsis/same70/include/instance/supc.h ../../../../../../sam/utils/cmsis/same70/include/instance/tc0.h ../../../../../../sam/utils/cmsis/same70/include/instance/tc1.h ../../../../../../sam/utils/cmsis/same70/include/instance/tc2.h ../../../../../../sam/utils/cmsis/same70/include/instance/tc3.h ../../../../../../sam/utils/cmsis/same70/include/instance/trng.h ../../../../../../sam/utils/cmsis/same70/include/instance/twihs0.h ../../../../../../sam/utils/cmsis/same70/include/instance/twihs1.h ../../../../../../sam/utils/cmsis/same70/include/instance/twihs2.h ../../../../../../sam/utils/cmsis/same70/include/instance/uart0.h ../../../../../../sam/utils/cmsis/same70/include/instance/uart1.h ../../../../../../sam/utils/cmsis/same70/include/instance/uart2.h ../../../../../../sam/utils/cmsis/same70/include/instance/uart3.h ../../../../../../sam/utils/cmsis/same70/include/instance/uart4.h ../../../../../../sam/utils/cmsis/same70/include/instance/usart0.h ../../../../../../sam/utils/cmsis/same70/include/instance/usart1.h ../../../../../../sam/utils/cmsis/same70/include/instance/usart2.h ../../../../../../sam/utils/cmsis/same70/include/instance/usbhs.h ../../../../../../sam/utils/cmsis/same70/include/instance/utmi.h ../../../../../../sam/utils/cmsis/same70/include/instance/wdt.h ../../../../../../sam/utils/cmsis/same70/include/instance/xdmac.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70j19.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70j19b.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70j20.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70j20b.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70j21.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70j21b.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70n19.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70n19b.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70n20.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70n20b.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70n21.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70n21b.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70q19.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70q19b.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70q20.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70q20b.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70q21.h ../../../../../../sam/utils/cmsis/same70/include/pio/same70q21b.h ../../../../../../sam/utils/cmsis/same70/source/templates/system_same70.h ../../../../../../common/services/clock/genclk.h ../../../../../../common/services/clock/osc.h ../../../../../../common/services/clock/pll.h ../../../../../../common/services/clock/same70/genclk.h ../../../../../../common/services/clock/same70/osc.h ../../../../../../common/services/clock/same70/pll.h ../../../../../../common/services/clock/same70/sysclk.h ../../../../../../common/services/clock/sysclk.h ../../../../../../sam/drivers/pmc/pmc.h ../../../../../../sam/drivers/pmc/sleep.h ../../../../../../common/services/delay/delay.h ../../../../../../common/services/delay/sam/cycle_counter.h ../../../../../../sam/drivers/twihs/twihs.h ../../../../../../sam/drivers/uart/uart.h ../../../../../../common/utils/stdio/stdio_serial/stdio_serial.h ../../../../../../common/services/serial/sam_uart/uart_serial.h ../../../../../../common/services/serial/serial.h ../../../../../../sam/drivers/usart/usart.h ../../../../../../sam/boards/same70_xplained/same70_xplained.h ../../../../../../common/boards/board.h ../../../../../../common/services/ioport/ioport.h ../../../../../../common/services/ioport/sam/ioport_pio.h ../../../../../../sam/drivers/mpu/mpu.h ../../../../../../sam/boards/same70_xplained/led.h
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS = *.c \
+ *.h \
+ *.s \
+ *.S
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH = ./
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = YES
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the stylesheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP = YES
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+# will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 1
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list.
+
+USE_INLINE_TREES = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using prerendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX = NO
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvances is that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = RTF
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = YES
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = YES
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH = .. ../../.. ../../../../../../common/services/gpio ../../../../../../sam/drivers/pio ../../../../../../sam/utils ../../../../../../sam/utils/header_files ../../../../../../sam/utils/preprocessor ../../../../../../sam/utils/fpu ../../../../../../common/utils ../../../../../../sam/utils/cmsis/same70/include ../../../../../../sam/utils/cmsis/same70/source/templates ../../../../../../common/services/clock ../../../../../../sam/drivers/pmc ../../../../../../common/services/delay ../../../../../../sam/drivers/twihs ../../../../../../sam/drivers/uart ../../../../../../common/utils/stdio/stdio_serial ../../../../../../common/services/serial ../../../../../../common/services/serial/sam_uart ../../../../../../sam/drivers/usart ../../../../../../sam/boards ../../../../../../sam/boards/same70_xplained ../../../../../../common/boards ../../../../../../common/services/ioport ../../../../../../sam/drivers/mpu
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED = __DOXYGEN__ __AVR32_ABI_COMPILER__ __attribute__()= __GNUC__=4 ARM_MATH_CM7=true BOARD=SAME70_XPLAINED __SAME70Q21B__ __SAME70Q21B__
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = YES
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS = 0
+
+# By default doxygen will write a font called FreeSans.ttf to the output
+# directory and reference it in all dot files that doxygen generates. This
+# font does not include all possible unicode characters however, so when you need
+# these (or just want a differently looking font) you can specify the font name
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
+# which can be done by putting it in a standard location or by setting the
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
+# containing the font.
+
+DOT_FONTNAME = FreeSans
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the output directory to look for the
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a
+# different font using DOT_FONTNAME you can set the path where dot
+# can find it using this tag.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH = YES
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = gif
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = YES
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
diff --git a/thirdparty/sensor/bno055/example/same70q21_same70_xplained/gcc/Makefile b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/gcc/Makefile
new file mode 100644
index 00000000..ae3f617b
--- /dev/null
+++ b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/gcc/Makefile
@@ -0,0 +1,52 @@
+# List of available make goals:
+#
+# all Default target, builds the project
+# clean Clean up the project
+# rebuild Rebuild the project
+#
+#
+# doc Build the documentation
+# cleandoc Clean up the documentation
+# rebuilddoc Rebuild the documentation
+#
+# Copyright (c) 2011 Atmel Corporation. All rights reserved.
+#
+# \asf_license_start
+#
+# \page License
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# 3. The name of Atmel may not be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# 4. This software may only be redistributed and used in connection with an
+# Atmel microcontroller product.
+#
+# THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+# EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# \asf_license_stop
+#
+
+# Include the common Makefile, which will also include the project specific
+# config.mk file.
+MAKEFILE_PATH = ../../../../../../sam/utils/make/Makefile.sam.in
+include $(MAKEFILE_PATH)
diff --git a/thirdparty/sensor/bno055/example/same70q21_same70_xplained/gcc/asf.h b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/gcc/asf.h
new file mode 100644
index 00000000..319346a6
--- /dev/null
+++ b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/gcc/asf.h
@@ -0,0 +1,118 @@
+/**
+ * \file
+ *
+ * \brief Autogenerated API include file for the Atmel Software Framework (ASF)
+ *
+ * Copyright (c) 2012 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ * Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+
+#ifndef ASF_H
+#define ASF_H
+
+/*
+ * This file includes all API header files for the selected drivers from ASF.
+ * Note: There might be duplicate includes required by more than one driver.
+ *
+ * The file is automatically generated and will be re-written when
+ * running the ASF driver selector tool. Any changes will be discarded.
+ */
+
+// From module: Accelerometer BNO055
+#include <bno055.h>
+#include <bno055_port.h>
+
+// From module: Common SAM compiler driver
+#include <compiler.h>
+#include <status_codes.h>
+
+// From module: Delay routines
+#include <delay.h>
+
+// From module: GPIO - General purpose Input/Output
+#include <gpio.h>
+
+// From module: Generic board support
+#include <board.h>
+
+// From module: IOPORT - General purpose I/O service
+#include <ioport.h>
+
+// From module: Interrupt management - SAM implementation
+#include <interrupt.h>
+
+// From module: MPU - Memory Protect Unit
+#include <mpu.h>
+
+// From module: PIO - Parallel Input/Output Controller
+#include <pio.h>
+
+// From module: PMC - Power Management Controller
+#include <pmc.h>
+#include <sleep.h>
+
+// From module: Part identification macros
+#include <parts.h>
+
+// From module: SAM FPU driver
+#include <fpu.h>
+
+// From module: SAME70 XPLD LED support enabled
+#include <led.h>
+
+// From module: Standard serial I/O (stdio) - SAM implementation
+#include <stdio_serial.h>
+
+// From module: System Clock Control - SAME70 implementation
+#include <sysclk.h>
+
+// From module: TWI - Two-wire Interface High Speed
+#include <twihs.h>
+
+// From module: UART - Univ. Async Rec/Trans
+#include <uart.h>
+
+// From module: USART - Serial interface - SAM implementation for devices with both UART and USART
+#include <serial.h>
+
+// From module: USART - Univ. Syn Async Rec/Trans
+#include <usart.h>
+
+// From module: pio_handler support enabled
+#include <pio_handler.h>
+
+#endif // ASF_H
diff --git a/thirdparty/sensor/bno055/example/same70q21_same70_xplained/gcc/config.mk b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/gcc/config.mk
new file mode 100644
index 00000000..c18c7e76
--- /dev/null
+++ b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/gcc/config.mk
@@ -0,0 +1,173 @@
+#
+# Copyright (c) 2011 Atmel Corporation. All rights reserved.
+#
+# \asf_license_start
+#
+# \page License
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# 3. The name of Atmel may not be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# 4. This software may only be redistributed and used in connection with an
+# Atmel microcontroller product.
+#
+# THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+# EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# \asf_license_stop
+#
+
+# Path to top level ASF directory relative to this project directory.
+PRJ_PATH = ../../../../../..
+
+# Target CPU architecture: cortex-m3, cortex-m4
+ARCH = cortex-m7
+
+# Target part: none, sam3n4 or sam4l4aa
+PART = same70q21b
+
+# Application target name. Given with suffix .a for library and .elf for a
+# standalone application.
+TARGET_FLASH = bno055_example_flash.elf
+TARGET_SRAM = bno055_example_sram.elf
+
+# List of C source files.
+CSRCS = \
+ common/services/clock/same70/sysclk.c \
+ common/services/delay/sam/cycle_counter.c \
+ common/services/serial/usart_serial.c \
+ common/utils/interrupt/interrupt_sam_nvic.c \
+ common/utils/stdio/read.c \
+ common/utils/stdio/write.c \
+ sam/boards/same70_xplained/init.c \
+ sam/drivers/mpu/mpu.c \
+ sam/drivers/pio/pio.c \
+ sam/drivers/pio/pio_handler.c \
+ sam/drivers/pmc/pmc.c \
+ sam/drivers/pmc/sleep.c \
+ sam/drivers/twihs/twihs.c \
+ sam/drivers/uart/uart.c \
+ sam/drivers/usart/usart.c \
+ sam/utils/cmsis/same70/source/templates/gcc/startup_same70.c \
+ sam/utils/cmsis/same70/source/templates/system_same70.c \
+ sam/utils/syscalls/gcc/syscalls.c \
+ thirdparty/sensor/bno055/bno055.c \
+ thirdparty/sensor/bno055/bno055_port.c \
+ thirdparty/sensor/bno055/example/bno055_example.c
+
+# List of assembler source files.
+ASSRCS =
+
+# List of include paths.
+INC_PATH = \
+ common/boards \
+ common/services/clock \
+ common/services/delay \
+ common/services/gpio \
+ common/services/ioport \
+ common/services/serial \
+ common/services/serial/sam_uart \
+ common/utils \
+ common/utils/stdio/stdio_serial \
+ sam/boards \
+ sam/boards/same70_xplained \
+ sam/drivers/mpu \
+ sam/drivers/pio \
+ sam/drivers/pmc \
+ sam/drivers/twihs \
+ sam/drivers/uart \
+ sam/drivers/usart \
+ sam/utils \
+ sam/utils/cmsis/same70/include \
+ sam/utils/cmsis/same70/source/templates \
+ sam/utils/fpu \
+ sam/utils/header_files \
+ sam/utils/preprocessor \
+ thirdparty/CMSIS/Include \
+ thirdparty/CMSIS/Lib/GCC \
+ thirdparty/sensor/bno055 \
+ thirdparty/sensor/bno055/example/same70q21_same70_xplained \
+ thirdparty/sensor/bno055/example/same70q21_same70_xplained/gcc
+
+# Additional search paths for libraries.
+LIB_PATH = \
+ thirdparty/CMSIS/Lib/GCC
+
+# List of libraries to use during linking.
+LIBS = \
+ arm_cortexM7lfsp_math_softfp \
+ m
+
+# Path relative to top level directory pointing to a linker script.
+LINKER_SCRIPT_FLASH = sam/utils/linker_scripts/same70/same70q21/gcc/flash.ld
+LINKER_SCRIPT_SRAM = sam/utils/linker_scripts/same70/same70q21/gcc/sram.ld
+
+# Path relative to top level directory pointing to a linker script.
+DEBUG_SCRIPT_FLASH = sam/boards/same70_xplained/debug_scripts/gcc/same70_xplained_flash.gdb
+DEBUG_SCRIPT_SRAM = sam/boards/same70_xplained/debug_scripts/gcc/same70_xplained_sram.gdb
+
+# Project type parameter: all, sram or flash
+PROJECT_TYPE = all
+
+# Additional options for debugging. By default the common Makefile.in will
+# add -g3.
+DBGFLAGS =
+
+# Application optimization used during compilation and linking:
+# -O0, -O1, -O2, -O3 or -Os
+OPTIMIZATION = -O1
+
+# Extra flags to use when archiving.
+ARFLAGS =
+
+# Extra flags to use when assembling.
+ASFLAGS = \
+ -mfloat-abi=softfp \
+ -mfpu=fpv5-sp-d16
+
+# Extra flags to use when compiling.
+CFLAGS = \
+ -mfloat-abi=softfp \
+ -mfpu=fpv5-sp-d16
+
+# Extra flags to use when preprocessing.
+#
+# Preprocessor symbol definitions
+# To add a definition use the format "-D name[=definition]".
+# To cancel a definition use the format "-U name".
+#
+# The most relevant symbols to define for the preprocessor are:
+# BOARD Target board in use, see boards/board.h for a list.
+# EXT_BOARD Optional extension board in use, see boards/board.h for a list.
+CPPFLAGS = \
+ -D ARM_MATH_CM7=true \
+ -D BOARD=SAME70_XPLAINED \
+ -D __SAME70Q21B__ \
+ -D printf=iprintf \
+ -D scanf=iscanf
+
+# Extra flags to use when linking
+LDFLAGS = \
+
+# Pre- and post-build commands
+PREBUILD_CMD =
+POSTBUILD_CMD = \ No newline at end of file
diff --git a/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/asf.h b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/asf.h
new file mode 100644
index 00000000..319346a6
--- /dev/null
+++ b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/asf.h
@@ -0,0 +1,118 @@
+/**
+ * \file
+ *
+ * \brief Autogenerated API include file for the Atmel Software Framework (ASF)
+ *
+ * Copyright (c) 2012 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ * Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+
+#ifndef ASF_H
+#define ASF_H
+
+/*
+ * This file includes all API header files for the selected drivers from ASF.
+ * Note: There might be duplicate includes required by more than one driver.
+ *
+ * The file is automatically generated and will be re-written when
+ * running the ASF driver selector tool. Any changes will be discarded.
+ */
+
+// From module: Accelerometer BNO055
+#include <bno055.h>
+#include <bno055_port.h>
+
+// From module: Common SAM compiler driver
+#include <compiler.h>
+#include <status_codes.h>
+
+// From module: Delay routines
+#include <delay.h>
+
+// From module: GPIO - General purpose Input/Output
+#include <gpio.h>
+
+// From module: Generic board support
+#include <board.h>
+
+// From module: IOPORT - General purpose I/O service
+#include <ioport.h>
+
+// From module: Interrupt management - SAM implementation
+#include <interrupt.h>
+
+// From module: MPU - Memory Protect Unit
+#include <mpu.h>
+
+// From module: PIO - Parallel Input/Output Controller
+#include <pio.h>
+
+// From module: PMC - Power Management Controller
+#include <pmc.h>
+#include <sleep.h>
+
+// From module: Part identification macros
+#include <parts.h>
+
+// From module: SAM FPU driver
+#include <fpu.h>
+
+// From module: SAME70 XPLD LED support enabled
+#include <led.h>
+
+// From module: Standard serial I/O (stdio) - SAM implementation
+#include <stdio_serial.h>
+
+// From module: System Clock Control - SAME70 implementation
+#include <sysclk.h>
+
+// From module: TWI - Two-wire Interface High Speed
+#include <twihs.h>
+
+// From module: UART - Univ. Async Rec/Trans
+#include <uart.h>
+
+// From module: USART - Serial interface - SAM implementation for devices with both UART and USART
+#include <serial.h>
+
+// From module: USART - Univ. Syn Async Rec/Trans
+#include <usart.h>
+
+// From module: pio_handler support enabled
+#include <pio_handler.h>
+
+#endif // ASF_H
diff --git a/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example.eww b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example.eww
new file mode 100644
index 00000000..a6dd26ee
--- /dev/null
+++ b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example.eww
@@ -0,0 +1,9 @@
+<workspace>
+ <batchBuild></batchBuild>
+ <project>
+ <path>$WS_DIR$\bno055_example_flash.ewp</path>
+ </project>
+ <project>
+ <path>$WS_DIR$\bno055_example_sram.ewp</path>
+ </project>
+</workspace>
diff --git a/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example_flash.ewd b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example_flash.ewd
new file mode 100644
index 00000000..ce3af510
--- /dev/null
+++ b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example_flash.ewd
@@ -0,0 +1,2339 @@
+<project>
+ <fileVersion>2</fileVersion>
+ <configuration>
+ <name>Debug</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>1</debug>
+ <settings>
+ <name>C-SPY</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>23</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCVariant</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacFile</name>
+ <state>$PROJ_DIR$\../../../../../../sam/boards/same70_xplained/debug_scripts/iar/same70_xplained_flash.mac</state>
+ </option>
+ <option>
+ <name>MemOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MemFile</name>
+ <state>$TOOLKIT_DIR$\CONFIG\debugger\Atmel\ATSAME70Q21B.ddf</state>
+ </option>
+ <option>
+ <name>RunToEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RunToName</name>
+ <state>main</state>
+ </option>
+ <option>
+ <name>CExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCDDFArgumentProducer</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadSuppressDownload</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDownloadVerifyAll</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCProductVersion</name>
+ <state>6.40.4.54214</state>
+ </option>
+ <option>
+ <name>OCDynDriverList</name>
+ <state>CMSISDAP_ID</state>
+ </option>
+ <option>
+ <name>OCLastSavedByProductVersion</name>
+ <state>6.40.1.53794</state>
+ </option>
+ <option>
+ <name>OCDownloadAttachToProgram</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>UseFlashLoader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CLowLevel</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacFile2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CDevice</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>FlashLoadersV3</name>
+ <state>$TOOLKIT_DIR$\config\flashloader\Atmel\SAME70Q21B\same70q21b-flash.board</state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OverrideDefFlashBoard</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesOffset1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesUse1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDeviceConfigMacroFile</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ARMSIM_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCSimDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCSimEnablePSP</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspOverrideConfig</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspConfigFile</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ANGEL_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CCAngelHeartbeat</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CAngelCommunication</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CAngelCommBaud</name>
+ <version>0</version>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CAngelCommPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ANGELTCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoAngelLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AngelLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CMSISDAP_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CMSISDAPInterfaceRadio</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>GDBSERVER_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJTagBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IARROM_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CRomLogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRomLogFileEditB</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CRomCommPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRomCommBaud</name>
+ <version>0</version>
+ <state>7</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IJET_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetAttachSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeConfigFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetResetList</name>
+ <version>0</version>
+ <state>33</state>
+ </option>
+ <option>
+ <name>IjetHWResetDuration</name>
+ <state>300</state>
+ </option>
+ <option>
+ <name>IjetHWResetDelay</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>IjetPowerFromProbe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetPowerRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>IjetInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTargetEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetProtocolRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetSwoPin</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>IjetSwoPrescalerList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetRestoreBreakpointsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetUpdateBreakpointsEdit</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>RDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCHKERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchDummy</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>JLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>14</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>JLinkSpeed</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>CCJLinkDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJLinkHWResetDelay</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>JLinkInitialSpeed</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>CCDoJlinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkCommRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>CCJLinkSpeedRadioV2</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCUSBDevice</name>
+ <version>1</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceRadio</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCJLinkAttachSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJLinkResetList</name>
+ <version>6</version>
+ <state>7</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJLinkUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCTcpIpAlt</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTcpIpSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSourceDummy</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>LMIFTDI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>LmiftdiSpeed</name>
+ <state>500</state>
+ </option>
+ <option>
+ <name>CCLmiftdiDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiftdiLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>MACRAIGOR_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>3</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>jtag</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>EmuSpeed</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>DoEmuMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>EmuMultiTarget</name>
+ <state>0@ARM7TDMI</state>
+ </option>
+ <option>
+ <name>EmuHWReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CEmuCommBaud</name>
+ <version>0</version>
+ <state>4</state>
+ </option>
+ <option>
+ <name>CEmuCommPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>jtago</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>UnusedAddr</name>
+ <state>0x00800000</state>
+ </option>
+ <option>
+ <name>CCMacraigorHWResetDelay</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCJTagBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCMacraigorInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMacraigorInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>PEMICRO_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCPEMicroAttachSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCPEMicroInterfaceList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPEMicroResetDelay</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCPEMicroJtagSpeed</name>
+ <state>#UNINITIALIZED#</state>
+ </option>
+ <option>
+ <name>CCJPEMicroShowSettings</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCPEMicroUSBDevice</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPEMicroSerialPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJPEMicroTCPIPAutoScanNetwork</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCPEMicroTCPIP</name>
+ <state>10.0.0.1</state>
+ </option>
+ <option>
+ <name>CCPEMicroCommCmdLineProducer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>RDI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CRDIDriverDll</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>CRDILogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRDILogFileEdit</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCRDIHWReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>RDIJTAGJET_ID</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CRDILogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRDILogFileEdit</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCRDIHWReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>JTAGjetConfigure</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>STLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkResetList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>THIRDPARTY_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CThirdPartyDriverDll</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileEditB</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>XDS100_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCXDS100AttachSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TIPackageOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TIPackage</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCXds100InterfaceList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>BoardFile</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <debuggerPlugins>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB6_Plugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>
+ <loadFlag>1</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin</file>
+ <loadFlag>1</loadFlag>
+ </plugin>
+ </debuggerPlugins>
+ </configuration>
+ <configuration>
+ <name>Release</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>0</debug>
+ <settings>
+ <name>C-SPY</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>23</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCVariant</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacFile</name>
+ <state>$PROJ_DIR$\../../../../../../sam/boards/same70_xplained/debug_scripts/iar/same70_xplained_flash.mac</state>
+ </option>
+ <option>
+ <name>MemOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MemFile</name>
+ <state>$TOOLKIT_DIR$\CONFIG\debugger\Atmel\ATSAME70Q21B.ddf</state>
+ </option>
+ <option>
+ <name>RunToEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RunToName</name>
+ <state>main</state>
+ </option>
+ <option>
+ <name>CExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCDDFArgumentProducer</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadSuppressDownload</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDownloadVerifyAll</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCProductVersion</name>
+ <state>6.40.4.54214</state>
+ </option>
+ <option>
+ <name>OCDynDriverList</name>
+ <state>CMSISDAP_ID</state>
+ </option>
+ <option>
+ <name>OCLastSavedByProductVersion</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadAttachToProgram</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>UseFlashLoader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CLowLevel</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacFile2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CDevice</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>FlashLoadersV3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OverrideDefFlashBoard</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesOffset1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesUse1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDeviceConfigMacroFile</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ARMSIM_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCSimDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCSimEnablePSP</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspOverrideConfig</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspConfigFile</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ANGEL_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CCAngelHeartbeat</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CAngelCommunication</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CAngelCommBaud</name>
+ <version>0</version>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CAngelCommPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ANGELTCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoAngelLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AngelLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CMSISDAP_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CMSISDAPInterfaceRadio</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>GDBSERVER_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJTagBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IARROM_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CRomLogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRomLogFileEditB</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CRomCommPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRomCommBaud</name>
+ <version>0</version>
+ <state>7</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IJET_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetAttachSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeConfigFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetResetList</name>
+ <version>0</version>
+ <state>33</state>
+ </option>
+ <option>
+ <name>IjetHWResetDuration</name>
+ <state>300</state>
+ </option>
+ <option>
+ <name>IjetHWResetDelay</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>IjetPowerFromProbe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetPowerRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>IjetInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTargetEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetProtocolRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetSwoPin</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>IjetSwoPrescalerList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetRestoreBreakpointsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetUpdateBreakpointsEdit</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>RDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCHKERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchDummy</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>JLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>14</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>JLinkSpeed</name>
+ <state>32</state>
+ </option>
+ <option>
+ <name>CCJLinkDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJLinkHWResetDelay</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>JLinkInitialSpeed</name>
+ <state>32</state>
+ </option>
+ <option>
+ <name>CCDoJlinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkCommRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>CCJLinkSpeedRadioV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCUSBDevice</name>
+ <version>1</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkAttachSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJLinkResetList</name>
+ <version>6</version>
+ <state>5</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJLinkUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCTcpIpAlt</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTcpIpSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSourceDummy</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>LMIFTDI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>LmiftdiSpeed</name>
+ <state>500</state>
+ </option>
+ <option>
+ <name>CCLmiftdiDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiftdiLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>MACRAIGOR_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>3</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>jtag</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>EmuSpeed</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>DoEmuMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>EmuMultiTarget</name>
+ <state>0@ARM7TDMI</state>
+ </option>
+ <option>
+ <name>EmuHWReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CEmuCommBaud</name>
+ <version>0</version>
+ <state>4</state>
+ </option>
+ <option>
+ <name>CEmuCommPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>jtago</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>UnusedAddr</name>
+ <state>0x00800000</state>
+ </option>
+ <option>
+ <name>CCMacraigorHWResetDelay</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCJTagBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCMacraigorInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMacraigorInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>PEMICRO_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCPEMicroAttachSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCPEMicroInterfaceList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPEMicroResetDelay</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCPEMicroJtagSpeed</name>
+ <state>#UNINITIALIZED#</state>
+ </option>
+ <option>
+ <name>CCJPEMicroShowSettings</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCPEMicroUSBDevice</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPEMicroSerialPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJPEMicroTCPIPAutoScanNetwork</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCPEMicroTCPIP</name>
+ <state>10.0.0.1</state>
+ </option>
+ <option>
+ <name>CCPEMicroCommCmdLineProducer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>RDI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CRDIDriverDll</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>CRDILogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRDILogFileEdit</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCRDIHWReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>RDIJTAGJET_ID</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CRDILogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRDILogFileEdit</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCRDIHWReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>JTAGjetConfigure</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>STLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkResetList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>THIRDPARTY_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CThirdPartyDriverDll</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileEditB</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>XDS100_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCXDS100AttachSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TIPackageOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TIPackage</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCXds100InterfaceList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>BoardFile</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <debuggerPlugins>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB6_Plugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>
+ <loadFlag>1</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin</file>
+ <loadFlag>1</loadFlag>
+ </plugin>
+ </debuggerPlugins>
+ </configuration>
+</project>
diff --git a/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example_flash.ewp b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example_flash.ewp
new file mode 100644
index 00000000..fa6602da
--- /dev/null
+++ b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example_flash.ewp
@@ -0,0 +1,2670 @@
+<project>
+ <fileVersion>2</fileVersion>
+ <configuration>
+ <name>Debug</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>1</debug>
+ <settings>
+ <name>General</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <version>21</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>ExePath</name>
+ <state>Debug\Exe</state>
+ </option>
+ <option>
+ <name>ObjPath</name>
+ <state>Debug\Obj</state>
+ </option>
+ <option>
+ <name>ListPath</name>
+ <state>Debug\List</state>
+ </option>
+ <option>
+ <name>Variant</name>
+ <version>20</version>
+ <state>35</state>
+ </option>
+ <option>
+ <name>GEndianMode</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>Input variant</name>
+ <version>3</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Input description</name>
+ <state>Full formatting.</state>
+ </option>
+ <option>
+ <name>Output variant</name>
+ <version>2</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Output description</name>
+ <state>Full formatting.</state>
+ </option>
+ <option>
+ <name>GOutputBinary</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>FPU</name>
+ <version>5</version>
+ <state>12</state>
+ </option>
+ <option>
+ <name>OGCoreOrChip</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelect</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelectSlave</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RTDescription</name>
+ <state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
+ </option>
+ <option>
+ <name>OGProductVersion</name>
+ <state>5.10.0.159</state>
+ </option>
+ <option>
+ <name>OGLastSavedByProductVersion</name>
+ <state>6.40.1.53794</state>
+ </option>
+ <option>
+ <name>GeneralEnableMisra</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraVerbose</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGChipSelectEditMenu</name>
+ <state>ATSAME70Q21B Atmel ATSAME70Q21B</state>
+ </option>
+ <option>
+ <name>GenLowLevelInterface</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GEndianModeBE</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGBufferedTerminalOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenStdoutInterface</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>GeneralMisraVer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>RTConfigPath2</name>
+ <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
+ </option>
+ <option>
+ <name>GFPUCoreSlave</name>
+ <version>21</version>
+ <state>41</state>
+ </option>
+ <option>
+ <name>GBECoreSlave</name>
+ <version>20</version>
+ <state>35</state>
+ </option>
+ <option>
+ <name>OGUseCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGUseCmsisDspLib</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ICCARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>28</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CCOptimizationNoSizeConstraints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDefines</name>
+ <state>BOARD=SAME70_XPLAINED</state>
+ <state>__SAME70Q21B__</state>
+ <state>ARM_MATH_CM7=true</state>
+ </option>
+ <option>
+ <name>CCPreprocFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocComments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMnemonics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMessages</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagSuppress</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagRemark</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagWarning</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagError</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCAllowList</name>
+ <version>0</version>
+ <state>1111111</state>
+ </option>
+ <option>
+ <name>CCDebugInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IEndianMode</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCLangConformance</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSignedPlainChar</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRequirePrototypes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagWarnAreErr</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCompilerRuntimeInfo</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>CCLibConfigHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>PreInclude</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CompilerMisraOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCIncludePath2</name>
+ <state>$PROJ_DIR$/../../../../../../common/services/serial/sam_uart</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/preprocessor</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/source/templates</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/pio</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include</state>
+ <state>$PROJ_DIR$/../../..</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/fpu</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/serial</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/mpu</state>
+ <state>$PROJ_DIR$/../../../../../../common/utils</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/clock</state>
+ <state>$PROJ_DIR$/../../../../../../sam/boards</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/twihs</state>
+ <state>$PROJ_DIR$/../../../../../../common/utils/stdio/stdio_serial</state>
+ <state>$PROJ_DIR$/../../../../../../sam/boards/same70_xplained</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/gpio</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/delay</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/uart</state>
+ <state>$PROJ_DIR$/..</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/usart</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/header_files</state>
+ <state>$PROJ_DIR$/../../../../../../common/boards</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/ioport</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/pmc</state>
+ <state>$PROJ_DIR$/.</state>
+ </option>
+ <option>
+ <name>CCStdIncCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCodeSection</name>
+ <state>.text</state>
+ </option>
+ <option>
+ <name>IInterwork2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IProcessorMode2</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevel</name>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CCOptStrategy</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevelSlave</name>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>CCPosIndRopi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndRwpi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndNoDynInit</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccLang</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCDialect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccAllowVLA</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCppDialect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccExceptions</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccRTTI</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccStaticDestr</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccCppInlineSemantics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccFloatSemantics</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>AARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>8</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>AObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>ACaseSensitivity</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacroChars</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnWhat</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnOne</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>ADebug</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AltRegisterNames</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ADefines</name>
+ <state>BOARD=SAME70_XPLAINED</state>
+ <state>__SAME70Q21B__</state>
+ <state>ARM_MATH_CM7=true</state>
+ </option>
+ <option>
+ <name>AList</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AListHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AListing</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Includes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacDefs</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacExps</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacExec</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OnlyAssed</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MultiLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLengthCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLength</name>
+ <state>80</state>
+ </option>
+ <option>
+ <name>TabSpacing</name>
+ <state>8</state>
+ </option>
+ <option>
+ <name>AXRef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDefines</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefInternal</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDual</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AOutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>AMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ALimitErrorsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ALimitErrorsEdit</name>
+ <state>100</state>
+ </option>
+ <option>
+ <name>AIgnoreStdInclude</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AUserIncludes</name>
+ <state>$PROJ_DIR$/../../../../../../common/services/serial/sam_uart</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/preprocessor</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/source/templates</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/pio</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include</state>
+ <state>$PROJ_DIR$/../../..</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/fpu</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/serial</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/mpu</state>
+ <state>$PROJ_DIR$/../../../../../../common/utils</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/clock</state>
+ <state>$PROJ_DIR$/../../../../../../sam/boards</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/twihs</state>
+ <state>$PROJ_DIR$/../../../../../../common/utils/stdio/stdio_serial</state>
+ <state>$PROJ_DIR$/../../../../../../sam/boards/same70_xplained</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/gpio</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/delay</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/uart</state>
+ <state>$PROJ_DIR$/..</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/usart</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/header_files</state>
+ <state>$PROJ_DIR$/../../../../../../common/boards</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/ioport</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/pmc</state>
+ <state>$PROJ_DIR$/.</state>
+ </option>
+ <option>
+ <name>AExtraOptionsCheckV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AExtraOptionsV2</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>OBJCOPY</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OOCOutputFormat</name>
+ <version>2</version>
+ <state>2</state>
+ </option>
+ <option>
+ <name>OCOutputOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OOCOutputFile</name>
+ <state>bno055_example_flash.bin</state>
+ </option>
+ <option>
+ <name>OOCCommandLineProducer</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OOCObjCopyEnable</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CUSTOM</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <extensions></extensions>
+ <cmdline></cmdline>
+ </data>
+ </settings>
+ <settings>
+ <name>BICOMP</name>
+ <archiveVersion>0</archiveVersion>
+ <data></data>
+ </settings>
+ <settings>
+ <name>BUILDACTION</name>
+ <archiveVersion>1</archiveVersion>
+ <data>
+ <prebuild></prebuild>
+ <postbuild></postbuild>
+ </data>
+ </settings>
+ <settings>
+ <name>ILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>15</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>IlinkOutputFile</name>
+ <state>bno055_example_flash.out</state>
+ </option>
+ <option>
+ <name>IlinkLibIOConfig</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>XLinkMisraHandler</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkInputFileSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkDebugInfoEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkKeepSymbols</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySymbol</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySegment</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryAlign</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkConfigDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkMapFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogInitialization</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogModule</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogSection</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogVeneer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfOverride</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkIcfFile</name>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/linker_scripts/same70/same70q21/iar/flash.icf</state>
+ </option>
+ <option>
+ <name>IlinkIcfFileSlave</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkSuppressDiags</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsRem</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsWarn</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsErr</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkWarningsAreErrors</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkUseExtraOptions</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkExtraOptions</name>
+ </option>
+ <option>
+ <name>IlinkLowLevelInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAutoLibEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAdditionalLibs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkOverrideProgramEntryLabel</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabelSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabel</name>
+ <state>__iar_program_start</state>
+ </option>
+ <option>
+ <name>DoFill</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>FillerByte</name>
+ <state>0xFF</state>
+ </option>
+ <option>
+ <name>FillerStart</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>FillerEnd</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>CrcSize</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcAlign</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcPoly</name>
+ <state>0x11021</state>
+ </option>
+ <option>
+ <name>CrcCompl</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcBitOrder</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcInitialValue</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>DoCrc</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkBufferedTerminalOutput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkStdoutInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcFullSize</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIElfToolPostProcess</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogAutoLibSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogRedirSymbols</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogUnusedFragments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcReverseByteOrder</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcUseAsInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptInline</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsAllow</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsForce</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptMergeDuplSections</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOptUseVfe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptForceVfe</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackAnalysisEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackControlFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkStackCallGraphFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CrcAlgorithm</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcUnitSize</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IARCHIVE</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>IarchiveInputs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IarchiveOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IarchiveOutput</name>
+ <state>###Unitialized###</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>BILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data></data>
+ </settings>
+ </configuration>
+ <configuration>
+ <name>Release</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>0</debug>
+ <settings>
+ <name>General</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <version>21</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>ExePath</name>
+ <state>Release\Exe</state>
+ </option>
+ <option>
+ <name>ObjPath</name>
+ <state>Release\Obj</state>
+ </option>
+ <option>
+ <name>ListPath</name>
+ <state>Release\List</state>
+ </option>
+ <option>
+ <name>Variant</name>
+ <version>20</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GEndianMode</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>Input variant</name>
+ <version>3</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Input description</name>
+ <state>Full formatting.</state>
+ </option>
+ <option>
+ <name>Output variant</name>
+ <version>2</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Output description</name>
+ <state>Full formatting.</state>
+ </option>
+ <option>
+ <name>GOutputBinary</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>FPU</name>
+ <version>5</version>
+ <state>7</state>
+ </option>
+ <option>
+ <name>OGCoreOrChip</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelect</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelectSlave</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RTDescription</name>
+ <state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
+ </option>
+ <option>
+ <name>OGProductVersion</name>
+ <state>5.10.0.159</state>
+ </option>
+ <option>
+ <name>OGLastSavedByProductVersion</name>
+ <state>6.30.1.53141</state>
+ </option>
+ <option>
+ <name>GeneralEnableMisra</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraVerbose</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGChipSelectEditMenu</name>
+ <state>ATSAME70Q21B Atmel ATSAME70Q21B</state>
+ </option>
+ <option>
+ <name>GenLowLevelInterface</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GEndianModeBE</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGBufferedTerminalOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenStdoutInterface</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>GeneralMisraVer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>RTConfigPath2</name>
+ <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
+ </option>
+ <option>
+ <name>GFPUCoreSlave</name>
+ <version>21</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GBECoreSlave</name>
+ <version>20</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGUseCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGUseCmsisDspLib</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ICCARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>28</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CCOptimizationNoSizeConstraints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDefines</name>
+ <state>BOARD=SAME70_XPLAINED</state>
+ <state>__SAME70Q21B__</state>
+ <state>ARM_MATH_CM7=true</state>
+ </option>
+ <option>
+ <name>CCPreprocFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocComments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMnemonics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMessages</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagSuppress</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagRemark</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagWarning</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagError</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCAllowList</name>
+ <version>0</version>
+ <state>1111111</state>
+ </option>
+ <option>
+ <name>CCDebugInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IEndianMode</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCLangConformance</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSignedPlainChar</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRequirePrototypes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagWarnAreErr</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCompilerRuntimeInfo</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>CCLibConfigHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>PreInclude</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CompilerMisraOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCIncludePath2</name>
+ <state>$PROJ_DIR$/../../../../../../common/services/serial/sam_uart</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/preprocessor</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/source/templates</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/pio</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include</state>
+ <state>$PROJ_DIR$/../../..</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/fpu</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/serial</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/mpu</state>
+ <state>$PROJ_DIR$/../../../../../../common/utils</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/clock</state>
+ <state>$PROJ_DIR$/../../../../../../sam/boards</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/twihs</state>
+ <state>$PROJ_DIR$/../../../../../../common/utils/stdio/stdio_serial</state>
+ <state>$PROJ_DIR$/../../../../../../sam/boards/same70_xplained</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/gpio</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/delay</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/uart</state>
+ <state>$PROJ_DIR$/..</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/usart</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/header_files</state>
+ <state>$PROJ_DIR$/../../../../../../common/boards</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/ioport</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/pmc</state>
+ <state>$PROJ_DIR$/.</state>
+ </option>
+ <option>
+ <name>CCStdIncCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCodeSection</name>
+ <state>.text</state>
+ </option>
+ <option>
+ <name>IInterwork2</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IProcessorMode2</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevel</name>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CCOptStrategy</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevelSlave</name>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>CCPosIndRopi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndRwpi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndNoDynInit</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccLang</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCDialect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccAllowVLA</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCppDialect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccExceptions</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccRTTI</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccStaticDestr</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccCppInlineSemantics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccFloatSemantics</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>AARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>8</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>AObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>ACaseSensitivity</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacroChars</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnWhat</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnOne</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>ADebug</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AltRegisterNames</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ADefines</name>
+ <state>BOARD=SAME70_XPLAINED</state>
+ <state>__SAME70Q21B__</state>
+ <state>ARM_MATH_CM7=true</state>
+ </option>
+ <option>
+ <name>AList</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AListHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AListing</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Includes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacDefs</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacExps</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacExec</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OnlyAssed</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MultiLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLengthCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLength</name>
+ <state>80</state>
+ </option>
+ <option>
+ <name>TabSpacing</name>
+ <state>8</state>
+ </option>
+ <option>
+ <name>AXRef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDefines</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefInternal</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDual</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AOutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>AMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ALimitErrorsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ALimitErrorsEdit</name>
+ <state>100</state>
+ </option>
+ <option>
+ <name>AIgnoreStdInclude</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AUserIncludes</name>
+ <state>$PROJ_DIR$/../../../../../../common/services/serial/sam_uart</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/preprocessor</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/source/templates</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/pio</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include</state>
+ <state>$PROJ_DIR$/../../..</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/fpu</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/serial</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/mpu</state>
+ <state>$PROJ_DIR$/../../../../../../common/utils</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/clock</state>
+ <state>$PROJ_DIR$/../../../../../../sam/boards</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/twihs</state>
+ <state>$PROJ_DIR$/../../../../../../common/utils/stdio/stdio_serial</state>
+ <state>$PROJ_DIR$/../../../../../../sam/boards/same70_xplained</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/gpio</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/delay</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/uart</state>
+ <state>$PROJ_DIR$/..</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/usart</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/header_files</state>
+ <state>$PROJ_DIR$/../../../../../../common/boards</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/ioport</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/pmc</state>
+ <state>$PROJ_DIR$/.</state>
+ </option>
+ <option>
+ <name>AExtraOptionsCheckV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AExtraOptionsV2</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>OBJCOPY</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OOCOutputFormat</name>
+ <version>2</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCOutputOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OOCOutputFile</name>
+ <state>bno055_example_flash.bin</state>
+ </option>
+ <option>
+ <name>OOCCommandLineProducer</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OOCObjCopyEnable</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CUSTOM</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <extensions></extensions>
+ <cmdline></cmdline>
+ </data>
+ </settings>
+ <settings>
+ <name>BICOMP</name>
+ <archiveVersion>0</archiveVersion>
+ <data></data>
+ </settings>
+ <settings>
+ <name>BUILDACTION</name>
+ <archiveVersion>1</archiveVersion>
+ <data>
+ <prebuild></prebuild>
+ <postbuild></postbuild>
+ </data>
+ </settings>
+ <settings>
+ <name>ILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>15</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>IlinkOutputFile</name>
+ <state>bno055_example_flash.out</state>
+ </option>
+ <option>
+ <name>IlinkLibIOConfig</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>XLinkMisraHandler</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkInputFileSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkDebugInfoEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkKeepSymbols</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySymbol</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySegment</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryAlign</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkConfigDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkMapFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogInitialization</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogModule</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogSection</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogVeneer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfFile</name>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/linker_scripts/same70/same70q21/iar/flash.icf</state>
+ </option>
+ <option>
+ <name>IlinkIcfFileSlave</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkSuppressDiags</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsRem</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsWarn</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsErr</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkWarningsAreErrors</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkUseExtraOptions</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkExtraOptions</name>
+ </option>
+ <option>
+ <name>IlinkLowLevelInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAutoLibEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAdditionalLibs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkOverrideProgramEntryLabel</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabelSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabel</name>
+ <state></state>
+ </option>
+ <option>
+ <name>DoFill</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>FillerByte</name>
+ <state>0xFF</state>
+ </option>
+ <option>
+ <name>FillerStart</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>FillerEnd</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>CrcSize</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcAlign</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcPoly</name>
+ <state>0x11021</state>
+ </option>
+ <option>
+ <name>CrcCompl</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcBitOrder</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcInitialValue</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>DoCrc</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkBufferedTerminalOutput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkStdoutInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcFullSize</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIElfToolPostProcess</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogAutoLibSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogRedirSymbols</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogUnusedFragments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcReverseByteOrder</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcUseAsInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptInline</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsAllow</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsForce</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptMergeDuplSections</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOptUseVfe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptForceVfe</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackAnalysisEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackControlFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkStackCallGraphFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CrcAlgorithm</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcUnitSize</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IARCHIVE</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>IarchiveInputs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IarchiveOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IarchiveOutput</name>
+ <state>###Unitialized###</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>BILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data></data>
+ </settings>
+ </configuration>
+ <group>
+ <name>common</name>
+ <group>
+ <name>utils</name>
+ <group>
+ <name>stdio</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/utils/stdio/write.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/utils/stdio/read.c</name>
+ </file>
+ <group>
+ <name>stdio_serial</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/utils/stdio/stdio_serial/stdio_serial.h</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>interrupt</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/utils/interrupt/interrupt_sam_nvic.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/utils/interrupt/interrupt_sam_nvic.h</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/utils/interrupt.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/utils/parts.h</name>
+ </file>
+ </group>
+ <group>
+ <name>services</name>
+ <group>
+ <name>clock</name>
+ <group>
+ <name>same70</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/same70/sysclk.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/same70/osc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/same70/genclk.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/same70/sysclk.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/same70/pll.h</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/osc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/genclk.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/sysclk.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/pll.h</name>
+ </file>
+ </group>
+ <group>
+ <name>serial</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/serial/usart_serial.c</name>
+ </file>
+ <group>
+ <name>sam_uart</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/serial/sam_uart/uart_serial.h</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/serial/serial.h</name>
+ </file>
+ </group>
+ <group>
+ <name>delay</name>
+ <group>
+ <name>sam</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/delay/sam/cycle_counter.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/delay/sam/cycle_counter.h</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/delay/delay.h</name>
+ </file>
+ </group>
+ <group>
+ <name>gpio</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/gpio/gpio.h</name>
+ </file>
+ <group>
+ <name>sam_gpio</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/gpio/sam_gpio/sam_gpio.h</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>ioport</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/ioport/ioport.h</name>
+ </file>
+ <group>
+ <name>sam</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/ioport/sam/ioport_pio.h</name>
+ </file>
+ </group>
+ </group>
+ </group>
+ <group>
+ <name>boards</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/boards/board.h</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>thirdparty</name>
+ <group>
+ <name>sensor</name>
+ <group>
+ <name>bno055</name>
+ <file>
+ <name>$PROJ_DIR$/../../../bno055.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../bno055_port.c</name>
+ </file>
+ <group>
+ <name>example</name>
+ <file>
+ <name>$PROJ_DIR$/../../bno055_example.c</name>
+ </file>
+ <group>
+ <name>same70q21_same70_xplained</name>
+ <file>
+ <name>$PROJ_DIR$/../conf_uart_serial.h</name>
+ </file>
+ <group>
+ <name>iar</name>
+ <file>
+ <name>$PROJ_DIR$/asf.h</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../conf_bno055.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../conf_board.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../conf_clock.h</name>
+ </file>
+ </group>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../bno055_port.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../bno055.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../bno055_doc.h</name>
+ </file>
+ </group>
+ </group>
+ </group>
+ <group>
+ <name>sam</name>
+ <group>
+ <name>utils</name>
+ <group>
+ <name>cmsis</name>
+ <group>
+ <name>same70</name>
+ <group>
+ <name>source</name>
+ <group>
+ <name>templates</name>
+ <group>
+ <name>iar</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/source/templates/iar/startup_same70.c</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/source/templates/system_same70.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/source/templates/system_same70.h</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>include</name>
+ <group>
+ <name>instance</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/pmc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/i2sc1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/smc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/mcan1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/matrix.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/uart3.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/piod.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/uart1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/usart1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/qspi.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/pioe.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/acc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/piob.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/hsmci.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/xdmac.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/rswdt.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/uart0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/twihs1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/tc3.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/i2sc0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/uart2.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/twihs0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/gmac.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/sdramc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/spi1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/usbhs.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/efc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/ssc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/rtc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/chipid.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/afec0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/trng.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/twihs2.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/tc1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/usart0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/wdt.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/spi0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/usart2.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/icm.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/rstc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/utmi.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/dacc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/afec1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/aes.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/rtt.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/mcan0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/gpbr.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/supc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/pwm1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/uart4.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/tc2.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/isi.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/pwm0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/pioa.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/tc0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/pioc.h</name>
+ </file>
+ </group>
+ <group>
+ <name>component</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/wdt.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/afec.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/spi.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/pio.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/acc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/qspi.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/hsmci.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/usbhs.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/chipid.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/isi.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/icm.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/rstc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/gmac.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/smc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/rswdt.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/pwm.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/matrix.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/utmi.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/usart.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/xdmac.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/aes.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/efc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/gpbr.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/mcan.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/supc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/pmc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/twihs.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/rtt.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/i2sc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/dacc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/uart.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/rtc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/sdramc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/ssc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/trng.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/tc.h</name>
+ </file>
+ </group>
+ <group>
+ <name>pio</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70j20.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70j19.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70q21b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70q21.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70j19b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70q19b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70n20.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70n21b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70q20b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70q20.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70j20b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70n19.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70n19b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70q19.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70j21.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70n20b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70j21b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70n21.h</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70n21b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70q20.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70n21.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70j19.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70n20b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70n20.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70q21b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70q20b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70j20b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70j20.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70q19b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70j19b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70j21.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70q19.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70n19.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70n19b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70q21.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70j21b.h</name>
+ </file>
+ </group>
+ </group>
+ </group>
+ <group>
+ <name>fpu</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/fpu/fpu.h</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/status_codes.h</name>
+ </file>
+ <group>
+ <name>preprocessor</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/preprocessor/mrepeat.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/preprocessor/preprocessor.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/preprocessor/tpaste.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/preprocessor/stringz.h</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/compiler.h</name>
+ </file>
+ <group>
+ <name>header_files</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/header_files/io.h</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>drivers</name>
+ <group>
+ <name>pmc</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/pmc/pmc.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/pmc/sleep.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/pmc/sleep.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/pmc/pmc.h</name>
+ </file>
+ </group>
+ <group>
+ <name>twihs</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/twihs/twihs.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/twihs/twihs.h</name>
+ </file>
+ </group>
+ <group>
+ <name>mpu</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/mpu/mpu.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/mpu/mpu.h</name>
+ </file>
+ </group>
+ <group>
+ <name>pio</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/pio/pio_handler.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/pio/pio.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/pio/pio_handler.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/pio/pio.h</name>
+ </file>
+ </group>
+ <group>
+ <name>usart</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/usart/usart.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/usart/usart.h</name>
+ </file>
+ </group>
+ <group>
+ <name>uart</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/uart/uart.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/uart/uart.h</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>boards</name>
+ <group>
+ <name>same70_xplained</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/boards/same70_xplained/init.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/boards/same70_xplained/led.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/boards/same70_xplained/same70_xplained.h</name>
+ </file>
+ </group>
+ </group>
+ </group>
+</project>
diff --git a/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example_sram.ewd b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example_sram.ewd
new file mode 100644
index 00000000..54f9714e
--- /dev/null
+++ b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example_sram.ewd
@@ -0,0 +1,2339 @@
+<project>
+ <fileVersion>2</fileVersion>
+ <configuration>
+ <name>Debug</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>1</debug>
+ <settings>
+ <name>C-SPY</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>23</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCVariant</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacFile</name>
+ <state>$PROJ_DIR$\../../../../../../sam/boards/same70_xplained/debug_scripts/iar/same70_xplained_sram.mac</state>
+ </option>
+ <option>
+ <name>MemOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MemFile</name>
+ <state>$TOOLKIT_DIR$\CONFIG\debugger\Atmel\ATSAME70Q21B.ddf</state>
+ </option>
+ <option>
+ <name>RunToEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RunToName</name>
+ <state>main</state>
+ </option>
+ <option>
+ <name>CExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCDDFArgumentProducer</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadSuppressDownload</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDownloadVerifyAll</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCProductVersion</name>
+ <state>6.40.4.54214</state>
+ </option>
+ <option>
+ <name>OCDynDriverList</name>
+ <state>CMSISDAP_ID</state>
+ </option>
+ <option>
+ <name>OCLastSavedByProductVersion</name>
+ <state>6.40.1.53794</state>
+ </option>
+ <option>
+ <name>OCDownloadAttachToProgram</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>UseFlashLoader</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CLowLevel</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacFile2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CDevice</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>FlashLoadersV3</name>
+ <state>$TOOLKIT_DIR$\config\flashloader\Atmel\SAME70Q21B\same70q21b-flash.board</state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OverrideDefFlashBoard</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesOffset1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesUse1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDeviceConfigMacroFile</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ARMSIM_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCSimDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCSimEnablePSP</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspOverrideConfig</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspConfigFile</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ANGEL_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CCAngelHeartbeat</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CAngelCommunication</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CAngelCommBaud</name>
+ <version>0</version>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CAngelCommPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ANGELTCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoAngelLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AngelLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CMSISDAP_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CMSISDAPInterfaceRadio</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>GDBSERVER_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJTagBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IARROM_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CRomLogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRomLogFileEditB</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CRomCommPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRomCommBaud</name>
+ <version>0</version>
+ <state>7</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IJET_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetAttachSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeConfigFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetResetList</name>
+ <version>0</version>
+ <state>33</state>
+ </option>
+ <option>
+ <name>IjetHWResetDuration</name>
+ <state>300</state>
+ </option>
+ <option>
+ <name>IjetHWResetDelay</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>IjetPowerFromProbe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetPowerRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>IjetInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTargetEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetProtocolRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetSwoPin</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>IjetSwoPrescalerList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetRestoreBreakpointsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetUpdateBreakpointsEdit</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>RDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCHKERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchDummy</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>JLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>14</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>JLinkSpeed</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>CCJLinkDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJLinkHWResetDelay</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>JLinkInitialSpeed</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>CCDoJlinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkCommRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>CCJLinkSpeedRadioV2</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCUSBDevice</name>
+ <version>1</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceRadio</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCJLinkAttachSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJLinkResetList</name>
+ <version>6</version>
+ <state>7</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJLinkUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCTcpIpAlt</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTcpIpSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSourceDummy</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>LMIFTDI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>LmiftdiSpeed</name>
+ <state>500</state>
+ </option>
+ <option>
+ <name>CCLmiftdiDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiftdiLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>MACRAIGOR_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>3</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>jtag</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>EmuSpeed</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>DoEmuMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>EmuMultiTarget</name>
+ <state>0@ARM7TDMI</state>
+ </option>
+ <option>
+ <name>EmuHWReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CEmuCommBaud</name>
+ <version>0</version>
+ <state>4</state>
+ </option>
+ <option>
+ <name>CEmuCommPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>jtago</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>UnusedAddr</name>
+ <state>0x00800000</state>
+ </option>
+ <option>
+ <name>CCMacraigorHWResetDelay</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCJTagBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCMacraigorInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMacraigorInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>PEMICRO_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCPEMicroAttachSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCPEMicroInterfaceList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPEMicroResetDelay</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCPEMicroJtagSpeed</name>
+ <state>#UNINITIALIZED#</state>
+ </option>
+ <option>
+ <name>CCJPEMicroShowSettings</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCPEMicroUSBDevice</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPEMicroSerialPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJPEMicroTCPIPAutoScanNetwork</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCPEMicroTCPIP</name>
+ <state>10.0.0.1</state>
+ </option>
+ <option>
+ <name>CCPEMicroCommCmdLineProducer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>RDI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CRDIDriverDll</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>CRDILogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRDILogFileEdit</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCRDIHWReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>RDIJTAGJET_ID</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CRDILogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRDILogFileEdit</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCRDIHWReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>JTAGjetConfigure</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>STLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkResetList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>THIRDPARTY_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CThirdPartyDriverDll</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileEditB</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>XDS100_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCXDS100AttachSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TIPackageOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TIPackage</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCXds100InterfaceList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>BoardFile</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <debuggerPlugins>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB6_Plugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>
+ <loadFlag>1</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin</file>
+ <loadFlag>1</loadFlag>
+ </plugin>
+ </debuggerPlugins>
+ </configuration>
+ <configuration>
+ <name>Release</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>0</debug>
+ <settings>
+ <name>C-SPY</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>23</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCVariant</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacFile</name>
+ <state>$PROJ_DIR$\../../../../../../sam/boards/same70_xplained/debug_scripts/iar/same70_xplained_sram.mac</state>
+ </option>
+ <option>
+ <name>MemOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MemFile</name>
+ <state>$TOOLKIT_DIR$\CONFIG\debugger\Atmel\ATSAME70Q21B.ddf</state>
+ </option>
+ <option>
+ <name>RunToEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RunToName</name>
+ <state>main</state>
+ </option>
+ <option>
+ <name>CExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCDDFArgumentProducer</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadSuppressDownload</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDownloadVerifyAll</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCProductVersion</name>
+ <state>6.40.4.54214</state>
+ </option>
+ <option>
+ <name>OCDynDriverList</name>
+ <state>CMSISDAP_ID</state>
+ </option>
+ <option>
+ <name>OCLastSavedByProductVersion</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadAttachToProgram</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>UseFlashLoader</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CLowLevel</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacFile2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CDevice</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>FlashLoadersV3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OverrideDefFlashBoard</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesOffset1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesUse1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDeviceConfigMacroFile</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ARMSIM_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCSimDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCSimEnablePSP</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspOverrideConfig</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspConfigFile</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ANGEL_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CCAngelHeartbeat</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CAngelCommunication</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CAngelCommBaud</name>
+ <version>0</version>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CAngelCommPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ANGELTCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoAngelLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AngelLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CMSISDAP_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CMSISDAPInterfaceRadio</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>GDBSERVER_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJTagBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IARROM_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CRomLogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRomLogFileEditB</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CRomCommPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRomCommBaud</name>
+ <version>0</version>
+ <state>7</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IJET_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetAttachSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeConfigFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetResetList</name>
+ <version>0</version>
+ <state>33</state>
+ </option>
+ <option>
+ <name>IjetHWResetDuration</name>
+ <state>300</state>
+ </option>
+ <option>
+ <name>IjetHWResetDelay</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>IjetPowerFromProbe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetPowerRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>IjetInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTargetEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetProtocolRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetSwoPin</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>IjetSwoPrescalerList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetRestoreBreakpointsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetUpdateBreakpointsEdit</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>RDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCHKERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchDummy</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>JLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>14</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>JLinkSpeed</name>
+ <state>32</state>
+ </option>
+ <option>
+ <name>CCJLinkDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJLinkHWResetDelay</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>JLinkInitialSpeed</name>
+ <state>32</state>
+ </option>
+ <option>
+ <name>CCDoJlinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkCommRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>CCJLinkSpeedRadioV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCUSBDevice</name>
+ <version>1</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkAttachSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJLinkResetList</name>
+ <version>6</version>
+ <state>5</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJLinkUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCTcpIpAlt</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTcpIpSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSourceDummy</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>LMIFTDI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>LmiftdiSpeed</name>
+ <state>500</state>
+ </option>
+ <option>
+ <name>CCLmiftdiDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiftdiLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>MACRAIGOR_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>3</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>jtag</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>EmuSpeed</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>DoEmuMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>EmuMultiTarget</name>
+ <state>0@ARM7TDMI</state>
+ </option>
+ <option>
+ <name>EmuHWReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CEmuCommBaud</name>
+ <version>0</version>
+ <state>4</state>
+ </option>
+ <option>
+ <name>CEmuCommPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>jtago</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>UnusedAddr</name>
+ <state>0x00800000</state>
+ </option>
+ <option>
+ <name>CCMacraigorHWResetDelay</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCJTagBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCMacraigorInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMacraigorInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>PEMICRO_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCPEMicroAttachSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCPEMicroInterfaceList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPEMicroResetDelay</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCPEMicroJtagSpeed</name>
+ <state>#UNINITIALIZED#</state>
+ </option>
+ <option>
+ <name>CCJPEMicroShowSettings</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCPEMicroUSBDevice</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPEMicroSerialPort</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJPEMicroTCPIPAutoScanNetwork</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCPEMicroTCPIP</name>
+ <state>10.0.0.1</state>
+ </option>
+ <option>
+ <name>CCPEMicroCommCmdLineProducer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>RDI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CRDIDriverDll</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>CRDILogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRDILogFileEdit</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCRDIHWReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>RDIJTAGJET_ID</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CRDILogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CRDILogFileEdit</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCRDIHWReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>JTAGjetConfigure</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>STLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkResetList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>THIRDPARTY_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CThirdPartyDriverDll</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileEditB</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>XDS100_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCXDS100AttachSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TIPackageOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TIPackage</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCXds100InterfaceList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>BoardFile</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <debuggerPlugins>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB6_Plugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>
+ <loadFlag>1</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin</file>
+ <loadFlag>1</loadFlag>
+ </plugin>
+ </debuggerPlugins>
+ </configuration>
+</project>
diff --git a/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example_sram.ewp b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example_sram.ewp
new file mode 100644
index 00000000..dc483f36
--- /dev/null
+++ b/thirdparty/sensor/bno055/example/same70q21_same70_xplained/iar/bno055_example_sram.ewp
@@ -0,0 +1,2670 @@
+<project>
+ <fileVersion>2</fileVersion>
+ <configuration>
+ <name>Debug</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>1</debug>
+ <settings>
+ <name>General</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <version>21</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>ExePath</name>
+ <state>Debug\Exe</state>
+ </option>
+ <option>
+ <name>ObjPath</name>
+ <state>Debug\Obj</state>
+ </option>
+ <option>
+ <name>ListPath</name>
+ <state>Debug\List</state>
+ </option>
+ <option>
+ <name>Variant</name>
+ <version>20</version>
+ <state>35</state>
+ </option>
+ <option>
+ <name>GEndianMode</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>Input variant</name>
+ <version>3</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Input description</name>
+ <state>Full formatting.</state>
+ </option>
+ <option>
+ <name>Output variant</name>
+ <version>2</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Output description</name>
+ <state>Full formatting.</state>
+ </option>
+ <option>
+ <name>GOutputBinary</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>FPU</name>
+ <version>5</version>
+ <state>12</state>
+ </option>
+ <option>
+ <name>OGCoreOrChip</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelect</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelectSlave</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RTDescription</name>
+ <state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
+ </option>
+ <option>
+ <name>OGProductVersion</name>
+ <state>5.10.0.159</state>
+ </option>
+ <option>
+ <name>OGLastSavedByProductVersion</name>
+ <state>6.40.1.53794</state>
+ </option>
+ <option>
+ <name>GeneralEnableMisra</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraVerbose</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGChipSelectEditMenu</name>
+ <state>ATSAME70Q21B Atmel ATSAME70Q21B</state>
+ </option>
+ <option>
+ <name>GenLowLevelInterface</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GEndianModeBE</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGBufferedTerminalOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenStdoutInterface</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>GeneralMisraVer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>RTConfigPath2</name>
+ <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
+ </option>
+ <option>
+ <name>GFPUCoreSlave</name>
+ <version>21</version>
+ <state>41</state>
+ </option>
+ <option>
+ <name>GBECoreSlave</name>
+ <version>20</version>
+ <state>35</state>
+ </option>
+ <option>
+ <name>OGUseCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGUseCmsisDspLib</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ICCARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>28</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CCOptimizationNoSizeConstraints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDefines</name>
+ <state>BOARD=SAME70_XPLAINED</state>
+ <state>__SAME70Q21B__</state>
+ <state>ARM_MATH_CM7=true</state>
+ </option>
+ <option>
+ <name>CCPreprocFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocComments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMnemonics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMessages</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagSuppress</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagRemark</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagWarning</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagError</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCAllowList</name>
+ <version>0</version>
+ <state>1111111</state>
+ </option>
+ <option>
+ <name>CCDebugInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IEndianMode</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCLangConformance</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSignedPlainChar</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRequirePrototypes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagWarnAreErr</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCompilerRuntimeInfo</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>CCLibConfigHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>PreInclude</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CompilerMisraOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCIncludePath2</name>
+ <state>$PROJ_DIR$/../../../../../../common/services/serial/sam_uart</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/preprocessor</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/source/templates</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/pio</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include</state>
+ <state>$PROJ_DIR$/../../..</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/fpu</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/serial</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/mpu</state>
+ <state>$PROJ_DIR$/../../../../../../common/utils</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/clock</state>
+ <state>$PROJ_DIR$/../../../../../../sam/boards</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/twihs</state>
+ <state>$PROJ_DIR$/../../../../../../common/utils/stdio/stdio_serial</state>
+ <state>$PROJ_DIR$/../../../../../../sam/boards/same70_xplained</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/gpio</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/delay</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/uart</state>
+ <state>$PROJ_DIR$/..</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/usart</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/header_files</state>
+ <state>$PROJ_DIR$/../../../../../../common/boards</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/ioport</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/pmc</state>
+ <state>$PROJ_DIR$/.</state>
+ </option>
+ <option>
+ <name>CCStdIncCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCodeSection</name>
+ <state>.text</state>
+ </option>
+ <option>
+ <name>IInterwork2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IProcessorMode2</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevel</name>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CCOptStrategy</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevelSlave</name>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>CCPosIndRopi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndRwpi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndNoDynInit</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccLang</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCDialect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccAllowVLA</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCppDialect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccExceptions</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccRTTI</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccStaticDestr</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccCppInlineSemantics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccFloatSemantics</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>AARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>8</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>AObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>ACaseSensitivity</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacroChars</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnWhat</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnOne</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>ADebug</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AltRegisterNames</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ADefines</name>
+ <state>BOARD=SAME70_XPLAINED</state>
+ <state>__SAME70Q21B__</state>
+ <state>ARM_MATH_CM7=true</state>
+ </option>
+ <option>
+ <name>AList</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AListHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AListing</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Includes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacDefs</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacExps</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacExec</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OnlyAssed</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MultiLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLengthCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLength</name>
+ <state>80</state>
+ </option>
+ <option>
+ <name>TabSpacing</name>
+ <state>8</state>
+ </option>
+ <option>
+ <name>AXRef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDefines</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefInternal</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDual</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AOutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>AMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ALimitErrorsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ALimitErrorsEdit</name>
+ <state>100</state>
+ </option>
+ <option>
+ <name>AIgnoreStdInclude</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AUserIncludes</name>
+ <state>$PROJ_DIR$/../../../../../../common/services/serial/sam_uart</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/preprocessor</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/source/templates</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/pio</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include</state>
+ <state>$PROJ_DIR$/../../..</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/fpu</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/serial</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/mpu</state>
+ <state>$PROJ_DIR$/../../../../../../common/utils</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/clock</state>
+ <state>$PROJ_DIR$/../../../../../../sam/boards</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/twihs</state>
+ <state>$PROJ_DIR$/../../../../../../common/utils/stdio/stdio_serial</state>
+ <state>$PROJ_DIR$/../../../../../../sam/boards/same70_xplained</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/gpio</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/delay</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/uart</state>
+ <state>$PROJ_DIR$/..</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/usart</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/header_files</state>
+ <state>$PROJ_DIR$/../../../../../../common/boards</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/ioport</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/pmc</state>
+ <state>$PROJ_DIR$/.</state>
+ </option>
+ <option>
+ <name>AExtraOptionsCheckV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AExtraOptionsV2</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>OBJCOPY</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OOCOutputFormat</name>
+ <version>2</version>
+ <state>2</state>
+ </option>
+ <option>
+ <name>OCOutputOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OOCOutputFile</name>
+ <state>bno055_example_sram.bin</state>
+ </option>
+ <option>
+ <name>OOCCommandLineProducer</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OOCObjCopyEnable</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CUSTOM</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <extensions></extensions>
+ <cmdline></cmdline>
+ </data>
+ </settings>
+ <settings>
+ <name>BICOMP</name>
+ <archiveVersion>0</archiveVersion>
+ <data></data>
+ </settings>
+ <settings>
+ <name>BUILDACTION</name>
+ <archiveVersion>1</archiveVersion>
+ <data>
+ <prebuild></prebuild>
+ <postbuild></postbuild>
+ </data>
+ </settings>
+ <settings>
+ <name>ILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>15</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>IlinkOutputFile</name>
+ <state>bno055_example_sram.out</state>
+ </option>
+ <option>
+ <name>IlinkLibIOConfig</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>XLinkMisraHandler</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkInputFileSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkDebugInfoEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkKeepSymbols</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySymbol</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySegment</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryAlign</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkConfigDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkMapFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogInitialization</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogModule</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogSection</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogVeneer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfOverride</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkIcfFile</name>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/linker_scripts/same70/same70q21/iar/sram.icf</state>
+ </option>
+ <option>
+ <name>IlinkIcfFileSlave</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkSuppressDiags</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsRem</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsWarn</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsErr</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkWarningsAreErrors</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkUseExtraOptions</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkExtraOptions</name>
+ </option>
+ <option>
+ <name>IlinkLowLevelInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAutoLibEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAdditionalLibs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkOverrideProgramEntryLabel</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabelSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabel</name>
+ <state>__iar_program_start</state>
+ </option>
+ <option>
+ <name>DoFill</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>FillerByte</name>
+ <state>0xFF</state>
+ </option>
+ <option>
+ <name>FillerStart</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>FillerEnd</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>CrcSize</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcAlign</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcPoly</name>
+ <state>0x11021</state>
+ </option>
+ <option>
+ <name>CrcCompl</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcBitOrder</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcInitialValue</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>DoCrc</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkBufferedTerminalOutput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkStdoutInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcFullSize</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIElfToolPostProcess</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogAutoLibSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogRedirSymbols</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogUnusedFragments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcReverseByteOrder</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcUseAsInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptInline</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsAllow</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsForce</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptMergeDuplSections</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOptUseVfe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptForceVfe</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackAnalysisEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackControlFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkStackCallGraphFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CrcAlgorithm</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcUnitSize</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IARCHIVE</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>IarchiveInputs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IarchiveOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IarchiveOutput</name>
+ <state>###Unitialized###</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>BILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data></data>
+ </settings>
+ </configuration>
+ <configuration>
+ <name>Release</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>0</debug>
+ <settings>
+ <name>General</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <version>21</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>ExePath</name>
+ <state>Release\Exe</state>
+ </option>
+ <option>
+ <name>ObjPath</name>
+ <state>Release\Obj</state>
+ </option>
+ <option>
+ <name>ListPath</name>
+ <state>Release\List</state>
+ </option>
+ <option>
+ <name>Variant</name>
+ <version>20</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GEndianMode</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>Input variant</name>
+ <version>3</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Input description</name>
+ <state>Full formatting.</state>
+ </option>
+ <option>
+ <name>Output variant</name>
+ <version>2</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Output description</name>
+ <state>Full formatting.</state>
+ </option>
+ <option>
+ <name>GOutputBinary</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>FPU</name>
+ <version>5</version>
+ <state>7</state>
+ </option>
+ <option>
+ <name>OGCoreOrChip</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelect</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelectSlave</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RTDescription</name>
+ <state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
+ </option>
+ <option>
+ <name>OGProductVersion</name>
+ <state>5.10.0.159</state>
+ </option>
+ <option>
+ <name>OGLastSavedByProductVersion</name>
+ <state>6.30.1.53141</state>
+ </option>
+ <option>
+ <name>GeneralEnableMisra</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraVerbose</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGChipSelectEditMenu</name>
+ <state>ATSAME70Q21B Atmel ATSAME70Q21B</state>
+ </option>
+ <option>
+ <name>GenLowLevelInterface</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GEndianModeBE</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGBufferedTerminalOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenStdoutInterface</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>GeneralMisraVer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>RTConfigPath2</name>
+ <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
+ </option>
+ <option>
+ <name>GFPUCoreSlave</name>
+ <version>21</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GBECoreSlave</name>
+ <version>20</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGUseCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGUseCmsisDspLib</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ICCARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>28</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CCOptimizationNoSizeConstraints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDefines</name>
+ <state>BOARD=SAME70_XPLAINED</state>
+ <state>__SAME70Q21B__</state>
+ <state>ARM_MATH_CM7=true</state>
+ </option>
+ <option>
+ <name>CCPreprocFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocComments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMnemonics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMessages</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagSuppress</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagRemark</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagWarning</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagError</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCAllowList</name>
+ <version>0</version>
+ <state>1111111</state>
+ </option>
+ <option>
+ <name>CCDebugInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IEndianMode</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCLangConformance</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSignedPlainChar</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRequirePrototypes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagWarnAreErr</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCompilerRuntimeInfo</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>CCLibConfigHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>PreInclude</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CompilerMisraOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCIncludePath2</name>
+ <state>$PROJ_DIR$/../../../../../../common/services/serial/sam_uart</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/preprocessor</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/source/templates</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/pio</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include</state>
+ <state>$PROJ_DIR$/../../..</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/fpu</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/serial</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/mpu</state>
+ <state>$PROJ_DIR$/../../../../../../common/utils</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/clock</state>
+ <state>$PROJ_DIR$/../../../../../../sam/boards</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/twihs</state>
+ <state>$PROJ_DIR$/../../../../../../common/utils/stdio/stdio_serial</state>
+ <state>$PROJ_DIR$/../../../../../../sam/boards/same70_xplained</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/gpio</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/delay</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/uart</state>
+ <state>$PROJ_DIR$/..</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/usart</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/header_files</state>
+ <state>$PROJ_DIR$/../../../../../../common/boards</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/ioport</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/pmc</state>
+ <state>$PROJ_DIR$/.</state>
+ </option>
+ <option>
+ <name>CCStdIncCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCodeSection</name>
+ <state>.text</state>
+ </option>
+ <option>
+ <name>IInterwork2</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IProcessorMode2</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevel</name>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CCOptStrategy</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevelSlave</name>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>CCPosIndRopi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndRwpi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndNoDynInit</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccLang</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCDialect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccAllowVLA</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCppDialect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccExceptions</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccRTTI</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccStaticDestr</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccCppInlineSemantics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccFloatSemantics</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>AARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>8</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>AObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>ACaseSensitivity</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacroChars</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnWhat</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnOne</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>ADebug</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AltRegisterNames</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ADefines</name>
+ <state>BOARD=SAME70_XPLAINED</state>
+ <state>__SAME70Q21B__</state>
+ <state>ARM_MATH_CM7=true</state>
+ </option>
+ <option>
+ <name>AList</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AListHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AListing</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Includes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacDefs</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacExps</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacExec</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OnlyAssed</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MultiLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLengthCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLength</name>
+ <state>80</state>
+ </option>
+ <option>
+ <name>TabSpacing</name>
+ <state>8</state>
+ </option>
+ <option>
+ <name>AXRef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDefines</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefInternal</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDual</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AOutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>AMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ALimitErrorsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ALimitErrorsEdit</name>
+ <state>100</state>
+ </option>
+ <option>
+ <name>AIgnoreStdInclude</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AUserIncludes</name>
+ <state>$PROJ_DIR$/../../../../../../common/services/serial/sam_uart</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/preprocessor</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/source/templates</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/pio</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include</state>
+ <state>$PROJ_DIR$/../../..</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/fpu</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/serial</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/mpu</state>
+ <state>$PROJ_DIR$/../../../../../../common/utils</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/clock</state>
+ <state>$PROJ_DIR$/../../../../../../sam/boards</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/twihs</state>
+ <state>$PROJ_DIR$/../../../../../../common/utils/stdio/stdio_serial</state>
+ <state>$PROJ_DIR$/../../../../../../sam/boards/same70_xplained</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/gpio</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/delay</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/uart</state>
+ <state>$PROJ_DIR$/..</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/usart</state>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/header_files</state>
+ <state>$PROJ_DIR$/../../../../../../common/boards</state>
+ <state>$PROJ_DIR$/../../../../../../common/services/ioport</state>
+ <state>$PROJ_DIR$/../../../../../../sam/drivers/pmc</state>
+ <state>$PROJ_DIR$/.</state>
+ </option>
+ <option>
+ <name>AExtraOptionsCheckV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AExtraOptionsV2</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>OBJCOPY</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OOCOutputFormat</name>
+ <version>2</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCOutputOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OOCOutputFile</name>
+ <state>bno055_example_sram.bin</state>
+ </option>
+ <option>
+ <name>OOCCommandLineProducer</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OOCObjCopyEnable</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CUSTOM</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <extensions></extensions>
+ <cmdline></cmdline>
+ </data>
+ </settings>
+ <settings>
+ <name>BICOMP</name>
+ <archiveVersion>0</archiveVersion>
+ <data></data>
+ </settings>
+ <settings>
+ <name>BUILDACTION</name>
+ <archiveVersion>1</archiveVersion>
+ <data>
+ <prebuild></prebuild>
+ <postbuild></postbuild>
+ </data>
+ </settings>
+ <settings>
+ <name>ILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>15</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>IlinkOutputFile</name>
+ <state>bno055_example_sram.out</state>
+ </option>
+ <option>
+ <name>IlinkLibIOConfig</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>XLinkMisraHandler</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkInputFileSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkDebugInfoEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkKeepSymbols</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySymbol</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySegment</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryAlign</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkConfigDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkMapFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogInitialization</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogModule</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogSection</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogVeneer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfFile</name>
+ <state>$PROJ_DIR$/../../../../../../sam/utils/linker_scripts/same70/same70q21/iar/sram.icf</state>
+ </option>
+ <option>
+ <name>IlinkIcfFileSlave</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkSuppressDiags</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsRem</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsWarn</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsErr</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkWarningsAreErrors</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkUseExtraOptions</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkExtraOptions</name>
+ </option>
+ <option>
+ <name>IlinkLowLevelInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAutoLibEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAdditionalLibs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkOverrideProgramEntryLabel</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabelSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabel</name>
+ <state></state>
+ </option>
+ <option>
+ <name>DoFill</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>FillerByte</name>
+ <state>0xFF</state>
+ </option>
+ <option>
+ <name>FillerStart</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>FillerEnd</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>CrcSize</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcAlign</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcPoly</name>
+ <state>0x11021</state>
+ </option>
+ <option>
+ <name>CrcCompl</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcBitOrder</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcInitialValue</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>DoCrc</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkBufferedTerminalOutput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkStdoutInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcFullSize</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIElfToolPostProcess</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogAutoLibSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogRedirSymbols</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogUnusedFragments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcReverseByteOrder</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcUseAsInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptInline</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsAllow</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsForce</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptMergeDuplSections</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOptUseVfe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptForceVfe</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackAnalysisEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackControlFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkStackCallGraphFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CrcAlgorithm</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcUnitSize</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IARCHIVE</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>IarchiveInputs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IarchiveOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IarchiveOutput</name>
+ <state>###Unitialized###</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>BILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data></data>
+ </settings>
+ </configuration>
+ <group>
+ <name>common</name>
+ <group>
+ <name>utils</name>
+ <group>
+ <name>stdio</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/utils/stdio/write.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/utils/stdio/read.c</name>
+ </file>
+ <group>
+ <name>stdio_serial</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/utils/stdio/stdio_serial/stdio_serial.h</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>interrupt</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/utils/interrupt/interrupt_sam_nvic.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/utils/interrupt/interrupt_sam_nvic.h</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/utils/interrupt.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/utils/parts.h</name>
+ </file>
+ </group>
+ <group>
+ <name>services</name>
+ <group>
+ <name>clock</name>
+ <group>
+ <name>same70</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/same70/sysclk.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/same70/osc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/same70/genclk.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/same70/sysclk.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/same70/pll.h</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/osc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/genclk.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/sysclk.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/clock/pll.h</name>
+ </file>
+ </group>
+ <group>
+ <name>serial</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/serial/usart_serial.c</name>
+ </file>
+ <group>
+ <name>sam_uart</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/serial/sam_uart/uart_serial.h</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/serial/serial.h</name>
+ </file>
+ </group>
+ <group>
+ <name>delay</name>
+ <group>
+ <name>sam</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/delay/sam/cycle_counter.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/delay/sam/cycle_counter.h</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/delay/delay.h</name>
+ </file>
+ </group>
+ <group>
+ <name>gpio</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/gpio/gpio.h</name>
+ </file>
+ <group>
+ <name>sam_gpio</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/gpio/sam_gpio/sam_gpio.h</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>ioport</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/ioport/ioport.h</name>
+ </file>
+ <group>
+ <name>sam</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/services/ioport/sam/ioport_pio.h</name>
+ </file>
+ </group>
+ </group>
+ </group>
+ <group>
+ <name>boards</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../common/boards/board.h</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>thirdparty</name>
+ <group>
+ <name>sensor</name>
+ <group>
+ <name>bno055</name>
+ <file>
+ <name>$PROJ_DIR$/../../../bno055.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../bno055_port.c</name>
+ </file>
+ <group>
+ <name>example</name>
+ <file>
+ <name>$PROJ_DIR$/../../bno055_example.c</name>
+ </file>
+ <group>
+ <name>same70q21_same70_xplained</name>
+ <file>
+ <name>$PROJ_DIR$/../conf_uart_serial.h</name>
+ </file>
+ <group>
+ <name>iar</name>
+ <file>
+ <name>$PROJ_DIR$/asf.h</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../conf_bno055.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../conf_board.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../conf_clock.h</name>
+ </file>
+ </group>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../bno055_port.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../bno055.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../bno055_doc.h</name>
+ </file>
+ </group>
+ </group>
+ </group>
+ <group>
+ <name>sam</name>
+ <group>
+ <name>utils</name>
+ <group>
+ <name>cmsis</name>
+ <group>
+ <name>same70</name>
+ <group>
+ <name>source</name>
+ <group>
+ <name>templates</name>
+ <group>
+ <name>iar</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/source/templates/iar/startup_same70.c</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/source/templates/system_same70.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/source/templates/system_same70.h</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>include</name>
+ <group>
+ <name>instance</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/pmc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/i2sc1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/smc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/mcan1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/matrix.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/uart3.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/piod.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/uart1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/usart1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/qspi.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/pioe.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/acc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/piob.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/hsmci.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/xdmac.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/rswdt.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/uart0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/twihs1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/tc3.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/i2sc0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/uart2.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/twihs0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/gmac.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/sdramc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/spi1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/usbhs.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/efc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/ssc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/rtc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/chipid.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/afec0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/trng.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/twihs2.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/tc1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/usart0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/wdt.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/spi0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/usart2.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/icm.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/rstc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/utmi.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/dacc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/afec1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/aes.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/rtt.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/mcan0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/gpbr.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/supc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/pwm1.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/uart4.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/tc2.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/isi.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/pwm0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/pioa.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/tc0.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/instance/pioc.h</name>
+ </file>
+ </group>
+ <group>
+ <name>component</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/wdt.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/afec.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/spi.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/pio.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/acc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/qspi.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/hsmci.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/usbhs.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/chipid.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/isi.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/icm.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/rstc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/gmac.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/smc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/rswdt.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/pwm.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/matrix.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/utmi.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/usart.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/xdmac.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/aes.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/efc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/gpbr.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/mcan.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/supc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/pmc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/twihs.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/rtt.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/i2sc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/dacc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/uart.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/rtc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/sdramc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/ssc.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/trng.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/component/tc.h</name>
+ </file>
+ </group>
+ <group>
+ <name>pio</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70j20.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70j19.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70q21b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70q21.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70j19b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70q19b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70n20.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70n21b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70q20b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70q20.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70j20b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70n19.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70n19b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70q19.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70j21.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70n20b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70j21b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/pio/same70n21.h</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70n21b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70q20.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70n21.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70j19.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70n20b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70n20.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70q21b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70q20b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70j20b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70j20.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70q19b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70j19b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70j21.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70q19.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70n19.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70n19b.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70q21.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/cmsis/same70/include/same70j21b.h</name>
+ </file>
+ </group>
+ </group>
+ </group>
+ <group>
+ <name>fpu</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/fpu/fpu.h</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/status_codes.h</name>
+ </file>
+ <group>
+ <name>preprocessor</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/preprocessor/mrepeat.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/preprocessor/preprocessor.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/preprocessor/tpaste.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/preprocessor/stringz.h</name>
+ </file>
+ </group>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/compiler.h</name>
+ </file>
+ <group>
+ <name>header_files</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/utils/header_files/io.h</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>drivers</name>
+ <group>
+ <name>pmc</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/pmc/pmc.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/pmc/sleep.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/pmc/sleep.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/pmc/pmc.h</name>
+ </file>
+ </group>
+ <group>
+ <name>twihs</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/twihs/twihs.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/twihs/twihs.h</name>
+ </file>
+ </group>
+ <group>
+ <name>mpu</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/mpu/mpu.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/mpu/mpu.h</name>
+ </file>
+ </group>
+ <group>
+ <name>pio</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/pio/pio_handler.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/pio/pio.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/pio/pio_handler.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/pio/pio.h</name>
+ </file>
+ </group>
+ <group>
+ <name>usart</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/usart/usart.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/usart/usart.h</name>
+ </file>
+ </group>
+ <group>
+ <name>uart</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/uart/uart.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/drivers/uart/uart.h</name>
+ </file>
+ </group>
+ </group>
+ <group>
+ <name>boards</name>
+ <group>
+ <name>same70_xplained</name>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/boards/same70_xplained/init.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/boards/same70_xplained/led.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$/../../../../../../sam/boards/same70_xplained/same70_xplained.h</name>
+ </file>
+ </group>
+ </group>
+ </group>
+</project>
diff --git a/thirdparty/sensor/bno055/module_config/conf_bno055.h b/thirdparty/sensor/bno055/module_config/conf_bno055.h
new file mode 100644
index 00000000..c8568e7f
--- /dev/null
+++ b/thirdparty/sensor/bno055/module_config/conf_bno055.h
@@ -0,0 +1,83 @@
+/**
+ * \file
+ *
+ * \brief BNO055 configuration.
+ *
+ * Copyright (c) 2015 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ * Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+
+/* Configuration of the mma7341 accelerometer driver */
+/*
+ * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
+ */
+
+#ifndef CONF_BNO055_H_INCLUDED
+#define CONF_BNO055_H_INCLUDED
+
+#define BNO055_I2C_SLAVE_ADDRESS BNO055_I2C_ADDR2
+
+/* Slave address select pin */
+#define BNO055_PIN_SLAVE_ADDR_SELECT PIO_PB3_IDX
+/* Boot */
+#define BNO055_PIN_BOOT PIO_PC17_IDX
+/* Reset */
+#define BNO055_PIN_RESET PIO_PD25_IDX
+
+/* Sleep State Macros */
+#define SLEEP_STATE_SLEEP UINT8_C(1)
+#define SLEEP_STATE_AWAKE UINT8_C(0)
+
+/* name RGB LED Macros */
+#define RGB_LED_R PIO_PC30_IDX
+#define RGB_LED_G PIO_PB2_IDX
+#define RGB_LED_B PIO_PA0_IDX
+#define RGB_LED_G_ON false
+#define RGB_LED_G_OFF true
+#define RGB_LED_B_VALUE (0xFFFF - ((bno055_euler_data.h) * 0xFFFF / 5759))
+#define RBG_LED_B_OFF UINT16_C(0xFFFF)
+#define RGB_LED_R_VALUE (0xFFFF - ((bno055_euler_data.p) * 0xFFFF / 5759))
+#define RBG_LED_R_OFF UINT16_C(0xFFFF)
+
+/* determines the active state of BNO055 reset */
+#define BNO055_RESET_ACTIVE false
+/* the delay required to wait for BNO055 chip to reset */
+#define BNO055_RESET_DELAY_MS UINT32_C(650)
+
+#define BNO055_TWIHS_CLK 400000
+
+#endif /* CONF_BNO055_H_INCLUDED */