From 4561655d9d6f0919bab89c8e72a7cc9dde358a7b Mon Sep 17 00:00:00 2001 From: lumapu Date: Thu, 8 Sep 2022 22:52:51 +0200 Subject: [PATCH] * improved serial console * repaired /save * removed yields (not allowed with async-web) --- tools/esp8266/app.cpp | 23 +++++++++-------- tools/esp8266/app.h | 2 +- tools/esp8266/crc.cpp | 45 ++++++++++++++++------------------ tools/esp8266/crc.h | 4 +-- tools/esp8266/hmRadio.h | 12 ++++----- tools/esp8266/html/serial.html | 30 ++++++++++++++++------- tools/esp8266/html/setup.html | 6 ++--- tools/esp8266/html/style.css | 25 ++++++++++++++++++- tools/esp8266/include/dbg.h | 1 - 9 files changed, 88 insertions(+), 60 deletions(-) diff --git a/tools/esp8266/app.cpp b/tools/esp8266/app.cpp index 0d684ff9..58e34222 100644 --- a/tools/esp8266/app.cpp +++ b/tools/esp8266/app.cpp @@ -289,12 +289,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 = Hoymiles::crc16(mPayload[id].data[i], mPayload[id].len[i] - 2, crc); + crc = Ahoy::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 = Hoymiles::crc16(mPayload[id].data[i], mPayload[id].len[i], crc); + crc = Ahoy::crc16(mPayload[id].data[i], mPayload[id].len[i], crc); } yield(); } @@ -728,19 +728,18 @@ void app::saveValues(void) { Inverter<> *iv; for(uint8_t i = 0; i < MAX_NUM_INVERTERS; i ++) { iv = mSys->getInverterByPos(i, false); - mEep->write(ADDR_INV_ADDR + (i * 8), iv->serial.u64); - mEep->write(ADDR_INV_PWR_LIM + i * 2, iv->powerLimit[0]); - mEep->write(ADDR_INV_PWR_LIM_CON + i * 2, iv->powerLimit[1]); - mEep->write(ADDR_INV_NAME + (i * MAX_NAME_LENGTH), iv->name, MAX_NAME_LENGTH); - // max channel power / name - for(uint8_t j = 0; j < 4; j++) { - mEep->write(ADDR_INV_CH_PWR + (i * 2 * 4) + (j*2), iv->chMaxPwr[j]); - mEep->write(ADDR_INV_CH_NAME + (i * 4 * MAX_NAME_LENGTH) + j * MAX_NAME_LENGTH, iv->chName[j], MAX_NAME_LENGTH); - } + mEep->write(ADDR_INV_ADDR + (i * 8), iv->serial.u64); + mEep->write(ADDR_INV_PWR_LIM + i * 2, iv->powerLimit[0]); + mEep->write(ADDR_INV_PWR_LIM_CON + i * 2, iv->powerLimit[1]); + mEep->write(ADDR_INV_NAME + (i * MAX_NAME_LENGTH), iv->name, MAX_NAME_LENGTH); + // max channel power / name + for(uint8_t j = 0; j < 4; j++) { + mEep->write(ADDR_INV_CH_PWR + (i * 2 * 4) + (j*2), iv->chMaxPwr[j]); + mEep->write(ADDR_INV_CH_NAME + (i * 4 * MAX_NAME_LENGTH) + j * MAX_NAME_LENGTH, iv->chName[j], MAX_NAME_LENGTH); } + } updateCrc(); - mEep->commit(); } diff --git a/tools/esp8266/app.h b/tools/esp8266/app.h index 0848fc3d..dbec850a 100644 --- a/tools/esp8266/app.h +++ b/tools/esp8266/app.h @@ -164,7 +164,7 @@ class app { while(length > 0) { len = (length < 32) ? length : 32; mEep->read(start, buf, len); - crc = Hoymiles::crc16(buf, len, crc); + crc = Ahoy::crc16(buf, len, crc); start += len; length -= len; } diff --git a/tools/esp8266/crc.cpp b/tools/esp8266/crc.cpp index 29f9b82f..879af286 100644 --- a/tools/esp8266/crc.cpp +++ b/tools/esp8266/crc.cpp @@ -5,34 +5,31 @@ #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++) { - crc ^= buf[i]; - for(uint8_t b = 0; b < 8; b ++) { - crc = (crc << 1) ^ ((crc & 0x80) ? CRC8_POLY : 0x00); +namespace Ahoy { + uint8_t crc8(uint8_t buf[], uint8_t len) { + uint8_t crc = CRC8_INIT; + for(uint8_t i = 0; i < len; i++) { + crc ^= buf[i]; + for(uint8_t b = 0; b < 8; b ++) { + crc = (crc << 1) ^ ((crc & 0x80) ? CRC8_POLY : 0x00); + } } - yield(); + return crc; } - return crc; -} -uint16_t crc16(uint8_t buf[], uint8_t len, uint16_t start) { - uint16_t crc = start; - uint8_t shift = 0; + uint16_t crc16(uint8_t buf[], uint8_t len, uint16_t start) { + uint16_t crc = start; + uint8_t shift = 0; - for(uint8_t i = 0; i < len; i ++) { - crc = crc ^ buf[i]; - for(uint8_t bit = 0; bit < 8; bit ++) { - shift = (crc & 0x0001); - crc = crc >> 1; - if(shift != 0) - crc = crc ^ CRC16_MODBUS_POLYNOM; + for(uint8_t i = 0; i < len; i ++) { + crc = crc ^ buf[i]; + for(uint8_t bit = 0; bit < 8; bit ++) { + shift = (crc & 0x0001); + crc = crc >> 1; + if(shift != 0) + crc = crc ^ CRC16_MODBUS_POLYNOM; + } } - yield(); + return crc; } - return crc; } -} // namespace Hoymiles \ No newline at end of file diff --git a/tools/esp8266/crc.h b/tools/esp8266/crc.h index 1c8de9e0..ef7be1f8 100644 --- a/tools/esp8266/crc.h +++ b/tools/esp8266/crc.h @@ -14,10 +14,8 @@ #define CRC16_MODBUS_POLYNOM 0xA001 -namespace Hoymiles { - +namespace Ahoy { 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__*/ diff --git a/tools/esp8266/hmRadio.h b/tools/esp8266/hmRadio.h index c7fcf0e0..e74c2e05 100644 --- a/tools/esp8266/hmRadio.h +++ b/tools/esp8266/hmRadio.h @@ -175,12 +175,12 @@ class HmRadio { mTxBuf[10 + (++cnt)] = ((data[1] ) ) & 0xff; // setting for persistens handling } // crc control data - uint16_t crc = Hoymiles::crc16(&mTxBuf[10], cnt+1); + uint16_t crc = Ahoy::crc16(&mTxBuf[10], cnt+1); mTxBuf[10 + (++cnt)] = (crc >> 8) & 0xff; mTxBuf[10 + (++cnt)] = (crc ) & 0xff; // crc over all cnt +=1; - mTxBuf[10 + cnt] = Hoymiles::crc8(mTxBuf, 10 + cnt); + mTxBuf[10 + cnt] = Ahoy::crc8(mTxBuf, 10 + cnt); sendPacket(invId, mTxBuf, 10 + (++cnt), true); } @@ -198,10 +198,10 @@ class HmRadio { mTxBuf[18] = 0x00; mTxBuf[19] = 0x00; } - uint16_t crc = Hoymiles::crc16(&mTxBuf[10], 14); + uint16_t crc = Ahoy::crc16(&mTxBuf[10], 14); mTxBuf[24] = (crc >> 8) & 0xff; mTxBuf[25] = (crc ) & 0xff; - mTxBuf[26] = Hoymiles::crc8(mTxBuf, 26); + mTxBuf[26] = Ahoy::crc8(mTxBuf, 26); sendPacket(invId, mTxBuf, 27, true); } @@ -214,7 +214,7 @@ class HmRadio { CP_U32_BigEndian(&mTxBuf[5], (DTU_ID >> 8)); mTxBuf[9] = pid; if(calcCrc) { - mTxBuf[10] = Hoymiles::crc8(mTxBuf, 10); + mTxBuf[10] = Ahoy::crc8(mTxBuf, 10); sendPacket(invId, mTxBuf, 11, false); } } @@ -228,7 +228,7 @@ class HmRadio { buf[i-1] = (buf[i] << 1) | (buf[i+1] >> 7); } - uint8_t crc = Hoymiles::crc8(buf, *len-1); + uint8_t crc = Ahoy::crc8(buf, *len-1); bool valid = (crc == buf[*len-1]); return valid; diff --git a/tools/esp8266/html/serial.html b/tools/esp8266/html/serial.html index 48cbf5fb..d350942b 100644 --- a/tools/esp8266/html/serial.html +++ b/tools/esp8266/html/serial.html @@ -9,7 +9,10 @@

Serial Console

- +
+
+ conntected: +