/*******************************************************************************
Copyright (c) 2020 - Analog Devices Inc. All Rights Reserved.
This software is proprietary & confidential to Analog Devices, Inc.
and its licensor.
******************************************************************************
* @file:    mcuWrapper.h
* @brief:   Generic wrapper header file
* @version: $Revision$
* @date:    $Date$
* Developed by: ADIBMS Software team, Bangalore, India
*****************************************************************************/
/** @addtogroup MUC_DRIVER
*  @{
*
*/

/** @addtogroup SPI_DRIVER SPI DRIVER
*  @{
*
*/
#ifndef __ADBMSWRAPPER_H
#define __ADBMSWRAPPER_H
#include "common.h"

#ifdef MBED

#else
#include "main.h"
#include "stm32f4xx_hal.h"
#include "stm32f4xx_hal_tim.h"
#include "stm32f4xx_it.h"

extern ADC_HandleTypeDef hadc1;         /* Mcu dependent ADC handler */
extern I2C_HandleTypeDef hi2c1;         /* Mcu dependent I2C handler */
extern I2C_HandleTypeDef hi2c3;         /* Mcu dependent I2C handler */
extern SPI_HandleTypeDef hspi1;         /* Mcu dependent SPI handler */
extern SPI_HandleTypeDef hspi5;         /* Mcu dependent SPI handler */
extern UART_HandleTypeDef huart4;       /* Mcu dependent UART handler */
extern UART_HandleTypeDef huart5;       /* Mcu dependent UART handler */
extern TIM_HandleTypeDef htim2;         /* Mcu dependent TIM handler */
extern TIM_HandleTypeDef htim5;         /* Mcu dependent TIM handler */

#define CS_PIN ARDUINO_GPIO10_Pin               /* Mcu dependent chip select */
#define GPIO_PORT ARDUINO_GPIO10_GPIO_Port      /* Mcu dependent adc chip select port */
#endif

void Delay_ms(uint32_t delay);
void adBmsCsLow(void);
void adBmsCsHigh(void);
void spiWriteBytes
( 
  uint16_t size,                                /*Option: Number of bytes to be written on the SPI port*/
  uint8_t *tx_Data                              /*Array of bytes to be written on the SPI port*/
);
void spiWriteReadBytes
(
  uint8_t *tx_data,                             /*array of data to be written on SPI port*/
  uint8_t *rx_data,                             /*Input: array that will store the data read by the SPI port*/
  uint16_t size                             /*Option: number of bytes*/
);
void spiReadBytes(uint16_t size, uint8_t *rx_data);
void startTimer(void);
void stopTimer(void);
uint32_t getTimCount(void);
void adBmsWakeupIc(uint8_t total_ic);

#endif
/** @}*/
/** @}*/