/** * @brief Writes a value in a register of the device through BUS. * @param Addr: Device address on BUS Bus. * @param Reg: The target register address to write * @param pBuffer: The target register value to be written * @param Length: buffer size to be written */ static void I2Cx_WriteBuffer(uint8_t Addr, uint8_t Reg, uint8_t *pBuffer, uint16_t Length) { HAL_StatusTypeDef status = HAL_OK; status = HAL_I2C_Mem_Write(&I2cHandle, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, pBuffer, Length, I2cxTimeout); /* Check the communication status */ if(status != HAL_OK) { /* Re-Initialize the BUS */ I2Cx_Error(); } }
/** * @brief Write a value in a register of the device through BUS. * @param Addr: Device address on BUS Bus. * @param Reg: The target register address to write * @param Value: The target register value to be written * @retval HAL status */ static void I2Cx_WriteData(uint8_t Addr, uint8_t Reg, uint8_t Value) { HAL_StatusTypeDef status = HAL_OK; status = HAL_I2C_Mem_Write(&I2cHandle, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, &Value, 1, I2cxTimeout); /* Check the communication status */ if(status != HAL_OK) { /* Execute user timeout callback */ I2Cx_Error(Addr); } }
/** * @brief Write a value in a register of the device through BUS. * @param Addr: Device address on BUS Bus. * @param Reg: The target register address to write * @param RegSize: The target register size (can be 8BIT or 16BIT) * @param Value: The target register value to be written * @retval None */ static void I2Cx_WriteData(uint16_t Addr, uint8_t Reg, uint16_t RegSize, uint8_t Value) { HAL_StatusTypeDef status = HAL_OK; status = HAL_I2C_Mem_Write(&heval_I2c, Addr, (uint16_t)Reg, RegSize, &Value, 1, I2cxTimeout); /* Check the communication status */ if(status != HAL_OK) { /* Re-Initiaize the BUS */ I2Cx_Error(); } }
/** * @brief Writes a single data. * @param Addr: I2C address * @param Reg: Reg address * @param Value: Data to be written * @retval None */ static void I2Cx_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) { HAL_StatusTypeDef status = HAL_OK; status = HAL_I2C_Mem_Write(&heval_I2c, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, &Value, 1, I2C_TIMEOUT); /* Check the communication status */ if(status != HAL_OK) { /* I2C error occured */ I2Cx_Error(Addr); } }
/** * @brief Reads multiple data on the BUS. * @param Addr: I2C Address * @param Reg: Reg Address * @param RegSize : The target register size (can be 8BIT or 16BIT) * @param pBuffer: pointer to read data buffer * @param Length: length of the data * @retval 0 if no problems to read multiple data */ static HAL_StatusTypeDef I2Cx_ReadBuffer(uint16_t Addr, uint8_t Reg, uint16_t RegSize, uint8_t *pBuffer, uint16_t Length) { HAL_StatusTypeDef status = HAL_OK; status = HAL_I2C_Mem_Read(&heval_I2c, Addr, (uint16_t)Reg, RegSize, pBuffer, Length, I2cxTimeout); /* Check the communication status */ if(status != HAL_OK) { /* Re-Initiaize the BUS */ I2Cx_Error(); } return status; }
/** * @brief Write a value in a register of the device through BUS in using DMA mode * @param Addr: Device address on BUS Bus. * @param Reg: The target register address to write * @param pBuffer: The target register value to be written * @param Length: buffer size to be written * @retval HAL status */ static HAL_StatusTypeDef I2Cx_WriteMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddress, uint8_t *Buffer, uint16_t Length) { HAL_StatusTypeDef status = HAL_OK; status = HAL_I2C_Mem_Write(&heval_I2c, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, I2C_TIMEOUT); /* Check the communication status */ if(status != HAL_OK) { /* Re-Initiaize the I2C Bus */ I2Cx_Error(Addr); } return status; }
/** * @brief Reads multiple data. * @param Addr: I2C address * @param Reg: Reg address * @param Buffer: Pointer to data buffer * @param Length: Length of the data * @retval Number of read data */ static HAL_StatusTypeDef I2Cx_ReadMultiple(uint8_t Addr, uint16_t Reg, uint16_t MemAddress, uint8_t *Buffer, uint16_t Length) { HAL_StatusTypeDef status = HAL_OK; status = HAL_I2C_Mem_Read(&heval_I2c, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, I2C_TIMEOUT); /* Check the communication status */ if(status != HAL_OK) { /* I2C error occured */ I2Cx_Error(Addr); } return status; }
/** * @brief Read a register of the device through BUS * @param Addr: Device address on BUS * @param Reg: The target register address to read * @retval HAL status */ static uint8_t I2Cx_ReadData(uint8_t Addr, uint8_t Reg) { HAL_StatusTypeDef status = HAL_OK; uint8_t value = 0; status = HAL_I2C_Mem_Read(&I2cHandle, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, &value, 1,I2cxTimeout); /* Check the communication status */ if(status != HAL_OK) { /* Execute user timeout callback */ I2Cx_Error(Addr); } return value; }
/** * @brief Read a value in a register of the device through BUS. * @param Addr: Device address on BUS Bus. * @param Reg: The target register address to write * @retval HAL_StatusTypeDef status * * @see HAL_StatusTypeDef */ HAL_StatusTypeDef I2Cx_ReadDataLen(uint16_t Addr, uint8_t Reg, uint8_t * pData, uint16_t Len) { HAL_StatusTypeDef status = HAL_OK; status = HAL_I2C_Mem_Read(&I2cHandle, Addr, Reg, I2C_MEMADD_SIZE_8BIT, pData, Len, I2cxTimeout); /* Check the communication status */ if(status != HAL_OK) { /* Execute user timeout callback */ I2Cx_Error(); } return status; }
/** * @brief Reads multiple data on the BUS in using DMA mode. * @param Addr: I2C Address * @param Reg: Reg Address * @param pBuffer: pointer to read data buffer * @param Length: length of the data * @retval HAL status */ static HAL_StatusTypeDef I2Cx_ReadBufferDMA(uint8_t Addr, uint16_t Reg, uint8_t *pBuffer, uint16_t Length) { HAL_StatusTypeDef status = HAL_OK; status = HAL_I2C_Mem_Read_DMA(&I2cHandle, Addr, Reg, I2C_MEMADD_SIZE_16BIT, pBuffer, Length); /* Check the communication status */ if(status != HAL_OK) { /* Re-Initialize the BUS */ I2Cx_Error(); } return status; }
/** * @brief Reads a register of the device through BUS. * @param Addr: Device address on BUS Bus. * @param Reg: The target register address to write * @retval Data read at register address */ static uint8_t I2Cx_ReadData(uint8_t Addr, uint8_t Reg) { HAL_StatusTypeDef status = HAL_OK; uint8_t value = 0; status = HAL_I2C_Mem_Read(&I2cHandle, Addr, Reg, I2C_MEMADD_SIZE_8BIT, &value, 1, I2cxTimeout); /* Check the communication status */ if(status != HAL_OK) { /* Re-Initialize the BUS */ I2Cx_Error(); } return value; }
/** * @brief Read a register of the device through BUS * @param Addr: Device address on BUS * @param Reg: The target register address to read * @param RegSize: The target register size (can be 8BIT or 16BIT) * @retval read register value */ static uint8_t I2Cx_ReadData(uint16_t Addr, uint8_t Reg, uint16_t RegSize) { HAL_StatusTypeDef status = HAL_OK; uint8_t value = 0; status = HAL_I2C_Mem_Read(&heval_I2c, Addr, Reg, RegSize, &value, 1, I2cxTimeout); /* Check the communication status */ if(status != HAL_OK) { /* Re-Initiaize the BUS */ I2Cx_Error(); } return value; }
/** * @brief Reads a single data. * @param Addr: I2C address * @param Reg: Reg address * @retval Data to be read */ static uint8_t I2Cx_Read(uint8_t Addr, uint8_t Reg) { HAL_StatusTypeDef status = HAL_OK; uint8_t Value = 0; status = HAL_I2C_Mem_Read(&heval_I2c, Addr, Reg, I2C_MEMADD_SIZE_8BIT, &Value, 1, I2C_TIMEOUT); /* Check the communication status */ if(status != HAL_OK) { /* Execute user timeout callback */ I2Cx_Error(Addr); } return Value; }
/** * @brief Reads multiple data on the BUS. * @param Addr: I2C Address * @param Reg: Reg Address * @param pBuffer: pointer to read data buffer * @param Length: length of the data * @retval 0 if no problems to read multiple data */ static uint8_t I2Cx_ReadBuffer(uint8_t Addr, uint8_t Reg, uint8_t *pBuffer, uint16_t Length) { HAL_StatusTypeDef status = HAL_OK; status = HAL_I2C_Mem_Read(&I2cHandle, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, pBuffer, Length, I2cxTimeout); /* Check the communication status */ if(status == HAL_OK) { return 0; } else { /* Re-Initialize the BUS */ I2Cx_Error(); return 1; } }