
#ifndef BQ_COM
#define BQ_COM

#include "BQ_Register_Definitions.h"
#include "stm32f4xx_hal.h"


#define FRM_WRT_NR 0x90
#define FRM_WRT_R 0x81

#define DEFAULTNUMOFCELLS 10
#define DEFAULTNUMOFDIETEMPS 0

#define BQUARTTIMEOUT 200




void init_BQCom(UART_HandleTypeDef* uarthandle);

uint16_t Calculate_CRC(uint8_t* message_buffer, uint16_t bufferlength);
uint16_t Check_CRC(uint8_t* message_buffer, uint16_t bufferlength);

uint32_t BQ_Write_Register(uint8_t registeraddress, uint8_t registersize, uint32_t data);
uint8_t BQ_Read_Register(uint8_t registeraddress, uint8_t registersize, uint32_t* data);
uint32_t BQ_ReadMeasurements(uint8_t* buffer, uint8_t bufferlength);
uint8_t Communication_Reset();

uint8_t BQ_UART_Transmit(uint8_t* message_buffer, uint16_t bufferlength);
uint8_t BQ_UART_Receive(uint8_t* message_buffer, uint16_t bufferlength);

#endif
