From dd3d428fc88e4812e70aa2f59e5cfea722ce5d06 Mon Sep 17 00:00:00 2001 From: Tadeusz Magura-Witkowski Date: Fri, 28 Feb 2020 15:29:25 +0100 Subject: [PATCH] KML live output --- RX_FSK/RX_FSK.ino | 50 ++++++++++++++++++++++++++++++++++++++ libraries/SondeLib/Sonde.h | 1 + 2 files changed, 51 insertions(+) diff --git a/RX_FSK/RX_FSK.ino b/RX_FSK/RX_FSK.ino index 520110a..c9bfa9f 100644 --- a/RX_FSK/RX_FSK.ino +++ b/RX_FSK/RX_FSK.ino @@ -869,6 +869,48 @@ const char *handleUpdatePost(AsyncWebServerRequest *request) { return ""; } +const char *createKMLLive(const char *myIP) { + char *ptr = message; + + strcpy(ptr, "loads dynamic.kmlhttp://"); + strcat(ptr, myIP); + strcat(ptr, "/dynamic.kmlonInterval10"); + + return message; +} + +void addSondeStatusKML(char *ptr, int i) +{ + SondeInfo *s = &sonde.sondeList[i]; + + if (!s->validID) + { + return; + } + + sprintf(ptr + strlen(ptr), "%s%.6f,%.6f,%.0f%3.3f MHz, Type: %s, h=%.0fm", + s->id, s->id, + s->lon, s->lat, s->alt, + s->freq, sondeTypeStr[s->type], s->alt); +} + +const char *createKMLDynamic() { + char *ptr = message; + + strcpy(ptr, ""); + + for (int i = 0; i < sonde.nSonde; i++) { + int snum = (i + sonde.currentSonde) % sonde.nSonde; + if (sonde.sondeList[snum].active) { + addSondeStatusKML(ptr, snum); + } + } + + strcat(ptr, ""); + + return message; +} + const char *sendGPX(AsyncWebServerRequest * request) { Serial.println("\n\n\n********GPX request\n\n"); @@ -992,6 +1034,14 @@ void SetupAsyncServer() { request->send(SPIFFS, "/index.html", String(), false, processor); }); + server.on("/live.kml", HTTP_GET, [](AsyncWebServerRequest * request) { + request->send(200, "application/vnd.google-earth.kml+xml", createKMLLive(sonde.myIP)); + }); + + server.on("/dynamic.kml", HTTP_GET, [](AsyncWebServerRequest * request) { + request->send(200, "application/vnd.google-earth.kml+xml", createKMLDynamic()); + }); + server.onNotFound([](AsyncWebServerRequest * request) { if (request->method() == HTTP_OPTIONS) { request->send(200); diff --git a/libraries/SondeLib/Sonde.h b/libraries/SondeLib/Sonde.h index 189df28..be2fd4e 100644 --- a/libraries/SondeLib/Sonde.h +++ b/libraries/SondeLib/Sonde.h @@ -239,6 +239,7 @@ public: // moved to heap, saving space in .bss //SondeInfo sondeList[MAXSONDE+1]; SondeInfo *sondeList; + char myIP[17]; // 17 - to fit full IPv4 IP + null byte Sonde(); void defaultConfig();