/** ****************************************************************************** * @file ilps22qs.c * @author MEMS Software Solutions Team * @brief ILPS22QS driver file ****************************************************************************** * @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 "ilps22qs.h" /** @addtogroup BSP BSP * @{ */ /** @addtogroup Component Component * @{ */ /** @defgroup ILPS22QS ILPS22QS * @{ */ /** @defgroup ILPS22QS_Exported_Variables ILPS22QS Exported Variables * @{ */ ILPS22QS_CommonDrv_t ILPS22QS_COMMON_Driver = { ILPS22QS_Init, ILPS22QS_DeInit, ILPS22QS_ReadID, ILPS22QS_GetCapabilities, }; ILPS22QS_PRESS_Drv_t ILPS22QS_PRESS_Driver = { ILPS22QS_PRESS_Enable, ILPS22QS_PRESS_Disable, ILPS22QS_PRESS_GetOutputDataRate, ILPS22QS_PRESS_SetOutputDataRate, ILPS22QS_PRESS_GetPressure, }; ILPS22QS_TEMP_Drv_t ILPS22QS_TEMP_Driver = { ILPS22QS_TEMP_Enable, ILPS22QS_TEMP_Disable, ILPS22QS_TEMP_GetOutputDataRate, ILPS22QS_TEMP_SetOutputDataRate, ILPS22QS_TEMP_GetTemperature, }; /** * @} */ /** @defgroup ILPS22QS_Private_Function_Prototypes ILPS22QS Private Function Prototypes * @{ */ static int32_t ReadRegWrap(void *Handle, uint8_t Reg, uint8_t *pData, uint16_t Length); static int32_t WriteRegWrap(void *Handle, uint8_t Reg, uint8_t *pData, uint16_t Length); static int32_t ILPS22QS_GetOutputDataRate(ILPS22QS_Object_t *pObj, float *Odr); static int32_t ILPS22QS_SetOutputDataRate_When_Enabled(ILPS22QS_Object_t *pObj, float Odr); static int32_t ILPS22QS_SetOutputDataRate_When_Disabled(ILPS22QS_Object_t *pObj, float Odr); static int32_t ILPS22QS_Initialize(ILPS22QS_Object_t *pObj); /** * @} */ /** @defgroup ILPS22QS_Exported_Functions ILPS22QS Exported Functions * @{ */ /** * @brief Register Component Bus IO operations * @param pObj the device pObj * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_RegisterBusIO(ILPS22QS_Object_t *pObj, ILPS22QS_IO_t *pIO) { int32_t ret = ILPS22QS_OK; if (pObj == NULL) { ret = ILPS22QS_ERROR; } else { pObj->IO.Init = pIO->Init; pObj->IO.DeInit = pIO->DeInit; pObj->IO.BusType = pIO->BusType; pObj->IO.Address = pIO->Address; pObj->IO.WriteReg = pIO->WriteReg; pObj->IO.ReadReg = pIO->ReadReg; pObj->IO.GetTick = pIO->GetTick; pObj->Ctx.read_reg = ReadRegWrap; pObj->Ctx.write_reg = WriteRegWrap; pObj->Ctx.handle = pObj; if (pObj->IO.Init == NULL) { ret = ILPS22QS_ERROR; } else if (pObj->IO.Init() != ILPS22QS_OK) { ret = ILPS22QS_ERROR; } else { if (pObj->IO.BusType == ILPS22QS_SPI_3WIRES_BUS) /* SPI 3-Wires */ { /* Enable the SPI 3-Wires support only the first time */ if (pObj->is_initialized == 0U) { /* Enable SPI 3-Wires on the component */ uint8_t data = 0x20; if (ILPS22QS_Write_Reg(pObj, ILPS22QS_IF_CTRL, data) != ILPS22QS_OK) { ret = ILPS22QS_ERROR; } } } } } return ret; } /** * @brief Initialize the ILPS22QS sensor * @param pObj the device pObj * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_Init(ILPS22QS_Object_t *pObj) { if (pObj->is_initialized == 0U) { if (ILPS22QS_Initialize(pObj) != ILPS22QS_OK) { return ILPS22QS_ERROR; } } pObj->is_initialized = 1U; return ILPS22QS_OK; } /** * @brief Deinitialize the ILPS22QS sensor * @param pObj the device pObj * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_DeInit(ILPS22QS_Object_t *pObj) { if (pObj->is_initialized == 1U) { if (ILPS22QS_PRESS_Disable(pObj) != ILPS22QS_OK) { return ILPS22QS_ERROR; } if (ILPS22QS_TEMP_Disable(pObj) != ILPS22QS_OK) { return ILPS22QS_ERROR; } } pObj->is_initialized = 0; return ILPS22QS_OK; } /** * @brief Get WHO_AM_I value * @param pObj the device pObj * @param Id the WHO_AM_I value * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_ReadID(ILPS22QS_Object_t *pObj, uint8_t *Id) { ilps22qs_id_t val; if (ilps22qs_id_get(&(pObj->Ctx), &val) != ILPS22QS_OK) { return ILPS22QS_ERROR; } *Id = val.whoami; return ILPS22QS_OK; } /** * @brief Get ILPS22QS sensor capabilities * @param pObj Component object pointer * @param Capabilities pointer to ILPS22QS sensor capabilities * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_GetCapabilities(ILPS22QS_Object_t *pObj, ILPS22QS_Capabilities_t *Capabilities) { /* Prevent unused argument(s) compilation warning */ (void)(pObj); Capabilities->Humidity = 0; Capabilities->Pressure = 1; Capabilities->Temperature = 1; Capabilities->LowPower = 0; Capabilities->HumMaxOdr = 0.0f; Capabilities->TempMaxOdr = 200.0f; Capabilities->PressMaxOdr = 200.0f; return ILPS22QS_OK; } /** * @brief Get the ILPS22QS initialization status * @param pObj the device pObj * @param Status 1 if initialized, 0 otherwise * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_Get_Init_Status(ILPS22QS_Object_t *pObj, uint8_t *Status) { if (pObj == NULL) { return ILPS22QS_ERROR; } *Status = pObj->is_initialized; return ILPS22QS_OK; } /** * @brief Enable the ILPS22QS pressure sensor * @param pObj the device pObj * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_PRESS_Enable(ILPS22QS_Object_t *pObj) { /* Check if the component is already enabled */ if (pObj->press_is_enabled == 1U) { return ILPS22QS_OK; } /* Output data rate selection. */ if (ilps22qs_mode_set(&(pObj->Ctx), &pObj->last_odr) != ILPS22QS_OK) { return ILPS22QS_ERROR; } pObj->press_is_enabled = 1; return ILPS22QS_OK; } /** * @brief Disable the ILPS22QS pressure sensor * @param pObj the device pObj * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_PRESS_Disable(ILPS22QS_Object_t *pObj) { /* Check if the component is already disabled */ if (pObj->press_is_enabled == 0U) { return ILPS22QS_OK; } /* Check if the ILPS22QS temperature sensor is still enable. */ /* If yes, skip the disable function, if not call disable function */ if (pObj->temp_is_enabled == 0U) { ilps22qs_md_t val; /* Get current output data rate. */ if (ilps22qs_mode_get(&(pObj->Ctx), &val) != ILPS22QS_OK) { return ILPS22QS_ERROR; } memcpy(&pObj->last_odr, &val, sizeof(ilps22qs_md_t)); val.odr = ILPS22QS_ONE_SHOT; /* Output data rate selection - power down. */ if (ilps22qs_mode_set(&(pObj->Ctx), &val) != ILPS22QS_OK) { return ILPS22QS_ERROR; } } pObj->press_is_enabled = 0; return ILPS22QS_OK; } /** * @brief Get the ILPS22QS pressure sensor output data rate * @param pObj the device pObj * @param Odr pointer where the output data rate is written * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_PRESS_GetOutputDataRate(ILPS22QS_Object_t *pObj, float *Odr) { return ILPS22QS_GetOutputDataRate(pObj, Odr); } /** * @brief Set the ILPS22QS pressure sensor output data rate * @param pObj the device pObj * @param Odr the output data rate value to be set * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_PRESS_SetOutputDataRate(ILPS22QS_Object_t *pObj, float Odr) { /* Check if the component is enabled */ if (pObj->press_is_enabled == 1U) { return ILPS22QS_SetOutputDataRate_When_Enabled(pObj, Odr); } else { return ILPS22QS_SetOutputDataRate_When_Disabled(pObj, Odr); } } /** * @brief Get the ILPS22QS pressure value * @param pObj the device pObj * @param Value pointer where the pressure value is written * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_PRESS_GetPressure(ILPS22QS_Object_t *pObj, float *Value) { ilps22qs_data_t data; ilps22qs_md_t md; if (ilps22qs_mode_get(&(pObj->Ctx), &md) != ILPS22QS_OK) { return ILPS22QS_ERROR; } if (md.fs != ILPS22QS_1260hPa) /* NOTE: Currently only 1260 hPa full scale supported */ { md.fs = ILPS22QS_1260hPa; if (ilps22qs_mode_set(&(pObj->Ctx), &md) != ILPS22QS_OK) { return ILPS22QS_ERROR; } } if (ilps22qs_data_get(&(pObj->Ctx), &md, &data) != ILPS22QS_OK) { return ILPS22QS_ERROR; } *Value = data.pressure.hpa; return ILPS22QS_OK; } /** * @brief Get the ILPS22QS pressure data ready bit value * @param pObj the device pObj * @param Status the status of data ready bit * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_PRESS_Get_DRDY_Status(ILPS22QS_Object_t *pObj, uint8_t *Status) { ilps22qs_status_t reg; if (ilps22qs_read_reg(&(pObj->Ctx), ILPS22QS_STATUS, (uint8_t *) ®, 1) != ILPS22QS_OK) { return ILPS22QS_ERROR; } *Status = reg.p_da; return ILPS22QS_OK; } /** * @brief Enable the ILPS22QS temperature sensor * @param pObj the device pObj * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_TEMP_Enable(ILPS22QS_Object_t *pObj) { /* Check if the component is already enabled */ if (pObj->temp_is_enabled == 1U) { return ILPS22QS_OK; } /* Output data rate selection. */ if (ilps22qs_mode_set(&(pObj->Ctx), &pObj->last_odr) != ILPS22QS_OK) { return ILPS22QS_ERROR; } pObj->temp_is_enabled = 1; return ILPS22QS_OK; } /** * @brief Disable the ILPS22QS temperature sensor * @param pObj the device pObj * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_TEMP_Disable(ILPS22QS_Object_t *pObj) { /* Check if the component is already disabled */ if (pObj->temp_is_enabled == 0U) { return ILPS22QS_OK; } /* Check if the ILPS22QS pressure sensor is still enable. */ /* If yes, skip the disable function, if not call disable function */ if (pObj->press_is_enabled == 0U) { ilps22qs_md_t val; /* Get current output data rate. */ if (ilps22qs_mode_get(&(pObj->Ctx), &val) != ILPS22QS_OK) { return ILPS22QS_ERROR; } memcpy(&pObj->last_odr, &val, sizeof(ilps22qs_md_t)); val.odr = ILPS22QS_ONE_SHOT; /* Output data rate selection - power down. */ if (ilps22qs_mode_set(&(pObj->Ctx), &val) != ILPS22QS_OK) { return ILPS22QS_ERROR; } } pObj->temp_is_enabled = 0; return ILPS22QS_OK; } /** * @brief Get the ILPS22QS temperature sensor output data rate * @param pObj the device pObj * @param Odr pointer where the output data rate is written * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_TEMP_GetOutputDataRate(ILPS22QS_Object_t *pObj, float *Odr) { return ILPS22QS_GetOutputDataRate(pObj, Odr); } /** * @brief Set the ILPS22QS temperature sensor output data rate * @param pObj the device pObj * @param Odr the output data rate value to be set * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_TEMP_SetOutputDataRate(ILPS22QS_Object_t *pObj, float Odr) { /* Check if the component is enabled */ if (pObj->temp_is_enabled == 1U) { return ILPS22QS_SetOutputDataRate_When_Enabled(pObj, Odr); } else { return ILPS22QS_SetOutputDataRate_When_Disabled(pObj, Odr); } } /** * @brief Get the ILPS22QS temperature value * @param pObj the device pObj * @param Value pointer where the temperature value is written * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_TEMP_GetTemperature(ILPS22QS_Object_t *pObj, float *Value) { ilps22qs_data_t data; ilps22qs_md_t md; if (ilps22qs_mode_get(&(pObj->Ctx), &md) != ILPS22QS_OK) { return ILPS22QS_ERROR; } if (md.fs != ILPS22QS_1260hPa) /* NOTE: Currently only 1260 hPa full scale supported */ { md.fs = ILPS22QS_1260hPa; if (ilps22qs_mode_set(&(pObj->Ctx), &md) != ILPS22QS_OK) { return ILPS22QS_ERROR; } } if (ilps22qs_data_get(&(pObj->Ctx), &md, &data) != ILPS22QS_OK) { return ILPS22QS_ERROR; } *Value = data.heat.deg_c; return ILPS22QS_OK; } /** * @brief Get the ILPS22QS temperature data ready bit value * @param pObj the device pObj * @param Status the status of data ready bit * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_TEMP_Get_DRDY_Status(ILPS22QS_Object_t *pObj, uint8_t *Status) { ilps22qs_status_t reg; if (ilps22qs_read_reg(&(pObj->Ctx), ILPS22QS_STATUS, (uint8_t *) ®, 1) != ILPS22QS_OK) { return ILPS22QS_ERROR; } *Status = reg.t_da; return ILPS22QS_OK; } /** * @brief Get the ILPS22QS register value * @param pObj the device pObj * @param Reg address to be written * @param Data value to be written * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_Read_Reg(ILPS22QS_Object_t *pObj, uint8_t Reg, uint8_t *Data) { if (ilps22qs_read_reg(&(pObj->Ctx), Reg, Data, 1) != ILPS22QS_OK) { return ILPS22QS_ERROR; } return ILPS22QS_OK; } /** * @brief Set the ILPS22QS register value * @param pObj the device pObj * @param Reg address to be written * @param Data value to be written * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_Write_Reg(ILPS22QS_Object_t *pObj, uint8_t Reg, uint8_t Data) { if (ilps22qs_write_reg(&(pObj->Ctx), Reg, &Data, 1) != ILPS22QS_OK) { return ILPS22QS_ERROR; } return ILPS22QS_OK; } /** * @} */ /** @defgroup ILPS22QS_Private_Functions ILPS22QS Private Functions * @{ */ /** * @brief Get output data rate * @param pObj the device pObj * @param Odr the output data rate value * @retval 0 in case of success, an error code otherwise */ static int32_t ILPS22QS_GetOutputDataRate(ILPS22QS_Object_t *pObj, float *Odr) { int32_t ret = ILPS22QS_OK; ilps22qs_md_t val; if (ilps22qs_mode_get(&(pObj->Ctx), &val) != ILPS22QS_OK) { return ILPS22QS_ERROR; } switch (val.odr) { case ILPS22QS_ONE_SHOT: *Odr = 0.0f; break; case ILPS22QS_1Hz: *Odr = 1.0f; break; case ILPS22QS_4Hz: *Odr = 4.0f; break; case ILPS22QS_10Hz: *Odr = 10.0f; break; case ILPS22QS_25Hz: *Odr = 25.0f; break; case ILPS22QS_50Hz: *Odr = 50.0f; break; case ILPS22QS_75Hz: *Odr = 75.0f; break; case ILPS22QS_100Hz: *Odr = 100.0f; break; case ILPS22QS_200Hz: *Odr = 200.0f; break; default: ret = ILPS22QS_ERROR; break; } return ret; } /** * @brief Set output data rate * @param pObj the device pObj * @param Odr the output data rate value to be set * @retval 0 in case of success, an error code otherwise */ static int32_t ILPS22QS_SetOutputDataRate_When_Enabled(ILPS22QS_Object_t *pObj, float Odr) { ilps22qs_md_t new_val; if (ilps22qs_mode_get(&(pObj->Ctx), &new_val) != ILPS22QS_OK) { return ILPS22QS_ERROR; } new_val.odr = (Odr <= 1.0f) ? ILPS22QS_1Hz : (Odr <= 4.0f) ? ILPS22QS_4Hz : (Odr <= 10.0f) ? ILPS22QS_10Hz : (Odr <= 25.0f) ? ILPS22QS_25Hz : (Odr <= 50.0f) ? ILPS22QS_50Hz : (Odr <= 75.0f) ? ILPS22QS_75Hz : (Odr <= 100.0f) ? ILPS22QS_100Hz : ILPS22QS_200Hz; if (ilps22qs_mode_set(&(pObj->Ctx), &new_val) != ILPS22QS_OK) { return ILPS22QS_ERROR; } if (ilps22qs_mode_get(&(pObj->Ctx), &pObj->last_odr) != ILPS22QS_OK) { return ILPS22QS_ERROR; } return ILPS22QS_OK; } /** * @brief Set output data rate when disabled * @param pObj the device pObj * @param Odr the output data rate value to be set * @retval 0 in case of success, an error code otherwise */ static int32_t ILPS22QS_SetOutputDataRate_When_Disabled(ILPS22QS_Object_t *pObj, float Odr) { pObj->last_odr.odr = (Odr <= 1.0f) ? ILPS22QS_1Hz : (Odr <= 4.0f) ? ILPS22QS_4Hz : (Odr <= 10.0f) ? ILPS22QS_10Hz : (Odr <= 25.0f) ? ILPS22QS_25Hz : (Odr <= 50.0f) ? ILPS22QS_50Hz : (Odr <= 75.0f) ? ILPS22QS_75Hz : (Odr <= 100.0f) ? ILPS22QS_100Hz : ILPS22QS_200Hz; return ILPS22QS_OK; } /** * @brief Initialize the ILPS22QS sensor * @param pObj the device pObj * @retval 0 in case of success, an error code otherwise */ static int32_t ILPS22QS_Initialize(ILPS22QS_Object_t *pObj) { ilps22qs_md_t md; ilps22qs_bus_mode_t bus_mode; /* Set bdu and if_inc recommended for driver usage */ if (ilps22qs_init_set(&(pObj->Ctx), ILPS22QS_DRV_RDY) != ILPS22QS_OK) { return ILPS22QS_ERROR; } /* Select bus interface */ if (pObj->IO.BusType == ILPS22QS_SPI_3WIRES_BUS) /* SPI 3-Wires */ { bus_mode.interface = ILPS22QS_SPI_3W; } else if (pObj->IO.BusType == ILPS22QS_SPI_4WIRES_BUS) /* SPI 3-Wires */ { bus_mode.interface = ILPS22QS_SPI_4W; } else { bus_mode.interface = ILPS22QS_SEL_BY_HW; } bus_mode.filter = ILPS22QS_AUTO; if (ilps22qs_bus_mode_set(&(pObj->Ctx), &bus_mode) != ILPS22QS_OK) { return ILPS22QS_ERROR; } /* Set Output Data Rate in Power Down */ md.odr = ILPS22QS_ONE_SHOT; /* Configure basic parameters */ md.avg = ILPS22QS_4_AVG; md.lpf = ILPS22QS_LPF_ODR_DIV_4; md.fs = ILPS22QS_1260hPa; if (ilps22qs_mode_set(&(pObj->Ctx), &md) != ILPS22QS_OK) { return ILPS22QS_ERROR; } if (ilps22qs_mode_get(&(pObj->Ctx), &pObj->last_odr) != ILPS22QS_OK) { return ILPS22QS_ERROR; } pObj->last_odr.odr = ILPS22QS_25Hz; return ILPS22QS_OK; } /** * @brief Set the ILPS22QS One Shot Mode * @param pObj the device pObj * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_Set_One_Shot(ILPS22QS_Object_t *pObj) { ilps22qs_md_t md; if (ilps22qs_mode_get(&(pObj->Ctx), &md) != ILPS22QS_OK) { return ILPS22QS_ERROR; } /* Start One Shot Measurement */ if (ilps22qs_trigger_sw(&(pObj->Ctx), &md) != ILPS22QS_OK) { return ILPS22QS_ERROR; } return ILPS22QS_OK; } /** * @brief Get the ILPS22QS One Shot Status * @param pObj the device pObj * @param Status pointer to the one shot status (1 means measurements available, 0 means measurements not available yet) * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_Get_One_Shot_Status(ILPS22QS_Object_t *pObj, uint8_t *Status) { uint8_t p_da; uint8_t t_da; /* Get DataReady for pressure */ if (ILPS22QS_PRESS_Get_DRDY_Status(pObj, &p_da) != ILPS22QS_OK) { return ILPS22QS_ERROR; } /* Get DataReady for temperature */ if (ILPS22QS_TEMP_Get_DRDY_Status(pObj, &t_da) != ILPS22QS_OK) { return ILPS22QS_ERROR; } if (p_da && t_da) { *Status = 1; } else { *Status = 0; } return ILPS22QS_OK; } /** * @brief Set the ILPS22QS averaging selection * @param pObj the device pObj * @param avg averaging selection to be set * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_Set_AVG(ILPS22QS_Object_t *pObj, uint8_t avg) { ilps22qs_md_t md; if (avg > 7) { return ILPS22QS_ERROR; } if (ilps22qs_mode_get(&(pObj->Ctx), &md) != ILPS22QS_OK) { return ILPS22QS_ERROR; } switch (avg) { case 0: default: md.avg = ILPS22QS_4_AVG; break; case 1: md.avg = ILPS22QS_8_AVG; break; case 2: md.avg = ILPS22QS_16_AVG; break; case 3: md.avg = ILPS22QS_32_AVG; break; case 4: md.avg = ILPS22QS_64_AVG; break; case 5: md.avg = ILPS22QS_128_AVG; break; case 6: md.avg = ILPS22QS_256_AVG; break; case 7: md.avg = ILPS22QS_512_AVG; break; } if (ilps22qs_mode_set(&(pObj->Ctx), &md) != ILPS22QS_OK) { return ILPS22QS_ERROR; } return ILPS22QS_OK; } /** * @brief Set the ILPS22QS low pass filter * @param pObj the device pObj * @param lpf low pass filter mode to be set * @retval 0 in case of success, an error code otherwise */ int32_t ILPS22QS_Set_LPF(ILPS22QS_Object_t *pObj, uint8_t lpf) { ilps22qs_md_t md; if (lpf != 0 && lpf != 1 && lpf != 3) { return ILPS22QS_ERROR; } if (ilps22qs_mode_get(&(pObj->Ctx), &md) != ILPS22QS_OK) { return ILPS22QS_ERROR; } switch (lpf) { case 0: default: md.lpf = ILPS22QS_LPF_DISABLE; break; case 1: md.lpf = ILPS22QS_LPF_ODR_DIV_4; break; case 3: md.lpf = ILPS22QS_LPF_ODR_DIV_9; break; } if (ilps22qs_mode_set(&(pObj->Ctx), &md) != ILPS22QS_OK) { return ILPS22QS_ERROR; } return ILPS22QS_OK; } /** * @brief Wrap Read register component function to Bus IO function * @param Handle the device handler * @param Reg the register address * @param pData the stored data pointer * @param Length the length * @retval 0 in case of success, an error code otherwise */ static int32_t ReadRegWrap(void *Handle, uint8_t Reg, uint8_t *pData, uint16_t Length) { ILPS22QS_Object_t *pObj = (ILPS22QS_Object_t *)Handle; return pObj->IO.ReadReg(pObj->IO.Address, Reg, pData, Length); } /** * @brief Wrap Write register component function to Bus IO function * @param Handle the device handler * @param Reg the register address * @param pData the stored data pointer * @param Length the length * @retval 0 in case of success, an error code otherwise */ static int32_t WriteRegWrap(void *Handle, uint8_t Reg, uint8_t *pData, uint16_t Length) { ILPS22QS_Object_t *pObj = (ILPS22QS_Object_t *)Handle; return pObj->IO.WriteReg(pObj->IO.Address, Reg, pData, Length); } /** * @} */ /** * @} */ /** * @} */ /** * @} */