API HAL I2C: add timeout support. Update I2C API usage by drivers. (#374)

* API HAL I2C: add timeout support. Update I2C API usage by drivers.
* F4: Add missing API HAL Vibro implementation.
This commit is contained in:
あく
2021-03-10 16:23:54 +03:00
committed by GitHub
parent 468ee09785
commit 2f14f6dac5
15 changed files with 502 additions and 334 deletions

View File

@@ -5,21 +5,19 @@
#include <stddef.h>
uint8_t bit_reverse(uint8_t b) {
b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
b = (b & 0xAA) >> 1 | (b & 0x55) << 1;
return b;
b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
b = (b & 0xAA) >> 1 | (b & 0x55) << 1;
return b;
}
bool bq25896_read(uint8_t address, uint8_t* data, size_t size) {
bool ret;
with_api_hal_i2c(bool, &ret, (){
api_hal_i2c_trx(
POWER_I2C, BQ25896_ADDRESS,
&address, 1, data, size
);
return true;
});
with_api_hal_i2c(
bool, &ret, () {
return api_hal_i2c_trx(
POWER_I2C, BQ25896_ADDRESS, &address, 1, data, size, BQ25896_I2C_TIMEOUT);
});
return ret;
}
@@ -29,12 +27,12 @@ bool bq25896_read_reg(uint8_t address, uint8_t* data) {
}
bool bq25896_write_reg(uint8_t address, uint8_t* data) {
uint8_t buffer[2] = { address, *data };
uint8_t buffer[2] = {address, *data};
bool ret;
with_api_hal_i2c(bool, &ret, (){
api_hal_i2c_tx(POWER_I2C, BQ25896_ADDRESS, buffer, 2);
return true;
});
with_api_hal_i2c(
bool, &ret, () {
return api_hal_i2c_tx(POWER_I2C, BQ25896_ADDRESS, buffer, 2, BQ25896_I2C_TIMEOUT);
});
return ret;
}
@@ -83,7 +81,7 @@ void bq25896_init() {
}
void bq25896_poweroff() {
bq25896_regs.r09.BATFET_DIS=1;
bq25896_regs.r09.BATFET_DIS = 1;
bq25896_write_reg(0x09, (uint8_t*)&bq25896_regs.r09);
}
@@ -105,7 +103,7 @@ void bq25896_disable_otg() {
uint16_t bq25896_get_vbus_voltage() {
bq25896_read_reg(0x11, (uint8_t*)&bq25896_regs.r11);
if (bq25896_regs.r11.VBUS_GD) {
if(bq25896_regs.r11.VBUS_GD) {
return (uint16_t)bq25896_regs.r11.VBUSV * 100 + 2600;
} else {
return 0;
@@ -129,5 +127,5 @@ uint16_t bq25896_get_vbat_current() {
uint32_t bq25896_get_ntc_mpct() {
bq25896_read_reg(0x10, (uint8_t*)&bq25896_regs.r10);
return (uint32_t)bq25896_regs.r10.TSPCT * 465+21000;
return (uint32_t)bq25896_regs.r10.TSPCT * 465 + 21000;
}