/** ****************************************************************************** * @file b_wl5m_subg_motion_sensors.c * @author MCD Application Team * @brief This file provides a set of functions needed to manage the * motion sensors mounted on the B-WL5M-SUBG board (MB1779). ****************************************************************************** * @attention * * Copyright (c) 2022 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "b_wl5m_subg_bus.h" #include "b_wl5m_subg_motion_sensors.h" /** @addtogroup BSP BSP * @{ */ /** @addtogroup B_WL5M_SUBG B-WL5M-SUBG * @{ */ /** @defgroup B_WL5M_SUBG_MOTION_SENSORS B-WL5M-SUBG MOTION SENSORS * @{ */ #if (MOTION_SENSOR_INSTANCES_NBR > 0) /** @defgroup B_WL5M_SUBG_MOTION_SENSOR_Exported_Variables B-WL5M-SUBG MOTION SENSORS Exported Variables * @{ */ extern void *MotionCompObj[MOTION_SENSOR_INSTANCES_NBR]; /* This "redundant" line is here to fulfil MISRA C-2012 rule 8.4 */ void *MotionCompObj[MOTION_SENSOR_INSTANCES_NBR]; /** * @} */ /** @defgroup B_WL5M_SUBG_MOTION_SENSOR_Private_Variables B-WL5M-SUBG MOTION SENSORS Private Variables * @{ */ /* We define a jump table in order to get the correct index from the desired function. */ /* This table should have a size equal to the maximum value of a function plus 1. */ static uint32_t FunctionIndex[5] = {0, 0, 1, 1, 2}; static MOTION_SENSOR_FuncDrv_t *MotionFuncDrv[MOTION_SENSOR_INSTANCES_NBR][MOTION_SENSOR_FUNCTIONS_NBR]; static MOTION_SENSOR_CommonDrv_t *MotionDrv[MOTION_SENSOR_INSTANCES_NBR]; static MOTION_SENSOR_Ctx_t MotionCtx[MOTION_SENSOR_INSTANCES_NBR]; /** * @} */ #endif /* MOTION_SENSOR_INSTANCES_NBR > 0 */ /** @defgroup B_WL5M_SUBG_MOTION_SENSOR_Private_Function_Prototypes B-WL5M-SUBG MOTION SENSORS Private Function Prototypes * @{ */ #if (USE_MOTION_SENSOR_IIS2MDC_0 == 1) static int32_t IIS2MDC_0_Probe(uint32_t Functions); #endif /* (USE_MOTION_SENSOR_IIS2MDC_0 == 1) */ #if (USE_MOTION_SENSOR_ISM330DHCX_0 == 1) static int32_t ISM330DHCX_0_Probe(uint32_t Functions); #endif /* (USE_MOTION_SENSOR_ISM330DHCX_0 == 1) */ /** * @} */ /** @defgroup B_WL5M_SUBG_MOTION_SENSOR_Exported_Functions B-WL5M-SUBG MOTION SENSORS Exported Functions * @{ */ /** * @brief Initializes the motion sensors * @param Instance Motion sensor instance * @param Functions Motion sensor functions. Could be : * - MOTION_GYRO and/or MOTION_ACCELERO for MOTION_SENSOR_ISM330DHCX_0 * - MOTION_MAGNETO for MOTION_SENSOR_IIS2MDC_0 * @retval BSP status */ int32_t BSP_MOTION_SENSOR_Init(uint32_t Instance, uint32_t Functions) { int32_t ret = BSP_ERROR_NONE; #if (MOTION_SENSOR_INSTANCES_NBR > 0) uint32_t function = MOTION_GYRO; uint32_t i; uint32_t component_functions = 0; MOTION_SENSOR_Capabilities_t cap; switch (Instance) { #if (USE_MOTION_SENSOR_IIS2MDC_0 == 1) case MOTION_SENSOR_IIS2MDC_0: if (IIS2MDC_0_Probe(Functions) != BSP_ERROR_NONE) { return BSP_ERROR_NO_INIT; } if (MotionDrv[Instance]->GetCapabilities(MotionCompObj[Instance], (void *)&cap) != BSP_ERROR_NONE) { return BSP_ERROR_UNKNOWN_COMPONENT; } if (cap.Magneto == 1U) { component_functions |= MOTION_MAGNETO; } break; #endif /* USE_MOTION_SENSOR_IIS2MDC_0 */ #if (USE_MOTION_SENSOR_ISM330DHCX_0 == 1) case MOTION_SENSOR_ISM330DHCX_0: if (ISM330DHCX_0_Probe(Functions) != BSP_ERROR_NONE) { return BSP_ERROR_NO_INIT; } if (MotionDrv[Instance]->GetCapabilities(MotionCompObj[Instance], (void *)&cap) != BSP_ERROR_NONE) { return BSP_ERROR_UNKNOWN_COMPONENT; } if (cap.Acc == 1U) { component_functions |= MOTION_ACCELERO; } if (cap.Gyro == 1U) { component_functions |= MOTION_GYRO; } if (cap.Magneto == 1U) { component_functions |= MOTION_MAGNETO; } break; #endif /* USE_MOTION_SENSOR_ISM330DHCX_0 */ default: ret = BSP_ERROR_WRONG_PARAM; break; } if (ret != BSP_ERROR_NONE) { return ret; } for (i = 0; i < MOTION_SENSOR_FUNCTIONS_NBR; i++) { if (((Functions & function) == function) && ((component_functions & function) == function)) { if (MotionFuncDrv[Instance][FunctionIndex[function]]->Enable(MotionCompObj[Instance]) != BSP_ERROR_NONE) { return BSP_ERROR_COMPONENT_FAILURE; } } function = function << 1; } #endif /* MOTION_SENSOR_INSTANCES_NBR > 0 */ return ret; } /** * @brief Deinitialize Motion sensor * @param Instance Motion sensor instance * @retval BSP status */ int32_t BSP_MOTION_SENSOR_DeInit(uint32_t Instance) { int32_t ret = BSP_ERROR_NONE; #if (MOTION_SENSOR_INSTANCES_NBR > 0) if (Instance >= MOTION_SENSOR_INSTANCES_NBR) { ret = BSP_ERROR_WRONG_PARAM; } else if (MotionDrv[Instance]->DeInit(MotionCompObj[Instance]) != BSP_ERROR_NONE) { ret = BSP_ERROR_COMPONENT_FAILURE; } else { ret = BSP_ERROR_NONE; } #endif /* MOTION_SENSOR_INSTANCES_NBR > 0 */ return ret; } /** * @brief Get motion sensor instance capabilities * @param Instance Motion sensor instance * @param Capabilities pointer to motion sensor capabilities * @retval BSP status */ int32_t BSP_MOTION_SENSOR_GetCapabilities(uint32_t Instance, MOTION_SENSOR_Capabilities_t *Capabilities) { int32_t ret = BSP_ERROR_NONE; #if (MOTION_SENSOR_INSTANCES_NBR > 0) if (Instance >= MOTION_SENSOR_INSTANCES_NBR) { ret = BSP_ERROR_WRONG_PARAM; } else if (MotionDrv[Instance]->GetCapabilities(MotionCompObj[Instance], Capabilities) != BSP_ERROR_NONE) { ret = BSP_ERROR_UNKNOWN_COMPONENT; } else { ret = BSP_ERROR_NONE; } #endif /* MOTION_SENSOR_INSTANCES_NBR > 0 */ return ret; } /** * @brief Get WHOAMI value * @param Instance Motion sensor instance * @param Id WHOAMI value * @retval BSP status */ int32_t BSP_MOTION_SENSOR_ReadID(uint32_t Instance, uint8_t *Id) { int32_t ret = BSP_ERROR_NONE; #if (MOTION_SENSOR_INSTANCES_NBR > 0) if (Instance >= MOTION_SENSOR_INSTANCES_NBR) { ret = BSP_ERROR_WRONG_PARAM; } else if (MotionDrv[Instance]->ReadID(MotionCompObj[Instance], Id) != BSP_ERROR_NONE) { ret = BSP_ERROR_UNKNOWN_COMPONENT; } else { ret = BSP_ERROR_NONE; } #endif /* MOTION_SENSOR_INSTANCES_NBR > 0 */ return ret; } /** * @brief Enable Motion sensor * @param Instance Motion sensor instance * @param Function Motion sensor function. Could be : * - MOTION_MAGNETO for instance 0 * - MOTION_GYRO and/or MOTION_ACCELERO for instance 1 * @retval BSP status */ int32_t BSP_MOTION_SENSOR_Enable(uint32_t Instance, uint32_t Function) { int32_t ret = BSP_ERROR_NONE; #if (MOTION_SENSOR_INSTANCES_NBR > 0) if (Instance >= MOTION_SENSOR_INSTANCES_NBR) { ret = BSP_ERROR_WRONG_PARAM; } else { if ((MotionCtx[Instance].Functions & Function) == Function) { if (MotionFuncDrv[Instance][FunctionIndex[Function]]->Enable(MotionCompObj[Instance]) != BSP_ERROR_NONE) { ret = BSP_ERROR_COMPONENT_FAILURE; } else { ret = BSP_ERROR_NONE; } } else { ret = BSP_ERROR_WRONG_PARAM; } } #endif /* MOTION_SENSOR_INSTANCES_NBR > 0 */ return ret; } /** * @brief Disable Motion sensor * @param Instance Motion sensor instance * @param Function Motion sensor function. Could be : * - MOTION_MAGNETO for instance 0 * - MOTION_GYRO and/or MOTION_ACCELERO for instance 1 * @retval BSP status */ int32_t BSP_MOTION_SENSOR_Disable(uint32_t Instance, uint32_t Function) { int32_t ret = BSP_ERROR_NONE; #if (MOTION_SENSOR_INSTANCES_NBR > 0) if (Instance >= MOTION_SENSOR_INSTANCES_NBR) { ret = BSP_ERROR_WRONG_PARAM; } else { if ((MotionCtx[Instance].Functions & Function) == Function) { if (MotionFuncDrv[Instance][FunctionIndex[Function]]->Disable(MotionCompObj[Instance]) != BSP_ERROR_NONE) { ret = BSP_ERROR_COMPONENT_FAILURE; } else { ret = BSP_ERROR_NONE; } } else { ret = BSP_ERROR_WRONG_PARAM; } } #endif /* MOTION_SENSOR_INSTANCES_NBR > 0 */ return ret; } /** * @brief Get motion sensor axes data * @param Instance Motion sensor instance * @param Function Motion sensor function. Could be : * - MOTION_MAGNETO for instance 0 * - MOTION_GYRO and/or MOTION_ACCELERO for instance 1 * @param Axes pointer to axes data structure * @retval BSP status */ int32_t BSP_MOTION_SENSOR_GetAxes(uint32_t Instance, uint32_t Function, MOTION_SENSOR_Axes_t *Axes) { int32_t ret = BSP_ERROR_NONE; #if (MOTION_SENSOR_INSTANCES_NBR > 0) if (Instance >= MOTION_SENSOR_INSTANCES_NBR) { ret = BSP_ERROR_WRONG_PARAM; } else { if ((MotionCtx[Instance].Functions & Function) == Function) { if (MotionFuncDrv[Instance][FunctionIndex[Function]]->GetAxes(MotionCompObj[Instance], Axes) != BSP_ERROR_NONE) { ret = BSP_ERROR_COMPONENT_FAILURE; } else { ret = BSP_ERROR_NONE; } } else { ret = BSP_ERROR_WRONG_PARAM; } } #endif /* MOTION_SENSOR_INSTANCES_NBR > 0 */ return ret; } /** * @brief Get motion sensor axes raw data * @param Instance Motion sensor instance * @param Function Motion sensor function. Could be : * - MOTION_MAGNETO for instance 0 * - MOTION_GYRO and/or MOTION_ACCELERO for instance 1 * @param Axes pointer to axes raw data structure * @retval BSP status */ int32_t BSP_MOTION_SENSOR_GetAxesRaw(uint32_t Instance, uint32_t Function, MOTION_SENSOR_AxesRaw_t *Axes) { int32_t ret = BSP_ERROR_NONE; #if (MOTION_SENSOR_INSTANCES_NBR > 0) if (Instance >= MOTION_SENSOR_INSTANCES_NBR) { ret = BSP_ERROR_WRONG_PARAM; } else { if ((MotionCtx[Instance].Functions & Function) == Function) { if (MotionFuncDrv[Instance][FunctionIndex[Function]]->GetAxesRaw(MotionCompObj[Instance], Axes) != BSP_ERROR_NONE) { ret = BSP_ERROR_COMPONENT_FAILURE; } else { ret = BSP_ERROR_NONE; } } else { ret = BSP_ERROR_WRONG_PARAM; } } #endif /* MOTION_SENSOR_INSTANCES_NBR > 0 */ return ret; } /** * @brief Get motion sensor sensitivity * @param Instance Motion sensor instance * @param Function Motion sensor function. Could be : * - MOTION_MAGNETO for instance 0 * - MOTION_GYRO and/or MOTION_ACCELERO for instance 1 * @param Sensitivity pointer to sensitivity read value * @retval BSP status */ int32_t BSP_MOTION_SENSOR_GetSensitivity(uint32_t Instance, uint32_t Function, float *Sensitivity) { int32_t ret = BSP_ERROR_NONE; #if (MOTION_SENSOR_INSTANCES_NBR > 0 ) if (Instance >= MOTION_SENSOR_INSTANCES_NBR) { ret = BSP_ERROR_WRONG_PARAM; } else { if ((MotionCtx[Instance].Functions & Function) == Function) { if (MotionFuncDrv[Instance][FunctionIndex[Function]]->GetSensitivity(MotionCompObj[Instance], Sensitivity) != BSP_ERROR_NONE) { ret = BSP_ERROR_COMPONENT_FAILURE; } else { ret = BSP_ERROR_NONE; } } else { ret = BSP_ERROR_WRONG_PARAM; } } #endif /* MOTION_SENSOR_INSTANCES_NBR > 0 */ return ret; } /** * @brief Get motion sensor Output Data Rate * @param Instance Motion sensor instance * @param Function Motion sensor function. Could be : * - MOTION_MAGNETO for instance 0 * - MOTION_GYRO and/or MOTION_ACCELERO for instance 1 * @param Odr pointer to Output Data Rate read value * @retval BSP status */ int32_t BSP_MOTION_SENSOR_GetOutputDataRate(uint32_t Instance, uint32_t Function, float *Odr) { int32_t ret = BSP_ERROR_NONE; #if (MOTION_SENSOR_INSTANCES_NBR > 0) if (Instance >= MOTION_SENSOR_INSTANCES_NBR) { ret = BSP_ERROR_WRONG_PARAM; } else { if ((MotionCtx[Instance].Functions & Function) == Function) { if (MotionFuncDrv[Instance][FunctionIndex[Function]]->GetOutputDataRate(MotionCompObj[Instance], Odr) != BSP_ERROR_NONE) { ret = BSP_ERROR_COMPONENT_FAILURE; } else { ret = BSP_ERROR_NONE; } } else { ret = BSP_ERROR_WRONG_PARAM; } } #endif /* MOTION_SENSOR_INSTANCES_NBR > 0 */ return ret; } /** * @brief Get motion sensor Full Scale * @param Instance Motion sensor instance * @param Function Motion sensor function. Could be : * - MOTION_MAGNETO for instance 0 * - MOTION_GYRO and/or MOTION_ACCELERO for instance 1 * @param Fullscale pointer to Fullscale read value * @retval BSP status */ int32_t BSP_MOTION_SENSOR_GetFullScale(uint32_t Instance, uint32_t Function, int32_t *Fullscale) { int32_t ret = BSP_ERROR_NONE; #if (MOTION_SENSOR_INSTANCES_NBR > 0) if (Instance >= MOTION_SENSOR_INSTANCES_NBR) { ret = BSP_ERROR_WRONG_PARAM; } else { if ((MotionCtx[Instance].Functions & Function) == Function) { if (MotionFuncDrv[Instance][FunctionIndex[Function]]->GetFullScale(MotionCompObj[Instance], Fullscale) != BSP_ERROR_NONE) { ret = BSP_ERROR_COMPONENT_FAILURE; } else { ret = BSP_ERROR_NONE; } } else { ret = BSP_ERROR_WRONG_PARAM; } } #endif /* MOTION_SENSOR_INSTANCES_NBR > 0 */ return ret; } /** * @brief Set motion sensor Output Data Rate * @param Instance Motion sensor instance * @param Function Motion sensor function. Could be : * - MOTION_MAGNETO for instance 0 * - MOTION_GYRO and/or MOTION_ACCELERO for instance 1 * @param Odr Output Data Rate value to be set * @retval BSP status */ int32_t BSP_MOTION_SENSOR_SetOutputDataRate(uint32_t Instance, uint32_t Function, float Odr) { int32_t ret = BSP_ERROR_NONE; #if (MOTION_SENSOR_INSTANCES_NBR > 0) if (Instance >= MOTION_SENSOR_INSTANCES_NBR) { ret = BSP_ERROR_WRONG_PARAM; } else { if ((MotionCtx[Instance].Functions & Function) == Function) { if (MotionFuncDrv[Instance][FunctionIndex[Function]]->SetOutputDataRate(MotionCompObj[Instance], Odr) != BSP_ERROR_NONE) { ret = BSP_ERROR_COMPONENT_FAILURE; } else { ret = BSP_ERROR_NONE; } } else { ret = BSP_ERROR_WRONG_PARAM; } } #endif /* MOTION_SENSOR_INSTANCES_NBR > 0 */ return ret; } /** * @brief Set motion sensor Full Scale * @param Instance Motion sensor instance * @param Function Motion sensor function. Could be : * - MOTION_MAGNETO for instance 0 * - MOTION_GYRO and/or MOTION_ACCELERO for instance 1 * @param Fullscale Fullscale value to be set * @retval BSP status */ int32_t BSP_MOTION_SENSOR_SetFullScale(uint32_t Instance, uint32_t Function, int32_t Fullscale) { int32_t ret = BSP_ERROR_NONE; #if (MOTION_SENSOR_INSTANCES_NBR > 0) if (Instance >= MOTION_SENSOR_INSTANCES_NBR) { ret = BSP_ERROR_WRONG_PARAM; } else { if ((MotionCtx[Instance].Functions & Function) == Function) { if (MotionFuncDrv[Instance][FunctionIndex[Function]]->SetFullScale(MotionCompObj[Instance], Fullscale) != BSP_ERROR_NONE) { ret = BSP_ERROR_COMPONENT_FAILURE; } else { ret = BSP_ERROR_NONE; } } else { ret = BSP_ERROR_WRONG_PARAM; } } #endif /* MOTION_SENSOR_INSTANCES_NBR > 0 */ return ret; } /** * @} */ /** @defgroup B_WL5M_SUBG_MOTION_SENSOR_Private_Functions B-WL5M-SUBG MOTION SENSORS Private Functions * @{ */ #if (USE_MOTION_SENSOR_IIS2MDC_0 == 1) /** * @brief Register Bus IOs for instance 0 if component ID is OK * @retval BSP status */ static int32_t IIS2MDC_0_Probe(uint32_t Functions) { IIS2MDC_IO_t io_ctx; uint8_t id; static IIS2MDC_Object_t iis2mdc_obj_0; IIS2MDC_Capabilities_t cap; int32_t ret = BSP_ERROR_NONE; /* Configure the accelero driver */ io_ctx.BusType = IIS2MDC_I2C_BUS; /* I2C */ io_ctx.Address = IIS2MDC_I2C_ADD; io_ctx.Init = B_WL5M_SUBG_I2C_Init; io_ctx.DeInit = B_WL5M_SUBG_I2C_DeInit; io_ctx.ReadReg = B_WL5M_SUBG_I2C_ReadReg; io_ctx.WriteReg = B_WL5M_SUBG_I2C_WriteReg; io_ctx.GetTick = B_WL5M_SUBG_GetTick; if (IIS2MDC_RegisterBusIO(&iis2mdc_obj_0, &io_ctx) != IIS2MDC_OK) { ret = BSP_ERROR_UNKNOWN_COMPONENT; } else if (IIS2MDC_ReadID(&iis2mdc_obj_0, &id) != IIS2MDC_OK) { ret = BSP_ERROR_UNKNOWN_COMPONENT; } else if (id != IIS2MDC_ID) { ret = BSP_ERROR_UNKNOWN_COMPONENT; } else { (void)IIS2MDC_GetCapabilities(&iis2mdc_obj_0, &cap); MotionCtx[MOTION_SENSOR_IIS2MDC_0].Functions = ((uint32_t)cap.Gyro) | ((uint32_t)cap.Acc << 1U) | ((uint32_t)cap.Magneto << 2U); MotionCompObj[MOTION_SENSOR_IIS2MDC_0] = &iis2mdc_obj_0; /* The second cast (void *) is added to bypass Misra R11.3 rule */ MotionDrv[MOTION_SENSOR_IIS2MDC_0] = (MOTION_SENSOR_CommonDrv_t *)(void *)&IIS2MDC_COMMON_Driver; if ((ret == BSP_ERROR_NONE) && ((Functions & MOTION_GYRO) == MOTION_GYRO) && (cap.Gyro == 1U)) { /* Return an error if the application try to initialize a function not supported by the component */ ret = BSP_ERROR_COMPONENT_FAILURE; } if ((ret == BSP_ERROR_NONE) && ((Functions & MOTION_ACCELERO) == MOTION_ACCELERO) && (cap.Acc == 1U)) { /* Return an error if the application try to initialize a function not supported by the component */ ret = BSP_ERROR_COMPONENT_FAILURE; } if ((ret == BSP_ERROR_NONE) && ((Functions & MOTION_MAGNETO) == MOTION_MAGNETO)) { /* The second cast (void *) is added to bypass Misra R11.3 rule */ MotionFuncDrv[MOTION_SENSOR_IIS2MDC_0][FunctionIndex[MOTION_MAGNETO]] = (MOTION_SENSOR_FuncDrv_t *)( void *)&IIS2MDC_MAG_Driver; if (MotionDrv[MOTION_SENSOR_IIS2MDC_0]->Init(MotionCompObj[MOTION_SENSOR_IIS2MDC_0]) != IIS2MDC_OK) { ret = BSP_ERROR_COMPONENT_FAILURE; } else { ret = BSP_ERROR_NONE; } } } return ret; } #endif /* USE_MOTION_SENSOR_IIS2MDC_0 == 1 */ #if (USE_MOTION_SENSOR_ISM330DHCX_0 == 1) /** * @brief Register Bus IOs for instance 0 if component ID is OK * @retval BSP status */ static int32_t ISM330DHCX_0_Probe(uint32_t Functions) { ISM330DHCX_IO_t io_ctx; uint8_t id; static ISM330DHCX_Object_t ism330dhcx_obj_0; ISM330DHCX_Capabilities_t cap; int32_t ret = BSP_ERROR_NONE; /* Configure the accelero driver */ io_ctx.BusType = ISM330DHCX_I2C_BUS; /* I2C */ io_ctx.Address = ISM330DHCX_I2C_ADD_L; io_ctx.Init = B_WL5M_SUBG_I2C_Init; io_ctx.DeInit = B_WL5M_SUBG_I2C_DeInit; io_ctx.ReadReg = B_WL5M_SUBG_I2C_ReadReg; io_ctx.WriteReg = B_WL5M_SUBG_I2C_WriteReg; io_ctx.GetTick = B_WL5M_SUBG_GetTick; if (ISM330DHCX_RegisterBusIO(&ism330dhcx_obj_0, &io_ctx) != ISM330DHCX_OK) { ret = BSP_ERROR_UNKNOWN_COMPONENT; } else if (ISM330DHCX_ReadID(&ism330dhcx_obj_0, &id) != ISM330DHCX_OK) { ret = BSP_ERROR_UNKNOWN_COMPONENT; } else if (id != ISM330DHCX_ID) { ret = BSP_ERROR_UNKNOWN_COMPONENT; } else { (void)ISM330DHCX_GetCapabilities(&ism330dhcx_obj_0, &cap); MotionCtx[MOTION_SENSOR_ISM330DHCX_0].Functions = ((uint32_t)cap.Gyro) | ((uint32_t)cap.Acc << 1U) | ((uint32_t)cap.Magneto << 2U); MotionCompObj[MOTION_SENSOR_ISM330DHCX_0] = &ism330dhcx_obj_0; /* The second cast (void *) is added to bypass Misra R11.3 rule */ MotionDrv[MOTION_SENSOR_ISM330DHCX_0] = (MOTION_SENSOR_CommonDrv_t *)(void *)&ISM330DHCX_COMMON_Driver; if ((ret == BSP_ERROR_NONE) && ((Functions & MOTION_GYRO) == MOTION_GYRO) && (cap.Gyro == 1U)) { /* The second cast (void *) is added to bypass Misra R11.3 rule */ MotionFuncDrv[MOTION_SENSOR_ISM330DHCX_0][FunctionIndex[MOTION_GYRO]] = (MOTION_SENSOR_FuncDrv_t *)( void *)&ISM330DHCX_GYRO_Driver; if (MotionDrv[MOTION_SENSOR_ISM330DHCX_0]->Init(MotionCompObj[MOTION_SENSOR_ISM330DHCX_0]) != ISM330DHCX_OK) { ret = BSP_ERROR_COMPONENT_FAILURE; } else { ret = BSP_ERROR_NONE; } } if ((ret == BSP_ERROR_NONE) && ((Functions & MOTION_ACCELERO) == MOTION_ACCELERO) && (cap.Acc == 1U)) { /* The second cast (void *) is added to bypass Misra R11.3 rule */ MotionFuncDrv[MOTION_SENSOR_ISM330DHCX_0][FunctionIndex[MOTION_ACCELERO]] = (MOTION_SENSOR_FuncDrv_t *)( void *)&ISM330DHCX_ACC_Driver; if (MotionDrv[MOTION_SENSOR_ISM330DHCX_0]->Init(MotionCompObj[MOTION_SENSOR_ISM330DHCX_0]) != ISM330DHCX_OK) { ret = BSP_ERROR_COMPONENT_FAILURE; } else { ret = BSP_ERROR_NONE; } } if ((ret == BSP_ERROR_NONE) && ((Functions & MOTION_MAGNETO) == MOTION_MAGNETO)) { /* Return an error if the application try to initialize a function not supported by the component */ ret = BSP_ERROR_COMPONENT_FAILURE; } } return ret; } #endif /* USE_MOTION_SENSOR_ISM330DHCX_0 == 1 */ /** * @} */ /** * @} */ /** * @} */ /** * @} */