/*
* Copyright (c) 2017, STMicroelectronics - All Rights Reserved
*
* This file is part of VL53L1 Core and is dual licensed,
* either 'STMicroelectronics
* Proprietary license'
* or 'BSD 3-clause "New" or "Revised" License' , at your option.
*
********************************************************************************
*
* 'STMicroelectronics Proprietary license'
*
********************************************************************************
*
* License terms: STMicroelectronics Proprietary in accordance with licensing
* terms at www.st.com/sla0081
*
* STMicroelectronics confidential
* Reproduction and Communication of this document is strictly prohibited unless
* specifically authorized in writing by STMicroelectronics.
*
*
********************************************************************************
*
* Alternatively, VL53L1 Core may be distributed under the terms of
* 'BSD 3-clause "New" or "Revised" License', in which case the following
* provisions apply instead of the ones mentioned above :
*
********************************************************************************
*
* License terms: BSD 3-clause "New" or "Revised" License.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its 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 THE 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.
*
*
********************************************************************************
*
*/

/**
 * @file   vl53l1_register_funcs.h
 * @brief  VL53L1 Register Function declarations
 */

#ifndef _VL53L1_REGISTER_FUNCS_H_
#define _VL53L1_REGISTER_FUNCS_H_

#include "vl53l1_platform.h"

#ifdef __cplusplus
extern "C"
{
#endif


/**
 * @brief  Encodes data structure VL53L1_static_nvm_managed_t into a I2C write buffer
 *
 * Buffer must be at least 11 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_static_nvm_managed_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

VL53L1_Error VL53L1_i2c_encode_static_nvm_managed(
	VL53L1_static_nvm_managed_t  *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);


/**
 * @brief  Decodes data structure VL53L1_static_nvm_managed_t from the input I2C read buffer
 *
 * Buffer must be at least 11 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_static_nvm_managed_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_i2c_decode_static_nvm_managed(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_static_nvm_managed_t  *pdata);


/**
 * @brief  Sets static_nvm_managed register group
 *
 * Serailises (encodes) VL53L1_static_nvm_managed_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_static_nvm_managed_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_set_static_nvm_managed(
	VL53L1_DEV                 Dev,
	VL53L1_static_nvm_managed_t  *pdata);


/**
 * @brief  Gets static_nvm_managed register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_static_nvm_managed_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_static_nvm_managed_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_get_static_nvm_managed(
	VL53L1_DEV                 Dev,
	VL53L1_static_nvm_managed_t  *pdata);


/**
 * @brief  Encodes data structure VL53L1_customer_nvm_managed_t into a I2C write buffer
 *
 * Buffer must be at least 23 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_customer_nvm_managed_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

VL53L1_Error VL53L1_i2c_encode_customer_nvm_managed(
	VL53L1_customer_nvm_managed_t  *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);


/**
 * @brief  Decodes data structure VL53L1_customer_nvm_managed_t from the input I2C read buffer
 *
 * Buffer must be at least 23 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_customer_nvm_managed_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_i2c_decode_customer_nvm_managed(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_customer_nvm_managed_t  *pdata);


/**
 * @brief  Sets customer_nvm_managed register group
 *
 * Serailises (encodes) VL53L1_customer_nvm_managed_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_customer_nvm_managed_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_set_customer_nvm_managed(
	VL53L1_DEV                 Dev,
	VL53L1_customer_nvm_managed_t  *pdata);


/**
 * @brief  Gets customer_nvm_managed register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_customer_nvm_managed_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_customer_nvm_managed_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_get_customer_nvm_managed(
	VL53L1_DEV                 Dev,
	VL53L1_customer_nvm_managed_t  *pdata);


/**
 * @brief  Encodes data structure VL53L1_static_config_t into a I2C write buffer
 *
 * Buffer must be at least 32 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_static_config_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

VL53L1_Error VL53L1_i2c_encode_static_config(
	VL53L1_static_config_t    *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);


/**
 * @brief  Decodes data structure VL53L1_static_config_t from the input I2C read buffer
 *
 * Buffer must be at least 32 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_static_config_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_i2c_decode_static_config(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_static_config_t    *pdata);


/**
 * @brief  Sets static_config register group
 *
 * Serailises (encodes) VL53L1_static_config_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_static_config_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_set_static_config(
	VL53L1_DEV                 Dev,
	VL53L1_static_config_t    *pdata);


/**
 * @brief  Gets static_config register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_static_config_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_static_config_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef VL53L1_DEBUG
VL53L1_Error VL53L1_get_static_config(
	VL53L1_DEV                 Dev,
	VL53L1_static_config_t    *pdata);
#endif


/**
 * @brief  Encodes data structure VL53L1_general_config_t into a I2C write buffer
 *
 * Buffer must be at least 22 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_general_config_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

VL53L1_Error VL53L1_i2c_encode_general_config(
	VL53L1_general_config_t   *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);


/**
 * @brief  Decodes data structure VL53L1_general_config_t from the input I2C read buffer
 *
 * Buffer must be at least 22 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_general_config_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_i2c_decode_general_config(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_general_config_t   *pdata);


/**
 * @brief  Sets general_config register group
 *
 * Serailises (encodes) VL53L1_general_config_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_general_config_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_set_general_config(
	VL53L1_DEV                 Dev,
	VL53L1_general_config_t   *pdata);


/**
 * @brief  Gets general_config register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_general_config_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_general_config_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef VL53L1_DEBUG
VL53L1_Error VL53L1_get_general_config(
	VL53L1_DEV                 Dev,
	VL53L1_general_config_t   *pdata);
#endif


/**
 * @brief  Encodes data structure VL53L1_timing_config_t into a I2C write buffer
 *
 * Buffer must be at least 23 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_timing_config_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

VL53L1_Error VL53L1_i2c_encode_timing_config(
	VL53L1_timing_config_t    *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);


/**
 * @brief  Decodes data structure VL53L1_timing_config_t from the input I2C read buffer
 *
 * Buffer must be at least 23 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_timing_config_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_i2c_decode_timing_config(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_timing_config_t    *pdata);
#endif


/**
 * @brief  Sets timing_config register group
 *
 * Serailises (encodes) VL53L1_timing_config_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_timing_config_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_set_timing_config(
	VL53L1_DEV                 Dev,
	VL53L1_timing_config_t    *pdata);
#endif


/**
 * @brief  Gets timing_config register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_timing_config_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_timing_config_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef VL53L1_DEBUG
VL53L1_Error VL53L1_get_timing_config(
	VL53L1_DEV                 Dev,
	VL53L1_timing_config_t    *pdata);
#endif


/**
 * @brief  Encodes data structure VL53L1_dynamic_config_t into a I2C write buffer
 *
 * Buffer must be at least 18 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_dynamic_config_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

VL53L1_Error VL53L1_i2c_encode_dynamic_config(
	VL53L1_dynamic_config_t   *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);


/**
 * @brief  Decodes data structure VL53L1_dynamic_config_t from the input I2C read buffer
 *
 * Buffer must be at least 18 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_dynamic_config_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_i2c_decode_dynamic_config(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_dynamic_config_t   *pdata);
#endif


/**
 * @brief  Sets dynamic_config register group
 *
 * Serailises (encodes) VL53L1_dynamic_config_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_dynamic_config_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_set_dynamic_config(
	VL53L1_DEV                 Dev,
	VL53L1_dynamic_config_t   *pdata);


/**
 * @brief  Gets dynamic_config register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_dynamic_config_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_dynamic_config_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef VL53L1_DEBUG
VL53L1_Error VL53L1_get_dynamic_config(
	VL53L1_DEV                 Dev,
	VL53L1_dynamic_config_t   *pdata);
#endif

/**
 * @brief  Encodes data structure VL53L1_system_control_t into a I2C write buffer
 *
 * Buffer must be at least 5 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_system_control_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

VL53L1_Error VL53L1_i2c_encode_system_control(
	VL53L1_system_control_t   *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);


/**
 * @brief  Decodes data structure VL53L1_system_control_t from the input I2C read buffer
 *
 * Buffer must be at least 5 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_system_control_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_i2c_decode_system_control(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_system_control_t   *pdata);
#endif


/**
 * @brief  Sets system_control register group
 *
 * Serailises (encodes) VL53L1_system_control_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_system_control_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_set_system_control(
	VL53L1_DEV                 Dev,
	VL53L1_system_control_t   *pdata);


/**
 * @brief  Gets system_control register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_system_control_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_system_control_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef VL53L1_DEBUG
VL53L1_Error VL53L1_get_system_control(
	VL53L1_DEV                 Dev,
	VL53L1_system_control_t   *pdata);
#endif


/**
 * @brief  Encodes data structure VL53L1_system_results_t into a I2C write buffer
 *
 * Buffer must be at least 44 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_system_results_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_i2c_encode_system_results(
	VL53L1_system_results_t   *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);
#endif


/**
 * @brief  Decodes data structure VL53L1_system_results_t from the input I2C read buffer
 *
 * Buffer must be at least 44 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_system_results_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_i2c_decode_system_results(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_system_results_t   *pdata);


/**
 * @brief  Sets system_results register group
 *
 * Serailises (encodes) VL53L1_system_results_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_system_results_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_set_system_results(
	VL53L1_DEV                 Dev,
	VL53L1_system_results_t   *pdata);
#endif


/**
 * @brief  Gets system_results register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_system_results_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_system_results_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_get_system_results(
	VL53L1_DEV                 Dev,
	VL53L1_system_results_t   *pdata);


/**
 * @brief  Encodes data structure VL53L1_core_results_t into a I2C write buffer
 *
 * Buffer must be at least 33 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_core_results_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_i2c_encode_core_results(
	VL53L1_core_results_t     *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);
#endif


/**
 * @brief  Decodes data structure VL53L1_core_results_t from the input I2C read buffer
 *
 * Buffer must be at least 33 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_core_results_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_i2c_decode_core_results(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_core_results_t     *pdata);


/**
 * @brief  Sets core_results register group
 *
 * Serailises (encodes) VL53L1_core_results_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_core_results_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef VL53L1_DEBUG
VL53L1_Error VL53L1_set_core_results(
	VL53L1_DEV                 Dev,
	VL53L1_core_results_t     *pdata);
#endif


/**
 * @brief  Gets core_results register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_core_results_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_core_results_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_get_core_results(
	VL53L1_DEV                 Dev,
	VL53L1_core_results_t     *pdata);
#endif


/**
 * @brief  Encodes data structure VL53L1_debug_results_t into a I2C write buffer
 *
 * Buffer must be at least 56 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_debug_results_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

#ifdef VL53L1_DEBUG
VL53L1_Error VL53L1_i2c_encode_debug_results(
	VL53L1_debug_results_t    *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);
#endif

/**
 * @brief  Decodes data structure VL53L1_debug_results_t from the input I2C read buffer
 *
 * Buffer must be at least 56 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_debug_results_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_i2c_decode_debug_results(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_debug_results_t    *pdata);


/**
 * @brief  Sets debug_results register group
 *
 * Serailises (encodes) VL53L1_debug_results_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_debug_results_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef VL53L1_DEBUG
VL53L1_Error VL53L1_set_debug_results(
	VL53L1_DEV                 Dev,
	VL53L1_debug_results_t    *pdata);

/**
 * @brief  Gets debug_results register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_debug_results_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_debug_results_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_get_debug_results(
	VL53L1_DEV                 Dev,
	VL53L1_debug_results_t    *pdata);

#endif

/**
 * @brief  Encodes data structure VL53L1_nvm_copy_data_t into a I2C write buffer
 *
 * Buffer must be at least 49 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_nvm_copy_data_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_i2c_encode_nvm_copy_data(
	VL53L1_nvm_copy_data_t    *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);
#endif


/**
 * @brief  Decodes data structure VL53L1_nvm_copy_data_t from the input I2C read buffer
 *
 * Buffer must be at least 49 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_nvm_copy_data_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_i2c_decode_nvm_copy_data(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_nvm_copy_data_t    *pdata);


/**
 * @brief  Sets nvm_copy_data register group
 *
 * Serailises (encodes) VL53L1_nvm_copy_data_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_nvm_copy_data_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */
#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_set_nvm_copy_data(
	VL53L1_DEV                 Dev,
	VL53L1_nvm_copy_data_t    *pdata);
#endif


/**
 * @brief  Gets nvm_copy_data register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_nvm_copy_data_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_nvm_copy_data_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_get_nvm_copy_data(
	VL53L1_DEV                 Dev,
	VL53L1_nvm_copy_data_t    *pdata);


/**
 * @brief  Encodes data structure VL53L1_prev_shadow_system_results_t into a I2C write buffer
 *
 * Buffer must be at least 44 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_prev_shadow_system_results_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

#ifdef VL53L1_DEBUG
VL53L1_Error VL53L1_i2c_encode_prev_shadow_system_results(
	VL53L1_prev_shadow_system_results_t  *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);


/**
 * @brief  Decodes data structure VL53L1_prev_shadow_system_results_t from the input I2C read buffer
 *
 * Buffer must be at least 44 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_prev_shadow_system_results_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_i2c_decode_prev_shadow_system_results(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_prev_shadow_system_results_t  *pdata);


/**
 * @brief  Sets prev_shadow_system_results register group
 *
 * Serailises (encodes) VL53L1_prev_shadow_system_results_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_prev_shadow_system_results_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_set_prev_shadow_system_results(
	VL53L1_DEV                 Dev,
	VL53L1_prev_shadow_system_results_t  *pdata);


/**
 * @brief  Gets prev_shadow_system_results register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_prev_shadow_system_results_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_prev_shadow_system_results_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_get_prev_shadow_system_results(
	VL53L1_DEV                 Dev,
	VL53L1_prev_shadow_system_results_t  *pdata);

/**
 * @brief  Encodes data structure VL53L1_prev_shadow_core_results_t into a I2C write buffer
 *
 * Buffer must be at least 33 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_prev_shadow_core_results_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

VL53L1_Error VL53L1_i2c_encode_prev_shadow_core_results(
	VL53L1_prev_shadow_core_results_t  *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);


/**
 * @brief  Decodes data structure VL53L1_prev_shadow_core_results_t from the input I2C read buffer
 *
 * Buffer must be at least 33 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_prev_shadow_core_results_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_i2c_decode_prev_shadow_core_results(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_prev_shadow_core_results_t  *pdata);


/**
 * @brief  Sets prev_shadow_core_results register group
 *
 * Serailises (encodes) VL53L1_prev_shadow_core_results_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_prev_shadow_core_results_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_set_prev_shadow_core_results(
	VL53L1_DEV                 Dev,
	VL53L1_prev_shadow_core_results_t  *pdata);


/**
 * @brief  Gets prev_shadow_core_results register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_prev_shadow_core_results_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_prev_shadow_core_results_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */
VL53L1_Error VL53L1_get_prev_shadow_core_results(
	VL53L1_DEV                 Dev,
	VL53L1_prev_shadow_core_results_t  *pdata);


/**
 * @brief  Encodes data structure VL53L1_patch_debug_t into a I2C write buffer
 *
 * Buffer must be at least 2 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_patch_debug_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

VL53L1_Error VL53L1_i2c_encode_patch_debug(
	VL53L1_patch_debug_t      *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);


/**
 * @brief  Decodes data structure VL53L1_patch_debug_t from the input I2C read buffer
 *
 * Buffer must be at least 2 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_patch_debug_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_i2c_decode_patch_debug(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_patch_debug_t      *pdata);


/**
 * @brief  Sets patch_debug register group
 *
 * Serailises (encodes) VL53L1_patch_debug_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_patch_debug_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_set_patch_debug(
	VL53L1_DEV                 Dev,
	VL53L1_patch_debug_t      *pdata);


/**
 * @brief  Gets patch_debug register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_patch_debug_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_patch_debug_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_get_patch_debug(
	VL53L1_DEV                 Dev,
	VL53L1_patch_debug_t      *pdata);

#endif

/**
 * @brief  Encodes data structure VL53L1_gph_general_config_t into a I2C write buffer
 *
 * Buffer must be at least 5 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_gph_general_config_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_i2c_encode_gph_general_config(
	VL53L1_gph_general_config_t  *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);
#endif


/**
 * @brief  Decodes data structure VL53L1_gph_general_config_t from the input I2C read buffer
 *
 * Buffer must be at least 5 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_gph_general_config_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_i2c_decode_gph_general_config(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_gph_general_config_t  *pdata);
#endif


/**
 * @brief  Sets gph_general_config register group
 *
 * Serailises (encodes) VL53L1_gph_general_config_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_gph_general_config_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_set_gph_general_config(
	VL53L1_DEV                 Dev,
	VL53L1_gph_general_config_t  *pdata);
#endif

/**
 * @brief  Gets gph_general_config register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_gph_general_config_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_gph_general_config_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_get_gph_general_config(
	VL53L1_DEV                 Dev,
	VL53L1_gph_general_config_t  *pdata);
#endif


/**
 * @brief  Encodes data structure VL53L1_gph_static_config_t into a I2C write buffer
 *
 * Buffer must be at least 6 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_gph_static_config_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_i2c_encode_gph_static_config(
	VL53L1_gph_static_config_t  *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);
#endif


/**
 * @brief  Decodes data structure VL53L1_gph_static_config_t from the input I2C read buffer
 *
 * Buffer must be at least 6 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_gph_static_config_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_i2c_decode_gph_static_config(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_gph_static_config_t  *pdata);
#endif


/**
 * @brief  Sets gph_static_config register group
 *
 * Serailises (encodes) VL53L1_gph_static_config_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_gph_static_config_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef VL53L1_DEBUG
VL53L1_Error VL53L1_set_gph_static_config(
	VL53L1_DEV                 Dev,
	VL53L1_gph_static_config_t  *pdata);
#endif


/**
 * @brief  Gets gph_static_config register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_gph_static_config_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_gph_static_config_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_get_gph_static_config(
	VL53L1_DEV                 Dev,
	VL53L1_gph_static_config_t  *pdata);
#endif


/**
 * @brief  Encodes data structure VL53L1_gph_timing_config_t into a I2C write buffer
 *
 * Buffer must be at least 16 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_gph_timing_config_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_i2c_encode_gph_timing_config(
	VL53L1_gph_timing_config_t  *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);
#endif


/**
 * @brief  Decodes data structure VL53L1_gph_timing_config_t from the input I2C read buffer
 *
 * Buffer must be at least 16 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_gph_timing_config_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_i2c_decode_gph_timing_config(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_gph_timing_config_t  *pdata);
#endif


/**
 * @brief  Sets gph_timing_config register group
 *
 * Serailises (encodes) VL53L1_gph_timing_config_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_gph_timing_config_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef VL53L1_DEBUG
VL53L1_Error VL53L1_set_gph_timing_config(
	VL53L1_DEV                 Dev,
	VL53L1_gph_timing_config_t  *pdata);
#endif


/**
 * @brief  Gets gph_timing_config register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_gph_timing_config_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_gph_timing_config_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

#ifdef PAL_EXTENDED
VL53L1_Error VL53L1_get_gph_timing_config(
	VL53L1_DEV                 Dev,
	VL53L1_gph_timing_config_t  *pdata);
#endif


/**
 * @brief  Encodes data structure VL53L1_fw_internal_t into a I2C write buffer
 *
 * Buffer must be at least 2 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_fw_internal_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

#ifdef VL53L1_DEBUG
VL53L1_Error VL53L1_i2c_encode_fw_internal(
	VL53L1_fw_internal_t      *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);


/**
 * @brief  Decodes data structure VL53L1_fw_internal_t from the input I2C read buffer
 *
 * Buffer must be at least 2 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_fw_internal_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_i2c_decode_fw_internal(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_fw_internal_t      *pdata);


/**
 * @brief  Sets fw_internal register group
 *
 * Serailises (encodes) VL53L1_fw_internal_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_fw_internal_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_set_fw_internal(
	VL53L1_DEV                 Dev,
	VL53L1_fw_internal_t      *pdata);


/**
 * @brief  Gets fw_internal register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_fw_internal_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_fw_internal_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_get_fw_internal(
	VL53L1_DEV                 Dev,
	VL53L1_fw_internal_t      *pdata);



/**
 * @brief  Encodes data structure VL53L1_patch_results_t into a I2C write buffer
 *
 * Buffer must be at least 90 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_patch_results_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

VL53L1_Error VL53L1_i2c_encode_patch_results(
	VL53L1_patch_results_t    *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);


/**
 * @brief  Decodes data structure VL53L1_patch_results_t from the input I2C read buffer
 *
 * Buffer must be at least 90 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_patch_results_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_i2c_decode_patch_results(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_patch_results_t    *pdata);


/**
 * @brief  Sets patch_results register group
 *
 * Serailises (encodes) VL53L1_patch_results_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_patch_results_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_set_patch_results(
	VL53L1_DEV                 Dev,
	VL53L1_patch_results_t    *pdata);


/**
 * @brief  Gets patch_results register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_patch_results_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_patch_results_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_get_patch_results(
	VL53L1_DEV                 Dev,
	VL53L1_patch_results_t    *pdata);
#endif


/**
 * @brief  Encodes data structure VL53L1_shadow_system_results_t into a I2C write buffer
 *
 * Buffer must be at least 82 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_shadow_system_results_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

#ifdef VL53L1_DEBUG
VL53L1_Error VL53L1_i2c_encode_shadow_system_results(
	VL53L1_shadow_system_results_t  *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);


/**
 * @brief  Decodes data structure VL53L1_shadow_system_results_t from the input I2C read buffer
 *
 * Buffer must be at least 82 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_shadow_system_results_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_i2c_decode_shadow_system_results(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_shadow_system_results_t  *pdata);


/**
 * @brief  Sets shadow_system_results register group
 *
 * Serailises (encodes) VL53L1_shadow_system_results_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_shadow_system_results_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_set_shadow_system_results(
	VL53L1_DEV                 Dev,
	VL53L1_shadow_system_results_t  *pdata);


/**
 * @brief  Gets shadow_system_results register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_shadow_system_results_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_shadow_system_results_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_get_shadow_system_results(
	VL53L1_DEV                 Dev,
	VL53L1_shadow_system_results_t  *pdata);


/**
 * @brief  Encodes data structure VL53L1_shadow_core_results_t into a I2C write buffer
 *
 * Buffer must be at least 33 bytes
 *
 * @param[in]   pdata     : pointer to VL53L1_shadow_core_results_t data structure
 * @param[in]   buf_size  : size of input buffer
 * @param[out]  pbuffer   : uint8_t buffer to write serialised data into (I2C Write Buffer)
 */

VL53L1_Error VL53L1_i2c_encode_shadow_core_results(
	VL53L1_shadow_core_results_t  *pdata,
	uint16_t                   buf_size,
	uint8_t                   *pbuffer);


/**
 * @brief  Decodes data structure VL53L1_shadow_core_results_t from the input I2C read buffer
 *
 * Buffer must be at least 33 bytes
 *
 * @param[in]   buf_size  : size of input buffer
 * @param[in]   pbuffer   : uint8_t buffer contain input serialised data (I2C read buffer)
 * @param[out]  pdata     : pointer to VL53L1_shadow_core_results_t data structure
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_i2c_decode_shadow_core_results(
	uint16_t                   buf_size,
	uint8_t                   *pbuffer,
	VL53L1_shadow_core_results_t  *pdata);


/**
 * @brief  Sets shadow_core_results register group
 *
 * Serailises (encodes) VL53L1_shadow_core_results_t structure into a I2C write data buffer
 * and sends the buffer to the device via a multi byte I2C write transaction
 *
 * @param[in]  Dev       : device handle
 * @param[in]  pdata     : pointer to VL53L1_shadow_core_results_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_set_shadow_core_results(
	VL53L1_DEV                 Dev,
	VL53L1_shadow_core_results_t  *pdata);


/**
 * @brief  Gets shadow_core_results register group
 *
 * Reads register info from the device via a multi byte I2C read transaction and
 * deserialises (decodes) the data into the VL53L1_shadow_core_results_t structure
 *
 * @param[in]  Dev       : device handle
 * @param[out] pdata     : pointer to VL53L1_shadow_core_results_t
 *
 * @return  VL53L1_ERROR_NONE     Success
 * @return  "Other error code"    See ::VL53L1_Error
 */

VL53L1_Error VL53L1_get_shadow_core_results(
	VL53L1_DEV                 Dev,
	VL53L1_shadow_core_results_t  *pdata);
#endif


#ifdef __cplusplus
}
#endif

#endif

