I2c optimization and features (#321)
* custom delay * Update comment * add bus control status, add some missing include & fixed display output on sh1104 (#319) * add some missing include * Fixed display on SH1106 * Fix comment, add force sytem, rework flag, 16 bits data transfert * Update all library with new I2C API * custom delay * Update comment, add bus control status * fix i2c read + fix ds3231 temp + fix ssd1306 send
This commit is contained in:
parent
1575bac0c7
commit
813477aa8a
19 changed files with 418 additions and 335 deletions
|
@ -26,60 +26,67 @@
|
|||
*/
|
||||
#define CONVERSION_TIME 20 / portTICK_PERIOD_MS // milliseconds
|
||||
|
||||
static inline bool reset(uint8_t addr)
|
||||
static inline int reset(uint8_t addr)
|
||||
{
|
||||
uint8_t buf[1] = { RESET };
|
||||
return i2c_slave_write(addr, buf, 1);
|
||||
return i2c_slave_write(addr, NULL, buf, 1);
|
||||
}
|
||||
|
||||
static inline bool read_prom(ms561101ba03_t *dev)
|
||||
{
|
||||
uint8_t tmp[2] = { 0, 0 };
|
||||
uint8_t reg = 0xA2 ;
|
||||
|
||||
if (!i2c_slave_read(dev->addr, 0xA2, tmp, 2))
|
||||
if (i2c_slave_read(dev->addr, ®, tmp, 2))
|
||||
return false;
|
||||
dev->config_data.sens = tmp[0] << 8 | tmp[1];
|
||||
|
||||
if (!i2c_slave_read(dev->addr, 0xA4, tmp, 2))
|
||||
reg = 0xA4 ;
|
||||
if (i2c_slave_read(dev->addr, ®, tmp, 2))
|
||||
return false;
|
||||
dev->config_data.off = tmp[0] << 8 | tmp[1];
|
||||
|
||||
if (!i2c_slave_read(dev->addr, 0xA6, tmp, 2))
|
||||
reg = 0xA6 ;
|
||||
if (i2c_slave_read(dev->addr, ®, tmp, 2))
|
||||
return false;
|
||||
dev->config_data.tcs = tmp[0] << 8 | tmp[1];
|
||||
|
||||
if (!i2c_slave_read(dev->addr, 0xA8, tmp, 2))
|
||||
reg = 0xA8 ;
|
||||
if (i2c_slave_read(dev->addr, ®, tmp, 2))
|
||||
return false;
|
||||
dev->config_data.tco = tmp[0] << 8 | tmp[1];
|
||||
|
||||
if (!i2c_slave_read(dev->addr, 0xAA, tmp, 2))
|
||||
reg = 0xAA ;
|
||||
if (i2c_slave_read(dev->addr, ®, tmp, 2))
|
||||
return false;
|
||||
dev->config_data.t_ref = tmp[0] << 8 | tmp[1];
|
||||
|
||||
if (!i2c_slave_read(dev->addr, 0xAC, tmp, 2))
|
||||
reg = 0xAC ;
|
||||
if (i2c_slave_read(dev->addr, ®, tmp, 2))
|
||||
return false;
|
||||
dev->config_data.tempsens = tmp[0] << 8 | tmp[1];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline bool start_pressure_conversion(ms561101ba03_t *dev) //D1
|
||||
static inline int start_pressure_conversion(ms561101ba03_t *dev) //D1
|
||||
{
|
||||
uint8_t buf = CONVERT_D1 + dev->osr;
|
||||
return i2c_slave_write(dev->addr, &buf, 1);
|
||||
return i2c_slave_write(dev->addr, NULL, &buf, 1);
|
||||
}
|
||||
|
||||
static inline bool start_temperature_conversion(ms561101ba03_t *dev) //D2
|
||||
static inline int start_temperature_conversion(ms561101ba03_t *dev) //D2
|
||||
{
|
||||
uint8_t buf = CONVERT_D2 + dev->osr;
|
||||
return i2c_slave_write(dev->addr, &buf, 1);
|
||||
return i2c_slave_write(dev->addr, NULL, &buf, 1);
|
||||
}
|
||||
|
||||
static inline bool read_adc(uint8_t addr, uint32_t *result)
|
||||
{
|
||||
*result = 0;
|
||||
uint8_t tmp[3];
|
||||
if (!i2c_slave_read(addr, 0x00, tmp, 3))
|
||||
uint8_t reg = 0x00 ;
|
||||
if (i2c_slave_read(addr, ®, tmp, 3))
|
||||
return false;
|
||||
|
||||
*result = (tmp[0] << 16) | (tmp[1] << 8) | tmp[2];
|
||||
|
@ -132,7 +139,7 @@ static inline int32_t calc_p(uint32_t digital_pressure, int64_t sens, int64_t of
|
|||
|
||||
static inline bool get_raw_temperature(ms561101ba03_t *dev, uint32_t *result)
|
||||
{
|
||||
if (!start_temperature_conversion(dev))
|
||||
if (start_temperature_conversion(dev))
|
||||
return false;
|
||||
|
||||
vTaskDelay(CONVERSION_TIME);
|
||||
|
@ -145,7 +152,7 @@ static inline bool get_raw_temperature(ms561101ba03_t *dev, uint32_t *result)
|
|||
|
||||
static inline bool get_raw_pressure(ms561101ba03_t *dev, uint32_t *result)
|
||||
{
|
||||
if (!start_pressure_conversion(dev))
|
||||
if (start_pressure_conversion(dev))
|
||||
return false;
|
||||
|
||||
vTaskDelay(CONVERSION_TIME);
|
||||
|
@ -209,7 +216,7 @@ bool ms561101ba03_get_sensor_data(ms561101ba03_t *dev)
|
|||
bool ms561101ba03_init(ms561101ba03_t *dev)
|
||||
{
|
||||
// First of all we need to reset the chip
|
||||
if (!reset(dev->addr))
|
||||
if (reset(dev->addr))
|
||||
return false;
|
||||
// Wait a bit for the device to reset
|
||||
vTaskDelay(CONVERSION_TIME);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue