diff --git a/Core/Inc/BQ_Communication.h b/Core/Inc/BQ_Communication.h index 4a1c943..9c1452e 100644 --- a/Core/Inc/BQ_Communication.h +++ b/Core/Inc/BQ_Communication.h @@ -16,13 +16,50 @@ typedef enum { BQ_COMM_OK, BQ_COMM_ERR_HAL, BQ_COMM_ERR_CRC } BQ_Comm_Status; +/** + * @brief Defines UART and DMA Handle + * + * Always call the init routine before using any other function of the libary. + */ void init_BQCom(UART_HandleTypeDef* uarthandle); +/** + * @brief Calculate CRC according to BQ spec. + * + * @param message_buffer Message buffer, including two bytes for the CRC. The + * CRC will be written to the last two bytes. + * @param bufferlength The length of message_buffer, including the two bytes for + * the CRC. + * + * @return 0 if the buffer is to small + * @return 1 if the function was successful + */ uint16_t Calculate_CRC(uint8_t* message_buffer, uint16_t bufferlength); +/** + * @brief Checks if the CRC is correct + * + * @return 0 if the Buffer is too small or the CRC is incorrect + * @return 1 if the CRC is correct + */ uint16_t Check_CRC(uint8_t* message_buffer, uint16_t bufferlength); +/** + * @brief Writes data to a register of the BQ76. + * + * @param registeraddress specifies the register. Address definitions are + * available in BQ_Register_Definitions.h + * @param registersize defines the register size in bytes. + * @param data defines the data written to the BQ + */ uint32_t BQ_Write_Register(uint8_t registeraddress, uint8_t registersize, uint32_t data); +/** + * @brief Read the data of a register specified by its address + * + * @param registeraddress specifies the register. Address definitions are + * available in BQ_Register_Definitions.h + * @param registersize defines the register size in bytes. + */ uint8_t BQ_Read_Register(uint8_t registeraddress, uint8_t registersize, uint32_t* data); /** @@ -32,9 +69,14 @@ uint8_t BQ_Read_Register(uint8_t registeraddress, uint8_t registersize, * Buffer size should be 2xMeasured Voltages */ BQ_Comm_Status BQ_ReadMeasurements(uint8_t* buffer, uint8_t bufferlength); -uint8_t Communication_Reset(); +/** + * @brief Hardware layer implementation of the UART transmit + */ uint8_t BQ_UART_Transmit(uint8_t* message_buffer, uint16_t bufferlength); +/** + * @brief Hardware layer implementation of the UART receive + */ uint8_t BQ_UART_Receive(uint8_t* message_buffer, uint16_t bufferlength); #endif diff --git a/Core/Src/BQ_Communication.c b/Core/Src/BQ_Communication.c index 501ac7f..0cf2892 100644 --- a/Core/Src/BQ_Communication.c +++ b/Core/Src/BQ_Communication.c @@ -39,21 +39,8 @@ const uint16_t crc16_table[256] = { 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040}; -/* Defines UART and DMA Handle - * Always use the Init Routine before using any other function of the Libary - * - * - */ void init_BQCom(UART_HandleTypeDef* uarthandle) { bq_uart = uarthandle; } -/* Input Message Buffer with the Last two Bytes set to 0. The Last Bytes will be - * the CRC after use of the Function - * - * Returns 0 if the buffer is to small - * - * Returns 1 if the Function was successfull - * - */ uint16_t Calculate_CRC(uint8_t* message_buffer, uint16_t bufferlength) { uint16_t wCRC = 0; @@ -74,13 +61,6 @@ uint16_t Calculate_CRC(uint8_t* message_buffer, uint16_t bufferlength) { return 1; } -/*Checks if the CRC is correct - * - * Returns 0 if the Buffer is too small or the CRC is incorrect - * - * Returns 1 if the CRC is correct - */ - uint16_t Check_CRC(uint8_t* message_buffer, uint16_t bufferlength) { uint16_t wCRC = 0; @@ -106,17 +86,6 @@ uint16_t Check_CRC(uint8_t* message_buffer, uint16_t bufferlength) { } } -/* Writes data to a register of the BQ76 - * - * registeraddress specifies the register - * Makros are available in BQ_Register_Definitions.h - * - * registersize defines the register size in bytes - * - * data defines the data written to the BQ - * - */ - uint32_t BQ_Write_Register(uint8_t registeraddress, uint8_t registersize, uint32_t data) { uint8_t message[registersize + 5]; @@ -136,13 +105,6 @@ uint32_t BQ_Write_Register(uint8_t registeraddress, uint8_t registersize, return 1; } -/*Read the Data of a Register specified by its Address - * - * Makros for register names are available in BQ_Register_Definitions.h - * - * registersize defines the register size in bytes - */ - uint8_t BQ_Read_Register(uint8_t registeraddress, uint8_t registersize, uint32_t* data) { uint8_t message[6] = {0}; @@ -210,26 +172,14 @@ BQ_Comm_Status BQ_ReadMeasurements(uint8_t* buffer, uint8_t bufferlength) { return BQ_COMM_OK; } -/* Hardware Layer Implementation of the UART Transmit - * - */ uint8_t BQ_UART_Transmit(uint8_t* message_buffer, uint16_t bufferlength) { HAL_StatusTypeDef uartstate = HAL_UART_Transmit(bq_uart, message_buffer, bufferlength, BQUARTTIMEOUT); return (uint8_t)uartstate; } -/* Hardware Layer Implementation of the UART Receive - * - */ uint8_t BQ_UART_Receive(uint8_t* message_buffer, uint16_t bufferlength) { HAL_StatusTypeDef uartstate = HAL_UART_Receive(bq_uart, message_buffer, bufferlength, BQUARTTIMEOUT); return (uint8_t)uartstate; } - -/*Resets the Communication Interface of the BQ76 - * - * - */ -uint8_t Communication_Reset() { return 0; }