text: /*---------------------------------------------------------------------------*/
  /* Includes*/
  /*---------------------------------------------------------------------------*/
  #include "bma2x2.h"
  #include "iic.h"
  
   /*	\Brief: The function is used as I2C bus read
   *	\Return : Status of the I2C read
   *	\param dev_addr : The device address of the sensor
   *	\param reg_addr : Address of the first register,
   *               will data is going to be read
   *	\param reg_data : This data read from the sensor,
   *               which is hold in an array
   *	\param cnt : The no of byte of data to be read
   */
  s8 BMA2x2_I2C_bus_read(u8 dev_addr, u8 reg_addr, u8 *reg_data, u8 cnt);
   /*	\Brief: The function is used as I2C bus write
   *	\Return : Status of the I2C write
   *	\param dev_addr : The device address of the sensor
   *	\param reg_addr : Address of the first register,
   *              will data is going to be written
   *	\param reg_data : It is a value hold in the array,
   *		will be used for write the value into the register
   *	\param cnt : The no of byte of data to be write
   */
  s8 BMA2x2_I2C_bus_write(u8 dev_addr, u8 reg_addr, u8 *reg_data, u8 cnt);
  
  /*
   * \Brief: SPI/I2C init routine
  */
  s8 I2C_routine(void);
  
  /********************End of I2C/SPI function declarations*******************/
  /*	Brief : The delay routine
   *	\param : delay in ms
   */
  void BMA2x2_delay_msek(u32 msek);
  /*!
   *	@brief This function is an example for delay
   *	@param : None
   *	@return : communication result
   */
  s32 bma2x2_data_readout_template(void);
  /*----------------------------------------------------------------------------*
  *  struct bma2x2_t parameters can be accessed by using bma2x2
   *	bma2x2_t having the following parameters
   *	Bus write function pointer: BMA2x2_WR_FUNC_PTR
   *	Bus read function pointer: BMA2x2_RD_FUNC_PTR
   *	Burst read function pointer: BMA2x2_BRD_FUNC_PTR
   *	Delay function pointer: delay_msec
   *	I2C address: dev_addr
   *	Chip id of the sensor: chip_id
   *---------------------------------------------------------------------------*/
  struct bma2x2_t bma2x2 =
  {
      	.dev_addr = BMA2x2_I2C_ADDR1,
  		.bus_write = BMA2x2_I2C_bus_write,
          .bus_read = BMA2x2_I2C_bus_read,
          .delay_msec = BMA2x2_delay_msek,
  };
  
  /*----------------------------------------------------------------------------*
  *  V_BMA2x2RESOLUTION_u8R used for selecting the accelerometer resolution
   *	12 bit
   *	14 bit
   *	10 bit
  *----------------------------------------------------------------------------*/
  extern u8 V_BMA2x2RESOLUTION_u8R;
  /* This function is an example for reading sensor data
   *	\param: None
   *	\return: communication result
   */
  
  s32 bma2x2_power_on()
  {
  	/* Local variable used to assign the bandwidth value*/
  	u8 bw_value_u8 = BMA2x2_INIT_VALUE;
  	/* Local variable used to set the bandwidth value*/
  	u8 banwid = BMA2x2_INIT_VALUE;
      /* status of communication*/
  	s32 com_rslt = ERROR;
  
   /*--------------------------------------------------------------------------*
   *  This function used to assign the value/reference of
   *	the following parameters
   *	I2C address
   *	Bus Write
   *	Bus read
   *	Chip id
   *-------------------------------------------------------------------------*/
  	com_rslt = bma2x2_init(&bma2x2);
  
  /*	For initialization it is required to set the mode of
   *	the sensor as "NORMAL"
   *	NORMAL mode is set from the register 0x11 and 0x12
   *	0x11 -> bit 5,6,7 -> set value as 0
   *	0x12 -> bit 5,6 -> set value as 0
   *	data acquisition/read/write is possible in this mode
   *	by using the below API able to set the power mode as NORMAL
   *	For the Normal/standby/Low power 2 mode Idle time
  		of at least 2us(micro seconds)
   *	required for read/write operations*/
  	/* Set the power mode as NORMAL*/
  	com_rslt += bma2x2_set_power_mode(BMA2x2_MODE_NORMAL);
  /*	Note:
  	* For the Suspend/Low power1 mode Idle time of
  		at least 450us(micro seconds)
  	* required for read/write operations*/
  
  /************************* END INITIALIZATION *************************/
  
  /*------------------------------------------------------------------------*
  ************************* START GET and SET FUNCTIONS DATA ****************
  *---------------------------------------------------------------------------*/
  	/* This API used to Write the bandwidth of the sensor input
  	value have to be given
  	bandwidth is set from the register 0x10 bits from 1 to 4*/
  	bw_value_u8 = 0x08;/* set bandwidth of 7.81Hz*/
  	com_rslt += bma2x2_set_bw(bw_value_u8);
  
  	/* This API used to read back the written value of bandwidth*/
  	com_rslt += bma2x2_get_bw(&banwid);
  
      return com_rslt;
  }
  
  s32 bma2x2_power_down(void)
  {
      return bma2x2_set_power_mode(BMA2x2_MODE_DEEP_SUSPEND);
  }
  
  s32 bma2x2_data_readout_template(void)
  {
  	/*Local variables for reading accel x, y and z data*/
  	s16	accel_x_s16, accel_y_s16, accel_z_s16 = BMA2x2_INIT_VALUE;
  
  	/* bma2x2acc_data structure used to read accel xyz data*/
  	struct bma2x2_accel_data sample_xyz;
  	/* bma2x2acc_data_temp structure used to read
  		accel xyz and temperature data*/
  	struct bma2x2_accel_data_temp sample_xyzt;
  
      /* status of communication*/
  	s32 com_rslt = ERROR;
  
      com_rslt += bma2x2_power_on();
  
  /*-----------------------------------------------------------------*
  ************************* END GET and SET FUNCTIONS ****************
  *-------------------------------------------------------------------*/
  /*------------------------------------------------------------------*
  ************************* START READ SENSOR DATA(X,Y and Z axis) ********
  *---------------------------------------------------------------------*/
  	/* Read the accel X data*/
  	com_rslt += bma2x2_read_accel_x(&accel_x_s16);
  	/* Read the accel Y data*/
  	com_rslt += bma2x2_read_accel_y(&accel_y_s16);
  	/* Read the accel Z data*/
  	com_rslt += bma2x2_read_accel_z(&accel_z_s16);
  
  	/* accessing the bma2x2acc_data parameter by using sample_xyz*/
  	/* Read the accel XYZ data*/
  	com_rslt += bma2x2_read_accel_xyz(&sample_xyz);
  
  	/* accessing the bma2x2acc_data_temp parameter by using sample_xyzt*/
  	/* Read the accel XYZT data*/
  	com_rslt += bma2x2_read_accel_xyzt(&sample_xyzt);
  
  /*--------------------------------------------------------------------*
  ************************* END READ SENSOR DATA(X,Y and Z axis) ************
  *-------------------------------------------------------------------------*/
  /*-----------------------------------------------------------------------*
  ************************* START DE-INITIALIZATION ***********************
  *-------------------------------------------------------------------------*/
  /*	For de-initialization it is required to set the mode of
   *	the sensor as "DEEP SUSPEND"
   *	DEEP SUSPEND mode is set from the register 0x11
   *	0x11 -> bit 5 -> set value as 1
   *	the device reaches the lowest power consumption only
   *	interface selection is kept alive
   *	No data acquisition is performed
   *	by using the below API able to set the power mode as DEEPSUSPEND*/
   /* Set the power mode as DEEPSUSPEND*/
  	com_rslt += bma2x2_power_down();
  /*---------------------------------------------------------------------*
  ************************* END DE-INITIALIZATION **********************
  *---------------------------------------------------------------------*/
  return com_rslt;
  }
  
  /************** I2C/SPI buffer length ******/
  #define	I2C_BUFFER_LEN 8
  #define SPI_BUFFER_LEN 5
  #define BMA2x2_BUS_READ_WRITE_ARRAY_INDEX	1
  #define BMA2x2_SPI_BUS_WRITE_CONTROL_BYTE	0x7F
  #define BMA2x2_SPI_BUS_READ_CONTROL_BYTE	0x80
  
  /*-------------------------------------------------------------------*
  *	This is a sample code for read and write the data by using I2C/SPI
  *	Use either I2C or SPI based on your need
  *
  *-----------------------------------------------------------------------*/
  /*	For configuring the I2C it is required to switch ON
   *	SDI, SDO and CLk and also select the device address
   * The following definition of I2C address is used for the following sensors
   * BMA255
   * BMA253
   * BMA355
   * BMA280
   * BMA282
   * BMA223
   * BMA254
   * BMA284
   * BMA250E
   * BMA222E
  
   #define BMA2x2_I2C_ADDR1         0x18
   #define BMA2x2_I2C_ADDR2         0x19
  
   * The following definition of I2C address is used for the following sensors
   * BMC150
   * BMC056
   * BMC156
  
   #define BMA2x2_I2C_ADDR3        0x10
   #define BMA2x2_I2C_ADDR4        0x11
   *************************************************************************/
   /*	\Brief: The function is used as I2C bus write
   *	\Return : Status of the I2C write
   *	\param dev_addr : The device address of the sensor
   *	\param reg_addr : Address of the first register,
   *              will data is going to be written
   *	\param reg_data : It is a value hold in the array,
   *		will be used for write the value into the register
   *	\param cnt : The no of byte of data to be write
   */
  s8 BMA2x2_I2C_bus_write(u8 dev_addr, u8 reg_addr, u8 *reg_data, u8 cnt)
  {
  	s32 iError = BMA2x2_INIT_VALUE;
      u8 array[I2C_BUFFER_LEN];
  	u8 stringpos = 0;
  	array[0] = reg_addr;
  	for (stringpos = 0; stringpos < cnt; stringpos++) {
  		array[stringpos + 1] = reg_data[stringpos];
  	}
  
  	i2c_write(I2C_PORT_0, dev_addr, array, cnt + 1);
  	return (s8)iError;
  }
  
   /*   \Brief: The function is used as I2C bus read
   *    \Return : Status of the I2C read
   *    \param dev_addr : The device address of the sensor
   *    \param reg_addr : Address of the first register,
   *            will data is going to be read
   *    \param reg_data : This data read from the sensor,
   *            which is hold in an array
   *    \param cnt : The no of byte of data to be read
   */
  s8 BMA2x2_I2C_bus_read(u8 dev_addr, u8 reg_addr, u8 *reg_data, u8 cnt)
  {
  	s32 iError = BMA2x2_INIT_VALUE;
  
      //reg_data[0] = I2C_READ_BYTE(dev_addr, reg_addr);
  	i2c_read(I2C_PORT_0, dev_addr, &reg_addr, 1, reg_data, cnt);
  	return (s8)iError;
  }
  