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();