Skip to content

Commit 721c5e9

Browse files
committed
Drastically simplify I2C code - its needlessly complicated.
1 parent e52e68d commit 721c5e9

File tree

6 files changed

+28
-84
lines changed

6 files changed

+28
-84
lines changed

examples/C33-Low-Power/C33-Low-Power.ino

+3
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ void setup()
3232
PMIC.configLDO3(Ldo3Voltage::V_1_20, false, false, false);
3333
PMIC.configSw2(Sw2Voltage::V_3_30, Sw2Voltage::V_3_30, Sw2Voltage::V_3_30, Sw2CurrentLimit::I_1_5_A, false, false, false);
3434

35+
Serial.print("Device ID = ");
36+
Serial.println(PMIC.getDeviceId(), HEX);
37+
3538
p_cfg.low_power_mode = LPM_MODE_DEEP; // LPM_MODE_SLEEP LPM_MODE_STANDBY LPM_MODE_STANDBY_SNOOZE LPM_MODE_DEEP
3639
p_cfg.standby_wake_sources = LPM_STANDBY_WAKE_SOURCE_IRQ0 | LPM_STANDBY_WAKE_SOURCE_RTCALM;
3740
p_cfg.dtc_state_in_snooze = LPM_SNOOZE_DTC_DISABLE; // LPM_SNOOZE_DTC_ENABLE LPM_SNOOZE_DTC_DISABLE

src/PF1550.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ class PF1550
7373
VFastCharge const v_fast_charge,
7474
IEndOfCharge const i_end_of_charge,
7575
IInputCurrentLimit const i_input_current_limit);
76-
76+
77+
uint8_t getDeviceId() { return _control.getDeviceId(); }
78+
7779
/* Static function registered to be executed from within external interrupt ISR */
7880
static void ISR_onPMICEvent() { PMIC.onPMICEvent(); }
7981
/* Actual PMIC event ISR handler with access to member variables */

src/PF1550/PF1550_Control.cpp

+5-10
Original file line numberDiff line numberDiff line change
@@ -56,21 +56,16 @@ void PF1550_Control::setBit(Register const reg, uint8_t const bit_pos)
5656
_io.setBit(reg, bit_pos);
5757
}
5858

59-
void PF1550_Control::writeReg(Register const reg_addr, uint8_t val)
59+
void PF1550_Control::writeReg(Register const reg_addr, uint8_t const val)
6060
{
61-
uint8_t i2c_data[2];
62-
63-
i2c_data[0] = (uint8_t)reg_addr;
64-
i2c_data[1] = val;
65-
6661
if (_debug) {
67-
_debug->print("PF1550_Control::writeReg at address=");
68-
_debug->print(i2c_data[0], HEX);
62+
_debug->print("PF1550_Control::writeReg at address = ");
63+
_debug->print(static_cast<uint8_t>(reg_addr), HEX);
6964
_debug->print(" data=");
70-
_debug->println(i2c_data[1], HEX);
65+
_debug->println(val, HEX);
7166
}
7267

73-
_io.writeRegister(PF1550_I2C_ADDR, i2c_data, 2, 0);
68+
_io.writeRegister(reg_addr, val);
7469
}
7570

7671
void PF1550_Control::readReg(Register const reg_addr, uint8_t *data)

src/PF1550/PF1550_Control.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ class PF1550_Control
4848
int begin();
4949
void debug(Stream& stream);
5050

51-
void setBit(Register const reg, uint8_t const bit_pos);
52-
void writeReg(Register const reg_addr, uint8_t val);
53-
void readReg(Register const reg_addr, uint8_t *data);
51+
void setBit (Register const reg, uint8_t const bit_pos);
52+
void writeReg(Register const reg_addr, uint8_t const val);
53+
void readReg (Register const reg_addr, uint8_t * data);
5454

5555
/* LDO1 Configuration *******************************************************/
5656
void setLDO1Voltage (Ldo1Voltage const ldo1_volt);

src/PF1550/PF1550_IO.cpp

+13-69
Original file line numberDiff line numberDiff line change
@@ -50,71 +50,21 @@ int PF1550_IO::begin()
5050

5151
void PF1550_IO::readRegister(Register const reg_addr, uint8_t * data)
5252
{
53-
uint8_t i2c_data[2];
53+
_wire->beginTransmission(_i2c_addr);
54+
_wire->write(static_cast<uint8_t>(reg_addr));
55+
_wire->endTransmission(false); /* No Stop. */
5456

55-
i2c_data[0] = (uint8_t)reg_addr;
56-
57-
writeRegister(_i2c_addr, i2c_data, 1, 1);
58-
59-
uint8_t retVal = _wire->requestFrom(_i2c_addr, 1, true);
60-
61-
if (_debug) {
62-
_debug->print("requestFrom: ");
63-
_debug->println(retVal);
64-
}
65-
66-
int i = 0;
67-
while (_wire->available() && i < 1) {
68-
data[0] = _wire->read();
69-
i++;
70-
}
71-
72-
if (_debug) {
73-
_debug->println("Read:");
74-
for (i = 0; i < 1; i++) {
75-
_debug->println(data[i], HEX);
76-
}
77-
}
57+
_wire->requestFrom(_i2c_addr, 1, true);
58+
while (_wire->available() < 1) { }
59+
*data = _wire->read();
7860
}
7961

80-
void PF1550_IO::writeRegister(uint8_t slave_addr, uint8_t *data, uint8_t data_len, uint8_t restart)
62+
void PF1550_IO::writeRegister(Register const reg_addr, uint8_t const data)
8163
{
82-
if (_debug)
83-
{
84-
_debug->print("Restart: ");
85-
_debug->println(restart);
86-
if (!restart)
87-
{
88-
_debug->print("PF1550_IO_C33::writeRegister at address=");
89-
_debug->print(data[0], HEX);
90-
_debug->print(" data=");
91-
_debug->println(data[1], HEX);
92-
_debug->print("i2c slave address: ");
93-
_debug->println(slave_addr);
94-
}
95-
else
96-
{
97-
_debug->print("PF1550_IO_C33::Read from register at address=");
98-
_debug->println(data[0], HEX);
99-
}
100-
}
101-
102-
_wire->beginTransmission(slave_addr);
103-
_wire->write(data, data_len);
104-
uint8_t retVal = _wire->endTransmission(restart == 0 ? true : false);
105-
106-
if (_debug) {
107-
_debug->print("End transmission: ");
108-
_debug->println(retVal);
109-
}
110-
/*
111-
if (_debug) {
112-
_debug->println("Write:");
113-
for (int i = 0; i < data_len; i++) {
114-
_debug->println(data[i], HEX);
115-
}
116-
}
117-
*/
64+
_wire->beginTransmission(_i2c_addr);
65+
_wire->write(static_cast<uint8_t>(reg_addr));
66+
_wire->write(data);
67+
_wire->endTransmission(true);
11868
}
11969

12070
void PF1550_IO::setBit(Register const reg, uint8_t const bit_pos)
@@ -124,10 +74,7 @@ void PF1550_IO::setBit(Register const reg, uint8_t const bit_pos)
12474
readRegister(reg, &reg_val);
12575
reg_val |= (1<<bit_pos);
12676

127-
uint8_t i2c_data[2];
128-
i2c_data[0] = (uint8_t)reg;
129-
i2c_data[1] = reg_val;
130-
writeRegister(_i2c_addr, i2c_data, 2, 0);
77+
writeRegister(reg, reg_val);
13178
}
13279

13380
void PF1550_IO::clrBit(Register const reg, uint8_t const bit_pos)
@@ -137,8 +84,5 @@ void PF1550_IO::clrBit(Register const reg, uint8_t const bit_pos)
13784
readRegister(reg, &reg_val);
13885
reg_val &= ~(1<<bit_pos);
13986

140-
uint8_t i2c_data[2];
141-
i2c_data[0] = (uint8_t)reg;
142-
i2c_data[1] = reg_val;
143-
writeRegister(_i2c_addr, i2c_data, 2, 0);
87+
writeRegister(reg, reg_val);
14488
}

src/PF1550/PF1550_IO.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class PF1550_IO
5353
int begin();
5454

5555
void readRegister (Register const reg_addr, uint8_t * data);
56-
void writeRegister(uint8_t slave_addr, uint8_t * data, uint8_t data_len, uint8_t restart);
56+
void writeRegister(Register const reg_addr, uint8_t const data);
5757

5858
void setBit(Register const reg, uint8_t const bit_pos);
5959
void clrBit(Register const reg, uint8_t const bit_pos);

0 commit comments

Comments
 (0)