From 0de0be5ae4c5f9e95211eff334ec0363b9b8cfb1 Mon Sep 17 00:00:00 2001 From: Rolf Ahrenberg Date: Mon, 3 Nov 2014 21:54:19 +0200 Subject: [PATCH] Added a preliminary support for Fritz!WLAN Repeater DVB-C (Thanks to Christian Wick). --- HISTORY | 2 ++ server.c | 2 +- server.h | 1 + tuner.c | 8 ++++++++ tuner.h | 3 +++ 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/HISTORY b/HISTORY index d731dc7..822a64e 100644 --- a/HISTORY +++ b/HISTORY @@ -70,3 +70,5 @@ VDR Plugin 'satip' Revision History - Fixed the cable only device detection. - Added support for blacklisted sources. - Fixed server reuse for active transponders. +- Added a preliminary support for Fritz!WLAN Repeater DVB-C + (Thanks to Christian Wick). diff --git a/server.c b/server.c index 22c2815..6fdf271 100644 --- a/server.c +++ b/server.c @@ -37,7 +37,7 @@ cSatipServer::cSatipServer(const char *addressP, const char *descriptionP, const quirkM |= eSatipQuirkSessionId; // These devices contain a play (add/delpids) parameter bug: if (strstr(*descriptionM, "fritzdvbc")) // Fritz!WLAN Repeater DVB-C - quirkM |= eSatipQuirkPlayPids; + quirkM |= eSatipQuirkPlayPids | eSatipQuirkForceLock; } char *s, *p = strdup(*modelM); char *r = strtok_r(p, ",", &s); diff --git a/server.h b/server.h index 90191a8..6845c55 100644 --- a/server.h +++ b/server.h @@ -35,6 +35,7 @@ public: eSatipQuirkNone = 0x00, eSatipQuirkSessionId = 0x01, eSatipQuirkPlayPids = 0x02, + eSatipQuirkForceLock = 0x04, eSatipQuirkMask = 0x0F }; enum eSatipModelType { diff --git a/tuner.c b/tuner.c index 050a45d..0cf3ae1 100644 --- a/tuner.c +++ b/tuner.c @@ -119,6 +119,12 @@ void cSatipTuner::Action(void) timeout.Set(eReConnectTimeoutMs); } } + // Quirk for devices without valid reception data + if (currentServerM && currentServerM->Quirk(cSatipServer::eSatipQuirkForceLock)) { + hasLockM = true; + signalStrengthM = eDefaultSignalStrength; + signalQualityM = eDefaultSignalQuality; + } // Read data if (rtpSocketM && rtpSocketM->IsOpen()) length = rtpSocketM->ReadVideo(packetBufferM, size); @@ -464,6 +470,8 @@ bool cSatipTuner::UpdatePids(bool forceP) uri = cString::sprintf("%s?pids=", *uri); for (int i = 0; i < pidsM.Size(); ++i) uri = cString::sprintf("%s%d%s", *uri, pidsM[i], (i == (pidsM.Size() - 1)) ? "" : ","); + if (currentServerM && currentServerM->Quirk(cSatipServer::eSatipQuirkPlayPids)) + uri = cString::sprintf("%s,%d", *uri, eDummyPid); } } else { diff --git a/tuner.h b/tuner.h index 5649f96..83992b1 100644 --- a/tuner.h +++ b/tuner.h @@ -26,6 +26,9 @@ class cSatipTuner : public cThread, public cSatipTunerStatistics { private: enum { + eDummyPid = 100, + eDefaultSignalStrength = 15, + eDefaultSignalQuality = 224, eConnectTimeoutMs = 1500, // in milliseconds ePidUpdateIntervalMs = 250, // in milliseconds eReConnectTimeoutMs = 5000, // in milliseconds