diff --git a/RX_FSK/RX_FSK.ino b/RX_FSK/RX_FSK.ino index 7d2b07b..7645ec7 100644 --- a/RX_FSK/RX_FSK.ino +++ b/RX_FSK/RX_FSK.ino @@ -310,13 +310,11 @@ const char *createQRGForm() { const char *handleQRGPost(AsyncWebServerRequest *request) { char label[10]; // parameters: a_i, f_1, t_i (active/frequency/type) -#if 1 File file = SPIFFS.open("/qrg.txt", "w"); if (!file) { Serial.println("Error while opening '/qrg.txt' for writing"); return "Error while opening '/qrg.txt' for writing"; } -#endif Serial.println("Handling post request"); #if 0 int params = request->params(); @@ -349,9 +347,7 @@ const char *handleQRGPost(AsyncWebServerRequest *request) { } file.close(); - Serial.println("Channel setup finished"); - Serial.println(); - delay(500); + Serial.println("Channel setup finished\n"); setupChannelList(); return ""; } @@ -2283,16 +2279,8 @@ void setup() // == setup default channel list if qrg.txt read fails =========== // - setupChannelList(); -#if 0 sonde.clearSonde(); - sonde.addSonde(402.700, STYPE_RS41); - sonde.addSonde(405.700, STYPE_RS41); - sonde.addSonde(405.900, STYPE_RS41); - sonde.addSonde(403.450, STYPE_DFM09); - Serial.println("No channel config file, using defaults!"); - Serial.println(); -#endif + setupChannelList(); /// not here, done by sonde.setup(): rs41.setup(); // == setup default channel list if qrg.txt read fails =========== // #ifndef DISABLE_SX1278 @@ -3580,7 +3568,7 @@ void sondehub_send_data(WiFiClient * client, SondeInfo * s, struct st_sondehub * // If something that looks like a valid HTTP response is received, we are ready to send the next data item if (shState == SH_CONN_WAITACK && cnt > 11 && strncmp(rs_msg, "HTTP/1", 6) == 0) { shState = SH_CONN_IDLE; - if ( sonde.config.sondehub.fiactive) + if ( sonde.config.sondehub.fiactive && shImport==0 ) sondehub_send_fimport(client); } } diff --git a/RX_FSK/data/cfg.js b/RX_FSK/data/cfg.js index 99ce803..5dc7fc3 100644 --- a/RX_FSK/data/cfg.js +++ b/RX_FSK/data/cfg.js @@ -4,7 +4,7 @@ var cfgs = [ [ "mdnsname", "Network mDNS name"], [ "ephftp", "FTP server for ephemeris data (RS92 decoder)"], [ "debug", "Debug mode (0/1)" ], -[ "maxsonde", "Maxumum number of QRG entries (must be <100)" ], +[ "maxsonde", "Maxumum number of QRG entries (must be ⋚50)" ], [ "rxlat", "Receiver fixed latitude"], [ "rxlon", "Receiver fixed longitude"], [ "rxalt", "Receiver fixed altitude"], diff --git a/RX_FSK/src/RS41.cpp b/RX_FSK/src/RS41.cpp index b668b4d..e873f21 100644 --- a/RX_FSK/src/RS41.cpp +++ b/RX_FSK/src/RS41.cpp @@ -499,6 +499,7 @@ void ProcessSubframe( byte *subframeBytes, int subframeNumber ) { } memcpy( s->rawData+16*subframeNumber, subframeBytes, 16); s->valid |= (1ULL << subframeNumber); + Serial.printf("subframe %d; valid: %x\n", subframeNumber, s->valid); // subframeReceived[subframeNumber] = true; // mark this row of the total subframe as complete #if 0 diff --git a/RX_FSK/src/Sonde.cpp b/RX_FSK/src/Sonde.cpp index 581a82e..56e0cfe 100644 --- a/RX_FSK/src/Sonde.cpp +++ b/RX_FSK/src/Sonde.cpp @@ -80,6 +80,10 @@ void Sonde::defaultConfig() { sondeList = (SondeInfo *)malloc((MAXSONDE+1)*sizeof(SondeInfo)); memset(sondeList, 0, (MAXSONDE+1)*sizeof(SondeInfo)); + for(int i=0; i<(MAXSONDE+1); i++) { + sondeList[i].freq=400; + sondeList[i].type=STYPE_RS41; + } config.touch_thresh = 70; config.led_pout = -1; config.power_pout = -1; @@ -353,14 +357,17 @@ void Sonde::addSonde(float frequency, SondeType type, int active, char *launchsi Serial.printf("Adding %f - %d - %d - %s\n", frequency, type, active, launchsite); // reset all data if type or frequency has changed if(type != sondeList[nSonde].type || frequency != sondeList[nSonde].freq) { + //TODO: Check for potential race condition with decoders + // do not clear extra while decoder is potentiall still accessing it! + if(sondeList[nSonde].extra) free(sondeList[nSonde].extra); memset(&sondeList[nSonde], 0, sizeof(SondeInfo)); + sondeList[nSonde].type = type; + sondeList[nSonde].typestr[0] = 0; + sondeList[nSonde].freq = frequency; + memcpy(sondeList[nSonde].rxStat, "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3", 18); // unknown/undefined } - sondeList[nSonde].type = type; - sondeList[nSonde].typestr[0] = 0; - sondeList[nSonde].freq = frequency; sondeList[nSonde].active = active; strncpy(sondeList[nSonde].launchsite, launchsite, 17); - memcpy(sondeList[nSonde].rxStat, "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3", 18); // unknown/undefined nSonde++; } diff --git a/RX_FSK/src/Sonde.h b/RX_FSK/src/Sonde.h index 6f0a7bb..d16dbd0 100644 --- a/RX_FSK/src/Sonde.h +++ b/RX_FSK/src/Sonde.h @@ -274,7 +274,7 @@ extern struct st_configitems config_list[]; extern const int N_CONFIG; -#define MAXSONDE 99 +#define MAXSONDE 50 extern int fingerprintValue[]; extern const char *fingerprintText[];