Skip to content
Snippets Groups Projects
Forked from card10 / firmware
1842 commits behind the upstream repository.
bhy.c 157.62 KiB
/*
****************************************************************************
* Copyright (C) 2015 - 2016 Bosch Sensortec GmbH
*
* File : bhy.c
*
* Date : 2016/01/22
*
* Revision : 1.0.4 $
*
* Usage: Sensor Driver for BHY sensor
*
****************************************************************************
* 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 <BHY >
    brief <Sensor driver for BHY> */
#include "bhy.h"
/* static structure for bhy */
static struct bhy_t *p_bhy;
/* contain the saved parameters data*/
static struct parameter_read_buffer_t read_buffer;
/* contain the load parameters data*/
static struct parameter_write_buffer_t write_buffer;
/* Assign the sensor status bank*/
struct sensor_status_bank_t sensor_status_bank;

/*!
 *  @brief
 *  This function is used for initialize
 *  bus read and bus write functions
 *  and device address
 *  product id is read in the register 0x90 bit from 0 to 7
 *
 *  @param bhy : structure pointer
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *  @note
 *  While changing the parameter of the bhy_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)
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_init(struct bhy_t *bhy)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8 = BHY_INIT_VALUE;
    /* assign bhy ptr */
    p_bhy = bhy;
    com_rslt =
    p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
    BHY_I2C_REG_PRODUCT_ID_ADDR,
    &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
    /* read product Id */
    p_bhy->product_id = v_data_u8;
    return com_rslt;
}
/*!
 * @brief
 *  This API write the data to
 *  the given register
 *
 *
 *  @param v_addr_u8 -> Address of the register
 *  @param v_data_u8 -> The data from the register
 *  @param v_len_u8 -> no of bytes to read
 *
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 */
BHY_RETURN_FUNCTION_TYPE bhy_write_reg(u8 v_addr_u8,
u8 *v_data_u8, u16 v_len_u16)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    /* check the p_bhy structure as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
            /* write data from register*/
            com_rslt =
            p_bhy->BHY_BUS_WRITE_FUNC(p_bhy->device_addr,
            v_addr_u8, v_data_u8, v_len_u16);
        }
    return com_rslt;
}
/*!
 * @brief
 *  This API reads the data from
 *  the given register
 *
 *
 *  @param v_addr_u8 -> Address of the register
 *  @param v_data_u8 -> The data from the register
 *  @param v_len_u8 -> no of bytes to read
 *
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 */
BHY_RETURN_FUNCTION_TYPE bhy_read_reg(u8 v_addr_u8,
u8 *v_data_u8, u16 v_len_u16)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    /* check the p_bhy structure as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
            /* Read data from register*/
            com_rslt =
            p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
            v_addr_u8, v_data_u8, v_len_u16);
        }
    return com_rslt;
}
/*!
 *  @brief API used to get the FIFO flush from the register 0x32
 *  bit 0 to 7
 *
 *
 *  @param v_fifo_flush_u8 : The value of fifo flush
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_fifo_flush(u8 *v_fifo_flush_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8 = BHY_INIT_VALUE;

    if (BHY_NULL_PTR == p_bhy) {
        com_rslt = BHY_NULL;
        } else {
            com_rslt =
            p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
            BHY_I2C_REG_FIFO_FLUSH__REG,
            &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
            *v_fifo_flush_u8 = BHY_GET_BITSLICE(v_data_u8,
            BHY_I2C_REG_FIFO_FLUSH);
    }
    return com_rslt;
}
/*!
 *  @brief API used to set the FIFO flush from the register 0x32
 *  bit 0 to 7
 *
 *
 *  @param v_fifo_flush_u8 : The value of fifo flush
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_set_fifo_flush(u8 v_fifo_flush_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8 = BHY_INIT_VALUE;

    if (BHY_NULL_PTR == p_bhy) {
        com_rslt = BHY_NULL;
        } else {
        com_rslt =
        p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
        BHY_I2C_REG_FIFO_FLUSH__REG,
        &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
        if (BHY_SUCCESS == com_rslt) {
            v_data_u8 = BHY_SET_BITSLICE(v_data_u8,
            BHY_I2C_REG_FIFO_FLUSH,
            v_fifo_flush_u8);
            com_rslt += p_bhy->BHY_BUS_WRITE_FUNC
            (p_bhy->device_addr,
            BHY_I2C_REG_FIFO_FLUSH__REG,
            &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
        }
    }
    return com_rslt;
}
/*!
 *  @brief API used to get the chip control from the register 0x34
 *  bit 0 to 7
 *  @note Chip control used to provide the control fundamental
 *  behaviour of the chip
 *
 *  @param v_chipcontrol_u8 : The value of chip control
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_chip_control(u8 *v_chipcontrol_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8 = BHY_INIT_VALUE;
    /* check the p_bhy structure as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
            /* read the chip control status*/
            com_rslt =
            p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
            BHY_I2C_REG_CHIP_CONTROL__REG,
            &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
            *v_chipcontrol_u8 = BHY_GET_BITSLICE(v_data_u8,
            BHY_I2C_REG_CHIP_CONTROL);
        }
    return com_rslt;
}
/*!
 *  @brief API used to set the chip control from the register 0x34
 *  bit 0 to 7
 *  @note Chip control used to provide the control fundamental
 *  behaviour of the chip
 *
 *  @param v_chipcontrol_u8 : The value of chip control
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_set_chip_control(u8 v_chipcontrol_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8 = BHY_INIT_VALUE;
    /* check the p_bhy structure as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
        com_rslt =
        p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
        BHY_I2C_REG_CHIP_CONTROL__REG,
        &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
        if (BHY_SUCCESS == com_rslt) {
            v_data_u8 = BHY_SET_BITSLICE(v_data_u8,
            BHY_I2C_REG_CHIP_CONTROL,
            v_chipcontrol_u8);
            com_rslt += p_bhy->BHY_BUS_WRITE_FUNC
            (p_bhy->device_addr,
            BHY_I2C_REG_CHIP_CONTROL__REG,
            &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
        }
    }
    return com_rslt;
}
/*!
 *  @brief API used to get the host status from the register 0x35
 *  bit 0 to 7
 *
 *
 *  @param v_algo_standby_u8 : The value of algorithm standby duration
 *  @param v_algo_id_u8 : The value of algorithm id
 *  @param v_host_interface_id_u8 : The value of host interface id
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_host_status(
u8 *v_algo_standby_u8, u8 *v_algo_id_u8,
u8 *v_host_interface_id_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8 = BHY_INIT_VALUE;
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
        /* read the host status*/
        com_rslt =
        p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
        BHY_I2C_REG_HOST_STATUS__REG,
        &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
        /* read the host algo status*/
        *v_algo_standby_u8 = BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_HOST_STATUS_ALGO_STANDBY);
        /* read the host algo id */
        *v_algo_id_u8 = BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_BHY_HOST_STATUS_ALGO_ID);
        /* host interface id */
        *v_host_interface_id_u8 = BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_BHY_HOST_INTERFACE_ID);
        }
    return com_rslt;
}
/*!
 *  @brief API used to get the interrupt status from the register 0x36
 *  bit 0 to 7
 *
 *
 *  @param v_host_int_u8 :
 *  The value of host interrupt status
 *  @param v_wakeup_water_mark_u8 :
 *  The value of wakeup watermark status
 *  @param v_wakeup_latency_u8 :
 *  The value of wakeup latency status
 *  @param v_wakeup_immediate_u8 :
 *  The value of wakeup immediate status
 *  @param v_non_wakeup_water_mark_u8 :
 *  The value of non wakeup watermark status
 *  @param v_non_wakeup_latency_u8 :
 *  The value of non wakeup latency status
 *  @param v_non_wakeup_immediate_u8 :
 *  The value of non wakeup immediate
 *
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_interrupt_status(
u8 *v_host_int_u8,
u8 *v_wakeup_water_mark_u8, u8 *v_wakeup_latency_u8,
u8 *v_wakeup_immediate_u8, u8 *v_non_wakeup_water_mark_u8,
u8 *v_non_wakeup_latency_u8, u8 *v_non_wakeup_immediate_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8 = BHY_INIT_VALUE;
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
        /* read the interrupt status*/
        com_rslt =
        p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
        BHY_I2C_REG_INT_STATUS__REG,
        &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
        /* read the host interrupt status*/
        *v_host_int_u8 = BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_BHY_INT_STATUS_HOST_INTR);
        /* read the wakeup watermark interrupt status*/
        *v_wakeup_water_mark_u8 = BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_WM);
        /* read the wakeup latency interrupt status*/
        *v_wakeup_latency_u8 = BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_LATENCY);
        /* read the wakeup immediate interrupt status*/
        *v_wakeup_immediate_u8 = BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_BHY_INT_STATUS_WAKEUP_IMMEDIATE);
        /* read the non wakeup watermark interrupt status*/
        *v_non_wakeup_water_mark_u8 = BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_BHY_INT_STATUS_NON_WAKEUP_WM);
        /* read the non wakeup latency interrupt status*/
        *v_non_wakeup_latency_u8 = BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_INT_STATUS_NON_WAKEUP_LATENCY);
        /* read the non wakeup immediate status*/
        *v_non_wakeup_immediate_u8 = BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_INT_STATUS_NON_WAKEUP_IMMEDIATE);
        }
    return com_rslt;
}
/*!
 *  @brief API used to get the chip status from the register 0x37
 *  bit 0 to 7
 *
 *
 *
 *  @param v_eeprom_detected_u8 : The value of eeprom
 *  detected status
 *  @param v_ee_upload_done_u8 : The value of ee_upload
 *  done status
 *  @param v_ee_upload_error_u8 : The value of ee_upload
 *  done error
 *  @param v_firmware_idle_u8 : The value of firmware error status
 *  @param v_no_eeprom_u8 : The value of no eeprom status
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_chip_status(
u8 *v_eeprom_detected_u8,
u8 *v_ee_upload_done_u8, u8 *v_ee_upload_error_u8,
u8 *v_firmware_idle_u8, u8 *v_no_eeprom_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8 = BHY_INIT_VALUE;
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
            /* read the chip status*/
            com_rslt =
            p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
            BHY_I2C_REG_CHIP_STATUS__REG,
            &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
            /* read eeprom detected status*/
            *v_eeprom_detected_u8 = BHY_GET_BITSLICE(v_data_u8,
            BHY_I2C_REG_CHIP_STATUS_EEPROM_DETECTED);
            /* read eeprom upload done status*/
            *v_ee_upload_done_u8 = BHY_GET_BITSLICE(v_data_u8,
            BHY_I2C_REG_CHIP_STATUS_EE_UPLOAD_DONE);
            /* read eeprom upload error status*/
            *v_ee_upload_error_u8 = BHY_GET_BITSLICE(v_data_u8,
            BHY_I2C_REG_CHIP_STATUS_EE_UPLOAD_ERROR);
            /* read firmware idle status*/
            *v_firmware_idle_u8 = BHY_GET_BITSLICE(v_data_u8,
            BHY_I2C_REG_CHIP_STATUS_FIRMWARE_IDLE);
            /* read no eeprom detected status*/
            *v_no_eeprom_u8 = BHY_GET_BITSLICE(v_data_u8,
            BHY_I2C_REG_CHIP_STATUS_NO_EEPROM);
        }
    return com_rslt;
}
/*!
 *  @brief API used to get the bytes remaining from the register 0x38
 *  and 0x39 bit 0 to 7
 *
 *
 *  @param v_bytes_remaining_u16 : The value of bytes remaining
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *  @note This indicates how many bytes are available in the FIFO buffer
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_read_bytes_remaining(u16 *v_bytes_remaining_u16)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    /* Array contains the bytes reaming of FIFO lSB and MSB data
        v_data_u8[LSB_ZERO] - LSB
        v_data_u8[MSB_ONE] - MSB*/
    u8 v_data_u8[BHY_BYTES_REMAINING_SIZE] = {BHY_INIT_VALUE,
    BHY_INIT_VALUE};
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt = BHY_NULL;
        } else {
            /* read bytes remaining data */
            com_rslt =
            p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
            BHY_I2C_REG_BYTES_REMAINING_LSB_ADDR,
            v_data_u8, BHY_BYTES_REMAINING_LENGTH);
            /* get the bytes remaining data*/
            *v_bytes_remaining_u16 = (u16)
            ((v_data_u8[BHY_BYTES_REMAINING_MSB]
            << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
            | (v_data_u8[BHY_BYTES_REMAINING_LSB]));
        }
    return com_rslt;
}
/*!
 *  @brief API used to get the parameter
 *  acknowledgement from the register 0x3A
 *  bit 0 to 7
 *
 *
 *  @param v_parameter_acknowledge_u8:
 *  The value of parameter acknowledgement
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_parameter_acknowledge(
u8 *v_parameter_acknowledge_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8 = BHY_INIT_VALUE;
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
            /* read the parameter acknowledgement*/
            com_rslt =
            p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
            BHY_I2C_REG_PARAMETER_ACKNOWLEDGE_ADDR,
            &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
            *v_parameter_acknowledge_u8 = v_data_u8;
        }
    return com_rslt;
}
/*!
 *  @brief API used to get the parameter
 *  page select from the register 0x54
 *  bit 0 to 7
 *
 *
 *  @param v_page_select_u8 : The value of parameter page selection
 *       page information      |   value
 *     ------------------------|----------
 *     BHY_PAGE_SELECT_PARAMETER_PAGE  | 0
 *     BHY_PAGE_SELECT_PARAMETER_SIZE  | 1
 *
 *  @param v_parameter_page_u8 : The value of page selection
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_parameter_page_select(
u8 v_page_select_u8, u8 *v_parameter_page_u8)
{
/* variable used for return the status of communication result*/
BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
u8 v_data_u8 = BHY_INIT_VALUE;
/* check the p_bhy pointer as NULL*/
if (BHY_NULL_PTR == p_bhy) {
    com_rslt =  BHY_NULL;
    } else {
        /* read the parameter page information*/
        com_rslt =
        p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
        BHY_I2C_REG_PARAMETER_PAGE_SELECT__REG,
        &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
        switch (v_page_select_u8) {
        case BHY_PAGE_SELECT_PARAMETER_PAGE:
            *v_parameter_page_u8 = BHY_GET_BITSLICE(v_data_u8,
            BHY_I2C_REG_PARAMETER_PAGE_SELECT_PARAMETER_PAGE);
        break;
        case BHY_PAGE_SELECT_PARAMETER_SIZE:
            *v_parameter_page_u8
            = BHY_GET_BITSLICE(v_data_u8,
            BHY_I2C_REG_PARAMETER_PAGE_SELECT_PARAMETER_SIZE);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    }
return com_rslt;
}
/*!
 *  @brief API used to set the parameter
 *  page select from the register 0x54
 *  bit 0 to 7
 *
 *
 *  @param v_page_select_u8 : The value of parameter page selection
 *
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_set_parameter_page_select(
u8 v_page_select_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8 = BHY_INIT_VALUE;
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
            v_data_u8 = v_page_select_u8;
            /* read the parameter page information*/
            com_rslt = p_bhy->BHY_BUS_WRITE_FUNC
            (p_bhy->device_addr,
            BHY_I2C_REG_PARAMETER_PAGE_SELECT__REG,
            &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
            }
            return com_rslt;
        }

/*!
 *  @brief API used to get the host interface control
 *  from the register 0x55
 *  bit 0 to 7
 *
 *
 *
 *  @param v_algo_standby_req_u8 : The value of algorithm standby
 *  request
 *  @param v_abort_transfer_u8 : The value of abort transfer
 *  @param v_update_transfer_cnt_u8 : The value of update
 *  transfer count
 *  @param v_wakeup_fifo_intr_disable_u8 :
 *  The value of wakeup fifo host
 *  interrupt disable
 *  @param v_ned_coordinates_u8 : The value of NED coordinates
 *  @param v_ap_suspend_u8 : The value of AP suspended
 *  @param v_sensor_selftest_u8 : The value of sensor self test
 *  @param v_non_wakeup_fifo_intr_disable_u8:
 *  The value of non wakeup fifo host
 *  interrupt disable
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_host_interface_control(
u8 *v_algo_standby_req_u8,
u8 *v_abort_transfer_u8, u8 *v_update_transfer_cnt_u8,
u8 *v_wakeup_fifo_intr_disable_u8, u8 *v_ned_coordinates_u8,
u8 *v_ap_suspend_u8, u8 *v_sensor_selftest_u8,
u8 *v_non_wakeup_fifo_intr_disable_u8)
{
/* variable used for return the status of communication result*/
BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
u8 v_data_u8 = BHY_INIT_VALUE;
/* check the p_bhy pointer as NULL*/
if (BHY_NULL_PTR == p_bhy) {
    com_rslt =  BHY_NULL;
    } else {
        /* read the host interrupt status*/
        com_rslt =
        p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_ADDR,
        &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
        /* read algorithm standby request status*/
        *v_algo_standby_req_u8 = BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_ALGO_STABDY_REQUEST);
        /* read host interrupt control status*/
        *v_abort_transfer_u8 = BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_ABORT_TRANSFER);
        /* read update transfer control status*/
        *v_update_transfer_cnt_u8 = BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_TRANSFER_COUNT);
        /* read wakeup fifo host interrupt disable status*/
        *v_wakeup_fifo_intr_disable_u8 = BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_WAKEUP_FIFO_DISABLE);
        /* read ned coordinates status*/
        *v_ned_coordinates_u8 = BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_NED_COORDINATE);
        /* read AP suspended status*/
        *v_ap_suspend_u8 = BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_AP_SUSPEND);
        /* read self test status*/
        *v_sensor_selftest_u8 = BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_SELFTEST);
        /* read non wakeup fifo host interrupt disable status*/
        *v_non_wakeup_fifo_intr_disable_u8 =
        BHY_GET_BITSLICE(v_data_u8,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_NON_WAKEUP_FIFO_DISABLE);
    }
return com_rslt;
}
/*!
 *  @brief API used to set the host interface control
 *  from the register 0x55
 *  bit 0 to 7
 *
 *
 *  @param v_host_interface_select_u8 : The value of host interface selection
 *         host interface                 |   value
 *     -----------------------------------|----------
 *     BHY_HOST_ALGO_STANDBY_REQUEST      | 0
 *     BHY_HOST_ABORT_TRANSFER            | 1
 *     BHY_HOST_UPDATE_TRANSFER_COUNT     | 2
 *     BHY_HOST_WAKEUP_FIFO_DISABLE       | 3
 *     BHY_HOST_NED_COORDINATE            | 4
 *     BHY_HOST_AP_SUSPEND                | 5
 *     BHY_HOST_SELFTEST                  | 6
 *     BHY_HOST_NON_WAKEUP_FIFO_DISABLE   | 7
 *
 *  @param v_host_interface_status_u8 : The value of host interface
 *       Data        |  status
 *  -----------------| -----------
 *       0           |  DISABLE
 *       1           |  ENABLE
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_set_host_interface_control(
u8 v_host_interface_select_u8, u8 v_host_interface_status_u8)
{
/* variable used for return the status of communication result*/
BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
u8 v_data_u8 = BHY_INIT_VALUE;
/* check the p_bhy pointer as NULL*/
if (BHY_NULL_PTR == p_bhy) {
    com_rslt =  BHY_NULL;
} else {
switch (v_host_interface_select_u8) {
case BHY_HOST_ALGO_STANDBY_REQUEST:
    /* write algorithm standby request status*/
    com_rslt =
    p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
    BHY_I2C_REG_HOST_INTERFACE_CONTROL_ALGO_STABDY_REQUEST__REG,
    &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
    if (BHY_SUCCESS == com_rslt) {
        v_data_u8 = BHY_SET_BITSLICE(v_data_u8,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_ALGO_STABDY_REQUEST,
        v_host_interface_status_u8);
        com_rslt += p_bhy->BHY_BUS_WRITE_FUNC
        (p_bhy->device_addr,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_ALGO_STABDY_REQUEST__REG,
        &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
    }
break;
case BHY_HOST_ABORT_TRANSFER:
    /* write host interrupt control status*/
    com_rslt =
    p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
    BHY_I2C_REG_HOST_INTERFACE_CONTROL_ABORT_TRANSFER__REG,
    &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
    if (BHY_SUCCESS == com_rslt) {
        v_data_u8 = BHY_SET_BITSLICE(v_data_u8,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_ABORT_TRANSFER,
        v_host_interface_status_u8);
        com_rslt += p_bhy->BHY_BUS_WRITE_FUNC
        (p_bhy->device_addr,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_ABORT_TRANSFER__REG,
        &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
    }
break;
case BHY_HOST_UPDATE_TRANSFER_COUNT:
    /* write update transfer control status*/
    com_rslt =
    p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
    BHY_I2C_REG_HOST_INTERFACE_CONTROL_TRANSFER_COUNT__REG,
    &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
    if (BHY_SUCCESS == com_rslt) {
        v_data_u8 = BHY_SET_BITSLICE(v_data_u8,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_TRANSFER_COUNT,
        v_host_interface_status_u8);
        com_rslt += p_bhy->BHY_BUS_WRITE_FUNC
        (p_bhy->device_addr,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_TRANSFER_COUNT__REG,
        &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
    }
break;
case BHY_HOST_WAKEUP_FIFO_DISABLE:
    /* write wakeup fifo host interrupt disable status*/
    com_rslt =
    p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
    BHY_I2C_REG_HOST_INTERFACE_CONTROL_WAKEUP_FIFO_DISABLE__REG,
    &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
    if (BHY_SUCCESS == com_rslt) {
        v_data_u8 = BHY_SET_BITSLICE(v_data_u8,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_WAKEUP_FIFO_DISABLE,
        v_host_interface_status_u8);
        com_rslt += p_bhy->BHY_BUS_WRITE_FUNC
        (p_bhy->device_addr,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_WAKEUP_FIFO_DISABLE__REG,
        &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
    }
break;
case BHY_HOST_NED_COORDINATE:
    /* write ned coordinates status*/
    com_rslt =
    p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
    BHY_I2C_REG_HOST_INTERFACE_CONTROL_NED_COORDINATE__REG,
    &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
    if (BHY_SUCCESS == com_rslt) {
        v_data_u8 = BHY_SET_BITSLICE(v_data_u8,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_NED_COORDINATE,
        v_host_interface_status_u8);
        com_rslt += p_bhy->BHY_BUS_WRITE_FUNC
        (p_bhy->device_addr,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_NED_COORDINATE__REG,
        &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
    }
break;
case BHY_HOST_AP_SUSPEND:
    /* write AP suspended status*/
    com_rslt =
    p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
    BHY_I2C_REG_HOST_INTERFACE_CONTROL_AP_SUSPEND__REG,
    &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
    if (BHY_SUCCESS == com_rslt) {
        v_data_u8 = BHY_SET_BITSLICE(v_data_u8,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_AP_SUSPEND,
        v_host_interface_status_u8);
        com_rslt += p_bhy->BHY_BUS_WRITE_FUNC
        (p_bhy->device_addr,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_AP_SUSPEND__REG,
        &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
    }
break;
case BHY_HOST_SELFTEST:
    /* write self test status*/
    com_rslt =
    p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
    BHY_I2C_REG_HOST_INTERFACE_CONTROL_SELFTEST__REG,
    &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
    if (BHY_SUCCESS == com_rslt) {
        v_data_u8 = BHY_SET_BITSLICE(v_data_u8,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_SELFTEST,
        v_host_interface_status_u8);
        com_rslt += p_bhy->BHY_BUS_WRITE_FUNC
        (p_bhy->device_addr,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_SELFTEST__REG,
        &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
    }
break;
case BHY_HOST_NON_WAKEUP_FIFO_DISABLE:
/* write non wakeup fifo host interrupt disable status*/
    com_rslt =
    p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
    BHY_I2C_REG_HOST_INTERFACE_CONTROL_NON_WAKEUP_FIFO_DISABLE__REG,
    &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
    if (BHY_SUCCESS == com_rslt) {
        v_data_u8 = BHY_SET_BITSLICE(v_data_u8,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_NON_WAKEUP_FIFO_DISABLE,
        v_host_interface_status_u8);
        com_rslt += p_bhy->BHY_BUS_WRITE_FUNC
        (p_bhy->device_addr,
        BHY_I2C_REG_HOST_INTERFACE_CONTROL_NON_WAKEUP_FIFO_DISABLE__REG,
        &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
    }
break;
default:
    com_rslt = BHY_OUT_OF_RANGE;
break;
}
}
return com_rslt;
}
/*!
 *  @brief API used to get the parameter
 *  request from the register 0x64
 *  bit 0 to 7
 *
 *
 *  @param v_parameter_request_u8 : The value of parameter request
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_parameter_request(
u8 *v_parameter_request_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8 = BHY_INIT_VALUE;
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
            /* read the load parameter request rate*/
            com_rslt =
            p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
            BHY_I2C_REG_PARAMETER_REQUEST_ADDR,
            &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
            *v_parameter_request_u8 = v_data_u8;
        }
    return com_rslt;
}
/*!
 *  @brief API used to get the parameter
 *  request from the register 0x64
 *  bit 0 to 7
 *
 *
 *  @param v_parameter_request_u8 : The value of parameter request
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_set_parameter_request(
u8 v_parameter_request_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8 = BHY_INIT_VALUE;
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
            /* write load parameter request*/
             v_data_u8 = v_parameter_request_u8;
            com_rslt = p_bhy->BHY_BUS_WRITE_FUNC
            (p_bhy->device_addr,
            BHY_I2C_REG_LOAD_PARAMETER_REQUEST__REG,
            &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
        }
    return com_rslt;
}
/*!
 *  @brief API used to get the host IRQ time stamp
 *  request from the register 0x6C to 0x6F
 *  bit 0 to 7
 *
 *
 *  @param v_host_irq_timestamp_u32 : The value of host irq time stamp
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_host_irq_timestamp(
u32 *v_host_irq_timestamp_u32)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8[BHY_HOST_IRQ_TIMESTAMP_SIZE] = {BHY_INIT_VALUE,
    BHY_INIT_VALUE, BHY_INIT_VALUE, BHY_INIT_VALUE};
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
            /* read the load parameter request rate*/
            com_rslt =
            p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
            BHY_BHY_HOST_IRQ_TIMESTAMP_ADDR,
            v_data_u8, BHY_HOST_IRQ_TIMESTAMP_SIZE);
            *v_host_irq_timestamp_u32 =
            (u32)((v_data_u8[BHY_HOST_IRQ_TIMESTAMP_MSB_DATA]
            << BHY_SHIFT_BIT_POSITION_BY_24_BITS)
            |(v_data_u8[BHY_HOST_IRQ_TIMESTAMP_XXLSB_DATA]
            << BHY_SHIFT_BIT_POSITION_BY_16_BITS)
            |(v_data_u8[BHY_HOST_IRQ_TIMESTAMP_XLSB_DATA]
            << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
            | (v_data_u8[BHY_HOST_IRQ_TIMESTAMP_LSB_DATA]));
        }
    return com_rslt;
}
/*!
 *  @brief API used to get the ROM version
 *  request from the register 0x70 to 0x71
 *  bit 0 to 7
 *
 *
 *  @param v_rom_version_u16 : The value ROM version
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_rom_version(u16 *v_rom_version_u16)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8[BHY_ROM_VERSION_SIZE] = {BHY_INIT_VALUE,
    BHY_INIT_VALUE};
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
            /* read the load parameter request rate*/
            com_rslt =
            p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
            BHY_ROM_VERSION_ADDR,
            v_data_u8, BHY_ROM_VERSION_SIZE);
            *v_rom_version_u16 =
            (u16)((v_data_u8[BHY_ROM_VERSION_MSB_DATA]
            << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
            | (v_data_u8[BHY_ROM_VERSION_LSB_DATA]));
        }
    return com_rslt;
}
/*!
 *  @brief API used to get the RAM version
 *  request from the register 0x72 to 0x73
 *  bit 0 to 7
 *
 *
 *  @param v_ram_version_u16 : The value RAM version
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_ram_version(
u16 *v_ram_version_u16)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8[BHY_RAM_VERSION_SIZE] = {BHY_INIT_VALUE,
    BHY_INIT_VALUE};
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
            /* read the load parameter request rate*/
            com_rslt =
            p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
            BHY_RAM_VERSION_ADDR,
            v_data_u8, BHY_RAM_VERSION_SIZE);
            *v_ram_version_u16 =
            (u16)((v_data_u8[BHY_RAM_VERSION_MSB_DATA]
            << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
            | (v_data_u8[BHY_RAM_VERSION_LSB_DATA]));
        }
    return com_rslt;
}
/*!
 *  @brief API used to get the product id
 *  request from the register 0x90
 *  bit 0 to 7
 *
 *
 *  @param v_product_id_u8 : The value of product id
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_product_id(u8 *v_product_id_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8 = BHY_INIT_VALUE;
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
            /* read the load parameter request rate*/
            com_rslt =
            p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
            BHY_I2C_REG_PRODUCT_ID_ADDR,
            &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
            *v_product_id_u8 = v_data_u8;
        }
    return com_rslt;
}
/*!
 *  @brief API used to get the revision id
 *  request from the register 0x91
 *  bit 0 to 7
 *
 *
 *  @param v_revision_id_u8 : The value of revision id
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_revision_id(u8 *v_revision_id_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8 = BHY_INIT_VALUE;
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
            /* read the load parameter request rate*/
            com_rslt =
            p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
            BHY_I2C_REG_REVISION_ID_ADDR,
            &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
            *v_revision_id_u8 = v_data_u8;
        }
    return com_rslt;
}
/*!
 *  @brief API used to get the CRC host
 *  request from the register 0x91
 *  bit 0 to 7
 *
 *
 *  @param v_crc_host_u32 : The value of CRC host
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_crc_host(u32 *v_crc_host_u32)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    /* Array contains the sensor time it is 32 bit data
    a_data_u8[0] - crc HOST
    a_data_u8[1] - crc HOST
    a_data_u8[2] - crc HOST
    a_data_u8[3] - crc HOST
    */
    u8 a_data_u8[BHY_CRC_HOST_SIZE] = {BHY_INIT_VALUE,
    BHY_INIT_VALUE, BHY_INIT_VALUE, BHY_INIT_VALUE};
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
            com_rslt =
            p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
            BHY_I2C_REG_CRC_HOST_ADDR,
            a_data_u8, BHY_CRC_HOST_LENGTH);
            *v_crc_host_u32 = (u32)
            (((u32)a_data_u8[BHY_CRC_HOST_MSB]
            << BHY_SHIFT_BIT_POSITION_BY_24_BITS) |
            ((u32)a_data_u8[BHY_CRC_HOST_XXLSB]
            << BHY_SHIFT_BIT_POSITION_BY_16_BITS)
            |(a_data_u8[BHY_CRC_HOST_XLSB]
            << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
            | (a_data_u8[BHY_CRC_HOST_LSB]));
        }
    return com_rslt;
}
/*!
 *  @brief API used to set the reset
 *  request from the register 0x9B
 *  bit 0 to 7
 *
 *
 *  @param v_reset_request_u8 : The value of parameter request
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_set_reset_request(u8 v_reset_request_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8 = BHY_INIT_VALUE;
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
            v_data_u8 = v_reset_request_u8;
            /* write load parameter request*/
            com_rslt = p_bhy->BHY_BUS_WRITE_FUNC
            (p_bhy->device_addr,
            BHY_I2C_REG_RESET_REQUEST__REG,
            &v_data_u8, BHY_GEN_READ_WRITE_LENGTH);
        }
    return com_rslt;
}
/*!
 *  @brief API used to flash the ram patch
 *
 *
 *  @param memory : The value of data from the
 *  ram patch.
 *  @param v_file_length_u32 : Length of the patch data
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_initialize(u8 *memory, u32 v_file_length_u32)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_upload_addr = BHY_UPLOAD_DATA;
    u8 v_chip_control_u8 = BHY_CHIP_CTRL_ENABLE_1;
    u32 v_crc_from_memory_u32 = BHY_INIT_VALUE;
    u32 v_length_to_process_u32 = BHY_INIT_VALUE;
    u32 v_crc_host_u32 = BHY_INIT_VALUE;
    u32 write_data = BHY_INIT_VALUE;
    u8 data_from_mem[BHY_SIGNATURE_MEM_LEN];
    u8 data_byte[BHY_RAM_WRITE_LENGTH];
    u32 read_index_u8 = BHY_INIT_VALUE;
    s32 reverse_index_s32 = BHY_INIT_VALUE;
    u32 bytes_to_write_u8 = BHY_RAM_WRITE_LENGTH;
    u32 read_bytes_index = BHY_INIT_VALUE;
    u32 write_index_u32 = BHY_INIT_VALUE;
    u32 write_ram_index = BHY_INIT_VALUE;
    u32 index_mem = BHY_INIT_VALUE;
    u32 write_length = BHY_INIT_VALUE;
    u32 data_to_process = BHY_INIT_VALUE;
    u8 init_array_data = BHY_INIT_VALUE;
    /* initialize the array*/
    for (init_array_data = 0; init_array_data < BHY_SIGNATURE_MEM_LEN; init_array_data++)
    {
        data_from_mem[init_array_data] = BHY_INIT_VALUE;
    }
    for (init_array_data = BHY_INIT_VALUE; init_array_data < BHY_RAM_WRITE_LENGTH; init_array_data++)
    {
        data_byte[init_array_data] = BHY_INIT_VALUE;
    }
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy)
    {
        com_rslt =  BHY_NULL;
    }
    else
    {
        /* Assign the memory data into the local array*/
        for (read_index_u8 = BHY_INIT_VALUE; read_index_u8 <= BHY_SIGNATURE_LENGTH; read_index_u8++)
        {
            data_from_mem[read_index_u8] = *(memory+read_index_u8);
        }
        /* Verify the signature of the data*/
        if ((data_from_mem[BHY_SIGNATURE_1] == BHY_IMAGE_SIGNATURE1)
        && (data_from_mem[BHY_SIGNATURE_2] == BHY_IMAGE_SIGNATURE2))
        {
            com_rslt = BHY_SUCCESS;
        }
        else
        {
            com_rslt = BHY_ERROR;
        }
        /* read the CRC data from memory */
        v_crc_from_memory_u32 = (u32)
        (((u32)data_from_mem[BHY_CRC_HOST_FILE_MSB]
        << BHY_SHIFT_BIT_POSITION_BY_24_BITS) |
        ((u32)data_from_mem[BHY_CRC_HOST_FILE_XXLSB]
        << BHY_SHIFT_BIT_POSITION_BY_16_BITS)
        |(data_from_mem[BHY_CRC_HOST_FILE_XLSB]
        << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
        | (data_from_mem[BHY_CRC_HOST_FILE_LSB]));
        /* Remove the first 16 bytes*/
        data_to_process = v_file_length_u32 - BHY_SIGNATURE_LENGTH;
        /* data to write for length calculation*/
        v_length_to_process_u32 = (data_to_process / BHY_RAM_WRITE_LENGTH);
        read_index_u8 = BHY_SIGNATURE_LENGTH;
        read_bytes_index = BHY_INIT_READ_BYTES;
        for (write_index_u32 = BHY_INIT_VALUE; write_index_u32 < v_length_to_process_u32;)
        {
            /* reverse the data*/
            if (read_index_u8 <= read_bytes_index && read_bytes_index <= data_to_process)
            {
                for (reverse_index_s32 = bytes_to_write_u8 - BHY_INIT_BYTE_MINUS_ONE;
                reverse_index_s32 >= BHY_INIT_VALUE;)
                {
                    data_byte[reverse_index_s32] = *(memory + read_index_u8);
                    read_index_u8++;
                    reverse_index_s32--;
                }
            }
            /* write the data into the register*/
            read_bytes_index = read_bytes_index + BHY_RAM_WRITE_LENGTH;
            reverse_index_s32 = BHY_INIT_VALUE;

            for (write_ram_index = BHY_INIT_VALUE; write_ram_index <= BHY_CHECK_BYTE;)
            {
                *(memory + index_mem) = data_byte[write_ram_index];
                index_mem++;
                write_ram_index++;
            }
            write_index_u32++;
        }
        /* set the reset as 0x01*/
        com_rslt = bhy_set_reset_request(BHY_RESET_ENABLE);
        com_rslt += bhy_write_reg(BHY_I2C_REG_CHIP_CONTROL_ADDR,
        &v_chip_control_u8, BHY_GEN_READ_WRITE_LENGTH);
        /* set the upload data*/
        com_rslt += bhy_write_reg(BHY_I2C_REG_UPLOAD_0_ADDR,
        &v_upload_addr, BHY_GEN_READ_WRITE_LENGTH);
        com_rslt += bhy_write_reg(BHY_I2C_REG_UPLOAD_1_ADDR,
        &v_upload_addr, BHY_GEN_READ_WRITE_LENGTH);
        /* write the chip control register as 0x02*/
        write_length =
        data_to_process / BHY_RAM_WRITE_LENGTH_API;
        read_index_u8 = BHY_INIT_VALUE;
        /* write the memory of data */
        if (com_rslt == BHY_SUCCESS) {
            for (read_index_u8 = BHY_INIT_VALUE; read_index_u8 < write_length; read_index_u8++)
            {
                com_rslt += bhy_write_reg(BHY_I2C_REG_UPLOAD_DATA_ADDR,         \
                                        (u8 *)(memory + write_data),            \
                                        BHY_RAM_WRITE_LENGTH_API);
                write_data = write_data + BHY_RAM_WRITE_LENGTH_API;
            }
        }
        /* Check the CRC success*/
        com_rslt = bhy_get_crc_host(&v_crc_host_u32);
        if (v_crc_from_memory_u32 == v_crc_host_u32)
        {
            com_rslt = BHY_SUCCESS;
        }
        else
        {
            com_rslt = BHY_ERROR;
        }
        /* disable upload mode*/
        v_chip_control_u8 = BHY_CHIP_CTRL_ENABLE_2;
        /* write the chip control register as 0x02*/
        com_rslt += bhy_write_reg(BHY_I2C_REG_CHIP_CONTROL_ADDR, &v_chip_control_u8, BHY_GEN_READ_WRITE_LENGTH);
    }
    return com_rslt;
}

BHY_RETURN_FUNCTION_TYPE bhy_initialize_from_rom( const u8 *memory, const u32 v_file_length_u32)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_upload_addr = BHY_UPLOAD_DATA;
    u8 v_chip_control_u8 = BHY_CHIP_CTRL_ENABLE_1;
    u32 v_crc_from_memory_u32 = BHY_INIT_VALUE;
    u32 v_crc_host_u32 = BHY_INIT_VALUE;
    u32 write_data = BHY_INIT_VALUE;
    u8 data_from_mem[BHY_SIGNATURE_MEM_LEN];
    u8 data_byte[BHY_RAM_WRITE_LENGTH_API];
    u32 read_index_u8 = BHY_INIT_VALUE;
    u32 reverse_index_u32 = BHY_INIT_VALUE;
    u32 reverse_block_index_u32 = BHY_INIT_VALUE;
    u32 write_length = BHY_INIT_VALUE;
    u32 data_to_process = BHY_INIT_VALUE;
    u32 packet_length = BHY_INIT_VALUE;;
    u16 signature_flag = 0;
    u16 rom_version = 0;
    u8 rom_ver_exp = 0;
    u8 i = BHY_INIT_VALUE;
    /* initialize the array*/
    for (i=0; i < BHY_SIGNATURE_MEM_LEN; i++)
    {
        data_from_mem[i] = BHY_INIT_VALUE;
    }
    for (i = BHY_INIT_VALUE; i < BHY_RAM_WRITE_LENGTH; i++)
    {
        data_byte[i] = BHY_INIT_VALUE;
    }
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy)
    {
        com_rslt =  BHY_NULL;
    }
    else
    {
        /* Assign the memory data into the local array*/
        for (read_index_u8 = BHY_INIT_VALUE;read_index_u8 <= BHY_SIGNATURE_LENGTH; read_index_u8++)
        {
          data_from_mem[read_index_u8] = *(memory+read_index_u8);
        }
        /* Verify the signature of the data*/
        if ((data_from_mem[BHY_SIGNATURE_1] == BHY_IMAGE_SIGNATURE1)
        && (data_from_mem[BHY_SIGNATURE_2] == BHY_IMAGE_SIGNATURE2))
        {
            com_rslt = BHY_SUCCESS;
        }
        else
        {
            com_rslt = BHY_ERROR;
            goto bhy_init_from_rom_return;
        }
        /* Verify the signature of the data*/
        signature_flag = data_from_mem[BHY_SIG_FLAG_1_POS] + ((u16)data_from_mem[BHY_SIG_FLAG_2_POS]<<8);
        rom_ver_exp = BHY_GET_ROMVEREXP (signature_flag);
        bhy_get_rom_version(&rom_version);
        if(BHY_ROM_VER_DI01 == rom_ver_exp)
        {
            if(BHY_ROM_VERSION_DI01 == rom_version)
            {
                com_rslt = BHY_SUCCESS;
            }
            else
            {
                com_rslt = BHY_RAMPATCH_NOT_MATCH;
                goto bhy_init_from_rom_return;
            }
        }
        else if(BHY_ROM_VER_DI03 == rom_ver_exp)
        {
            if(BHY_ROM_VERSION_DI03 == rom_version)
            {
                com_rslt = BHY_SUCCESS;
            }
            else
            {
                com_rslt = BHY_RAMPATCH_NOT_MATCH;
                goto bhy_init_from_rom_return;
            }
        }
        else
        {
            com_rslt = BHY_RAMPATCH_NOT_SUPPORT;
            goto bhy_init_from_rom_return;
        }
        /* read the CRC data from memory */
        v_crc_from_memory_u32 = (u32)
        (((u32)data_from_mem[BHY_CRC_HOST_FILE_MSB]
        << BHY_SHIFT_BIT_POSITION_BY_24_BITS) |
        ((u32)data_from_mem[BHY_CRC_HOST_FILE_XXLSB]
        << BHY_SHIFT_BIT_POSITION_BY_16_BITS)
        |(data_from_mem[BHY_CRC_HOST_FILE_XLSB]
        << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
        | (data_from_mem[BHY_CRC_HOST_FILE_LSB]));
        /* Remove the first 16 bytes*/
        data_to_process = v_file_length_u32 - BHY_SIGNATURE_LENGTH;

        /* set the reset as 0x01*/
        com_rslt = bhy_set_reset_request(BHY_RESET_ENABLE);
        com_rslt += bhy_write_reg(BHY_I2C_REG_CHIP_CONTROL_ADDR, &v_chip_control_u8, BHY_GEN_READ_WRITE_LENGTH);
        /* set the upload data*/
        com_rslt += bhy_write_reg(BHY_I2C_REG_UPLOAD_0_ADDR, &v_upload_addr, BHY_GEN_READ_WRITE_LENGTH);
        com_rslt += bhy_write_reg(BHY_I2C_REG_UPLOAD_1_ADDR, &v_upload_addr, BHY_GEN_READ_WRITE_LENGTH);
        /* write the chip control register as 0x02*/
        write_length = data_to_process / BHY_RAM_WRITE_LENGTH_API;
        read_index_u8 = BHY_INIT_VALUE;

        /* write the memory of data */
        /*skips first 16 bytes*/
        write_data += 16;
        if (com_rslt == BHY_SUCCESS)
        {
            for (read_index_u8 = BHY_INIT_VALUE; read_index_u8 <= write_length; read_index_u8++)
            {
                packet_length = (read_index_u8 == write_length) ?
                (data_to_process % BHY_RAM_WRITE_LENGTH_API) / BHY_RAM_WRITE_LENGTH :
                BHY_RAM_WRITE_LENGTH_API / BHY_RAM_WRITE_LENGTH;

                /*reverse the data*/
                for (reverse_block_index_u32 = 1; reverse_block_index_u32 <=packet_length ;reverse_block_index_u32++)
                {
                    for (reverse_index_u32 = 0; reverse_index_u32 <BHY_RAM_WRITE_LENGTH; reverse_index_u32++)
                    {
                        data_byte[reverse_index_u32+((reverse_block_index_u32-1)*BHY_RAM_WRITE_LENGTH)] =
                        *(memory + write_data + BHY_RAM_WRITE_LENGTH * reverse_block_index_u32 - (reverse_index_u32+1));
                    }
                }

				if(packet_length != 0)
                    com_rslt += bhy_write_reg(BHY_I2C_REG_UPLOAD_DATA_ADDR,data_byte,packet_length * BHY_RAM_WRITE_LENGTH);

                write_data = write_data + (packet_length * BHY_RAM_WRITE_LENGTH);
            }
        }

        /* Check the CRC success*/
        com_rslt = bhy_get_crc_host(&v_crc_host_u32);
        if (v_crc_from_memory_u32 == v_crc_host_u32)
        {
            com_rslt = BHY_SUCCESS;
        }
        else
        {
            com_rslt = BHY_CRC_ERROR;
            goto bhy_init_from_rom_return;
        }
        /* disable upload mode*/
        v_chip_control_u8 = BHY_CHIP_CTRL_ENABLE_2;
        /* write the chip control register as 0x02*/
        com_rslt += bhy_write_reg(BHY_I2C_REG_CHIP_CONTROL_ADDR,&v_chip_control_u8, BHY_GEN_READ_WRITE_LENGTH);
    }
bhy_init_from_rom_return:
    return com_rslt;
}
/*!
* @brief API used assign the data of meta event byte 0 data
*
* @param v_meta_event_data_u8: The value of meta event byte0
*
*/
static void bhy_assign_meta_event_byte0(u8 v_meta_event_data_u8)
{
    write_buffer.write_parameter_byte1 = v_meta_event_data_u8;
    write_buffer.write_parameter_byte2 = read_buffer.parameter_2;
    write_buffer.write_parameter_byte3 = read_buffer.parameter_3;
    write_buffer.write_parameter_byte4 = read_buffer.parameter_4;
    write_buffer.write_parameter_byte5 = read_buffer.parameter_5;
    write_buffer.write_parameter_byte6 = read_buffer.parameter_6;
    write_buffer.write_parameter_byte7 = read_buffer.parameter_7;
    write_buffer.write_parameter_byte8 = read_buffer.parameter_8;
}
/*!
* @brief API used assign the data of meta event byte 1 data
*
* @param v_meta_event_data_u8: The value of meta event byte1
*
*/
static void bhy_assign_meta_event_byte1(u8 v_meta_event_data_u8)
{
    write_buffer.write_parameter_byte1 = read_buffer.parameter_1;
    write_buffer.write_parameter_byte2 = v_meta_event_data_u8;
    write_buffer.write_parameter_byte3 = read_buffer.parameter_3;
    write_buffer.write_parameter_byte4 = read_buffer.parameter_4;
    write_buffer.write_parameter_byte5 = read_buffer.parameter_5;
    write_buffer.write_parameter_byte6 = read_buffer.parameter_6;
    write_buffer.write_parameter_byte7 = read_buffer.parameter_7;
    write_buffer.write_parameter_byte8 = read_buffer.parameter_8;
}
/*!
* @brief API used assign the data of meta event byte 2 data
*
* @param v_meta_event_data_u8: The value of meta event byte2
*
*/
static void bhy_assign_meta_event_byte2(u8 v_meta_event_data_u8)
{
    write_buffer.write_parameter_byte1 = read_buffer.parameter_1;
    write_buffer.write_parameter_byte2 = read_buffer.parameter_2;
    write_buffer.write_parameter_byte3 = v_meta_event_data_u8;
    write_buffer.write_parameter_byte4 = read_buffer.parameter_4;
    write_buffer.write_parameter_byte5 = read_buffer.parameter_5;
    write_buffer.write_parameter_byte6 = read_buffer.parameter_6;
    write_buffer.write_parameter_byte7 = read_buffer.parameter_7;
    write_buffer.write_parameter_byte8 = read_buffer.parameter_8;
}
/*!
* @brief API used assign the data of meta event byte 3 data
*
* @param v_meta_event_data_u8: The value of meta event byte3
*
*/
static void bhy_assign_meta_event_byte3(u8 v_meta_event_data_u8)
{
    write_buffer.write_parameter_byte1 = read_buffer.parameter_1;
    write_buffer.write_parameter_byte2 = read_buffer.parameter_2;
    write_buffer.write_parameter_byte3 = read_buffer.parameter_3;
    write_buffer.write_parameter_byte4 = v_meta_event_data_u8;
    write_buffer.write_parameter_byte5 = read_buffer.parameter_5;
    write_buffer.write_parameter_byte6 = read_buffer.parameter_6;
    write_buffer.write_parameter_byte7 = read_buffer.parameter_7;
    write_buffer.write_parameter_byte8 = read_buffer.parameter_8;
}
/*!
* @brief API used assign the data of meta event byte 4 data
*
* @param v_meta_event_data_u8: The value of meta event byte4
*
*/
static void bhy_assign_meta_event_byte4(u8 v_meta_event_data_u8)
{
    write_buffer.write_parameter_byte1 = read_buffer.parameter_1;
    write_buffer.write_parameter_byte2 = read_buffer.parameter_2;
    write_buffer.write_parameter_byte3 = read_buffer.parameter_3;
    write_buffer.write_parameter_byte4 = read_buffer.parameter_4;
    write_buffer.write_parameter_byte5 = v_meta_event_data_u8;
    write_buffer.write_parameter_byte6 = read_buffer.parameter_6;
    write_buffer.write_parameter_byte7 = read_buffer.parameter_7;
    write_buffer.write_parameter_byte8 = read_buffer.parameter_8;
}
/*!
* @brief API used assign the data of meta event byte 5 data
*
* @param v_meta_event_data_u8: The value of meta event byte5
*
*/
static void bhy_assign_meta_event_byte5(u8 v_meta_event_data_u8)
{
    write_buffer.write_parameter_byte1 = read_buffer.parameter_1;
    write_buffer.write_parameter_byte2 = read_buffer.parameter_2;
    write_buffer.write_parameter_byte3 = read_buffer.parameter_3;
    write_buffer.write_parameter_byte4 = read_buffer.parameter_4;
    write_buffer.write_parameter_byte5 = read_buffer.parameter_6;
    write_buffer.write_parameter_byte6 = v_meta_event_data_u8;
    write_buffer.write_parameter_byte7 = read_buffer.parameter_7;
    write_buffer.write_parameter_byte8 = read_buffer.parameter_8;
}
/*!
* @brief API used assign the data of meta event byte 6 data
*
* @param v_meta_event_data_u8: The value of meta event byte6
*
*/
static void bhy_assign_meta_event_byte6(u8 v_meta_event_data_u8)
{
    write_buffer.write_parameter_byte1 = read_buffer.parameter_1;
    write_buffer.write_parameter_byte2 = read_buffer.parameter_2;
    write_buffer.write_parameter_byte3 = read_buffer.parameter_3;
    write_buffer.write_parameter_byte4 = read_buffer.parameter_4;
    write_buffer.write_parameter_byte5 = read_buffer.parameter_6;
    write_buffer.write_parameter_byte6 = read_buffer.parameter_6;
    write_buffer.write_parameter_byte7 = v_meta_event_data_u8;
    write_buffer.write_parameter_byte8 = read_buffer.parameter_8;
}
/*!
* @brief API used assign the data of meta event byte 7 data
*
* @param v_meta_event_data_u8: The value of meta event byte7
*
*/
static void bhy_assign_meta_event_byte7(u8 v_meta_event_data_u8)
{
    write_buffer.write_parameter_byte1 = read_buffer.parameter_1;
    write_buffer.write_parameter_byte2 = read_buffer.parameter_2;
    write_buffer.write_parameter_byte3 = read_buffer.parameter_3;
    write_buffer.write_parameter_byte4 = read_buffer.parameter_4;
    write_buffer.write_parameter_byte5 = read_buffer.parameter_6;
    write_buffer.write_parameter_byte6 = read_buffer.parameter_6;
    write_buffer.write_parameter_byte7 = read_buffer.parameter_7;
    write_buffer.write_parameter_byte8 = v_meta_event_data_u8;
}
/*!
 *  @brief API used to set the meta event for
 *  non wakeup FIFO control from
 *  system page-1 parameter 1
 *
 *
 *  @param v_meta_event_u8 : The value of meta event selection
 *       meta event          |   value
 * --------------------------|---------------
 *   BHY_META_EVENT_1            |  1
 *   BHY_META_EVENT_2            |  2
 *   BHY_META_EVENT_3            |  3
 *   BHY_META_EVENT_4            |  4
 *   BHY_META_EVENT_5            |  5
 *   BHY_META_EVENT_6            |  6
 *   BHY_META_EVENT_7            |  7
 *   BHY_META_EVENT_8            |  8
 *   BHY_META_EVENT_9            |  9
 *   BHY_META_EVENT_10           |  10
 *   BHY_META_EVENT_11           |  11
 *   BHY_META_EVENT_12           |  12
 *   BHY_META_EVENT_13           |  13
 *   BHY_META_EVENT_14           |  14
 *   BHY_META_EVENT_15           |  15
 *   BHY_META_EVENT_16           |  16
 *   BHY_META_EVENT_17           |  17
 *   BHY_META_EVENT_18           |  18
 *   BHY_META_EVENT_19           |  19
 *   BHY_META_EVENT_20           |  20
 *   BHY_META_EVENT_21           |  21
 *   BHY_META_EVENT_22           |  22
 *   BHY_META_EVENT_23           |  23
 *   BHY_META_EVENT_24           |  24
 *   BHY_META_EVENT_25           |  25
 *   BHY_META_EVENT_26           |  26
 *   BHY_META_EVENT_27           |  27
 *   BHY_META_EVENT_28           |  28
 *   BHY_META_EVENT_29           |  29
 *   BHY_META_EVENT_30           |  30
 *   BHY_META_EVENT_31           |  31
 *   BHY_META_EVENT_32           |  32

 *
 *  @param v_event_type_u8 : The value of
 *  interrupt or event selection
 *          value           |    Event
 * -------------------------|----------------
 *   BHY_META_EVENT_INTR_ENABLE |   0
 *   BHY_META_EVENT_ENABLE      |   1
 *
 *  @param v_input_data_u8 : The value of meta event
 *  @note Value for write each event in a bit
 *    value       |  Event or Interrupt
 * ---------------|----------------------
 *      0         |     DISABLE EVENT
 *      1         |     ENABLE EVENT
 *
 *  @param v_meta_parameter_request_u8: The value of parameter
 *  for wakeup or non wakeup fifo
 *
 *
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_set_meta_event(
u8 v_meta_event_u8,
u8 v_input_data_u8, u8 v_event_type_u8,
u8 v_meta_parameter_request_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_meta_bytes_u8 = BHY_INIT_VALUE;
    /* read the stored meta events using saved parameter bytes*/
    com_rslt = bhy_read_parameter_bytes(
    BHY_PAGE_1, v_meta_parameter_request_u8);
    if (BHY_SUCCESS == com_rslt) {
        /* switch for selecting the different meta events*/
        switch (v_meta_event_u8) {
        /* case for meta event one*/
        case BHY_META_EVENT_1:
            /* switch for selecting interrupt or event*/
            switch (v_event_type_u8) {
            /* case for event enable*/
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 1, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_1 & (~(1 << 1)))|(v_input_data_u8 << 1));
                bhy_assign_meta_event_byte0(v_meta_bytes_u8);
            break;
            /* case for interrupt enable*/
            case BHY_META_INTR_ENABLE:
                /* set the meta event 1, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_1&(~(1 << 0)))| v_input_data_u8);
                bhy_assign_meta_event_byte0(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
            /* case for meta event 2*/
        case BHY_META_EVENT_2:
            /* case for interrupt or event enable*/
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 2, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_1 & (~(1 << 3)))|(v_input_data_u8 << 3));
                bhy_assign_meta_event_byte0(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 2, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_1 & (~(1 << 2)))|(v_input_data_u8 << 2));
                bhy_assign_meta_event_byte0(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        /* case for meta event 3*/
        case BHY_META_EVENT_3:
            switch (v_event_type_u8) {
            /* case for event or interrupt enable*/
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 3, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_1 & (~(1 << 5)))|(v_input_data_u8 << 5));
                bhy_assign_meta_event_byte0(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 3, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_1 & (~(1 << 4)))|(v_input_data_u8 << 4));
                bhy_assign_meta_event_byte0(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        /* case for meta event four*/
        case BHY_META_EVENT_4:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 4, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_1 & (~(1 << 7)))|(v_input_data_u8 << 7));
                bhy_assign_meta_event_byte0(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 4, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_1 & (~(1 << 6)))|(v_input_data_u8 << 6));
                bhy_assign_meta_event_byte0(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_5:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 5, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_2 & (~(1 << 1)))|(v_input_data_u8 << 1));
                bhy_assign_meta_event_byte1(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 5, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_2 & (~(1 << 0)))|(v_input_data_u8 << 0));
                bhy_assign_meta_event_byte1(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_6:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 6, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_2 & (~(1 << 3)))|(v_input_data_u8 << 3));
                bhy_assign_meta_event_byte1(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 6, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_2 & (~(1 << 2)))|(v_input_data_u8 << 2));
                bhy_assign_meta_event_byte1(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_7:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 7, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_2 & (~(1 << 5)))|(v_input_data_u8 << 5));
                bhy_assign_meta_event_byte1(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 7, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_2 & (~(1 << 4)))|(v_input_data_u8 << 4));
                bhy_assign_meta_event_byte1(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_8:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 8, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_2 & (~(1 << 7)))|(v_input_data_u8 << 7));
                bhy_assign_meta_event_byte1(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 8, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_2 & (~(1 << 6)))|(v_input_data_u8 << 6));
                bhy_assign_meta_event_byte1(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_9:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 9, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_3 & (~(1 << 1)))|(v_input_data_u8 << 1));
                bhy_assign_meta_event_byte2(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 9, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_3 & (~(1 << 0)))|(v_input_data_u8 << 0));
                bhy_assign_meta_event_byte2(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_10:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 10, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_3 & (~(1 << 3)))|(v_input_data_u8 << 3));
                bhy_assign_meta_event_byte2(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 10, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_3 & (~(1 << 2)))|(v_input_data_u8 << 2));
                bhy_assign_meta_event_byte2(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_11:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 11, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_3 & (~(1 << 5)))|(v_input_data_u8 << 5));
                bhy_assign_meta_event_byte2(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 11, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_3 & (~(1 << 4)))|(v_input_data_u8 << 4));
                bhy_assign_meta_event_byte2(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_12:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 12, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_3 & (~(1 << 7)))|(v_input_data_u8 << 7));
                bhy_assign_meta_event_byte2(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 12, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_3 & (~(1 << 6)))|(v_input_data_u8 << 6));
                bhy_assign_meta_event_byte2(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_13:
            /* set the meta event 13, event enable*/
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                v_meta_bytes_u8 = ((read_buffer.parameter_4 & (~(1 << 1)))|(v_input_data_u8 << 1));
                bhy_assign_meta_event_byte3(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 13, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_4 & (~(1 << 0)))|(v_input_data_u8 << 0));
                bhy_assign_meta_event_byte3(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_14:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 14, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_4 & (~(1 << 3)))|(v_input_data_u8 << 3));
                bhy_assign_meta_event_byte3(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 14, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_4 & (~(1 << 2)))|(v_input_data_u8 << 2));
                bhy_assign_meta_event_byte3(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_15:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 15, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_4 & (~(1 << 5)))|(v_input_data_u8 << 5));
                bhy_assign_meta_event_byte3(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 15, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_4 & (~(1 << 4)))|(v_input_data_u8 << 4));
                bhy_assign_meta_event_byte3(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_16:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 16, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_4 & (~(1 << 7)))|(v_input_data_u8 << 7));
                bhy_assign_meta_event_byte3(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 16, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_4 & (~(1 << 6)))|(v_input_data_u8 << 6));
                bhy_assign_meta_event_byte3(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_17:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 17, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_5 & (~(1 << 1)))|(v_input_data_u8 << 1));
                bhy_assign_meta_event_byte4(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 17, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_5 & (~(1 << 0)))|(v_input_data_u8 << 0));
                bhy_assign_meta_event_byte4(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_18:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 18, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_5 & (~(1 << 3)))|(v_input_data_u8 << 3));
                bhy_assign_meta_event_byte4(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 18, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_5 & (~(1 << 2)))|(v_input_data_u8 << 2));
                bhy_assign_meta_event_byte4(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_19:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 19, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_5 & (~(1 << 5)))|(v_input_data_u8 << 5));
                bhy_assign_meta_event_byte4(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 19, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_5 & (~(1 << 4)))|(v_input_data_u8 << 4));
                bhy_assign_meta_event_byte4(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_20:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 20, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_5 & (~(1 << 7)))|(v_input_data_u8 << 7));
                bhy_assign_meta_event_byte4(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 20, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_5 & (~(1 << 6)))|(v_input_data_u8 << 6));
                bhy_assign_meta_event_byte4(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_21:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 21, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_6 & (~(1 << 1)))|(v_input_data_u8 << 1));
                bhy_assign_meta_event_byte5(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 21, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_6 & (~(1 << 0)))|(v_input_data_u8 << 0));
                bhy_assign_meta_event_byte5(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_22:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 22, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_6 & (~(1 << 3)))|(v_input_data_u8 << 3));
                bhy_assign_meta_event_byte5(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 22, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_6 & (~(1 << 2)))|(v_input_data_u8 << 2));
                bhy_assign_meta_event_byte5(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_23:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 23, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_6 & (~(1 << 5)))|(v_input_data_u8 << 5));
                bhy_assign_meta_event_byte5(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 23, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_6 & (~(1 << 4)))|(v_input_data_u8 << 4));
                bhy_assign_meta_event_byte5(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_24:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 24, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_6 & (~(1 << 7)))|(v_input_data_u8 << 7));
                bhy_assign_meta_event_byte5(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 24, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_6 & (~(1 << 6)))|(v_input_data_u8 << 6));
                bhy_assign_meta_event_byte5(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_25:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 25, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_7 & (~(1 << 1)))|(v_input_data_u8 << 1));
                bhy_assign_meta_event_byte6(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 25, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_7 & (~(1 << 0)))|(v_input_data_u8 << 0));
                bhy_assign_meta_event_byte6(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_26:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 26, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_7 & (~(1 << 3)))|(v_input_data_u8 << 3));
                bhy_assign_meta_event_byte6(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 26, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_7 & (~(1 << 2)))|(v_input_data_u8 << 2));
                bhy_assign_meta_event_byte6(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_27:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 27, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_7 & (~(1 << 5)))|(v_input_data_u8 << 5));
                bhy_assign_meta_event_byte6(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 27, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_7 & (~(1 << 4)))|(v_input_data_u8 << 4));
                bhy_assign_meta_event_byte6(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_28:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 28, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_7 & (~(1 << 7)))|(v_input_data_u8 << 7));
                bhy_assign_meta_event_byte6(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 28, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_7 & (~(1 << 6)))|(v_input_data_u8 << 6));
                bhy_assign_meta_event_byte6(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_29:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 29, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_8 & (~(1 << 1)))|(v_input_data_u8 << 1));
                bhy_assign_meta_event_byte7(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 29, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_8 & (~(1 << 0)))|(v_input_data_u8 << 0));
                bhy_assign_meta_event_byte7(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_30:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 30, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_8 & (~(1 << 3)))|(v_input_data_u8 << 3));
                bhy_assign_meta_event_byte7(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 30, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_8 & (~(1 << 2)))|(v_input_data_u8 << 2));
                bhy_assign_meta_event_byte7(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_31:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 31, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_8 & (~(1 << 5)))|(v_input_data_u8 << 5));
                bhy_assign_meta_event_byte7(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 31, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_8 & (~(1 << 4)))|(v_input_data_u8 << 4));
                bhy_assign_meta_event_byte7(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;
        case BHY_META_EVENT_32:
            switch (v_event_type_u8) {
            case BHY_META_EVENT_ENABLE:
                /* set the meta event 32, event enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_8 & (~(1 << 7)))|(v_input_data_u8 << 7));
                bhy_assign_meta_event_byte7(v_meta_bytes_u8);
            break;
            case BHY_META_INTR_ENABLE:
                /* set the meta event 32, interrupt enable*/
                v_meta_bytes_u8 = ((read_buffer.parameter_8 & (~(1 << 6)))|(v_input_data_u8 << 6));
                bhy_assign_meta_event_byte7(v_meta_bytes_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        break;

        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    }
    /* write the meta event values to the meta event bytes*/
    com_rslt += bhy_write_parameter_bytes(
    BHY_PAGE_1, (v_meta_parameter_request_u8+0x80));
    return com_rslt;
}
/*!
 *  @brief API used to get the meta event control from
 *  system page-1 parameter 1
 *
 *  @param v_meta_event_u8 : The value of meta event selection
 *       meta event          |   value
 * --------------------------|---------------
 *   BHY_META_EVENT_1            |  1
 *   BHY_META_EVENT_2            |  2
 *   BHY_META_EVENT_3            |  3
 *   BHY_META_EVENT_4            |  4
 *   BHY_META_EVENT_5            |  5
 *   BHY_META_EVENT_6            |  6
 *   BHY_META_EVENT_7            |  7
 *   BHY_META_EVENT_8            |  8
 *   BHY_META_EVENT_9            |  9
 *   BHY_META_EVENT_10           |  10
 *   BHY_META_EVENT_11           |  11
 *   BHY_META_EVENT_12           |  12
 *   BHY_META_EVENT_13           |  13
 *   BHY_META_EVENT_14           |  14
 *   BHY_META_EVENT_15           |  15
 *   BHY_META_EVENT_16           |  16
 *   BHY_META_EVENT_17           |  17
 *   BHY_META_EVENT_18           |  18
 *   BHY_META_EVENT_19           |  19
 *   BHY_META_EVENT_20           |  20
 *   BHY_META_EVENT_21           |  21
 *   BHY_META_EVENT_22           |  22
 *   BHY_META_EVENT_23           |  23
 *   BHY_META_EVENT_24           |  24
 *   BHY_META_EVENT_25           |  25
 *   BHY_META_EVENT_26           |  26
 *   BHY_META_EVENT_27           |  27
 *   BHY_META_EVENT_28           |  28
 *   BHY_META_EVENT_29           |  29
 *   BHY_META_EVENT_30           |  30
 *   BHY_META_EVENT_31           |  31
 *   BHY_META_EVENT_32           |  32
 *
 *  @param meta_intr :
 *  The value of meta event interrupt selection
 *
 *  @param meta_event :
 *  The value of meta event event selection
 *
 *  @param v_event_type_u8 : The value of
 *  interrupt or event selection
 *          value           |    Event
 * -------------------------|----------------
 *   BHY_META_EVENT_INTR_ENABLE |   0
 *   BHY_META_EVENT_ENABLE      |   1
 *
 *  @param v_meta_parameter_request_u8: The value of parameter request
 *  for wakeup or non wakeup fifo
 *
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_meta_event(
u8 v_meta_event_u8, u8 v_event_type_u8,
u8* meta_event_intr,
u8* meta_event_event,
u8 v_meta_parameter_request_u8)
{
/* variable used for return the status of communication result*/
BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
u8 v_meta_event_byte_0_u8 = BHY_INIT_VALUE;
u8 v_meta_event_byte_1_u8 = BHY_INIT_VALUE;
u8 v_meta_event_byte_2_u8 = BHY_INIT_VALUE;
u8 v_meta_event_byte_3_u8 = BHY_INIT_VALUE;
u8 v_meta_event_byte_4_u8 = BHY_INIT_VALUE;
u8 v_meta_event_byte_5_u8 = BHY_INIT_VALUE;
u8 v_meta_event_byte_6_u8 = BHY_INIT_VALUE;
u8 v_meta_event_byte_7_u8 = BHY_INIT_VALUE;
/* check the p_bhy pointer as NULL*/
if (BHY_NULL_PTR == p_bhy) {
    com_rslt =  BHY_NULL;
} else {
    /* input as page 1 and parameter 1 for system page*/
    com_rslt = bhy_read_parameter_bytes(
    BHY_PAGE_1, v_meta_parameter_request_u8);
    v_meta_event_byte_0_u8 = read_buffer.parameter_1;
    v_meta_event_byte_1_u8 = read_buffer.parameter_2;
    v_meta_event_byte_2_u8 = read_buffer.parameter_3;
    v_meta_event_byte_3_u8 = read_buffer.parameter_4;
    v_meta_event_byte_4_u8 = read_buffer.parameter_5;
    v_meta_event_byte_5_u8 = read_buffer.parameter_6;
    v_meta_event_byte_6_u8 = read_buffer.parameter_7;
    v_meta_event_byte_7_u8 = read_buffer.parameter_8;
    switch (v_meta_event_u8) {
    case BHY_META_EVENT_1:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            (v_meta_event_byte_0_u8 &
            BHY_META_EVENT1_INTR_ENABLE);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_0_u8 &
            BHY_META_EVENT1_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_01_BIT);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_2:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_0_u8 &
            BHY_META_EVENT2_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_02_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_0_u8 &
            BHY_META_EVENT2_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_03_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_3:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_0_u8 &
            BHY_META_EVENT3_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_04_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_0_u8 &
            BHY_META_EVENT3_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_05_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_4:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_0_u8 &
            BHY_META_EVENT4_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_06_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_0_u8 &
            BHY_META_EVENT4_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_07_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_5:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            (v_meta_event_byte_1_u8 &
            BHY_META_EVENT5_INTR_ENABLE);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_1_u8 &
            BHY_META_EVENT5_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_01_BIT);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_6:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_1_u8 &
            BHY_META_EVENT6_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_02_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_1_u8 &
            BHY_META_EVENT6_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_03_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_7:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_1_u8 &
            BHY_META_EVENT7_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_04_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_1_u8 &
            BHY_META_EVENT7_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_05_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_8:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_1_u8 &
            BHY_META_EVENT8_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_06_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_1_u8 &
            BHY_META_EVENT8_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_07_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_9:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            (v_meta_event_byte_2_u8 &
            BHY_META_EVENT9_INTR_ENABLE);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_2_u8 &
            BHY_META_EVENT9_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_01_BIT);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_10:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_2_u8 &
            BHY_META_EVENT10_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_02_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_2_u8 &
            BHY_META_EVENT10_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_03_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_11:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_2_u8 &
            BHY_META_EVENT11_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_04_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_2_u8 &
            BHY_META_EVENT11_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_05_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_12:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_2_u8 &
            BHY_META_EVENT12_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_06_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_2_u8 &
            BHY_META_EVENT12_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_07_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_13:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            (v_meta_event_byte_3_u8 &
            BHY_META_EVENT13_INTR_ENABLE);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_3_u8 &
            BHY_META_EVENT13_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_01_BIT);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_14:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_3_u8 &
            BHY_META_EVENT14_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_02_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_3_u8 &
            BHY_META_EVENT14_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_03_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_15:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_3_u8 &
            BHY_META_EVENT15_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_04_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_3_u8 &
            BHY_META_EVENT15_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_05_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_16:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_3_u8 &
            BHY_META_EVENT16_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_06_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_3_u8 &
            BHY_META_EVENT16_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_07_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_17:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            (v_meta_event_byte_4_u8 &
            BHY_META_EVENT17_INTR_ENABLE);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_4_u8 &
            BHY_META_EVENT17_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_01_BIT);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_18:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_4_u8 &
            BHY_META_EVENT18_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_02_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_4_u8 &
            BHY_META_EVENT18_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_03_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_19:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_4_u8 &
            BHY_META_EVENT19_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_04_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_4_u8 &
            BHY_META_EVENT19_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_05_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_20:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_4_u8 &
            BHY_META_EVENT20_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_06_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_4_u8 &
            BHY_META_EVENT20_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_07_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_21:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            (v_meta_event_byte_5_u8 &
            BHY_META_EVENT21_INTR_ENABLE);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_5_u8 &
            BHY_META_EVENT21_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_01_BIT);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_22:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_5_u8 &
            BHY_META_EVENT22_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_02_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_5_u8 &
            BHY_META_EVENT22_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_03_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_23:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_5_u8 &
            BHY_META_EVENT23_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_04_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_5_u8 &
            BHY_META_EVENT23_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_05_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_24:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_5_u8 &
            BHY_META_EVENT24_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_06_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_5_u8 &
            BHY_META_EVENT24_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_07_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_25:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            (v_meta_event_byte_6_u8 &
            BHY_META_EVENT25_INTR_ENABLE);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_6_u8 &
            BHY_META_EVENT25_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_01_BIT);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_26:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_6_u8 &
            BHY_META_EVENT26_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_02_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_6_u8 &
            BHY_META_EVENT26_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_03_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_27:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_6_u8 &
            BHY_META_EVENT27_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_04_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_6_u8 &
            BHY_META_EVENT27_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_05_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_28:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_6_u8 &
            BHY_META_EVENT28_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_06_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_6_u8 &
            BHY_META_EVENT28_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_07_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_29:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            (v_meta_event_byte_7_u8 &
            BHY_META_EVENT29_INTR_ENABLE);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_7_u8 &
            BHY_META_EVENT29_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_01_BIT);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_30:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_7_u8 &
            BHY_META_EVENT30_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_02_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_7_u8 &
            BHY_META_EVENT30_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_03_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_31:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_7_u8 &
            BHY_META_EVENT31_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_04_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_7_u8 &
            BHY_META_EVENT31_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_05_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    case BHY_META_EVENT_32:
        switch (v_event_type_u8) {
        case BHY_META_INTR_ENABLE:
            *meta_event_intr = (u8)
            ((v_meta_event_byte_7_u8 &
            BHY_META_EVENT32_INTR_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_06_BITS);
        break;
        case BHY_META_EVENT_ENABLE:
            *meta_event_event = (u8)
            ((v_meta_event_byte_7_u8 &
            BHY_META_EVENT32_EVENT_ENABLE)
            >> BHY_SHIFT_BIT_POSITION_BY_07_BITS);
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    break;
    default:
        com_rslt = BHY_OUT_OF_RANGE;
    break;
    }
}
return com_rslt;
}
/*!
 *  @brief API used to get the fifo water mark from
 *  system page-1 parameter 2
 *
 *
 *  @param v_parameter_u8 :
 *  The value of fifo water mark wakeup or non-wakeup selection
 *       water mark          |   value
 * --------------------------|---------------
 *   FIFO_WM_WAKEUP          |  0
 *   FIFO_WM_NON_WAKEUP      |  1
 *
 *  @param v_fifo_water_mark_u16: The value of fifo water mark
 *
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_fifo_water_mark(u8 v_parameter_u8, u16 *v_fifo_water_mark_u16)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_fifo_wm_wakeup_lsb_u8 = BHY_INIT_VALUE;
    u8 v_fifo_wm_wakeup_msb_u8 = BHY_INIT_VALUE;
    u8 v_fifo_wm_non_wakeup_lsb_u8 = BHY_INIT_VALUE;
    u8 v_fifo_wm_non_wakeup_msb_u8 = BHY_INIT_VALUE;
    /* input as page 1 and parameter 2 for system page*/
    com_rslt = bhy_read_parameter_bytes( BHY_PAGE_1, BHY_PARAMETER_REQUEST_READ_PARAMETER_2);
    if (BHY_SUCCESS == com_rslt)
    {
        switch (v_parameter_u8)
        {
            case BHY_FIFO_WATER_MARK_WAKEUP:
                /* fifo wakeup water mark*/
                v_fifo_wm_wakeup_lsb_u8 = read_buffer.parameter_1;
                v_fifo_wm_wakeup_msb_u8 = read_buffer.parameter_2;
                *v_fifo_water_mark_u16 = (u16)((v_fifo_wm_wakeup_msb_u8 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)\
                                              |(v_fifo_wm_wakeup_lsb_u8));
            break;
            case BHY_FIFO_WATER_MARK_NON_WAKEUP:
                /* fifo non wakeup water mark*/
                v_fifo_wm_non_wakeup_lsb_u8 = read_buffer.parameter_5;
                v_fifo_wm_non_wakeup_msb_u8 = read_buffer.parameter_6;
                *v_fifo_water_mark_u16 = (u16)((v_fifo_wm_non_wakeup_msb_u8<< BHY_SHIFT_BIT_POSITION_BY_08_BITS)\
                                              |(v_fifo_wm_non_wakeup_lsb_u8));
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
        }
    }
    return com_rslt;
}
/*!
 *  @brief API used to set the fifo water mark from
 *  system page-1 parameter 2
 *
 *
 *  @param v_parameter_u8 :
 *  The value of fifo water mark wakeup or non-wakeup selection
 *       water mark          |   value
 * --------------------------|---------------
 *   FIFO_WM_WAKEUP          |  0
 *   FIFO_WM_NON_WAKEUP      |  1
 *
 *  @param v_fifo_water_mark_u16: The value of fifo water mark
 *
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_set_fifo_water_mark(u8 v_parameter_u8, u16 v_fifo_water_mark_u16)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_fifo_wm_lsb_u8 = BHY_INIT_VALUE;
    u8 v_fifo_wm_msb_u8 = BHY_INIT_VALUE;
    /* read the fifo water mark using saved parameter bytes*/
    com_rslt = bhy_read_parameter_bytes( BHY_PAGE_1, BHY_PARAMETER_REQUEST_READ_PARAMETER_2);
    if (BHY_SUCCESS == com_rslt)
    {
        v_fifo_wm_lsb_u8 = (u8)(v_fifo_water_mark_u16 & BHY_MASK_LSB_DATA);
        v_fifo_wm_msb_u8 = (u8)((v_fifo_water_mark_u16 & BHY_MASK_MSB_DATA)>> BHY_SHIFT_BIT_POSITION_BY_08_BITS);
        switch (v_parameter_u8)
        {
            /* fifo wakeup water mark*/
            case BHY_FIFO_WATER_MARK_WAKEUP:
                write_buffer.write_parameter_byte1 = v_fifo_wm_lsb_u8;
                write_buffer.write_parameter_byte2 = v_fifo_wm_msb_u8;
                write_buffer.write_parameter_byte5 = read_buffer.parameter_5;
                write_buffer.write_parameter_byte6 = read_buffer.parameter_6;
            break;
            /* fifo non wakeup water mark*/
            case BHY_FIFO_WATER_MARK_NON_WAKEUP:
                write_buffer.write_parameter_byte1 = read_buffer.parameter_1;
                write_buffer.write_parameter_byte2 = read_buffer.parameter_2;
                write_buffer.write_parameter_byte5 = v_fifo_wm_lsb_u8;
                write_buffer.write_parameter_byte6 = v_fifo_wm_msb_u8;
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
        }
    }
    com_rslt += bhy_write_parameter_bytes(
    BHY_PAGE_1, BHY_PARAMETER_REQUEST_WRITE_PARAMETER_2);
    return com_rslt;
}
/*!
 *  @brief API used to get the fifo size from
 *  system page-1 parameter 2
 *  @note wakeup - bytes from 2 and 3
 *  @note non wakeup - bytes from 6 and 7
 *
 *
 *  @param v_fifo_size_select_u8 :
 *  The value of fifo size mark wakeup or non-wakeup selection
 *       water mark          |   value
 * --------------------------|---------------
 *   BHY_FIFO_SIZE_WAKEUP        |  0
 *   BHY_FIFO_SIZE_NON_WAKEUP    |  1
 *
 *  @param v_fifo_size_u16 : The value of fifo size
 *
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_fifo_size(
u8 v_fifo_size_select_u8, u16 *v_fifo_size_u16)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_fifo_size_wakeup_lsb_u8 = BHY_INIT_VALUE;
    u8 v_fifo_size_wakeup_msb_u8 = BHY_INIT_VALUE;
    u8 v_fifo_size_non_wakeup_lsb_u8 = BHY_INIT_VALUE;
    u8 v_fifo_size_non_wakeup_msb_u8 = BHY_INIT_VALUE;
    /* check the p_bhy pointer as NULL*/
    if (BHY_NULL_PTR == p_bhy) {
        com_rslt =  BHY_NULL;
        } else {
            /* input as page 1 and parameter 2 for system page*/
            com_rslt = bhy_read_parameter_bytes(
            BHY_PAGE_1, BHY_PARAMETER_REQUEST_READ_PARAMETER_2);
            if (BHY_SUCCESS == com_rslt) {
                switch (v_fifo_size_select_u8) {
                case BHY_FIFO_SIZE_WAKEUP:
                    /* fifo size in wakeup*/
                    v_fifo_size_wakeup_lsb_u8 =
                    read_buffer.parameter_3;
                    v_fifo_size_wakeup_msb_u8 =
                    read_buffer.parameter_4;
                    *v_fifo_size_u16 =
                    (u16)((v_fifo_size_wakeup_msb_u8
                    << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
                    |(v_fifo_size_wakeup_lsb_u8));
                break;
                case BHY_FIFO_SIZE_NON_WAKEUP:
                    /* fifo size in non wakeup*/
                    v_fifo_size_non_wakeup_lsb_u8 =
                    read_buffer.parameter_7;
                    v_fifo_size_non_wakeup_msb_u8 =
                    read_buffer.parameter_8;
                    *v_fifo_size_u16 =
                    (u16)((v_fifo_size_non_wakeup_msb_u8
                    << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
                    |(v_fifo_size_non_wakeup_lsb_u8));
                break;
                default:
                    com_rslt = BHY_OUT_OF_RANGE;
                break;
                }
            }
        }
    return com_rslt;
}
/*!
 *  @brief API used to assign the sensor status bank data
 *
 *
 *  @param v_sensor_status_u8 :
 *  The value for saved parameter data
 *
 *
 *  @return Nothing
 *
 *
*/
static void bhy_assign_sensor_status_bank(u8 v_sensor_status_u8)
{
    /* Assign the sensor status bank*/
    /* data available*/
    sensor_status_bank.data_available = (u8)
    (v_sensor_status_u8
    & BHY_SENSOR_BANK_STATUS_DATA_AVAILABLE);
    /* i2c nack*/
    sensor_status_bank.i2c_nack = (u8)
    ((v_sensor_status_u8
    & BHY_SENSOR_BANK_STATUS_I2C_NACK)
    >> BHY_SHIFT_BIT_POSITION_BY_01_BIT);
    /* device id error*/
    sensor_status_bank.device_id_error = (u8)
    ((v_sensor_status_u8
    & BHY_SENSOR_BANK_STATUS_DEVICE_ID_ERROR)
    >> BHY_SHIFT_BIT_POSITION_BY_02_BITS);
    /* transient error*/
    sensor_status_bank.transient_error = (u8)
    ((v_sensor_status_u8
    & BHY_SENSOR_BANK_STATUS_TRANSIENT_ERROR)
    >> BHY_SHIFT_BIT_POSITION_BY_03_BITS);
    /* data lost*/
    sensor_status_bank.data_lost = (u8)
    ((v_sensor_status_u8
    & BHY_SENSOR_BANK_STATUS_DATA_LOST)
    >> BHY_SHIFT_BIT_POSITION_BY_04_BITS);
    /* sensor power mode*/
    sensor_status_bank.sensor_power_mode = (u8)
    ((v_sensor_status_u8
    & BHY_SENSOR_BANK_STATUS_POWER_MODE)
    >> BHY_SHIFT_BIT_POSITION_BY_05_BITS);

}
/*!
 *  @brief API used to get the sensor status bank from
 *  system page-1 parameter 3 to 6
 *  @note Sensor status bank 0 : parameter 3 contains 1 to 16 sensor type
 *  @note Sensor status bank 1 : parameter 4 contains 17 to 32 sensor type
 *  @note Sensor status bank 2 : parameter 5 contains 33 to 48 sensor type
 *  @note Sensor status bank 3 : parameter 6 contains 49 to 64 sensor type
 *
 *
 *  @param v_sensor_type_u8 :
 *  The value of sensor status bank sensor type selection
 *       v_sensor_type_u8             |   value
 * -----------------------------------|---------------
 *   BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_1   |  0
 *   BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_2   |  1
 *   BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_3   |  3
 *   BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_4   |  4
 *   BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_5   |  5
 *   BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_6   |  6
 *   BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_7   |  7
 *   BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_8   |  8
 *   BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_9   |  9
 *   BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_10  |  10
 *   BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_11  |  11
 *   BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_12  |  12
 *   BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_13  |  13
 *   BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_14  |  14
 *   BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_15  |  15
 *   BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_16  |  16
 *
 *
 *  @param v_sensor_status_parameter_u8 :
 *  The value of sensor status bank parameter selection
 *         parameter               |    value
 *  -------------------------------|-----------------
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_3 |  0x03
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_4 |  0x04
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_5 |  0x05
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_6 |  0x06
 *
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_sensor_status_bank(
u8 v_sensor_status_parameter_u8, u8 v_sensor_type_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_data_u8 = BHY_INIT_VALUE;
        /* input as page 1 and parameter
        3(4 or 5 or 6)for system page*/
        com_rslt = bhy_read_parameter_bytes(
        BHY_PAGE_1, v_sensor_status_parameter_u8);
        if (BHY_SUCCESS == com_rslt) {
            switch (v_sensor_type_u8) {
            case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_1:
                /* sensor status of data available*/
                v_data_u8 = read_buffer.parameter_1;
                bhy_assign_sensor_status_bank(v_data_u8);
            break;
            case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_2:
                /* sensor status of data available*/
                v_data_u8 = read_buffer.parameter_2;
                bhy_assign_sensor_status_bank(v_data_u8);
            break;
            case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_3:
                /* sensor status of data available*/
                v_data_u8 = read_buffer.parameter_3;
                bhy_assign_sensor_status_bank(v_data_u8);
            break;
            case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_4:
                /* sensor status of data available*/
                v_data_u8 = read_buffer.parameter_4;
                bhy_assign_sensor_status_bank(v_data_u8);
            break;
            case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_5:
                /* sensor status of data available*/
                v_data_u8 = read_buffer.parameter_5;
                bhy_assign_sensor_status_bank(v_data_u8);
            break;
            case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_6:
                /* sensor status of data available*/
                v_data_u8 = read_buffer.parameter_6;
                bhy_assign_sensor_status_bank(v_data_u8);
            break;
            case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_7:
                /* sensor status of data available*/
                v_data_u8 = read_buffer.parameter_7;
                bhy_assign_sensor_status_bank(v_data_u8);
            break;
            case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_8:
                /* sensor status of data available*/
                v_data_u8 = read_buffer.parameter_8;
                bhy_assign_sensor_status_bank(v_data_u8);
            break;
            case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_9:
                /* sensor status of data available*/
                v_data_u8 = read_buffer.parameter_9;
                bhy_assign_sensor_status_bank(v_data_u8);
            break;
            case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_10:
                /* sensor status of data available*/
                v_data_u8 = read_buffer.parameter_10;
                bhy_assign_sensor_status_bank(v_data_u8);
            break;
            case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_11:
                /* sensor status of data available*/
                v_data_u8 = read_buffer.parameter_11;
                bhy_assign_sensor_status_bank(v_data_u8);
            break;
            case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_12:
                /* sensor status of data available*/
                v_data_u8 = read_buffer.parameter_12;
                bhy_assign_sensor_status_bank(v_data_u8);
            break;
            case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_13:
                /* sensor status of data available*/
                v_data_u8 = read_buffer.parameter_13;
                bhy_assign_sensor_status_bank(v_data_u8);
            break;
            case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_14:
                /* sensor status of data available*/
                v_data_u8 = read_buffer.parameter_14;
                bhy_assign_sensor_status_bank(v_data_u8);
            break;
            case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_15:
                /* sensor status of data available*/
                v_data_u8 = read_buffer.parameter_15;
                bhy_assign_sensor_status_bank(v_data_u8);
            break;
            case BHY_SENSOR_STATUS_BANK_SENSOR_TYPE_16:
                /* sensor status of data available*/
                v_data_u8 = read_buffer.parameter_16;
                bhy_assign_sensor_status_bank(v_data_u8);
            break;
            default:
                com_rslt = BHY_OUT_OF_RANGE;
            break;
            }
        }
    return com_rslt;
}
/*!
 *  @brief API used to get the host IRQ time
 *  stamp and current time stamp from
 *  system page-1 parameter 30
 *  Host IRQ time stamp bytes 0 to 3
 *  Current time stamp bytes 4 to 7
 *
 *
 *  @param v_time_stamp_selection_u8 :
 *  The value of Host IRQ or current time stamp selection
 *       time stamp          |   value
 * --------------------------|---------------
 *   BHY_HOST_IRQ_TIMESTAMP     |  0
 *   BHY_CURRENT_TIME_STAMP      |  1
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *  @param v_time_stamp_u32 :
 *  The value of Host IRQ or current time stamp
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_time_stamp(
u8 v_time_stamp_selection_u8, u32 *v_time_stamp_u32)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u16 v_lsb_time_u16 = BHY_INIT_VALUE;
    u16 v_msb_time_u16 = BHY_INIT_VALUE;
    /* input as page 1 and parameter 30 for system page*/
    com_rslt = bhy_read_parameter_bytes(
    BHY_PAGE_1, BHY_PARAMETER_REQUEST_READ_PARAMETER_30);
    if (BHY_SUCCESS == com_rslt) {
        switch (v_time_stamp_selection_u8) {
        case BHY_HOST_IRQ_TIMESTAMP:
            /* host IRQ time stamp*/
            /* IRQ time stamp lsb data*/
            v_lsb_time_u16 = (u16)((read_buffer.parameter_2
             << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
             | (read_buffer.parameter_1));
             /* IRQ time stamp msb data*/
            v_msb_time_u16 = (u16)((read_buffer.parameter_4
             << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
             | (read_buffer.parameter_3));
             /* return IRQ time stamp*/
            *v_time_stamp_u32 = (u32)(((u32)v_msb_time_u16
            << BHY_SHIFT_BIT_POSITION_BY_16_BITS)
            | (v_lsb_time_u16));
        break;
        case BHY_CURRENT_TIME_STAMP:
            /* current time stamp*/
             /* current time stamp lsb data*/
            v_lsb_time_u16 = (u16)((read_buffer.parameter_6
             << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
             | (read_buffer.parameter_5));
             /* current time stamp msb data*/
             v_msb_time_u16 = (u16)((read_buffer.parameter_8
             << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
             | (read_buffer.parameter_7));
             /* return current time stamp*/
             *v_time_stamp_u32 = (u32)(((u32)v_msb_time_u16
            << BHY_SHIFT_BIT_POSITION_BY_16_BITS)
            | (v_lsb_time_u16));
        break;
        default:
            com_rslt = BHY_OUT_OF_RANGE;
        break;
        }
    }
    return com_rslt;
}
/*!
 *  @brief API used to get the physical sensor status
 *  system page-1 parameter 31
 *  @note Accel sample rate byte 0 and 1
 *  @note Accel dynamic range byte 2 and 3
 *  @note Accel flags byte 4
 *  @note Gyro sample rate byte 5 and 6
 *  @note Gyro dynamic range byte 7 and 8
 *  @note Gyro flags byte 9
 *  @note Mag sample rate byte 10 and 11
 *  @note Mag dynamic range byte 12 and 13
 *  @note Mag flags byte 14
 *
 *  @param accel_status : contains the accel physical status
 *  @param gyro_status : contains the gyro physical status
 *  @param mag_status : contains the mag physical status
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_physical_sensor_status(
struct accel_physical_status_t *accel_status,
struct gyro_physical_status_t *gyro_status,
struct mag_physical_status_t *mag_status)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    /* input as page 1 and parameter 31 for system page*/
    com_rslt = bhy_read_parameter_bytes(
    BHY_PAGE_1, BHY_PARAMETER_REQUEST_READ_PARAMETER_31);
    /* accel physical status*/
    /* accl sample rate*/
    accel_status->accel_sample_rate = (u16)((read_buffer.parameter_2
    << BHY_SHIFT_BIT_POSITION_BY_08_BITS) | (read_buffer.parameter_1));
    /* accel dynamic range*/
    accel_status->accel_dynamic_range = (u16)((read_buffer.parameter_4
    << BHY_SHIFT_BIT_POSITION_BY_08_BITS) | (read_buffer.parameter_3));
    /* accel flag*/
    accel_status->accel_flag = read_buffer.parameter_5;
    /* gyro physical status*/
    /* gyro sample rate*/
    gyro_status->gyro_sample_rate = (u16)((read_buffer.parameter_7
    << BHY_SHIFT_BIT_POSITION_BY_08_BITS) | (read_buffer.parameter_6));
    /* accel dynamic range*/
    gyro_status->gyro_dynamic_range = (u16)((read_buffer.parameter_9
    << BHY_SHIFT_BIT_POSITION_BY_08_BITS) | (read_buffer.parameter_8));
    /* accel flag*/
    gyro_status->gyro_flag = (u8)(read_buffer.parameter_10);
    /* mag physical status*/
    /* mag sample rate*/
    mag_status->mag_sample_rate = (u16)((read_buffer.parameter_12
    << BHY_SHIFT_BIT_POSITION_BY_08_BITS) | (read_buffer.parameter_11));
    /* mag dynamic range*/
    mag_status->mag_dynamic_range = (u16)((read_buffer.parameter_14
    << BHY_SHIFT_BIT_POSITION_BY_08_BITS) | (read_buffer.parameter_13));
    /* accel flag*/
    mag_status->mag_flag = (u8)(read_buffer.parameter_15);

    return com_rslt;
}
/*!
 *  @brief API used to get the non wakeup sensor information,
 *  Sensor page-3 parameter 1 to 31
 *
 *  @param v_parameter_request_u8 :
 *  Value desired parameter to read non wakeup sensor information
 *   param_request                   | value | Virtual sensor
 * ----------------------------------|-------|----------------
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_1   | 0x01  | Accelerometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_2   | 0x02  | Magnetometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_3   | 0x03  | Orientation
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_4   | 0x04  | Gyroscope
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_5   | 0x05  | Light
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_6   | 0x06  | Barometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_7   | 0x87  | Temperature
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_8   | 0x88  | Proximity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_9   | 0x89  | Gravity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_10  | 0x8A  | Liner accel
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_11  | 0x8B  | Rotation vector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_12  | 0x8C  | Humidity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_13  | 0x8D  | Ambient Temperature
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_14  | 0x8E  | Uncalibrated Mag
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_15  | 0x8F  | Game rotation Vector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_16  | 0x90  | Uncalibrated Gyro
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_17  | 0x91  | Signification Motion
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_18  | 0x92  | Step detector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_19  | 0x93  | Step Counter
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_20  | 0x94  | Geomagnetic
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_21  | 0x95  | Heart Rate
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_22  | 0x96  | Tilt Detector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_23  | 0x97  | Wakeup Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_24  | 0x98  | Glance Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_25  | 0x99  | Pickup Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_31  | 0x9F  | Activity
 *
 *  @param sensor_information :
 *  holds the value of non wakeup sensor information
 *
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_non_wakeup_sensor_information(
u8 v_parameter_request_u8,
struct sensor_information_non_wakeup_t *sensor_information)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    /* input as page 3 and parameter request for sensor page*/
    com_rslt = bhy_read_parameter_bytes(
    BHY_PAGE_3, v_parameter_request_u8);
    /* sensor type information */
    sensor_information->non_wakeup_sensor_type
    = (u8)(read_buffer.parameter_1);
    /* driver id information */
    sensor_information->non_wakeup_driver_id =
    (u8)(read_buffer.parameter_2);
    /* driver version information */
    sensor_information->non_wakeup_driver_version =
    (u8)(read_buffer.parameter_3);
    /* power information */
    sensor_information->non_wakeup_power =
    (u8)(read_buffer.parameter_4);
    /* maximum range information */
    sensor_information->non_wakeup_max_range = (u16)
    ((read_buffer.parameter_6 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_5));
    /* resolution information */
    sensor_information->non_wakeup_resolution = (u16)
    ((read_buffer.parameter_8 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_7));
    /* maximum rate information */
    sensor_information->non_wakeup_max_rate = (u16)
    ((read_buffer.parameter_10 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_9));
    /* fifo reserved information */
    sensor_information->non_wakeup_fifo_reserved = (u16)
    ((read_buffer.parameter_12 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_11));
    /* fifo max information */
    sensor_information->non_wakeup_fifo_max = (u16)
    ((read_buffer.parameter_14 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_13));
    /* event size information */
    sensor_information->non_wakeup_event_size = read_buffer.parameter_15;
    /* minimum rate information */
    sensor_information->non_wakeup_min_rate = read_buffer.parameter_16;

    return com_rslt;
}
/*!
 *  @brief API used to get the wakeup sensor information,
 *  Sensor page-3 parameter 32 to 63
 *
 *  @param v_parameter_request_u8 :
 *  Value desired parameter to read non wakeup sensor information
 *   param_request                   | value | Virtual sensor
 * ----------------------------------|-------|----------------
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_33  | 0xA1  | Accelerometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_34  | 0xA2  | Magnetometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_35  | 0xA3  | Orientation
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_36  | 0xA4  | Gyroscope
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_37  | 0xA5  | Light
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_38  | 0xA6  | Barometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_39  | 0xA7  | Temperature
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_40  | 0xA8  | Proximity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_41  | 0xA9  | Gravity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_42  | 0xAA  | Liner accel
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_43  | 0xAB  | Rotation vector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_44  | 0xAC  | Humidity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_45  | 0xAD  | Ambient Temperature
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_46  | 0xAE  | Uncalibrated Mag
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_47  | 0xAF  | Game rotation Vector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_48  | 0xB0  | Uncalibrated Gyro
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_49  | 0xB1  | Signification Motion
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_50  | 0xB2  | Step detector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_51  | 0xB3  | Step Counter
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_52  | 0xB4  | Geomagnetic
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_53  | 0xB5  | Heart Rate
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_54  | 0xB6  | Tilt Detector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_55  | 0xB7  | Wakeup Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_56  | 0xB8  | Glance Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_57  | 0xB9  | Pickup Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_63  | 0xBF  | Activity
 *
 *  @param sensor_information :
 *  holds the value of non wakeup sensor information
 *
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_wakeup_sensor_information(
u8 v_parameter_request_u8,
struct sensor_information_wakeup_t *sensor_information)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    /* input as page 3 and parameter request for sensor page*/
    com_rslt = bhy_read_parameter_bytes(
    BHY_PAGE_3, v_parameter_request_u8);
    /* sensor type information */
    sensor_information->wakeup_sensor_type =
    (u8)(read_buffer.parameter_1);
    /* driver id information */
    sensor_information->wakeup_driver_id =
    (u8)(read_buffer.parameter_2);
    /* driver version information */
    sensor_information->wakeup_driver_version =
    (u8)(read_buffer.parameter_3);
    /* power information */
    sensor_information->wakeup_power =
    (u8)(read_buffer.parameter_4);
    /* maximum range information */
    sensor_information->wakeup_max_range = (u16)
    ((read_buffer.parameter_6 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_5));
    /* resolution information */
    sensor_information->wakeup_resolution = (u16)
    ((read_buffer.parameter_8 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_7));
    /* maximum rate information */
    sensor_information->wakeup_max_rate = (u16)
    ((read_buffer.parameter_10 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_9));
    /* fifo reserved information */
    sensor_information->wakeup_fifo_reserved = (u16)
    ((read_buffer.parameter_12 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_11));
    /* fifo max information */
    sensor_information->wakeup_fifo_max = (u16)
    ((read_buffer.parameter_14 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_13));
    /* event size information */
    sensor_information->wakeup_event_size = read_buffer.parameter_15;
    /* minimum rate information */
    sensor_information->wakeup_min_rate = read_buffer.parameter_16;

    return com_rslt;
}
/*!
 *  @brief API used to set the sensor non wakeup configuration
 *  Sensor page-3 parameter 65 to 89
 *
 *  @param sensor_configuration : contains the non wakeup sensor configuration
 *
 *  @param v_parameter_request_u8: value of selected parameter request
 *   param_request                   | value | Virtual sensor
 * ----------------------------------|-------|----------------
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_65  | 0xC1  | Accelerometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_66  | 0xC2  | Magnetometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_67  | 0xC3  | Orientation
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_68  | 0xC4  | Gyroscope
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_69  | 0xC5  | Light
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_70  | 0xC6  | Barometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_71  | 0xC7  | Temperature
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_72  | 0xC8  | Proximity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_73  | 0xC9  | Gravity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_74  | 0xCA  | Liner accel
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_75  | 0xCB  | Rotation vector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_76  | 0xCC  | Humidity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_77  | 0xCD  | Ambient Temperature
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_78  | 0xCE  | Uncalibrated Mag
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_79  | 0xCF  | Game rotation Vector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_80  | 0xD0  | Uncalibrated Gyro
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_81  | 0xD1  | Signification Motion
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_82  | 0xD2  | Step detector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_83  | 0xD3  | Step Counter
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_84  | 0xD4  | Geomagnetic
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_85  | 0xD5  | Heart Rate
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_86  | 0xD6  | Tilt Detector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_87  | 0xD7  | Wakeup Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_88  | 0xD8  | Glance Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_89  | 0xD9  | Pickup Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_95  | 0xDF  | Activity
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_set_non_wakeup_sensor_configuration(
struct sensor_configuration_non_wakeup_t *sensor_configuration,
u8 v_parameter_request_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    /* write sample rate*/
    write_buffer.write_parameter_byte1 = (u8)(
    sensor_configuration->non_wakeup_sample_rate & BHY_MASK_LSB_DATA);
    write_buffer.write_parameter_byte2 = (u8)(
    (sensor_configuration->non_wakeup_sample_rate
    & BHY_MASK_MSB_DATA) >> BHY_SHIFT_BIT_POSITION_BY_08_BITS);
    /* write maximum report latency*/
    write_buffer.write_parameter_byte3 = (u8)(
    sensor_configuration->non_wakeup_max_report_latency
    & BHY_MASK_LSB_DATA);
    write_buffer.write_parameter_byte4 = (u8)(
    (sensor_configuration->non_wakeup_max_report_latency
    & BHY_MASK_MSB_DATA) >> BHY_SHIFT_BIT_POSITION_BY_08_BITS);
    /* write sensitivity*/
    write_buffer.write_parameter_byte5 = (u8)(
    sensor_configuration->non_wakeup_change_sensitivity
     & BHY_MASK_LSB_DATA);
    write_buffer.write_parameter_byte6 = (u8)(
    (sensor_configuration->non_wakeup_change_sensitivity
    & BHY_MASK_MSB_DATA) >> BHY_SHIFT_BIT_POSITION_BY_08_BITS);
    /* write dynamic range*/
    write_buffer.write_parameter_byte7 = (u8)(
    sensor_configuration->non_wakeup_dynamic_range & BHY_MASK_LSB_DATA);
    write_buffer.write_parameter_byte8 = (u8)(
    (sensor_configuration->non_wakeup_dynamic_range
    & BHY_MASK_MSB_DATA) >> BHY_SHIFT_BIT_POSITION_BY_08_BITS);
    /* load the parameter of non wakeup sensor configuration*/
    com_rslt = bhy_write_parameter_bytes(
    BHY_PAGE_3, v_parameter_request_u8);

    return com_rslt;
}
/*!
 *  @brief API used to get the sensor non wakeup configuration
 *  Sensor page-3 parameter 65 to 89
 *
 *  @param v_sample_rate_u16 :
 *  contains the non wakeup sample rate data
 *  @param v_max_report_latency_u16:
 *  contains the non wakeup max report latency
 *  @param v_change_sensitivity_u16:
 *  contains the non wakeup sensitivity
 *  @param v_dynamic_range_u16:
 *  contains the non wakeup dynamic range
 *
 *  @param v_parameter_request_u8: value of selected parameter request
 *   param_request                   | value | Virtual sensor
 * ----------------------------------|-------|----------------
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_65  | 0xC1  | Accelerometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_66  | 0xC2  | Magnetometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_67  | 0xC3  | Orientation
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_68  | 0xC4  | Gyroscope
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_69  | 0xC5  | Light
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_70  | 0xC6  | Barometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_71  | 0xC7  | Temperature
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_72  | 0xC8  | Proximity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_73  | 0xC9  | Gravity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_74  | 0xCA  | Liner accel
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_75  | 0xCB  | Rotation vector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_76  | 0xCC  | Humidity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_77  | 0xCD  | Ambient Temperature
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_78  | 0xCE  | Uncalibrated Mag
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_79  | 0xCF  | Game rotation Vector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_80  | 0xD0  | Uncalibrated Gyro
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_81  | 0xD1  | Signification Motion
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_82  | 0xD2  | Step detector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_83  | 0xD3  | Step Counter
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_84  | 0xD4  | Geomagnetic
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_85  | 0xD5  | Heart Rate
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_86  | 0xD6  | Tilt Detector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_87  | 0xD7  | Wakeup Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_88  | 0xD8  | Glance Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_89  | 0xD9  | Pickup Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_95  | 0xDF  | Activity
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_non_wakeup_sensor_configuration(
u8 v_parameter_request_u8,
u16 *v_sample_rate_u16, u16 *v_max_report_latency_u16,
u16 *v_change_sensitivity_u16, u16 *v_dynamic_range_u16)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    /* input as page 3 and parameter request for sensor page*/
    com_rslt = bhy_read_parameter_bytes(
    BHY_PAGE_3, v_parameter_request_u8);
    /* sample rate information */
    *v_sample_rate_u16 = (u16)
    ((read_buffer.parameter_2 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_1));
    /* max report latency information */
    *v_max_report_latency_u16 = (u16)
    ((read_buffer.parameter_4 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_3));
    /* sensitivity information */
    *v_change_sensitivity_u16 = (u16)
    ((read_buffer.parameter_6 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_5));
    /* dynamic range information */
    *v_dynamic_range_u16 = (u16)
    ((read_buffer.parameter_8 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_7));

    return com_rslt;
}
/*!
 *  @brief API used to set the sensor wakeup configuration
 *  Sensor page-3 parameter 65 to 89
 *
 *  @param sensor_configuration : contains the wakeup sensor configuration
 *
 *  @param v_parameter_request_u8: value of selected parameter request
 *   param_request                    | value | Virtual sensor
 * -----------------------------------|-------|----------------
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_97   | 0xE1  | Accelerometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_98   | 0xE2  | Magnetometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_99   | 0xE3  | Orientation
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_100  | 0xE4  | Gyroscope
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_101  | 0xE5  | Light
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_102  | 0xE6  | Barometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_103  | 0xE7  | Temperature
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_104  | 0xE8  | Proximity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_105  | 0xE9  | Gravity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_106  | 0xEA  | Liner accel
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_107  | 0xEB  | Rotation vector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_108  | 0xEC  | Humidity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_109  | 0xED  | Ambient Temperature
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_110  | 0xEE  | Uncalibrated Mag
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_111  | 0xEF  | Game rotation Vector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_112  | 0xF0  | Uncalibrated Gyro
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_113  | 0xF1  | Signification Motion
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_114  | 0xF2  | Step detector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_115  | 0xF3  | Step Counter
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_116  | 0xF4  | Geomagnetic
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_117  | 0xF5  | Heart Rate
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_118  | 0xF6  | Tilt Detector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_119  | 0xF7  | Wakeup Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_120  | 0xF8  | Glance Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_121  | 0xF9  | Pickup Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_127  | 0xFF  | Activity
 *
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_set_wakeup_sensor_configuration(
struct sensor_configuration_wakeup_t *sensor_configuration,
u8 v_parameter_request_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    /* write sample rate*/
    write_buffer.write_parameter_byte1 = (u8)(
    sensor_configuration->wakeup_sample_rate & BHY_MASK_LSB_DATA);
    write_buffer.write_parameter_byte2 = (u8)(
    (sensor_configuration->wakeup_sample_rate
    & BHY_MASK_MSB_DATA) >> BHY_SHIFT_BIT_POSITION_BY_08_BITS);
    /* write maximum report latency*/
    write_buffer.write_parameter_byte3 = (u8)(
    sensor_configuration->wakeup_max_report_latency & BHY_MASK_LSB_DATA);
    write_buffer.write_parameter_byte4 = (u8)(
    (sensor_configuration->wakeup_max_report_latency
    & BHY_MASK_MSB_DATA) >> BHY_SHIFT_BIT_POSITION_BY_08_BITS);
    /* write change sensitivity*/
    write_buffer.write_parameter_byte5 = (u8)(
    sensor_configuration->wakeup_change_sensitivity & BHY_MASK_LSB_DATA);
    write_buffer.write_parameter_byte6 = (u8)(
    (sensor_configuration->wakeup_change_sensitivity
    & BHY_MASK_MSB_DATA) >> BHY_SHIFT_BIT_POSITION_BY_08_BITS);
    /* write dynamic range*/
    write_buffer.write_parameter_byte7 = (u8)(
    sensor_configuration->wakeup_dynamic_range & BHY_MASK_LSB_DATA);
    write_buffer.write_parameter_byte8 = (u8)(
    (sensor_configuration->wakeup_dynamic_range
    & BHY_MASK_MSB_DATA) >> BHY_SHIFT_BIT_POSITION_BY_08_BITS);
    /* load the parameter of non wakeup sensor configuration*/
    com_rslt = bhy_write_parameter_bytes(
    BHY_PAGE_3, v_parameter_request_u8);

    return com_rslt;
}
/*!
 *  @brief API used to get the sensor wakeup configuration
 *  Sensor page-3 parameter 65 to 89
 *
 *  @param v_sample_rate_u16 : contains the  wakeup sample rate data
 *  @param v_max_report_latency_u16: contains the  wakeup max report latency
 *  @param v_change_sensitivity_u16: contains the  wakeup sensitivity
 *  @param v_dynamic_range_u16: contains the  wakeup dynamic range
 *
 *  @param v_parameter_request_u8: value of selected parameter request
 *   param_request                    | value | Virtual sensor
 * -----------------------------------|-------|----------------
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_97   | 0xE1  | Accelerometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_98   | 0xE2  | Magnetometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_99   | 0xE3  | Orientation
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_100  | 0xE4  | Gyroscope
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_101  | 0xE5  | Light
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_102  | 0xE6  | Barometer
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_103  | 0xE7  | Temperature
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_104  | 0xE8  | Proximity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_105  | 0xE9  | Gravity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_106  | 0xEA  | Liner accel
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_107  | 0xEB  | Rotation vector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_108  | 0xEC  | Humidity
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_109  | 0xED  | Ambient Temperature
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_110  | 0xEE  | Uncalibrated Mag
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_111  | 0xEF  | Game rotation Vector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_112  | 0xF0  | Uncalibrated Gyro
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_113  | 0xF1  | Signification Motion
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_114  | 0xF2  | Step detector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_115  | 0xF3  | Step Counter
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_116  | 0xF4  | Geomagnetic
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_117  | 0xF5  | Heart Rate
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_118  | 0xF6  | Tilt Detector
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_119  | 0xF7  | Wakeup Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_120  | 0xF8  | Glance Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_121  | 0xF9  | Pickup Gesture
 *  BHY_PARAMETER_REQUEST_READ_PARAMETER_127  | 0xFF  | Activity
 *
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_wakeup_sensor_configuration(
u8 v_parameter_request_u8,
u16 *v_sample_rate_u16, u16 *v_max_report_latency_u16,
u16 *v_change_sensitivity_u16, u16 *v_dynamic_range_u16)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    /* input as page 3 and parameter request for sensor page*/
    com_rslt = bhy_read_parameter_bytes(
    BHY_PAGE_3, v_parameter_request_u8);
    /* sample rate information */
    *v_sample_rate_u16 = (u16)
    ((read_buffer.parameter_2 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_1));
    /* max report latency information */
    *v_max_report_latency_u16 = (u16)
    ((read_buffer.parameter_4 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_3));
    /* sensitivity information */
    *v_change_sensitivity_u16 = (u16)
    ((read_buffer.parameter_6 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_5));
    /* dynamic range information */
    *v_dynamic_range_u16 = (u16)
    ((read_buffer.parameter_8 << BHY_SHIFT_BIT_POSITION_BY_08_BITS)
    | (read_buffer.parameter_7));

    return com_rslt;
}
/*!
 *  @brief API used to get the soft pass through
 *  Sensor page-15 parameter 0 to 7
 *
 *  @param soft_pass_through :
 *  contains the value of soft pass through
 *
 *  @param v_parameter_request_u8: value of selected parameter request
 *              parameter               |        value
 *  ------------------------------------|--------------------
 *    BHY_PARAMETER_REQUEST_WRITE_PARAMETER_1   |       0x01
 *    BHY_PARAMETER_REQUEST_WRITE_PARAMETER_2   |       0x02
 *    BHY_PARAMETER_REQUEST_WRITE_PARAMETER_3   |       0x03
 *
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_soft_pass_through(
struct soft_pass_through_read_t *soft_pass_through,
u8 v_parameter_request_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    /* input as page 3 and parameter request for sensor page*/
    com_rslt = bhy_read_parameter_bytes(
    BHY_PAGE_15, v_parameter_request_u8);
    /* i2c slave address information */
    soft_pass_through->i2c_slave_address =
    (u8)(read_buffer.parameter_1);
        /* start register information */
    soft_pass_through->start_register =
    (u8)(read_buffer.parameter_2);
        /* read length information */
    soft_pass_through->read_length =
    (u8)(read_buffer.parameter_3);
        /* completion status information */
    soft_pass_through->completion_status =
    (u8)(read_buffer.parameter_4);
        /* return register value 1 information */
    soft_pass_through->reg_value_byte1 =
    (u8)(read_buffer.parameter_5);
        /* return register value 2 information */
    soft_pass_through->reg_value_byte2 =
    (u8)(read_buffer.parameter_6);
        /* return register value 3 information */
    soft_pass_through->reg_value_byte3 =
    (u8)(read_buffer.parameter_7);
        /* return register value 4 information */
    soft_pass_through->reg_value_byte4 =
    (u8)(read_buffer.parameter_8);

    return com_rslt;
}
/*!
 *  @brief API used to set the soft pass through
 *  Sensor page-15 parameter 0 to 7
 *
 *  @param soft_pass_through :
 *  contains the value of soft pass through
 *
 *  @param v_parameter_request_u8: value of selected parameter request
 *              parameter               |        value
 *  ------------------------------------|--------------------
 *    BHY_PARAMETER_REQUEST_WRITE_PARAMETER_1   |       0x01
 *    BHY_PARAMETER_REQUEST_WRITE_PARAMETER_2   |       0x02
 *    BHY_PARAMETER_REQUEST_WRITE_PARAMETER_3   |       0x03
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_set_soft_pass_through(
struct soft_pass_through_write_t *soft_pass_through,
u8 v_parameter_request_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    /* i2c slave address information */
    write_buffer.write_parameter_byte1 =
    soft_pass_through->i2c_slave_address;
    /* start register information */
    write_buffer.write_parameter_byte2 =
    soft_pass_through->start_register;
    /* write length information */
    write_buffer.write_parameter_byte3 =
    soft_pass_through->write_length;
    /* completion status information */
    write_buffer.write_parameter_byte4 =
    soft_pass_through->completion_status;
    /* return register value 1 information */
    write_buffer.write_parameter_byte5 =
    soft_pass_through->reg_value_byte1;
    /* return register value 2 information */
    write_buffer.write_parameter_byte6 =
    soft_pass_through->reg_value_byte2;
    /* return register value 3 information */
    write_buffer.write_parameter_byte7 =
    soft_pass_through->reg_value_byte3;
    /* return register value 4 information */
    write_buffer.write_parameter_byte8 =
    soft_pass_through->reg_value_byte4;
    /* load the parameter of soft
    pass through sensor configuration*/
    com_rslt = bhy_write_parameter_bytes(
    BHY_PAGE_15, v_parameter_request_u8);
    return com_rslt;
}

/*!
 *  @brief API used to get the data from the parameter
 *  I2C page register from 0x3B to 0x4A
 *
 *
 *  @param v_page_select_u8 : This input value for set the desired page
 *  @param v_parameter_request_u8 :
 *  This input value for set the desired parameter
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_read_parameter_bytes(
u8 v_page_select_u8, u8 v_parameter_request_u8)
{
    /* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_parameter_ack_u8 = BHY_INIT_VALUE;
    u8 init_array_data = BHY_INIT_VALUE;
    u8 a_read_data_u8[BHY_READ_BUFFER_SIZE];
    u8 v_parameter_ack_check_u8 = BHY_INIT_VALUE;

    for (; init_array_data < BHY_READ_BUFFER_SIZE; init_array_data++)
        a_read_data_u8[init_array_data] = BHY_INIT_VALUE;
    /* select the page*/
    com_rslt = bhy_set_parameter_page_select(v_page_select_u8);
    /* select the parameter*/
    com_rslt += bhy_set_parameter_request(v_parameter_request_u8);
    /* read the values*/
    for (v_parameter_ack_check_u8 = BHY_INIT_VALUE;
    v_parameter_ack_check_u8 < BHY_PARAMETER_ACK_LENGTH;
    v_parameter_ack_check_u8++) {
        /* read acknowledgement*/
        com_rslt = bhy_get_parameter_acknowledge(&v_parameter_ack_u8);
        if (v_parameter_ack_u8 == v_parameter_request_u8) {
                break;
        } else if (v_parameter_ack_u8 == BHY_PARAMETER_ACK_CHECK) {
            p_bhy->delay_msec(BHY_PARAMETER_ACK_DELAY);
            com_rslt = BHY_ERROR;
        } else {
                /* device not ready yet */
                p_bhy->delay_msec(1);
        }
    }
    com_rslt =
    p_bhy->BHY_BUS_READ_FUNC(p_bhy->device_addr,
    BHY_I2C_REG_PARAMETER_READ_BUFFER_ZERO,
    a_read_data_u8, BHY_READ_BUFFER_LENGTH);
    read_buffer.parameter_1 =
    a_read_data_u8[BHY_READ_BUFFER_1_REG];
    read_buffer.parameter_2 =
    a_read_data_u8[BHY_READ_BUFFER_2_REG];
    read_buffer.parameter_3 =
    a_read_data_u8[BHY_READ_BUFFER_3_REG];
    read_buffer.parameter_4 =
    a_read_data_u8[BHY_READ_BUFFER_4_REG];
    read_buffer.parameter_5 =
    a_read_data_u8[BHY_READ_BUFFER_5_REG];
    read_buffer.parameter_6 =
    a_read_data_u8[BHY_READ_BUFFER_6_REG];
    read_buffer.parameter_7 =
    a_read_data_u8[BHY_READ_BUFFER_7_REG];
    read_buffer.parameter_8 =
    a_read_data_u8[BHY_READ_BUFFER_8_REG];
    read_buffer.parameter_9 =
    a_read_data_u8[BHY_READ_BUFFER_9_REG];
    read_buffer.parameter_10 =
    a_read_data_u8[BHY_READ_BUFFER_10_REG];
    read_buffer.parameter_11 =
    a_read_data_u8[BHY_READ_BUFFER_11_REG];
    read_buffer.parameter_12 =
    a_read_data_u8[BHY_READ_BUFFER_12_REG];
    read_buffer.parameter_13 =
    a_read_data_u8[BHY_READ_BUFFER_13_REG];
    read_buffer.parameter_14 =
    a_read_data_u8[BHY_READ_BUFFER_14_REG];
    read_buffer.parameter_15 =
    a_read_data_u8[BHY_READ_BUFFER_15_REG];
    read_buffer.parameter_16 =
    a_read_data_u8[BHY_READ_BUFFER_16_REG];

    return com_rslt;
}
/*!
 *  @brief API used to set the data from the parameter
 *  I2C page register from 0x5C to 0x63
 *
 *
 *  @param v_page_select_u8 : This input value for set the desired page
 *  @param v_parameter_request_u8 :
 *  This input value for set the desired parameter
 *
 *  @return results of bus communication function
 *  @retval 0 -> Success
 *  @retval -1 -> Error
 *
 *
*/
BHY_RETURN_FUNCTION_TYPE bhy_write_parameter_bytes(
u8 v_page_select_u8, u8 v_parameter_request_u8)
{
/* variable used for return the status of communication result*/
    BHY_RETURN_FUNCTION_TYPE com_rslt = BHY_COMM_RES;
    u8 v_parameter_ack_u8 = BHY_INIT_VALUE;
    u8 v_parameter_ack_check_u8 = BHY_INIT_VALUE;
    u8 v_write_parameter_byte_u8[BHY_WRITE_BUFFER_SIZE];
    u8 init_array_data = BHY_INIT_VALUE;

    for (; init_array_data < BHY_WRITE_BUFFER_SIZE; init_array_data++)
        v_write_parameter_byte_u8[init_array_data] = BHY_INIT_VALUE;
    /* check the p_bhy structure as NULL*/
    if (p_bhy == BHY_NULL) {
        return BHY_NULL;
        } else {
        /* Assign the load parameters*/
        v_write_parameter_byte_u8[BHY_WRITE_BUFFER_1_REG]
        = write_buffer.write_parameter_byte1;
        v_write_parameter_byte_u8[BHY_WRITE_BUFFER_2_REG]
        = write_buffer.write_parameter_byte2;
        v_write_parameter_byte_u8[BHY_WRITE_BUFFER_3_REG]
        = write_buffer.write_parameter_byte3;
        v_write_parameter_byte_u8[BHY_WRITE_BUFFER_4_REG]
        = write_buffer.write_parameter_byte4;
        v_write_parameter_byte_u8[BHY_WRITE_BUFFER_5_REG]
        = write_buffer.write_parameter_byte5;
        v_write_parameter_byte_u8[BHY_WRITE_BUFFER_6_REG]
        = write_buffer.write_parameter_byte6;
        v_write_parameter_byte_u8[BHY_WRITE_BUFFER_7_REG]
        = write_buffer.write_parameter_byte7;
        v_write_parameter_byte_u8[BHY_WRITE_BUFFER_8_REG]
        = write_buffer.write_parameter_byte8;
        /* write values to the load address*/
        com_rslt = p_bhy->BHY_BUS_WRITE_FUNC
        (p_bhy->device_addr,
        BHY_I2C_REG_PARAMETER_WRITE_BUFFER_ZERO,
        &v_write_parameter_byte_u8[BHY_WRITE_BUFFER_1_REG],
        BHY_WRITE_BUFFER_SIZE);
        /* select the page*/
        com_rslt += bhy_set_parameter_page_select(v_page_select_u8);
        /* select the parameter*/
        com_rslt += bhy_set_parameter_request(v_parameter_request_u8);
        for (v_parameter_ack_check_u8 = BHY_INIT_VALUE;
        v_parameter_ack_check_u8 < BHY_PARAMETER_ACK_LENGTH;
        v_parameter_ack_check_u8++) {
            /* read the acknowledgement*/
            com_rslt += bhy_get_parameter_acknowledge(
            &v_parameter_ack_u8);
            if (v_parameter_ack_u8 == v_parameter_request_u8) {
                com_rslt += BHY_SUCCESS;
                break;
            } else if (v_parameter_ack_u8
            == BHY_PARAMETER_ACK_CHECK) {
                p_bhy->delay_msec(BHY_PARAMETER_ACK_DELAY);
                com_rslt += BHY_ERROR;
            } else {
                /* device not ready yet */
                p_bhy->delay_msec(1);
            }
        }

    }
    return com_rslt;
}