/** * @brief Read LPS25HB output register, and calculate the pressure in mbar * @param pfData the pressure value in mbar * @retval PRESSURE_OK in case of success, an error code otherwise */ static PRESSURE_StatusTypeDef LPS25HB_GetPressure(float* pfData) { int32_t raw_press = 0; if(LPS25HB_I2C_ReadRawPressure(&raw_press) != PRESSURE_OK) { return PRESSURE_ERROR; } *pfData = (float)raw_press / 4096.0f; return PRESSURE_OK; }
/** * @brief Read LPS25HB output register, and calculate the pressure in mbar * @param pfData the pressure value in mbar * @retval PRESSURE_OK in case of success, an error code otherwise */ static PRESSURE_StatusTypeDef LPS25HB_GetPressure(float* pfData) { uint32_t raw_press = 0; uint8_t tmp = 0x00; if(LPS25HB_IO_Read(&tmp, LPS25HB_SlaveAddress, LPS25HB_CTRL_REG1_ADDR, 1) != PRESSURE_OK) { return PRESSURE_ERROR; } /* Output Data Rate selection */ tmp &= (LPS25HB_ODR_MASK); if(tmp == 0x00) { if(LPS25HB_IO_Read(&tmp, LPS25HB_SlaveAddress, LPS25HB_CTRL_REG2_ADDR, 1) != PRESSURE_OK) { return PRESSURE_ERROR; } /* Serial Interface Mode selection */ tmp &= ~(LPS25HB_ONE_SHOT_MASK); tmp |= LPS25HB_ONE_SHOT_START; if(LPS25HB_IO_Write(&tmp, LPS25HB_SlaveAddress, LPS25HB_CTRL_REG2_ADDR, 1) != PRESSURE_OK) { return PRESSURE_ERROR; } do{ if(LPS25HB_IO_Read(&tmp, LPS25HB_SlaveAddress, LPS25HB_STATUS_REG_ADDR, 1) != PRESSURE_OK) { return PRESSURE_ERROR; } }while(!(tmp&&0x01)); } if(LPS25HB_I2C_ReadRawPressure(&raw_press) != PRESSURE_OK) { return PRESSURE_ERROR; } *pfData = (float)raw_press /4096.0f; return PRESSURE_OK; }