10#ifdef SENSOR_BAR_ILS22QS
21#define ILPS22QS_I2C_ADDR (0x5C << 1)
24#define REG_WHO_AM_I 0x0F
25#define REG_CTRL_REG1 0x10
26#define REG_PRESS_OUT_XL 0x28
27#define REG_PRESS_OFFSET 0x1A
29#define ILPS22QS_ID 0xB4
31bar_ils22qs_t _bar_ils22qsData = {};
32bar_ils22qs_t _bck_bar_ils22qsData = {};
35static HAL_StatusTypeDef bar_ils22qs_IsOn(I2C_HandleTypeDef *hi2c, uint8_t *onOff)
37 HAL_StatusTypeDef status = HAL_ERROR;
43 status = HAL_I2C_Mem_Read(hi2c, ILPS22QS_I2C_ADDR, REG_CTRL_REG1, 1, &ctrl1, 1, 100);
46 *onOff = ((ctrl1 & 0x50) != 0);
52static HAL_StatusTypeDef
barometer_onOff(I2C_HandleTypeDef *hi2c, uint8_t onOff)
54 HAL_StatusTypeDef status = HAL_ERROR;
60 uint8_t ctrl1 = onOff;
61 status = HAL_I2C_Mem_Write(hi2c, ILPS22QS_I2C_ADDR, REG_CTRL_REG1, 1, &ctrl1, 1, 100);
67int8_t bar_ils22qs_Is(I2C_HandleTypeDef *hi2c, int8_t tryInit)
70 bar_ils22qs_Init(hi2c);
74HAL_StatusTypeDef bar_ils22qs_On(I2C_HandleTypeDef *hi2c)
82 const uint8_t val = 0b00011010;
85 _bar_ils22qsData.IsDataValid = 0;
94HAL_StatusTypeDef bar_ils22qs_Off(I2C_HandleTypeDef *hi2c)
101HAL_StatusTypeDef bar_ils22qs_Init(I2C_HandleTypeDef *hi2c)
105 if (status == HAL_OK)
110 if ((status = HAL_I2C_Mem_Read(hi2c, ILPS22QS_I2C_ADDR, REG_WHO_AM_I, 1, &data, 1, 100)) != HAL_OK)
112 if (data != ILPS22QS_ID)
119 if ((status = bar_ils22qs_On(hi2c)) != HAL_OK)
121 if ((status = bar_ils22qs_Off(hi2c)) != HAL_OK)
129HAL_StatusTypeDef bar_ils22qs_Read(I2C_HandleTypeDef *hi2c)
132 HAL_StatusTypeDef status = HAL_ERROR;
139 if ((status = bar_ils22qs_IsOn(hi2c, &raw_data[0])) != HAL_OK)
143 status = HAL_TIMEOUT;
147 if ((status = HAL_I2C_Mem_Read(hi2c, ILPS22QS_I2C_ADDR, REG_PRESS_OFFSET, 1, raw_data, 2, 100)) != HAL_OK)
153 if ((status = HAL_I2C_Mem_Read(hi2c, ILPS22QS_I2C_ADDR, REG_PRESS_OUT_XL, 1, raw_data, 5, 100)) != HAL_OK)
157 int32_t raw_press = (int32_t) ((uint32_t) raw_data[2] << 16 | (uint32_t) raw_data[1] << 8 | raw_data[0]);
159 if (raw_press & 0x800000)
160 raw_press |= 0xFF000000;
162 _bar_ils22qsData.PressureSEA = _bar_ils22qsData.PressureABS = (float) raw_press / 4096.0f;
165 int16_t raw_temp = (int16_t) ((uint16_t) raw_data[4] << 8 | raw_data[3]);
166 _bar_ils22qsData.Temperature = (float) raw_temp / 100.0f;
167 _bar_ils22qsData.IsDataValid = 1;
196 float temp = _bar_ils22qsData.Temperature;
198 _bar_ils22qsData.PressureSEA = _bar_ils22qsData.PressureABS
206void bar_ils22qs_LogData(
char *buf)
210 PRIf_02D(_bar_ils22qsData.Temperature));
static HAL_StatusTypeDef barometer_onOff(I2C_HandleTypeDef *hi2c, uint8_t onOff)
Control sensor power mode.
static uint8_t _isBarometer
This file contains all the function prototypes for the i2c.c file.
HAL_StatusTypeDef I2C_IsDeviceReadyMT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout)
Wrapper around HAL_I2C_IsDeviceReady() that recovers from a busy bus. If the HAL I2C bus is in a BUSY...
#define PRIf_02D(fData)
Expands to integer and fractional arguments for use with PRIf_02. Splits a float/double into the inte...
#define PRIf_02
printf format string for printing a float/double as integer with 2 decimal places....
mems_MainBlock_t _memsMainBlock
Global instance of the main flash control block; loaded by mems_ReadMainBlock().
HAL_StatusTypeDef mems_WriteMainBlock()
writing the main block on flash. The main block is stored on address 0
systemParams_t _systemParams
tmphm_sht45_t _tmphm_sht45Data
Live measurement data from the SHT45 sensor; updated by tmphm_sht45_Read().