diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2017 Edward Amsden
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,1 @@
+# bno055-haskell
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/bno055-haskell.cabal b/bno055-haskell.cabal
new file mode 100644
--- /dev/null
+++ b/bno055-haskell.cabal
@@ -0,0 +1,45 @@
+-- This file has been generated from package.yaml by hpack version 0.17.0.
+--
+-- see: https://github.com/sol/hpack
+
+name:           bno055-haskell
+version:        0.1.0
+synopsis:       Library for communication with the Bosch BNO055 orientation sensor
+description:    Library for controlling and reading the Bosch BNO055 absolute orientation sensor.
+category:       System
+homepage:       https://bitbucket.org/fmapE/bno055-haskell
+bug-reports:    https://bitbucket.org/fmapE/bno055-haskell/issues
+author:         Edward Amsden
+maintainer:     edwardamsden@gmail.com
+copyright:      2017 Edward Amsden
+license:        MIT
+license-file:   LICENSE
+build-type:     Simple
+cabal-version:  >= 1.10
+
+extra-source-files:
+    cfiles/bno055.h
+    README.md
+
+source-repository head
+  type: git
+  location: https://bitbucket.org/fmapE/bno055-haskell.git
+
+library
+  hs-source-dirs:
+      src
+  include-dirs:
+      cfiles
+  build-depends:
+      base >=4.7 && <5
+    , bytestring
+    , cereal
+    , h2c
+    , mtl
+    , resourcet
+  exposed-modules:
+      System.Orientation.BNO055
+      System.Orientation.BNO055.Internal
+  other-modules:
+      Paths_bno055_haskell
+  default-language: Haskell2010
diff --git a/cfiles/bno055.h b/cfiles/bno055.h
new file mode 100644
--- /dev/null
+++ b/cfiles/bno055.h
@@ -0,0 +1,7976 @@
+// FETCHED FROM https://raw.githubusercontent.com/BoschSensortec/BNO055_driver/master/bno055.h on
+// Tue Jun 20 22:40:30 EDT 2017
+
+/** \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
+
+/*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);
+/******************************************************************/
+/**\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
diff --git a/src/System/Orientation/BNO055.hs b/src/System/Orientation/BNO055.hs
new file mode 100644
--- /dev/null
+++ b/src/System/Orientation/BNO055.hs
@@ -0,0 +1,160 @@
+module System.Orientation.BNO055 where
+
+import           Control.Concurrent (threadDelay)
+import           Control.Monad
+import           Data.Bits
+import           Data.ByteString (ByteString, pack)
+import qualified Data.ByteString as ByteString
+import           Data.Int
+import           Data.Serialize.Get
+import           Data.Word
+import           System.IO.I2C
+import           System.Orientation.BNO055.Internal
+import           Text.Printf
+
+-- | The BNO055 has two pages of registers, so a register address may point to two different registers depending on which page is selected.
+data RegisterPage = Page0 | Page1
+
+-- | The BNO055 can have slave address 0x28 or 0x29.
+--
+-- On the Adafruit board without modification, it takes address 0x28.
+data BNO055Address = Address0x28 | Address0x29
+
+-- | Serialize the register page to the value for the page register
+registerPage :: RegisterPage -> Word8
+registerPage Page0 = bno055PageZero
+registerPage Page1 = bno055PageOne
+
+-- | Serialize the address to an I2C address
+addressBNO055 :: BNO055Address -> I2CAddress
+addressBNO055 Address0x28 = 0x28
+addressBNO055 Address0x29 = 0x29
+
+-- | Read a sequence of registers from the BNO055
+readRegisters
+  :: I2Cfd         -- ^ A handle to the I2C bus to which the BNO055 is connected
+  -> BNO055Address -- ^ The address of the BNO055 on the bus
+  -> RegisterPage  -- ^ The register page to read from
+  -> Word8         -- ^ The first register to read
+  -> Word8         -- ^ The number of registers to read
+  -> IO ByteString
+readRegisters fd address page register count =
+  let i2cAddress = addressBNO055 address
+      pageByte = registerPage page
+  in do
+    runI2CTransaction fd
+      $ writeToSlave i2cAddress (pack [bno055PageIdAddr, pageByte])
+    runI2CTransaction fd
+      $  writeToSlave i2cAddress (pack [register])
+      *> readFromSlave i2cAddress (fromIntegral count)
+
+-- | Write a register on the BNO055
+writeRegister
+  :: I2Cfd         -- ^ A handle to the I2C bus to wich the BNO055 is connected
+  -> BNO055Address -- ^ The address of the BNO055 on the bus
+  -> RegisterPage  -- ^ The register page to write to
+  -> Word8         -- ^ The register to write
+  -> Word8         -- ^ The byte to write to the register
+  -> IO ()
+writeRegister fd address page register value =
+  let i2cAddress = addressBNO055 address
+      pageByte = registerPage page
+  in do
+    runI2CTransaction fd
+      $ writeToSlave i2cAddress (pack [bno055PageIdAddr, pageByte])
+    runI2CTransaction fd
+      $ writeToSlave i2cAddress (pack [register, value])
+
+-- | An enumeration of calibration statuses
+data CalibrationStatus
+  = NotCalibrated
+  | PoorlyCalibrated
+  | FairlyCalibrated
+  | Calibrated
+  deriving (Eq, Ord, Show, Enum, Bounded)
+
+-- | A record of calibration statuses for the accelerometer, gyroscope, magnometer, and entire system
+data BNO055CalibrationStatus
+  = BNO055CalibrationStatus
+  { systemCalibrationStatus :: CalibrationStatus
+  , gyroscopeCalibrationStatus :: CalibrationStatus
+  , accelerometerCalibrationStatus :: CalibrationStatus
+  , magnometerCalibrationStatus :: CalibrationStatus
+  } deriving (Eq, Show)
+
+-- | Deserialize the calibration record read from the device
+getBNO055CalibrationStatus :: Get BNO055CalibrationStatus
+getBNO055CalibrationStatus = calibrationStatusRecordFromWord <$> getWord8
+  where
+    calibrationStatusFromWord :: Int -> Int -> Word8 -> CalibrationStatus
+    calibrationStatusFromWord lsb msb word8 = toEnum $ (if testBit word8 msb then bit 1 else zeroBits) .|. (if testBit word8 lsb then bit 0 else zeroBits)
+    calibrationStatusRecordFromWord :: Word8 -> BNO055CalibrationStatus
+    calibrationStatusRecordFromWord word8
+      = BNO055CalibrationStatus
+        (calibrationStatusFromWord 7 6 word8)
+        (calibrationStatusFromWord 5 4 word8)
+        (calibrationStatusFromWord 3 2 word8)
+        (calibrationStatusFromWord 1 0 word8)
+
+-- | Read the calibration status record from the device
+readCalibrationStatus
+  :: I2Cfd                      -- ^ The bus to which the BNO055 is connected
+  -> BNO055Address              -- ^ The address of the BNO055 on the bus
+  -> IO BNO055CalibrationStatus
+readCalibrationStatus fd address =
+  either error id <$> runGet getBNO055CalibrationStatus <$> readRegisters fd address Page0 bno055CalibStatAddr 1
+
+-- | Deserialize an orientation quaternion read from the device
+getBNO055Quaternion :: Get (Double, Double, Double, Double)
+getBNO055Quaternion =
+      (,,,)
+  <$> (toQuaternionComponent <$> getInt16le) -- w
+  <*> (toQuaternionComponent <$> getInt16le) -- x
+  <*> (toQuaternionComponent <$> getInt16le) -- y
+  <*> (toQuaternionComponent <$> getInt16le) -- z
+  where
+    toQuaternionComponent :: Int16 -> Double
+    toQuaternionComponent component = fromIntegral component / fromIntegral (2^14) -- Magic number divisor from BNO055 data sheet
+  
+-- | Read the fused orientation as a quaternion from the device
+readQuaternion
+  :: I2Cfd                               -- ^ The bus to which the BNO055 is connected
+  -> BNO055Address                       -- ^ The address of the BNO055 on the bus
+  -> IO (Double, Double, Double, Double) -- ^ (w, x, y, z)
+readQuaternion fd address =
+  either error id <$> runGet getBNO055Quaternion <$> readRegisters fd address Page0 bno055QuaternionDataWLsbAddr 8
+
+-- | An enumeration of the operation modes of the BNO055 (incomplete)
+data BNO055Mode
+  = BNO055ConfigMode
+  | BNO055NdofMode
+  deriving (Eq, Show)
+
+-- | Serialize the operation mode to a byte for the mode register
+bno055Mode :: BNO055Mode -> Word8
+bno055Mode BNO055ConfigMode = bno055OperationModeConfig
+bno055Mode BNO055NdofMode = bno055OperationModeNdof
+
+-- | Set the mode of the BNO055
+setMode
+  :: I2Cfd         -- ^ The bus to which the BNO055 is connected
+  -> BNO055Address -- ^ The address of the BNO055 on the bus
+  -> BNO055Mode    -- ^ The mode to set the device to
+  -> IO ()
+setMode fd address mode = writeRegister fd address Page0 bno055OprModeAddr $ bno055Mode mode
+
+-- | An example which streams orientation and calibration status information to the console
+spewData :: I2Cfd -> BNO055Address -> IO ()
+spewData fd address = do
+  setMode fd address BNO055NdofMode
+  forever $ do
+    calibrationStatus <- readCalibrationStatus fd address
+    (w, x, y, z) <- readQuaternion fd address
+    printf "(%6.3f, %6.3f, %6.3f, %6.3f)\t\t" w x y z
+    printf "s %d g %d a %d m %d\n"
+      (fromEnum $ systemCalibrationStatus calibrationStatus)
+      (fromEnum $ gyroscopeCalibrationStatus calibrationStatus)
+      (fromEnum $ accelerometerCalibrationStatus calibrationStatus)
+      (fromEnum $ magnometerCalibrationStatus calibrationStatus)
+    threadDelay 10000
+
diff --git a/src/System/Orientation/BNO055/Internal.hsc b/src/System/Orientation/BNO055/Internal.hsc
new file mode 100644
--- /dev/null
+++ b/src/System/Orientation/BNO055/Internal.hsc
@@ -0,0 +1,189 @@
+module System.Orientation.BNO055.Internal where
+
+#include "bno055.h"
+
+import System.IO.I2C (I2CAddress)
+import Data.Word
+
+-- Device addresses
+#{enum I2CAddress, , BNO055_I2C_ADDR1, BNO055_I2C_ADDR2}
+
+-- Page register address
+#{enum Word8, , BNO055_PAGE_ID_ADDR}
+
+-- Page 0 Register addresses
+#{enum Word8, , BNO055_CHIP_ID_ADDR , BNO055_ACCEL_REV_ID_ADDR , BNO055_MAG_REV_ID_ADDR , BNO055_GYRO_REV_ID_ADDR , BNO055_SW_REV_ID_LSB_ADDR , BNO055_SW_REV_ID_MSB_ADDR , BNO055_BL_REV_ID_ADDR}
+
+-- Accel data register
+#{enum Word8, , BNO055_ACCEL_DATA_X_LSB_ADDR , BNO055_ACCEL_DATA_X_MSB_ADDR , BNO055_ACCEL_DATA_Y_LSB_ADDR , BNO055_ACCEL_DATA_Y_MSB_ADDR , BNO055_ACCEL_DATA_Z_LSB_ADDR , BNO055_ACCEL_DATA_Z_MSB_ADDR}
+
+-- Mag data register
+#{enum Word8, , BNO055_MAG_DATA_X_LSB_ADDR , BNO055_MAG_DATA_X_MSB_ADDR , BNO055_MAG_DATA_Y_LSB_ADDR , BNO055_MAG_DATA_Y_MSB_ADDR , BNO055_MAG_DATA_Z_LSB_ADDR , BNO055_MAG_DATA_Z_MSB_ADDR}
+
+-- Gyro data registers
+#{enum Word8, , BNO055_GYRO_DATA_X_LSB_ADDR , BNO055_GYRO_DATA_X_MSB_ADDR , BNO055_GYRO_DATA_Y_LSB_ADDR , BNO055_GYRO_DATA_Y_MSB_ADDR , BNO055_GYRO_DATA_Z_LSB_ADDR , BNO055_GYRO_DATA_Z_MSB_ADDR}
+
+-- Euler data registers
+#{enum Word8, , BNO055_EULER_H_LSB_ADDR , BNO055_EULER_H_MSB_ADDR , BNO055_EULER_R_LSB_ADDR , BNO055_EULER_R_MSB_ADDR , BNO055_EULER_P_LSB_ADDR , BNO055_EULER_P_MSB_ADDR}
+
+-- Quaternion data registers
+#{enum Word8, , BNO055_QUATERNION_DATA_W_LSB_ADDR , BNO055_QUATERNION_DATA_W_MSB_ADDR , BNO055_QUATERNION_DATA_X_LSB_ADDR , BNO055_QUATERNION_DATA_X_MSB_ADDR , BNO055_QUATERNION_DATA_Y_LSB_ADDR , BNO055_QUATERNION_DATA_Y_MSB_ADDR , BNO055_QUATERNION_DATA_Z_LSB_ADDR , BNO055_QUATERNION_DATA_Z_MSB_ADDR}
+
+--  Linear acceleration data registers
+#{enum Word8, , BNO055_LINEAR_ACCEL_DATA_X_LSB_ADDR , BNO055_LINEAR_ACCEL_DATA_X_MSB_ADDR , BNO055_LINEAR_ACCEL_DATA_Y_LSB_ADDR , BNO055_LINEAR_ACCEL_DATA_Y_MSB_ADDR , BNO055_LINEAR_ACCEL_DATA_Z_LSB_ADDR , BNO055_LINEAR_ACCEL_DATA_Z_MSB_ADDR}
+
+-- Gravity data registers
+#{enum Word8, , BNO055_GRAVITY_DATA_X_LSB_ADDR , BNO055_GRAVITY_DATA_X_MSB_ADDR , BNO055_GRAVITY_DATA_Y_LSB_ADDR , BNO055_GRAVITY_DATA_Y_MSB_ADDR , BNO055_GRAVITY_DATA_Z_LSB_ADDR , BNO055_GRAVITY_DATA_Z_MSB_ADDR}
+
+-- Temperature data register
+#{enum Word8, , BNO055_TEMP_ADDR}
+
+-- Status registers
+#{enum Word8, , BNO055_CALIB_STAT_ADDR , BNO055_SELFTEST_RESULT_ADDR , BNO055_INTR_STAT_ADDR , BNO055_SYS_CLK_STAT_ADDR , BNO055_SYS_STAT_ADDR , BNO055_SYS_ERR_ADDR}
+
+-- Unit selection register
+#{enum Word8, , BNO055_UNIT_SEL_ADDR , BNO055_DATA_SELECT_ADDR}
+
+-- Mode registers
+#{enum Word8, , BNO055_OPR_MODE_ADDR , BNO055_PWR_MODE_ADDR , BNO055_SYS_TRIGGER_ADDR , BNO055_TEMP_SOURCE_ADDR}
+
+-- Axis remap registers
+#{enum Word8, , BNO055_AXIS_MAP_CONFIG_ADDR , BNO055_AXIS_MAP_SIGN_ADDR}
+
+-- SIC registers
+#{enum Word8, , BNO055_SIC_MATRIX_0_LSB_ADDR , BNO055_SIC_MATRIX_0_MSB_ADDR , BNO055_SIC_MATRIX_1_LSB_ADDR , BNO055_SIC_MATRIX_1_MSB_ADDR , BNO055_SIC_MATRIX_2_LSB_ADDR , BNO055_SIC_MATRIX_2_MSB_ADDR , BNO055_SIC_MATRIX_3_LSB_ADDR , BNO055_SIC_MATRIX_3_MSB_ADDR , BNO055_SIC_MATRIX_4_LSB_ADDR , BNO055_SIC_MATRIX_4_MSB_ADDR , BNO055_SIC_MATRIX_5_LSB_ADDR , BNO055_SIC_MATRIX_5_MSB_ADDR , BNO055_SIC_MATRIX_6_LSB_ADDR , BNO055_SIC_MATRIX_6_MSB_ADDR , BNO055_SIC_MATRIX_7_LSB_ADDR , BNO055_SIC_MATRIX_7_MSB_ADDR , BNO055_SIC_MATRIX_8_LSB_ADDR , BNO055_SIC_MATRIX_8_MSB_ADDR}
+
+-- Accelerometer Offset registers
+#{enum Word8, , BNO055_ACCEL_OFFSET_X_LSB_ADDR , BNO055_ACCEL_OFFSET_X_MSB_ADDR , BNO055_ACCEL_OFFSET_Y_LSB_ADDR , BNO055_ACCEL_OFFSET_Y_MSB_ADDR , BNO055_ACCEL_OFFSET_Z_LSB_ADDR , BNO055_ACCEL_OFFSET_Z_MSB_ADDR}
+
+-- Magnetometer Offset registers
+#{enum Word8, , BNO055_MAG_OFFSET_X_LSB_ADDR , BNO055_MAG_OFFSET_X_MSB_ADDR , BNO055_MAG_OFFSET_Y_LSB_ADDR , BNO055_MAG_OFFSET_Y_MSB_ADDR , BNO055_MAG_OFFSET_Z_LSB_ADDR , BNO055_MAG_OFFSET_Z_MSB_ADDR}
+
+-- Gyroscope Offset registers
+#{enum Word8, , BNO055_GYRO_OFFSET_X_LSB_ADDR , BNO055_GYRO_OFFSET_X_MSB_ADDR , BNO055_GYRO_OFFSET_Y_LSB_ADDR , BNO055_GYRO_OFFSET_Y_MSB_ADDR , BNO055_GYRO_OFFSET_Z_LSB_ADDR , BNO055_GYRO_OFFSET_Z_MSB_ADDR}
+
+-- Radius registers
+#{enum Word8, , BNO055_ACCEL_RADIUS_LSB_ADDR , BNO055_ACCEL_RADIUS_MSB_ADDR , BNO055_MAG_RADIUS_LSB_ADDR , BNO055_MAG_RADIUS_MSB_ADDR}
+
+-- Page 1 Register addresses
+-- Configuration registers
+#{enum Word8, , BNO055_ACCEL_CONFIG_ADDR , BNO055_MAG_CONFIG_ADDR , BNO055_GYRO_CONFIG_ADDR , BNO055_GYRO_MODE_CONFIG_ADDR , BNO055_ACCEL_SLEEP_CONFIG_ADDR , BNO055_GYRO_SLEEP_CONFIG_ADDR , BNO055_MAG_SLEEP_CONFIG_ADDR}
+
+-- Interrupt registers
+#{enum Word8, , BNO055_INT_MASK_ADDR , BNO055_INT_ADDR , BNO055_ACCEL_ANY_MOTION_THRES_ADDR , BNO055_ACCEL_INTR_SETTINGS_ADDR , BNO055_ACCEL_HIGH_G_DURN_ADDR , BNO055_ACCEL_HIGH_G_THRES_ADDR , BNO055_ACCEL_NO_MOTION_THRES_ADDR , BNO055_ACCEL_NO_MOTION_SET_ADDR , BNO055_GYRO_INTR_SETING_ADDR , BNO055_GYRO_HIGHRATE_X_SET_ADDR , BNO055_GYRO_DURN_X_ADDR , BNO055_GYRO_HIGHRATE_Y_SET_ADDR , BNO055_GYRO_DURN_Y_ADDR , BNO055_GYRO_HIGHRATE_Z_SET_ADDR , BNO055_GYRO_DURN_Z_ADDR , BNO055_GYRO_ANY_MOTION_THRES_ADDR , BNO055_GYRO_ANY_MOTION_SET_ADDR}
+
+-- Miscellaneous constants
+#{enum Word8, , BNO055_INIT_VALUE , BNO055_GEN_READ_WRITE_LENGTH , BNO055_LSB_MSB_READ_LENGTH , BNO055_MAG_POWER_MODE_RANGE , BNO055_MAG_OPR_MODE_RANGE , BNO055_ACCEL_POWER_MODE_RANGE , BNO055_ACCEL_SLEEP_DURATION_RANGE , BNO055_GYRO_AUTO_SLEEP_DURATION_RANGE , BNO055_ACCEL_GYRO_BW_RANGE , BNO055_MAG_OUTPUT_RANGE , BNO055_ACCEL_RANGE , BNO055_SHIFT_EIGHT_BITS , BNO055_GYRO_RANGE , BNO055_ACCEL_SLEEP_MODE_RANGE}
+
+-- Selection for bit enable and disable 
+#{enum Word8, , BNO055_BIT_ENABLE , BNO055_BIT_DISABLE}
+
+-- Page ID 
+#{enum Word8, , BNO055_PAGE_ZERO , BNO055_PAGE_ONE}
+
+-- Enable the temperature source 
+#{enum Word8, , BNO055_ACCEL_TEMP_EN , BNO055_GYRO_TEMP_EN , BNO055_MCU_TEMP_EN}
+
+-- Accel unit
+#{enum Word8, , BNO055_ACCEL_UNIT_MSQ , BNO055_ACCEL_UNIT_MG}
+
+-- Gyro unit
+#{enum Word8, , BNO055_GYRO_UNIT_DPS , BNO055_GYRO_UNIT_RPS}
+
+-- Euler unit
+#{enum Word8, , BNO055_EULER_UNIT_DEG , BNO055_EULER_UNIT_RAD}
+
+-- Temperature unit
+#{enum Word8, , BNO055_TEMP_UNIT_CELSIUS, BNO055_TEMP_UNIT_FAHRENHEIT}
+
+-- Accel division factor
+#{enum Double, , BNO055_ACCEL_DIV_MSQ, BNO055_ACCEL_DIV_MG}
+
+-- Mag division factor
+#{enum Double, , BNO055_MAG_DIV_UT}
+
+-- Gyro division factor
+#{enum Double, , BNO055_GYRO_DIV_DPS, BNO055_GYRO_DIV_RPS}
+
+-- Euler division factor
+#{enum Double, , BNO055_EULER_DIV_DEG , BNO055_EULER_DIV_RAD}
+
+-- Linear accel division factor
+#{enum Double, , BNO055_LINEAR_ACCEL_DIV_MSQ}
+
+-- Gravity accel division factor
+#{enum Double, , BNO055_GRAVITY_DIV_MSQ}
+
+-- Temperature division factor
+#{enum Double, , BNO055_TEMP_DIV_FAHRENHEIT , BNO055_TEMP_DIV_CELSIUS , BNO055_MODE_SWITCHING_DELAY , BNO055_CONFIG_MODE_SWITCHING_DELAY}
+
+-- Operation mode settings
+#{enum Word8, , BNO055_OPERATION_MODE_CONFIG , BNO055_OPERATION_MODE_ACCONLY , BNO055_OPERATION_MODE_MAGONLY , BNO055_OPERATION_MODE_GYRONLY , BNO055_OPERATION_MODE_ACCMAG , BNO055_OPERATION_MODE_ACCGYRO , BNO055_OPERATION_MODE_MAGGYRO , BNO055_OPERATION_MODE_AMG , BNO055_OPERATION_MODE_IMUPLUS , BNO055_OPERATION_MODE_COMPASS , BNO055_OPERATION_MODE_M4G , BNO055_OPERATION_MODE_NDOF_FMC_OFF , BNO055_OPERATION_MODE_NDOF}
+
+-- Power mode
+#{enum Word8, , BNO055_POWER_MODE_NORMAL , BNO055_POWER_MODE_LOWPOWER , BNO055_POWER_MODE_SUSPEND}
+
+-- Accel Range 
+#{enum Word8, , BNO055_ACCEL_RANGE_2G , BNO055_ACCEL_RANGE_4G , BNO055_ACCEL_RANGE_8G , BNO055_ACCEL_RANGE_16G}
+
+-- Accel Bandwidth
+#{enum Word8, , BNO055_ACCEL_BW_7_81HZ , BNO055_ACCEL_BW_15_63HZ , BNO055_ACCEL_BW_31_25HZ , BNO055_ACCEL_BW_62_5HZ , BNO055_ACCEL_BW_125HZ , BNO055_ACCEL_BW_250HZ , BNO055_ACCEL_BW_500HZ , BNO055_ACCEL_BW_1000HZ}
+
+-- Accel Power mode
+#{enum Word8, , BNO055_ACCEL_NORMAL , BNO055_ACCEL_SUSPEND , BNO055_ACCEL_LOWPOWER_1 , BNO055_ACCEL_STANDBY , BNO055_ACCEL_LOWPOWER_2 , BNO055_ACCEL_DEEPSUSPEND}
+
+-- Mag data output rate
+#{enum Word8, , BNO055_MAG_DATA_OUTRATE_2HZ , BNO055_MAG_DATA_OUTRATE_6HZ , BNO055_MAG_DATA_OUTRATE_8HZ , BNO055_MAG_DATA_OUTRATE_10HZ , BNO055_MAG_DATA_OUTRATE_15HZ , BNO055_MAG_DATA_OUTRATE_20HZ , BNO055_MAG_DATA_OUTRATE_25HZ , BNO055_MAG_DATA_OUTRATE_30HZ}
+
+-- Mag Operation mode
+#{enum Word8, , BNO055_MAG_OPERATION_MODE_LOWPOWER , BNO055_MAG_OPERATION_MODE_REGULAR , BNO055_MAG_OPERATION_MODE_ENHANCED_REGULAR , BNO055_MAG_OPERATION_MODE_HIGH_ACCURACY}
+
+-- Mag power mode
+#{enum Word8, , BNO055_MAG_POWER_MODE_NORMAL , BNO055_MAG_POWER_MODE_SLEEP , BNO055_MAG_POWER_MODE_SUSPEND , BNO055_MAG_POWER_MODE_FORCE_MODE}
+
+-- Gyro range
+#{enum Word8, , BNO055_GYRO_RANGE_2000DPS , BNO055_GYRO_RANGE_1000DPS , BNO055_GYRO_RANGE_500DPS , BNO055_GYRO_RANGE_250DPS , BNO055_GYRO_RANGE_125DPS}
+
+-- Gyro Bandwidth
+#{enum Word8, , BNO055_GYRO_BW_523HZ , BNO055_GYRO_BW_230HZ , BNO055_GYRO_BW_116HZ , BNO055_GYRO_BW_47HZ , BNO055_GYRO_BW_23HZ , BNO055_GYRO_BW_12HZ , BNO055_GYRO_BW_64HZ , BNO055_GYRO_BW_32HZ}
+
+-- Gyro power mode
+#{enum Word8, , BNO055_GYRO_POWER_MODE_NORMAL , BNO055_GYRO_POWER_MODE_FASTPOWERUP , BNO055_GYRO_POWER_MODE_DEEPSUSPEND , BNO055_GYRO_POWER_MODE_SUSPEND , BNO055_GYRO_POWER_MODE_ADVANCE_POWERSAVE}
+
+-- Accel Sleep Duration 
+#{enum Word8, , BNO055_ACCEL_SLEEP_DURN_0_5MS , BNO055_ACCEL_SLEEP_DURN_1MS , BNO055_ACCEL_SLEEP_DURN_2MS , BNO055_ACCEL_SLEEP_DURN_4MS , BNO055_ACCEL_SLEEP_DURN_6MS , BNO055_ACCEL_SLEEP_DURN_10MS , BNO055_ACCEL_SLEEP_DURN_25MS , BNO055_ACCEL_SLEEP_DURN_50MS , BNO055_ACCEL_SLEEP_DURN_100MS , BNO055_ACCEL_SLEEP_DURN_500MS , BNO055_ACCEL_SLEEP_DURN_1S}
+
+-- Gyro Auto sleep duration
+#{enum Word8, , BNO055_GYRO_No_AUTOSLPDUR , BNO055_GYRO_4MS_AUTOSLPDUR , BNO055_GYRO_5MS_AUTOSLPDUR , BNO055_GYRO_8MS_AUTOSLPDUR , BNO055_GYRO_10MS_AUTOSLPDUR , BNO055_GYRO_15MS_AUTOSLPDUR , BNO055_GYRO_20MS_AUTOSLPDUR , BNO055_GYRO_40MS_AUTOSLPDUR}
+
+-- Accel Any/No motion axis selection
+#{enum Word8, , BNO055_ACCEL_ANY_MOTION_NO_MOTION_X_AXIS , BNO055_ACCEL_ANY_MOTION_NO_MOTION_Y_AXIS , BNO055_ACCEL_ANY_MOTION_NO_MOTION_Z_AXIS}
+
+-- Accel High g axis selection
+#{enum Word8, , BNO055_ACCEL_HIGH_G_X_AXIS , BNO055_ACCEL_HIGH_G_Y_AXIS , BNO055_ACCEL_HIGH_G_Z_AXIS}
+
+-- Gyro Any motion axis selection
+#{enum Word8, , BNO055_GYRO_ANY_MOTION_X_AXIS , BNO055_GYRO_ANY_MOTION_Y_AXIS , BNO055_GYRO_ANY_MOTION_Z_AXIS}
+
+
+-- Gyro High rate axis selection
+#{enum Word8, , BNO055_GYRO_HIGHRATE_X_AXIS , BNO055_GYRO_HIGHRATE_Y_AXIS , BNO055_GYRO_HIGHRATE_Z_AXIS}
+
+-- Axis remap values
+#{enum Word8, , BNO055_REMAP_X_Y , BNO055_REMAP_Y_Z , BNO055_REMAP_Z_X , BNO055_REMAP_X_Y_Z_TYPE0 , BNO055_REMAP_X_Y_Z_TYPE1 , BNO055_DEFAULT_AXIS}
+
+-- Axis remap sign 
+#{enum Word8, , BNO055_REMAP_AXIS_POSITIVE , BNO055_REMAP_AXIS_NEGATIVE}
+
+-- Gyro anymotion and high rate filter configuration 
+#{enum Word8, , BNO055_GYRO_FILTERED_CONFIG , BNO055_GYRO_UNFILTERED_CONFIG}
+
+-- mask definitions
+#{enum Word16, , BNO055_SIC_HEX_0_0_F_F_DATA}
+
+-- Array size definitions
+#{enum Int, , BNO055_REV_ID_SIZE , BNO055_ACCEL_DATA_SIZE , BNO055_ACCEL_XYZ_DATA_SIZE , BNO055_MAG_DATA_SIZE , BNO055_MAG_XYZ_DATA_SIZE , BNO055_GYRO_DATA_SIZE , BNO055_GYRO_XYZ_DATA_SIZE , BNO055_EULER_DATA_SIZE , BNO055_EULER_HRP_DATA_SIZE , BNO055_QUATERNION_DATA_SIZE , BNO055_QUATERNION_WXYZ_DATA_SIZE , BNO055_GRAVITY_DATA_SIZE , BNO055_GRAVITY_XYZ_DATA_SIZE , BNO055_ACCEL_OFFSET_ARRAY , BNO055_MAG_OFFSET_ARRAY , BNO055_GYRO_OFFSET_ARRAY , BNO055_SOFT_IRON_CALIBRATION_MATRIX_SIZE}
+
+
+-- Array index definitions
+#{enum Int, , BNO055_SW_ID_LSB , BNO055_SW_ID_MSB , BNO055_SENSOR_DATA_LSB , BNO055_SENSOR_DATA_MSB , BNO055_SENSOR_DATA_EULER_LSB , BNO055_SENSOR_DATA_EULER_MSB , BNO055_SENSOR_DATA_QUATERNION_LSB , BNO055_SENSOR_DATA_QUATERNION_MSB, BNO055_SENSOR_DATA_QUATERNION_WXYZ_W_LSB , BNO055_SENSOR_DATA_QUATERNION_WXYZ_W_MSB , BNO055_SENSOR_DATA_QUATERNION_WXYZ_X_LSB , BNO055_SENSOR_DATA_QUATERNION_WXYZ_X_MSB , BNO055_SENSOR_DATA_QUATERNION_WXYZ_Y_LSB , BNO055_SENSOR_DATA_QUATERNION_WXYZ_Y_MSB , BNO055_SENSOR_DATA_QUATERNION_WXYZ_Z_LSB , BNO055_SENSOR_DATA_QUATERNION_WXYZ_Z_MSB , BNO055_SENSOR_DATA_XYZ_X_LSB , BNO055_SENSOR_DATA_XYZ_X_MSB , BNO055_SENSOR_DATA_XYZ_Y_LSB , BNO055_SENSOR_DATA_XYZ_Y_MSB , BNO055_SENSOR_DATA_XYZ_Z_LSB , BNO055_SENSOR_DATA_XYZ_Z_MSB , BNO055_SENSOR_DATA_EULER_HRP_H_LSB , BNO055_SENSOR_DATA_EULER_HRP_H_MSB , BNO055_SENSOR_DATA_EULER_HRP_R_LSB , BNO055_SENSOR_DATA_EULER_HRP_R_MSB , BNO055_SENSOR_DATA_EULER_HRP_P_LSB , BNO055_SENSOR_DATA_EULER_HRP_P_MSB , BNO055_SOFT_IRON_CALIB_0_LSB , BNO055_SOFT_IRON_CALIB_0_MSB , BNO055_SOFT_IRON_CALIB_1_LSB , BNO055_SOFT_IRON_CALIB_1_MSB , BNO055_SOFT_IRON_CALIB_2_LSB , BNO055_SOFT_IRON_CALIB_2_MSB , BNO055_SOFT_IRON_CALIB_3_LSB , BNO055_SOFT_IRON_CALIB_3_MSB , BNO055_SOFT_IRON_CALIB_4_LSB , BNO055_SOFT_IRON_CALIB_4_MSB , BNO055_SOFT_IRON_CALIB_5_LSB , BNO055_SOFT_IRON_CALIB_5_MSB , BNO055_SOFT_IRON_CALIB_6_LSB , BNO055_SOFT_IRON_CALIB_6_MSB , BNO055_SOFT_IRON_CALIB_7_LSB , BNO055_SOFT_IRON_CALIB_7_MSB , BNO055_SOFT_IRON_CALIB_8_LSB , BNO055_SOFT_IRON_CALIB_8_MSB , BNO055_SENSOR_OFFSET_DATA_X_LSB , BNO055_SENSOR_OFFSET_DATA_X_MSB , BNO055_SENSOR_OFFSET_DATA_Y_LSB , BNO055_SENSOR_OFFSET_DATA_Y_MSB , BNO055_SENSOR_OFFSET_DATA_Z_LSB , BNO055_SENSOR_OFFSET_DATA_Z_MSB , BNO055_OFFSET_RADIUS_LSB , BNO055_OFFSET_RADIUS_MSB}
