|
@@ -1,7 +1,7 @@
|
|
// 1-channel LoRa Gateway for ESP8266
|
|
// 1-channel LoRa Gateway for ESP8266
|
|
// Copyright (c) 2016, 2017, 2018, 2019 Maarten Westenberg version for ESP8266
|
|
// Copyright (c) 2016, 2017, 2018, 2019 Maarten Westenberg version for ESP8266
|
|
-// Version 6.1.1
|
|
|
|
-// Date: 2019-11-06
|
|
|
|
|
|
+// Version 6.1.3
|
|
|
|
+// Date: 2019-11-20
|
|
//
|
|
//
|
|
// based on work done by Thomas Telkamp for Raspberry PI 1ch gateway
|
|
// based on work done by Thomas Telkamp for Raspberry PI 1ch gateway
|
|
// and many others.
|
|
// and many others.
|
|
@@ -51,6 +51,7 @@ int initConfig(struct espGwayConfig *c) {
|
|
(*c).hop = false;
|
|
(*c).hop = false;
|
|
(*c).expert = false;
|
|
(*c).expert = false;
|
|
(*c).txDelay = 0; // First Value without saving is 0;
|
|
(*c).txDelay = 0; // First Value without saving is 0;
|
|
|
|
+ (*c).trusted = 1;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -211,6 +212,10 @@ int readConfig(const char *fn, struct espGwayConfig *c) {
|
|
id_print(id, val);
|
|
id_print(id, val);
|
|
(*c).txDelay = (int32_t) val.toInt();
|
|
(*c).txDelay = (int32_t) val.toInt();
|
|
}
|
|
}
|
|
|
|
+ else if (id == "TRUSTED") { // TRUSTED setting
|
|
|
|
+ id_print(id, val);
|
|
|
|
+ (*c).trusted= (int32_t) val.toInt();
|
|
|
|
+ }
|
|
else {
|
|
else {
|
|
#if _DUSB>=1
|
|
#if _DUSB>=1
|
|
Serial.print(F("readConfig:: tries++"));
|
|
Serial.print(F("readConfig:: tries++"));
|
|
@@ -266,6 +271,9 @@ int writeGwayCfg(const char *fn) {
|
|
// ----------------------------------------------------------------------------
|
|
// ----------------------------------------------------------------------------
|
|
int writeConfig(const char *fn, struct espGwayConfig *c) {
|
|
int writeConfig(const char *fn, struct espGwayConfig *c) {
|
|
|
|
|
|
|
|
+ // Assuming the cibfug file is the first we write...
|
|
|
|
+ // If it is not there we should format first.
|
|
|
|
+ // NOTE: Do not format for other files!
|
|
if (!SPIFFS.exists(fn)) {
|
|
if (!SPIFFS.exists(fn)) {
|
|
Serial.print("WARNING:: writeConfig, file not exists, formatting ");
|
|
Serial.print("WARNING:: writeConfig, file not exists, formatting ");
|
|
SPIFFS.format();
|
|
SPIFFS.format();
|
|
@@ -274,7 +282,7 @@ int writeConfig(const char *fn, struct espGwayConfig *c) {
|
|
}
|
|
}
|
|
File f = SPIFFS.open(fn, "w");
|
|
File f = SPIFFS.open(fn, "w");
|
|
if (!f) {
|
|
if (!f) {
|
|
- Serial.print("ERROR:: writeConfig, open file=");
|
|
|
|
|
|
+ Serial.print("writeConfig: ERROR open file=");
|
|
Serial.print(fn);
|
|
Serial.print(fn);
|
|
Serial.println();
|
|
Serial.println();
|
|
return(-1);
|
|
return(-1);
|
|
@@ -303,6 +311,7 @@ int writeConfig(const char *fn, struct espGwayConfig *c) {
|
|
f.print("FILENO"); f.print('='); f.print((*c).logFileNo); f.print('\n');
|
|
f.print("FILENO"); f.print('='); f.print((*c).logFileNo); f.print('\n');
|
|
f.print("FILENUM"); f.print('='); f.print((*c).logFileNum); f.print('\n');
|
|
f.print("FILENUM"); f.print('='); f.print((*c).logFileNum); f.print('\n');
|
|
f.print("DELAY"); f.print('='); f.print((*c).txDelay); f.print('\n');
|
|
f.print("DELAY"); f.print('='); f.print((*c).txDelay); f.print('\n');
|
|
|
|
+ f.print("TRUSTED"); f.print('='); f.print((*c).trusted); f.print('\n');
|
|
f.print("EXPERT"); f.print('='); f.print((*c).expert); f.print('\n');
|
|
f.print("EXPERT"); f.print('='); f.print((*c).expert); f.print('\n');
|
|
|
|
|
|
f.close();
|
|
f.close();
|
|
@@ -446,12 +455,89 @@ void printLog()
|
|
#if _SEENMAX>0
|
|
#if _SEENMAX>0
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// ----------------------------------------------------------------------------
|
|
-// writeSeen
|
|
|
|
-// - Once every few messages, update the SPIFFS file and write the array.
|
|
|
|
|
|
+// readSeen
|
|
|
|
+// This function read the stored information from writeSeen.
|
|
//
|
|
//
|
|
|
|
+// Parameters:
|
|
|
|
+// Return:
|
|
// ----------------------------------------------------------------------------
|
|
// ----------------------------------------------------------------------------
|
|
-int writeSeen(struct nodeSeen *listSeen) {
|
|
|
|
|
|
+int readSeen(const char *fn, struct nodeSeen *listSeen) {
|
|
|
|
+ int i;
|
|
|
|
+ if (!SPIFFS.exists(fn)) {
|
|
|
|
+#if _DUSB>=1
|
|
|
|
+ Serial.print("WARNING:: readSeen, history file not exists ");
|
|
|
|
+#endif
|
|
|
|
+ initSeen(listSeen); // XXX make all initial declarations here if config vars need to have a value
|
|
|
|
+ Serial.println(fn);
|
|
|
|
+ return(-1);
|
|
|
|
+ }
|
|
|
|
+ File f = SPIFFS.open(fn, "r");
|
|
|
|
+ if (!f) {
|
|
|
|
+ Serial.print("readConfig:: ERROR open file=");
|
|
|
|
+ Serial.print(fn);
|
|
|
|
+ Serial.println();
|
|
|
|
+ return(-1);
|
|
|
|
+ }
|
|
|
|
+ for (i=0; i<_SEENMAX; i++) {
|
|
|
|
+ String val;
|
|
|
|
+ if (!f.available()) {
|
|
|
|
+#if _DUSB>=1
|
|
|
|
+ Serial.println(F("readSeen:: No more info left in file"));
|
|
|
|
+#endif
|
|
|
|
+ }
|
|
|
|
+ val=f.readStringUntil('\t'); listSeen[i].timSeen = (uint32_t) val.toInt();
|
|
|
|
+ val=f.readStringUntil('\t');
|
|
|
|
+ listSeen[i].idSeen = (uint32_t) val.toInt();
|
|
|
|
+ //listSeen[i].idSeen = strtoul(val, val.length()+1, 10);
|
|
|
|
+ val=f.readStringUntil('\n'); listSeen[i].sfSeen = (uint8_t) val.toInt();
|
|
|
|
+ }
|
|
|
|
+ f.close();
|
|
|
|
+#if _DUSB>=1
|
|
|
|
+ printSeen(listSeen);
|
|
|
|
+#endif
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// ----------------------------------------------------------------------------
|
|
|
|
+// writeSeen
|
|
|
|
+// Once every few messages, update the SPIFFS file and write the array.
|
|
|
|
+// Parameters:
|
|
|
|
+// - fn contains the filename to write
|
|
|
|
+// - listSeen contains the _SEENMAX array of list structures
|
|
|
|
+// Return values:
|
|
|
|
+// - return 1 on success
|
|
|
|
+// ----------------------------------------------------------------------------
|
|
|
|
+int writeSeen(const char *fn, struct nodeSeen *listSeen) {
|
|
|
|
+ int i;
|
|
|
|
+ if (!SPIFFS.exists(fn)) {
|
|
|
|
+#if _DUSB>=1
|
|
|
|
+ Serial.print("WARNING:: writeSeen, file not exists, formatting ");
|
|
|
|
+#endif
|
|
|
|
+ initSeen(listSeen); // XXX make all initial declarations here if config vars need to have a value
|
|
|
|
+ Serial.println(fn);
|
|
|
|
+ }
|
|
|
|
+ File f = SPIFFS.open(fn, "w");
|
|
|
|
+ if (!f) {
|
|
|
|
+ Serial.print("writeConfig:: ERROR open file=");
|
|
|
|
+ Serial.print(fn);
|
|
|
|
+ Serial.println();
|
|
|
|
+ return(-1);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for (i=0; i<_SEENMAX; i++) {
|
|
|
|
|
|
|
|
+ unsigned long timSeen;
|
|
|
|
+ f.print(listSeen[i].timSeen); f.print('\t');
|
|
|
|
+ // Typecast to long to avoid errors in unsigned conversion.
|
|
|
|
+ f.print((long) listSeen[i].idSeen); f.print('\t');
|
|
|
|
+ //f.print(listSeen[i].datSeen); f.print('\t');
|
|
|
|
+ //f.print(listSeen[i].chanSeen); f.print('\t');
|
|
|
|
+ //f.print(listSeen[i].rssiSeen); f.print('\t');
|
|
|
|
+ f.print(listSeen[i].sfSeen); f.print('\n');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ f.close();
|
|
|
|
+
|
|
return(1);
|
|
return(1);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -460,16 +546,10 @@ int writeSeen(struct nodeSeen *listSeen) {
|
|
// - Once every few messages, update the SPIFFS file and write the array.
|
|
// - Once every few messages, update the SPIFFS file and write the array.
|
|
// ----------------------------------------------------------------------------
|
|
// ----------------------------------------------------------------------------
|
|
int printSeen(struct nodeSeen *listSeen) {
|
|
int printSeen(struct nodeSeen *listSeen) {
|
|
-
|
|
|
|
-#if _DUSB>=1
|
|
|
|
- if (( debug>=0 ) && ( pdebug & P_MAIN )) {
|
|
|
|
- Serial.print(F("printSeen:: print list"));
|
|
|
|
- Serial.println();
|
|
|
|
- }
|
|
|
|
-#endif
|
|
|
|
int i;
|
|
int i;
|
|
#if _DUSB>=1
|
|
#if _DUSB>=1
|
|
if (( debug>=0 ) && ( pdebug & P_MAIN )) {
|
|
if (( debug>=0 ) && ( pdebug & P_MAIN )) {
|
|
|
|
+ Serial.println(F("printSeen:: "));
|
|
for (i=0; i<_SEENMAX; i++) {
|
|
for (i=0; i<_SEENMAX; i++) {
|
|
if (listSeen[i].idSeen != 0) {
|
|
if (listSeen[i].idSeen != 0) {
|
|
String response;
|
|
String response;
|
|
@@ -504,18 +584,16 @@ int addSeen(struct nodeSeen *listSeen, uint32_t idSeen, uint8_t sfSeen, unsigned
|
|
|
|
|
|
// ( message[4]<<24 | message[3]<<16 | message[2]<<8 | message[1] )
|
|
// ( message[4]<<24 | message[3]<<16 | message[2]<<8 | message[1] )
|
|
|
|
|
|
-#if _DUSB>=1
|
|
|
|
|
|
+#if _DUSB>=2
|
|
if (( debug>=1 ) && ( pdebug & P_MAIN )) {
|
|
if (( debug>=1 ) && ( pdebug & P_MAIN )) {
|
|
Serial.print(F("addSeen:: "));
|
|
Serial.print(F("addSeen:: "));
|
|
// Serial.print(F(" listSeen[0]="));
|
|
// Serial.print(F(" listSeen[0]="));
|
|
// Serial.print(listSeen[0].idSeen,HEX);
|
|
// Serial.print(listSeen[0].idSeen,HEX);
|
|
// Serial.print(F(", "));
|
|
// Serial.print(F(", "));
|
|
- Serial.print(F("tim="));
|
|
|
|
- Serial.print(timSeen);
|
|
|
|
- Serial.print(F(", idSeen="));
|
|
|
|
- Serial.print(idSeen,HEX);
|
|
|
|
- Serial.print(F(", sfSeen="));
|
|
|
|
- Serial.print(sfSeen,HEX);
|
|
|
|
|
|
+
|
|
|
|
+ Serial.print(F("tim=")); Serial.print(timSeen);
|
|
|
|
+ Serial.print(F(", idSeen=")); Serial.print(idSeen,HEX);
|
|
|
|
+ Serial.print(F(", sfSeen=")); Serial.print(sfSeen,HEX);
|
|
Serial.println();
|
|
Serial.println();
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
@@ -524,32 +602,37 @@ int addSeen(struct nodeSeen *listSeen, uint32_t idSeen, uint8_t sfSeen, unsigned
|
|
if ((listSeen[i].idSeen==idSeen) ||
|
|
if ((listSeen[i].idSeen==idSeen) ||
|
|
(listSeen[i].idSeen==0))
|
|
(listSeen[i].idSeen==0))
|
|
{
|
|
{
|
|
|
|
+#if _DUSB>=2
|
|
|
|
+ if (( debug>=0 ) && ( pdebug & P_MAIN )) {
|
|
|
|
+ Serial.print(F("addSeen:: index="));
|
|
|
|
+ Serial.print(i);
|
|
|
|
+ }
|
|
|
|
+#endif
|
|
|
|
+ listSeen[i].idSeen = idSeen;
|
|
|
|
+ listSeen[i].sfSeen |= sfSeen;
|
|
|
|
+ listSeen[i].timSeen = timSeen;
|
|
|
|
+
|
|
|
|
+ writeSeen(_SEENFILE, listSeen);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if (i>=_SEENMAX) {
|
|
if (i>=_SEENMAX) {
|
|
#if _DUSB>=1
|
|
#if _DUSB>=1
|
|
- if (( debug>=0 ) && ( pdebug & P_MAIN )) {
|
|
|
|
- Serial.print(F("addSeen:: exit=0, index="));
|
|
|
|
- Serial.println(i);
|
|
|
|
- }
|
|
|
|
|
|
+ if (( debug>=0 ) && ( pdebug & P_MAIN )) {
|
|
|
|
+ Serial.print(F("addSeen:: exit=0, index="));
|
|
|
|
+ Serial.println(i);
|
|
|
|
+ }
|
|
#endif
|
|
#endif
|
|
|
|
+
|
|
return(0);
|
|
return(0);
|
|
}
|
|
}
|
|
-#if _DUSB>=2
|
|
|
|
- if (( debug>=0 ) && ( pdebug & P_MAIN )) {
|
|
|
|
- Serial.print(F("addSeen:: index="));
|
|
|
|
- Serial.print(i);
|
|
|
|
- }
|
|
|
|
-#endif
|
|
|
|
- listSeen[i].idSeen = idSeen;
|
|
|
|
- listSeen[i].sfSeen |= sfSeen;
|
|
|
|
- listSeen[i].timSeen = timSeen;
|
|
|
|
|
|
+
|
|
|
|
|
|
return(1);
|
|
return(1);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
// ----------------------------------------------------------------------------
|
|
// ----------------------------------------------------------------------------
|
|
// initSeen
|
|
// initSeen
|
|
// Init the lisrScreen array
|
|
// Init the lisrScreen array
|