]> git.vomp.tv Git - vompclient.git/commitdiff
Tweaks to telemetry. Load IP/port from config
authorChris Tallon <chris@vomp.tv>
Thu, 23 May 2024 15:17:34 +0000 (15:17 +0000)
committerChris Tallon <chris@vomp.tv>
Thu, 23 May 2024 15:17:34 +0000 (15:17 +0000)
src/config.json.sample
src/control.cc
src/stream.cc
src/telem.cc
src/telem.h
src/videoomx.cc

index e0f9c2725a9ee60b59bbf73b41fe28ab2040ea53..bba00fcb721be964d721afc80fd842bb5ac30146 100644 (file)
     "prefer-ipv": 6
   },
 
+  "telemetry":
+  {
+    /* Enable / disable telemetry with define in telem.h */
+    "target_ip": "192.0.2.1",
+    "target_port": 7777
+  },
+
   "input":
   {
     "mod_cec_enabled": true,
@@ -60,7 +67,7 @@
 
     // Use these two options:
 
-        "lirc_ip": "192.0.2.0",  /* Numeric IPv4 or IPv6 */
+        "lirc_ip": "192.0.2.1",  /* Numeric IPv4 or IPv6 */
         "lirc_port": 8765,       /* except this, this has a default */
 
     // Or this one:
index 4a55880f9922e0d2f95d81df331ba95e9cdbcdf0..5fe49040fa9677c49172a585254f2d5aa0dde28e 100644 (file)
@@ -115,7 +115,9 @@ bool Control::init(bool tcrashed)
   crashed = tcrashed;
   logger = LogNT::getInstance();
 
+  #if TELEM_ENABLED == 1
   Telemetry::init();
+  #endif
 
   SkinFactory::InitSkin(0);
 
index 9af19c734917801054f8c870c8db5512b9451eef..fc57a0a9dc6391d6bdd0b3d0ef75912669780dd2 100644 (file)
@@ -109,25 +109,26 @@ int Stream::put(const u1* inbuf, int len, u1 type, unsigned int index)
         hasdts = true;
       }
 
-      TELEM((localWhich ? 11 : 4), newPacket.pts);
-      TELEM((localWhich ? 12 : 5), newPacket.dts);
+      TELEM((localWhich ? 10 : 4), newPacket.pts);
+      TELEM((localWhich ? 11 : 5), newPacket.dts);
 
       //ok we have the pts now convert it to a continously time code in 100ns units
       if (hasdts && draintarget->dtsTimefix()) newPacket.presentation_time = static_cast<u8>(newPacket.dts * 10000LL / 90LL); // Windows only
       else                                     newPacket.presentation_time = static_cast<u8>(newPacket.pts * 10000LL / 90LL);
 
-      TELEM((localWhich ? 13 : 6), newPacket.presentation_time);
+      TELEM((localWhich ? 12 : 6), newPacket.presentation_time);
 
       // now PTS & DTS are original, presentation_time is OMX ticks. If it's rolled, it's rolled!
 
       //newPacket.presentation_time-=draintarget->SetStartOffset(static_cast<u8>(newPacket.pts*10000LL/90LL),&newPacket.disconti);
       //newPacket.presentation_time -= draintarget->SetStartOffset(static_cast<u8>(newPacket.pts * 10000LL / 90LL), &newPacket.disconti);
       long long returnedStartOffset = draintarget->SetStartOffset(static_cast<u8>(newPacket.pts * 10000LL / 90LL), &newPacket.disconti);
+      TELEM((localWhich ? 13 : 7), returnedStartOffset);
+
       newPacket.presentation_time -= returnedStartOffset;
       //LogNT::getInstance()->debug("MP", "draintarget {} PTSmod {} disconti {} rso: {}", (void*)draintarget, newPacket.presentation_time, newPacket.disconti, returnedStartOffset);
 
-      TELEM((localWhich ? 14 : 7), newPacket.presentation_time);
-      TELEM((localWhich ? 15 : 8), returnedStartOffset);
+      TELEM((localWhich ? 14 : 8), newPacket.presentation_time);
     }
   }
 
index 75fb98fa20112581ad5b4bf67522548e0e7c55b3..70cb3741efed35eda73eb906169d85260ee98f58 100644 (file)
     along with VOMP.  If not, see <https://www.gnu.org/licenses/>.
 */
 
+#include "telem.h"
+
+#if TELEM_ENABLED == 1
+
+
 #include <string.h>
 #include <stdlib.h>
 
+#include "config.h"
 #include "log.h"
 
-#include "telem.h"
 
 UDP4 Telemetry::udp;
+std::string Telemetry::telemReceiverIP;
+const char* Telemetry::ip;
+i4 Telemetry::telemPort;
 
 void Telemetry::init()
 {
-#if TELEM_ENABLED
   LogNT::getInstance()->debug("Telem", "Init");
-  udp.init(0);
 
-  // TODO load target IP / port from config
+  Config::getInstance()->getString("telemetry", "target_ip", telemReceiverIP);
+  ip = telemReceiverIP.c_str();
+  telemPort = 7777;
+  Config::getInstance()->getInt("telemetry", "target_port", telemPort);
 
-#endif
+  udp.init(0);
 }
 
 void Telemetry::message(u4 messageNumber, i4 data)
@@ -42,7 +51,7 @@ void Telemetry::message(u4 messageNumber, i4 data)
   char* buffer;
   asprintf(&buffer, "%c%c%c%c%i", 1, 1, 1, 1, data);
   memcpy(buffer, (const void*)&messageNumber, 4);
-  udp.send("", 7777, buffer, strlen(&buffer[4])+4);
+  udp.send(ip, telemPort, buffer, strlen(&buffer[4])+4);
   free(buffer);
 }
 
@@ -51,7 +60,7 @@ void Telemetry::message(u4 messageNumber, i8 data)
   char* buffer;
   asprintf(&buffer, "%c%c%c%c%lli", 1, 1, 1, 1, data);
   memcpy(buffer, (const void*)&messageNumber, 4);
-  udp.send("", 7777, buffer, strlen(&buffer[4])+4);
+  udp.send(ip, telemPort, buffer, strlen(&buffer[4])+4);
   free(buffer);
 }
 
@@ -60,7 +69,8 @@ void Telemetry::message(u4 messageNumber, u8 data)
   char* buffer;
   asprintf(&buffer, "%c%c%c%c%llu", 1, 1, 1, 1, data);
   memcpy(buffer, (const void*)&messageNumber, 4);
-  udp.send("", 7777, buffer, strlen(&buffer[4])+4);
+  udp.send(ip, telemPort, buffer, strlen(&buffer[4])+4);
   free(buffer);
 }
 
+#endif
index a6b605de47314a218db77ad3cd48fadce94e56fa..c3e996ac7bed958da7a8796263431167929aa62a 100644 (file)
 #ifndef TELEM_H
 #define TELEM_H
 
-#define TELEM_ENABLED 1
+// Master telemetry enable. If 0 the code isn't included and all
+// calls to TELEM() will be deleted by the preprocessor
+#define TELEM_ENABLED 0
 
-#include "defines.h"
+#if TELEM_ENABLED == 0
+  #define TELEM(x, y)
+#else
 
+#include <string>
+#include "defines.h"
 #include "udp4.h"
 
-
 class Telemetry
 {
   public:
@@ -37,14 +42,12 @@ class Telemetry
 
   private:
     static UDP4 udp;
+    static std::string telemReceiverIP;
+    static const char* ip;
+    static i4 telemPort;
 };
 
-#if TELEM_ENABLED
   #define TELEM(x, y) Telemetry::message(x, y)
-#else
-  #define TELEM(x, y)
 #endif
 
-
-
 #endif
index 8c857072ee7761df580fdd37586c4feb74c04fda..b83a1554781233fd48626014595d5e07bf0fcb6f 100644 (file)
@@ -2798,7 +2798,7 @@ long long VideoOMX::SetStartOffset(long long curreftime, bool* rsync)
         {
           rolloveroffset = startoffset;
           //logger->debug("SSO", "Rollover detected, saving rolloveroffset at {}", rolloveroffset);
-          TELEM(16, rolloveroffset);
+          TELEM(9, rolloveroffset);
 
           startoffset += curreftime - lastrefvideotime;
         }
@@ -2845,7 +2845,7 @@ long long VideoOMX::SetStartAudioOffset(long long curreftime, bool* rsync)
           //    curreftime, startoffset, rolloveroffset, lastrefaudiotime);
 
           rolloveroffset = 0;
-          TELEM(16, rolloveroffset);
+          TELEM(9, rolloveroffset);
         }
         else
         {
@@ -3217,7 +3217,7 @@ u4 VideoOMX::DeliverMediaPacket(MediaPacket packet, const u1* buffer, u4* sample
   //   logger->debug(TAG, "DMP mark 1");
   //logger->debug(TAG, "DeliverMediaPacketOMX time {}", packet.presentation_time);
 
-  TELEM(9, packet.presentation_time);
+  TELEM(15, packet.presentation_time);
 
   /*First Check, if we have an video sample*/
   if (iframemode)
@@ -3337,7 +3337,7 @@ u4 VideoOMX::DeliverMediaPacket(MediaPacket packet, const u1* buffer, u4* sample
       }
 
       lastreftimeOMX = packet.presentation_time;
-      TELEM(10, lastreftimeOMX);
+      TELEM(16, lastreftimeOMX);
       // logger->debug(TAG, "Time code {} pts {}", lastreftimeOMX,packet.pts);
       lastreftimePTS = packet.pts;
       cur_input_buf_omx->nTimeStamp = intToOMXTicks(lastreftimeOMX / 10LL); // the clock component is faulty;