Browse Source

in a fixed size array with an unitialized union type a uint64_t value can have a default value

pull/157/head
Marcel Alburg 3 years ago
parent
commit
9073d2a82c
  1. 3
      tools/esp8266/hmInverter.h
  2. 2
      tools/esp8266/hmSystem.h

3
tools/esp8266/hmInverter.h

@ -80,6 +80,7 @@ class Inverter {
RECORDTYPE *record; // pointer for values
uint16_t chMaxPwr[4]; // maximum power of the modules (Wp)
char chName[4][MAX_NAME_LENGTH]; // human readable name for channel
bool initialized; // needed to check if the inverter was correctly added (ESP32 specific - union types are never null)
Inverter() {
ts = 0;
@ -87,6 +88,7 @@ class Inverter {
powerLimit[1] = 0x0000; //
devControlRequest = false;
devControlCmd = 0xff;
initialized = false;
}
~Inverter() {
@ -101,6 +103,7 @@ class Inverter {
memset(name, 0, MAX_NAME_LENGTH);
memset(chName, 0, MAX_NAME_LENGTH * 4);
memset(record, 0, sizeof(RECORDTYPE) * listLen);
initialized = true;
}
uint8_t getPosByChFld(uint8_t channel, uint8_t fieldId) {

2
tools/esp8266/hmSystem.h

@ -91,7 +91,7 @@ class HmSystem {
INVERTERTYPE *getInverterByPos(uint8_t pos, bool check = true) {
DPRINTLN(DBG_VERBOSE, F("hmSystem.h:getInverterByPos"));
if((mInverter[pos].serial.u64 != 0ULL) || false == check)
if((mInverter[pos].initialized && mInverter[pos].serial.u64 != 0ULL) || false == check)
return &mInverter[pos];
else
return NULL;

Loading…
Cancel
Save