"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,
// 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:
crashed = tcrashed;
logger = LogNT::getInstance();
+ #if TELEM_ENABLED == 1
Telemetry::init();
+ #endif
SkinFactory::InitSkin(0);
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);
}
}
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)
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);
}
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);
}
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
#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:
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
{
rolloveroffset = startoffset;
//logger->debug("SSO", "Rollover detected, saving rolloveroffset at {}", rolloveroffset);
- TELEM(16, rolloveroffset);
+ TELEM(9, rolloveroffset);
startoffset += curreftime - lastrefvideotime;
}
// curreftime, startoffset, rolloveroffset, lastrefaudiotime);
rolloveroffset = 0;
- TELEM(16, rolloveroffset);
+ TELEM(9, rolloveroffset);
}
else
{
// 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)
}
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;