Skip to content

Commit 7bde0b8

Browse files
committed
Fix QMP6988
1 parent bd47d99 commit 7bde0b8

File tree

2 files changed

+39
-22
lines changed

2 files changed

+39
-22
lines changed

tasmota/tasmota_support/support_a_i2c.ino

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ TwoWire& I2cGetWire(uint8_t bus = 0) {
5858
}
5959
}
6060

61+
/*-------------------------------------------------------------------------------------------*\
62+
* Return code: 0 = Error, 1 = OK
63+
\*-------------------------------------------------------------------------------------------*/
64+
6165
bool I2cValidRead(uint8_t addr, uint8_t reg, uint8_t size, uint8_t bus = 0) {
6266
i2c_buffer = 0;
6367

@@ -75,51 +79,51 @@ bool I2cValidRead(uint8_t addr, uint8_t reg, uint8_t size, uint8_t bus = 0) {
7579
for (uint32_t i = 0; i < size; i++) {
7680
i2c_buffer = i2c_buffer << 8 | myWire.read(); // receive DATA
7781
}
78-
status = true;
82+
status = true; // 1 = OK
7983
}
8084
}
8185
retry--;
8286
}
8387
if (!retry) myWire.endTransmission();
84-
return status;
88+
return status; // 0 = Error, 1 = OK
8589
}
8690

8791
bool I2cValidRead8(uint8_t *data, uint8_t addr, uint8_t reg, uint8_t bus = 0) {
8892
bool status = I2cValidRead(addr, reg, 1, bus);
8993
*data = (uint8_t)i2c_buffer;
90-
return status;
94+
return status; // 0 = Error, 1 = OK
9195
}
9296

9397
bool I2cValidRead16(uint16_t *data, uint8_t addr, uint8_t reg, uint8_t bus = 0) {
9498
bool status = I2cValidRead(addr, reg, 2, bus);
9599
*data = (uint16_t)i2c_buffer;
96-
return status;
100+
return status; // 0 = Error, 1 = OK
97101
}
98102

99103
bool I2cValidReadS16(int16_t *data, uint8_t addr, uint8_t reg, uint8_t bus = 0) {
100104
bool status = I2cValidRead(addr, reg, 2, bus);
101105
*data = (int16_t)i2c_buffer;
102-
return status;
106+
return status; // 0 = Error, 1 = OK
103107
}
104108

105109
bool I2cValidRead16LE(uint16_t *data, uint8_t addr, uint8_t reg, uint8_t bus = 0) {
106110
uint16_t ldata;
107111
bool status = I2cValidRead16(&ldata, addr, reg, bus);
108112
*data = (ldata >> 8) | (ldata << 8);
109-
return status;
113+
return status; // 0 = Error, 1 = OK
110114
}
111115

112116
bool I2cValidReadS16_LE(int16_t *data, uint8_t addr, uint8_t reg, uint8_t bus = 0) {
113117
uint16_t ldata;
114118
bool status = I2cValidRead16LE(&ldata, addr, reg, bus);
115119
*data = (int16_t)ldata;
116-
return status;
120+
return status; // 0 = Error, 1 = OK
117121
}
118122

119123
bool I2cValidRead24(int32_t *data, uint8_t addr, uint8_t reg, uint8_t bus = 0) {
120124
bool status = I2cValidRead(addr, reg, 3, bus);
121125
*data = i2c_buffer;
122-
return status;
126+
return status; // 0 = Error, 1 = OK
123127
}
124128

125129
uint8_t I2cRead8(uint8_t addr, uint8_t reg, uint8_t bus = 0) {
@@ -166,37 +170,41 @@ bool I2cWrite(uint8_t addr, uint8_t reg, uint32_t val, uint8_t size, uint8_t bus
166170
}
167171
x--;
168172
} while (myWire.endTransmission(true) != 0 && x != 0); // end transmission
169-
return (x);
173+
return (x); // 0 = Error, 1 = OK
170174
}
171175

172176
bool I2cWrite8(uint8_t addr, uint8_t reg, uint32_t val, uint8_t bus = 0) {
173-
return I2cWrite(addr, reg, val, 1, bus);
177+
return I2cWrite(addr, reg, val, 1, bus); // 0 = Error, 1 = OK
174178
}
175179

176180
bool I2cWrite16(uint8_t addr, uint8_t reg, uint32_t val, uint8_t bus = 0) {
177-
return I2cWrite(addr, reg, val, 2, bus);
181+
return I2cWrite(addr, reg, val, 2, bus); // 0 = Error, 1 = OK
178182
}
179183

184+
/*-------------------------------------------------------------------------------------------*\
185+
* Return code: 0 = OK, 1 = Error
186+
\*-------------------------------------------------------------------------------------------*/
187+
180188
bool I2cReadBuffer(uint8_t addr, uint8_t reg, uint8_t *reg_data, uint16_t len, uint8_t bus = 0) {
181189
TwoWire& myWire = I2cGetWire(bus);
182-
if (&myWire == nullptr) { return true; } // No valid I2c bus
190+
if (&myWire == nullptr) { return true; } // No valid I2c bus
183191

184192
myWire.beginTransmission((uint8_t)addr);
185193
myWire.write((uint8_t)reg);
186194
myWire.endTransmission();
187195
if (len != myWire.requestFrom((uint8_t)addr, (uint8_t)len)) {
188-
return true; // Error
196+
return true; // 1 = Error
189197
}
190198
while (len--) {
191199
*reg_data = (uint8_t)myWire.read();
192200
reg_data++;
193201
}
194-
return false; // OK
202+
return false; // 0 = OK
195203
}
196204

197205
int8_t I2cWriteBuffer(uint8_t addr, uint8_t reg, uint8_t *reg_data, uint16_t len, uint8_t bus = 0) {
198206
TwoWire& myWire = I2cGetWire(bus);
199-
if (&myWire == nullptr) { return 1; } // No valid I2c bus
207+
if (&myWire == nullptr) { return 1; } // 1 = Error, No valid I2c bus
200208

201209
myWire.beginTransmission((uint8_t)addr);
202210
myWire.write((uint8_t)reg);
@@ -205,9 +213,11 @@ int8_t I2cWriteBuffer(uint8_t addr, uint8_t reg, uint8_t *reg_data, uint16_t len
205213
reg_data++;
206214
}
207215
myWire.endTransmission();
208-
return 0; // OK
216+
return 0; // 0 = OK
209217
}
210218

219+
/*-------------------------------------------------------------------------------------------*/
220+
211221
void I2cScan(uint8_t bus = 0) {
212222
// Return error codes defined in twi.h and core_esp8266_si2c.c
213223
// I2C_OK 0

tasmota/tasmota_xsns_sensor/xsns_28_qmp6988.ino

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,18 @@ qmp6988_data_t *Qmp6988 = nullptr;
125125
/*********************************************************************************************/
126126

127127
bool QMP6988I2cReadBuffer(uint8_t reg, uint8_t *reg_data, uint16_t len) {
128-
return I2cReadBuffer(Qmp6988->address, reg, reg_data, len, Qmp6988->bus);
128+
bool ret = !I2cReadBuffer(Qmp6988->address, reg, reg_data, len, Qmp6988->bus);
129+
130+
// AddLog(LOG_LEVEL_DEBUG, PSTR("QMP: Rd %02X '%*_H', Rslt %d"), reg, len, reg_data, ret);
131+
132+
return ret;
129133
}
130134

131-
uint8_t QMP6988I2cWrite(uint8_t reg, uint32_t val) {
132-
uint8_t ret = I2cWrite8(Qmp6988->address, reg, val, Qmp6988->bus);
135+
bool QMP6988I2cWrite(uint8_t reg, uint32_t val) {
136+
bool ret = I2cWrite8(Qmp6988->address, reg, val, Qmp6988->bus);
137+
138+
// AddLog(LOG_LEVEL_DEBUG, PSTR("QMP: Wr %02X '%02X', Rslt %d"), reg, val, ret);
139+
133140
delay(20);
134141
return ret;
135142
}
@@ -272,7 +279,7 @@ int QMP6988GetPressure02e(qmp6988_ik_data_t* ik, int dp, int16_t tx) {
272279
void QMP6988Reset(void) {
273280
uint8_t ret = QMP6988I2cWrite(QMP6988_RESET_REG, 0xe6);
274281
if (0 == ret) {
275-
AddLog(LOG_LEVEL_DEBUG, PSTR("QMP: Reset fail"));
282+
QMP6988_LOG("reset fail!!! \r\n");
276283
}
277284
QMP6988I2cWrite(QMP6988_RESET_REG, 0x00);
278285
}
@@ -322,7 +329,7 @@ bool QMP6988ValidChip(void) {
322329
uint8_t data;
323330
QMP6988I2cReadBuffer(QMP6988_CHIP_ID_REG, &data, 1);
324331

325-
AddLog(LOG_LEVEL_DEBUG, PSTR("QMP: Chip Id 0x%02X"), data);
332+
QMP6988_LOG("chip id=0x%x \r\n", data);
326333

327334
return (QMP6988_CHIP_ID == data);
328335
}
@@ -345,7 +352,7 @@ void QMP6988CalcPressureAndTemperature(void) {
345352
int P_int = QMP6988GetPressure02e(&(Qmp6988->ik), P_raw, T_int);
346353

347354
Qmp6988->temperature = (float)T_int / 256.0f;
348-
Qmp6988->pressure = (float)P_int / 16.0f;
355+
Qmp6988->pressure = (float)P_int / 1600.0f;
349356
}
350357

351358
void Qmp6988Detect(void) {

0 commit comments

Comments
 (0)