From 5b8b55990f49e3ab3509d9d63eb0f1def43c2fd1 Mon Sep 17 00:00:00 2001 From: Robert van den Breemen Date: Wed, 15 Jun 2022 07:17:06 +0200 Subject: [PATCH] Version of new firmwares --- FSexplorer.ino | 2 ++ OTGW-Core.ino | 26 ++++++++++++++++++++++++++ OTGW-firmware.ino | 13 +++++++++++++ version.h | 18 +++++++++--------- versionStuff.ino | 33 ++++++++++++++++++++++++--------- 5 files changed, 74 insertions(+), 18 deletions(-) diff --git a/FSexplorer.ino b/FSexplorer.ino index 07fc470..a579722 100644 --- a/FSexplorer.ino +++ b/FSexplorer.ino @@ -159,6 +159,8 @@ void apifirmwarefilelist() { } DebugTf("version=%s\r\n", version.c_str()); fwversion = GetVersion(hexfile); // only check if gateway firmware + // String hexversion = OTGWSerial.readHexFileVersion(hexfile.c_str()); + // DebugTf("File version on hexfile: %s\r\n", hexversion.c_str()); DebugTf("GetVersion(%s) returned [%s]\r\n", hexfile.c_str(), fwversion.c_str()); if (fwversion.length() && strcmp(fwversion.c_str(),version.c_str())) { // versions do not match version=fwversion; // assign hex file version to version diff --git a/OTGW-Core.ino b/OTGW-Core.ino index 78811f8..e10a4f6 100644 --- a/OTGW-Core.ino +++ b/OTGW-Core.ino @@ -106,7 +106,33 @@ void sendMQTTstateinformation(){ //===================[ Reset OTGW ]=============================== void resetOTGW() { //sPICfwversion ="No version found"; //reset versionstring + OTGWSerial.resetPic(); + + // 12 june 2022 - trying to determine the PIC hardware on reboot + // char buffer[80]={0}; + // delay(100); + // OTGWSerial.write(0x0f); + // OTGWSerial.write(0x00); + // OTGWSerial.write(0x03); + // OTGWSerial.write(0xfd); + // OTGWSerial.write(0x04); + // delay(100); + // OTGWSerial.write(0x0f); + // OTGWSerial.write(0x08); + // OTGWSerial.write(0x00); + // OTGWSerial.write(0xf8); + // OTGWSerial.write(0x04); + // delay(100); + // //then read the first response of the firmware to make sure it reads it + // size_t lenbuf = OTGWSerial.readBytesUntil('\n', buffer, sizeof(buffer)); + + // OTGWDebugT("resetOTGW: "); + // for (int i=0; i<(int)lenbuf; i++) { + // OTGWDebugf("%02x ", buffer[i]); + // } + + // //then read the first response of the firmware to make sure it reads it // String resp = OTGWSerial.readStringUntil('\n'); // resp.trim(); diff --git a/OTGW-firmware.ino b/OTGW-firmware.ino index 5e9948e..9799079 100644 --- a/OTGW-firmware.ino +++ b/OTGW-firmware.ino @@ -37,6 +37,8 @@ DECLARE_TIMER_SEC(timerpollsensor, settingGPIOSENSORSinterval, CATCH_UP_MISSED_T //===================================================================== void setup() { + + // Serial is initialized by OTGWSerial. It resets the pic and opens serialdevice. // OTGWSerial.begin();//OTGW Serial device that knows about OTGW PIC // while (!Serial) {} //Wait for OK @@ -44,6 +46,7 @@ void setup() { OTGWSerial.println(F("\r\n[OTGW firmware - Nodoshop version]\r\n")); OTGWSerial.printf("Booting....[%s]\r\n\r\n", String(_FW_VERSION).c_str()); WatchDogEnabled(0); // turn off watchdog + //setup randomseed the right way randomSeed(RANDOM_REG32); //This is 8266 HWRNG used to seed the Random PRNG: Read more: https://config9.com/arduino/getting-a-truly-random-number-in-arduino/ @@ -81,6 +84,16 @@ void setup() { OTGWSerial.println(F("Setup finished!\r\n")); + + // //delay for debugging + // OTGWSerial.print("bootdelay "); + // for (int i =0; i <10; i++) { + // delay(1000); + // OTGWSerial.print(i); + // OTGWSerial.print(" "); + // } + // OTGWSerial.println(); + // After resetting the OTGW PIC never send anything to Serial for debug // and switch to telnet port 23 for debug purposed. // Setup the OTGW PIC diff --git a/version.h b/version.h index 721c2d8..c4d51d2 100644 --- a/version.h +++ b/version.h @@ -2,15 +2,15 @@ #define _VERSION_MAJOR 0 #define _VERSION_MINOR 9 #define _VERSION_PATCH 5 -#define _VERSION_BUILD 1738 -#define _VERSION_GITHASH "138387c" +#define _VERSION_BUILD 1765 +#define _VERSION_GITHASH "0f5bb3b" //#define _VERSION_PRERELEASE beta //uncomment to define prerelease labels: alpha - beta - rc -#define _VERSION_DATE "07-06-2022" -#define _VERSION_TIME "19:39:11" +#define _VERSION_DATE "12-06-2022" +#define _VERSION_TIME "11:49:28" #define _SEMVER_CORE "0.9.5" -#define _SEMVER_BUILD "0.9.5+1738" -#define _SEMVER_GITHASH "0.9.5+138387c" -#define _SEMVER_FULL "0.9.5+138387c" -#define _SEMVER_NOBUILD "0.9.5 (07-06-2022)" -#define _VERSION "0.9.5+138387c (07-06-2022)" +#define _SEMVER_BUILD "0.9.5+1765" +#define _SEMVER_GITHASH "0.9.5+0f5bb3b" +#define _SEMVER_FULL "0.9.5+0f5bb3b" +#define _SEMVER_NOBUILD "0.9.5 (12-06-2022)" +#define _VERSION "0.9.5+0f5bb3b (12-06-2022)" //The version information is created automatically, more information here: https://github.com/rvdbreemen/autoinc-semver diff --git a/versionStuff.ino b/versionStuff.ino index fa0a740..29e9eec 100644 --- a/versionStuff.ino +++ b/versionStuff.ino @@ -10,7 +10,7 @@ static const char banner[] = "OpenTherm Gateway "; String GetVersion(const String hexfile){ char hexbuf[48]={0}; int len, addr, tag, data, offs, linecnt = 0; - char datamem[256]={0}; + char datamem[256]={0}; // prevent buffer overrun unsigned short ptr; File f; DebugTf("GetVersion opening %s\r\n",hexfile.c_str()); @@ -19,13 +19,13 @@ String GetVersion(const String hexfile){ { while (f.readBytesUntil('\n', hexbuf, sizeof(hexbuf)) != 0) { linecnt++; - //DebugTf("reading line %d %s\n",linecnt,hexbuf); + // DebugTf("reading line %d %s\n",linecnt,hexbuf); if (sscanf(hexbuf, ":%2x%4x%2x", &len, &addr, &tag) != 3) { DebugTf("Parse error on line %d\n",linecnt);// Parse error break; } - //DebugTf("Read in %2x %4x %2x\n",len,addr,tag); + // DebugTf("Read in %2x %4x %2x\n",len,addr,tag); if (len & 1) { DebugTf("Invalid data size on line %d\n",linecnt);// Invalid data size @@ -35,12 +35,27 @@ String GetVersion(const String hexfile){ len >>= 1; if (tag == 0) { - //DebugTf("Checking address %4x on line %d\n",addr,linecnt);// Invalid data size - if (addr >= 0x4200 && addr <= 0x4400) + // DebugTf("Checking address %4x on line %d\r\n",addr,linecnt);// Invalid data size + if (addr >= 0x4200 && addr <= 0x4300) { - // Data memory + // Data memory 16f88 addr = (addr - 0x4200) >> 1; while (len > 0) + { + if (sscanf(hexbuf + offs, "%04x", &data) != 1) + break; + // if (!bitRead(datamap, addr / 64)) weight += WEIGHT_DATAPROG; + // bitSet(datamap, addr / 64); + //DebugTf("storing %x in %x\r\n",data,addr); + datamem[addr++] = byteswap(data); + offs += 4; + len--; + } + } else if (addr >= 0xe000 && addr <= 0xe100) + { + // Data memory 16f1847 + addr = (addr - 0xe000) >> 1; + while (len > 0) { if (sscanf(hexbuf + offs, "%04x", &data) != 1) break; @@ -66,14 +81,14 @@ String GetVersion(const String hexfile){ ptr = 0; while (ptr < 256) { - //DebugTf("checking for %s at char pos %d\n",banner,ptr); + //DebugTf("checking for %s at char pos %d\r\n",banner,ptr); char *s = strstr((char *)datamem + ptr, banner); if (!s) { - //DebugTf("did not find the banner\n"); + //DebugTf("did not find the banner\r\n"); ptr += strnlen((char *)datamem + ptr, 256 - ptr) + 1; } else { - //DebugTf("hit the banner! returning version string %s\n",s); + //DebugTf("hit the banner! returning version string %s\r\n",s); s += sizeof(banner) - 1; return String(s); }