/**
  ******************************************************************************
  * @file    platform.h
  * @author  IMG SW Application Team
  * @brief   This file contains all the platform functions prototypes
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2023 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */

#ifndef _PLATFORM_H_
#define _PLATFORM_H_
#pragma once

#include "vl53l4ed.h"

typedef VL53L4ED_Object_t* Dev_t;

/**
 * @brief Mandatory function used to read one single byte.
 * @param Dev_t : Pointer of VL53L4ED Object
 * structure.
 * @param (uint16_t) Address : I2C location of value to read.
 * @param (uint8_t) *p_values : Pointer of value to read.
 * @return (uint8_t) status : 0 if OK
 */

uint8_t VL53L4ED_RdByte(
		Dev_t dev,
		uint16_t RegisterAdress,
		uint8_t *p_value);

/**
 * @brief Mandatory function used to write one single byte.
 * @param Dev_t : Pointer of VL53L4ED Object
 * structure.
 * @param (uint16_t) Address : I2C location of value to read.
 * @param (uint8_t) value : Pointer of value to write.
 * @return (uint8_t) status : 0 if OK
 */

uint8_t VL53L4ED_WrByte(
		Dev_t dev,
		uint16_t RegisterAdress,
		uint8_t value);

/**
 * @brief Mandatory function used to read word.
 * @param Dev_t : Pointer of VL53L4ED Object
 * structure.
 * @param (uint16_t) Address : I2C location of value to read.
 * @param (uint16_t) *p_values : Pointer of value to read.
 * @return (uint8_t) status : 0 if OK
 */

uint8_t VL53L4ED_RdWord(
		Dev_t dev,
		uint16_t RegisterAdress,
		uint16_t *p_value);

/**
 * @brief Mandatory function used to write word.
 * @param Dev_t : Pointer of VL53L4ED Object
 * structure.
 * @param (uint16_t) Address : I2C location of value to read.
 * @param (uint16_t) value : Pointer of value to write.
 * @return (uint8_t) status : 0 if OK
 */

uint8_t VL53L4ED_WrWord(
		Dev_t dev,
		uint16_t RegisterAdress,
		uint16_t value);

/**
 * @brief Mandatory function used to read double word.
 * @param Dev_t : Pointer of VL53L4ED Object
 * structure.
 * @param (uint16_t) Address : I2C location of value to read.
 * @param (uint32_t) *p_values : Pointer of value to read.
 * @return (uint8_t) status : 0 if OK
 */

uint8_t VL53L4ED_RdDWord(
		Dev_t dev,
		uint16_t RegisterAdress,
		uint32_t *p_value);

/**
 * @brief Mandatory function used to write double word.
 * @param Dev_t : Pointer of VL53L4ED Object
 * structure.
 * @param (uint16_t) Address : I2C location of value to read.
 * @param (uint32_t) value : Pointer of value to write.
 * @return (uint8_t) status : 0 if OK
 */

uint8_t VL53L4ED_WrDWord(
		Dev_t dev,
		uint16_t RegisterAdress,
		uint32_t value);


/**
 * @brief Mandatory function, used to wait during an amount of time. It must be
 * filled as it's used into the API.
 * @param Dev_t : Pointer of VL53L4ED Object
 * structure.
 * @param (uint32_t) TimeMs : Time to wait in ms.
 * @return (uint8_t) status : 0 if wait is finished.
 */

uint8_t VL53L4ED_WaitMs(
		Dev_t dev,
		uint32_t TimeMs);

#endif	// _PLATFORM_H_