From 5c5bfa07251b68c0e9798a6e24716d8a1651168d Mon Sep 17 00:00:00 2001 From: "Hansi, dl9rdz" Date: Sat, 18 Sep 2021 16:51:03 +0200 Subject: [PATCH] js-based config form, using less memory. +some cleanup --- RX_FSK/RX_FSK.ino | 199 +++++++++++++++++++++++++++++++++++++---- RX_FSK/data/cfg.js | 159 ++++++++++++++++++++++++++++++++ RX_FSK/data/config.txt | 8 +- RX_FSK/data/style.css | 6 ++ RX_FSK/src/RS41.cpp | 18 ---- RX_FSK/src/Sonde.cpp | 18 ++-- RX_FSK/src/Sonde.h | 7 +- RX_FSK/version.h | 2 +- 8 files changed, 370 insertions(+), 47 deletions(-) create mode 100644 RX_FSK/data/cfg.js diff --git a/RX_FSK/RX_FSK.ino b/RX_FSK/RX_FSK.ino index d3c87db..6796cfe 100644 --- a/RX_FSK/RX_FSK.ino +++ b/RX_FSK/RX_FSK.ino @@ -13,6 +13,7 @@ #include #include #include "esp_heap_caps.h" +#include "soc/rtc_wdt.h" #include "src/SX1278FSK.h" #include "src/Sonde.h" @@ -567,11 +568,12 @@ void setupConfigData() { String line = readLine(file); //file.readStringUntil('\n'); sonde.setConfig(line.c_str()); } - int shII = atoi(sonde.config.sondehub.fimport); + int shII = sonde.config.sondehub.fiinterval * 60; if(shImportInterval > shII) shImportInterval = shII; } +#if 0 struct st_configitems config_list[] = { /* General config settings */ {"", "Software configuration", -5, NULL}, @@ -672,10 +674,116 @@ struct st_configitems config_list[] = { {"sondehub.antenna", "Antenna (optional, visisble on SondeHub tracker)", 63, &sonde.config.sondehub.antenna}, {"sondehub.email", "SondeHub email (optional, only used to contact in case of upload errors)", 63, &sonde.config.sondehub.email}, {"sondehub.fimport", "SondeHub freq import (interval/maxdist/maxage [min/km/min])", 18, &sonde.config.sondehub.fimport}, +}; +#endif +#else +struct st_configitems config_list[] = { + /* General config settings */ + {"wifi", 0, &sonde.config.wifi}, + {"debug", 0, &sonde.config.debug}, + {"maxsonde", 0, &sonde.config.maxsonde}, + {"screenfile", 0, &sonde.config.screenfile}, + {"display", -6, sonde.config.display}, + /* Spectrum display settings */ + {"spectrum", 0, &sonde.config.spectrum}, + {"startfreq", 0, &sonde.config.startfreq}, + {"channelbw", 0, &sonde.config.channelbw}, + {"marker", 0, &sonde.config.marker}, + {"noisefloor", 0, &sonde.config.noisefloor}, + /* decoder settings */ + {"freqofs", 0, &sonde.config.freqofs}, + {"rs41.agcbw", 0, &sonde.config.rs41.agcbw}, + {"rs41.rxbw", 0, &sonde.config.rs41.rxbw}, + {"rs92.rxbw", 0, &sonde.config.rs92.rxbw}, + {"rs92.alt2d", 0, &sonde.config.rs92.alt2d}, + {"dfm.agcbw", 0, &sonde.config.dfm.agcbw}, + {"dfm.rxbw", 0, &sonde.config.dfm.rxbw}, + {"m10m20.agcbw", 0, &sonde.config.m10m20.agcbw}, + {"m10m20.rxbw", 0, &sonde.config.m10m20.rxbw}, + {"mp3h.agcbw", 0, &sonde.config.mp3h.agcbw}, + {"mp3h.rxbw", 0, &sonde.config.mp3h.rxbw}, + {"ephftp", 39, &sonde.config.ephftp}, + /* APRS settings */ + {"call", 8, sonde.config.call}, + {"passcode", 0, &sonde.config.passcode}, + /* KISS tnc settings */ + {"kisstnc.active", 0, &sonde.config.kisstnc.active}, + {"kisstnc.idformat", -2, &sonde.config.kisstnc.idformat}, + /* AXUDP settings */ + {"axudp.active", -3, &sonde.config.udpfeed.active}, + {"axudp.host", 63, sonde.config.udpfeed.host}, + {"axudp.port", 0, &sonde.config.udpfeed.port}, + {"axudp.idformat", -2, &sonde.config.udpfeed.idformat}, + {"axudp.highrate", 0, &sonde.config.udpfeed.highrate}, + /* APRS TCP settings, current not used */ + {"tcp.active", -3, &sonde.config.tcpfeed.active}, + {"tcp.host", 63, sonde.config.tcpfeed.host}, + {"tcp.port", 0, &sonde.config.tcpfeed.port}, + {"tcp.idformat", -2, &sonde.config.tcpfeed.idformat}, + {"tcp.highrate", 0, &sonde.config.tcpfeed.highrate}, + +#if FEATURE_MQTT + /* MQTT */ + {"mqtt.active", 0, &sonde.config.mqtt.active}, + {"mqtt.id", 63, &sonde.config.mqtt.id}, + {"mqtt.host", 63, &sonde.config.mqtt.host}, + {"mqtt.port", 0, &sonde.config.mqtt.port}, + {"mqtt.username", 63, &sonde.config.mqtt.username}, + {"mqtt.password", 63, &sonde.config.mqtt.password}, + {"mqtt.prefix", 63, &sonde.config.mqtt.prefix}, +#endif + + /* Hardware dependeing settings */ + {"disptype", 0, &sonde.config.disptype}, + {"norx_timeout", 0, &sonde.config.norx_timeout}, + {"oled_sda", 0, &sonde.config.oled_sda}, + {"oled_scl", 0, &sonde.config.oled_scl}, + {"oled_rst", 0, &sonde.config.oled_rst}, + {"tft_rs", 0, &sonde.config.tft_rs}, + {"tft_cs", 0, &sonde.config.tft_cs}, + {"tft_orient", 0, &sonde.config.tft_orient}, + {"tft_spifreq", 0, &sonde.config.tft_spifreq}, + {"button_pin", -4, &sonde.config.button_pin}, + {"button2_pin", -4, &sonde.config.button2_pin}, + {"button2_axp", 0, &sonde.config.button2_axp}, + {"touch_thresh", 0, &sonde.config.touch_thresh}, + {"power_pout", 0, &sonde.config.power_pout}, + {"led_pout", 0, &sonde.config.led_pout}, + {"gps_rxd", 0, &sonde.config.gps_rxd}, + {"gps_txd", 0, &sonde.config.gps_txd}, + {"batt_adc", 0, &sonde.config.batt_adc}, +#if 1 + {"sx1278_ss", 0, &sonde.config.sx1278_ss}, + {"sx1278_miso", 0, &sonde.config.sx1278_miso}, + {"sx1278_mosi", 0, &sonde.config.sx1278_mosi}, + {"sx1278_sck", 0, &sonde.config.sx1278_sck}, +#endif + {"mdnsname", 14, &sonde.config.mdnsname}, + +#if FEATURE_SONDEHUB + /* SondeHub settings */ + {"sondehub.active", 0, &sonde.config.sondehub.active}, + {"sondehub.chase", 0, &sonde.config.sondehub.chase}, + {"sondehub.host", 63, &sonde.config.sondehub.host}, + {"sondehub.callsign", 63, &sonde.config.sondehub.callsign}, + {"sondehub.lat", -7, &sonde.config.sondehub.lat}, + {"sondehub.lon", -7, &sonde.config.sondehub.lon}, + {"sondehub.alt", 19, &sonde.config.sondehub.alt}, + {"sondehub.antenna", 63, &sonde.config.sondehub.antenna}, + {"sondehub.email", 63, &sonde.config.sondehub.email}, + {"sondehub.fiactive", 0, &sonde.config.sondehub.fimactitve}, + {"sondehub.fiinterval", 0, &sonde.config.sondehub.fiinterval}, + {"sondehub.fimaxdist", 0, &sonde.config.sondehub.fimaxdist}, + {"sondehub.fimaxage", 0, &sonde.config.sondehub.fimaxage}, #endif }; +#endif + const int N_CONFIG = (sizeof(config_list) / sizeof(struct st_configitems)); +#if 0 +// old code, no longer needed (in js now) + void addConfigStringEntry(char *ptr, int idx, const char *label, int len, char *field) { sprintf(ptr + strlen(ptr), "%s\n", label, idx, field); @@ -733,11 +841,46 @@ void addConfigInt8List(char *ptr, int idx, const char *label, int8_t *list) { } strcat(ptr, "\"/>\n"); } +#endif const char *createConfigForm() { char *ptr = message; strcpy(ptr, HTMLHEAD); strcat(ptr, ""); HTMLBODY(ptr, "config.html"); + strcat(ptr, "
"); + strcat(ptr, ""); + strcat(ptr, ""); +#if 0 strcat(ptr, ""); for (int i = 0; i < N_CONFIG; i++) { Serial.printf("%d: %s -- %d\n", i, config_list[i].label, strlen(ptr)); @@ -773,6 +916,7 @@ const char *createConfigForm() { } strcat(ptr, "
OptionValue
"); //
"); +#endif HTMLSAVEBUTTON(ptr); HTMLBODYEND(ptr); Serial.printf("Config form: size=%d bytes\n", strlen(message)); @@ -791,8 +935,8 @@ const char *handleConfigPost(AsyncWebServerRequest *request) { } #endif Serial.println("File open for writing."); -#if 1 int params = request->params(); +#if 0 for (int i = 0; i < params; i++) { String param = request->getParam(i)->name(); Serial.println(param.c_str()); @@ -801,13 +945,26 @@ const char *handleConfigPost(AsyncWebServerRequest *request) { for (int i = 0; i < params; i++) { String strlabel = request->getParam(i)->name(); const char *label = strlabel.c_str(); + if(label[strlen(label)-1]=='#') continue; +#if 0 if (strncmp(label, "CFG", 3) != 0) continue; int idx = atoi(label + 3); Serial.printf("idx is %d\n", idx); if (config_list[idx].type == -1) continue; // skip separator entries, should not happen +#endif AsyncWebParameter *value = request->getParam(label, true); if (!value) continue; String strvalue = value->value(); + if( strcmp(label, "button_pin") == 0 || + strcmp(label, "button2_pin") == 0) { + AsyncWebParameter *touch = request->getParam(strlabel+"#", true); + if(touch) { + int i = atoi(strvalue.c_str()); + if(i != -1 && i != 255) i += 128; + strvalue = String(i); + } + } +#if 0 if (config_list[idx].type == -4) { // input button port with "touch" checkbox char tmp[10]; snprintf(tmp, 10, "TO%d", idx); @@ -819,7 +976,10 @@ const char *handleConfigPost(AsyncWebServerRequest *request) { } } Serial.printf("Processing %s=%s\n", config_list[idx].name, strvalue.c_str()); - int wlen = f.printf("%s=%s\n", config_list[idx].name, strvalue.c_str()); +#endif + Serial.printf("Processing %s=%s\n", label, strvalue.c_str()); + //int wlen = f.printf("%s=%s\n", config_list[idx].name, strvalue.c_str()); + int wlen = f.printf("%s=%s\n", label, strvalue.c_str()); Serial.printf("Written bytes: %d\n", wlen); } Serial.printf("Flushing file\n"); @@ -1750,9 +1910,11 @@ void IRAM_ATTR button2ISR() { int getKeyPress() { KeyPress p = button1.pressed; button1.pressed = KP_NONE; +#if 0 int x = digitalRead(button1.pin); Serial.printf("Debug: bdd1=%ld, bdd2=%ld\b", bdd1, bdd2); Serial.printf("button1 press (dbl:%d) (now:%d): %d at %ld (%d)\n", button1.doublepress, x, p, button1.keydownTime, button1.numberKeyPresses); +#endif return p; } @@ -1863,7 +2025,7 @@ void setup() { char buf[12]; // Open serial communications and wait for port to open: - Serial.begin(115200); + Serial.begin(921600 /*115200*/); for (int i = 0; i < 39; i++) { int v = gpio_get_level((gpio_num_t)i); Serial.printf("%d:%d ", i, v); @@ -2242,9 +2404,19 @@ void loopDecoder() { action = (int)(res >> 8); // TODO: update displayed sonde? +#if 0 + static int i=0; + if(i++>20) { + i=0; + rtc_wdt_protect_off(); + rtc_wdt_disable(); + heap_caps_dump(MALLOC_CAP_8BIT); + } +#endif + if (action != ACT_NONE) { int newact = sonde.updateState(action); - Serial.printf("MAIN: loopDecoder: action %s (%d) => %d [current: main=%d, rxtask=%d]\n", action2text(action), action, newact, sonde.currentSonde, rxtask.currentSonde); + Serial.printf("MAIN: loopDecoder: action %02x (%s) => %d [current: main=%d, rxtask=%d]\n", action, action2text(action), newact, sonde.currentSonde, rxtask.currentSonde); action = newact; if (action != 255) { if (action == ACT_DISPLAY_SPECTRUM) { @@ -3304,7 +3476,7 @@ const char *dfmSubtypeStrSH[16] = { NULL, NULL, NULL, NULL, NULL, NULL, }; void sondehub_handle_fimport(WiFiClient *client) { - if (sonde.config.sondehub.fimport[0] != '0') { + if (sonde.config.sondehub.fiactive) { if (shImport == 0) { sondehub_send_fimport(&shclient); } else if (shImport == 1) { @@ -3336,15 +3508,9 @@ void sondehub_send_fimport(WiFiClient * client) { lon = gpsPos.lon; } - char *ptr = strchr(sonde.config.sondehub.fimport, '/'); - shImportInterval = atoi(sonde.config.sondehub.fimport) * 60; - int maxdist = 200; - int maxage = 60; - if (ptr) { - maxdist = atoi(ptr + 1); - ptr = strchr(ptr + 1, '/'); - if (ptr) maxage = atoi(ptr + 1); - } + int maxdist = sonde.config.sondehub.fimaxdist; // km + int maxage = sonde.config.sondehub.fimaxage * 60; // fimaxage is hours, shImportSendRequest uses minutes + int shImportInterval = sonde.config.sondehub.fiinterval * 60; // shImportInterval is in seconds, fiinterval in minutes if ( !isnan(lat) && !isnan(lon) && maxdist > 0 && maxage > 0 && shImportInterval > 0 ) { int res = ShFreqImport::shImportSendRequest(&shclient, lat, lon, maxdist, maxage); if (res == 0) shImport = 1; // Request OK: wait for response @@ -3391,7 +3557,8 @@ 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; - sondehub_send_fimport(client); + if( sonde.config.sondehub.fiactive) + sondehub_send_fimport(client); } } diff --git a/RX_FSK/data/cfg.js b/RX_FSK/data/cfg.js new file mode 100644 index 0000000..f9ff660 --- /dev/null +++ b/RX_FSK/data/cfg.js @@ -0,0 +1,159 @@ +var cfgs = [ +[ "", "Software configuration" ], +[ "wifi", "Wifi mode (0=off, 1=client, 2=AP, 3=auto client/AP on startup" ], +[ "debug", "Debug mode (0/1)" ], +[ "maxsonde", "max. number of QRG entries (must be <100)" ], +[ "screenfile", "Screen config (0=automatic; 1-5=predefined; other=custom)" ], +[ "display", "Display screens (scan, default, ...)" ], +[ "", "Spectrum display settings" ], +[ "spectrum", "Show spectrum on start (-1=no, 0=forever, >0=time [sec])" ], +[ "startfreq", "Start frequency (MHz, default 400)" ], +[ "channelbw", "Bandwidth (kHz)" ], +[ "marker", "Spectrum MHz marker" ], // maybe remove, assume always ==1? +[ "noisefloor", "Spectrum noisefloor" ], +[ "", "Receiver configuration" ], +[ "freqofs", "RX frequency offset (Hz)"], +[ "rs41.agcbw", "RS41 AGC bandwidth"], +[ "rs41.rxbw", "RS41 RX bandwidth"], +[ "rs92.rxbw", "RS92 RX (and AGC) bandwidth"], +[ "rs92.alt2d", "RS92 2D fix default altitude"], +[ "dfm.agcbw", "DFM AGC bandwidth"], +[ "dfm.rxbw", "DFM RX bandwidth"], +[ "m10m20.agcbw", "M10/M20 AGC bandwidth"], +[ "m10m20.rxbw", "M10/M20 RX bandwidth"], +[ "mp3h.agcbw", "MP3H AGC bandwidth"], +[ "mp3h.rxbw", "MP3H RX bandwidth"], +[ "ephftp", "FTP for eph (RS92)"], +[ "", "Data feed configuration"], +[ "call", "Call"], +[ "passcode", "Passcode"], +[ "kisstnc.active", "KISS TNC (port 14590) (needs reboot)"], +[ "kisstnc.idformat", "KISS TNC ID Format"], +[ "axudp.active", "AXUDP active"], +[ "axudp.host", "AXUDP Host"], +[ "axudp.port", "AXUDP Port"], +[ "axudp.idformat", "DFM ID Format"], +[ "axudp.highrate", "Rate limit"], +[ "tcp.active", "APRS TCP active"], +[ "tcp.host", "ARPS TCP Host"], +[ "tcp.port", "APRS TCP Port"], +[ "tcp.idformat", "DFM ID Format"], +[ "tcp.highrate", "Rate limit"], +[ "mqtt.active", "MQTT Active (needs reboot)"], +[ "mqtt.id", "MQTT client ID"], +[ "mqtt.host", "MQTT server hostname"], +[ "mqtt.port", "MQTT Port"], +[ "mqtt.username", "MQTT Username"], +[ "mqtt.password", "MQTT Password"], +[ "mqtt.prefix", "MQTT Prefix"], +[ "", "Hardware configuration (requires reboot)"], +[ "disptype", "Display type (0=OLED/SSD1306, 1=ILI9225, 2=OLED/SH1106, 3=ILI9341, 4=ILI9342)"], +[ "norx_timeout", "No-RX-Timeout in seconds (-1=disabled)"], +[ "oled_sda", "OLED SDA/TFT SDA"], +[ "oled_scl", "OLED SCL/TFT CLK"], +[ "oled_rst", "OLED RST/TFT RST (needs reboot)"], +[ "tft_rs", "TFT RS"], +[ "tft_cs", "TFT CS"], +[ "tft_orient", "TFT orientation (0/1/2/3), OLED flip: 3"], +[ "tft_spifreq", "TFT SPI speed"], +[ "button_pin", "Button input port"], +[ "button2_pin", "Button 2 input port"], +[ "button2_axp", "Use AXP192 PWR as Button 2"], +[ "touch_thresh", "Touch button threshold
(0 for calib mode)"], +[ "power_pout", "Power control port"], +[ "led_pout", "LED output port"], +[ "gps_rxd", "GPS RXD pin (-1 to disable)"], +[ "gps_txd", "GPS TXD pin (not really needed)"], +[ "batt_adc", "Battery measurement pin"], +[ "sx1278_ss", "SX1278 SS"], +[ "sx1278_miso", "SX1278 MISO"], +[ "sx1278_mosi", "SX1278 MOSI"], +[ "sx1278_sck", "SX1278 SCK"], +[ "mdnsname", "mDNS name"], +[ "", "SondeHub settings"], +[ "sondehub.active", "SondeHub reporting (0=disabled, 1=active)"], +[ "sondehub.chase", "SondeHub location reporting (0=off, 1=fixed, 2=chase/GPS, 3=auto)"], +[ "sondehub.host", "SondeHub host (DO NOT CHANGE)"], +[ "sondehub.callsign", "Callsign"], +[ "sondehub.lat", "Latitude (optional, required to show station on SondeHub Tracker)"], +[ "sondehub.lon", "Longitude (optional, required to show station on SondeHub Tracker)"], +[ "sondehub.alt", "Altitude (optional, visible on SondeHub tracker)"], +[ "sondehub.antenna", "Antenna (optional, visisble on SondeHub tracker)"], +[ "sondehub.email", "SondeHub email (optional, only used to contact in case of upload errors)"], +[ "", "SondeHub frequency import" ],] +[ "sondehub.fiactive", "SondeHub frequency import active (0=disabled, 1=active)" ], +[ "sondehub.fiinterval", "Import frequency (minutes, ≥5)" ], +[ "sondehub.fimaxdist", "Import maximum distance (km, ≤500)" ], +[ "sondehub.fimaxage", "Import maximum age (hours, ≤24" ], +]; + +function mkcfg(id, key, label, value) { + var s = "" + label + "\n"; + return s; +} +function mkcfgbtn(id, key, label, value) { + var touch = ""; + var v = value; + if(v != -1 && (v&128)) { + touch = " checked"; + v = v & 127; + } + var s = "" + label + ""; + s += " Touch\n"; + return s; +} + +function mksep(id,label) { + return ""+label+"\n"; +} +function rowdisp(id,disp) { + var matches = document.querySelectorAll("tr."+id); + matches.forEach(function(e) { if(disp) e.hidden=true; else e.removeAttribute('hidden');}); + hid=id; nid="N"+id; + if(!disp) { hid=nid; nid=id; } + document.querySelector("span."+hid).hidden=true; + document.querySelector("span."+nid).removeAttribute('hidden'); +} +function configTable() { + // iterate over cfgs + var tab = "\n"; + var id=0; + for(i=0; i=config.maxsonde) rxtask.currentSonde=0; } } - Serial.printf("nextRxSonde: %d\n", rxtask.currentSonde); + //Serial.printf("nextRxSonde: %d\n", rxtask.currentSonde); } void Sonde::nextRxFreq(int addkhz) { // last entry is for the variable frequency @@ -409,7 +409,7 @@ void Sonde::setup() { } // update receiver config - Serial.print("Sonde.setup() on sonde index "); + Serial.print("Sonde::setup() start on index "); Serial.println(rxtask.currentSonde); switch(sondeList[rxtask.currentSonde].type) { case STYPE_RS41: @@ -433,7 +433,7 @@ void Sonde::setup() { int freq = (int)sx1278.getFrequency(); int afcbw = (int)sx1278.getAFCBandwidth(); int rxbw = (int)sx1278.getRxBandwidth(); - Serial.printf("Sonde.setup(): Freq %d, AFC BW: %d, RX BW: %d\n", freq, afcbw, rxbw); + Serial.printf("Sonde::setup() done: Type %s Freq %f, AFC BW: %d, RX BW: %d\n", sondeTypeStr[sondeList[rxtask.currentSonde].type], 0.000001*freq, afcbw, rxbw); // reset rxtimer / norxtimer state sonde.sondeList[sonde.currentSonde].lastState = -1; @@ -472,7 +472,7 @@ void Sonde::receive() { } } else { // RX not ok if(res==RX_ERROR) flashLed(100); - Serial.printf("RX result %d (%s), laststate was %d\n", res, (res<=3)?RXstr[res]:"?", si->lastState); + //Serial.printf("Sonde::receive(): result %d (%s), laststate was %d\n", res, (res<=3)?RXstr[res]:"?", si->lastState); if(si->lastState != 0) { si->norxStart = millis(); si->lastState = 0; @@ -509,8 +509,8 @@ void Sonde::receive() { rxtask.activate = ACT_SONDE(rxtask.currentSonde); } } + Serial.printf("Sonde:receive(): result %d (%s), event %02x => action %02x\n", res, (res<=3)?RXstr[res]:"?", event, action); res = (action<<8) | (res&0xff); - Serial.printf("Sonde:receive(): Event %02x: action %02x, res %02x => %04x\n", event, action, res&0xff, res); // let waitRXcomplete resume... rxtask.receiveResult = res; } @@ -574,22 +574,22 @@ uint8_t Sonde::timeoutEvent(SondeInfo *si) { now, si->norxStart, disp.layout->timeouts[2], si->lastState); #endif if(disp.layout->timeouts[0]>=0 && now - si->viewStart >= disp.layout->timeouts[0]) { - Serial.println("Sonde.timeoutEvent: View"); + Serial.println("Sonde::timeoutEvent: View"); return EVT_VIEWTO; } if(si->lastState==1 && disp.layout->timeouts[1]>=0 && now - si->rxStart >= disp.layout->timeouts[1]) { - Serial.println("Sonde.timeoutEvent: RX"); + Serial.println("Sonde::timeoutEvent: RX"); return EVT_RXTO; } if(si->lastState==0 && disp.layout->timeouts[2]>=0 && now - si->norxStart >= disp.layout->timeouts[2]) { - Serial.println("Sonde.timeoutEvent: NORX"); + Serial.println("Sonde::timeoutEvent: NORX"); return EVT_NORXTO; } return 0; } uint8_t Sonde::updateState(uint8_t event) { - Serial.printf("Sonde::updateState for event %d\n", event); + //Serial.printf("Sonde::updateState for event %02x\n", event); // No change if(event==ACT_NONE) return 0xFF; diff --git a/RX_FSK/src/Sonde.h b/RX_FSK/src/Sonde.h index e42b70e..68ad95b 100644 --- a/RX_FSK/src/Sonde.h +++ b/RX_FSK/src/Sonde.h @@ -196,7 +196,10 @@ struct st_sondehub { char alt[20]; char antenna[64]; char email[64]; - char fimport[20]; + int fiactive; + int fiinterval; + int fimaxdist; + int fimaxage; }; // to be extended @@ -261,7 +264,7 @@ typedef struct st_rdzconfig { struct st_configitems { const char *name; - const char *label; + // const char *label; => now handled in JS int type; // 0: numeric; i>0 string of length i; -1: separator; -2: type selector void *data; }; diff --git a/RX_FSK/version.h b/RX_FSK/version.h index 68ea10f..3816c3d 100644 --- a/RX_FSK/version.h +++ b/RX_FSK/version.h @@ -1,4 +1,4 @@ const char *version_name = "rdzTTGOsonde"; -const char *version_id = "devel20210917"; +const char *version_id = "devel20210918"; const int SPIFFS_MAJOR=2; const int SPIFFS_MINOR=16;
OptionValue