mirror of
https://github.com/lumapu/ahoy.git
synced 2025-05-12 00:16:42 +02:00
Merge branch 'main' into development
This commit is contained in:
commit
8ec4b8e5f4
7 changed files with 33 additions and 15 deletions
|
@ -317,12 +317,12 @@ bool app::buildPayload(uint8_t id) {
|
|||
for(uint8_t i = 0; i < mPayload[id].maxPackId; i ++) {
|
||||
if(mPayload[id].len[i] > 0) {
|
||||
if(i == (mPayload[id].maxPackId-1)) {
|
||||
crc = crc16(mPayload[id].data[i], mPayload[id].len[i] - 2, crc);
|
||||
crc = Hoymiles::crc16(mPayload[id].data[i], mPayload[id].len[i] - 2, crc);
|
||||
crcRcv = (mPayload[id].data[i][mPayload[id].len[i] - 2] << 8)
|
||||
| (mPayload[id].data[i][mPayload[id].len[i] - 1]);
|
||||
}
|
||||
else
|
||||
crc = crc16(mPayload[id].data[i], mPayload[id].len[i], crc);
|
||||
crc = Hoymiles::crc16(mPayload[id].data[i], mPayload[id].len[i], crc);
|
||||
}
|
||||
yield();
|
||||
}
|
||||
|
|
|
@ -166,7 +166,7 @@ class app {
|
|||
while(length > 0) {
|
||||
len = (length < 32) ? length : 32;
|
||||
mEep->read(start, buf, len);
|
||||
crc = crc16(buf, len, crc);
|
||||
crc = Hoymiles::crc16(buf, len, crc);
|
||||
start += len;
|
||||
length -= len;
|
||||
}
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
|
||||
#include "crc.h"
|
||||
|
||||
namespace Hoymiles {
|
||||
|
||||
uint8_t crc8(uint8_t buf[], uint8_t len) {
|
||||
uint8_t crc = CRC8_INIT;
|
||||
for(uint8_t i = 0; i < len; i++) {
|
||||
|
@ -33,3 +35,4 @@ uint16_t crc16(uint8_t buf[], uint8_t len, uint16_t start) {
|
|||
}
|
||||
return crc;
|
||||
}
|
||||
} // namespace Hoymiles
|
|
@ -14,7 +14,10 @@
|
|||
|
||||
#define CRC16_MODBUS_POLYNOM 0xA001
|
||||
|
||||
uint8_t crc8(uint8_t buf[], uint8_t len);
|
||||
uint16_t crc16(uint8_t buf[], uint8_t len, uint16_t start = 0xffff);
|
||||
namespace Hoymiles {
|
||||
|
||||
uint8_t crc8(uint8_t buf[], uint8_t len);
|
||||
uint16_t crc16(uint8_t buf[], uint8_t len, uint16_t start = 0xffff);
|
||||
|
||||
}
|
||||
#endif /*__CRC_H__*/
|
||||
|
|
|
@ -81,6 +81,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;
|
||||
|
@ -88,6 +89,7 @@ class Inverter {
|
|||
powerLimit[1] = 0x0000; //
|
||||
devControlRequest = false;
|
||||
devControlCmd = 0xff;
|
||||
initialized = false;
|
||||
fwVersion = 0;
|
||||
}
|
||||
|
||||
|
@ -103,6 +105,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) {
|
||||
|
|
|
@ -59,7 +59,12 @@ template <uint8_t CE_PIN, uint8_t CS_PIN, class BUFFER, uint64_t DTU_ID=DTU_RADI
|
|||
class HmRadio {
|
||||
public:
|
||||
HmRadio() : mNrf24(CE_PIN, CS_PIN, SPI_SPEED) {
|
||||
DPRINTLN(DBG_VERBOSE, F("hmRadio.h : HmRadio():mNrf24(CE_PIN: ") + String(CE_PIN) + F(", CS_PIN: ") + String(CS_PIN) + F(", SPI_SPEED: ") + String(SPI_SPEED) + ")");
|
||||
DPRINT(DBG_VERBOSE, F("hmRadio.h : HmRadio():mNrf24(CE_PIN: "));
|
||||
DPRINT(DBG_VERBOSE, String(CE_PIN));
|
||||
DPRINT(DBG_VERBOSE, F(", CS_PIN: "));
|
||||
DPRINT(DBG_VERBOSE, String(CS_PIN));
|
||||
DPRINT(DBG_VERBOSE, F(", SPI_SPEED: "));
|
||||
DPRINTLN(DBG_VERBOSE, String(SPI_SPEED) + ")");
|
||||
|
||||
// Depending on the program, the module can work on 2403, 2423, 2440, 2461 or 2475MHz.
|
||||
// Channel List 2403, 2423, 2440, 2461, 2475MHz
|
||||
|
@ -101,7 +106,8 @@ class HmRadio {
|
|||
// enable only receiving interrupts
|
||||
mNrf24.maskIRQ(true, true, false);
|
||||
|
||||
DPRINTLN(DBG_INFO, F("RF24 Amp Pwr: RF24_PA_") + String(rf24AmpPowerNames[config->amplifierPower]));
|
||||
DPRINT(DBG_INFO, F("RF24 Amp Pwr: RF24_PA_"));
|
||||
DPRINTLN(DBG_INFO, String(rf24AmpPowerNames[config->amplifierPower]));
|
||||
mNrf24.setPALevel(config->amplifierPower & 0x03);
|
||||
mNrf24.startListening();
|
||||
|
||||
|
@ -170,12 +176,12 @@ class HmRadio {
|
|||
mTxBuf[10 + (++cnt)] = ((data[1] ) ) & 0xff; // setting for persistens handling
|
||||
}
|
||||
// crc control data
|
||||
uint16_t crc = crc16(&mTxBuf[10], cnt+1);
|
||||
uint16_t crc = Hoymiles::crc16(&mTxBuf[10], cnt+1);
|
||||
mTxBuf[10 + (++cnt)] = (crc >> 8) & 0xff;
|
||||
mTxBuf[10 + (++cnt)] = (crc ) & 0xff;
|
||||
// crc over all
|
||||
cnt +=1;
|
||||
mTxBuf[10 + cnt] = crc8(mTxBuf, 10 + cnt);
|
||||
mTxBuf[10 + cnt] = Hoymiles::crc8(mTxBuf, 10 + cnt);
|
||||
|
||||
sendPacket(invId, mTxBuf, 10 + (++cnt), true);
|
||||
}
|
||||
|
@ -194,10 +200,10 @@ class HmRadio {
|
|||
mTxBuf[18] = 0x00;
|
||||
mTxBuf[19] = 0x00;
|
||||
}
|
||||
uint16_t crc = crc16(&mTxBuf[10], 14);
|
||||
uint16_t crc = Hoymiles::crc16(&mTxBuf[10], 14);
|
||||
mTxBuf[24] = (crc >> 8) & 0xff;
|
||||
mTxBuf[25] = (crc ) & 0xff;
|
||||
mTxBuf[26] = crc8(mTxBuf, 26);
|
||||
mTxBuf[26] = Hoymiles::crc8(mTxBuf, 26);
|
||||
|
||||
sendPacket(invId, mTxBuf, 27, true);
|
||||
}
|
||||
|
@ -210,7 +216,7 @@ class HmRadio {
|
|||
CP_U32_BigEndian(&mTxBuf[5], (DTU_ID >> 8));
|
||||
mTxBuf[9] = pid;
|
||||
if(calcCrc) {
|
||||
mTxBuf[10] = crc8(mTxBuf, 10);
|
||||
mTxBuf[10] = Hoymiles::crc8(mTxBuf, 10);
|
||||
sendPacket(invId, mTxBuf, 11, false);
|
||||
}
|
||||
}
|
||||
|
@ -224,7 +230,7 @@ class HmRadio {
|
|||
buf[i-1] = (buf[i] << 1) | (buf[i+1] >> 7);
|
||||
}
|
||||
|
||||
uint8_t crc = crc8(buf, *len-1);
|
||||
uint8_t crc = Hoymiles::crc8(buf, *len-1);
|
||||
bool valid = (crc == buf[*len-1]);
|
||||
|
||||
return valid;
|
||||
|
|
|
@ -52,7 +52,10 @@ class HmSystem {
|
|||
case 0x21: p->type = INV_TYPE_1CH; break;
|
||||
case 0x41: p->type = INV_TYPE_2CH; break;
|
||||
case 0x61: p->type = INV_TYPE_4CH; break;
|
||||
default: DPRINTLN(DBG_ERROR, F("unknown inverter type: 11") + String(p->serial.b[4], HEX)); break;
|
||||
default:
|
||||
DPRINT(DBG_ERROR, F("unknown inverter type: 11"));
|
||||
DPRINTLN(DBG_ERROR, String(p->serial.b[4], HEX));
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -88,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…
Add table
Add a link
Reference in a new issue