98 lines
3.7 KiB
C
98 lines
3.7 KiB
C
/******************************************************************************
|
|
* @file hal_i2c.c
|
|
* @copyright Nehemis SARL reserves all rights even in the event of industrial
|
|
* property rights. We reserve all rights of disposal such as
|
|
* copying and passing on to third parties.
|
|
*
|
|
* @brief STM HAL layer wrapper class for I2C.
|
|
*
|
|
******************************************************************************/
|
|
|
|
/******************************************************************************
|
|
* Include Header Files
|
|
******************************************************************************/
|
|
#include "hal_i2c.h"
|
|
|
|
/* CubeMX */
|
|
#include "i2c.h"
|
|
|
|
/******************************************************************************
|
|
* Function Definitions
|
|
******************************************************************************/
|
|
uint32 HalI2CInit(void)
|
|
{
|
|
return NMS_ERR_NONE;
|
|
}
|
|
|
|
|
|
uint32 HalI2CWrite(MapHalI2cModule_en module_en, uint16 devAddr_u16, uint16 memAddr_u16, uint16 memAddrSize_u16, uint8 *pData_pu8, uint16 size_u16)
|
|
{
|
|
uint32 error_u32 = NMS_ERR_NONE;
|
|
HAL_StatusTypeDef halStatus_en = HAL_OK;
|
|
I2C_HandleTypeDef *targetModule_pst;
|
|
|
|
error_u32 = MapHalI2cModule(module_en, &targetModule_pst);
|
|
if (error_u32 == NMS_ERR_NONE)
|
|
{
|
|
halStatus_en = HAL_I2C_Mem_Write(targetModule_pst, devAddr_u16, memAddr_u16, memAddrSize_u16, pData_pu8, size_u16, HAL_MAX_DELAY);
|
|
|
|
switch (halStatus_en)
|
|
{
|
|
case HAL_BUSY: error_u32 = NMS_ERR_BUSY; break;
|
|
case HAL_TIMEOUT: error_u32 = NMS_ERR_TIMEOUT; break;
|
|
case HAL_ERROR: error_u32 = NMS_ERR_INTERNAL; break;
|
|
case HAL_OK: error_u32 = NMS_ERR_NONE; break;
|
|
default: error_u32 = NMS_ERR_UNKNOWN; break;
|
|
}
|
|
}
|
|
return error_u32;
|
|
}
|
|
|
|
|
|
uint32 HalI2CRead(MapHalI2cModule_en module_en, uint16 devAddr_u16, uint16 memAddr_u16, uint16 memAddrSize_u16, uint8 *pData_pu8, uint16 size_u16)
|
|
{
|
|
uint32 error_u32 = NMS_ERR_NONE;
|
|
HAL_StatusTypeDef halStatus_en = HAL_OK;
|
|
I2C_HandleTypeDef *targetModule_pst;
|
|
|
|
error_u32 = MapHalI2cModule(module_en, &targetModule_pst);
|
|
if (error_u32 == NMS_ERR_NONE)
|
|
{
|
|
halStatus_en = HAL_I2C_Mem_Read(targetModule_pst, devAddr_u16, memAddr_u16, memAddrSize_u16, pData_pu8, size_u16, HAL_MAX_DELAY);
|
|
|
|
switch (halStatus_en)
|
|
{
|
|
case HAL_BUSY: error_u32 = NMS_ERR_BUSY; break;
|
|
case HAL_TIMEOUT: error_u32 = NMS_ERR_TIMEOUT; break;
|
|
case HAL_ERROR: error_u32 = NMS_ERR_INTERNAL; break;
|
|
case HAL_OK: error_u32 = NMS_ERR_NONE; break;
|
|
default: error_u32 = NMS_ERR_UNKNOWN; break;
|
|
}
|
|
}
|
|
return error_u32;
|
|
}
|
|
|
|
|
|
uint32 HalI2CMasterTransmit(MapHalI2cModule_en module_en, uint16 devAddr_u16, uint8 *pData_pu8, uint16 size_u16)
|
|
{
|
|
uint32 error_u32 = NMS_ERR_NONE;
|
|
HAL_StatusTypeDef halStatus_en = HAL_OK;
|
|
I2C_HandleTypeDef *targetModule_pst;
|
|
|
|
error_u32 = MapHalI2cModule(module_en, &targetModule_pst);
|
|
if (error_u32 == NMS_ERR_NONE)
|
|
{
|
|
halStatus_en = HAL_I2C_Master_Transmit(targetModule_pst, devAddr_u16, pData_pu8, size_u16, HAL_MAX_DELAY);
|
|
|
|
switch (halStatus_en)
|
|
{
|
|
case HAL_BUSY: error_u32 = NMS_ERR_BUSY; break;
|
|
case HAL_TIMEOUT: error_u32 = NMS_ERR_TIMEOUT; break;
|
|
case HAL_ERROR: error_u32 = NMS_ERR_INTERNAL; break;
|
|
case HAL_OK: error_u32 = NMS_ERR_NONE; break;
|
|
default: error_u32 = NMS_ERR_UNKNOWN; break;
|
|
}
|
|
}
|
|
return error_u32;
|
|
}
|