Baro config (#2591)

* adjust API to allow i2c init to fail

* init

* proteus config

* 🎠🎠🎠

* buh

Co-authored-by: Matthew Kennedy <makenne@microsoft.com>
This commit is contained in:
Matthew Kennedy 2021-04-27 12:29:22 -07:00 committed by GitHub
parent 17719c5da0
commit 742ea83bfa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 25 additions and 11 deletions

View File

@ -162,6 +162,9 @@ void setBoardConfigOverrides(void) {
engineConfiguration->canTxPin = GPIOD_1;
engineConfiguration->canRxPin = GPIOD_0;
engineConfiguration->lps25BaroSensorScl = GPIOB_10;
engineConfiguration->lps25BaroSensorSda = GPIOB_11;
}
void setPinConfigurationOverrides(void) {

View File

@ -9,7 +9,9 @@ constexpr uint8_t addr = 0x48;
#define ADS1015_HI_THRESH (3)
bool Ads1015::init(brain_pin_e scl, brain_pin_e sda) {
m_i2c.init(scl, sda);
if (!m_i2c.init(scl, sda)) {
return false;
}
// ADS1015 has no ID register - so we read the Lo_thresh instead
uint16_t loThresh = readReg(ADS1015_LO_THRESH);

View File

@ -10,6 +10,7 @@
#include "io_pins.h"
#include "efi_gpio.h"
#include "pin_repository.h"
void BitbangI2c::sda_high() {
#if EFI_PROD_CODE
@ -35,9 +36,13 @@ void BitbangI2c::scl_low() {
#endif
}
void BitbangI2c::init(brain_pin_e scl, brain_pin_e sda) {
bool BitbangI2c::init(brain_pin_e scl, brain_pin_e sda) {
#if EFI_PROD_CODE
if (m_sdaPort) return;
if (m_sdaPort) return false;
if (!isBrainPinValid(scl) || !isBrainPinValid(sda)) {
return false;
}
efiSetPadMode("i2c", scl, PAL_MODE_OUTPUT_OPENDRAIN); //PAL_STM32_OTYPE_OPENDRAIN
efiSetPadMode("i2c", sda, PAL_MODE_OUTPUT_OPENDRAIN);
@ -52,6 +57,8 @@ void BitbangI2c::init(brain_pin_e scl, brain_pin_e sda) {
// Both lines idle high
scl_high();
sda_high();
return true;
}
void BitbangI2c::start() {

View File

@ -19,7 +19,7 @@
class BitbangI2c {
public:
// Initialize the I2C driver
void init(brain_pin_e scl, brain_pin_e sda);
bool init(brain_pin_e scl, brain_pin_e sda);
// Write a sequence of bytes to the specified device
void write(uint8_t addr, const uint8_t* data, size_t size);

View File

@ -27,7 +27,9 @@ static constexpr uint8_t expectedWhoAmI = 0xBD;
#define REG_PressureOutH 0x2A
bool Lps25::init(brain_pin_e scl, brain_pin_e sda) {
m_i2c.init(scl, sda);
if (!m_i2c.init(scl, sda)) {
return false;
}
// Read ident register
auto whoAmI = m_i2c.readRegister(addr, REG_WhoAmI);

View File

@ -26,7 +26,7 @@ void initCanSensors();
void initLambda(DECLARE_ENGINE_PARAMETER_SIGNATURE);
void initFlexSensor(DECLARE_CONFIG_PARAMETER_SIGNATURE);
void initFuelLevel(DECLARE_CONFIG_PARAMETER_SIGNATURE);
void initBaro();
void initBaro(DECLARE_CONFIG_PARAMETER_SIGNATURE);
// Sensor reconfiguration
void reconfigureVbatt(DECLARE_CONFIG_PARAMETER_SIGNATURE);

View File

@ -3,21 +3,21 @@
#include "rusefi_hw_enums.h"
EXTERN_ENGINE;
static Lps25 device;
static Lps25Sensor sensor(device);
void initBaro() {
void initBaro(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
// If there's already an external (analog) baro sensor configured,
// don't configure the internal one.
if (Sensor::hasSensor(SensorType::BarometricPressure)) {
return;
}
#if HW_PROTEUS
if (device.init(GPIOB_10, GPIOB_11)) {
if (device.init(CONFIG(lps25BaroSensorScl), CONFIG(lps25BaroSensorScl))) {
sensor.Register();
}
#endif
}
void baroUpdate() {

View File

@ -20,7 +20,7 @@ void initNewSensors(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
initThermistors(PASS_CONFIG_PARAMETER_SIGNATURE);
initLambda(PASS_ENGINE_PARAMETER_SIGNATURE);
initFlexSensor(PASS_CONFIG_PARAMETER_SIGNATURE);
initBaro();
initBaro(PASS_CONFIG_PARAMETER_SIGNATURE);
#if !EFI_UNIT_TEST
initFuelLevel(PASS_CONFIG_PARAMETER_SIGNATURE);