Skip to content

Commit

Permalink
Merge pull request #2096 from particle-iot/feature/configurable_i2c_t…
Browse files Browse the repository at this point in the history
…imeout/ch52808

[wiring]: change I2C timeout in FuelGauge and PMIC to a more manageab…
  • Loading branch information
XuGuohui committed May 18, 2020
2 parents 7ac6216 + 81cdcc8 commit eadb1b6
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 6 deletions.
1 change: 1 addition & 0 deletions wiring/inc/spark_wiring_fuel.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ class FuelGauge {
bool unlock();

private:
static constexpr system_tick_t FUELGAUGE_DEFAULT_TIMEOUT = 10; // In millisecond

int readConfigRegister(byte &MSB, byte &LSB);
int readRegister(byte startAddress, byte &MSB, byte &LSB);
Expand Down
1 change: 1 addition & 0 deletions wiring/inc/spark_wiring_power.h
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ class PMIC {


private:
static constexpr system_tick_t PMIC_DEFAULT_TIMEOUT = 10; // In millisecond

byte readRegister(byte startAddress);
void writeRegister(byte address, byte DATA);
Expand Down
11 changes: 8 additions & 3 deletions wiring/src/spark_wiring_fuel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -262,11 +262,14 @@ int FuelGauge::readConfigRegister(byte &MSB, byte &LSB) {

int FuelGauge::readRegister(byte startAddress, byte &MSB, byte &LSB) {
std::lock_guard<FuelGauge> l(*this);
i2c_.beginTransmission(MAX17043_ADDRESS);
WireTransmission config(MAX17043_ADDRESS);
config.timeout(FUELGAUGE_DEFAULT_TIMEOUT);
i2c_.beginTransmission(config);
i2c_.write(startAddress);
CHECK_TRUE(i2c_.endTransmission(true) == 0, SYSTEM_ERROR_TIMEOUT);

CHECK_TRUE(i2c_.requestFrom(MAX17043_ADDRESS, 2, true) == 2, SYSTEM_ERROR_TIMEOUT);
config.quantity(2);
CHECK_TRUE(i2c_.requestFrom(config) == 2, SYSTEM_ERROR_TIMEOUT);
MSB = i2c_.read();
LSB = i2c_.read();

Expand All @@ -275,7 +278,9 @@ int FuelGauge::readRegister(byte startAddress, byte &MSB, byte &LSB) {

int FuelGauge::writeRegister(byte address, byte MSB, byte LSB) {
std::lock_guard<FuelGauge> l(*this);
i2c_.beginTransmission(MAX17043_ADDRESS);
WireTransmission config(MAX17043_ADDRESS);
config.timeout(FUELGAUGE_DEFAULT_TIMEOUT);
i2c_.beginTransmission(config);
i2c_.write(address);
i2c_.write(MSB);
i2c_.write(LSB);
Expand Down
11 changes: 8 additions & 3 deletions wiring/src/spark_wiring_power.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1080,11 +1080,14 @@ byte PMIC::getVersion() {
byte PMIC::readRegister(byte startAddress) {
std::lock_guard<PMIC> l(*this);
byte DATA = 0;
pmicWireInstance()->beginTransmission(PMIC_ADDRESS);
WireTransmission config(PMIC_ADDRESS);
config.timeout(PMIC_DEFAULT_TIMEOUT);
pmicWireInstance()->beginTransmission(config);
pmicWireInstance()->write(startAddress);
pmicWireInstance()->endTransmission(true);

pmicWireInstance()->requestFrom(PMIC_ADDRESS, 1, true);
config.quantity(1);
pmicWireInstance()->requestFrom(config);
DATA = pmicWireInstance()->read();
return DATA;
}
Expand All @@ -1098,7 +1101,9 @@ byte PMIC::readRegister(byte startAddress) {
*******************************************************************************/
void PMIC::writeRegister(byte address, byte DATA) {
std::lock_guard<PMIC> l(*this);
pmicWireInstance()->beginTransmission(PMIC_ADDRESS);
WireTransmission config(PMIC_ADDRESS);
config.timeout(PMIC_DEFAULT_TIMEOUT);
pmicWireInstance()->beginTransmission(config);
pmicWireInstance()->write(address);
pmicWireInstance()->write(DATA);
pmicWireInstance()->endTransmission(true);
Expand Down

0 comments on commit eadb1b6

Please sign in to comment.