Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 0:1f82672b8755, committed 2017-07-01
- Comitter:
- gume
- Date:
- Sat Jul 01 01:24:03 2017 +0000
- Commit message:
- Initial commit. Library based on Bosch's code
Changed in this revision
| BNO055.cpp | Show annotated file Show diff for this revision Revisions of this file |
| BNO055.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 1f82672b8755 BNO055.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/BNO055.cpp Sat Jul 01 01:24:03 2017 +0000
@@ -0,0 +1,17642 @@
+/*
+*
+****************************************************************************
+* Copyright (C) 2015 - 2016 Bosch Sensortec GmbH
+*
+* File : bno055.c
+*
+* Date : 2016/03/14
+*
+* Revision : 2.0.3 $
+*
+* 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 API 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ u8 data_u8 = BNO055_INIT_VALUE;
+ u8 bno055_page_zero_u8 = BNO055_PAGE_ZERO;
+ /* Array holding the Software revision id
+ */
+ u8 a_SW_ID_u8[BNO055_REV_ID_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ /* 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, &bno055_page_zero_u8, BNO055_GEN_READ_WRITE_LENGTH);
+ /* 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, &data_u8, BNO055_GEN_READ_WRITE_LENGTH);
+ p_bno055->chip_id = 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, &data_u8, BNO055_GEN_READ_WRITE_LENGTH);
+ p_bno055->accel_rev_id = 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, &data_u8, BNO055_GEN_READ_WRITE_LENGTH);
+ p_bno055->mag_rev_id = 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, &data_u8, BNO055_GEN_READ_WRITE_LENGTH);
+ p_bno055->gyro_rev_id = 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, &data_u8, BNO055_GEN_READ_WRITE_LENGTH);
+ p_bno055->bl_rev_id = 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_LSB_MSB_READ_LENGTH);
+ a_SW_ID_u8[BNO055_SW_ID_LSB] = BNO055_GET_BITSLICE(
+ a_SW_ID_u8[BNO055_SW_ID_LSB],
+ BNO055_SW_REV_ID_LSB);
+ p_bno055->sw_rev_id = (u16)
+ ((((u32)((u8)a_SW_ID_u8[BNO055_SW_ID_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) | (a_SW_ID_u8[BNO055_SW_ID_LSB]));
+ /* Read the page id from the register 0x07*/
+ com_rslt += p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_PAGE_ID_REG, &data_u8, BNO055_GEN_READ_WRITE_LENGTH);
+ p_bno055->page_id = 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 addr_u8 : Address of the register
+ * @param data_u8 : Data to be written to the register
+ * @param len_u8 : Length of the Data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+*/
+BNO055_RETURN_FUNCTION_TYPE bno055_write_register(u8 addr_u8,
+u8 *data_u8, u8 len_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /* Write the values of respective given register */
+ com_rslt = p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr, addr_u8, data_u8, len_u8);
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads the data from
+ * the given register address
+ *
+ * @param addr_u8 : Address of the register
+ * @param data_u8 : address of the variable,
+ * read value will be kept
+ * @param len_u8 : Length of the data
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_register(u8 addr_u8,
+u8 *data_u8, u8 len_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /* Read the value from given register*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr, addr_u8, data_u8, len_u8);
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads chip id
+ * from register 0x00 it is a byte of data
+ *
+ *
+ * @param chip_id_u8 : The chip id value 0xA0
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_chip_id(u8 *chip_id_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8 = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the chip id*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_CHIP_ID_REG, &data_u8,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ *chip_id_u8 = data_u8;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads software revision id
+ * from register 0x04 and 0x05 it is a two byte of data
+ *
+ * @param sw_id_u8 : The SW revision id
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_sw_rev_id(u16 *sw_id_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* array having the software revision id
+ data_u8[0] - LSB
+ data_u8[1] - MSB*/
+ u8 data_u8[BNO055_REV_ID_SIZE] = {BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty*/
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SW_ID_LSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SW_ID_LSB],
+ BNO055_SW_REV_ID_LSB);
+ *sw_id_u8 = (u16)
+ ((((u32)((u8)data_u8[BNO055_SW_ID_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SW_ID_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads page id
+ * from register 0x07 it is a byte of data
+ *
+ *
+ * @param page_id_u8 : The value of page id
+ *
+ * BNO055_PAGE_ZERO -> 0x00
+ * BNO055_PAGE_ONE -> 0x01
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_page_id(u8 *page_id_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8 = BNO055_INIT_VALUE;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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, &data_u8, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8 = BNO055_GET_BITSLICE(data_u8,
+ BNO055_PAGE_ID);
+ *page_id_u8 = data_u8;
+ p_bno055->page_id = data_u8;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write
+ * the page id register 0x07
+ *
+ * @param page_id_u8 : The value of page id
+ *
+ * BNO055_PAGE_ZERO -> 0x00
+ * BNO055_PAGE_ONE -> 0x01
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_page_id(u8 page_id_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /* Read the current page*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_PAGE_ID_REG, &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ /* Check condition for communication BNO055_SUCCESS*/
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE(data_u8r,
+ BNO055_PAGE_ID, page_id_u8);
+ /* Write the page id*/
+ com_rslt += p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_PAGE_ID_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS)
+ p_bno055->page_id = page_id_u8;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads accel revision id
+ * from register 0x01 it is a byte of value
+ *
+ * @param accel_rev_id_u8 : The accel revision id 0xFB
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_rev_id(
+u8 *accel_rev_id_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8 = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the accel revision id */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_REV_ID_REG,
+ &data_u8, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_rev_id_u8 = data_u8;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads mag revision id
+ * from register 0x02 it is a byte of value
+ *
+ * @param mag_rev_id_u8 : The mag revision id 0x32
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_rev_id(
+u8 *mag_rev_id_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8 = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the mag revision id */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_REV_ID_REG,
+ &data_u8, BNO055_GEN_READ_WRITE_LENGTH);
+ *mag_rev_id_u8 = data_u8;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gyro revision id
+ * from register 0x03 it is a byte of value
+ *
+ * @param gyro_rev_id_u8 : The gyro revision id 0xF0
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_rev_id(
+u8 *gyro_rev_id_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8 = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the gyro revision id */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_REV_ID_REG,
+ &data_u8, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_rev_id_u8 = data_u8;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read boot loader revision id
+ * from register 0x06 it is a byte of value
+ *
+ * @param bl_rev_id_u8 : The boot loader revision id
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_bl_rev_id(
+u8 *bl_rev_id_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8 = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8, BNO055_GEN_READ_WRITE_LENGTH);
+ *bl_rev_id_u8 = data_u8;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads acceleration data X values
+ * from register 0x08 and 0x09 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param accel_x_s16 : The X raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_x(s16 *accel_x_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the accel x value
+ data_u8[BNO055_SENSOR_DATA_LSB] - x-LSB
+ data_u8[BNO055_SENSOR_DATA_MSB] - x-MSB
+ */
+ u8 data_u8[BNO055_ACCEL_DATA_SIZE] = {BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_LSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_LSB],
+ BNO055_ACCEL_DATA_X_LSB_VALUEX);
+ data_u8[BNO055_SENSOR_DATA_MSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_MSB],
+ BNO055_ACCEL_DATA_X_MSB_VALUEX);
+ *accel_x_s16 = (s16)((((s32)
+ (s8)(data_u8[BNO055_SENSOR_DATA_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS))
+ | (data_u8[BNO055_SENSOR_DATA_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads acceleration data Y values
+ * from register 0x0A and 0x0B it is a two byte data
+ *
+ *
+ *
+ *
+ * @param accel_y_s16 : The Y raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_y(s16 *accel_y_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the accel y value
+ data_u8[BNO055_SENSOR_DATA_LSB] - y-LSB
+ data_u8[BNO055_SENSOR_DATA_MSB] - y-MSB
+ */
+ u8 data_u8[BNO055_ACCEL_DATA_SIZE] = {BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_LSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_LSB],
+ BNO055_ACCEL_DATA_Y_LSB_VALUEY);
+ data_u8[BNO055_SENSOR_DATA_MSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_MSB],
+ BNO055_ACCEL_DATA_Y_MSB_VALUEY);
+ *accel_y_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) |
+ (data_u8[BNO055_SENSOR_DATA_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads acceleration data z values
+ * from register 0x0C and 0x0D it is a two byte data
+ *
+ *
+ *
+ *
+ * @param accel_z_s16 : The z raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_z(s16 *accel_z_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the accel z value
+ data_u8[BNO055_SENSOR_DATA_LSB] - z-LSB
+ data_u8[BNO055_SENSOR_DATA_MSB] - z-MSB
+ */
+ u8 data_u8[BNO055_ACCEL_DATA_SIZE] = {BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_LSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_LSB],
+ BNO055_ACCEL_DATA_Z_LSB_VALUEZ);
+ data_u8[BNO055_SENSOR_DATA_MSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_MSB],
+ BNO055_ACCEL_DATA_Z_MSB_VALUEZ);
+ *accel_z_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) |
+ (data_u8[BNO055_SENSOR_DATA_LSB]));
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ /* Array holding the accel xyz value
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB] - x->LSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB] - x->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB] - y->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB] - y->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB] - z->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB] - z->MSB
+ */
+ u8 data_u8[BNO055_ACCEL_XYZ_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_DATA_X_LSB_VALUEX_REG,
+ data_u8, BNO055_ACCEL_XYZ_DATA_SIZE);
+ /* Data X*/
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB],
+ BNO055_ACCEL_DATA_X_LSB_VALUEX);
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB],
+ BNO055_ACCEL_DATA_X_MSB_VALUEX);
+ accel->x = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB]));
+ /* Data Y*/
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB],
+ BNO055_ACCEL_DATA_Y_LSB_VALUEY);
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB],
+ BNO055_ACCEL_DATA_Y_MSB_VALUEY);
+ accel->y = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB]));
+ /* Data Z*/
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB],
+ BNO055_ACCEL_DATA_Z_LSB_VALUEZ);
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB],
+ BNO055_ACCEL_DATA_Z_MSB_VALUEZ);
+ accel->z = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads mag data x values
+ * from register 0x0E and 0x0F it is a two byte data
+ *
+ *
+ *
+ *
+ * @param mag_x_s16 : The x raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_x(s16 *mag_x_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the mag x value
+ data_u8[BNO055_SENSOR_DATA_LSB] - x->LSB
+ data_u8[BNO055_SENSOR_DATA_MSB] - x->MSB
+ */
+ u8 data_u8[BNO055_MAG_DATA_SIZE] = {BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_LSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_LSB],
+ BNO055_MAG_DATA_X_LSB_VALUEX);
+ data_u8[BNO055_SENSOR_DATA_MSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_MSB],
+ BNO055_MAG_DATA_X_MSB_VALUEX);
+ *mag_x_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) | (
+ data_u8[BNO055_SENSOR_DATA_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads mag data y values
+ * from register 0x10 and 0x11 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param mag_y_s16 : The y raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_y(s16 *mag_y_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the mag y value
+ data_u8[BNO055_SENSOR_DATA_LSB] - y->LSB
+ data_u8[BNO055_SENSOR_DATA_MSB] - y->MSB
+ */
+ u8 data_u8[BNO055_MAG_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_LSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_LSB],
+ BNO055_MAG_DATA_Y_LSB_VALUEY);
+ data_u8[BNO055_SENSOR_DATA_MSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_MSB],
+ BNO055_MAG_DATA_Y_MSB_VALUEY);
+ *mag_y_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) |
+ (data_u8[BNO055_SENSOR_DATA_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads mag data z values
+ * from register 0x12 and 0x13 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param mag_z_s16 : The z raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_z(s16 *mag_z_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the mag z value
+ data_u8[BNO055_SENSOR_DATA_LSB] - z->LSB
+ data_u8[BNO055_SENSOR_DATA_MSB] - z->MSB
+ */
+ u8 data_u8[BNO055_MAG_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_DATA_Z_LSB_VALUEZ_REG,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ /*Read the mag z two bytes of data */
+ data_u8[BNO055_SENSOR_DATA_LSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_LSB],
+ BNO055_MAG_DATA_Z_LSB_VALUEZ);
+ data_u8[BNO055_SENSOR_DATA_MSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_MSB],
+ BNO055_MAG_DATA_Z_MSB_VALUEZ);
+ *mag_z_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_LSB]));
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ /* Array holding the mag xyz value
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB] - x->LSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB] - x->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB] - y->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB] - y->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB] - z->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB] - z->MSB
+ */
+ u8 data_u8[BNO055_MAG_XYZ_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_MAG_XYZ_DATA_SIZE);
+ /* Data X*/
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB],
+ BNO055_MAG_DATA_X_LSB_VALUEX);
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB],
+ BNO055_MAG_DATA_X_MSB_VALUEX);
+ mag->x = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) |
+ (data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB]));
+ /* Data Y*/
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB],
+ BNO055_MAG_DATA_Y_LSB_VALUEY);
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB],
+ BNO055_MAG_DATA_Y_MSB_VALUEY);
+ mag->y = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) |
+ (data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB]));
+ /* Data Z*/
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB],
+ BNO055_MAG_DATA_Z_LSB_VALUEZ);
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB],
+ BNO055_MAG_DATA_Z_MSB_VALUEZ);
+ mag->z = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gyro data x values
+ * from register 0x14 and 0x15 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param gyro_x_s16 : The x raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_x(s16 *gyro_x_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8[BNO055_GYRO_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_LSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_LSB],
+ BNO055_GYRO_DATA_X_LSB_VALUEX);
+ data_u8[BNO055_SENSOR_DATA_MSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_MSB],
+ BNO055_GYRO_DATA_X_MSB_VALUEX);
+ *gyro_x_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) |
+ (data_u8[BNO055_SENSOR_DATA_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gyro data y values
+ * from register 0x16 and 0x17 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param gyro_y_s16 : The y raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_y(s16 *gyro_y_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8[BNO055_GYRO_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_LSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_LSB],
+ BNO055_GYRO_DATA_Y_LSB_VALUEY);
+ data_u8[BNO055_SENSOR_DATA_MSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_MSB],
+ BNO055_GYRO_DATA_Y_MSB_VALUEY);
+ *gyro_y_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gyro data z values
+ * from register 0x18 and 0x19 it is a two byte data
+ *
+ * @param gyro_z_s16 : The z raw data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_z(s16 *gyro_z_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8[BNO055_GYRO_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_LSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_LSB],
+ BNO055_GYRO_DATA_Z_LSB_VALUEZ);
+ data_u8[BNO055_SENSOR_DATA_MSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_MSB],
+ BNO055_GYRO_DATA_Z_MSB_VALUEZ);
+ *gyro_z_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_LSB]));
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ /* Array holding the gyro xyz value
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB] - x->LSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB] - x->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB] - y->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB] - y->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB] - z->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB] - z->MSB
+ */
+ u8 data_u8[BNO055_GYRO_XYZ_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_GYRO_XYZ_DATA_SIZE);
+ /* Data x*/
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB],
+ BNO055_GYRO_DATA_X_LSB_VALUEX);
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB],
+ BNO055_GYRO_DATA_X_MSB_VALUEX);
+ gyro->x = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) |
+ (data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB]));
+ /* Data y*/
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB],
+ BNO055_GYRO_DATA_Y_LSB_VALUEY);
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB],
+ BNO055_GYRO_DATA_Y_MSB_VALUEY);
+ gyro->y = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB]));
+ /* Data z*/
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB],
+ BNO055_GYRO_DATA_Z_LSB_VALUEZ);
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB],
+ BNO055_GYRO_DATA_Z_MSB_VALUEZ);
+ gyro->z = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gyro data z values
+ * from register 0x1A and 0x1B it is a two byte data
+ *
+ * @param euler_h_s16 : The raw h data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_h(s16 *euler_h_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the Euler h value
+ data_u8[BNO055_SENSOR_DATA_EULER_LSB] - h->LSB
+ data_u8[BNO055_SENSOR_DATA_EULER_MSB] - h->MSB
+ */
+ u8 data_u8[BNO055_EULER_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_EULER_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_EULER_LSB],
+ BNO055_EULER_H_LSB_VALUEH);
+ data_u8[BNO055_SENSOR_DATA_EULER_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_EULER_MSB],
+ BNO055_EULER_H_MSB_VALUEH);
+ *euler_h_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_EULER_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) |
+ (data_u8[BNO055_SENSOR_DATA_EULER_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads Euler data r values
+ * from register 0x1C and 0x1D it is a two byte data
+ *
+ * @param euler_r_s16 : The raw r data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_r(s16 *euler_r_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the Euler r value
+ data_u8[BNO055_SENSOR_DATA_EULER_LSB] - r->LSB
+ data_u8[BNO055_SENSOR_DATA_EULER_MSB] - r->MSB
+ */
+ u8 data_u8[BNO055_EULER_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_EULER_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_EULER_LSB],
+ BNO055_EULER_R_LSB_VALUER);
+ data_u8[BNO055_SENSOR_DATA_EULER_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_EULER_MSB],
+ BNO055_EULER_R_MSB_VALUER);
+ *euler_r_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_EULER_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_EULER_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads Euler data p values
+ * from register 0x1E and 0x1F it is a two byte data
+ *
+ * @param euler_p_s16 : The raw p data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_p(s16 *euler_p_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the Euler p value
+ data_u8[BNO055_SENSOR_DATA_EULER_LSB] - p->LSB
+ data_u8[BNO055_SENSOR_DATA_EULER_MSB] - p->MSB
+ */
+ u8 data_u8[BNO055_EULER_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_EULER_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_EULER_LSB],
+ BNO055_EULER_P_LSB_VALUEP);
+ data_u8[BNO055_SENSOR_DATA_EULER_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_EULER_MSB],
+ BNO055_EULER_P_MSB_VALUEP);
+ *euler_p_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_EULER_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_EULER_LSB]));
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ /* Array holding the Euler hrp value
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_H_LSB] - h->LSB
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_H_MSB] - h->MSB
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_R_LSB] - r->MSB
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_R_MSB] - r->MSB
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_P_LSB] - p->MSB
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_P_MSB] - p->MSB
+ */
+ u8 data_u8[BNO055_EULER_HRP_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_EULER_HRP_DATA_SIZE);
+ /* Data h*/
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_H_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_H_LSB],
+ BNO055_EULER_H_LSB_VALUEH);
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_H_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_H_MSB],
+ BNO055_EULER_H_MSB_VALUEH);
+ euler->h = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_EULER_HRP_H_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) |
+ (data_u8[BNO055_SENSOR_DATA_EULER_HRP_H_LSB]));
+ /* Data r*/
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_R_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_R_LSB],
+ BNO055_EULER_R_LSB_VALUER);
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_R_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_R_MSB],
+ BNO055_EULER_R_MSB_VALUER);
+ euler->r = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_EULER_HRP_R_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_EULER_HRP_R_LSB]));
+ /* Data p*/
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_P_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_P_LSB],
+ BNO055_EULER_P_LSB_VALUEP);
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_P_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_EULER_HRP_P_MSB],
+ BNO055_EULER_P_MSB_VALUEP);
+ euler->p = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_EULER_HRP_P_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_EULER_HRP_P_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads quaternion data w values
+ * from register 0x20 and 0x21 it is a two byte data
+ *
+ * @param quaternion_w_s16 : The raw w data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_w(
+s16 *quaternion_w_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the Quaternion w value
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_LSB] - w->LSB
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_MSB] - w->MSB
+ */
+ u8 data_u8[BNO055_QUATERNION_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_LSB],
+ BNO055_QUATERNION_DATA_W_LSB_VALUEW);
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_MSB],
+ BNO055_QUATERNION_DATA_W_MSB_VALUEW);
+ *quaternion_w_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_QUATERNION_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_QUATERNION_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads quaternion data x values
+ * from register 0x22 and 0x23 it is a two byte data
+ *
+ * @param quaternion_x_s16 : The raw x data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_x(
+s16 *quaternion_x_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the quaternion x value
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_LSB] - x->LSB
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_MSB] - x->MSB
+ */
+ u8 data_u8[BNO055_QUATERNION_DATA_SIZE] = {BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_LSB],
+ BNO055_QUATERNION_DATA_X_LSB_VALUEX);
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_MSB],
+ BNO055_QUATERNION_DATA_X_MSB_VALUEX);
+ *quaternion_x_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_QUATERNION_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) |
+ (data_u8[BNO055_SENSOR_DATA_QUATERNION_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads quaternion data y values
+ * from register 0x24 and 0x25 it is a two byte data
+ *
+ * @param quaternion_y_s16 : The raw y data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_y(
+s16 *quaternion_y_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the quaternion y value
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_LSB] - y->LSB
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_MSB] - y->MSB
+ */
+ u8 data_u8[BNO055_QUATERNION_DATA_SIZE] = {BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_LSB],
+ BNO055_QUATERNION_DATA_Y_LSB_VALUEY);
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_MSB] =
+ BNO055_GET_BITSLICE
+ (data_u8[BNO055_SENSOR_DATA_QUATERNION_MSB],
+ BNO055_QUATERNION_DATA_Y_MSB_VALUEY);
+ *quaternion_y_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_QUATERNION_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_QUATERNION_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads quaternion data z values
+ * from register 0x26 and 0x27 it is a two byte data
+ *
+ * @param quaternion_z_s16 : The raw z data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_z(
+s16 *quaternion_z_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the quaternion z value
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_LSB] - z->LSB
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_MSB] - z->MSB
+ */
+ u8 data_u8[BNO055_QUATERNION_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_LSB],
+ BNO055_QUATERNION_DATA_Z_LSB_VALUEZ);
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_MSB],
+ BNO055_QUATERNION_DATA_Z_MSB_VALUEZ);
+ *quaternion_z_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_QUATERNION_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_QUATERNION_LSB]));
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ /* Array holding the quaternion wxyz value
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_W_LSB] - w->LSB
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_W_MSB] - w->MSB
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_X_LSB] - x->LSB
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_X_MSB] - x->MSB
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_Y_LSB] - y->MSB
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_Y_MSB] - y->MSB
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_Z_LSB] - z->MSB
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_Z_MSB] - z->MSB
+ */
+ u8 data_u8[BNO055_QUATERNION_WXYZ_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_QUATERNION_WXYZ_DATA_SIZE);
+ /* Data W*/
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_W_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_W_LSB],
+ BNO055_QUATERNION_DATA_W_LSB_VALUEW);
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_W_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_W_MSB],
+ BNO055_QUATERNION_DATA_W_MSB_VALUEW);
+ quaternion->w = (s16)((((s32)((s8)
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_W_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) |
+ (data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_W_LSB]));
+ /* Data X*/
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_X_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_X_LSB],
+ BNO055_QUATERNION_DATA_X_LSB_VALUEX);
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_X_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_X_MSB],
+ BNO055_QUATERNION_DATA_X_MSB_VALUEX);
+ quaternion->x = (s16)((((s32)((s8)
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_X_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) |
+ (data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_X_LSB]));
+ /* Data Y*/
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_Y_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_Y_LSB],
+ BNO055_QUATERNION_DATA_Y_LSB_VALUEY);
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_Y_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_Y_MSB],
+ BNO055_QUATERNION_DATA_Y_MSB_VALUEY);
+ quaternion->y = (s16)((((s32)((s8)
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_Y_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) |
+ (data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_Y_LSB]));
+ /* Data Z*/
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_Z_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_Z_LSB],
+ BNO055_QUATERNION_DATA_Z_LSB_VALUEZ);
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_Z_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_Z_MSB],
+ BNO055_QUATERNION_DATA_Z_MSB_VALUEZ);
+ quaternion->z = (s16)((((s32)((s8)
+ data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_Z_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) |
+ (data_u8[BNO055_SENSOR_DATA_QUATERNION_WXYZ_Z_LSB]));
+ } else {
+ com_rslt = BNO055_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 linear_accel_x_s16 : The raw x data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_x(
+s16 *linear_accel_x_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the linear accel x value
+ data_u8[BNO055_SENSOR_DATA_LSB] - x->LSB
+ data_u8[BNO055_SENSOR_DATA_MSB] - x->MSB
+ */
+ u8 data_u8[BNO055_ACCEL_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_LSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_LSB],
+ BNO055_LINEAR_ACCEL_DATA_X_LSB_VALUEX);
+ data_u8[BNO055_SENSOR_DATA_MSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_MSB],
+ BNO055_LINEAR_ACCEL_DATA_X_MSB_VALUEX);
+ *linear_accel_x_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_LSB]));
+ } else {
+ com_rslt = BNO055_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 linear_accel_y_s16 : The raw y data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_y(
+s16 *linear_accel_y_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the linear accel y value
+ data_u8[BNO055_SENSOR_DATA_LSB] - y->LSB
+ data_u8[BNO055_SENSOR_DATA_MSB] - y->MSB
+ */
+ u8 data_u8[BNO055_ACCEL_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_LSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_LSB],
+ BNO055_LINEAR_ACCEL_DATA_Y_LSB_VALUEY);
+ data_u8[BNO055_SENSOR_DATA_MSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_MSB],
+ BNO055_LINEAR_ACCEL_DATA_Y_MSB_VALUEY);
+ *linear_accel_y_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) | (
+ data_u8[BNO055_SENSOR_DATA_LSB]));
+ } else {
+ com_rslt = BNO055_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 linear_accel_z_s16 : The raw z data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_z(
+s16 *linear_accel_z_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the linear accel z value
+ data_u8[BNO055_SENSOR_DATA_LSB] - z->LSB
+ data_u8[BNO055_SENSOR_DATA_MSB] - z->MSB
+ */
+ u8 data_u8[BNO055_ACCEL_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_LSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_LSB],
+ BNO055_LINEAR_ACCEL_DATA_Z_LSB_VALUEZ);
+ data_u8[BNO055_SENSOR_DATA_MSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_MSB],
+ BNO055_LINEAR_ACCEL_DATA_Z_MSB_VALUEZ);
+ *linear_accel_z_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) | (
+ data_u8[BNO055_SENSOR_DATA_LSB]));
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ /* Array holding the linear accel xyz value
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB] - x->LSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB] - x->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB] - y->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB] - y->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB] - z->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB] - z->MSB
+ */
+ u8 data_u8[BNO055_ACCEL_XYZ_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_ACCEL_XYZ_DATA_SIZE);
+ /* Data x*/
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB],
+ BNO055_LINEAR_ACCEL_DATA_X_LSB_VALUEX);
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB],
+ BNO055_LINEAR_ACCEL_DATA_X_MSB_VALUEX);
+ linear_accel->x = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB]));
+ /* Data y*/
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB],
+ BNO055_LINEAR_ACCEL_DATA_Y_LSB_VALUEY);
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB],
+ BNO055_LINEAR_ACCEL_DATA_Y_MSB_VALUEY);
+ linear_accel->y = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB]));
+ /* Data z*/
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB],
+ BNO055_LINEAR_ACCEL_DATA_Z_LSB_VALUEZ);
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB],
+ BNO055_LINEAR_ACCEL_DATA_Z_MSB_VALUEZ);
+ linear_accel->z = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gravity data x values
+ * from register 0x2E and 0x2F it is a two byte data
+ *
+ * @param gravity_x_s16 : The raw x data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_x(
+s16 *gravity_x_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the gravity x value
+ data_u8[BNO055_SENSOR_DATA_LSB] - x->LSB
+ data_u8[BNO055_SENSOR_DATA_MSB] - x->MSB
+ */
+ u8 data_u8[BNO055_GRAVITY_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_LSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_LSB],
+ BNO055_GRAVITY_DATA_X_LSB_VALUEX);
+ data_u8[BNO055_SENSOR_DATA_MSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_MSB],
+ BNO055_GRAVITY_DATA_X_MSB_VALUEX);
+ *gravity_x_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gravity data y values
+ * from register 0x30 and 0x31 it is a two byte data
+ *
+ * @param gravity_y_s16 : The raw y data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_y(
+s16 *gravity_y_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the gravity y value
+ data_u8[BNO055_SENSOR_DATA_LSB] - y->LSB
+ data_u8[BNO055_SENSOR_DATA_MSB] - y->MSB
+ */
+ u8 data_u8[BNO055_GRAVITY_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_LSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_LSB],
+ BNO055_GRAVITY_DATA_Y_LSB_VALUEY);
+ data_u8[BNO055_SENSOR_DATA_MSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_MSB],
+ BNO055_GRAVITY_DATA_Y_MSB_VALUEY);
+ *gravity_y_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads gravity data z values
+ * from register 0x32 and 0x33 it is a two byte data
+ *
+ * @param gravity_z_s16 : The raw z data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_z(
+s16 *gravity_z_s16)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ /* Array holding the gravity z value
+ data_u8[BNO055_SENSOR_DATA_LSB] - z->LSB
+ data_u8[BNO055_SENSOR_DATA_MSB] - z->MSB
+ */
+ u8 data_u8[BNO055_GRAVITY_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_LSB_MSB_READ_LENGTH);
+ data_u8[BNO055_SENSOR_DATA_LSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_LSB],
+ BNO055_GRAVITY_DATA_Z_LSB_VALUEZ);
+ data_u8[BNO055_SENSOR_DATA_MSB] =
+ BNO055_GET_BITSLICE(data_u8[BNO055_SENSOR_DATA_MSB],
+ BNO055_GRAVITY_DATA_Z_MSB_VALUEZ);
+ *gravity_z_s16 = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_LSB]));
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ /* Array holding the gravity xyz value
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB] - x->LSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB] - x->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB] - y->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB] - y->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB] - z->MSB
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB] - z->MSB
+ */
+ u8 data_u8[BNO055_GRAVITY_XYZ_DATA_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_GRAVITY_XYZ_DATA_SIZE);
+ /* Data x*/
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB],
+ BNO055_GRAVITY_DATA_X_LSB_VALUEX);
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB],
+ BNO055_GRAVITY_DATA_X_MSB_VALUEX);
+ gravity->x = (s16)(((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_XYZ_X_MSB]) <<
+ BNO055_SHIFT_EIGHT_BITS) |
+ (data_u8[BNO055_SENSOR_DATA_XYZ_X_LSB]));
+ /* Data y*/
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB],
+ BNO055_GRAVITY_DATA_Y_LSB_VALUEY);
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB],
+ BNO055_GRAVITY_DATA_Y_MSB_VALUEY);
+ gravity->y = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_XYZ_Y_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS) | (
+ data_u8[BNO055_SENSOR_DATA_XYZ_Y_LSB]));
+ /* Data z*/
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB],
+ BNO055_GRAVITY_DATA_Z_LSB_VALUEZ);
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB],
+ BNO055_GRAVITY_DATA_Z_MSB_VALUEZ);
+ gravity->z = (s16)((((s32)
+ ((s8)data_u8[BNO055_SENSOR_DATA_XYZ_Z_MSB])) <<
+ BNO055_SHIFT_EIGHT_BITS)
+ | (data_u8[BNO055_SENSOR_DATA_XYZ_Z_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API reads temperature values
+ * from register 0x33 it is a byte data
+ *
+ * @param temp_s8 : The raw temperature data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_temp_data(s8 *temp_s8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8 = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the raw temperature data */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TEMP_REG, &data_u8,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ *temp_s8 = data_u8;
+ } else {
+ com_rslt = BNO055_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 accel_x_f : The accel x meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_x_msq(
+float *accel_x_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_accel_x_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 accel_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&accel_unit_u8);
+ if (accel_unit_u8 != BNO055_ACCEL_UNIT_MSQ)
+ com_rslt += bno055_set_accel_unit(BNO055_ACCEL_UNIT_MSQ);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the accel raw x data*/
+ com_rslt += bno055_read_accel_x(®_accel_x_s16);
+ p_bno055->delay_msec(BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw accel x to m/s2*/
+ data_f =
+ (float)(reg_accel_x_s16/BNO055_ACCEL_DIV_MSQ);
+ *accel_x_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to millig output as float
+ *
+ * @param accel_x_f : The accel x millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_x_mg(
+float *accel_x_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_accel_x_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 accel_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current accel unit and set the
+ unit as mg if the unit is in m/s2*/
+ com_rslt = bno055_get_accel_unit(&accel_unit_u8);
+ if (accel_unit_u8 != BNO055_ACCEL_UNIT_MG)
+ com_rslt += bno055_set_accel_unit(BNO055_ACCEL_UNIT_MG);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the accel raw x data*/
+ com_rslt += bno055_read_accel_x(®_accel_x_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw accel x to m/s2*/
+ data_f =
+ (float)(reg_accel_x_s16/BNO055_ACCEL_DIV_MG);
+ *accel_x_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to meterpersecseq output as float
+ *
+ * @param accel_y_f : The accel y meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_y_msq(
+float *accel_y_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_accel_y_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 accel_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&accel_unit_u8);
+ if (accel_unit_u8 != BNO055_ACCEL_UNIT_MSQ)
+ com_rslt += bno055_set_accel_unit(BNO055_ACCEL_UNIT_MSQ);
+ if (com_rslt == BNO055_SUCCESS) {
+ com_rslt += bno055_read_accel_y(®_accel_y_s16);
+ p_bno055->delay_msec(BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw accel y to m/s2*/
+ data_f =
+ (float)(reg_accel_y_s16/BNO055_ACCEL_DIV_MSQ);
+ *accel_y_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel y raw data
+ * to millig output as float
+ *
+ * @param accel_y_f : The accel y millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_y_mg(
+float *accel_y_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_accel_y_s16 = BNO055_INIT_VALUE;
+ float data = BNO055_INIT_VALUE;
+ u8 accel_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current accel unit and set the
+ unit as mg if the unit is in m/s2*/
+ com_rslt = bno055_get_accel_unit(&accel_unit_u8);
+ if (accel_unit_u8 != BNO055_ACCEL_UNIT_MG)
+ com_rslt += bno055_set_accel_unit(BNO055_ACCEL_UNIT_MG);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the accel raw z data*/
+ com_rslt += bno055_read_accel_y(®_accel_y_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw accel z to mg*/
+ data = (float)(
+ reg_accel_y_s16/BNO055_ACCEL_DIV_MG);
+ *accel_y_f = data;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to meterpersecseq output as float
+ *
+ * @param accel_z_f : The accel z meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_z_msq(
+float *accel_z_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_accel_z_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 accel_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&accel_unit_u8);
+ if (accel_unit_u8 != BNO055_ACCEL_UNIT_MSQ)
+ com_rslt += bno055_set_accel_unit(BNO055_ACCEL_UNIT_MSQ);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the accel raw z data*/
+ com_rslt += bno055_read_accel_z(®_accel_z_s16);
+ p_bno055->delay_msec(BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw accel z to m/s2*/
+ data_f =
+ (float)(reg_accel_z_s16/BNO055_ACCEL_DIV_MSQ);
+ *accel_z_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to millig output as float
+ *
+ * @param accel_z_f : The accel z millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_z_mg(
+float *accel_z_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_accel_z_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 accel_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current accel unit and set the
+ unit as mg if the unit is in m/s2 */
+ com_rslt = bno055_get_accel_unit(&accel_unit_u8);
+ if (accel_unit_u8 != BNO055_ACCEL_UNIT_MG)
+ com_rslt += bno055_set_accel_unit(BNO055_ACCEL_UNIT_MG);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the accel raw z data*/
+ com_rslt += bno055_read_accel_z(®_accel_z_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw accel x to mg*/
+ data_f =
+ (float)(reg_accel_z_s16/BNO055_ACCEL_DIV_MG);
+ *accel_z_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_accel_t reg_accel_xyz = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ u8 accel_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&accel_unit_u8);
+ if (accel_unit_u8 != BNO055_ACCEL_UNIT_MSQ)
+ com_rslt += bno055_set_accel_unit(BNO055_ACCEL_UNIT_MSQ);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the accel raw xyz data*/
+ com_rslt += bno055_read_accel_xyz(®_accel_xyz);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the accel raw xyz to meterpersecseq*/
+ accel_xyz->x =
+ (float)(reg_accel_xyz.x/BNO055_ACCEL_DIV_MSQ);
+ accel_xyz->y =
+ (float)(reg_accel_xyz.y/BNO055_ACCEL_DIV_MSQ);
+ accel_xyz->z =
+ (float)(reg_accel_xyz.z/BNO055_ACCEL_DIV_MSQ);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_accel_t reg_accel_xyz = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ u8 accel_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current accel unit and set the
+ unit as mg if the unit is in m/s2*/
+ com_rslt = bno055_get_accel_unit(&accel_unit_u8);
+ if (accel_unit_u8 != BNO055_ACCEL_UNIT_MG)
+ com_rslt += bno055_set_accel_unit(BNO055_ACCEL_UNIT_MG);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the accel raw y data*/
+ com_rslt += bno055_read_accel_xyz(®_accel_xyz);
+ if (com_rslt == BNO055_SUCCESS) {
+ /*Convert the accel raw xyz to millig */
+ accel_xyz->x =
+ (float)(reg_accel_xyz.x/BNO055_ACCEL_DIV_MG);
+ accel_xyz->y =
+ (float)(reg_accel_xyz.y/BNO055_ACCEL_DIV_MG);
+ accel_xyz->z =
+ (float)(reg_accel_xyz.z/BNO055_ACCEL_DIV_MG);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the mag x raw data
+ * to microTesla output as float
+ *
+ * @param mag_x_f : The mag x microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_x_uT(
+float *mag_x_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_mag_x_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ /* Read raw mag x data */
+ com_rslt = bno055_read_mag_x(®_mag_x_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw mag x to microTesla*/
+ data_f = (float)(reg_mag_x_s16/BNO055_MAG_DIV_UT);
+ *mag_x_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the mag y raw data
+ * to microTesla output as float
+ *
+ * @param mag_y_f : The mag y microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_y_uT(
+float *mag_y_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_mag_y_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ /* Read raw mag y data */
+ com_rslt = bno055_read_mag_y(®_mag_y_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw mag y to microTesla*/
+ data_f = (float)(reg_mag_y_s16/BNO055_MAG_DIV_UT);
+ *mag_y_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the mag z raw data
+ * to microTesla output as float
+ *
+ * @param mag_z_f : The mag z microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_z_uT(
+float *mag_z_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_mag_z_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ /* Read raw mag z data */
+ com_rslt = bno055_read_mag_z(®_mag_z_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw mag z to microTesla*/
+ data_f = (float)(reg_mag_z_s16/BNO055_MAG_DIV_UT);
+ *mag_z_f = data_f;
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_mag_t mag_xyz = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ /* Read raw mag x data */
+ com_rslt = bno055_read_mag_xyz(&mag_xyz);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert mag raw xyz to microTesla*/
+ mag_xyz_data->x = (float)(mag_xyz.x/BNO055_MAG_DIV_UT);
+ mag_xyz_data->y = (float)(mag_xyz.y/BNO055_MAG_DIV_UT);
+ mag_xyz_data->z = (float)(mag_xyz.z/BNO055_MAG_DIV_UT);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to dps output as float
+ *
+ * @param gyro_x_f : The gyro x dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_x_dps(
+float *gyro_x_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gyro_x_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 gyro_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current gyro unit and set the
+ unit as dps if the unit is in rps */
+ com_rslt = bno055_get_gyro_unit(&gyro_unit_u8);
+ if (gyro_unit_u8 != BNO055_GYRO_UNIT_DPS)
+ com_rslt += bno055_set_gyro_unit(BNO055_GYRO_UNIT_DPS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read gyro raw x data */
+ com_rslt += bno055_read_gyro_x(®_gyro_x_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw gyro x to dps*/
+ data_f =
+ (float)(reg_gyro_x_s16/BNO055_GYRO_DIV_DPS);
+ *gyro_x_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to rps output as float
+ *
+ * @param gyro_x_f : The gyro x dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_x_rps(
+float *gyro_x_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gyro_x_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 gyro_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current gyro unit and set the
+ unit as rps if the unit is in dps */
+ com_rslt = bno055_get_gyro_unit(&gyro_unit_u8);
+ if (gyro_unit_u8 != BNO055_GYRO_UNIT_RPS)
+ com_rslt += bno055_set_gyro_unit(BNO055_GYRO_UNIT_RPS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read gyro raw x data */
+ com_rslt += bno055_read_gyro_x(®_gyro_x_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw gyro x to rps*/
+ data_f =
+ (float)(reg_gyro_x_s16/BNO055_GYRO_DIV_RPS);
+ *gyro_x_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to dps output as float
+ *
+ * @param gyro_y_f : The gyro y dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_y_dps(
+float *gyro_y_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gyro_y_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 gyro_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current gyro unit and set the
+ unit as dps if the unit is in rps */
+ com_rslt = bno055_get_gyro_unit(&gyro_unit_u8);
+ if (gyro_unit_u8 != BNO055_GYRO_UNIT_DPS)
+ com_rslt += bno055_set_gyro_unit(BNO055_GYRO_UNIT_DPS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read gyro raw y data */
+ com_rslt += bno055_read_gyro_y(®_gyro_y_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw gyro x to dps*/
+ data_f =
+ (float)(reg_gyro_y_s16/BNO055_GYRO_DIV_DPS);
+ *gyro_y_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to rps output as float
+ *
+ * @param gyro_y_f : The gyro y dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_y_rps(
+float *gyro_y_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gyro_y_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 gyro_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current gyro unit and set the
+ unit as rps if the unit is in dps */
+ com_rslt = bno055_get_gyro_unit(&gyro_unit_u8);
+ if (gyro_unit_u8 != BNO055_GYRO_UNIT_RPS)
+ com_rslt += bno055_set_gyro_unit(BNO055_GYRO_UNIT_RPS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read gyro raw y data */
+ com_rslt += bno055_read_gyro_y(®_gyro_y_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw gyro x to rps*/
+ data_f =
+ (float)(reg_gyro_y_s16/BNO055_GYRO_DIV_RPS);
+ *gyro_y_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to dps output as float
+ *
+ * @param gyro_z_f : The gyro z dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_z_dps(
+float *gyro_z_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gyro_z_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 gyro_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current gyro unit and set the
+ unit as dps if the unit is in rps */
+ com_rslt = bno055_get_gyro_unit(&gyro_unit_u8);
+ if (gyro_unit_u8 != BNO055_GYRO_UNIT_DPS)
+ com_rslt += bno055_set_gyro_unit(BNO055_GYRO_UNIT_DPS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read gyro raw z data */
+ com_rslt += bno055_read_gyro_z(®_gyro_z_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw gyro x to dps*/
+ data_f =
+ (float)(reg_gyro_z_s16/BNO055_GYRO_DIV_DPS);
+ *gyro_z_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to rps output as float
+ *
+ * @param gyro_z_f : The gyro z rps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_z_rps(
+float *gyro_z_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gyro_z_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 gyro_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current gyro unit and set the
+ unit as rps if the unit is in dps */
+ com_rslt = bno055_get_gyro_unit(&gyro_unit_u8);
+ if (gyro_unit_u8 != BNO055_GYRO_UNIT_RPS)
+ com_rslt += bno055_set_gyro_unit(BNO055_GYRO_UNIT_RPS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read gyro raw x data */
+ com_rslt += bno055_read_gyro_z(®_gyro_z_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw gyro x to rps*/
+ data_f =
+ (float)(reg_gyro_z_s16/BNO055_GYRO_DIV_RPS);
+ *gyro_z_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_gyro_t gyro_xyz = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ u8 gyro_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current gyro unit and set the
+ unit as dps if the unit is in rps */
+ com_rslt = bno055_get_gyro_unit(&gyro_unit_u8);
+ if (gyro_unit_u8 != BNO055_GYRO_UNIT_DPS)
+ com_rslt += bno055_set_gyro_unit(BNO055_GYRO_UNIT_DPS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read gyro raw xyz data */
+ com_rslt += bno055_read_gyro_xyz(&gyro_xyz);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert gyro raw xyz to dps*/
+ gyro_xyz_data->x =
+ (float)(gyro_xyz.x/BNO055_GYRO_DIV_DPS);
+ gyro_xyz_data->y =
+ (float)(gyro_xyz.y/BNO055_GYRO_DIV_DPS);
+ gyro_xyz_data->z =
+ (float)(gyro_xyz.z/BNO055_GYRO_DIV_DPS);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_gyro_t gyro_xyz = {BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ u8 gyro_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current gyro unit and set the
+ unit as rps if the unit is in dps */
+ com_rslt = bno055_get_gyro_unit(&gyro_unit_u8);
+ if (gyro_unit_u8 != BNO055_GYRO_UNIT_RPS)
+ com_rslt += bno055_set_gyro_unit(BNO055_GYRO_UNIT_RPS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read gyro raw xyz data */
+ com_rslt += bno055_read_gyro_xyz(&gyro_xyz);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert gyro raw xyz to rps*/
+ gyro_xyz_data->x =
+ (float)(gyro_xyz.x/BNO055_GYRO_DIV_RPS);
+ gyro_xyz_data->y =
+ (float)(gyro_xyz.y/BNO055_GYRO_DIV_RPS);
+ gyro_xyz_data->z =
+ (float)(gyro_xyz.z/BNO055_GYRO_DIV_RPS);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to degree output as float
+ *
+ * @param euler_h_f : The float value of Euler h degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_h_deg(
+float *euler_h_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_euler_h_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 euler_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current Euler unit and set the
+ unit as degree if the unit is in radians */
+ com_rslt = bno055_get_euler_unit(&euler_unit_u8);
+ if (euler_unit_u8 != BNO055_EULER_UNIT_DEG)
+ com_rslt += bno055_set_euler_unit(BNO055_EULER_UNIT_DEG);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read Euler raw h data*/
+ com_rslt += bno055_read_euler_h(®_euler_h_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw Euler h data to degree*/
+ data_f =
+ (float)(reg_euler_h_s16/BNO055_EULER_DIV_DEG);
+ *euler_h_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to radians output as float
+ *
+ * @param euler_h_f : The float value of Euler h radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_h_rad(
+float *euler_h_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_euler_h_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 euler_unit_u8 = BNO055_INIT_VALUE;
+
+ com_rslt = bno055_get_euler_unit(&euler_unit_u8);
+ if (euler_unit_u8 != BNO055_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(BNO055_EULER_UNIT_RAD);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read Euler raw h data*/
+ com_rslt += bno055_read_euler_h(®_euler_h_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw Euler h data to degree*/
+ data_f =
+ (float)(reg_euler_h_s16/BNO055_EULER_DIV_RAD);
+ *euler_h_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to degree output as float
+ *
+ * @param euler_r_f : The float value of Euler r degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_r_deg(
+float *euler_r_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_euler_r = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 euler_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current Euler unit and set the
+ unit as degree if the unit is in radians */
+ com_rslt = bno055_get_euler_unit(&euler_unit_u8);
+ if (euler_unit_u8 != BNO055_EULER_UNIT_DEG)
+ com_rslt += bno055_set_euler_unit(BNO055_EULER_UNIT_DEG);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read Euler raw r data*/
+ com_rslt += bno055_read_euler_r(®_euler_r);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw Euler r data to degree*/
+ data_f = (float)(
+ reg_euler_r/BNO055_EULER_DIV_DEG);
+ *euler_r_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to radians output as float
+ *
+ * @param euler_r_f : The float value of Euler r radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_r_rad(
+float *euler_r_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_euler_r_f = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 euler_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current Euler unit and set the
+ unit as radians if the unit is in degree */
+ com_rslt = bno055_get_euler_unit(&euler_unit_u8);
+ if (euler_unit_u8 != BNO055_EULER_UNIT_RAD)
+ com_rslt += bno055_set_euler_unit(BNO055_EULER_UNIT_RAD);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read Euler raw r data*/
+ com_rslt += bno055_read_euler_r(®_euler_r_f);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw Euler r data to radians*/
+ data_f =
+ (float)(reg_euler_r_f/BNO055_EULER_DIV_RAD);
+ *euler_r_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to degree output as float
+ *
+ * @param euler_p_f : The float value of Euler p degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_p_deg(
+float *euler_p_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_euler_p_f = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 euler_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current Euler unit and set the
+ unit as degree if the unit is in radians */
+ com_rslt = bno055_get_euler_unit(&euler_unit_u8);
+ if (euler_unit_u8 != BNO055_EULER_UNIT_DEG)
+ com_rslt += bno055_set_euler_unit(BNO055_EULER_UNIT_DEG);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read Euler raw p data*/
+ com_rslt += bno055_read_euler_p(®_euler_p_f);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw Euler p data to degree*/
+ data_f =
+ (float)(reg_euler_p_f/BNO055_EULER_DIV_DEG);
+ *euler_p_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to radians output as float
+ *
+ * @param euler_p_f : The float value of Euler p radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_p_rad(
+float *euler_p_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_euler_p_f = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 euler_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current Euler unit and set the
+ unit as radians if the unit is in degree */
+ com_rslt = bno055_get_euler_unit(&euler_unit_u8);
+ if (euler_unit_u8 != BNO055_EULER_UNIT_RAD)
+ com_rslt += bno055_set_euler_unit(BNO055_EULER_UNIT_RAD);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read Euler raw r data*/
+ com_rslt += bno055_read_euler_p(®_euler_p_f);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw Euler r data to radians*/
+ data_f =
+ (float)(reg_euler_p_f/BNO055_EULER_DIV_RAD);
+ *euler_p_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_euler_t reg_euler = {BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ u8 euler_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current Euler unit and set the
+ unit as degree if the unit is in radians */
+ com_rslt = bno055_get_euler_unit(&euler_unit_u8);
+ if (euler_unit_u8 != BNO055_EULER_UNIT_DEG)
+ com_rslt += bno055_set_euler_unit(BNO055_EULER_UNIT_DEG);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read Euler raw hrp data*/
+ com_rslt += bno055_read_euler_hrp(®_euler);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw Euler hrp to degree*/
+ euler_hpr->h =
+ (float)(reg_euler.h/BNO055_EULER_DIV_DEG);
+ euler_hpr->p =
+ (float)(reg_euler.p/BNO055_EULER_DIV_DEG);
+ euler_hpr->r =
+ (float)(reg_euler.r/BNO055_EULER_DIV_DEG);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_euler_t reg_euler = {BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ u8 euler_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current Euler unit and set the
+ unit as radians if the unit is in degree */
+ com_rslt = bno055_get_euler_unit(&euler_unit_u8);
+ if (euler_unit_u8 != BNO055_EULER_UNIT_RAD)
+ com_rslt += bno055_set_euler_unit(BNO055_EULER_UNIT_RAD);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read Euler raw hrp data*/
+ com_rslt += bno055_read_euler_hrp(®_euler);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw hrp to radians */
+ euler_hpr->h =
+ (float)(reg_euler.h/BNO055_EULER_DIV_RAD);
+ euler_hpr->p =
+ (float)(reg_euler.p/BNO055_EULER_DIV_RAD);
+ euler_hpr->r =
+ (float)(reg_euler.r/BNO055_EULER_DIV_RAD);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the linear
+ * accel x raw data to meterpersecseq output as float
+ *
+ * @param linear_accel_x_f : The float value of linear accel x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_x_msq(
+float *linear_accel_x_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_linear_accel_x_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ /* Read the raw x of linear accel */
+ com_rslt = bno055_read_linear_accel_x(®_linear_accel_x_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw linear accel x to m/s2*/
+ data_f =
+ (float)(reg_linear_accel_x_s16/BNO055_LINEAR_ACCEL_DIV_MSQ);
+ *linear_accel_x_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the linear
+ * accel y raw data to meterpersecseq output as float
+ *
+ * @param linear_accel_y_f : The float value of linear accel y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_y_msq(
+float *linear_accel_y_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_linear_accel_y = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ /* Read the raw y of linear accel */
+ com_rslt = bno055_read_linear_accel_y(®_linear_accel_y);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw linear accel x to m/s2*/
+ data_f = (float)
+ (reg_linear_accel_y/BNO055_LINEAR_ACCEL_DIV_MSQ);
+ *linear_accel_y_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the linear
+ * accel z raw data to meterpersecseq output as float
+ *
+ * @param linear_accel_z_f : The float value of linear accel z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_z_msq(
+float *linear_accel_z_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_linear_accel_z = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ /* Read the raw x of linear accel */
+ com_rslt = bno055_read_linear_accel_z(®_linear_accel_z);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw linear accel z to m/s2*/
+ data_f = (float)
+ (reg_linear_accel_z/BNO055_LINEAR_ACCEL_DIV_MSQ);
+ *linear_accel_z_f = data_f;
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_linear_accel_t reg_linear_accel = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ /* Read the raw x of linear accel */
+ com_rslt = bno055_read_linear_accel_xyz(®_linear_accel);
+ if (com_rslt == BNO055_SUCCESS) {
+ linear_accel_xyz->x =
+ (float)(reg_linear_accel.x/BNO055_LINEAR_ACCEL_DIV_MSQ);
+ linear_accel_xyz->y =
+ (float)(reg_linear_accel.y/BNO055_LINEAR_ACCEL_DIV_MSQ);
+ linear_accel_xyz->z =
+ (float)(reg_linear_accel.z/BNO055_LINEAR_ACCEL_DIV_MSQ);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gravity
+ * x raw data to meterpersecseq output as float
+ *
+ * @param gravity_x_f : The float value of gravity x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_float_x_msq(
+float *gravity_x_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gravity_x_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ /* Read raw gravity of x*/
+ com_rslt = bno055_read_gravity_x(®_gravity_x_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw gravity x to m/s2*/
+ data_f = (float)(reg_gravity_x_s16/BNO055_GRAVITY_DIV_MSQ);
+ *gravity_x_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gravity
+ * y raw data to meterpersecseq output as float
+ *
+ * @param gravity_y_f : The float value of gravity y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_float_y_msq(
+float *gravity_y_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gravity_y_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ /* Read raw gravity of y*/
+ com_rslt = bno055_read_gravity_y(®_gravity_y_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw gravity y to m/s2*/
+ data_f = (float)(reg_gravity_y_s16/BNO055_GRAVITY_DIV_MSQ);
+ *gravity_y_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gravity
+ * z raw data to meterpersecseq output as float
+ *
+ * @param gravity_z_f : The float value of gravity z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_float_z_msq(
+float *gravity_z_f)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gravity_z_s16 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ /* Read raw gravity of z */
+ com_rslt = bno055_read_gravity_z(®_gravity_z_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw gravity z to m/s2*/
+ data_f = (float)(reg_gravity_z_s16/BNO055_GRAVITY_DIV_MSQ);
+ *gravity_z_f = data_f;
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_gravity_t reg_gravity_xyz = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ /* Read raw gravity of xyz */
+ com_rslt = bno055_read_gravity_xyz(®_gravity_xyz);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw gravity xyz to meterpersecseq */
+ gravity_xyz->x =
+ (float)(reg_gravity_xyz.x/BNO055_GRAVITY_DIV_MSQ);
+ gravity_xyz->y =
+ (float)(reg_gravity_xyz.y/BNO055_GRAVITY_DIV_MSQ);
+ gravity_xyz->z =
+ (float)(reg_gravity_xyz.z/BNO055_GRAVITY_DIV_MSQ);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Fahrenheit output as float
+ *
+ * @param temp_f : The float value of temperature Fahrenheit
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_temp_fahrenheit(
+float *temp_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s8 reg_temp_s8 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 temp_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current temperature unit and set the
+ unit as Fahrenheit if the unit is in Celsius */
+ com_rslt = bno055_get_temp_unit(&temp_unit_u8);
+ if (temp_unit_u8 != BNO055_TEMP_UNIT_FAHRENHEIT)
+ com_rslt += bno055_set_temp_unit(BNO055_TEMP_UNIT_FAHRENHEIT);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the raw temperature data */
+ com_rslt += bno055_read_temp_data(®_temp_s8);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw temperature data to Fahrenheit*/
+ data_f = (float)
+ (reg_temp_s8/BNO055_TEMP_DIV_FAHRENHEIT);
+ *temp_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Celsius output as float
+ *
+ * @param temp_f : The float value of temperature Celsius
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_temp_celsius(
+float *temp_f)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s8 reg_temp_s8 = BNO055_INIT_VALUE;
+ float data_f = BNO055_INIT_VALUE;
+ u8 temp_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current temperature unit and set the
+ unit as Fahrenheit if the unit is in Celsius */
+ com_rslt = bno055_get_temp_unit(&temp_unit_u8);
+ if (temp_unit_u8 != BNO055_TEMP_UNIT_CELSIUS)
+ com_rslt += bno055_set_temp_unit(BNO055_TEMP_UNIT_CELSIUS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the raw temperature data */
+ com_rslt += bno055_read_temp_data(®_temp_s8);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw temperature data to Fahrenheit*/
+ data_f =
+ (float)(reg_temp_s8/BNO055_TEMP_DIV_CELSIUS);
+ *temp_f = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_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 accel_x_d : The accel x meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_x_msq(
+double *accel_x_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_accel_x_s16 = BNO055_INIT_VALUE;
+ double data_f = BNO055_INIT_VALUE;
+ u8 accel_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&accel_unit_u8);
+ if (accel_unit_u8 != BNO055_ACCEL_UNIT_MSQ)
+ com_rslt += bno055_set_accel_unit(BNO055_ACCEL_UNIT_MSQ);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the accel raw y data*/
+ com_rslt += bno055_read_accel_x(®_accel_x_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw x to m/s2 */
+ data_f =
+ (double)(reg_accel_x_s16/BNO055_ACCEL_DIV_MSQ);
+ *accel_x_d = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to millig output as double
+ *
+ * @param accel_x_d : The accel x millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_x_mg(
+double *accel_x_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_accel_x_s16 = BNO055_INIT_VALUE;
+ double data_f = BNO055_INIT_VALUE;
+ u8 accel_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current accel unit and set the
+ unit as mg if the unit is in m/s2*/
+ com_rslt = bno055_get_accel_unit(&accel_unit_u8);
+ if (accel_unit_u8 != BNO055_ACCEL_UNIT_MG)
+ com_rslt += bno055_set_accel_unit(BNO055_ACCEL_UNIT_MG);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the accel raw y data*/
+ com_rslt += bno055_read_accel_x(®_accel_x_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw x to mg */
+ data_f =
+ (double)(reg_accel_x_s16/BNO055_ACCEL_DIV_MG);
+ *accel_x_d = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel y raw data
+ * to meterpersecseq output as double
+ *
+ * @param accel_y_d : The accel y meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_y_msq(
+double *accel_y_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_accel_y_s16 = BNO055_INIT_VALUE;
+ double data_f = BNO055_INIT_VALUE;
+ u8 accel_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&accel_unit_u8);
+ if (accel_unit_u8 != BNO055_ACCEL_UNIT_MSQ)
+ com_rslt += bno055_set_accel_unit(BNO055_ACCEL_UNIT_MSQ);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the accel raw y data*/
+ com_rslt += bno055_read_accel_y(®_accel_y_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw x to m/s2 */
+ data_f =
+ (double)(reg_accel_y_s16/BNO055_ACCEL_DIV_MSQ);
+ *accel_y_d = data_f;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel y raw data
+ * to millig output as double
+ *
+ * @param accel_y_d : The accel y millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_y_mg(
+double *accel_y_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_accel_y_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ u8 accel_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current accel unit and set the
+ unit as mg if the unit is in m/s2*/
+ com_rslt = bno055_get_accel_unit(&accel_unit_u8);
+ if (accel_unit_u8 != BNO055_ACCEL_UNIT_MG)
+ com_rslt += bno055_set_accel_unit(BNO055_ACCEL_UNIT_MG);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the accel raw y data*/
+ com_rslt += bno055_read_accel_y(®_accel_y_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw y to mg */
+ data_d =
+ (double)(reg_accel_y_s16/BNO055_ACCEL_DIV_MG);
+ *accel_y_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to meterpersecseq output as double
+ *
+ * @param accel_z_d : The accel z meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_z_msq(
+double *accel_z_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_accel_z_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ u8 accel_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&accel_unit_u8);
+ if (accel_unit_u8 != BNO055_ACCEL_UNIT_MSQ)
+ com_rslt += bno055_set_accel_unit(BNO055_ACCEL_UNIT_MSQ);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the accel raw z data*/
+ com_rslt += bno055_read_accel_z(®_accel_z_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw z to m/s2 */
+ data_d =
+ (double)(reg_accel_z_s16/BNO055_ACCEL_DIV_MSQ);
+ *accel_z_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to millig output as double
+ *
+ * @param accel_z_d : The accel z millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_z_mg(
+double *accel_z_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_accel_z_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ u8 accel_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current accel unit and set the
+ unit as mg if the unit is in m/s2*/
+ com_rslt = bno055_get_accel_unit(&accel_unit_u8);
+ if (accel_unit_u8 != BNO055_ACCEL_UNIT_MG)
+ com_rslt += bno055_set_accel_unit(BNO055_ACCEL_UNIT_MG);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the accel raw z data*/
+ com_rslt += bno055_read_accel_z(®_accel_z_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw z to mg */
+ data_d =
+ (double)(reg_accel_z_s16/BNO055_ACCEL_DIV_MG);
+ *accel_z_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_accel_t reg_accel_xyz = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ u8 accel_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&accel_unit_u8);
+ if (accel_unit_u8 != BNO055_ACCEL_UNIT_MSQ)
+ com_rslt += bno055_set_accel_unit(BNO055_ACCEL_UNIT_MSQ);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the accel raw xyz data*/
+ com_rslt += bno055_read_accel_xyz(®_accel_xyz);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw xyz to m/s2*/
+ accel_xyz->x =
+ (double)(reg_accel_xyz.x/BNO055_ACCEL_DIV_MSQ);
+ accel_xyz->y =
+ (double)(reg_accel_xyz.y/BNO055_ACCEL_DIV_MSQ);
+ accel_xyz->z =
+ (double)(reg_accel_xyz.z/BNO055_ACCEL_DIV_MSQ);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_accel_t reg_accel_xyz = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ u8 accel_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current accel unit and set the
+ unit as m/s2 if the unit is in mg*/
+ com_rslt = bno055_get_accel_unit(&accel_unit_u8);
+ if (accel_unit_u8 != BNO055_ACCEL_UNIT_MG)
+ com_rslt += bno055_set_accel_unit(BNO055_ACCEL_UNIT_MG);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the accel raw xyz data*/
+ com_rslt += bno055_read_accel_xyz(®_accel_xyz);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw xyz to mg*/
+ accel_xyz->x =
+ (double)(reg_accel_xyz.x/BNO055_ACCEL_DIV_MG);
+ accel_xyz->y =
+ (double)(reg_accel_xyz.y/BNO055_ACCEL_DIV_MG);
+ accel_xyz->z =
+ (double)(reg_accel_xyz.z/BNO055_ACCEL_DIV_MG);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the mag x raw data
+ * to microTesla output as double
+ *
+ * @param mag_x_d : The mag x microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_x_uT(
+double *mag_x_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_mag_x_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ /* Read raw mag x data */
+ com_rslt = bno055_read_mag_x(®_mag_x_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw mag x to microTesla */
+ data_d = (double)(reg_mag_x_s16/BNO055_MAG_DIV_UT);
+ *mag_x_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the mag y raw data
+ * to microTesla output as double
+ *
+ * @param mag_y_d : The mag y microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_y_uT(
+double *mag_y_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_mag_y_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ /* Read raw mag y data */
+ com_rslt = bno055_read_mag_y(®_mag_y_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw mag y to microTesla */
+ data_d = (double)(reg_mag_y_s16/BNO055_MAG_DIV_UT);
+ *mag_y_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the mag z raw data
+ * to microTesla output as double
+ *
+ * @param mag_z_d : The mag z microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_z_uT(
+double *mag_z_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_mag_z_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ /* Read raw mag x */
+ com_rslt = bno055_read_mag_z(®_mag_z_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw mag x to microTesla */
+ data_d = (double)(reg_mag_z_s16/BNO055_MAG_DIV_UT);
+ *mag_z_d = data_d;
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_mag_t reg_mag_xyz = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ /* Read raw mag xyz data */
+ com_rslt = bno055_read_mag_xyz(®_mag_xyz);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw mag xyz to microTesla*/
+ mag_xyz->x =
+ (double)(reg_mag_xyz.x/BNO055_MAG_DIV_UT);
+ mag_xyz->y =
+ (double)(reg_mag_xyz.y/BNO055_MAG_DIV_UT);
+ mag_xyz->z =
+ (double)(reg_mag_xyz.z/BNO055_MAG_DIV_UT);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to dps output as double
+ *
+ * @param gyro_x_d : The gyro x dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_x_dps(
+double *gyro_x_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gyro_x_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ u8 gyro_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current gyro unit and set the
+ unit as dps if the unit is in rps */
+ com_rslt = bno055_get_gyro_unit(&gyro_unit_u8);
+ if (gyro_unit_u8 != BNO055_GYRO_UNIT_DPS)
+ com_rslt += bno055_set_gyro_unit(BNO055_GYRO_UNIT_DPS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read gyro raw x data */
+ com_rslt += bno055_read_gyro_x(®_gyro_x_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw gyro x to dps */
+ data_d =
+ (double)(reg_gyro_x_s16/BNO055_GYRO_DIV_DPS);
+ *gyro_x_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to rps output as double
+ *
+ * @param gyro_x_d : The gyro x dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_x_rps(
+double *gyro_x_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gyro_x_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ u8 gyro_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current gyro unit and set the
+ unit as rps if the unit is in dps */
+ com_rslt = bno055_get_gyro_unit(&gyro_unit_u8);
+ if (gyro_unit_u8 != BNO055_GYRO_UNIT_RPS)
+ com_rslt += bno055_set_gyro_unit(BNO055_GYRO_UNIT_RPS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read gyro raw x data */
+ com_rslt += bno055_read_gyro_x(®_gyro_x_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw gyro x to rps */
+ data_d =
+ (double)(reg_gyro_x_s16/BNO055_GYRO_DIV_RPS);
+ *gyro_x_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to dps output as double
+ *
+ * @param gyro_y_d : The gyro y dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_y_dps(
+double *gyro_y_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gyro_y_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ u8 gyro_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current gyro unit and set the
+ unit as dps if the unit is in rps */
+ com_rslt = bno055_get_gyro_unit(&gyro_unit_u8);
+ if (gyro_unit_u8 != BNO055_GYRO_UNIT_DPS)
+ com_rslt += bno055_set_gyro_unit(BNO055_GYRO_UNIT_DPS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read gyro raw y data */
+ com_rslt += bno055_read_gyro_y(®_gyro_y_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw gyro y to dps */
+ data_d =
+ (double)(reg_gyro_y_s16/BNO055_GYRO_DIV_DPS);
+ *gyro_y_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to rps output as double
+ *
+ * @param gyro_y_d : The gyro y dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_y_rps(
+double *gyro_y_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gyro_y_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ u8 gyro_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current gyro unit and set the
+ unit as rps if the unit is in dps */
+ com_rslt = bno055_get_gyro_unit(&gyro_unit_u8);
+ if (gyro_unit_u8 != BNO055_GYRO_UNIT_RPS)
+ com_rslt += bno055_set_gyro_unit(BNO055_GYRO_UNIT_RPS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read gyro raw y data */
+ com_rslt += bno055_read_gyro_y(®_gyro_y_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw gyro y to rps */
+ data_d =
+ (double)(reg_gyro_y_s16/BNO055_GYRO_DIV_RPS);
+ *gyro_y_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to dps output as double
+ *
+ * @param gyro_z_d : The gyro z dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_z_dps(
+double *gyro_z_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gyro_z_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ u8 gyro_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current gyro unit and set the
+ unit as dps if the unit is in rps */
+ com_rslt = bno055_get_gyro_unit(&gyro_unit_u8);
+ if (gyro_unit_u8 != BNO055_GYRO_UNIT_DPS)
+ com_rslt += bno055_set_gyro_unit(BNO055_GYRO_UNIT_DPS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read gyro raw z data */
+ com_rslt += bno055_read_gyro_z(®_gyro_z_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw gyro z to dps */
+ data_d =
+ (double)(reg_gyro_z_s16/BNO055_GYRO_DIV_DPS);
+ *gyro_z_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to rps output as double
+ *
+ * @param gyro_z_d : The gyro z rps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_z_rps(
+double *gyro_z_d)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gyro_z_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ u8 gyro_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current gyro unit and set the
+ unit as rps if the unit is in dps */
+ com_rslt = bno055_get_gyro_unit(&gyro_unit_u8);
+ if (gyro_unit_u8 != BNO055_GYRO_UNIT_RPS)
+ com_rslt += bno055_set_gyro_unit(BNO055_GYRO_UNIT_RPS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read gyro raw x data */
+ com_rslt += bno055_read_gyro_z(®_gyro_z_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw gyro x to rps */
+ data_d =
+ (double)(reg_gyro_z_s16/BNO055_GYRO_DIV_RPS);
+ *gyro_z_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_gyro_t reg_gyro_xyz = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ u8 gyro_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current gyro unit and set the
+ unit as dps if the unit is in rps */
+ com_rslt = bno055_get_gyro_unit(&gyro_unit_u8);
+ if (gyro_unit_u8 != BNO055_GYRO_UNIT_DPS)
+ com_rslt += bno055_set_gyro_unit(BNO055_GYRO_UNIT_DPS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read gyro raw xyz data */
+ com_rslt += bno055_read_gyro_xyz(®_gyro_xyz);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert gyro raw xyz to dps*/
+ gyro_xyz->x =
+ (double)(reg_gyro_xyz.x/BNO055_GYRO_DIV_DPS);
+ gyro_xyz->y =
+ (double)(reg_gyro_xyz.y/BNO055_GYRO_DIV_DPS);
+ gyro_xyz->z =
+ (double)(reg_gyro_xyz.z/BNO055_GYRO_DIV_DPS);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_gyro_t reg_gyro_xyz = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ u8 gyro_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current gyro unit and set the
+ unit as rps if the unit is in dps */
+ com_rslt = bno055_get_gyro_unit(&gyro_unit_u8);
+ if (gyro_unit_u8 != BNO055_GYRO_UNIT_RPS)
+ com_rslt += bno055_set_gyro_unit(BNO055_GYRO_UNIT_RPS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read gyro raw x data */
+ com_rslt += bno055_read_gyro_xyz(®_gyro_xyz);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw gyro xyz to rps*/
+ gyro_xyz->x =
+ (double)(reg_gyro_xyz.x/BNO055_GYRO_DIV_RPS);
+ gyro_xyz->y =
+ (double)(reg_gyro_xyz.y/BNO055_GYRO_DIV_RPS);
+ gyro_xyz->z =
+ (double)(reg_gyro_xyz.z/BNO055_GYRO_DIV_RPS);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to degree output as double
+ *
+ * @param euler_h_d : The double value of Euler h degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_h_deg(
+double *euler_h_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_euler_h_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ u8 euler_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current Euler unit and set the
+ unit as degree if the unit is in radians */
+ com_rslt = bno055_get_euler_unit(&euler_unit_u8);
+ if (euler_unit_u8 != BNO055_EULER_UNIT_DEG)
+ com_rslt += bno055_set_euler_unit(BNO055_EULER_UNIT_DEG);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read Euler raw h data*/
+ com_rslt += bno055_read_euler_h(®_euler_h_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw Euler h to degree */
+ data_d =
+ (double)(reg_euler_h_s16/BNO055_EULER_DIV_DEG);
+ *euler_h_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to radians output as double
+ *
+ * @param euler_h_d : The double value of Euler h radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_h_rad(
+double *euler_h_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_euler_h_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ u8 euler_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current Euler unit and set the
+ unit as radians if the unit is in degree */
+ com_rslt = bno055_get_euler_unit(&euler_unit_u8);
+ if (euler_unit_u8 != BNO055_EULER_UNIT_RAD)
+ com_rslt += bno055_set_euler_unit(BNO055_EULER_UNIT_RAD);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read Euler raw h data*/
+ com_rslt += bno055_read_euler_h(®_euler_h_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw Euler h to radians */
+ data_d =
+ (double)(reg_euler_h_s16/BNO055_EULER_DIV_RAD);
+ *euler_h_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to degree output as double
+ *
+ * @param euler_r_d : The double value of Euler r degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_r_deg(
+double *euler_r_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_euler_r_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ u8 euler_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current Euler unit and set the
+ unit as degree if the unit is in radians */
+ com_rslt = bno055_get_euler_unit(&euler_unit_u8);
+ if (euler_unit_u8 != BNO055_EULER_UNIT_DEG)
+ com_rslt += bno055_set_euler_unit(BNO055_EULER_UNIT_DEG);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read Euler raw r data*/
+ com_rslt += bno055_read_euler_r(®_euler_r_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw Euler r to degree */
+ data_d =
+ (double)(reg_euler_r_s16/BNO055_EULER_DIV_DEG);
+ *euler_r_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to radians output as double
+ *
+ * @param euler_r_d : The double value of Euler r radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_r_rad(
+double *euler_r_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_euler_r_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ u8 euler_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current Euler unit and set the
+ unit as radians if the unit is in degree */
+ com_rslt = bno055_get_euler_unit(&euler_unit_u8);
+ if (euler_unit_u8 != BNO055_EULER_UNIT_RAD)
+ com_rslt += bno055_set_euler_unit(BNO055_EULER_UNIT_RAD);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read Euler raw r data*/
+ com_rslt += bno055_read_euler_r(®_euler_r_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw Euler r to radians */
+ data_d =
+ (double)(reg_euler_r_s16/BNO055_EULER_DIV_RAD);
+ *euler_r_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to degree output as double
+ *
+ * @param euler_p_d : The double value of Euler p degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_p_deg(
+double *euler_p_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_euler_p_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ u8 euler_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current Euler unit and set the
+ unit as degree if the unit is in radians */
+ com_rslt = bno055_get_euler_unit(&euler_unit_u8);
+ if (euler_unit_u8 != BNO055_EULER_UNIT_DEG)
+ com_rslt += bno055_set_euler_unit(BNO055_EULER_UNIT_DEG);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read Euler raw p data*/
+ com_rslt += bno055_read_euler_p(®_euler_p_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw Euler p to degree*/
+ data_d =
+ (double)(reg_euler_p_s16/BNO055_EULER_DIV_DEG);
+ *euler_p_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to radians output as double
+ *
+ * @param euler_p_d : The double value of Euler p radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_p_rad(
+double *euler_p_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_euler_p_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ u8 euler_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current Euler unit and set the
+ unit as radians if the unit is in degree */
+ com_rslt = bno055_get_euler_unit(&euler_unit_u8);
+ if (euler_unit_u8 != BNO055_EULER_UNIT_RAD)
+ com_rslt += bno055_set_euler_unit(BNO055_EULER_UNIT_RAD);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read Euler raw p data*/
+ com_rslt += bno055_read_euler_p(®_euler_p_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw p to radians*/
+ data_d =
+ (double)(reg_euler_p_s16/BNO055_EULER_DIV_RAD);
+ *euler_p_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_euler_t reg_euler = {BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ u8 euler_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current Euler unit and set the
+ unit as degree if the unit is in radians */
+ com_rslt = bno055_get_euler_unit(&euler_unit_u8);
+ if (euler_unit_u8 != BNO055_EULER_UNIT_DEG)
+ com_rslt += bno055_set_euler_unit(BNO055_EULER_UNIT_DEG);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read Euler raw h data*/
+ com_rslt += bno055_read_euler_hrp(®_euler);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw Euler hrp to degree*/
+ euler_hpr->h =
+ (double)(reg_euler.h/BNO055_EULER_DIV_DEG);
+ euler_hpr->p =
+ (double)(reg_euler.p/BNO055_EULER_DIV_DEG);
+ euler_hpr->r =
+ (double)(reg_euler.r/BNO055_EULER_DIV_DEG);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_euler_t reg_euler = {BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ u8 euler_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current Euler unit and set the
+ unit as radians if the unit is in degree */
+ com_rslt = bno055_get_euler_unit(&euler_unit_u8);
+ if (euler_unit_u8 != BNO055_EULER_UNIT_RAD)
+ com_rslt = bno055_set_euler_unit(BNO055_EULER_UNIT_RAD);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the raw hrp */
+ com_rslt = bno055_read_euler_hrp(®_euler);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw Euler hrp to radians*/
+ euler_hpr->h =
+ (double)(reg_euler.h/BNO055_EULER_DIV_RAD);
+ euler_hpr->p =
+ (double)(reg_euler.p/BNO055_EULER_DIV_RAD);
+ euler_hpr->r =
+ (double)(reg_euler.r/BNO055_EULER_DIV_RAD);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the linear
+ * accel x raw data to meterpersecseq output as double
+ *
+ * @param linear_accel_x_d : The double value of
+ * linear accel x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_x_msq(
+double *linear_accel_x_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_linear_accel_x_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ /* Read the raw x of linear accel */
+ com_rslt = bno055_read_linear_accel_x(®_linear_accel_x_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw x to m/s2 */
+ data_d = (double)
+ (reg_linear_accel_x_s16/BNO055_LINEAR_ACCEL_DIV_MSQ);
+ *linear_accel_x_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the linear
+ * accel y raw data to meterpersecseq output as double
+ *
+ * @param linear_accel_y_d : The double value of
+ * linear accel y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_y_msq(
+double *linear_accel_y_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_linear_accel_y_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ /* Read the raw x of linear accel */
+ com_rslt = bno055_read_linear_accel_y(®_linear_accel_y_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw y to m/s2 */
+ data_d = (double)
+ (reg_linear_accel_y_s16/BNO055_LINEAR_ACCEL_DIV_MSQ);
+ *linear_accel_y_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the linear
+ * accel z raw data to meterpersecseq output as double
+ *
+ * @param linear_accel_z_d : The double value of
+ * linear accel z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_z_msq(
+double *linear_accel_z_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_linear_accel_z_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ /* Read the raw x of linear accel */
+ com_rslt = bno055_read_linear_accel_z(®_linear_accel_z_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw z to m/s2 */
+ data_d =
+ (double)(reg_linear_accel_z_s16/BNO055_LINEAR_ACCEL_DIV_MSQ);
+ *linear_accel_z_d = data_d;
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_linear_accel_t reg_linear_accel_xyz = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ /* Read the raw xyz of linear accel */
+ com_rslt = bno055_read_linear_accel_xyz(®_linear_accel_xyz);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert the raw xyz of linear accel to m/s2 */
+ linear_accel_xyz->x =
+ (double)(reg_linear_accel_xyz.x/BNO055_LINEAR_ACCEL_DIV_MSQ);
+ linear_accel_xyz->y =
+ (double)(reg_linear_accel_xyz.y/BNO055_LINEAR_ACCEL_DIV_MSQ);
+ linear_accel_xyz->z =
+ (double)(reg_linear_accel_xyz.z/BNO055_LINEAR_ACCEL_DIV_MSQ);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gravity
+ * x raw data to meterpersecseq output as double
+ *
+ * @param gravity_x_d : The double value of gravity x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_double_x_msq(
+double *gravity_x_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gravity_x_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ /* Read raw gravity of x*/
+ com_rslt = bno055_read_gravity_x(®_gravity_x_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw gravity of x to m/s2 */
+ data_d =
+ (double)(reg_gravity_x_s16/BNO055_GRAVITY_DIV_MSQ);
+ *gravity_x_d = data_d;
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gravity
+ * y raw data to meterpersecseq output as double
+ *
+ * @param gravity_y_d : The double value of gravity y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_double_y_msq(
+double *gravity_y_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gravity_y_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ /* Read raw gravity of y */
+ com_rslt = bno055_read_gravity_y(®_gravity_y_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* convert raw gravity of y to m/s2 */
+ data_d =
+ (double)(reg_gravity_y_s16/BNO055_GRAVITY_DIV_MSQ);
+ *gravity_y_d = data_d;
+ } else {
+ com_rslt += BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the gravity
+ * z raw data to meterpersecseq output as double
+ *
+ * @param gravity_z_d : The double value of gravity z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_double_z_msq(
+double *gravity_z_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s16 reg_gravity_z_s16 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ /* Read raw gravity of z */
+ com_rslt = bno055_read_gravity_z(®_gravity_z_s16);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw gravity of z to m/s2 */
+ data_d =
+ (double)(reg_gravity_z_s16/BNO055_GRAVITY_DIV_MSQ);
+ *gravity_z_d = data_d;
+ } else {
+ com_rslt += BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ struct bno055_gravity_t reg_gravity_xyz = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ /* Read raw gravity of xyz */
+ com_rslt = bno055_read_gravity_xyz(®_gravity_xyz);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw gravity of xyz to m/s2 */
+ gravity_xyz->x =
+ (double)(reg_gravity_xyz.x/BNO055_GRAVITY_DIV_MSQ);
+ gravity_xyz->y =
+ (double)(reg_gravity_xyz.y/BNO055_GRAVITY_DIV_MSQ);
+ gravity_xyz->z =
+ (double)(reg_gravity_xyz.z/BNO055_GRAVITY_DIV_MSQ);
+ } else {
+ com_rslt += BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Fahrenheit output as double
+ *
+ * @param temp_d : The double value of temperature Fahrenheit
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_temp_fahrenheit(
+double *temp_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s8 reg_temp_s8 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ u8 temp_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current temperature unit and set the
+ unit as Fahrenheit if the unit is in Celsius */
+ com_rslt = bno055_get_temp_unit(&temp_unit_u8);
+ if (temp_unit_u8 != BNO055_TEMP_UNIT_FAHRENHEIT)
+ com_rslt += bno055_set_temp_unit(BNO055_TEMP_UNIT_FAHRENHEIT);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the raw temperature data */
+ com_rslt += bno055_read_temp_data(®_temp_s8);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw temperature data to Fahrenheit*/
+ data_d = (double)(reg_temp_s8/
+ BNO055_TEMP_DIV_FAHRENHEIT);
+ *temp_d = data_d;
+ } else {
+ com_rslt += BNO055_ERROR;
+ }
+ } else {
+ com_rslt += BNO055_ERROR;
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Celsius output as double
+ *
+ * @param temp_d : The double value of temperature Celsius
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_temp_celsius(
+double *temp_d)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ s8 reg_temp_s8 = BNO055_INIT_VALUE;
+ double data_d = BNO055_INIT_VALUE;
+ u8 temp_unit_u8 = BNO055_INIT_VALUE;
+ /* Read the current temperature unit and set the
+ unit as Fahrenheit if the unit is in Celsius */
+ com_rslt = bno055_get_temp_unit(&temp_unit_u8);
+ if (temp_unit_u8 != BNO055_TEMP_UNIT_CELSIUS)
+ com_rslt += bno055_set_temp_unit(BNO055_TEMP_UNIT_CELSIUS);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the raw temperature data */
+ com_rslt += bno055_read_temp_data(®_temp_s8);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Convert raw temperature data to Fahrenheit*/
+ data_d =
+ (double)(reg_temp_s8/BNO055_TEMP_DIV_CELSIUS);
+ *temp_d = data_d;
+ } else {
+ com_rslt += BNO055_ERROR;
+ }
+ } else {
+ com_rslt += BNO055_ERROR;
+ }
+ return com_rslt;
+}
+#endif
+/*!
+ * @brief This API used to read
+ * mag calibration status from register from 0x35 bit 0 and 1
+ *
+ * @param mag_calib_u8 : The value of mag calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_calib_stat(
+u8 *mag_calib_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, mag calib
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the mag calib stat_s8 */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_CALIB_STAT_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *mag_calib_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_MAG_CALIB_STAT);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read
+ * accel calibration status from register from 0x35 bit 2 and 3
+ *
+ * @param accel_calib_u8 : The value of accel calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_calib_stat(
+u8 *accel_calib_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty*/
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel calib
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the accel calib stat_s8 */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_CALIB_STAT_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_calib_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_CALIB_STAT);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read
+ * gyro calibration status from register from 0x35 bit 4 and 5
+ *
+ * @param gyro_calib_u8 : The value of gyro calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_calib_stat(
+u8 *gyro_calib_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro calib
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the gyro calib status */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_CALIB_STAT_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_calib_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_CALIB_STAT);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read
+ * system calibration status from register from 0x35 bit 6 and 7
+ *
+ * @param sys_calib_u8 : The value of system calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_calib_stat(
+u8 *sys_calib_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty*/
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page,system calib
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the system calib */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SYS_CALIB_STAT_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *sys_calib_u8 =
+ BNO055_GET_BITSLICE(data_u8r, BNO055_SYS_CALIB_STAT);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read
+ * all calibration status from register from 0x35
+ *
+ * @param all_calib_u8 : The value of system calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_all_calib_stat(
+u8 *all_calib_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty*/
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page,system calib
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the system calib */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ALL_CALIB_STAT_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *all_calib_u8 =
+ BNO055_GET_BITSLICE(data_u8r, BNO055_ALL_CALIB_STAT);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read
+ * self test of accel from register from 0x36 bit 0
+ *
+ * @param selftest_accel_u8 : The value of self test of accel
+ *
+ * selftest_accel_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_accel(
+u8 *selftest_accel_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel self test is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the accel self test */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SELFTEST_ACCEL_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *selftest_accel_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_SELFTEST_ACCEL);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read
+ * self test of mag from register from 0x36 bit 1
+ *
+ * @param selftest_mag_u8 : The value of self test of mag
+ *
+ * selftest_mag_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_mag(
+u8 *selftest_mag_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, self test of mag is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the mag self test */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SELFTEST_MAG_REG, &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ *selftest_mag_u8 =
+ BNO055_GET_BITSLICE(data_u8r, BNO055_SELFTEST_MAG);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read
+ * self test of gyro from register from 0x36 bit 2
+ *
+ * @param selftest_gyro_u8 : The value of self test of gyro
+ *
+ * selftest_gyro_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_gyro(
+u8 *selftest_gyro_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page self test of gyro is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the gyro self test */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SELFTEST_GYRO_REG, &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ *selftest_gyro_u8 =
+ BNO055_GET_BITSLICE(data_u8r, BNO055_SELFTEST_GYRO);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read
+ * self test of micro controller from register from 0x36 bit 3
+ *
+ * @param selftest_mcu_u8 : The value of self test of micro controller
+ *
+ * selftest_mcu_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_mcu(
+u8 *selftest_mcu_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page self test of micro controller
+ is available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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, &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ *selftest_mcu_u8 =
+ BNO055_GET_BITSLICE(data_u8r, BNO055_SELFTEST_MCU);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the stat_s8 of
+ * gyro anymotion interrupt from register from 0x37 bit 2
+ *
+ * @param gyro_any_motion_u8 : The value of gyro anymotion interrupt
+ *
+ * gyro_any_motion_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro anymotion interrupt can be BNO055_BIT_ENABLE
+ * 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 *gyro_any_motion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro anymotion interrupt
+ status is available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the gyro anymotion interrupt stat_s8*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_INTR_STAT_GYRO_ANY_MOTION_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_any_motion_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_INTR_STAT_GYRO_ANY_MOTION);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the stat_s8 of
+ * gyro highrate interrupt from register from 0x37 bit 3
+ *
+ * @param gyro_highrate_u8 : The value of gyro highrate interrupt
+ *
+ * gyro_highrate_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *gyro_highrate_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the gyro highrate interrupt stat_s8*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_INTR_STAT_GYRO_HIGHRATE_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_highrate_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_INTR_STAT_GYRO_HIGHRATE);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the stat_s8 of
+ * accel highg interrupt from register from 0x37 bit 5
+ *
+ * @param accel_high_g_u8 : The value of accel highg interrupt
+ *
+ * accel_high_g_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *accel_high_g_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel highg is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the accel highg interrupt stat_s8 */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_INTR_STAT_ACCEL_HIGH_G_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_high_g_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_INTR_STAT_ACCEL_HIGH_G);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the stat_s8 of
+ * accel anymotion interrupt from register from 0x37 bit 6
+ *
+ * @param accel_any_motion_u8 : The value of accel anymotion interrupt
+ *
+ * accel_any_motion_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *accel_any_motion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel anymotion is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the accel anymotion interrupt stat_s8 */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_INTR_STAT_ACCEL_ANY_MOTION_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_any_motion_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_INTR_STAT_ACCEL_ANY_MOTION);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the stat_s8 of
+ * accel nomotion/slowmotion interrupt from register from 0x37 bit 6
+ *
+ * @param accel_no_motion_u8 : The value of accel
+ * nomotion/slowmotion interrupt
+ *
+ * accel_no_motion_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *accel_no_motion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel
+ nomotion/slowmotion interrupt
+ is available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the 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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_no_motion_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_INTR_STAT_ACCEL_NO_MOTION);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to read status of main clock
+ * from the register 0x38 bit 0
+ *
+ * @param stat_main_clk_u8 : the status of main clock
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_stat_main_clk(
+u8 *stat_main_clk_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, status of main clk is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *stat_main_clk_u8 =
+ BNO055_GET_BITSLICE(data_u8r, BNO055_SYS_MAIN_CLK);
+ } else {
+ com_rslt = BNO055_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 sys_stat_u8 : the status of system
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_stat_code(
+u8 *sys_stat_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, the status of system is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *sys_stat_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_SYS_STAT_CODE);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API is used to read system BNO055_ERROR
+ * code from the register 0x3A it is a byte of data
+ *
+ * @param sys_error_u8 : The value of system BNO055_ERROR code
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_error_code(
+u8 *sys_error_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, system BNO055_ERROR code is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the system BNO055_ERROR code*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SYS_ERROR_CODE_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *sys_error_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_SYS_ERROR_CODE);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel unit
+ * from register from 0x3B bit 0
+ *
+ * @param accel_unit_u8 : The value of accel unit
+ *
+ * accel_unit_u8 | result
+ * ------------- | ---------------
+ * 0x00 | BNO055_ACCEL_UNIT_MSQ
+ * 0x01 | BNO055_ACCEL_UNIT_MG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_unit(
+u8 *accel_unit_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel unit is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the accel unit */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_UNIT_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_unit_u8 =
+ BNO055_GET_BITSLICE(data_u8r, BNO055_ACCEL_UNIT);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel unit
+ * from register from 0x3B bit 0
+ *
+ * @param accel_unit_u8 : The value of accel unit
+ *
+ * accel_unit_u8 | result
+ * ------------- | ---------------
+ * 0x00 | BNO055_ACCEL_UNIT_MSQ
+ * 0x01 | BNO055_ACCEL_UNIT_MG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_unit(
+u8 accel_unit_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write the accel unit */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_UNIT_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_ACCEL_UNIT, accel_unit_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_UNIT_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the gyro unit
+ * from register from 0x3B bit 1
+ *
+ * @param gyro_unit_u8 : The value of accel unit
+ *
+ * gyro_unit_u8 | result
+ * ------------- | -----------
+ * 0x00 | BNO055_GYRO_UNIT_DPS
+ * 0x01 | BNO055_GYRO_UNIT_RPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_unit(
+u8 *gyro_unit_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro unit is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the gyro unit */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_UNIT_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_unit_u8 =
+ BNO055_GET_BITSLICE(data_u8r, BNO055_GYRO_UNIT);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro unit
+ * from register from 0x3B bit 1
+ *
+ * @param gyro_unit_u8 : The value of accel unit
+ *
+ * gyro_unit_u8 | result
+ * ------------- | -----------
+ * 0x00 | BNO055_GYRO_UNIT_DPS
+ * 0x01 | BNO055_GYRO_UNIT_RPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_unit(u8 gyro_unit_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write the gyro unit */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_UNIT_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_UNIT, gyro_unit_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_UNIT_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the Euler unit
+ * from register from 0x3B bit 2
+ *
+ * @param euler_unit_u8 : The value of accel unit
+ *
+ * euler_unit_u8 | result
+ * -------------- | -----------
+ * 0x00 | BNO055_EULER_UNIT_DEG
+ * 0x01 | BNO055_EULER_UNIT_RAD
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_euler_unit(
+u8 *euler_unit_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, Euler unit is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the Euler unit */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_EULER_UNIT_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *euler_unit_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_EULER_UNIT);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the Euler unit
+ * from register from 0x3B bit 2
+ *
+ * @param euler_unit_u8 : The value of Euler unit
+ *
+ * euler_unit_u8 | result
+ * -------------- | -----------
+ * 0x00 | BNO055_EULER_UNIT_DEG
+ * 0x01 | BNO055_EULER_UNIT_RAD
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_euler_unit(u8 euler_unit_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write the Euler unit*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_EULER_UNIT_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_EULER_UNIT, euler_unit_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_EULER_UNIT_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the tilt unit
+ * from register from 0x3B bit 3
+ *
+ * @param tilt_unit_u8 : The value of tilt unit
+ *
+ * tilt_unit_u8 | result
+ * --------------- | ---------
+ * 0x00 | degrees
+ * 0x01 | radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_tilt_unit(
+u8 *tilt_unit_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, chip id is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TILT_UNIT_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *tilt_unit_u8 =
+ BNO055_GET_BITSLICE(data_u8r, BNO055_TILT_UNIT);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the tilt unit
+ * from register from 0x3B bit 3
+ *
+ * @param tilt_unit_u8 : The value of tilt unit
+ *
+ * tilt_unit_u8 | result
+ * --------------- | ---------
+ * 0x00 | degrees
+ * 0x01 | radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ *
+ * \return Communication results
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_tilt_unit(u8 tilt_unit_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TILT_UNIT_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_TILT_UNIT, tilt_unit_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TILT_UNIT_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the temperature unit
+ * from register from 0x3B bit 4
+ *
+ * @param temp_unit_u8 : The value of temperature unit
+ *
+ * temp_unit_u8 | result
+ * ----------- | --------------
+ * 0x00 | BNO055_TEMP_UNIT_CELSIUS
+ * 0x01 | BNO055_TEMP_UNIT_FAHRENHEIT
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_temp_unit(
+u8 *temp_unit_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, temperature unit is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the temperature unit */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TEMP_UNIT_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *temp_unit_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_TEMP_UNIT);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the temperature unit
+ * from register from 0x3B bit 4
+ *
+ * @param temp_unit_u8 : The value of temperature unit
+ *
+ * temp_unit_u8 | result
+ * ----------- | --------------
+ * 0x00 | BNO055_TEMP_UNIT_CELSIUS
+ * 0x01 | BNO055_TEMP_UNIT_FAHRENHEIT
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_temp_unit(
+u8 temp_unit_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write the temperature unit */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TEMP_UNIT_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_TEMP_UNIT,
+ temp_unit_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TEMP_UNIT_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the current selected orientation mode
+ * from register from 0x3B bit 7
+ *
+ * @param data_output_format_u8 : The value of data output format
+ *
+ * data_output_format_u8 | result
+ * -------------------- | --------
+ * 0x00 | Windows
+ * 0x01 | Android
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_data_output_format(
+u8 *data_output_format_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, data output format is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the data output format */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_DATA_OUTPUT_FORMAT_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *data_output_format_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_DATA_OUTPUT_FORMAT);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the current selected orientation mode
+ * from register from 0x3B bit 7
+ *
+ * @param data_output_format_u8 : The value of data output format
+ *
+ * data_output_format_u8 | result
+ * -------------------- | --------
+ * 0x00 | Windows
+ * 0x01 | Android
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_data_output_format(
+u8 data_output_format_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write the data output format */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_DATA_OUTPUT_FORMAT_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_DATA_OUTPUT_FORMAT,
+ data_output_format_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_DATA_OUTPUT_FORMAT_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (prev_opmode_u8);
+ return com_rslt;
+}
+/*! @brief This API used to read the operation mode
+ * from register from 0x3D bit 0 to 3
+ *
+ * @param operation_mode_u8 : The value of operation mode
+ *
+ * operation_mode_u8 | result | comments
+ * ----------|----------------------------|----------------------------
+ * 0x00 | BNO055_OPERATION_MODE_CONFIG | Configuration mode
+ * 0x01 | BNO055_OPERATION_MODE_ACCONLY | Reads accel data alone
+ * 0x02 | BNO055_OPERATION_MODE_MAGONLY | Reads mag data alone
+ * 0x03 | BNO055_OPERATION_MODE_GYRONLY | Reads gyro data alone
+ * 0x04 | BNO055_OPERATION_MODE_ACCMAG | Reads accel and mag data
+ * 0x05 | BNO055_OPERATION_MODE_ACCGYRO | Reads accel and gyro data
+ * 0x06 | BNO055_OPERATION_MODE_MAGGYRO | Reads accel and mag data
+ * 0x07 | OPERATION_MODE_ANY_MOTION | Reads accel mag and gyro data
+ * 0x08 | BNO055_OPERATION_MODE_IMUPLUS | Inertial measurement unit
+ * - | - | Reads accel,gyro and fusion data
+ * 0x09 | BNO055_OPERATION_MODE_COMPASS | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0A | BNO055_OPERATION_MODE_M4G | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0B | BNO055_OPERATION_MODE_NDOF_FMC_OFF| Nine degrees of freedom with
+ * - | - | fast magnetic calibration
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ * 0x0C | BNO055_OPERATION_MODE_NDOF | Nine degrees of freedom
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *operation_mode_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, operation mode is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the value of operation mode*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_OPERATION_MODE_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *operation_mode_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_OPERATION_MODE);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*! @brief This API used to write the operation mode
+ * from register from 0x3D bit 0 to 3
+ *
+ * @param operation_mode_u8 : The value of operation mode
+ *
+ * operation_mode_u8 | result | comments
+ * ---------|-----------------------------------|--------------------------
+ * 0x00 | BNO055_OPERATION_MODE_CONFIG | Configuration mode
+ * 0x01 | BNO055_OPERATION_MODE_ACCONLY | Reads accel data alone
+ * 0x02 | BNO055_OPERATION_MODE_MAGONLY | Reads mag data alone
+ * 0x03 | BNO055_OPERATION_MODE_GYRONLY | Reads gyro data alone
+ * 0x04 | BNO055_OPERATION_MODE_ACCMAG | Reads accel and mag data
+ * 0x05 | BNO055_OPERATION_MODE_ACCGYRO | Reads accel and gyro data
+ * 0x06 | BNO055_OPERATION_MODE_MAGGYRO | Reads accel and mag data
+ * 0x07 | OPERATION_MODE_ANY_MOTION | Reads accel mag and
+ * | - | gyro data
+ * 0x08 | BNO055_OPERATION_MODE_IMUPLUS | Inertial measurement unit
+ * - | | Reads accel,gyro and
+ * | - | fusion data
+ * 0x09 | BNO055_OPERATION_MODE_COMPASS | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0A | BNO055_OPERATION_MODE_M4G | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0B | BNO055_OPERATION_MODE_NDOF_FMC_OFF| Nine degrees of freedom with
+ * - | - | fast magnetic calibration
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ * 0x0C | BNO055_OPERATION_MODE_NDOF | Nine degrees of freedom
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 operation_mode_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* If the previous operation mode is config it is
+ directly write the operation mode */
+ if (prev_opmode_u8 == BNO055_OPERATION_MODE_CONFIG) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_OPERATION_MODE_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_OPERATION_MODE,
+ operation_mode_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_OPERATION_MODE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ /* Config mode to other
+ operation mode switching
+ required delay of 600ms*/
+ p_bno055->delay_msec(
+ BNO055_MODE_SWITCHING_DELAY);
+ }
+ } 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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_OPERATION_MODE,
+ BNO055_OPERATION_MODE_CONFIG);
+ com_rslt += bno055_write_register(
+ BNO055_OPERATION_MODE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ /* other mode to config mode switching
+ required delay of 20ms*/
+ p_bno055->delay_msec(
+ BNO055_CONFIG_MODE_SWITCHING_DELAY);
+ }
+ /* Write the operation mode */
+ if (operation_mode_u8 !=
+ BNO055_OPERATION_MODE_CONFIG) {
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_OPERATION_MODE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_OPERATION_MODE,
+ operation_mode_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_OPERATION_MODE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ /* Config mode to other
+ operation mode switching
+ required delay of 600ms*/
+ p_bno055->delay_msec(
+ BNO055_MODE_SWITCHING_DELAY);
+ }
+ }
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*! @brief This API used to read the power mode
+ * from register from 0x3E bit 0 to 1
+ *
+ * @param power_mode_u8 : The value of power mode
+ *
+ * power_mode_u8| result | comments
+ * ---------|---------------------------|-------------------------------------
+ * 0x00 |BNO055_POWER_MODE_NORMAL | In the NORMAL mode the register
+ * - | - | map and the internal peripherals
+ * - | - | of the MCU are always
+ * - | - | operative in this mode
+ * 0x01 |BNO055_POWER_MODE_LOWPOWER | This is first level of power
+ * | - | saving mode
+ * 0x02 |BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note For detailed about LOWPOWER mode
+ * refer data sheet 3.4.2
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_power_mode(
+u8 *power_mode_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, power mode is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the value of power mode */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_POWER_MODE_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *power_mode_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_POWER_MODE);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*! @brief This API used to write the power mode
+ * from register from 0x3E bit 0 to 1
+ *
+ * @param power_mode_u8 : The value of power mode
+ *
+ *
+ * power_mode_u8| result | comments
+ * -------|----------------------------|---------------------------------
+ * 0x00 | BNO055_POWER_MODE_NORMAL | In the NORMAL mode the register
+ * - | - | map and the internal peripherals
+ * - | - | of the MCU are always
+ * - | - | operative in this mode
+ * 0x01 | BNO055_POWER_MODE_LOWPOWER | This is first level of power
+ * | - | saving mode
+ * 0x02 | BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note For detailed about LOWPOWER mode
+ * refer data sheet 3.4.2
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_power_mode(u8 power_mode_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write the value of power mode */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_POWER_MODE_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_POWER_MODE, power_mode_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_POWER_MODE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 intr_rst_u8 : The value of reset interrupt
+ *
+ * intr_rst_u8 | result
+ * ------------ |----------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_rst(
+u8 *intr_rst_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, reset interrupt is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the value of reset interrupt*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_INTR_RST_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *intr_rst_u8 =
+ BNO055_GET_BITSLICE(data_u8r, BNO055_INTR_RST);
+ } else {
+ com_rslt = BNO055_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 intr_rst_u8 : The value of reset interrupt
+ *
+ * intr_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_rst(u8 intr_rst_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, reset interrupt
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Write the value of reset interrupt */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_INTR_RST_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_INTR_RST, intr_rst_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_INTR_RST_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the clk source
+ * from register from 0x3F bit 7
+ *
+ * @param clk_src_u8 : The value of clk source
+ *
+ * clk_src_u8 | result
+ * -------------- |----------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_clk_src(
+u8 *clk_src_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, clk source is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the value of clk source */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_CLK_SRC_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *clk_src_u8 =
+ BNO055_GET_BITSLICE(data_u8r, BNO055_CLK_SRC);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the clk source
+ * from register from 0x3F bit 7
+ *
+ * @param clk_src_u8 : The value of clk source
+ *
+ * clk_src_u8 | result
+ * -------------- |----------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_clk_src(u8 clk_src_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, clk source is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Write the value of clk source */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_CLK_SRC_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_CLK_SRC, clk_src_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_CLK_SRC_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the reset system
+ * from register from 0x3F bit 5
+ *
+ * @param sys_rst_u8 : The value of reset system
+ *
+ * sys_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note It resets the whole system
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_rst(
+u8 *sys_rst_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, reset system is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the value of reset system */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SYS_RST_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *sys_rst_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_SYS_RST);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the reset system
+ * from register from 0x3F bit 5
+ *
+ * @param sys_rst_u8 : The value of reset system
+ *
+ * sys_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note It resets the whole system
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_sys_rst(u8 sys_rst_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, reset system is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Write the value of reset system */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SYS_RST_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_SYS_RST, sys_rst_u8);
+ com_rslt =
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SYS_RST_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the self test
+ * from register from 0x3F bit 0
+ *
+ * @param selftest_u8 : The value of self test
+ *
+ * selftest_u8 | result
+ * -------------- |----------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note It triggers the self test
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest(
+u8 *selftest_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, self test is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the value of self test */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SELFTEST_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *selftest_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_SELFTEST);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the self test
+ * from register from 0x3F bit 0
+ *
+ * @param selftest_u8 : The value of self test
+ *
+ * selftest_u8 | result
+ * -------------- |----------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note It triggers the self test
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_selftest(u8 selftest_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write the value of self test */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SELFTEST_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_SELFTEST,
+ selftest_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SELFTEST_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the temperature source
+ * from register from 0x40 bit 0 and 1
+ *
+ * @param temp_source_u8 : The value of selected temperature source
+ *
+ * temp_source_u8 | result
+ * ---------------- |---------------
+ * 0x00 | BNO055_ACCEL_TEMP_EN
+ * 0X01 | BNO055_GYRO_TEMP_EN
+ * 0X03 | BNO055_MCU_TEMP_EN
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_temp_source(
+u8 *temp_source_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, temperature source is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ZERO)) {
+ /* Read the value of temperature source */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TEMP_SOURCE_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *temp_source_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_TEMP_SOURCE);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the temperature source
+ * from register from 0x40 bit 0 and 1
+ *
+ * @param temp_source_u8 : The value of selected temperature source
+ *
+ * temp_source_u8 | result
+ * ---------------- |---------------
+ * 0x00 | BNO055_ACCEL_TEMP_EN
+ * 0X01 | BNO055_GYRO_TEMP_EN
+ * 0X03 | BNO055_MCU_TEMP_EN
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_temp_source(u8 temp_source_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write the value of temperature source*/
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TEMP_SOURCE_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_TEMP_SOURCE, temp_source_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_TEMP_SOURCE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 remap_axis_u8 : The value of axis remapping
+ *
+ * remap_axis_u8 | result | comments
+ * ------------|-------------------|------------
+ * 0X21 | BNO055_REMAP_X_Y | Z=Z;X=Y;Y=X
+ * 0X18 | BNO055_REMAP_Y_Z | X=X;Y=Z;Z=Y
+ * 0X06 | BNO055_REMAP_Z_X | Y=Y;X=Z;Z=X
+ * 0X12 | BNO055_REMAP_X_Y_Z_TYPE0 | X=Z;Y=X;Z=Y
+ * 0X09 | BNO055_REMAP_X_Y_Z_TYPE1 | X=Y;Y=Z;Z=X
+ * 0X24 | BNO055_DEFAULT_AXIS | X=X;Y=Y;Z=Z
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note : For axis sign remap refer the following APIs
+ * 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 *remap_axis_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, axis remap is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *remap_axis_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_REMAP_AXIS_VALUE);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the axis remap value
+ * from register from 0x41 bit 0 and 5
+ *
+ * @param remap_axis_u8 : The value of axis remapping
+ *
+ * remap_axis_u8 | result | comments
+ * ------------|-------------------|------------
+ * 0X21 | BNO055_REMAP_X_Y | Z=Z;X=Y;Y=X
+ * 0X18 | BNO055_REMAP_Y_Z | X=X;Y=Z;Z=Y
+ * 0X06 | BNO055_REMAP_Z_X | Y=Y;X=Z;Z=X
+ * 0X12 | BNO055_REMAP_X_Y_Z_TYPE0 | X=Z;Y=X;Z=Y
+ * 0X09 | BNO055_REMAP_X_Y_Z_TYPE1 | X=Y;Y=Z;Z=X
+ * 0X24 | BNO055_DEFAULT_AXIS | X=X;Y=Y;Z=Z
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note : For axis sign remap refer the following APIs
+ * 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 remap_axis_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ /* Write the value of axis remap */
+ if (stat_s8 == BNO055_SUCCESS) {
+ switch (remap_axis_u8) {
+ case BNO055_REMAP_X_Y:
+ case BNO055_REMAP_Y_Z:
+ case BNO055_REMAP_Z_X:
+ case BNO055_REMAP_X_Y_Z_TYPE0:
+ case BNO055_REMAP_X_Y_Z_TYPE1:
+ case BNO055_DEFAULT_AXIS:
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_AXIS_VALUE_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_REMAP_AXIS_VALUE,
+ remap_axis_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_AXIS_VALUE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ 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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_REMAP_AXIS_VALUE,
+ BNO055_DEFAULT_AXIS);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_AXIS_VALUE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ break;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read the x-axis remap
+ * sign from register from 0x42 bit 2
+ *
+ * @param remap_x_sign_u8 : The value of x-axis remap sign
+ *
+ * remap_x_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | BNO055_REMAP_AXIS_POSITIVE
+ * 0X01 | BNO055_REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_remap_x_sign(
+u8 *remap_x_sign_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, x-axis remap sign is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *remap_x_sign_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_REMAP_X_SIGN);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the x-axis remap
+ * sign from register from 0x42 bit 2
+ *
+ * @param remap_x_sign_u8 : The value of x-axis remap sign
+ *
+ * remap_x_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | BNO055_REMAP_AXIS_POSITIVE
+ * 0X01 | BNO055_REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_remap_x_sign(
+u8 remap_x_sign_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_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,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_REMAP_X_SIGN,
+ remap_x_sign_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_X_SIGN_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the y-axis remap
+ * sign from register from 0x42 bit 1
+ *
+ * @param remap_y_sign_u8 : The value of y-axis remap sign
+ *
+ * remap_y_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | BNO055_REMAP_AXIS_POSITIVE
+ * 0X01 | BNO055_REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_remap_y_sign(
+u8 *remap_y_sign_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, y-axis remap sign is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *remap_y_sign_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_REMAP_Y_SIGN);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the y-axis remap
+ * sign from register from 0x42 bit 1
+ *
+ * @param remap_y_sign_u8 : The value of y-axis remap sign
+ *
+ * remap_y_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | BNO055_REMAP_AXIS_POSITIVE
+ * 0X01 | BNO055_REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_remap_y_sign(
+u8 remap_y_sign_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_REMAP_Y_SIGN,
+ remap_y_sign_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_Y_SIGN_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (prev_opmode_u8);
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the z-axis remap
+ * sign from register from 0x42 bit 0
+ *
+ * @param remap_z_sign_u8 : The value of z-axis remap sign
+ *
+ * remap_z_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | BNO055_REMAP_AXIS_POSITIVE
+ * 0X01 | BNO055_REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_remap_z_sign(
+u8 *remap_z_sign_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, z-axis remap sign is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *remap_z_sign_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_REMAP_Z_SIGN);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the z-axis remap
+ * sign from register from 0x42 bit 0
+ *
+ * @param remap_z_sign_u8 : The value of z-axis remap sign
+ *
+ * remap_z_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | BNO055_REMAP_AXIS_POSITIVE
+ * 0X01 | BNO055_REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_remap_z_sign(
+u8 remap_z_sign_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_REMAP_Z_SIGN,
+ remap_z_sign_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_REMAP_Z_SIGN_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ /* Array holding the soft iron calibration matrix values
+ data_u8[BNO055_SOFT_IRON_CALIB_0_LSB] - sic_0->LSB
+ data_u8[BNO055_SOFT_IRON_CALIB_0_MSB] - sic_0->MSB
+ data_u8[BNO055_SOFT_IRON_CALIB_1_LSB] - sic_1->LSB
+ data_u8[BNO055_SOFT_IRON_CALIB_1_MSB] - sic_1->MSB
+ data_u8[BNO055_SOFT_IRON_CALIB_2_LSB] - sic_2->LSB
+ data_u8[BNO055_SOFT_IRON_CALIB_2_MSB] - sic_2->MSB
+ data_u8[BNO055_SOFT_IRON_CALIB_3_LSB] - sic_3->LSB
+ data_u8[BNO055_SOFT_IRON_CALIB_3_MSB] - sic_3->MSB
+ data_u8[BNO055_SOFT_IRON_CALIB_4_LSB] - sic_4->LSB
+ data_u8[BNO055_SOFT_IRON_CALIB_4_MSB] - sic_4->MSB
+ data_u8[BNO055_SOFT_IRON_CALIB_5_LSB] - sic_5->LSB
+ data_u8[BNO055_SOFT_IRON_CALIB_5_MSB] - sic_5->MSB
+ data_u8[BNO055_SOFT_IRON_CALIB_6_LSB] - sic_6->LSB
+ data_u8[BNO055_SOFT_IRON_CALIB_6_MSB] - sic_6->MSB
+ data_u8[BNO055_SOFT_IRON_CALIB_7_LSB] - sic_7->LSB
+ data_u8[BNO055_SOFT_IRON_CALIB_7_MSB] - sic_7->MSB
+ data_u8[BNO055_SOFT_IRON_CALIB_8_LSB] - sic_8->LSB
+ data_u8[BNO055_SOFT_IRON_CALIB_8_MSB] - sic_8->MSB
+ */
+ u8 data_u8[BNO055_SOFT_IRON_CALIBRATION_MATRIX_SIZE] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, soft iron calibration matrix is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_SOFT_IRON_CALIBRATION_MATRIX_SIZE);
+ if (com_rslt == BNO055_SUCCESS) {
+ /*soft iron calibration matrix zero*/
+ data_u8[BNO055_SOFT_IRON_CALIB_0_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_0_LSB],
+ BNO055_SIC_MATRIX_0_LSB);
+ data_u8[BNO055_SOFT_IRON_CALIB_0_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_0_MSB],
+ BNO055_SIC_MATRIX_0_MSB);
+ sic_matrix->sic_0 = (s16)((((s32)
+ (s8)(data_u8[BNO055_SOFT_IRON_CALIB_0_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS))
+ | (data_u8[BNO055_SOFT_IRON_CALIB_0_LSB]));
+
+ /*soft iron calibration matrix one*/
+ data_u8[BNO055_SOFT_IRON_CALIB_1_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_1_LSB],
+ BNO055_SIC_MATRIX_1_LSB);
+ data_u8[BNO055_SOFT_IRON_CALIB_1_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_1_MSB],
+ BNO055_SIC_MATRIX_1_MSB);
+ sic_matrix->sic_1 = (s16)((((s32)
+ (s8)(data_u8[BNO055_SOFT_IRON_CALIB_1_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS))
+ | (data_u8[BNO055_SOFT_IRON_CALIB_1_LSB]));
+
+ /*soft iron calibration matrix two*/
+ data_u8[BNO055_SOFT_IRON_CALIB_2_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_2_LSB],
+ BNO055_SIC_MATRIX_2_LSB);
+ data_u8[BNO055_SOFT_IRON_CALIB_2_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_2_MSB],
+ BNO055_SIC_MATRIX_2_MSB);
+ sic_matrix->sic_2 = (s16)((((s32)
+ (s8)(data_u8[BNO055_SOFT_IRON_CALIB_2_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS))
+ | (data_u8[BNO055_SOFT_IRON_CALIB_2_LSB]));
+
+ /*soft iron calibration matrix three*/
+ data_u8[BNO055_SOFT_IRON_CALIB_3_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_3_LSB],
+ BNO055_SIC_MATRIX_3_LSB);
+ data_u8[BNO055_SOFT_IRON_CALIB_3_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_3_MSB],
+ BNO055_SIC_MATRIX_3_LSB);
+ sic_matrix->sic_3 = (s16)((((s32)
+ (s8)(data_u8[BNO055_SOFT_IRON_CALIB_3_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS)) |
+ (data_u8[BNO055_SOFT_IRON_CALIB_3_LSB]));
+
+ /*soft iron calibration matrix four*/
+ data_u8[BNO055_SOFT_IRON_CALIB_4_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_4_LSB],
+ BNO055_SIC_MATRIX_4_LSB);
+ data_u8[BNO055_SOFT_IRON_CALIB_4_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_4_MSB],
+ BNO055_SIC_MATRIX_4_LSB);
+ sic_matrix->sic_4 = (s16)((((s32)
+ (s8)(data_u8[BNO055_SOFT_IRON_CALIB_4_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS)) |
+ (data_u8[BNO055_SOFT_IRON_CALIB_4_LSB]));
+
+ /*soft iron calibration matrix five*/
+ data_u8[BNO055_SOFT_IRON_CALIB_5_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_5_LSB],
+ BNO055_SIC_MATRIX_5_LSB);
+ data_u8[BNO055_SOFT_IRON_CALIB_5_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_5_MSB],
+ BNO055_SIC_MATRIX_5_LSB);
+ sic_matrix->sic_5 = (s16)((((s32)
+ (s8)(data_u8[BNO055_SOFT_IRON_CALIB_5_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS)) |
+ (data_u8[BNO055_SOFT_IRON_CALIB_5_LSB]));
+
+ /*soft iron calibration matrix six*/
+ data_u8[BNO055_SOFT_IRON_CALIB_6_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_6_LSB],
+ BNO055_SIC_MATRIX_6_LSB);
+ data_u8[BNO055_SOFT_IRON_CALIB_6_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_6_MSB],
+ BNO055_SIC_MATRIX_6_LSB);
+ sic_matrix->sic_6 = (s16)((((s32)
+ (s8)(data_u8[BNO055_SOFT_IRON_CALIB_6_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS)) |
+ (data_u8[BNO055_SOFT_IRON_CALIB_6_LSB]));
+
+ /*soft iron calibration matrix seven*/
+ data_u8[BNO055_SOFT_IRON_CALIB_7_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_7_LSB],
+ BNO055_SIC_MATRIX_7_LSB);
+ data_u8[BNO055_SOFT_IRON_CALIB_7_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_7_MSB],
+ BNO055_SIC_MATRIX_7_LSB);
+ sic_matrix->sic_7 = (s16)((((s32)
+ (s8)(data_u8[BNO055_SOFT_IRON_CALIB_7_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS)) |
+ (data_u8[BNO055_SOFT_IRON_CALIB_7_LSB]));
+
+ /*soft iron calibration matrix eight*/
+ data_u8[BNO055_SOFT_IRON_CALIB_8_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_8_LSB],
+ BNO055_SIC_MATRIX_8_LSB);
+ data_u8[BNO055_SOFT_IRON_CALIB_8_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SOFT_IRON_CALIB_8_MSB],
+ BNO055_SIC_MATRIX_8_LSB);
+ sic_matrix->sic_8 = (s16)((((s32)
+ (s8)(data_u8[BNO055_SOFT_IRON_CALIB_8_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS)) |
+ (data_u8[BNO055_SOFT_IRON_CALIB_8_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+u8 data1_u8r = BNO055_INIT_VALUE;
+u8 data2_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_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,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_0
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_0_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_0_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_0_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_0 >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_0_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_0_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ /* 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,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_1
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_1_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_1_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_1_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_1 >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_1_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_1_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ /* 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,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_2
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_2_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_2_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_2_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_2 >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_2_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_2_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ /* 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,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_3
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_3_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_3_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_3_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_3 >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_3_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_3_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ /* 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,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_4
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_4_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_4_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_4_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_4 >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_4_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_4_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ /* 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,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_5
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_5_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_5_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_5_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_5 >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_5_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_5_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ /* 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,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_6
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_6_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_6_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_6_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_6 >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_6_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_6_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ /* 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,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_7
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_7_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_7_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_7_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_7 >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_7_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_7_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ /* 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,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_8
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_8_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_8_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_8_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (sic_matrix->sic_8 >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_SIC_MATRIX_8_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_SIC_MATRIX_8_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note The range of the accel offset varies based on
+ * the G-range of accel sensor.
+ *
+ * accel G range | offset range
+ * --------------- | --------------
+ * BNO055_ACCEL_RANGE_2G | +/-2000
+ * BNO055_ACCEL_RANGE_4G | +/-4000
+ * BNO055_ACCEL_RANGE_8G | +/-8000
+ * BNO055_ACCEL_RANGE_16G | +/-16000
+ *
+ * accel G range can be configured by using the
+ * bno055_set_accel_range() API
+ */
+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 = BNO055_ERROR;
+ /* Array holding the accel offset values
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_LSB] - offset x->LSB
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_MSB] - offset x->MSB
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_LSB] - offset y->LSB
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_MSB] - offset y->MSB
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_LSB] - offset z->LSB
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_MSB] - offset z->MSB
+ */
+ u8 data_u8[BNO055_ACCEL_OFFSET_ARRAY] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel offset is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_ACCEL_OFFSET_ARRAY);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read accel x offset value*/
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_LSB],
+ BNO055_ACCEL_OFFSET_X_LSB);
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_MSB],
+ BNO055_ACCEL_OFFSET_X_MSB);
+ accel_offset->x = (s16)((((s32)(s8)
+ (data_u8[BNO055_SENSOR_OFFSET_DATA_X_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS)) |
+ (data_u8[BNO055_SENSOR_OFFSET_DATA_X_LSB]));
+
+ /* Read accel y offset value*/
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_LSB],
+ BNO055_ACCEL_OFFSET_Y_LSB);
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_MSB],
+ BNO055_ACCEL_OFFSET_Y_MSB);
+ accel_offset->y = (s16)((((s32)(s8)
+ (data_u8[BNO055_SENSOR_OFFSET_DATA_Y_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS))
+ | (data_u8[BNO055_SENSOR_OFFSET_DATA_Y_LSB]));
+
+ /* Read accel z offset value*/
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_LSB],
+ BNO055_ACCEL_OFFSET_Z_LSB);
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_MSB],
+ BNO055_ACCEL_OFFSET_Z_MSB);
+ accel_offset->z = (s16)((((s32)(s8)
+ (data_u8[BNO055_SENSOR_OFFSET_DATA_Z_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS)) |
+ (data_u8[BNO055_SENSOR_OFFSET_DATA_Z_LSB]));
+
+ /* 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,
+ data_u8,
+ BNO055_LSB_MSB_READ_LENGTH);
+ /* Array holding the accel radius values
+ data_u8[BNO055_OFFSET_RADIUS_LSB] - radius->LSB
+ data_u8[BNO055_OFFSET_RADIUS_MSB] - radius->MSB
+ */
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8[BNO055_OFFSET_RADIUS_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_OFFSET_RADIUS_LSB],
+ BNO055_ACCEL_RADIUS_LSB);
+ data_u8[BNO055_OFFSET_RADIUS_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_OFFSET_RADIUS_MSB],
+ BNO055_ACCEL_RADIUS_MSB);
+ accel_offset->r = (s16)((((s32)(s8)
+ (data_u8[BNO055_OFFSET_RADIUS_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS)) |
+ (data_u8[BNO055_OFFSET_RADIUS_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note The range of the accel offset varies based on
+ * the G-range of accel sensor.
+ *
+ * accel G range | offset range
+ * --------------- | --------------
+ * BNO055_ACCEL_RANGE_2G | +/-2000
+ * BNO055_ACCEL_RANGE_4G | +/-4000
+ * BNO055_ACCEL_RANGE_8G | +/-8000
+ * BNO055_ACCEL_RANGE_16G | +/-16000
+ *
+ * accel G range can be configured by using the
+ * bno055_set_accel_range() API
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_accel_offset(
+struct bno055_accel_offset_t *accel_offset)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data1_u8r = BNO055_INIT_VALUE;
+u8 data2_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* write accel offset x value*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_X_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (accel_offset->x
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_ACCEL_OFFSET_X_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_X_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_X_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (accel_offset->x >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_ACCEL_OFFSET_X_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_X_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ /* write accel offset y value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_Y_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (accel_offset->y
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_ACCEL_OFFSET_Y_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_Y_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_Y_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (accel_offset->y >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_ACCEL_OFFSET_Y_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_Y_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ /* write accel offset z value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_Z_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (accel_offset->z
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_ACCEL_OFFSET_Z_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_Z_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_Z_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (accel_offset->z >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_ACCEL_OFFSET_Z_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_OFFSET_Z_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ /*write accel radius value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_RADIUS_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (accel_offset->r
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_ACCEL_RADIUS_LSB,
+ data1_u8r);
+ com_rslt =
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_RADIUS_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_RADIUS_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (accel_offset->r >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_ACCEL_RADIUS_MSB,
+ data1_u8r);
+ com_rslt =
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_RADIUS_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+ /* Array holding the mag offset values
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_LSB] - offset x->LSB
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_MSB] - offset x->MSB
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_LSB] - offset y->LSB
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_MSB] - offset y->MSB
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_LSB] - offset z->LSB
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_MSB] - offset z->MSB
+ */
+ u8 data_u8[BNO055_MAG_OFFSET_ARRAY] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, mag offset is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_MAG_OFFSET_ARRAY);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read mag x offset value*/
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_LSB],
+ BNO055_MAG_OFFSET_X_LSB);
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_MSB],
+ BNO055_MAG_OFFSET_X_MSB);
+ mag_offset->x = (s16)((((s32)(s8)
+ (data_u8[BNO055_SENSOR_OFFSET_DATA_X_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS)) |
+ (data_u8[BNO055_SENSOR_OFFSET_DATA_X_LSB]));
+
+ /* Read mag y offset value*/
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_LSB],
+ BNO055_MAG_OFFSET_Y_LSB);
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_MSB],
+ BNO055_MAG_OFFSET_Y_MSB);
+ mag_offset->y = (s16)((((s32)(s8)
+ (data_u8[BNO055_SENSOR_OFFSET_DATA_Y_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS))
+ | (data_u8[BNO055_SENSOR_OFFSET_DATA_Y_LSB]));
+
+ /* Read mag z offset value*/
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_LSB],
+ BNO055_MAG_OFFSET_Z_LSB);
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_MSB],
+ BNO055_MAG_OFFSET_Z_MSB);
+ mag_offset->z = (s16)((((s32)(s8)
+ (data_u8[BNO055_SENSOR_OFFSET_DATA_Z_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS))
+ | (data_u8[BNO055_SENSOR_OFFSET_DATA_Z_LSB]));
+
+ /* 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,
+ data_u8,
+ BNO055_LSB_MSB_READ_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Array holding the mag radius values
+ data_u8[BNO055_OFFSET_RADIUS_LSB] -
+ radius->LSB
+ data_u8[BNO055_OFFSET_RADIUS_MSB] -
+ radius->MSB
+ */
+ data_u8[BNO055_OFFSET_RADIUS_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_OFFSET_RADIUS_LSB],
+ BNO055_MAG_RADIUS_LSB);
+ data_u8[BNO055_OFFSET_RADIUS_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_OFFSET_RADIUS_MSB],
+ BNO055_MAG_RADIUS_MSB);
+ mag_offset->r = (s16)((((s32)(s8)
+ (data_u8[BNO055_OFFSET_RADIUS_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS)) |
+ (data_u8[BNO055_OFFSET_RADIUS_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 = BNO055_ERROR;
+u8 data1_u8r = BNO055_INIT_VALUE;
+u8 data2_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* write Mag offset x value*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_X_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (mag_offset->x
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_MAG_OFFSET_X_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_X_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_X_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (mag_offset->x >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_MAG_OFFSET_X_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_X_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ /* write Mag offset y value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_Y_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (mag_offset->y &
+ BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_MAG_OFFSET_Y_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_Y_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_Y_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (mag_offset->y >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_MAG_OFFSET_Y_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_Y_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ /* write Mag offset z value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_Z_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (mag_offset->z &
+ BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_MAG_OFFSET_Z_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_Z_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_Z_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (mag_offset->z >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_MAG_OFFSET_Z_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OFFSET_Z_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ /* write Mag radius value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_RADIUS_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (mag_offset->r &
+ BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_MAG_RADIUS_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_RADIUS_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_RADIUS_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (mag_offset->r >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_MAG_RADIUS_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_RADIUS_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note The range of the gyro offset varies based on
+ * the range of gyro sensor
+ *
+ * gyro G range | offset range
+ * -------------------- | ------------
+ * BNO055_GYRO_RANGE_2000DPS | +/-32000
+ * BNO055_GYRO_RANGE_1000DPS | +/-16000
+ * BNO055_GYRO_RANGE_500DPS | +/-8000
+ * BNO055_GYRO_RANGE_250DPS | +/-4000
+ * BNO055_GYRO_RANGE_125DPS | +/-2000
+ *
+ * Gyro range can be configured by using the
+ * bno055_set_gyro_range() API
+ */
+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 = BNO055_ERROR;
+ /* Array holding the gyro offset values
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_LSB] - offset x->LSB
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_MSB] - offset x->MSB
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_LSB] - offset y->LSB
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_MSB] - offset y->MSB
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_LSB] - offset z->LSB
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_MSB] - offset z->MSB
+ */
+ u8 data_u8[BNO055_GYRO_OFFSET_ARRAY] = {
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE,
+ BNO055_INIT_VALUE, BNO055_INIT_VALUE};
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro offset is
+ available in the page zero*/
+ if (p_bno055->page_id != BNO055_PAGE_ZERO)
+ /* Write the page zero*/
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ZERO);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ data_u8, BNO055_GYRO_OFFSET_ARRAY);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read gyro x offset value*/
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_LSB],
+ BNO055_GYRO_OFFSET_X_LSB);
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_X_MSB],
+ BNO055_GYRO_OFFSET_X_MSB);
+ gyro_offset->x = (s16)((((s32)(s8)
+ (data_u8[BNO055_SENSOR_OFFSET_DATA_X_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS)) |
+ (data_u8[BNO055_SENSOR_OFFSET_DATA_X_LSB]));
+
+ /* Read gyro y offset value*/
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_LSB],
+ BNO055_GYRO_OFFSET_Y_LSB);
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Y_MSB],
+ BNO055_GYRO_OFFSET_Y_MSB);
+ gyro_offset->y = (s16)((((s32)(s8)
+ (data_u8[BNO055_SENSOR_OFFSET_DATA_Y_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS)) |
+ (data_u8[BNO055_SENSOR_OFFSET_DATA_Y_LSB]));
+
+ /* Read gyro z offset value*/
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_LSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_LSB],
+ BNO055_GYRO_OFFSET_Z_LSB);
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_MSB] =
+ BNO055_GET_BITSLICE(
+ data_u8[BNO055_SENSOR_OFFSET_DATA_Z_MSB],
+ BNO055_GYRO_OFFSET_Z_MSB);
+ gyro_offset->z = (s16)((((s32)(s8)
+ (data_u8[BNO055_SENSOR_OFFSET_DATA_Z_MSB])) <<
+ (BNO055_SHIFT_EIGHT_BITS)) |
+ (data_u8[BNO055_SENSOR_OFFSET_DATA_Z_LSB]));
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note The range of the gyro offset varies based on
+ * the range of gyro sensor
+ *
+ * gyro G range | offset range
+ * -------------------- | ------------
+ * BNO055_GYRO_RANGE_2000DPS | +/-32000
+ * BNO055_GYRO_RANGE_1000DPS | +/-16000
+ * BNO055_GYRO_RANGE_500DPS | +/-8000
+ * BNO055_GYRO_RANGE_250DPS | +/-4000
+ * BNO055_GYRO_RANGE_125DPS | +/-2000
+ *
+ * Gyro range can be configured by using the
+ * bno055_set_gyro_range() API
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_gyro_offset(
+struct bno055_gyro_offset_t *gyro_offset)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data1_u8r = BNO055_INIT_VALUE;
+u8 data2_u8r = BNO055_INIT_VALUE;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* write gryo offset x value*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_X_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (gyro_offset->x
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_GYRO_OFFSET_X_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_X_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_X_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (gyro_offset->x >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_GYRO_OFFSET_X_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_X_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ /* write gryo offset y value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_Y_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (gyro_offset->y
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_GYRO_OFFSET_Y_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_Y_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_Y_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (gyro_offset->y >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_GYRO_OFFSET_Y_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_Y_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ /* write gryo offset z value*/
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_Z_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (gyro_offset->z
+ & BNO055_SIC_HEX_0_0_F_F_DATA));
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_GYRO_OFFSET_Z_LSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_Z_LSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+
+ com_rslt +=
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_Z_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data1_u8r = ((s8)
+ (gyro_offset->z >>
+ BNO055_SHIFT_EIGHT_BITS)
+ & BNO055_SIC_HEX_0_0_F_F_DATA);
+ data2_u8r =
+ BNO055_SET_BITSLICE(data2_u8r,
+ BNO055_GYRO_OFFSET_Z_MSB,
+ data1_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_OFFSET_Z_MSB_REG,
+ &data2_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 accel_range_u8 : The value of accel range
+ * accel_range_u8 | result
+ * ----------------- | --------------
+ * 0x00 | BNO055_ACCEL_RANGE_2G
+ * 0x01 | BNO055_ACCEL_RANGE_4G
+ * 0x02 | BNO055_ACCEL_RANGE_8G
+ * 0x03 | BNO055_ACCEL_RANGE_16G
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_range(
+u8 *accel_range_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel range is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_range_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_RANGE);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel range
+ * from page one register from 0x08 bit 0 and 1
+ *
+ * @param accel_range_u8 : The value of accel range
+ *
+ * accel_range_u8 | result
+ * ----------------- | --------------
+ * 0x00 | BNO055_ACCEL_RANGE_2G
+ * 0x01 | BNO055_ACCEL_RANGE_4G
+ * 0x02 | BNO055_ACCEL_RANGE_8G
+ * 0x03 | BNO055_ACCEL_RANGE_16G
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_range(
+u8 accel_range_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ if (accel_range_u8 < BNO055_ACCEL_RANGE) {
+ /* Write the value of accel range*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_RANGE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_ACCEL_RANGE,
+ accel_range_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_RANGE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 accel_bw_u8 : The value of accel bandwidth
+ *
+ * accel_bw_u8 | result
+ * ----------------- | ---------------
+ * 0x00 | BNO055_ACCEL_BW_7_81HZ
+ * 0x01 | BNO055_ACCEL_BW_15_63HZ
+ * 0x02 | BNO055_ACCEL_BW_31_25HZ
+ * 0x03 | BNO055_ACCEL_BW_62_5HZ
+ * 0x04 | BNO055_ACCEL_BW_125HZ
+ * 0x05 | BNO055_ACCEL_BW_250HZ
+ * 0x06 | BNO055_ACCEL_BW_500HZ
+ * 0x07 | BNO055_ACCEL_BW_1000HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_bw(
+u8 *accel_bw_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel bandwidth is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ONE)) {
+ /* Read the value of accel bandwidth */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_BW_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_bw_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_BW);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel bandwidth
+ * from page one register from 0x08 bit 2 to 4
+ *
+ * @param accel_bw_u8 : The value of accel bandwidth
+ *
+ * accel_bw_u8 | result
+ * ----------------- | ---------------
+ * 0x00 | BNO055_ACCEL_BW_7_81HZ
+ * 0x01 | BNO055_ACCEL_BW_15_63HZ
+ * 0x02 | BNO055_ACCEL_BW_31_25HZ
+ * 0x03 | BNO055_ACCEL_BW_62_5HZ
+ * 0x04 | BNO055_ACCEL_BW_125HZ
+ * 0x05 | BNO055_ACCEL_BW_250HZ
+ * 0x06 | BNO055_ACCEL_BW_500HZ
+ * 0x07 | BNO055_ACCEL_BW_1000HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_bw(
+u8 accel_bw_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ if (accel_bw_u8 <
+ BNO055_ACCEL_GYRO_BW_RANGE) {
+ /* Write the accel */
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_BW_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r, BNO055_ACCEL_BW,
+ accel_bw_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_BW_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 accel_power_mode_u8 : The value of accel power mode
+ * accel_power_mode_u8 | result
+ * ----------------- | -------------
+ * 0x00 | BNO055_ACCEL_NORMAL
+ * 0x01 | BNO055_ACCEL_SUSPEND
+ * 0x02 | BNO055_ACCEL_LOWPOWER_1
+ * 0x03 | BNO055_ACCEL_STANDBY
+ * 0x04 | BNO055_ACCEL_LOWPOWER_2
+ * 0x05 | BNO055_ACCEL_DEEPSUSPEND
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_power_mode(
+u8 *accel_power_mode_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel power mode is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_power_mode_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_POWER_MODE);
+ } else {
+ com_rslt = BNO055_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 accel_power_mode_u8 : The value of accel power mode
+ * accel_power_mode_u8 | result
+ * ----------------- | -------------
+ * 0x00 | BNO055_ACCEL_NORMAL
+ * 0x01 | BNO055_ACCEL_SUSPEND
+ * 0x02 | BNO055_ACCEL_LOWPOWER_1
+ * 0x03 | BNO055_ACCEL_STANDBY
+ * 0x04 | BNO055_ACCEL_LOWPOWER_2
+ * 0x05 | BNO055_ACCEL_DEEPSUSPEND
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_power_mode(
+u8 accel_power_mode_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ if (accel_power_mode_u8 <
+ BNO055_ACCEL_POWER_MODE_RANGE) {
+ /* Write the value of accel bandwidth*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_POWER_MODE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_ACCEL_POWER_MODE,
+ accel_power_mode_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_POWER_MODE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 mag_data_output_rate_u8 : The value of mag output data rate
+ *
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_data_output_rate(
+u8 *mag_data_output_rate_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, output data rate
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *mag_data_output_rate_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_MAG_DATA_OUTPUT_RATE);
+ } else {
+ com_rslt = BNO055_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 mag_data_output_rate_u8 : The value of mag output data rate
+ *
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_data_output_rate(
+u8 mag_data_output_rate_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+s8 pg_stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ if (mag_data_output_rate_u8
+ < BNO055_MAG_OUTPUT_RANGE) {
+ /* 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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_MAG_DATA_OUTPUT_RATE,
+ mag_data_output_rate_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_DATA_OUTPUT_RATE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+} else {
+com_rslt = BNO055_ERROR;
+}
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 mag_operation_mode_u8 : The value of mag operation mode
+ *
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_operation_mode(
+u8 *mag_operation_mode_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, mag operation mode is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *mag_operation_mode_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_MAG_OPERATION_MODE);
+ } else {
+ com_rslt = BNO055_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 mag_operation_mode_u8 : The value of mag operation mode
+ *
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_operation_mode(
+u8 mag_operation_mode_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+s8 pg_stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ if (mag_operation_mode_u8
+ < BNO055_MAG_OPR_MODE_RANGE) {
+ /* Write the value
+ of mag operation mode*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OPERATION_MODE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_MAG_OPERATION_MODE,
+ mag_operation_mode_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_OPERATION_MODE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 mag_power_mode_u8 : The value of mag power mode
+ *
+ * mag_power_mode_u8 | result
+ * --------------------|-----------------
+ * 0x00 | BNO055_MAG_POWER_MODE_NORMAL
+ * 0x01 | BNO055_MAG_POWER_MODE_SLEEP
+ * 0x02 | BNO055_MAG_POWER_MODE_SUSPEND
+ * 0x03 | BNO055_MAG_POWER_MODE_FORCE_MODE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_power_mode(
+u8 *mag_power_mode_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, mag power mode is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *mag_power_mode_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_MAG_POWER_MODE);
+ } else {
+ com_rslt = BNO055_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 mag_power_mode_u8 : The value of mag power mode
+ *
+ * mag_power_mode_u8 | result
+ * --------------------|-----------------
+ * 0x00 | BNO055_MAG_POWER_MODE_NORMAL
+ * 0x01 | BNO055_MAG_POWER_MODE_SLEEP
+ * 0x02 | BNO055_MAG_POWER_MODE_SUSPEND
+ * 0x03 | BNO055_MAG_POWER_MODE_FORCE_MODE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_power_mode(
+u8 mag_power_mode_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+s8 pg_stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode(
+ BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ if (mag_power_mode_u8 <
+ BNO055_MAG_POWER_MODE_RANGE) {
+ /* Write the value of mag power mode*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_POWER_MODE_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_MAG_POWER_MODE,
+ mag_power_mode_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_POWER_MODE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+} else {
+ com_rslt = BNO055_ERROR;
+}
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 gyro_range_u8 : The value of gyro range
+ *
+ * gyro_range_u8 | result
+ * --------------------|-----------------
+ * 0x00 | BNO055_GYRO_RANGE_2000DPS
+ * 0x01 | BNO055_GYRO_RANGE_1000DPS
+ * 0x02 | BNO055_GYRO_RANGE_500DPS
+ * 0x03 | BNO055_GYRO_RANGE_250DPS
+ * 0x04 | BNO055_GYRO_RANGE_125DPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_range(
+u8 *gyro_range_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro range is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ONE)) {
+ /* Read the value of gyro range */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_RANGE_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_range_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_RANGE);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro range
+ * from page one register from 0x0A bit 0 to 3
+ *
+ * @param gyro_range_u8 : The value of gyro range
+ *
+ * gyro_range_u8 | result
+ * --------------------|-----------------
+ * 0x00 | BNO055_GYRO_RANGE_2000DPS
+ * 0x01 | BNO055_GYRO_RANGE_1000DPS
+ * 0x02 | BNO055_GYRO_RANGE_500DPS
+ * 0x03 | BNO055_GYRO_RANGE_250DPS
+ * 0x04 | BNO055_GYRO_RANGE_125DPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_range(
+u8 gyro_range_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+s8 pg_stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ if (gyro_range_u8 < BNO055_GYRO_RANGE) {
+ /* Write the value of gyro range*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_RANGE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_GYRO_RANGE,
+ gyro_range_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_RANGE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 gyro_bw_u8 : The value of gyro bandwidth
+ *
+ * gyro_bw_u8 | result
+ * --------------------|-----------------
+ * 0x00 | BNO055_GYRO_BW_523HZ
+ * 0x01 | BNO055_GYRO_BW_230HZ
+ * 0x02 | BNO055_GYRO_BW_116HZ
+ * 0x03 | BNO055_GYRO_BW_47HZ
+ * 0x04 | BNO055_GYRO_BW_23HZ
+ * 0x05 | BNO055_GYRO_BW_12HZ
+ * 0x06 | BNO055_GYRO_BW_64HZ
+ * 0x07 | BNO055_GYRO_BW_32HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_bw(
+u8 *gyro_bw_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro bandwidth is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ONE)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_BW_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_bw_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_BW);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro bandwidth
+ * from page one register from 0x0A bit 3 to 5
+ *
+ * @param gyro_bw_u8 : The value of gyro bandwidth
+ *
+ * gyro_bw_u8 | result
+ * --------------------|-----------------
+ * 0x00 | BNO055_GYRO_BW_523HZ
+ * 0x01 | BNO055_GYRO_BW_230HZ
+ * 0x02 | BNO055_GYRO_BW_116HZ
+ * 0x03 | BNO055_GYRO_BW_47HZ
+ * 0x04 | BNO055_GYRO_BW_23HZ
+ * 0x05 | BNO055_GYRO_BW_12HZ
+ * 0x06 | BNO055_GYRO_BW_64HZ
+ * 0x07 | BNO055_GYRO_BW_32HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_bw(
+u8 gyro_bw_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 gyro_opmode = BNO055_INIT_VALUE;
+u8 gyro_auto_sleep_durn = BNO055_INIT_VALUE;
+s8 pg_stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ /* Write the value of gyro bandwidth */
+ if ((gyro_bw_u8 == BNO055_INIT_VALUE ||
+ gyro_bw_u8 > BNO055_INIT_VALUE) &&
+ gyro_bw_u8 < BNO055_ACCEL_GYRO_BW_RANGE) {
+ switch (gyro_bw_u8) {
+ case BNO055_GYRO_BW_523HZ:
+ gyro_bw_u8 = BNO055_GYRO_BW_523HZ;
+ break;
+ case BNO055_GYRO_BW_230HZ:
+ gyro_bw_u8 = BNO055_GYRO_BW_230HZ;
+ break;
+ case BNO055_GYRO_BW_116HZ:
+ gyro_bw_u8 = BNO055_GYRO_BW_116HZ;
+ break;
+ case BNO055_GYRO_BW_47HZ:
+ gyro_bw_u8 = BNO055_GYRO_BW_47HZ;
+ break;
+ case BNO055_GYRO_BW_23HZ:
+ gyro_bw_u8 = BNO055_GYRO_BW_23HZ;
+ break;
+ case BNO055_GYRO_BW_12HZ:
+ gyro_bw_u8 = BNO055_GYRO_BW_12HZ;
+ break;
+ case BNO055_GYRO_BW_64HZ:
+ gyro_bw_u8 = BNO055_GYRO_BW_64HZ;
+ break;
+ case BNO055_GYRO_BW_32HZ:
+ gyro_bw_u8 = BNO055_GYRO_BW_32HZ;
+ break;
+ default:
+ break;
+ }
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_BW_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_GYRO_BW,
+ gyro_bw_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_BW_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ com_rslt = bno055_get_gyro_power_mode
+ (&gyro_opmode);
+ if (com_rslt == BNO055_SUCCESS) {
+ if (gyro_opmode ==
+ BNO055_GYRO_POWER_MODE_ADVANCE_POWERSAVE) {
+ com_rslt +=
+ bno055_get_gyro_auto_sleep_durn
+ (&gyro_auto_sleep_durn);
+ if (com_rslt == BNO055_SUCCESS) {
+ com_rslt +=
+ bno055_gyro_set_auto_sleep_durn
+ (gyro_auto_sleep_durn,
+ gyro_bw_u8);
+ }
+ }
+ }
+ } else {
+ com_rslt = BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+} else {
+com_rslt = BNO055_ERROR;
+}
+} else {
+com_rslt = BNO055_ERROR;
+}
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 gyro_power_mode_u8 : The value of gyro power mode
+ *
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_power_mode(
+u8 *gyro_power_mode_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro power mode is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_power_mode_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_POWER_MODE);
+ } else {
+ com_rslt = BNO055_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 gyro_power_mode_u8 : The value of gyro power mode
+ *
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_power_mode(
+u8 gyro_power_mode_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 gyro_auto_sleep_durn = BNO055_INIT_VALUE;
+u8 gyro_bw_u8 = BNO055_INIT_VALUE;
+s8 pg_stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ /* Write the value of power mode*/
+ if ((gyro_power_mode_u8 == BNO055_INIT_VALUE ||
+ gyro_power_mode_u8 > BNO055_INIT_VALUE) &&
+ gyro_power_mode_u8 < BNO055_GYRO_RANGE) {
+ switch (gyro_power_mode_u8) {
+ case BNO055_GYRO_POWER_MODE_NORMAL:
+ gyro_power_mode_u8 =
+ BNO055_GYRO_POWER_MODE_NORMAL;
+ break;
+ case BNO055_GYRO_POWER_MODE_FASTPOWERUP:
+ gyro_power_mode_u8 =
+ BNO055_GYRO_POWER_MODE_FASTPOWERUP;
+ break;
+ case BNO055_GYRO_POWER_MODE_DEEPSUSPEND:
+ gyro_power_mode_u8 =
+ BNO055_GYRO_POWER_MODE_DEEPSUSPEND;
+ break;
+ case BNO055_GYRO_POWER_MODE_SUSPEND:
+ gyro_power_mode_u8 =
+ BNO055_GYRO_POWER_MODE_SUSPEND;
+ break;
+ case BNO055_GYRO_POWER_MODE_ADVANCE_POWERSAVE:
+ com_rslt = bno055_get_gyro_bw
+ (&gyro_bw_u8);
+ com_rslt += bno055_get_gyro_auto_sleep_durn
+ (&gyro_auto_sleep_durn);
+ if (com_rslt == BNO055_SUCCESS)
+ bno055_gyro_set_auto_sleep_durn
+ (gyro_auto_sleep_durn,
+ gyro_bw_u8);
+ com_rslt +=
+ bno055_write_page_id(BNO055_PAGE_ONE);
+ gyro_power_mode_u8 =
+ BNO055_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,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_GYRO_POWER_MODE,
+ gyro_power_mode_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_POWER_MODE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+} else {
+ com_rslt = BNO055_ERROR;
+}
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 sleep_tmr_u8 : The value of accel sleep mode
+ *
+ * sleep_tmr_u8 | result
+ * ----------------- |------------------------------------
+ * 0x00 | enable EventDrivenSampling(EDT)
+ * 0x01 | enable Equidistant sampling mode(EST)
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_sleep_tmr_mode(
+u8 *sleep_tmr_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel sleep mode is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *sleep_tmr_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_SLEEP_MODE);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel sleep mode
+ * from page one register from 0x0C bit 0
+ *
+ * @param sleep_tmr_u8 : The value of accel sleep mode
+ *
+ * sleep_tmr_u8 | result
+ * ----------------- |------------------------------------
+ * 0x00 | enable EventDrivenSampling(EDT)
+ * 0x01 | enable Equidistant sampling mode(EST)
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_sleep_tmr_mode(
+u8 sleep_tmr_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(
+ BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ if (sleep_tmr_u8 <
+ BNO055_ACCEL_SLEEP_MODE_RANGE) {
+ /*Write the value
+ of accel sleep mode*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLEEP_MODE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_ACCEL_SLEEP_MODE,
+ sleep_tmr_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLEEP_MODE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 sleep_durn_u8 : The value of accel sleep duration
+ *
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_sleep_durn(
+u8 *sleep_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel sleep duration
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *sleep_durn_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_SLEEP_DURN);
+ } else {
+ com_rslt = BNO055_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 sleep_durn_u8 : The value of accel sleep duration
+ *
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_sleep_durn(
+u8 sleep_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(
+ BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ if (sleep_durn_u8 <
+ BNO055_ACCEL_SLEEP_DURATION_RANGE) {
+ /* Write the accel
+ sleep duration*/
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLEEP_DURN_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_ACCEL_SLEEP_DURN,
+ sleep_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLEEP_DURN_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 sleep_durn_u8 : The value of gyro sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_sleep_durn(u8 *sleep_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel range is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ONE)) {
+ /* Read the gyro sleep duration */
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_SLEEP_DURN_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *sleep_durn_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_SLEEP_DURN);
+ } else {
+ com_rslt = BNO055_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 sleep_durn_u8 : The value of gyro sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_sleep_durn(u8 sleep_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+s8 pg_stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ if (sleep_durn_u8 <
+ BNO055_GYRO_AUTO_SLEEP_DURATION_RANGE) {
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_SLEEP_DURN_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Write the gyro
+ sleep duration */
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_GYRO_SLEEP_DURN,
+ sleep_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_SLEEP_DURN_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 auto_sleep_durn_u8 : The value of gyro auto sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_auto_sleep_durn(
+u8 *auto_sleep_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel range is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *auto_sleep_durn_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_AUTO_SLEEP_DURN);
+ } else {
+ com_rslt = BNO055_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 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_gyro_set_auto_sleep_durn(
+u8 auto_sleep_durn_u8, u8 bw)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 auto_sleep_durn_u8r;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (auto_sleep_durn_u8 <
+ BNO055_GYRO_AUTO_SLEEP_DURATION_RANGE) {
+ switch (bw) {
+ case BNO055_GYRO_BW_523HZ:
+ if (auto_sleep_durn_u8 >
+ BNO055_GYRO_4MS_AUTOSLPDUR)
+ auto_sleep_durn_u8r =
+ auto_sleep_durn_u8;
+ else
+ auto_sleep_durn_u8r =
+ BNO055_GYRO_4MS_AUTOSLPDUR;
+ break;
+ case BNO055_GYRO_BW_230HZ:
+ if (auto_sleep_durn_u8 >
+ BNO055_GYRO_4MS_AUTOSLPDUR)
+ auto_sleep_durn_u8r =
+ auto_sleep_durn_u8;
+ else
+ auto_sleep_durn_u8r =
+ BNO055_GYRO_4MS_AUTOSLPDUR;
+ break;
+ case BNO055_GYRO_BW_116HZ:
+ if (auto_sleep_durn_u8 >
+ BNO055_GYRO_4MS_AUTOSLPDUR)
+ auto_sleep_durn_u8r =
+ auto_sleep_durn_u8;
+ else
+ auto_sleep_durn_u8r =
+ BNO055_GYRO_4MS_AUTOSLPDUR;
+ break;
+ case BNO055_GYRO_BW_47HZ:
+ if (auto_sleep_durn_u8 >
+ BNO055_GYRO_5MS_AUTOSLPDUR)
+ auto_sleep_durn_u8r =
+ auto_sleep_durn_u8;
+ else
+ auto_sleep_durn_u8r =
+ BNO055_GYRO_5MS_AUTOSLPDUR;
+ break;
+ case BNO055_GYRO_BW_23HZ:
+ if (auto_sleep_durn_u8 >
+ BNO055_GYRO_10MS_AUTOSLPDUR)
+ auto_sleep_durn_u8r =
+ auto_sleep_durn_u8;
+ else
+ auto_sleep_durn_u8r =
+ BNO055_GYRO_10MS_AUTOSLPDUR;
+ break;
+ case BNO055_GYRO_BW_12HZ:
+ if (auto_sleep_durn_u8 >
+ BNO055_GYRO_20MS_AUTOSLPDUR)
+ auto_sleep_durn_u8r =
+ auto_sleep_durn_u8;
+ else
+ auto_sleep_durn_u8r =
+ BNO055_GYRO_20MS_AUTOSLPDUR;
+ break;
+ case BNO055_GYRO_BW_64HZ:
+ if (auto_sleep_durn_u8 >
+ BNO055_GYRO_10MS_AUTOSLPDUR)
+ auto_sleep_durn_u8r =
+ auto_sleep_durn_u8;
+ else
+ auto_sleep_durn_u8r =
+ BNO055_GYRO_10MS_AUTOSLPDUR;
+ break;
+ case BNO055_GYRO_BW_32HZ:
+ if (auto_sleep_durn_u8 >
+ BNO055_GYRO_20MS_AUTOSLPDUR)
+ auto_sleep_durn_u8r =
+ auto_sleep_durn_u8;
+ else
+ auto_sleep_durn_u8r =
+ BNO055_GYRO_20MS_AUTOSLPDUR;
+ break;
+ default:
+ if (auto_sleep_durn_u8 >
+ BNO055_GYRO_4MS_AUTOSLPDUR)
+ auto_sleep_durn_u8r =
+ auto_sleep_durn_u8;
+ else
+ auto_sleep_durn_u8r =
+ BNO055_GYRO_4MS_AUTOSLPDUR;
+ break;
+ }
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_GYRO_AUTO_SLEEP_DURN,
+ auto_sleep_durn_u8r);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_AUTO_SLEEP_DURN_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_OUT_OF_RANGE;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+} else {
+com_rslt = BNO055_ERROR;
+}
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 sleep_mode_u8 : The value of mag sleep mode
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_sleep_mode(
+u8 *sleep_mode_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page,mag sleep mode is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ *sleep_mode_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_MAG_SLEEP_MODE);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the mag sleep mode
+ * from page one register from 0x0E bit 0
+ *
+ * @param sleep_mode_u8 : The value of mag sleep mode
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_sleep_mode(
+u8 sleep_mode_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+s8 pg_stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(
+ BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_SLEEP_MODE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Write the value
+ of mag sleep mode*/
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_MAG_SLEEP_MODE,
+ sleep_mode_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_SLEEP_MODE_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 sleep_durn_u8 : The value of mag sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_sleep_durn(
+u8 *sleep_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page,mag sleep duration is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *sleep_durn_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_MAG_SLEEP_DURN);
+ } else {
+ com_rslt = BNO055_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 sleep_durn_u8 : The value of mag sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_sleep_durn(
+u8 sleep_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+s8 pg_stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(
+ BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_SLEEP_DURN_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Write the value of
+ mag sleep duration */
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_MAG_SLEEP_DURN,
+ sleep_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_MAG_SLEEP_DURN_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 gyro_any_motion_u8 : The value of gyro anymotion interrupt mask
+ * gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *gyro_any_motion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro anymotion interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_any_motion_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_ANY_MOTION_INTR_MASK);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro anymotion interrupt mask
+ * from page one register from 0x0F bit 2
+ *
+ * @param gyro_any_motion_u8 : The value of gyro anymotion interrupt mask
+ * gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 gyro_any_motion_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel range is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_ANY_MOTION_INTR_MASK,
+ gyro_any_motion_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_INTR_MASK_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the gyro highrate interrupt mask
+ * from page one register from 0x0F bit 3
+ *
+ * @param gyro_highrate_u8 : The value of gyro highrate interrupt mask
+ * gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following API
+ *
+ * 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 *gyro_highrate_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_highrate_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_INTR_MASK);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro highrate interrupt mask
+ * from page one register from 0x0F bit 3
+ *
+ * @param gyro_highrate_u8 : The value of gyro highrate interrupt mask
+ * gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following APIs
+ *
+ * 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 gyro_highrate_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ONE)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_INTR_MASK_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Write the value of gyro
+ highrate interrupt mask*/
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_INTR_MASK,
+ gyro_highrate_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_INTR_MASK_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel highg interrupt mask
+ * from page one register from 0x0F bit 5
+ *
+ * @param accel_high_g_u8 : The value of accel highg interrupt mask
+ * accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following APIs
+ *
+ * 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 *accel_high_g_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel highg interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_high_g_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_HIGH_G_INTR_MASK);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel highg interrupt mask
+ * from page one register from 0x0F bit 5
+ *
+ * @param accel_high_g_u8 : The value of accel highg interrupt mask
+ * accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following APIs
+ *
+ * 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 accel_high_g_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel highg interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ONE)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_INTR_MASK_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Write the value of accel
+ highg interrupt mask*/
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_ACCEL_HIGH_G_INTR_MASK,
+ accel_high_g_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_INTR_MASK_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel anymotion interrupt mask
+ * from page one register from 0x0F bit 6
+ *
+ * @param accel_any_motion_u8 : The value of accel anymotion interrupt mask
+ * accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following APIs
+ *
+ * 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 *accel_any_motion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel anymotion interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_any_motion_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_ANY_MOTION_INTR_MASK);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel anymotion interrupt mask
+ * from page one register from 0x0F bit 6
+ *
+ * @param accel_any_motion_u8 : The value of accel anymotion interrupt mask
+ * accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 accel_any_motion_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel anymotion interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_ACCEL_ANY_MOTION_INTR_MASK,
+ accel_any_motion_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_INTR_MASK_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel nomotion interrupt mask
+ * from page one register from 0x0F bit 7
+ *
+ * @param accel_nomotion_u8 : The value of accel nomotion interrupt mask
+ * accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_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 *accel_nomotion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel nomotion interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_nomotion_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_NO_MOTION_INTR_MASK);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel nomotion interrupt mask
+ * from page one register from 0x0F bit 7
+ *
+ * @param accel_nomotion_u8 : The value of accel nomotion interrupt mask
+ * accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 accel_nomotion_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel
+ nomotion interrupt mask is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ONE)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_NO_MOTION_INTR_MASK_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Write the value of accel
+ nomotion interrupt mask*/
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_ACCEL_NO_MOTION_INTR_MASK,
+ accel_nomotion_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_NO_MOTION_INTR_MASK_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the gyro anymotion interrupt
+ * from page one register from 0x10 bit 2
+ *
+ * @param gyro_any_motion_u8 : The value of gyro anymotion interrupt
+ * gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *gyro_any_motion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro anymotion interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_any_motion_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_ANY_MOTION_INTR);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro anymotion interrupt
+ * from page one register from 0x10 bit 2
+ *
+ * @param gyro_any_motion_u8 : The value of gyro anymotion interrupt
+ * gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 gyro_any_motion_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro anymotion interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_ANY_MOTION_INTR,
+ gyro_any_motion_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_INTR_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the gyro highrate interrupt
+ * from page one register from 0x10 bit 3
+ *
+ * @param gyro_highrate_u8 : The value of gyro highrate interrupt
+ * gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following APIs
+ *
+ * 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 *gyro_highrate_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_highrate_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_INTR);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the gyro highrate interrupt
+ * from page one register from 0x10 bit 3
+ *
+ * @param gyro_highrate_u8 : The value of gyro highrate interrupt
+ * gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following APIs
+ *
+ * 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 gyro_highrate_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ONE)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_INTR_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Write the value of gyro highrate interrupt */
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_INTR, gyro_highrate_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_INTR_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel highg interrupt
+ * from page one register from 0x10 bit 5
+ *
+ * @param accel_high_g_u8 : The value of accel highg interrupt
+ * accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following APIs
+ *
+ * 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 *accel_high_g_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel highg interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_high_g_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_HIGH_G_INTR);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel highg interrupt
+ * from page one register from 0x10 bit 5
+ *
+ * @param accel_high_g_u8 : The value of accel highg interrupt
+ * accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following APIs
+ *
+ * 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 accel_high_g_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel highg interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ONE)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_INTR_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Write the value of accel highg interrupt*/
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_ACCEL_HIGH_G_INTR,
+ accel_high_g_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_INTR_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel anymotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param accel_any_motion_u8 : The value of accel anymotion interrupt
+ * accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *accel_any_motion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel anymotion interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_any_motion_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_ANY_MOTION_INTR);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel anymotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param accel_any_motion_u8 : The value of accel anymotion interrupt
+ * accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 accel_any_motion_u8)
+{
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel range is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_ACCEL_ANY_MOTION_INTR,
+ accel_any_motion_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_INTR_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to read the accel nomotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param accel_nomotion_u8 : The value of accel nomotion interrupt
+ * accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *accel_nomotion_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel nomotion interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_nomotion_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_NO_MOTION_INTR);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write the accel nomotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param accel_nomotion_u8 : The value of accel nomotion interrupt
+ * accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 accel_nomotion_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page,
+ accel nomotion interrupt is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ONE)) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_NO_MOTION_INTR_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Write the value of
+ accel nomotion interrupt */
+ data_u8r = BNO055_SET_BITSLICE(data_u8r,
+ BNO055_ACCEL_NO_MOTION_INTR,
+ accel_nomotion_u8);
+ com_rslt += p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_NO_MOTION_INTR_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_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 accel_any_motion_thres_u8 : The value of any motion threshold
+ * accel_any_motion_thres_u8 | result
+ * ------------------------ | -------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Accel anymotion threshold dependent on the
+ * range values
+ *
+ * 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 *accel_any_motion_thres_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel any motion threshold is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_any_motion_thres_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_ANY_MOTION_THRES);
+ } else {
+ com_rslt = BNO055_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 accel_any_motion_thres_u8 : The value of any motion threshold
+ * accel_any_motion_thres_u8 | result
+ * ------------------------ | -------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Accel anymotion threshold dependent on the
+ * range values
+ *
+ * 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 accel_any_motion_thres_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+s8 pg_stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_THRES_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Write the value of
+ accel any motion threshold*/
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_ACCEL_ANY_MOTION_THRES,
+ accel_any_motion_thres_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_THRES_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 accel_any_motion_durn_u8 : The value of accel anymotion duration
+ * accel_any_motion_durn_u8 | result
+ * ------------------------- | -------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_any_motion_durn(
+u8 *accel_any_motion_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel anymotion duration is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_any_motion_durn_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_ANY_MOTION_DURN_SET);
+ } else {
+ com_rslt = BNO055_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 accel_any_motion_durn_u8 : The value of accel anymotion duration
+ *
+ * accel_any_motion_durn_u8 | result
+ * ------------------------- | -------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_any_motion_durn(
+u8 accel_any_motion_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+s8 pg_stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_DURN_SET_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Write the value of
+ accel anymotion duration*/
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_ACCEL_ANY_MOTION_DURN_SET,
+ accel_any_motion_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_DURN_SET_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 data_u8 : The value of accel anymotion enable
+ * data_u8 | result
+ * ------------ | -------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ * @param channel_u8 : The value of accel anymotion axis selection
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_any_motion_no_motion_axis_enable(
+u8 channel_u8, u8 *data_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel anymotion enable is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ONE)) {
+ switch (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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *data_u8 =
+ BNO055_GET_BITSLICE(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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *data_u8 =
+ BNO055_GET_BITSLICE(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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *data_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_ANY_MOTION_Z_AXIS);
+ break;
+ default:
+ com_rslt = BNO055_OUT_OF_RANGE;
+ break;
+ }
+ } else {
+ com_rslt = BNO055_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 data_u8 : The value of accel anymotion enable
+ * data_u8 | result
+ * ------------ | -------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ * @param channel_u8 : The value of accel anymotion axis selection
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_any_motion_no_motion_axis_enable(
+u8 channel_u8, u8 data_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+s8 pg_stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ switch (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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_ACCEL_ANY_MOTION_X_AXIS,
+ data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_X_AXIS_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ 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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_ACCEL_ANY_MOTION_Y_AXIS,
+ data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_Y_AXIS_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ 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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_ACCEL_ANY_MOTION_Z_AXIS,
+ data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_ANY_MOTION_Z_AXIS_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ break;
+ default:
+ com_rslt = BNO055_OUT_OF_RANGE;
+ break;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 data_u8 : The value of accel highg enable
+ * data_u8| result
+ * ------------ | -------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ * @param channel_u8 : The value of accel highg axis selection
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_high_g_axis_enable(
+u8 channel_u8, u8 *data_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel highg enable is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ONE)) {
+ switch (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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *data_u8 =
+ BNO055_GET_BITSLICE(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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *data_u8 =
+ BNO055_GET_BITSLICE(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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *data_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_HIGH_G_Z_AXIS);
+ break;
+ default:
+ com_rslt = BNO055_OUT_OF_RANGE;
+ break;
+ }
+ } else {
+ com_rslt = BNO055_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 data_u8 : The value of accel highg enable
+ * data_u8| result
+ * ------------ | -------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ * @param channel_u8 : The value of accel highg axis selection
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_high_g_axis_enable(
+u8 channel_u8, u8 data_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+s8 pg_stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ switch (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,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_ACCEL_HIGH_G_X_AXIS, data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_X_AXIS_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ 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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_ACCEL_HIGH_G_Y_AXIS,
+ data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_Y_AXIS_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ 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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_ACCEL_HIGH_G_Z_AXIS, data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_Z_AXIS_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ break;
+ default:
+ com_rslt = BNO055_OUT_OF_RANGE;
+ break;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 accel_high_g_durn_u8 : The value of accel highg duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *accel_high_g_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel highg duration is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_high_g_durn_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_HIGH_G_DURN);
+ } else {
+ com_rslt = BNO055_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 accel_high_g_durn_u8 : The value of accel highg duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 accel_high_g_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(
+ BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_DURN_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Write the value of
+ accel highg duration*/
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_ACCEL_HIGH_G_DURN,
+ accel_high_g_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_DURN_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 accel_high_g_thres_u8 : The value of accel highg threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Accel highg interrupt threshold dependent
+ * for accel g range
+ *
+ * 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 *accel_high_g_thres_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, highg threshold is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_high_g_thres_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_HIGH_G_THRES);
+ } else {
+ com_rslt = BNO055_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 accel_high_g_thres_u8 : The value of accel highg threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Accel highg interrupt threshold dependent
+ * for accel g range
+ *
+ * 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 accel_high_g_thres_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(
+ BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ com_rslt =
+ p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_THRES_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Write the value of
+ accel highg threshold */
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_ACCEL_HIGH_G_THRES,
+ accel_high_g_thres_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_HIGH_G_THRES_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 accel_slow_no_motion_thres_u8 :
+ * The value of accel slownomotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Accel slow no motion interrupt threshold dependent
+ * for accel g range
+ *
+ * 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 *accel_slow_no_motion_thres_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel slownomotion threshold is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_slow_no_motion_thres_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_SLOW_NO_MOTION_THRES);
+ } else {
+ com_rslt = BNO055_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 accel_slow_no_motion_thres_u8 :
+ * The value of accel slownomotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Accel slow no motion interrupt threshold dependent
+ * for accel g range
+ *
+ * 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 accel_slow_no_motion_thres_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_ACCEL_SLOW_NO_MOTION_THRES,
+ 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,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read accel slownomotion enable
+ * from page one register from 0x16 bit 0
+ *
+ * @param accel_slow_no_motion_en_u8 : The value of accel slownomotion enable
+ * accel_slow_no_motion_en_u8 | result
+ * ------------------------ | --------
+ * 0x01 | Slow motion
+ * 0x00 | No motion
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_slow_no_motion_enable(
+u8 *accel_slow_no_motion_en_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel slownomotion enable is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_slow_no_motion_en_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_SLOW_NO_MOTION_ENABLE);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write accel slownomotion enable
+ * from page one register from 0x16 bit 0
+ *
+ * @param accel_slow_no_motion_en_u8 : The value of accel slownomotion enable
+ * accel_slow_no_motion_en_u8 | result
+ * ------------------------ | --------
+ * 0x01 | Slow motion
+ * 0x00 | No motion
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_slow_no_motion_enable(
+u8 accel_slow_no_motion_en_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLOW_NO_MOTION_ENABLE_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /* Read the value of
+ accel slownomotion enable */
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_ACCEL_SLOW_NO_MOTION_ENABLE,
+ 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,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 accel_slow_no_motion_durn_u8 :
+ * The value of accel slownomotion duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_slow_no_motion_durn(
+u8 *accel_slow_no_motion_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, accel slownomotion duration is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *accel_slow_no_motion_durn_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_ACCEL_SLOW_NO_MOTION_DURN);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write accel slownomotion duration
+ * from page one register from 0x16 bit 1 to 6
+ *
+ * @param accel_slow_no_motion_durn_u8 :
+ * The value of accel slownomotion duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_slow_no_motion_durn(
+u8 accel_slow_no_motion_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ com_rslt = p_bno055->BNO055_BUS_READ_FUNC
+ (p_bno055->dev_addr,
+ BNO055_ACCEL_SLOW_NO_MOTION_DURN_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ /*Write the value of accel
+ slownomotion duration*/
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_ACCEL_SLOW_NO_MOTION_DURN,
+ 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,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 data_u8 : The value of gyro anymotion enable
+ * data_u8 | result
+ * ----------------- |-------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ * @param channel_u8 : The value of gyro anymotion axis selection
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_axis_enable(
+u8 channel_u8, u8 *data_u8)
+{
+/* Variable used to return value of
+communication routine*/
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro anymotion axis is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ONE)) {
+ switch (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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *data_u8 =
+ BNO055_GET_BITSLICE(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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *data_u8 =
+ BNO055_GET_BITSLICE(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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *data_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_ANY_MOTION_Z_AXIS);
+ break;
+ default:
+ com_rslt = BNO055_OUT_OF_RANGE;
+ break;
+ }
+ } else {
+ com_rslt = BNO055_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 data_u8 : The value of gyro anymotion enable
+ * data_u8 | result
+ * ----------------- |-------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ * @param channel_u8 : The value of gyro anymotion axis selection
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_axis_enable(
+u8 channel_u8, u8 data_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ switch (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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_GYRO_ANY_MOTION_X_AXIS,
+ data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_X_AXIS_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ 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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_GYRO_ANY_MOTION_Y_AXIS, data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_Y_AXIS_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ 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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_GYRO_ANY_MOTION_Z_AXIS,
+ data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_Z_AXIS_REG,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ break;
+ default:
+ com_rslt = BNO055_OUT_OF_RANGE;
+ break;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+} else {
+com_rslt = BNO055_ERROR;
+}
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 data_u8 : The value of gyro highrate enable
+ * data_u8 | result
+ * ---------------- |-------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ * @param channel_u8 : The value of gyro highrate axis selection
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_axis_enable(
+u8 channel_u8, u8 *data_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate enable is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_PAGE_ONE)) {
+ switch (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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *data_u8 =
+ BNO055_GET_BITSLICE(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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *data_u8 =
+ BNO055_GET_BITSLICE(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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *data_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_Z_AXIS);
+ break;
+ default:
+ com_rslt = BNO055_OUT_OF_RANGE;
+ break;
+ }
+ } else {
+ com_rslt = BNO055_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 data_u8 : The value of gyro highrate enable
+ * data_u8 | result
+ * ---------------- |-------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ * @param channel_u8 : The value of gyro highrate axis selection
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_axis_enable(
+u8 channel_u8, u8 data_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_SUCCESS) {
+ switch (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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_GYRO_HIGHRATE_X_AXIS, data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_X_AXIS_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ 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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(
+ data_u8r,
+ BNO055_GYRO_HIGHRATE_Y_AXIS, data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Y_AXIS_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ 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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r = BNO055_SET_BITSLICE
+ (data_u8r,
+ BNO055_GYRO_HIGHRATE_Z_AXIS, data_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Z_AXIS_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ break;
+ default:
+ com_rslt = BNO055_OUT_OF_RANGE;
+ break;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read gyro anymotion filter
+ * from page one register from 0x17 bit 6
+ *
+ * @param gyro_any_motion_filter_u8 : The value of gyro anymotion filter
+ * gyro_any_motion_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | BNO055_GYRO_FILTERED_CONFIG
+ * 0x01 | BNO055_GYRO_UNFILTERED_CONFIG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_filter(
+u8 *gyro_any_motion_filter_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro anymotion filter is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_any_motion_filter_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_ANY_MOTION_FILTER);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write gyro anymotion filter
+ * from page one register from 0x17 bit 6
+ *
+ * @param gyro_any_motion_filter_u8 : The value of gyro anymotion filter
+ * gyro_any_motion_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | BNO055_GYRO_FILTERED_CONFIG
+ * 0x01 | BNO055_GYRO_UNFILTERED_CONFIG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_filter(
+u8 gyro_any_motion_filter_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_ANY_MOTION_FILTER,
+ gyro_any_motion_filter_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_FILTER_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (prev_opmode_u8);
+return com_rslt;
+}
+/*!
+ * @brief This API used to read gyro highrate filter
+ * from page one register from 0x17 bit 7
+ *
+ * @param gyro_highrate_filter_u8 : The value of gyro highrate filter
+ * gyro_highrate_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | BNO055_GYRO_FILTERED_CONFIG
+ * 0x01 | BNO055_GYRO_UNFILTERED_CONFIG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_filter(
+u8 *gyro_highrate_filter_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate filter is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_highrate_filter_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_FILTER);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write gyro highrate filter
+ * from page one register from 0x17 bit 7
+ *
+ * @param gyro_highrate_filter_u8 : The value of gyro highrate filter
+ * gyro_highrate_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | BNO055_GYRO_FILTERED_CONFIG
+ * 0x01 | BNO055_GYRO_UNFILTERED_CONFIG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_filter(
+u8 gyro_highrate_filter_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+s8 pg_stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_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,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_FILTER,
+ gyro_highrate_filter_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_FILTER_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 gyro_highrate_x_thres_u8 : The value of gyro x highrate threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * 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 *gyro_highrate_x_thres_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate x threshold is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_highrate_x_thres_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_X_THRES);
+ } else {
+ com_rslt = BNO055_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 gyro_highrate_x_thres_u8 : The value of gyro x highrate threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * 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 gyro_highrate_x_thres_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_X_THRES,
+ gyro_highrate_x_thres_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_X_THRES_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 gyro_highrate_x_hyst_u8 : The value of gyro highrate x hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * gyro_highrate_x_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * 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 *gyro_highrate_x_hyst_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page,gyro highrate x hysteresis is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_highrate_x_hyst_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_X_HYST);
+ } else {
+ com_rslt = BNO055_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 gyro_highrate_x_hyst_u8 : The value of gyro highrate x hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * gyro_highrate_x_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * 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 gyro_highrate_x_hyst_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_X_HYST,
+ gyro_highrate_x_hyst_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_X_HYST_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 gyro_highrate_x_durn_u8 : The value of gyro highrate x duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + gyro_highrate_x_durn_u8)*2.5ms
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_x_durn(
+u8 *gyro_highrate_x_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate x duration is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_highrate_x_durn_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_X_DURN);
+ } else {
+ com_rslt = BNO055_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 gyro_highrate_x_durn_u8 : The value of gyro highrate x duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + gyro_highrate_x_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_x_durn(
+u8 gyro_highrate_x_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_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,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_X_DURN,
+ gyro_highrate_x_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_X_DURN_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 gyro_highrate_y_thres_u8 : The value of gyro highrate y threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * 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 *gyro_highrate_y_thres_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate y threshold is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_highrate_y_thres_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_Y_THRES);
+ } else {
+ com_rslt = BNO055_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 gyro_highrate_y_thres_u8 : The value of gyro highrate y threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * 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 gyro_highrate_y_thres_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_Y_THRES,
+ gyro_highrate_y_thres_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Y_THRES_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 gyro_highrate_y_hyst_u8 : The value of gyro highrate y hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * gyro_highrate_y_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * 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 *gyro_highrate_y_hyst_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate y hysteresis is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_highrate_y_hyst_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_Y_HYST);
+ } else {
+ com_rslt = BNO055_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 gyro_highrate_y_hyst_u8 : The value of gyro highrate y hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * gyro_highrate_y_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * 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 gyro_highrate_y_hyst_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_Y_HYST,
+ gyro_highrate_y_hyst_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Y_HYST_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 gyro_highrate_y_durn_u8 : The value of gyro highrate y duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + gyro_highrate_y_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_y_durn(
+u8 *gyro_highrate_y_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate y duration is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_highrate_y_durn_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_Y_DURN);
+ } else {
+ com_rslt = BNO055_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 gyro_highrate_y_durn_u8 : The value of gyro highrate y duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + gyro_highrate_y_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_y_durn(
+u8 gyro_highrate_y_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_Y_DURN,
+ gyro_highrate_y_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Y_DURN_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 gyro_highrate_z_thres_u8 : The value of gyro highrate z threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * 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 *gyro_highrate_z_thres_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate z threshold is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_highrate_z_thres_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_Z_THRES);
+ } else {
+ com_rslt = BNO055_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 gyro_highrate_z_thres_u8 : The value of gyro highrate z threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * 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 gyro_highrate_z_thres_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_Z_THRES,
+ gyro_highrate_z_thres_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Z_THRES_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 gyro_highrate_z_hyst_u8 : The value of gyro highrate z hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * gyro_highrate_z_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * 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 *gyro_highrate_z_hyst_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate z hysteresis is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_highrate_z_hyst_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_Z_HYST);
+ } else {
+ com_rslt = BNO055_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 gyro_highrate_z_hyst_u8 : The value of gyro highrate z hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * gyro_highrate_z_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * 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 gyro_highrate_z_hyst_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_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,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_Z_HYST,
+ gyro_highrate_z_hyst_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Z_HYST_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 gyro_highrate_z_durn_u8 : The value of gyro highrate z duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + gyro_highrate_z_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_z_durn(
+u8 *gyro_highrate_z_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro highrate z duration is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_highrate_z_durn_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_Z_DURN);
+ } else {
+ com_rslt = BNO055_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 gyro_highrate_z_durn_u8 : The value of gyro highrate z duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + gyro_highrate_z_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_z_durn(
+u8 gyro_highrate_z_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+s8 pg_stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_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,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_HIGHRATE_Z_DURN,
+ gyro_highrate_z_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_HIGHRATE_Z_DURN_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 gyro_any_motion_thres_u8 : The value of gyro anymotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro anymotion interrupt threshold dependent
+ * on the selection of gyro range
+ *
+ * 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 *gyro_any_motion_thres_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page,gyro anymotion threshold is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_any_motion_thres_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_ANY_MOTION_THRES);
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ return com_rslt;
+}
+/*!
+ * @brief This API used to write gyro anymotion threshold
+ * from page one register from 0x1E bit 0 to 6
+ *
+ * @param gyro_any_motion_thres_u8 : The value of gyro anymotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro anymotion interrupt threshold dependent
+ * on the selection of gyro range
+ *
+ * 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 gyro_any_motion_thres_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+s8 pg_stat_s8 = BNO055_ERROR;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_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,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_ANY_MOTION_THRES,
+ gyro_any_motion_thres_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_ANY_MOTION_THRES_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+}
+if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 gyro_any_motion_slope_samples_u8 :
+ * The value of gyro anymotion slope samples
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_slope_samples(
+u8 *gyro_any_motion_slope_samples_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro anymotion slope samples is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_any_motion_slope_samples_u8 =
+ BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_SLOPE_SAMPLES);
+ } else {
+ com_rslt = BNO055_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 gyro_any_motion_slope_samples_u8 :
+ * The value of gyro anymotion slope samples
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_slope_samples(
+u8 gyro_any_motion_slope_samples_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+s8 pg_stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_SLOPE_SAMPLES,
+ gyro_any_motion_slope_samples_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_SLOPE_SAMPLES_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode of
+ previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (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 gyro_awake_durn_u8 : The value of gyro anymotion awake duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_awake_durn(
+u8 *gyro_awake_durn_u8)
+{
+ /* Variable used to return value of
+ communication routine*/
+ BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+ u8 data_u8r = BNO055_INIT_VALUE;
+ s8 stat_s8 = BNO055_ERROR;
+ /* Check the struct p_bno055 is empty */
+ if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_E_NULL_PTR;
+ } else {
+ /*condition check for page, gyro anymotion awake duration is
+ available in the page one*/
+ if (p_bno055->page_id != BNO055_PAGE_ONE)
+ /* Write page as one */
+ stat_s8 = bno055_write_page_id(BNO055_PAGE_ONE);
+ if ((stat_s8 == BNO055_SUCCESS) ||
+ (p_bno055->page_id == BNO055_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,
+ &data_u8r, BNO055_GEN_READ_WRITE_LENGTH);
+ *gyro_awake_durn_u8 = BNO055_GET_BITSLICE(data_u8r,
+ BNO055_GYRO_AWAKE_DURN);
+ } else {
+ com_rslt = BNO055_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 gyro_awake_durn_u8 : The value of gyro anymotion awake duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_awake_durn(
+u8 gyro_awake_durn_u8)
+{
+BNO055_RETURN_FUNCTION_TYPE com_rslt = BNO055_ERROR;
+u8 data_u8r = BNO055_INIT_VALUE;
+s8 stat_s8 = BNO055_ERROR;
+s8 pg_stat_s8 = BNO055_ERROR;
+u8 prev_opmode_u8 = BNO055_OPERATION_MODE_CONFIG;
+/* Check the struct p_bno055 is empty */
+if (p_bno055 == BNO055_INIT_VALUE) {
+ return BNO055_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 */
+ stat_s8 = bno055_get_operation_mode(&prev_opmode_u8);
+ if (stat_s8 == BNO055_SUCCESS) {
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ stat_s8 += bno055_set_operation_mode
+ (BNO055_OPERATION_MODE_CONFIG);
+ if (stat_s8 == BNO055_SUCCESS) {
+ /* Write page as one */
+ pg_stat_s8 = bno055_write_page_id(
+ BNO055_PAGE_ONE);
+ if (pg_stat_s8 == BNO055_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,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ if (com_rslt == BNO055_SUCCESS) {
+ data_u8r =
+ BNO055_SET_BITSLICE(data_u8r,
+ BNO055_GYRO_AWAKE_DURN,
+ gyro_awake_durn_u8);
+ com_rslt +=
+ p_bno055->BNO055_BUS_WRITE_FUNC
+ (p_bno055->dev_addr,
+ BNO055_GYRO_AWAKE_DURN_REG,
+ &data_u8r,
+ BNO055_GEN_READ_WRITE_LENGTH);
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ } else {
+ com_rslt = BNO055_ERROR;
+ }
+ }
+ if (prev_opmode_u8 != BNO055_OPERATION_MODE_CONFIG)
+ /* set the operation mode
+ of previous operation mode*/
+ com_rslt += bno055_set_operation_mode
+ (prev_opmode_u8);
+ return com_rslt;
+}
\ No newline at end of file
diff -r 000000000000 -r 1f82672b8755 BNO055.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/BNO055.h Sat Jul 01 01:24:03 2017 +0000
@@ -0,0 +1,7993 @@
+/** \mainpage
+*
+****************************************************************************
+* Copyright (C) 2015 - 2016 Bosch Sensortec GmbH
+*
+* File : bno055.h
+*
+* Date : 2016/03/14
+*
+* Revision : 2.0.3 $
+*
+* 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 BNO055_ACCEL_OFFSET_X_LSB_ADDR (0X55)
+#define BNO055_ACCEL_OFFSET_X_MSB_ADDR (0X56)
+#define BNO055_ACCEL_OFFSET_Y_LSB_ADDR (0X57)
+#define BNO055_ACCEL_OFFSET_Y_MSB_ADDR (0X58)
+#define BNO055_ACCEL_OFFSET_Z_LSB_ADDR (0X59)
+#define BNO055_ACCEL_OFFSET_Z_MSB_ADDR (0X5A)
+
+/* Magnetometer Offset registers*/
+#define BNO055_MAG_OFFSET_X_LSB_ADDR (0X5B)
+#define BNO055_MAG_OFFSET_X_MSB_ADDR (0X5C)
+#define BNO055_MAG_OFFSET_Y_LSB_ADDR (0X5D)
+#define BNO055_MAG_OFFSET_Y_MSB_ADDR (0X5E)
+#define BNO055_MAG_OFFSET_Z_LSB_ADDR (0X5F)
+#define BNO055_MAG_OFFSET_Z_MSB_ADDR (0X60)
+
+/* Gyroscope Offset registers*/
+#define BNO055_GYRO_OFFSET_X_LSB_ADDR (0X61)
+#define BNO055_GYRO_OFFSET_X_MSB_ADDR (0X62)
+#define BNO055_GYRO_OFFSET_Y_LSB_ADDR (0X63)
+#define BNO055_GYRO_OFFSET_Y_MSB_ADDR (0X64)
+#define BNO055_GYRO_OFFSET_Z_LSB_ADDR (0X65)
+#define BNO055_GYRO_OFFSET_Z_MSB_ADDR (0X66)
+
+/* Radius registers*/
+#define BNO055_ACCEL_RADIUS_LSB_ADDR (0X67)
+#define BNO055_ACCEL_RADIUS_MSB_ADDR (0X68)
+#define BNO055_MAG_RADIUS_LSB_ADDR (0X69)
+#define BNO055_MAG_RADIUS_MSB_ADDR (0X6A)
+/* PAGE0 REGISTERS DEFINITION END*/
+
+/* PAGE1 REGISTERS DEFINITION START*/
+/* Configuration registers*/
+#define BNO055_ACCEL_CONFIG_ADDR (0X08)
+#define BNO055_MAG_CONFIG_ADDR (0X09)
+#define BNO055_GYRO_CONFIG_ADDR (0X0A)
+#define BNO055_GYRO_MODE_CONFIG_ADDR (0X0B)
+#define BNO055_ACCEL_SLEEP_CONFIG_ADDR (0X0C)
+#define BNO055_GYRO_SLEEP_CONFIG_ADDR (0X0D)
+#define BNO055_MAG_SLEEP_CONFIG_ADDR (0x0E)
+
+/* Interrupt registers*/
+#define BNO055_INT_MASK_ADDR (0X0F)
+#define BNO055_INT_ADDR (0X10)
+#define BNO055_ACCEL_ANY_MOTION_THRES_ADDR (0X11)
+#define BNO055_ACCEL_INTR_SETTINGS_ADDR (0X12)
+#define BNO055_ACCEL_HIGH_G_DURN_ADDR (0X13)
+#define BNO055_ACCEL_HIGH_G_THRES_ADDR (0X14)
+#define BNO055_ACCEL_NO_MOTION_THRES_ADDR (0X15)
+#define BNO055_ACCEL_NO_MOTION_SET_ADDR (0X16)
+#define BNO055_GYRO_INTR_SETING_ADDR (0X17)
+#define BNO055_GYRO_HIGHRATE_X_SET_ADDR (0X18)
+#define BNO055_GYRO_DURN_X_ADDR (0X19)
+#define BNO055_GYRO_HIGHRATE_Y_SET_ADDR (0X1A)
+#define BNO055_GYRO_DURN_Y_ADDR (0X1B)
+#define BNO055_GYRO_HIGHRATE_Z_SET_ADDR (0X1C)
+#define BNO055_GYRO_DURN_Z_ADDR (0X1D)
+#define BNO055_GYRO_ANY_MOTION_THRES_ADDR (0X1E)
+#define BNO055_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_INIT_VALUE ((u8)0)
+#define BNO055_GEN_READ_WRITE_LENGTH ((u8)1)
+#define BNO055_LSB_MSB_READ_LENGTH ((u8)2)
+#define BNO055_MAG_POWER_MODE_RANGE ((u8)4)
+#define BNO055_MAG_OPR_MODE_RANGE ((u8)5)
+#define BNO055_ACCEL_POWER_MODE_RANGE ((u8)6)
+#define BNO055_ACCEL_SLEEP_DURATION_RANGE ((u8)16)
+#define BNO055_GYRO_AUTO_SLEEP_DURATION_RANGE ((u8)8)
+#define BNO055_ACCEL_GYRO_BW_RANGE ((u8)8)
+#define BNO055_MAG_OUTPUT_RANGE ((u8)8)
+#define BNO055_ACCEL_RANGE ((u8)5)
+#define BNO055_SHIFT_EIGHT_BITS ((u8)8)
+#define BNO055_GYRO_RANGE ((u8)5)
+#define BNO055_ACCEL_SLEEP_MODE_RANGE ((u8)2)
+/* BNO055 API BNO055_ERROR codes */
+#define BNO055_E_NULL_PTR ((s8)-127)
+#define BNO055_OUT_OF_RANGE ((s8)-2)
+#define BNO055_SUCCESS ((u8)0)
+#define BNO055_ERROR ((s8)-1)
+
+/* Selection for bit enable and disable */
+#define BNO055_BIT_ENABLE (0x01)
+#define BNO055_BIT_DISABLE (0x00)
+
+/* Page ID */
+#define BNO055_PAGE_ZERO (0X00)
+#define BNO055_PAGE_ONE (0X01)
+
+/* Enable the temperature source */
+#define BNO055_ACCEL_TEMP_EN (0x00)
+#define BNO055_GYRO_TEMP_EN (0x01)
+#define BNO055_MCU_TEMP_EN (0x03)
+
+/*Accel unit*/
+#define BNO055_ACCEL_UNIT_MSQ (0x00)
+#define BNO055_ACCEL_UNIT_MG (0x01)
+
+/*Gyro unit*/
+#define BNO055_GYRO_UNIT_DPS (0x00)
+#define BNO055_GYRO_UNIT_RPS (0x01)
+
+/* Euler unit*/
+#define BNO055_EULER_UNIT_DEG (0x00)
+#define BNO055_EULER_UNIT_RAD (0x01)
+
+/*Temperature unit*/
+#define BNO055_TEMP_UNIT_CELSIUS (0x00)
+#define BNO055_TEMP_UNIT_FAHRENHEIT (0x01)
+
+/*Accel division factor*/
+#define BNO055_ACCEL_DIV_MSQ (100.0)
+#define BNO055_ACCEL_DIV_MG (1)
+
+/*Mag division factor*/
+#define BNO055_MAG_DIV_UT (16.0)
+
+/*Gyro division factor*/
+#define BNO055_GYRO_DIV_DPS (16.0)
+#define BNO055_GYRO_DIV_RPS (900.0)
+
+/*Euler division factor*/
+#define BNO055_EULER_DIV_DEG (16.0)
+#define BNO055_EULER_DIV_RAD (900.0)
+
+/*Linear accel division factor*/
+#define BNO055_LINEAR_ACCEL_DIV_MSQ (100.0)
+
+/*Gravity accel division factor*/
+#define BNO055_GRAVITY_DIV_MSQ (100.0)
+
+/* Temperature division factor*/
+#define BNO055_TEMP_DIV_FAHRENHEIT (0.5)
+#define BNO055_TEMP_DIV_CELSIUS (1)
+
+#define BNO055_MODE_SWITCHING_DELAY (600)
+#define BNO055_CONFIG_MODE_SWITCHING_DELAY ((u8)20)
+
+
+
+/* Operation mode settings*/
+#define BNO055_OPERATION_MODE_CONFIG (0X00)
+#define BNO055_OPERATION_MODE_ACCONLY (0X01)
+#define BNO055_OPERATION_MODE_MAGONLY (0X02)
+#define BNO055_OPERATION_MODE_GYRONLY (0X03)
+#define BNO055_OPERATION_MODE_ACCMAG (0X04)
+#define BNO055_OPERATION_MODE_ACCGYRO (0X05)
+#define BNO055_OPERATION_MODE_MAGGYRO (0X06)
+#define BNO055_OPERATION_MODE_AMG (0X07)
+#define BNO055_OPERATION_MODE_IMUPLUS (0X08)
+#define BNO055_OPERATION_MODE_COMPASS (0X09)
+#define BNO055_OPERATION_MODE_M4G (0X0A)
+#define BNO055_OPERATION_MODE_NDOF_FMC_OFF (0X0B)
+#define BNO055_OPERATION_MODE_NDOF (0X0C)
+
+/* Power mode*/
+#define BNO055_POWER_MODE_NORMAL (0X00)
+#define BNO055_POWER_MODE_LOWPOWER (0X01)
+#define BNO055_POWER_MODE_SUSPEND (0X02)
+
+/* PAGE-1 definitions*/
+/* Accel Range */
+
+#define BNO055_ACCEL_RANGE_2G (0X00)
+#define BNO055_ACCEL_RANGE_4G (0X01)
+#define BNO055_ACCEL_RANGE_8G (0X02)
+#define BNO055_ACCEL_RANGE_16G (0X03)
+
+/* Accel Bandwidth*/
+#define BNO055_ACCEL_BW_7_81HZ (0x00)
+#define BNO055_ACCEL_BW_15_63HZ (0x01)
+#define BNO055_ACCEL_BW_31_25HZ (0x02)
+#define BNO055_ACCEL_BW_62_5HZ (0X03)
+#define BNO055_ACCEL_BW_125HZ (0X04)
+#define BNO055_ACCEL_BW_250HZ (0X05)
+#define BNO055_ACCEL_BW_500HZ (0X06)
+#define BNO055_ACCEL_BW_1000HZ (0X07)
+
+/* Accel Power mode*/
+#define BNO055_ACCEL_NORMAL (0X00)
+#define BNO055_ACCEL_SUSPEND (0X01)
+#define BNO055_ACCEL_LOWPOWER_1 (0X02)
+#define BNO055_ACCEL_STANDBY (0X03)
+#define BNO055_ACCEL_LOWPOWER_2 (0X04)
+#define BNO055_ACCEL_DEEPSUSPEND (0X05)
+
+/* Mag data output rate*/
+#define BNO055_MAG_DATA_OUTRATE_2HZ (0X00)
+#define BNO055_MAG_DATA_OUTRATE_6HZ (0X01)
+#define BNO055_MAG_DATA_OUTRATE_8HZ (0X02)
+#define BNO055_MAG_DATA_OUTRATE_10HZ (0X03)
+#define BNO055_MAG_DATA_OUTRATE_15HZ (0X04)
+#define BNO055_MAG_DATA_OUTRATE_20HZ (0X05)
+#define BNO055_MAG_DATA_OUTRATE_25HZ (0X06)
+#define BNO055_MAG_DATA_OUTRATE_30HZ (0X07)
+
+/* Mag Operation mode*/
+#define BNO055_MAG_OPERATION_MODE_LOWPOWER (0X00)
+#define BNO055_MAG_OPERATION_MODE_REGULAR (0X01)
+#define BNO055_MAG_OPERATION_MODE_ENHANCED_REGULAR (0X02)
+#define BNO055_MAG_OPERATION_MODE_HIGH_ACCURACY (0X03)
+
+/* Mag power mode*/
+#define BNO055_MAG_POWER_MODE_NORMAL (0X00)
+#define BNO055_MAG_POWER_MODE_SLEEP (0X01)
+#define BNO055_MAG_POWER_MODE_SUSPEND (0X02)
+#define BNO055_MAG_POWER_MODE_FORCE_MODE (0X03)
+
+/* Gyro range*/
+#define BNO055_GYRO_RANGE_2000DPS (0x00)
+#define BNO055_GYRO_RANGE_1000DPS (0x01)
+#define BNO055_GYRO_RANGE_500DPS (0x02)
+#define BNO055_GYRO_RANGE_250DPS (0x03)
+#define BNO055_GYRO_RANGE_125DPS (0x04)
+
+/* Gyro Bandwidth*/
+#define BNO055_GYRO_BW_523HZ (0x00)
+#define BNO055_GYRO_BW_230HZ (0x01)
+#define BNO055_GYRO_BW_116HZ (0x02)
+#define BNO055_GYRO_BW_47HZ (0x03)
+#define BNO055_GYRO_BW_23HZ (0x04)
+#define BNO055_GYRO_BW_12HZ (0x05)
+#define BNO055_GYRO_BW_64HZ (0x06)
+#define BNO055_GYRO_BW_32HZ (0x07)
+
+/* Gyro power mode*/
+#define BNO055_GYRO_POWER_MODE_NORMAL (0X00)
+#define BNO055_GYRO_POWER_MODE_FASTPOWERUP (0X01)
+#define BNO055_GYRO_POWER_MODE_DEEPSUSPEND (0X02)
+#define BNO055_GYRO_POWER_MODE_SUSPEND (0X03)
+#define BNO055_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 BNO055_REMAP_X_Y (0X21)
+#define BNO055_REMAP_Y_Z (0X18)
+#define BNO055_REMAP_Z_X (0X06)
+#define BNO055_REMAP_X_Y_Z_TYPE0 (0X12)
+#define BNO055_REMAP_X_Y_Z_TYPE1 (0X09)
+#define BNO055_DEFAULT_AXIS (0X24)
+
+/* Axis remap sign */
+#define BNO055_REMAP_AXIS_POSITIVE (0X00)
+#define BNO055_REMAP_AXIS_NEGATIVE (0X01)
+
+/* Gyro anymotion and high rate filter configuration */
+#define BNO055_GYRO_FILTERED_CONFIG (0x00)
+#define BNO055_GYRO_UNFILTERED_CONFIG (0x01)
+
+/* mask definitions*/
+#define BNO055_SIC_HEX_0_0_F_F_DATA (0x00FF)
+/****************************************************/
+/**\name ARRAY SIZE DEFINITIONS */
+/***************************************************/
+#define BNO055_REV_ID_SIZE (2)
+#define BNO055_ACCEL_DATA_SIZE (2)
+#define BNO055_ACCEL_XYZ_DATA_SIZE (6)
+#define BNO055_MAG_DATA_SIZE (2)
+#define BNO055_MAG_XYZ_DATA_SIZE (6)
+#define BNO055_GYRO_DATA_SIZE (2)
+#define BNO055_GYRO_XYZ_DATA_SIZE (6)
+#define BNO055_EULER_DATA_SIZE (2)
+#define BNO055_EULER_HRP_DATA_SIZE (6)
+#define BNO055_QUATERNION_DATA_SIZE (2)
+#define BNO055_QUATERNION_WXYZ_DATA_SIZE (8)
+#define BNO055_GRAVITY_DATA_SIZE (2)
+#define BNO055_GRAVITY_XYZ_DATA_SIZE (6)
+#define BNO055_ACCEL_OFFSET_ARRAY (6)
+#define BNO055_MAG_OFFSET_ARRAY (6)
+#define BNO055_GYRO_OFFSET_ARRAY (6)
+#define BNO055_SOFT_IRON_CALIBRATION_MATRIX_SIZE (18)
+
+
+/*ARRAY INDEX DEFINITIONS*/
+#define BNO055_SW_ID_LSB (0)
+#define BNO055_SW_ID_MSB (1)
+#define BNO055_SENSOR_DATA_LSB (0)
+#define BNO055_SENSOR_DATA_MSB (1)
+#define BNO055_SENSOR_DATA_EULER_LSB (0)
+#define BNO055_SENSOR_DATA_EULER_MSB (1)
+#define BNO055_SENSOR_DATA_QUATERNION_LSB (0)
+#define BNO055_SENSOR_DATA_QUATERNION_MSB (1)
+
+#define BNO055_SENSOR_DATA_QUATERNION_WXYZ_W_LSB (0)
+#define BNO055_SENSOR_DATA_QUATERNION_WXYZ_W_MSB (1)
+#define BNO055_SENSOR_DATA_QUATERNION_WXYZ_X_LSB (2)
+#define BNO055_SENSOR_DATA_QUATERNION_WXYZ_X_MSB (3)
+#define BNO055_SENSOR_DATA_QUATERNION_WXYZ_Y_LSB (4)
+#define BNO055_SENSOR_DATA_QUATERNION_WXYZ_Y_MSB (5)
+#define BNO055_SENSOR_DATA_QUATERNION_WXYZ_Z_LSB (6)
+#define BNO055_SENSOR_DATA_QUATERNION_WXYZ_Z_MSB (7)
+
+#define BNO055_SENSOR_DATA_XYZ_X_LSB (0)
+#define BNO055_SENSOR_DATA_XYZ_X_MSB (1)
+#define BNO055_SENSOR_DATA_XYZ_Y_LSB (2)
+#define BNO055_SENSOR_DATA_XYZ_Y_MSB (3)
+#define BNO055_SENSOR_DATA_XYZ_Z_LSB (4)
+#define BNO055_SENSOR_DATA_XYZ_Z_MSB (5)
+
+
+#define BNO055_SENSOR_DATA_EULER_HRP_H_LSB (0)
+#define BNO055_SENSOR_DATA_EULER_HRP_H_MSB (1)
+#define BNO055_SENSOR_DATA_EULER_HRP_R_LSB (2)
+#define BNO055_SENSOR_DATA_EULER_HRP_R_MSB (3)
+#define BNO055_SENSOR_DATA_EULER_HRP_P_LSB (4)
+#define BNO055_SENSOR_DATA_EULER_HRP_P_MSB (5)
+
+#define BNO055_SOFT_IRON_CALIB_0_LSB (0)
+#define BNO055_SOFT_IRON_CALIB_0_MSB (1)
+#define BNO055_SOFT_IRON_CALIB_1_LSB (2)
+#define BNO055_SOFT_IRON_CALIB_1_MSB (3)
+#define BNO055_SOFT_IRON_CALIB_2_LSB (4)
+#define BNO055_SOFT_IRON_CALIB_2_MSB (5)
+#define BNO055_SOFT_IRON_CALIB_3_LSB (6)
+#define BNO055_SOFT_IRON_CALIB_3_MSB (7)
+#define BNO055_SOFT_IRON_CALIB_4_LSB (8)
+#define BNO055_SOFT_IRON_CALIB_4_MSB (9)
+#define BNO055_SOFT_IRON_CALIB_5_LSB (10)
+#define BNO055_SOFT_IRON_CALIB_5_MSB (11)
+#define BNO055_SOFT_IRON_CALIB_6_LSB (12)
+#define BNO055_SOFT_IRON_CALIB_6_MSB (13)
+#define BNO055_SOFT_IRON_CALIB_7_LSB (14)
+#define BNO055_SOFT_IRON_CALIB_7_MSB (15)
+#define BNO055_SOFT_IRON_CALIB_8_LSB (16)
+#define BNO055_SOFT_IRON_CALIB_8_MSB (17)
+
+#define BNO055_SENSOR_OFFSET_DATA_X_LSB (0)
+#define BNO055_SENSOR_OFFSET_DATA_X_MSB (1)
+#define BNO055_SENSOR_OFFSET_DATA_Y_LSB (2)
+#define BNO055_SENSOR_OFFSET_DATA_Y_MSB (3)
+#define BNO055_SENSOR_OFFSET_DATA_Z_LSB (4)
+#define BNO055_SENSOR_OFFSET_DATA_Z_MSB (5)
+
+#define BNO055_OFFSET_RADIUS_LSB (0)
+#define BNO055_OFFSET_RADIUS_MSB (1)
+/*********************************************************/
+/**\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 \
+BNO055_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
+
+/*All_Calib status register*/
+#define BNO055_ALL_CALIB_STAT_POS (0)
+#define BNO055_ALL_CALIB_STAT_MSK (0XFF)
+#define BNO055_ALL_CALIB_STAT_LEN (8)
+#define BNO055_ALL_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 \
+BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 BNO055_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 (BNO055_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 \
+BNO055_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 BNO055_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 BNO055_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 API 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 addr_u8 : Address of the register
+ * @param data_u8 : Data to be written to the register
+ * @param len_u8 : Length of the Data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+*/
+BNO055_RETURN_FUNCTION_TYPE bno055_write_register(u8 addr_u8,
+u8 *data_u8, u8 len_u8);
+/*!
+ * @brief This API reads the data from
+ * the given register address
+ *
+ * @param addr_u8 : Address of the register
+ * @param data_u8 : address of the variable,
+ * read value will be kept
+ * @param len_u8 : Length of the data
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_register(u8 addr_u8,
+u8 *data_u8, u8 len_u8);
+/*!
+ * @brief This API reads chip id
+ * from register 0x00 it is a byte of data
+ *
+ *
+ * @param chip_id_u8 : The chip id value 0xA0
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_chip_id(u8 *chip_id_u8);
+/*!
+ * @brief This API reads software revision id
+ * from register 0x04 and 0x05 it is a two byte of data
+ *
+ * @param sw_id_u8 : The SW revision id
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_sw_rev_id(u16 *sw_id_u8);
+/*!
+ * @brief This API reads page id
+ * from register 0x07 it is a byte of data
+ *
+ *
+ * @param page_id_u8 : The value of page id
+ *
+ * BNO055_PAGE_ZERO -> 0x00
+ * BNO055_PAGE_ONE -> 0x01
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_page_id(u8 *page_id_u8);
+/*!
+ * @brief This API used to write
+ * the page id register 0x07
+ *
+ * @param page_id_u8 : The value of page id
+ *
+ * BNO055_PAGE_ZERO -> 0x00
+ * BNO055_PAGE_ONE -> 0x01
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_write_page_id(u8 page_id_u8);
+/*!
+ * @brief This API reads accel revision id
+ * from register 0x01 it is a byte of value
+ *
+ * @param accel_rev_id_u8 : The accel revision id 0xFB
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_rev_id(
+u8 *accel_rev_id_u8);
+/*!
+ * @brief This API reads mag revision id
+ * from register 0x02 it is a byte of value
+ *
+ * @param mag_rev_id_u8 : The mag revision id 0x32
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_rev_id(
+u8 *mag_rev_id_u8);
+/*!
+ * @brief This API reads gyro revision id
+ * from register 0x03 it is a byte of value
+ *
+ * @param gyro_rev_id_u8 : The gyro revision id 0xF0
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_rev_id(
+u8 *gyro_rev_id_u8);
+/*!
+ * @brief This API used to read boot loader revision id
+ * from register 0x06 it is a byte of value
+ *
+ * @param bl_rev_id_u8 : The boot loader revision id
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_bl_rev_id(
+u8 *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 accel_x_s16 : The X raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_x(s16 *accel_x_s16);
+/*!
+ * @brief This API reads acceleration data Y values
+ * from register 0x0A and 0x0B it is a two byte data
+ *
+ *
+ *
+ *
+ * @param accel_y_s16 : The Y raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_y(s16 *accel_y_s16);
+/*!
+ * @brief This API reads acceleration data z values
+ * from register 0x0C and 0x0D it is a two byte data
+ *
+ *
+ *
+ *
+ * @param accel_z_s16 : The z raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_accel_z(s16 *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 mag_x_s16 : The x raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_x(s16 *mag_x_s16);
+/*!
+ * @brief This API reads mag data y values
+ * from register 0x10 and 0x11 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param mag_y_s16 : The y raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_y(s16 *mag_y_s16);
+/*!
+ * @brief This API reads mag data z values
+ * from register 0x12 and 0x13 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param mag_z_s16 : The z raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_mag_z(s16 *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 gyro_x_s16 : The x raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_x(s16 *gyro_x_s16);
+/*!
+ * @brief This API reads gyro data y values
+ * from register 0x16 and 0x17 it is a two byte data
+ *
+ *
+ *
+ *
+ * @param gyro_y_s16 : The y raw data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_y(s16 *gyro_y_s16);
+/*!
+ * @brief This API reads gyro data z values
+ * from register 0x18 and 0x19 it is a two byte data
+ *
+ * @param gyro_z_s16 : The z raw data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gyro_z(s16 *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 euler_h_s16 : The raw h data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_h(s16 *euler_h_s16);
+/*!
+ * @brief This API reads Euler data r values
+ * from register 0x1C and 0x1D it is a two byte data
+ *
+ * @param euler_r_s16 : The raw r data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_r(s16 *euler_r_s16);
+/*!
+ * @brief This API reads Euler data p values
+ * from register 0x1E and 0x1F it is a two byte data
+ *
+ * @param euler_p_s16 : The raw p data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_euler_p(s16 *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 quaternion_w_s16 : The raw w data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_w(
+s16 *quaternion_w_s16);
+/*!
+ * @brief This API reads quaternion data x values
+ * from register 0x22 and 0x23 it is a two byte data
+ *
+ * @param quaternion_x_s16 : The raw x data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_x(
+s16 *quaternion_x_s16);
+/*!
+ * @brief This API reads quaternion data y values
+ * from register 0x24 and 0x25 it is a two byte data
+ *
+ * @param quaternion_y_s16 : The raw y data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_y(
+s16 *quaternion_y_s16);
+/*!
+ * @brief This API reads quaternion data z values
+ * from register 0x26 and 0x27 it is a two byte data
+ *
+ * @param quaternion_z_s16 : The raw z data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_quaternion_z(
+s16 *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 linear_accel_x_s16 : The raw x data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_x(
+s16 *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 linear_accel_y_s16 : The raw y data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_y(
+s16 *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 linear_accel_z_s16 : The raw z data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_linear_accel_z(
+s16 *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 gravity_x_s16 : The raw x data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_x(
+s16 *gravity_x_s16);
+/*!
+ * @brief This API reads gravity data y values
+ * from register 0x30 and 0x31 it is a two byte data
+ *
+ * @param gravity_y_s16 : The raw y data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_y(
+s16 *gravity_y_s16);
+/*!
+ * @brief This API reads gravity data z values
+ * from register 0x32 and 0x33 it is a two byte data
+ *
+ * @param gravity_z_s16 : The raw z data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_gravity_z(
+s16 *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 temp_s8 : The raw temperature data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_read_temp_data(s8 *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 accel_x_f : The accel x meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_x_msq(
+float *accel_x_f);
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to meterpersecseq output as float
+ *
+ * @param accel_y_f : The accel y meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_y_msq(
+float *accel_y_f);
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to meterpersecseq output as float
+ *
+ * @param accel_z_f : The accel z meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_z_msq(
+float *accel_z_f);
+/*!
+ * @brief This API is used to convert the accel y raw data
+ * to millig output as float
+ *
+ * @param accel_x_f : The accel y millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_x_mg(
+float *accel_x_f);
+/*!
+ * @brief This API is used to convert the accel y raw data
+ * to millig output as float
+ *
+ * @param accel_y_f : The accel y millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_y_mg(
+float *accel_y_f);
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to millig output as float
+ *
+ * @param accel_z_f : The accel z millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_accel_z_mg(
+float *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 mag_x_f : The mag x microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_x_uT(
+float *mag_x_f);
+/*!
+ * @brief This API is used to convert the mag y raw data
+ * to microTesla output as float
+ *
+ * @param mag_y_f : The mag y microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_y_uT(
+float *mag_y_f);
+/*!
+ * @brief This API is used to convert the mag z raw data
+ * to microTesla output as float
+ *
+ * @param mag_z_f : The mag z microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_mag_z_uT(
+float *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 gyro_x_f : The gyro x dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_x_dps(
+float *gyro_x_f);
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to rps output as float
+ *
+ * @param gyro_x_f : The gyro x dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_x_rps(
+float *gyro_x_f);
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to dps output as float
+ *
+ * @param gyro_y_f : The gyro y dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_y_dps(
+float *gyro_y_f);
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to rps output as float
+ *
+ * @param gyro_y_f : The gyro y dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_y_rps(
+float *gyro_y_f);
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to dps output as float
+ *
+ * @param gyro_z_f : The gyro z dps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_z_dps(
+float *gyro_z_f);
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to rps output as float
+ *
+ * @param gyro_z_f : The gyro z rps float data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_gyro_z_rps(
+float *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 euler_h_f : The float value of Euler h degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_h_deg(
+float *euler_h_f);
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to radians output as float
+ *
+ * @param euler_h_f : The float value of Euler h radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_h_rad(
+float *euler_h_f);
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to degree output as float
+ *
+ * @param euler_r_f : The float value of Euler r degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_r_deg(
+float *euler_r_f);
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to radians output as float
+ *
+ * @param euler_r_f : The float value of Euler r radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_r_rad(
+float *euler_r_f);
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to degree output as float
+ *
+ * @param euler_p_f : The float value of Euler p degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_p_deg(
+float *euler_p_f);
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to radians output as float
+ *
+ * @param euler_p_f : The float value of Euler p radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_euler_p_rad(
+float *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 linear_accel_x_f : The float value of linear accel x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_x_msq(
+float *linear_accel_x_f);
+/*!
+ * @brief This API is used to convert the linear
+ * accel y raw data to meterpersecseq output as float
+ *
+ * @param linear_accel_y_f : The float value of linear accel y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_y_msq(
+float *linear_accel_y_f);
+/*!
+ * @brief This API is used to convert the linear
+ * accel z raw data to meterpersecseq output as float
+ *
+ * @param linear_accel_z_f : The float value of linear accel z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_linear_accel_z_msq(
+float *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 gravity_x_f : The float value of gravity x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_float_x_msq(
+float *gravity_x_f);
+/*!
+ * @brief This API is used to convert the gravity
+ * y raw data to meterpersecseq output as float
+ *
+ * @param gravity_y_f : The float value of gravity y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_float_y_msq(
+float *gravity_y_f);
+/*!
+ * @brief This API is used to convert the gravity
+ * z raw data to meterpersecseq output as float
+ *
+ * @param gravity_z_f : The float value of gravity z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_float_z_msq(
+float *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 temp_f : The float value of temperature Fahrenheit
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_temp_fahrenheit(
+float *temp_f);
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Celsius output as float
+ *
+ * @param temp_f : The float value of temperature Celsius
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_float_temp_celsius(
+float *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 accel_x_d : The accel x meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_x_msq(
+double *accel_x_d);
+/*!
+ * @brief This API is used to convert the accel y raw data
+ * to meterpersecseq output as double
+ *
+ * @param accel_y_d : The accel y meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_y_msq(
+double *accel_y_d);
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to meterpersecseq output as double
+ *
+ * @param accel_z_d : The accel z meterpersecseq data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_z_msq(
+double *accel_z_d);
+/*!
+ * @brief This API is used to convert the accel x raw data
+ * to millig output as double
+ *
+ * @param accel_x_d : The accel x millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_x_mg(
+double *accel_x_d);
+/*!
+ * @brief This API is used to convert the accel y raw data
+ * to millig output as double
+ *
+ * @param accel_y_d : The accel y millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_y_mg(
+double *accel_y_d);
+/*!
+ * @brief This API is used to convert the accel z raw data
+ * to millig output as double
+ *
+ * @param accel_z_d : The accel z millig data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_accel_z_mg(
+double *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 mag_x_d : The mag x microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_x_uT(
+double *mag_x_d);
+/*!
+ * @brief This API is used to convert the mag x raw data
+ * to microTesla output as double
+ *
+ * @param mag_y_d : The mag x microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_y_uT(
+double *mag_y_d);
+/*!
+ * @brief This API is used to convert the mag z raw data
+ * to microTesla output as double
+ *
+ * @param mag_z_d : The mag z microTesla data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_mag_z_uT(
+double *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 gyro_x_d : The gyro x dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_x_dps(
+double *gyro_x_d);
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to dps output as double
+ *
+ * @param gyro_y_d : The gyro y dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_y_dps(
+double *gyro_y_d);
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to dps output as double
+ *
+ * @param gyro_z_d : The gyro z dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_z_dps(
+double *gyro_z_d);
+/*!
+ * @brief This API is used to convert the gyro x raw data
+ * to rps output as double
+ *
+ * @param gyro_x_d : The gyro x dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_x_rps(
+double *gyro_x_d);
+/*!
+ * @brief This API is used to convert the gyro y raw data
+ * to rps output as double
+ *
+ * @param gyro_y_d : The gyro y dps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_y_rps(
+double *gyro_y_d);
+/*!
+ * @brief This API is used to convert the gyro z raw data
+ * to rps output as double
+ *
+ * @param gyro_z_d : The gyro z rps double data
+ *
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_gyro_z_rps(
+double *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 euler_h_d : The double value of Euler h degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_h_deg(
+double *euler_h_d);
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to degree output as double
+ *
+ * @param euler_p_d : The double value of Euler p degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_p_deg(
+double *euler_p_d);
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to degree output as double
+ *
+ * @param euler_r_d : The double value of Euler r degree
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_r_deg(
+double *euler_r_d);
+/*!
+ * @brief This API is used to convert the Euler h raw data
+ * to radians output as double
+ *
+ * @param euler_h_d : The double value of Euler h radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_h_rad(
+double *euler_h_d);
+/*!
+ * @brief This API is used to convert the Euler p raw data
+ * to radians output as double
+ *
+ * @param euler_p_d : The double value of Euler p radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_p_rad(
+double *euler_p_d);
+/*!
+ * @brief This API is used to convert the Euler r raw data
+ * to radians output as double
+ *
+ * @param euler_r_d : The double value of Euler r radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_euler_r_rad(
+double *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 linear_accel_x_d : The double value of
+ * linear accel x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_x_msq(
+double *linear_accel_x_d);
+/*!
+ * @brief This API is used to convert the linear
+ * accel y raw data to meterpersecseq output as double
+ *
+ * @param linear_accel_y_d : The double value of
+ * linear accel y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_y_msq(
+double *linear_accel_y_d);
+/*!
+ * @brief This API is used to convert the linear
+ * accel z raw data to meterpersecseq output as double
+ *
+ * @param linear_accel_z_d : The double value of
+ * linear accel z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_linear_accel_z_msq(
+double *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 gravity_x_d : The double value of gravity x meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_double_x_msq(
+double *gravity_x_d);
+/*!
+ * @brief This API is used to convert the gravity
+ * y raw data to meterpersecseq output as double
+ *
+ * @param gravity_y_d : The double value of gravity y meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_double_y_msq(
+double *gravity_y_d);
+/*!
+ * @brief This API is used to convert the gravity
+ * z raw data to meterpersecseq output as double
+ *
+ * @param gravity_z_d : The double value of gravity z meterpersecseq
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_gravity_double_z_msq(
+double *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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 temp_d : The double value of temperature Fahrenheit
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_temp_fahrenheit(
+double *temp_d);
+/*!
+ * @brief This API is used to convert the temperature
+ * data to Celsius output as double
+ *
+ * @param temp_d : The double value of temperature Celsius
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_convert_double_temp_celsius(
+double *temp_d);
+#endif
+/**************************************************************************/
+/**\name FUNCTIONS FOR READING ACCEL,MAG,GYRO AND SYSTEM CALIBRATION STATUS*/
+/*************************************************************************/
+/*!
+ * @brief This API used to read
+ * mag calibration status from register from 0x35 bit 0 and 1
+ *
+ * @param mag_calib_u8 : The value of mag calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_calib_stat(
+u8 *mag_calib_u8);
+/*!
+ * @brief This API used to read
+ * accel calibration status from register from 0x35 bit 2 and 3
+ *
+ * @param accel_calib_u8 : The value of accel calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_calib_stat(
+u8 *accel_calib_u8);
+/*!
+ * @brief This API used to read
+ * gyro calibration status from register from 0x35 bit 4 and 5
+ *
+ * @param gyro_calib_u8 : The value of gyro calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_calib_stat(
+u8 *gyro_calib_u8);
+/*!
+ * @brief This API used to read
+ * system calibration status from register from 0x35 bit 6 and 7
+ *
+ * @param sys_calib_u8 : The value of system calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_calib_stat(
+u8 *sys_calib_u8);
+/*!
+ * @brief This API used to read
+ * all calibration status from register from 0x35
+ *
+ * @param all_calib_u8 : The value of all calib status
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_all_calib_stat(
+u8 *all_calib_u8);
+/******************************************************************/
+/**\name FUNCTIONS FOR READING ACCEL,MAG,GYRO AND SYSTEM SELF TEST */
+/******************************************************************/
+/*!
+ * @brief This API used to read
+ * self test of accel from register from 0x36 bit 0
+ *
+ * @param selftest_accel_u8 : The value of self test of accel
+ *
+ * selftest_accel_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_accel(
+u8 *selftest_accel_u8);
+/*!
+ * @brief This API used to read
+ * self test of mag from register from 0x36 bit 1
+ *
+ * @param selftest_mag_u8 : The value of self test of mag
+ *
+ * selftest_mag_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_mag(
+u8 *selftest_mag_u8);
+/*!
+ * @brief This API used to read
+ * self test of gyro from register from 0x36 bit 2
+ *
+ * @param selftest_gyro_u8 : The value of self test of gyro
+ *
+ * selftest_gyro_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_gyro(
+u8 *selftest_gyro_u8);
+/*!
+ * @brief This API used to read
+ * self test of micro controller from register from 0x36 bit 3
+ *
+ * @param selftest_mcu_u8 : The value of self test of micro controller
+ *
+ * selftest_mcu_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates test failed
+ * 0x01 | indicated test passed
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest_mcu(
+u8 *selftest_mcu_u8);
+/*****************************************************/
+/**\name FUNCTIONS FOR READING GYRO INTERRUPT STATUS */
+/*****************************************************/
+/*!
+ * @brief This API used to read the stat_s8 of
+ * gyro anymotion interrupt from register from 0x37 bit 2
+ *
+ * @param gyro_any_motion_u8 : The value of gyro anymotion interrupt
+ *
+ * gyro_any_motion_u8 | result
+ * -------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro anymotion interrupt can be BNO055_BIT_ENABLE
+ * 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 *gyro_any_motion_u8);
+/*!
+ * @brief This API used to read the stat_s8 of
+ * gyro highrate interrupt from register from 0x37 bit 3
+ *
+ * @param gyro_highrate_u8 : The value of gyro highrate interrupt
+ *
+ * gyro_highrate_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *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 accel_high_g_u8 : The value of accel highg interrupt
+ *
+ * accel_high_g_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *accel_high_g_u8);
+/*!
+ * @brief This API used to read the stat_s8 of
+ * accel anymotion interrupt from register from 0x37 bit 6
+ *
+ * @param accel_any_motion_u8 : The value of accel anymotion interrupt
+ *
+ * accel_any_motion_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *accel_any_motion_u8);
+/*!
+ * @brief This API used to read the stat_s8 of
+ * accel nomotion/slowmotion interrupt from register from 0x37 bit 6
+ *
+ * @param accel_no_motion_u8 :
+ * The value of accel nomotion/slowmotion interrupt
+ *
+ * accel_no_motion_u8 | result
+ * ------------------- | ---------------------
+ * 0x00 | indicates no interrupt triggered
+ * 0x01 | indicates interrupt triggered
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *accel_no_motion_u8);
+/**************************************************************************/
+/**\name FUNCTIONS FOR READING SYSTEM CLOCK, STATUS AND BNO055_ERROR CODE */
+/*************************************************************************/
+/*!
+ * @brief This API is used to read status of main clock
+ * from the register 0x38 bit 0
+ *
+ * @param stat_main_clk_u8 : the status of main clock
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_stat_main_clk(
+u8 *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 sys_stat_u8 : the status of system
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_stat_code(
+u8 *sys_stat_u8);
+/*!
+ * @brief This API is used to read system BNO055_ERROR
+ * code from the register 0x3A it is a byte of data
+ *
+ * @param sys_error_u8 : The value of system BNO055_ERROR code
+ *
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_error_code(
+u8 *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 accel_unit_u8 : The value of accel unit
+ *
+ * accel_unit_u8 | result
+ * ------------- | ---------------
+ * 0x00 | BNO055_ACCEL_UNIT_MSQ
+ * 0x01 | BNO055_ACCEL_UNIT_MG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_unit(
+u8 *accel_unit_u8);
+/*!
+ * @brief This API used to write the accel unit
+ * from register from 0x3B bit 0
+ *
+ * @param accel_unit_u8 : The value of accel unit
+ *
+ * accel_unit_u8 | result
+ * ------------- | ---------------
+ * 0x00 | BNO055_ACCEL_UNIT_MSQ
+ * 0x01 | BNO055_ACCEL_UNIT_MG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_unit(
+u8 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 gyro_unit_u8 : The value of accel unit
+ *
+ * gyro_unit_u8 | result
+ * ------------- | -----------
+ * 0x00 | BNO055_GYRO_UNIT_DPS
+ * 0x01 | BNO055_GYRO_UNIT_RPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_unit(
+u8 *gyro_unit_u8);
+/*!
+ * @brief This API used to write the gyro unit
+ * from register from 0x3B bit 1
+ *
+ * @param gyro_unit_u8 : The value of accel unit
+ *
+ * gyro_unit_u8 | result
+ * ------------- | -----------
+ * 0x00 | BNO055_GYRO_UNIT_DPS
+ * 0x01 | BNO055_GYRO_UNIT_RPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_unit(u8 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 euler_unit_u8 : The value of accel unit
+ *
+ * euler_unit_u8 | result
+ * -------------- | -----------
+ * 0x00 | BNO055_EULER_UNIT_DEG
+ * 0x01 | BNO055_EULER_UNIT_RAD
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_euler_unit(
+u8 *euler_unit_u8);
+/*!
+ * @brief This API used to write the Euler unit
+ * from register from 0x3B bit 2
+ *
+ * @param euler_unit_u8 : The value of Euler unit
+ *
+ * euler_unit_u8 | result
+ * -------------- | -----------
+ * 0x00 | BNO055_EULER_UNIT_DEG
+ * 0x01 | BNO055_EULER_UNIT_RAD
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_euler_unit(u8 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 tilt_unit_u8 : The value of tilt unit
+ *
+ * tilt_unit_u8 | result
+ * --------------- | ---------
+ * 0x00 | degrees
+ * 0x01 | radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_tilt_unit(
+u8 *tilt_unit_u8);
+/*!
+ * @brief This API used to write the tilt unit
+ * from register from 0x3B bit 3
+ *
+ * @param tilt_unit_u8 : The value of tilt unit
+ *
+ * tilt_unit_u8 | result
+ * --------------- | ---------
+ * 0x00 | degrees
+ * 0x01 | radians
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ *
+ * \return Communication results
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_tilt_unit(
+u8 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 temp_unit_u8 : The value of temperature unit
+ *
+ * temp_unit_u8 | result
+ * ----------- | --------------
+ * 0x00 | BNO055_TEMP_UNIT_CELSIUS
+ * 0x01 | BNO055_TEMP_UNIT_FAHRENHEIT
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_temp_unit(
+u8 *temp_unit_u8);
+/*!
+ * @brief This API used to write the temperature unit
+ * from register from 0x3B bit 4
+ *
+ * @param temp_unit_u8 : The value of temperature unit
+ *
+ * temp_unit_u8 | result
+ * ----------- | --------------
+ * 0x00 | BNO055_TEMP_UNIT_CELSIUS
+ * 0x01 | BNO055_TEMP_UNIT_FAHRENHEIT
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_temp_unit(
+u8 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 data_output_format_u8 : The value of data output format
+ *
+ * data_output_format_u8 | result
+ * -------------------- | --------
+ * 0x00 | Windows
+ * 0x01 | Android
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_data_output_format(
+u8 *data_output_format_u8);
+/*!
+ * @brief This API used to read the current selected orientation mode
+ * from register from 0x3B bit 7
+ *
+ * @param data_output_format_u8 : The value of data output format
+ *
+ * data_output_format_u8 | result
+ * -------------------- | --------
+ * 0x00 | Windows
+ * 0x01 | Android
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_data_output_format(
+u8 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 operation_mode_u8 : The value of operation mode
+ *
+ * operation_mode_u8 | result | comments
+ * ----------|----------------------------|----------------------------
+ * 0x00 | BNO055_OPERATION_MODE_CONFIG | Configuration mode
+ * 0x01 | BNO055_OPERATION_MODE_ACCONLY | Reads accel data alone
+ * 0x02 | BNO055_OPERATION_MODE_MAGONLY | Reads mag data alone
+ * 0x03 | BNO055_OPERATION_MODE_GYRONLY | Reads gyro data alone
+ * 0x04 | BNO055_OPERATION_MODE_ACCMAG | Reads accel and mag data
+ * 0x05 | BNO055_OPERATION_MODE_ACCGYRO | Reads accel and gyro data
+ * 0x06 | BNO055_OPERATION_MODE_MAGGYRO | Reads accel and mag data
+ * 0x07 | OPERATION_MODE_ANY_MOTION | Reads accel mag and gyro data
+ * 0x08 | BNO055_OPERATION_MODE_IMUPLUS | Inertial measurement unit
+ * - | - | Reads accel,gyro and fusion data
+ * 0x09 | BNO055_OPERATION_MODE_COMPASS | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0A | BNO055_OPERATION_MODE_M4G | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0B | BNO055_OPERATION_MODE_NDOF_FMC_OFF| Nine degrees of freedom with
+ * - | - | fast magnetic calibration
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ * 0x0C | BNO055_OPERATION_MODE_NDOF | Nine degrees of freedom
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *operation_mode_u8);
+/*! @brief This API used to write the operation mode
+ * from register from 0x3D bit 0 to 3
+ *
+ * @param operation_mode_u8 : The value of operation mode
+ *
+ * operation_mode_u8 | result | comments
+ * ---------|-----------------------------------|--------------------------
+ * 0x00 | BNO055_OPERATION_MODE_CONFIG | Configuration mode
+ * 0x01 | BNO055_OPERATION_MODE_ACCONLY | Reads accel data alone
+ * 0x02 | BNO055_OPERATION_MODE_MAGONLY | Reads mag data alone
+ * 0x03 | BNO055_OPERATION_MODE_GYRONLY | Reads gyro data alone
+ * 0x04 | BNO055_OPERATION_MODE_ACCMAG | Reads accel and mag data
+ * 0x05 | BNO055_OPERATION_MODE_ACCGYRO | Reads accel and gyro data
+ * 0x06 | BNO055_OPERATION_MODE_MAGGYRO | Reads accel and mag data
+ * 0x07 | OPERATION_MODE_ANY_MOTION | Reads accel mag and
+ * | - | gyro data
+ * 0x08 | BNO055_OPERATION_MODE_IMUPLUS | Inertial measurement unit
+ * - | | Reads accel,gyro and
+ * | - | fusion data
+ * 0x09 | BNO055_OPERATION_MODE_COMPASS | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0A | BNO055_OPERATION_MODE_M4G | Reads accel, mag data
+ * - | - | and fusion data
+ * 0x0B | BNO055_OPERATION_MODE_NDOF_FMC_OFF| Nine degrees of freedom with
+ * - | - | fast magnetic calibration
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ * 0x0C | BNO055_OPERATION_MODE_NDOF | Nine degrees of freedom
+ * - | - | Reads accel,mag, gyro
+ * - | - | and fusion data
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 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 power_mode_u8 : The value of power mode
+ *
+ * power_mode_u8| result | comments
+ * ---------|---------------------------|-------------------------------------
+ * 0x00 |BNO055_POWER_MODE_NORMAL | In the NORMAL mode the register
+ * - | - | map and the internal peripherals
+ * - | - | of the MCU are always
+ * - | - | operative in this mode
+ * 0x01 |BNO055_POWER_MODE_LOWPOWER | This is first level of power
+ * | - | saving mode
+ * 0x02 |BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note For detailed about LOWPOWER mode
+ * refer data sheet 3.4.2
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_power_mode(
+u8 *power_mode_u8);
+/*! @brief This API used to write the power mode
+ * from register from 0x3E bit 0 to 1
+ *
+ * @param power_mode_u8 : The value of power mode
+ *
+ *
+ * power_mode_u8| result | comments
+ * -------|----------------------------|---------------------------------
+ * 0x00 | BNO055_POWER_MODE_NORMAL | In the NORMAL mode the register
+ * - | - | map and the internal peripherals
+ * - | - | of the MCU are always
+ * - | - | operative in this mode
+ * 0x01 | BNO055_POWER_MODE_LOWPOWER | This is first level of power
+ * | - | saving mode
+ * 0x02 | BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note For detailed about LOWPOWER mode
+ * refer data sheet 3.4.2
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_power_mode(u8 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 intr_rst_u8 : The value of reset interrupt
+ *
+ * intr_rst_u8 | result
+ * -------------|----------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_intr_rst(
+u8 *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 intr_rst_u8 : The value of reset interrupt
+ *
+ * intr_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_intr_rst(u8 intr_rst_u8);
+/**************************************************/
+/**\name FUNCTIONS FOR CLOCK SOURCE */
+/**************************************************/
+/*!
+ * @brief This API used to read the clk source
+ * from register from 0x3F bit 7
+ *
+ * @param clk_src_u8 : The value of clk source
+ *
+ * clk_src_u8 | result
+ * -------------|----------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_clk_src(
+u8 *clk_src_u8);
+/*!
+ * @brief This API used to write the clk source
+ * from register from 0x3F bit 7
+ *
+ * @param clk_src_u8 : The value of clk source
+ *
+ * clk_src_u8 | result
+ * -------------- |----------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_clk_src(u8 clk_src_u8);
+/**************************************************/
+/**\name FUNCTIONS FOR RESET SYSTEM */
+/**************************************************/
+/*!
+ * @brief This API used to read the reset system
+ * from register from 0x3F bit 5
+ *
+ * @param sys_rst_u8 : The value of reset system
+ *
+ * sys_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note It resets the whole system
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_sys_rst(
+u8 *sys_rst_u8);
+/*!
+ * @brief This API used to write the reset system
+ * from register from 0x3F bit 5
+ *
+ * @param sys_rst_u8 : The value of reset system
+ *
+ * sys_rst_u8 | result
+ * -------------- |----------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note It resets the whole system
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_sys_rst(u8 sys_rst_u8);
+/**************************************************/
+/**\name FUNCTIONS FOR SELF TEST */
+/**************************************************/
+/*!
+ * @brief This API used to read the self test
+ * from register from 0x3F bit 0
+ *
+ * @param selftest_u8 : The value of self test
+ *
+ * selftest_u8 | result
+ * -------------- |----------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note It triggers the self test
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_selftest(
+u8 *selftest_u8);
+/*!
+ * @brief This API used to write the self test
+ * from register from 0x3F bit 0
+ *
+ * @param selftest_u8 : The value of self test
+ *
+ * selftest_u8 | result
+ * -------------- |----------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note It triggers the self test
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_selftest(u8 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 temp_source_u8 : The value of selected temperature source
+ *
+ * temp_source_u8 | result
+ * ---------------- |---------------
+ * 0x00 | BNO055_ACCEL_TEMP_EN
+ * 0X01 | BNO055_GYRO_TEMP_EN
+ * 0X03 | BNO055_MCU_TEMP_EN
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_temp_source(
+u8 *temp_source_u8);
+/*!
+ * @brief This API used to write the temperature source
+ * from register from 0x40 bit 0 and 1
+ *
+ * @param temp_source_u8 : The value of selected temperature source
+ *
+ * temp_source_u8 | result
+ * ---------------- |---------------
+ * 0x00 | BNO055_ACCEL_TEMP_EN
+ * 0X01 | BNO055_GYRO_TEMP_EN
+ * 0X03 | BNO055_MCU_TEMP_EN
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_temp_source(u8 temp_source_u8);
+/**************************************************/
+/**\name APIs FOR AXIS REMAP */
+/**************************************************/
+/*!
+ * @brief This API used to read the axis remap value
+ * from register from 0x41 bit 0 and 5
+ *
+ * @param remap_axis_u8 : The value of axis remapping
+ *
+ * remap_axis_u8 | result | comments
+ * ------------|-------------------|------------
+ * 0X21 | BNO055_REMAP_X_Y | Z=Z;X=Y;Y=X
+ * 0X18 | BNO055_REMAP_Y_Z | X=X;Y=Z;Z=Y
+ * 0X06 | BNO055_REMAP_Z_X | Y=Y;X=Z;Z=X
+ * 0X12 | BNO055_REMAP_X_Y_Z_TYPE0 | X=Z;Y=X;Z=Y
+ * 0X09 | BNO055_REMAP_X_Y_Z_TYPE1 | X=Y;Y=Z;Z=X
+ * 0X24 | BNO055_DEFAULT_AXIS | X=X;Y=Y;Z=Z
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note : For axis sign remap refer the following APIs
+ * 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 *remap_axis_u8);
+/*!
+ * @brief This API used to write the axis remap value
+ * from register from 0x41 bit 0 and 5
+ *
+ * @param remap_axis_u8 : The value of axis remapping
+ *
+ * remap_axis_u8 | result | comments
+ * ------------|--------------------------|------------
+ * 0X21 | BNO055_REMAP_X_Y | Z=Z;X=Y;Y=X
+ * 0X18 | BNO055_REMAP_Y_Z | X=X;Y=Z;Z=Y
+ * 0X06 | BNO055_REMAP_Z_X | Y=Y;X=Z;Z=X
+ * 0X12 | BNO055_REMAP_X_Y_Z_TYPE0 | X=Z;Y=X;Z=Y
+ * 0X09 | BNO055_REMAP_X_Y_Z_TYPE1 | X=Y;Y=Z;Z=X
+ * 0X24 | BNO055_DEFAULT_AXIS | X=X;Y=Y;Z=Z
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note : For axis sign remap refer the following APIs
+ * 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 remap_axis_u8);
+/**************************************************/
+/**\name APIs FOR AXIS REMAP SIGN */
+/**************************************************/
+/*!
+ * @brief This API used to read the x-axis remap
+ * sign from register from 0x42 bit 2
+ *
+ * @param remap_x_sign_u8 : The value of x-axis remap sign
+ *
+ * remap_x_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | BNO055_REMAP_AXIS_POSITIVE
+ * 0X01 | BNO055_REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_remap_x_sign(
+u8 *remap_x_sign_u8);
+/*!
+ * @brief This API used to write the x-axis remap
+ * sign from register from 0x42 bit 2
+ *
+ * @param remap_x_sign_u8 : The value of x-axis remap sign
+ *
+ * remap_x_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | BNO055_REMAP_AXIS_POSITIVE
+ * 0X01 | BNO055_REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_remap_x_sign(
+u8 remap_x_sign_u8);
+/*!
+ * @brief This API used to read the y-axis remap
+ * sign from register from 0x42 bit 1
+ *
+ * @param remap_y_sign_u8 : The value of y-axis remap sign
+ *
+ * remap_y_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | BNO055_REMAP_AXIS_POSITIVE
+ * 0X01 | BNO055_REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_remap_y_sign(
+u8 *remap_y_sign_u8);
+/*!
+ * @brief This API used to write the y-axis remap
+ * sign from register from 0x42 bit 1
+ *
+ * @param remap_y_sign_u8 : The value of y-axis remap sign
+ *
+ * remap_y_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | BNO055_REMAP_AXIS_POSITIVE
+ * 0X01 | BNO055_REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_remap_y_sign(
+u8 remap_y_sign_u8);
+/*!
+ * @brief This API used to read the z-axis remap
+ * sign from register from 0x42 bit 0
+ *
+ * @param remap_z_sign_u8 : The value of z-axis remap sign
+ *
+ * remap_z_sign_u8 | result
+ * ------------------- |--------------------
+ * 0X00 | BNO055_REMAP_AXIS_POSITIVE
+ * 0X01 | BNO055_REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_remap_z_sign(
+u8 *remap_z_sign_u8);
+/*!
+ * @brief This API used to write the z-axis remap
+ * sign from register from 0x42 bit 0
+ *
+ * @param remap_z_sign_u8 : The value of z-axis remap sign
+ *
+ * remap_z_sign_u8 | result
+ * ------------------|--------------------
+ * 0X00 | BNO055_REMAP_AXIS_POSITIVE
+ * 0X01 | BNO055_REMAP_AXIS_NEGATIVE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_remap_z_sign(
+u8 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note The range of the accel offset varies based on
+ * the G-range of accel sensor.
+ *
+ * accel G range | offset range
+ * --------------- | --------------
+ * BNO055_ACCEL_RANGE_2G | +/-2000
+ * BNO055_ACCEL_RANGE_4G | +/-4000
+ * BNO055_ACCEL_RANGE_8G | +/-8000
+ * BNO055_ACCEL_RANGE_16G | +/-16000
+ *
+ * accel G range can be configured by using the
+ * bno055_set_accel_range() API
+ */
+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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note The range of the accel offset varies based on
+ * the G-range of accel sensor.
+ *
+ * accel G range | offset range
+ * --------------- | --------------
+ * BNO055_ACCEL_RANGE_2G | +/-2000
+ * BNO055_ACCEL_RANGE_4G | +/-4000
+ * BNO055_ACCEL_RANGE_8G | +/-8000
+ * BNO055_ACCEL_RANGE_16G | +/-16000
+ *
+ * accel G range can be configured by using the
+ * bno055_set_accel_range() API
+ */
+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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note The range of the gyro offset varies based on
+ * the range of gyro sensor
+ *
+ * gyro G range | offset range
+ * -------------------- | ------------
+ * BNO055_GYRO_RANGE_2000DPS | +/-32000
+ * BNO055_GYRO_RANGE_1000DPS | +/-16000
+ * BNO055_GYRO_RANGE_500DPS | +/-8000
+ * BNO055_GYRO_RANGE_250DPS | +/-4000
+ * BNO055_GYRO_RANGE_125DPS | +/-2000
+ *
+ * Gyro range can be configured by using the
+ * bno055_set_gyro_range() API
+ */
+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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note The range of the gyro offset varies based on
+ * the range of gyro sensor
+ *
+ * gyro G range | offset range
+ * -------------------- | ------------
+ * BNO055_GYRO_RANGE_2000DPS | +/-32000
+ * BNO055_GYRO_RANGE_1000DPS | +/-16000
+ * BNO055_GYRO_RANGE_500DPS | +/-8000
+ * BNO055_GYRO_RANGE_250DPS | +/-4000
+ * BNO055_GYRO_RANGE_125DPS | +/-2000
+ *
+ * Gyro range can be configured by using the
+ * bno055_set_gyro_range() API
+ */
+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 accel_range_u8 : The value of accel range
+ * accel_range_u8 | result
+ * ----------------- | --------------
+ * 0x00 | BNO055_ACCEL_RANGE_2G
+ * 0x01 | BNO055_ACCEL_RANGE_4G
+ * 0x02 | BNO055_ACCEL_RANGE_8G
+ * 0x03 | BNO055_ACCEL_RANGE_16G
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_range(
+u8 *accel_range_u8);
+/*!
+ * @brief This API used to write the accel range
+ * from page one register from 0x08 bit 0 and 1
+ *
+ * @param accel_range_u8 : The value of accel range
+ *
+ * accel_range_u8 | result
+ * ----------------- | --------------
+ * 0x00 | BNO055_ACCEL_RANGE_2G
+ * 0x01 | BNO055_ACCEL_RANGE_4G
+ * 0x02 | BNO055_ACCEL_RANGE_8G
+ * 0x03 | BNO055_ACCEL_RANGE_16G
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_range(
+u8 accel_range_u8);
+/*!
+ * @brief This API used to read the accel bandwidth
+ * from page one register from 0x08 bit 2 to 4
+ *
+ * @param accel_bw_u8 : The value of accel bandwidth
+ *
+ * accel_bw_u8 | result
+ * ----------------- | ---------------
+ * 0x00 | BNO055_ACCEL_BW_7_81HZ
+ * 0x01 | BNO055_ACCEL_BW_15_63HZ
+ * 0x02 | BNO055_ACCEL_BW_31_25HZ
+ * 0x03 | BNO055_ACCEL_BW_62_5HZ
+ * 0x04 | BNO055_ACCEL_BW_125HZ
+ * 0x05 | BNO055_ACCEL_BW_250HZ
+ * 0x06 | BNO055_ACCEL_BW_500HZ
+ * 0x07 | BNO055_ACCEL_BW_1000HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_bw(
+u8 *accel_bw_u8);
+/*!
+ * @brief This API used to write the accel bandwidth
+ * from page one register from 0x08 bit 2 to 4
+ *
+ * @param accel_bw_u8 : The value of accel bandwidth
+ *
+ * accel_bw_u8 | result
+ * ----------------- | ---------------
+ * 0x00 | BNO055_ACCEL_BW_7_81HZ
+ * 0x01 | BNO055_ACCEL_BW_15_63HZ
+ * 0x02 | BNO055_ACCEL_BW_31_25HZ
+ * 0x03 | BNO055_ACCEL_BW_62_5HZ
+ * 0x04 | BNO055_ACCEL_BW_125HZ
+ * 0x05 | BNO055_ACCEL_BW_250HZ
+ * 0x06 | BNO055_ACCEL_BW_500HZ
+ * 0x07 | BNO055_ACCEL_BW_1000HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_bw(
+u8 accel_bw_u8);
+/*!
+ * @brief This API used to read the accel power mode
+ * from page one register from 0x08 bit 5 to 7
+ *
+ * @param accel_power_mode_u8 : The value of accel power mode
+ * accel_power_mode_u8 | result
+ * ----------------- | -------------
+ * 0x00 | BNO055_ACCEL_NORMAL
+ * 0x01 | BNO055_ACCEL_SUSPEND
+ * 0x02 | BNO055_ACCEL_LOWPOWER_1
+ * 0x03 | BNO055_ACCEL_STANDBY
+ * 0x04 | BNO055_ACCEL_LOWPOWER_2
+ * 0x05 | BNO055_ACCEL_DEEPSUSPEND
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_power_mode(
+u8 *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 accel_power_mode_u8 : The value of accel power mode
+ * accel_power_mode_u8 | result
+ * ----------------- | -------------
+ * 0x00 | BNO055_ACCEL_NORMAL
+ * 0x01 | BNO055_ACCEL_SUSPEND
+ * 0x02 | BNO055_ACCEL_LOWPOWER_1
+ * 0x03 | BNO055_ACCEL_STANDBY
+ * 0x04 | BNO055_ACCEL_LOWPOWER_2
+ * 0x05 | BNO055_ACCEL_DEEPSUSPEND
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_power_mode(
+u8 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 mag_data_output_rate_u8 : The value of mag output data rate
+ *
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_data_output_rate(
+u8 *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 mag_data_output_rate_u8 : The value of mag output data rate
+ *
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_data_output_rate(
+u8 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 mag_operation_mode_u8 : The value of mag operation mode
+ *
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_operation_mode(
+u8 *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 mag_operation_mode_u8 : The value of mag operation mode
+ *
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_operation_mode(
+u8 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 mag_power_mode_u8 : The value of mag power mode
+ *
+ * mag_power_mode_u8 | result
+ * --------------------|-----------------
+ * 0x00 | BNO055_MAG_POWER_MODE_NORMAL
+ * 0x01 | BNO055_MAG_POWER_MODE_SLEEP
+ * 0x02 | BNO055_MAG_POWER_MODE_SUSPEND
+ * 0x03 | BNO055_MAG_POWER_MODE_FORCE_MODE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_power_mode(
+u8 *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 mag_power_mode_u8 : The value of mag power mode
+ *
+ * mag_power_mode_u8 | result
+ * ------------------|-----------------
+ * 0x00 | BNO055_MAG_POWER_MODE_NORMAL
+ * 0x01 | BNO055_MAG_POWER_MODE_SLEEP
+ * 0x02 | BNO055_MAG_POWER_MODE_SUSPEND
+ * 0x03 | BNO055_MAG_POWER_MODE_FORCE_MODE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_power_mode(
+u8 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 gyro_range_u8 : The value of gyro range
+ *
+ * gyro_range_u8 | result
+ * --------------------|-----------------
+ * 0x00 | BNO055_GYRO_RANGE_2000DPS
+ * 0x01 | BNO055_GYRO_RANGE_1000DPS
+ * 0x02 | BNO055_GYRO_RANGE_500DPS
+ * 0x03 | BNO055_GYRO_RANGE_250DPS
+ * 0x04 | BNO055_GYRO_RANGE_125DPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_range(
+u8 *gyro_range_u8);
+/*!
+ * @brief This API used to write the gyro range
+ * from page one register from 0x0A bit 0 to 3
+ *
+ * @param gyro_range_u8 : The value of gyro range
+ *
+ * gyro_range_u8 | result
+ * --------------------|-----------------
+ * 0x00 | BNO055_GYRO_RANGE_2000DPS
+ * 0x01 | BNO055_GYRO_RANGE_1000DPS
+ * 0x02 | BNO055_GYRO_RANGE_500DPS
+ * 0x03 | BNO055_GYRO_RANGE_250DPS
+ * 0x04 | BNO055_GYRO_RANGE_125DPS
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_range(
+u8 gyro_range_u8);
+/*!
+ * @brief This API used to read the gyro bandwidth
+ * from page one register from 0x0A bit 3 to 5
+ *
+ * @param gyro_bw_u8 : The value of gyro bandwidth
+ *
+ * gyro_bw_u8 | result
+ * --------------------|-----------------
+ * 0x00 | BNO055_GYRO_BW_523HZ
+ * 0x01 | BNO055_GYRO_BW_230HZ
+ * 0x02 | BNO055_GYRO_BW_116HZ
+ * 0x03 | BNO055_GYRO_BW_47HZ
+ * 0x04 | BNO055_GYRO_BW_23HZ
+ * 0x05 | BNO055_GYRO_BW_12HZ
+ * 0x06 | BNO055_GYRO_BW_64HZ
+ * 0x07 | BNO055_GYRO_BW_32HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_bw(
+u8 *gyro_bw_u8);
+/*!
+ * @brief This API used to write the gyro bandwidth
+ * from page one register from 0x0A bit 3 to 5
+ *
+ * @param gyro_bw_u8 : The value of gyro bandwidth
+ *
+ * gyro_bw_u8 | result
+ * --------------------|-----------------
+ * 0x00 | BNO055_GYRO_BW_523HZ
+ * 0x01 | BNO055_GYRO_BW_230HZ
+ * 0x02 | BNO055_GYRO_BW_116HZ
+ * 0x03 | BNO055_GYRO_BW_47HZ
+ * 0x04 | BNO055_GYRO_BW_23HZ
+ * 0x05 | BNO055_GYRO_BW_12HZ
+ * 0x06 | BNO055_GYRO_BW_64HZ
+ * 0x07 | BNO055_GYRO_BW_32HZ
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_bw(
+u8 gyro_bw_u8);
+/*!
+ * @brief This API used to read the gyro power mode
+ * from page one register from 0x0B bit 0 to 2
+ *
+ * @param gyro_power_mode_u8 : The value of gyro power mode
+ *
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_power_mode(
+u8 *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 gyro_power_mode_u8 : The value of gyro power mode
+ *
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_power_mode(
+u8 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 sleep_tmr_u8 : The value of accel sleep mode
+ *
+ * sleep_tmr_u8 | result
+ * ----------------- |------------------------------------
+ * 0x00 | enable EventDrivenSampling(EDT)
+ * 0x01 | enable Equidistant sampling mode(EST)
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_sleep_tmr_mode(
+u8 *sleep_tmr_u8);
+/*!
+ * @brief This API used to write the accel sleep mode
+ * from page one register from 0x0C bit 0
+ *
+ * @param sleep_tmr_u8 : The value of accel sleep mode
+ *
+ * sleep_tmr_u8 | result
+ * ----------------- |------------------------------------
+ * 0x00 | enable EventDrivenSampling(EDT)
+ * 0x01 | enable Equidistant sampling mode(EST)
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_sleep_tmr_mode(
+u8 sleep_tmr_u8);
+/*!
+ * @brief This API used to read the accel sleep duration
+ * from page one register from 0x0C bit 1 to 4
+ *
+ * @param sleep_durn_u8 : The value of accel sleep duration
+ *
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_sleep_durn(
+u8 *sleep_durn_u8);
+/*!
+ * @brief This API used to write the accel sleep duration
+ * from page one register from 0x0C bit 1 to 4
+ *
+ * @param sleep_durn_u8 : The value of accel sleep duration
+ *
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_sleep_durn(
+u8 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 sleep_durn_u8 : The value of gyro sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_sleep_durn(
+u8 *sleep_durn_u8);
+/*!
+ * @brief This API used to write the gyro sleep duration
+ * from page one register from 0x0D bit 0 to 2
+ *
+ * @param sleep_durn_u8 : The value of gyro sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 auto_sleep_durn_u8 : The value of gyro auto sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_auto_sleep_durn(
+u8 *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 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_gyro_set_auto_sleep_durn(
+u8 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 sleep_mode_u8 : The value of mag sleep mode
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_sleep_mode(
+u8 *sleep_mode_u8);
+/*!
+ * @brief This API used to write the mag sleep mode
+ * from page one register from 0x0E bit 0
+ *
+ * @param sleep_mode_u8 : The value of mag sleep mode
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_sleep_mode(
+u8 sleep_mode_u8);
+/*!
+ * @brief This API used to read the mag sleep duration
+ * from page one register from 0x0E bit 1 to 4
+ *
+ * @param sleep_durn_u8 : The value of mag sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_mag_sleep_durn(
+u8 *sleep_durn_u8);
+/*!
+ * @brief This API used to write the mag sleep duration
+ * from page one register from 0x0E bit 1 to 4
+ *
+ * @param sleep_durn_u8 : The value of mag sleep duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_mag_sleep_durn(
+u8 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 gyro_any_motion_u8 : The value of gyro anymotion interrupt mask
+ * gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *gyro_any_motion_u8);
+/*!
+ * @brief This API used to write the gyro anymotion interrupt mask
+ * from page one register from 0x0F bit 2
+ *
+ * @param gyro_any_motion_u8 : The value of gyro anymotion interrupt mask
+ * gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 gyro_any_motion_u8);
+/*!
+ * @brief This API used to read the gyro highrate interrupt mask
+ * from page one register from 0x0F bit 3
+ *
+ * @param gyro_highrate_u8 : The value of gyro highrate interrupt mask
+ * gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following APIs
+ *
+ * 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 *gyro_highrate_u8);
+/*!
+ * @brief This API used to write the gyro highrate interrupt mask
+ * from page one register from 0x0F bit 3
+ *
+ * @param gyro_highrate_u8 : The value of gyro highrate interrupt mask
+ * gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following APIs
+ *
+ * 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 gyro_highrate_u8);
+/*****************************************************/
+/**\name APIs FOR ACCEL INTERRUPT MASK */
+/*****************************************************/
+/*!
+ * @brief This API used to read the accel highg interrupt mask
+ * from page one register from 0x0F bit 5
+ *
+ * @param accel_high_g_u8 : The value of accel highg interrupt mask
+ * accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following APIs
+ *
+ * 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 *accel_high_g_u8);
+/*!
+ * @brief This API used to write the accel highg interrupt mask
+ * from page one register from 0x0F bit 5
+ *
+ * @param accel_high_g_u8 : The value of accel highg interrupt mask
+ * accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following APIs
+ *
+ * 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 accel_high_g_u8);
+/*!
+ * @brief This API used to read the accel anymotion interrupt mask
+ * from page one register from 0x0F bit 6
+ *
+ * @param accel_any_motion_u8 : The value of accel anymotion interrupt mask
+ * accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following APIs
+ *
+ * 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 *accel_any_motion_u8);
+/*!
+ * @brief This API used to write the accel anymotion interrupt mask
+ * from page one register from 0x0F bit 6
+ *
+ * @param accel_any_motion_u8 : The value of accel anymotion interrupt mask
+ * accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 accel_any_motion_u8);
+/*!
+ * @brief This API used to read the accel nomotion interrupt mask
+ * from page one register from 0x0F bit 7
+ *
+ * @param accel_nomotion_u8 : The value of accel nomotion interrupt mask
+ * accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_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 *accel_nomotion_u8);
+/*!
+ * @brief This API used to write the accel nomotion interrupt mask
+ * from page one register from 0x0F bit 7
+ *
+ * @param accel_nomotion_u8 : The value of accel nomotion interrupt mask
+ * accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 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 gyro_any_motion_u8 : The value of gyro anymotion interrupt
+ * gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *gyro_any_motion_u8);
+/*!
+ * @brief This API used to write the gyro anymotion interrupt
+ * from page one register from 0x10 bit 2
+ *
+ * @param gyro_any_motion_u8 : The value of gyro anymotion interrupt
+ * gyro_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 gyro_any_motion_u8);
+/*!
+ * @brief This API used to read the gyro highrate interrupt
+ * from page one register from 0x10 bit 3
+ *
+ * @param gyro_highrate_u8 : The value of gyro highrate interrupt
+ * gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following APIs
+ *
+ * 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 *gyro_highrate_u8);
+/*!
+ * @brief This API used to write the gyro highrate interrupt
+ * from page one register from 0x10 bit 3
+ *
+ * @param gyro_highrate_u8 : The value of gyro highrate interrupt
+ * gyro_highrate_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the gyro highrate interrupt
+ * configure the below settings by using
+ * the following APIs
+ *
+ * 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 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 accel_high_g_u8 : The value of accel highg interrupt
+ * accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following APIs
+ *
+ * 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 *accel_high_g_u8);
+/*!
+ * @brief This API used to write the accel highg interrupt
+ * from page one register from 0x10 bit 5
+ *
+ * @param accel_high_g_u8 : The value of accel highg interrupt
+ * accel_high_g_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note While enabling the accel highg interrupt
+ * configure the below settings by using
+ * the following APIs
+ *
+ * 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 accel_high_g_u8);
+/*!
+ * @brief This API used to read the accel anymotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param accel_any_motion_u8 : The value of accel anymotion interrupt
+ * accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *accel_any_motion_u8);
+/*!
+ * @brief This API used to write the accel anymotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param accel_any_motion_u8 : The value of accel anymotion interrupt
+ * accel_any_motion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 accel_any_motion_u8);
+/*!
+ * @brief This API used to read the accel nomotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param accel_nomotion_u8 : The value of accel nomotion interrupt
+ * accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *accel_nomotion_u8);
+/*!
+ * @brief This API used to write the accel nomotion interrupt
+ * from page one register from 0x10 bit 6
+ *
+ * @param accel_nomotion_u8 : The value of accel nomotion interrupt
+ * accel_nomotion_u8 | result
+ * -------------------- |------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 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 accel_any_motion_thres_u8 : The value of any motion threshold
+ * accel_any_motion_thres_u8 | result
+ * ------------------------ | -------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Accel anymotion threshold dependent on the
+ * range values
+ *
+ * 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 *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 accel_any_motion_thres_u8 : The value of any motion threshold
+ * accel_any_motion_thres_u8 | result
+ * ------------------------ | -------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Accel anymotion threshold dependent on the
+ * range values
+ *
+ * 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 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 accel_any_motion_durn_u8 : The value of accel anymotion duration
+ * accel_any_motion_durn_u8 | result
+ * ------------------------- | -------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_any_motion_durn(
+u8 *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 accel_any_motion_durn_u8 : The value of accel anymotion duration
+ *
+ * accel_any_motion_durn_u8 | result
+ * ------------------------- | -------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_any_motion_durn(
+u8 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 data_u8 : The value of accel anymotion enable
+ * data_u8 | result
+ * ------------ | -------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ * @param channel_u8 : The value of accel anymotion axis selection
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_any_motion_no_motion_axis_enable(
+u8 channel_u8, u8 *data_u8);
+/*!
+ * @brief This API used to write the accel anymotion enable
+ * from page one register from 0x12 bit 2 to 4
+ *
+ * @param data_u8 : The value of accel anymotion enable
+ * data_u8 | result
+ * ------------ | -------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ * @param channel_u8 : The value of accel anymotion axis selection
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_any_motion_no_motion_axis_enable(
+u8 channel_u8, u8 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 data_u8 : The value of accel highg enable
+ * data_u8| result
+ * ------------ | -------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ * @param channel_u8 : The value of accel highg axis selection
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_high_g_axis_enable(
+u8 channel_u8, u8 *data_u8);
+/*!
+ * @brief This API used to write the accel highg enable
+ * from page one register from 0x12 bit 5 to 7
+ *
+ * @param data_u8 : The value of accel highg enable
+ * data_u8| result
+ * ------------ | -------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ * @param channel_u8 : The value of accel highg axis selection
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_high_g_axis_enable(
+u8 channel_u8, u8 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 accel_high_g_durn_u8 : The value of accel highg duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 *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 accel_high_g_durn_u8 : The value of accel highg duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_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 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 accel_high_g_thres_u8 : The value of accel highg threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Accel highg interrupt threshold dependent
+ * for accel g range
+ *
+ * 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 *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 accel_high_g_thres_u8 : The value of accel highg threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Accel highg interrupt threshold dependent
+ * for accel g range
+ *
+ * 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 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 accel_slow_no_motion_thres_u8 :
+ * The value of accel slownomotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Accel slow no motion interrupt threshold dependent
+ * for accel g range
+ *
+ * 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 *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 accel_slow_no_motion_thres_u8 :
+ * The value of accel slownomotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Accel slow no motion interrupt threshold dependent
+ * for accel g range
+ *
+ * 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 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 accel_slow_no_motion_en_u8 : The value of accel slownomotion enable
+ * accel_slow_no_motion_en_u8 | result
+ * ------------------------ | --------
+ * 0x01 | Slow motion
+ * 0x00 | No motion
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_slow_no_motion_enable(
+u8 *accel_slow_no_motion_en_u8);
+/*!
+ * @brief This API used to write accel slownomotion enable
+ * from page one register from 0x16 bit 0
+ *
+ * @param accel_slow_no_motion_en_u8 : The value of accel slownomotion enable
+ * accel_slow_no_motion_en_u8 | result
+ * ------------------------ | --------
+ * 0x01 | Slow motion
+ * 0x00 | No motion
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_slow_no_motion_enable(
+u8 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 accel_slow_no_motion_durn_u8 :
+ * The value of accel slownomotion duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_accel_slow_no_motion_durn(
+u8 *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 accel_slow_no_motion_durn_u8 :
+ * The value of accel slownomotion duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_accel_slow_no_motion_durn(
+u8 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 data_u8 : The value of gyro anymotion enable
+ * data_u8 | result
+ * ----------------- |-------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ * @param channel_u8 : The value of gyro anymotion axis selection
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_axis_enable(
+u8 channel_u8, u8 *data_u8);
+/*!
+ * @brief This API used to write the gyro anymotion enable
+ * from page one register from 0x17 bit 0 to 2
+ *
+ * @param data_u8 : The value of gyro anymotion enable
+ * data_u8 | result
+ * ----------------- |-------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ * @param channel_u8 : The value of gyro anymotion axis selection
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_axis_enable(
+u8 channel_u8, u8 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 data_u8 : The value of gyro highrate enable
+ * data_u8 | result
+ * ---------------- |-------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ * @param channel_u8 : The value of gyro highrate axis selection
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_axis_enable(
+u8 channel_u8, u8 *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 data_u8 : The value of gyro highrate enable
+ * data_u8 | result
+ * ---------------- |-------------
+ * 0x01 | BNO055_BIT_ENABLE
+ * 0x00 | BNO055_BIT_DISABLE
+ * @param channel_u8 : The value of gyro highrate axis selection
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_axis_enable(
+u8 channel_u8, u8 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 gyro_any_motion_filter_u8 : The value of gyro anymotion filter
+ * gyro_any_motion_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | BNO055_GYRO_FILTERED_CONFIG
+ * 0x01 | BNO055_GYRO_UNFILTERED_CONFIG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_filter(
+u8 *gyro_any_motion_filter_u8);
+/*!
+ * @brief This API used to write gyro anymotion filter
+ * from page one register from 0x17 bit 6
+ *
+ * @param gyro_any_motion_filter_u8 : The value of gyro anymotion filter
+ * gyro_any_motion_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | BNO055_GYRO_FILTERED_CONFIG
+ * 0x01 | BNO055_GYRO_UNFILTERED_CONFIG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_filter(
+u8 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 gyro_highrate_filter_u8 : The value of gyro highrate filter
+ * gyro_highrate_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | BNO055_GYRO_FILTERED_CONFIG
+ * 0x01 | BNO055_GYRO_UNFILTERED_CONFIG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_filter(
+u8 *gyro_highrate_filter_u8);
+/*!
+ * @brief This API used to write gyro highrate filter
+ * from page one register from 0x17 bit 7
+ *
+ * @param gyro_highrate_filter_u8 : The value of gyro highrate filter
+ * gyro_highrate_filter_u8 | result
+ * --------------------------- |------------
+ * 0x00 | BNO055_GYRO_FILTERED_CONFIG
+ * 0x01 | BNO055_GYRO_UNFILTERED_CONFIG
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_filter(
+u8 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 gyro_highrate_x_thres_u8 : The value of gyro x highrate threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * 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 *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 gyro_highrate_x_thres_u8 : The value of gyro x highrate threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * 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 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 gyro_highrate_x_hyst_u8 : The value of gyro highrate x hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * gyro_highrate_x_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * 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 *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 gyro_highrate_x_hyst_u8 : The value of gyro highrate x hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * gyro_highrate_x_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * 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 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 gyro_highrate_x_durn_u8 : The value of gyro highrate x duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + gyro_highrate_x_durn_u8)*2.5ms
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_x_durn(
+u8 *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 gyro_highrate_x_durn_u8 : The value of gyro highrate x duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + gyro_highrate_x_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_x_durn(
+u8 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 gyro_highrate_y_thres_u8 : The value of gyro highrate y threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * 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 *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 gyro_highrate_y_thres_u8 : The value of gyro highrate y threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * 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 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 gyro_highrate_y_hyst_u8 : The value of gyro highrate y hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * gyro_highrate_y_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * 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 *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 gyro_highrate_y_hyst_u8 : The value of gyro highrate y hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * gyro_highrate_y_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * 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 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 gyro_highrate_y_durn_u8 : The value of gyro highrate y duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + gyro_highrate_y_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_y_durn(
+u8 *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 gyro_highrate_y_durn_u8 : The value of gyro highrate y duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + gyro_highrate_y_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_y_durn(
+u8 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 gyro_highrate_z_thres_u8 : The value of gyro highrate z threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * 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 *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 gyro_highrate_z_thres_u8 : The value of gyro highrate z threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate threshold dependent on the
+ * selection of gyro range
+ *
+ * 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 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 gyro_highrate_z_hyst_u8 : The value of gyro highrate z hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * gyro_highrate_z_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * 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 *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 gyro_highrate_z_hyst_u8 : The value of gyro highrate z hysteresis
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro high rate hysteresis calculated by
+ *
+ * using this (255 + 256 * gyro_highrate_z_hyst_u8) *4 LSB
+ *
+ * The high rate value scales with the range setting
+ *
+ * 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 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 gyro_highrate_z_durn_u8 : The value of gyro highrate z duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + gyro_highrate_z_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_highrate_z_durn(
+u8 *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 gyro_highrate_z_durn_u8 : The value of gyro highrate z duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro highrate duration calculate by using the formula
+ *
+ * (1 + gyro_highrate_z_durn_u8)*2.5ms
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_highrate_z_durn(
+u8 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 gyro_any_motion_thres_u8 : The value of gyro anymotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro anymotion interrupt threshold dependent
+ * on the selection of gyro range
+ *
+ * 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 *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 gyro_any_motion_thres_u8 : The value of gyro anymotion threshold
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ * @note Gyro anymotion interrupt threshold dependent
+ * on the selection of gyro range
+ *
+ * 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 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 gyro_any_motion_slope_samples_u8 :
+ * The value of gyro anymotion slope samples
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_slope_samples(
+u8 *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 gyro_any_motion_slope_samples_u8 :
+ * The value of gyro anymotion slope samples
+ * 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 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_slope_samples(
+u8 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 gyro_awake_durn_u8 : The value of gyro anymotion awake duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_get_gyro_any_motion_awake_durn(
+u8 *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 gyro_awake_durn_u8 : The value of gyro anymotion awake duration
+ *
+ * @return results of bus communication function
+ * @retval 0 -> BNO055_SUCCESS
+ * @retval 1 -> BNO055_ERROR
+ *
+ */
+BNO055_RETURN_FUNCTION_TYPE bno055_set_gyro_any_motion_awake_durn(
+u8 gyro_awake_durn_u8);
+#endif
\ No newline at end of file