From 8e6d953e60ab51f8709ae6974f4ff25a8ac41246 Mon Sep 17 00:00:00 2001 From: "Hansi, dl9rdz" Date: Fri, 5 Feb 2021 16:51:26 +0100 Subject: [PATCH] rs92 eph: configurable ftp site --- RX_FSK/RX_FSK.ino | 3 ++- RX_FSK/data/config.txt | 8 ++++++ RX_FSK/version.h | 4 +-- libraries/SondeLib/Sonde.cpp | 3 +++ libraries/SondeLib/Sonde.h | 1 + libraries/SondeLib/geteph.cpp | 47 ++++++++++++++++++----------------- 6 files changed, 40 insertions(+), 26 deletions(-) diff --git a/RX_FSK/RX_FSK.ino b/RX_FSK/RX_FSK.ino index b6a4394..5295244 100644 --- a/RX_FSK/RX_FSK.ino +++ b/RX_FSK/RX_FSK.ino @@ -498,6 +498,7 @@ struct st_configitems config_list[] = { {"dfm.rxbw", "DFM RX bandwidth", 0, &sonde.config.dfm.rxbw}, {"m10m20.agcbw", "M10/M20 AGC bandwidth", 0, &sonde.config.m10m20.agcbw}, {"m10m20.rxbw", "M10/M20 RX bandwidth", 0, &sonde.config.m10m20.rxbw}, + {"ephftp", "FTP for eph (RS92)", 39, &sonde.config.ephftp}, {"", "Data feed configuration", -5, NULL}, /* APRS settings */ {"call", "Call", 8, sonde.config.call}, @@ -1140,7 +1141,7 @@ void unkHandler(T nmea) { } } -#define DEBUG_GPS 1 +#define DEBUG_GPS 0 static bool gpsCourseOld; static int lastCourse; void gpsTask(void *parameter) { diff --git a/RX_FSK/data/config.txt b/RX_FSK/data/config.txt index 1c212aa..4e8b2e8 100644 --- a/RX_FSK/data/config.txt +++ b/RX_FSK/data/config.txt @@ -78,6 +78,14 @@ rs92.alt2d=480 dfm.agcbw=20800 dfm.rxbw=10400 #-------------------------------# +# ftp server for RINEX data (for RS92) +# YYYY/DDD/brdcDDD0.YYn.gz is appended +# s1: igs.bkg.bund.de/IGS/BRDC/ +# s2: www.ngs.noaa.gov/cors/rinex/ +#-------------------------------# +ephftp=www.ngs.noaa.gov/cors/rinex/ +#ephftp=igs.bkg.bund.de/IGS/BRDC/ +#-------------------------------# # axudp for sending to aprsmap #-------------------------------# # local use only, do not feed to public services diff --git a/RX_FSK/version.h b/RX_FSK/version.h index fa26990..45cd53b 100644 --- a/RX_FSK/version.h +++ b/RX_FSK/version.h @@ -1,4 +1,4 @@ const char *version_name = "rdzTTGOsonde"; -const char *version_id = "devel20210126"; +const char *version_id = "devel20210205"; const int SPIFFS_MAJOR=2; -const int SPIFFS_MINOR=8; +const int SPIFFS_MINOR=9; diff --git a/libraries/SondeLib/Sonde.cpp b/libraries/SondeLib/Sonde.cpp index bf1ca9e..6f16a14 100644 --- a/libraries/SondeLib/Sonde.cpp +++ b/libraries/SondeLib/Sonde.cpp @@ -204,6 +204,7 @@ void Sonde::defaultConfig() { config.tcpfeed.highrate = 10; config.tcpfeed.idformat = ID_DFMDXL; config.kisstnc.active = 0; + strcpy(config.ephftp,"igs.bkg.bund.de/IGS/BRDC/"); config.mqtt.active = 0; strcpy(config.mqtt.id, "rdz_sonde_server"); @@ -312,6 +313,8 @@ void Sonde::setConfig(const char *cfg) { config.dfm.rxbw = atoi(val); } else if(strcmp(cfg,"rs92.alt2d")==0) { config.rs92.alt2d= atoi(val); + } else if(strcmp(cfg,"ephftp")==0) { + strncpy(config.ephftp, val, 40); } else if(strcmp(cfg,"kisstnc.active")==0) { config.kisstnc.active = atoi(val); } else if(strcmp(cfg,"kisstnc.idformat")==0) { diff --git a/libraries/SondeLib/Sonde.h b/libraries/SondeLib/Sonde.h index 89b0bf0..189df28 100644 --- a/libraries/SondeLib/Sonde.h +++ b/libraries/SondeLib/Sonde.h @@ -209,6 +209,7 @@ typedef struct st_rdzconfig { struct st_rs92config rs92; struct st_dfmconfig dfm; struct st_m10m20config m10m20; + char ephftp[40]; // data feed configuration // for now, one feed for each type is enough, but might get extended to more? char call[10]; // APRS callsign diff --git a/libraries/SondeLib/geteph.cpp b/libraries/SondeLib/geteph.cpp index 9f86273..a898a55 100644 --- a/libraries/SondeLib/geteph.cpp +++ b/libraries/SondeLib/geteph.cpp @@ -6,11 +6,11 @@ #include #include #include "Display.h" - +#include "Sonde.h" extern WiFiClient client; -static const char *ftpserver = "www.ngs.noaa.gov"; +//static const char *ftpserver = "www.ngs.noaa.gov"; char outbuf[128]; uint8_t getreply() { @@ -72,31 +72,32 @@ void geteph() { Serial.printf("now: %s, existing: %s => updating\n", nowstr, tsstr); } status.close(); - disp.rdis->clear(); - disp.rdis->setFont(FONT_SMALL); - disp.rdis->drawString(0, 0, "FTP ngs.noaa.gov"); - // fetch rinex from server File fh = SPIFFS.open("/brdc.gz","w"); if(!fh) { Serial.println("cannot open file\n"); return; } - char buf[252]; - snprintf(buf, 128, "/cors/rinex/%04d/%03d/brdc%03d0.%02dn.gz", year, day, day, year-2000); + char host[252]; + strcpy(host, sonde.config.ephftp); + char *buf = strchr(host, '/'); + if(!buf) { Serial.println("Invalid FTP host config"); return; } + *buf = 0; + buf++; + uint8_t dispw, disph, dispxs, dispys; + disp.rdis->getDispSize(&disph, &dispw, &dispxs, &dispys); + disp.rdis->clear(); + disp.rdis->setFont(FONT_SMALL); + disp.rdis->drawString(0, 0, host); + // fetch rinex from server + char *ptr = buf + strlen(buf); + snprintf(ptr, 128, "%04d/%03d/brdc%03d0.%02dn.gz", year, day, day, year-2000); Serial.println("running geteph\n"); - disp.rdis->drawString(0, 1, buf+21); + disp.rdis->drawString(0, 1*dispys, ptr+9); - if(!client.connect(ftpserver, 21)) { - Serial.println("FTP connection to www.ngs.noaa.gov failed"); + if(!client.connect(host, 21)) { + Serial.printf("FTP connection to %s failed\n", host); return; } -#if 0 - while(!client.available()) delay(1); - while(client.available()) { - String s = client.readStringUntil('\n'); - Serial.println(s); - } -#endif if(getreply()>='4') { Serial.println("connected failed"); return; } client.print("USER anonymous\r\n"); if(getreply()>='4') { Serial.println("USER failed"); return; } @@ -121,8 +122,8 @@ void geteph() { } uint16_t port = (array_pasv[4]<<8) | (array_pasv[5]&0xff); WiFiClient dclient; - Serial.printf("connecting to %s:%d\n", ftpserver,port); - dclient.connect(ftpserver, port); + Serial.printf("connecting to %s:%d\n", host, port); + dclient.connect(host, port); if(!dclient) { Serial.println("data connection failed"); return; @@ -149,9 +150,9 @@ void geteph() { fh.close(); snprintf(buf, 16, "Fetched %d B ",len); buf[16]=0; - disp.rdis->drawString(0,2,buf); + disp.rdis->drawString(0,2*dispys,buf); - disp.rdis->drawString(0,4,"Decompressing..."); + disp.rdis->drawString(0,4*dispys,"Decompressing..."); // decompression tinfl_decompressor *decomp = (tinfl_decompressor *)malloc(sizeof(tinfl_decompressor)); tinfl_init(decomp); @@ -219,7 +220,7 @@ void geteph() { status.close(); snprintf(buf, 16, "Done: %d B ",total); buf[16]=0; - disp.rdis->drawString(0,5,buf); + disp.rdis->drawString(0,5*dispys,buf); delay(1000); free(obuf);