summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorFrank Schmirler <vdr@schmirler.de>2011-07-06 09:13:50 +0200
committerFrank Schmirler <vdr@schmirler.de>2011-07-06 09:13:50 +0200
commit2c8377d42a9ebd7c399322968d2c78fb377f55b0 (patch)
treecf94f08eac64285d908e35b9b4d0dcdb09e83e74 /client
parent673fbae2e258102c7bd2a7bee554f75eae0e332b (diff)
downloadvdr-plugin-streamdev-2c8377d42a9ebd7c399322968d2c78fb377f55b0.tar.gz
vdr-plugin-streamdev-2c8377d42a9ebd7c399322968d2c78fb377f55b0.tar.bz2
added support for VDR 1.7.19 SignalStrength/SignalQuality
Diffstat (limited to 'client')
-rw-r--r--client/device.c15
-rw-r--r--client/device.h2
-rw-r--r--client/socket.c26
-rw-r--r--client/socket.h4
4 files changed, 47 insertions, 0 deletions
diff --git a/client/device.c b/client/device.c
index 7f39bbe..2935db2 100644
--- a/client/device.c
+++ b/client/device.c
@@ -324,3 +324,18 @@ void cStreamdevDevice::UpdatePriority(void) {
m_Device->Unlock();
}
}
+
+int cStreamdevDevice::SignalStrength(void) const {
+ int strength = -1;
+ if (ClientSocket.DataSocket(siLive) != NULL)
+ ClientSocket.GetSignal(&strength, NULL);
+ return strength;
+}
+
+int cStreamdevDevice::SignalQuality(void) const {
+ int quality = -1;
+ if (ClientSocket.DataSocket(siLive) != NULL)
+ ClientSocket.GetSignal(NULL, &quality);
+ return quality;
+}
+
diff --git a/client/device.h b/client/device.h
index 5eb9e53..186ae89 100644
--- a/client/device.h
+++ b/client/device.h
@@ -59,6 +59,8 @@ public:
virtual int NumProvidedSystems(void) const;
#endif
virtual bool IsTunedToTransponder(const cChannel *Channel);
+ virtual int SignalStrength(void) const;
+ virtual int SignalQuality(void) const;
static void UpdatePriority(void);
static bool Init(void);
diff --git a/client/socket.c b/client/socket.c
index 3e6dec8..2d5103b 100644
--- a/client/socket.c
+++ b/client/socket.c
@@ -21,6 +21,9 @@ cClientSocket::cClientSocket(void)
{
memset(m_DataSockets, 0, sizeof(cTBSocket*) * si_Count);
m_Prio = false;
+ m_LastSignalUpdate = 0;
+ m_LastSignalStrength = -1;
+ m_LastSignalQuality = -1;
Reset();
}
@@ -255,6 +258,8 @@ bool cClientSocket::SetChannelDevice(const cChannel *Channel) {
RemoteIp().c_str(), RemotePort(), Channel->Name());
return false;
}
+
+ m_LastSignalUpdate = 0;
return true;
}
@@ -273,6 +278,27 @@ bool cClientSocket::SetPriority(int Priority) {
return true;
}
+bool cClientSocket::GetSignal(int *SignalStrength, int *SignalQuality) {
+ if (!CheckConnection()) return -1;
+
+ CMD_LOCK;
+
+ if (m_LastSignalUpdate != time(NULL)) {
+ std::string buffer;
+ if (!Command("SGNL") || !Expect(220, &buffer)
+ || sscanf(buffer.c_str(), "%*d %*d %d:%d", &m_LastSignalStrength, &m_LastSignalQuality) != 2) {
+ m_LastSignalStrength = -1;
+ m_LastSignalQuality = -1;
+ }
+ m_LastSignalUpdate = time(NULL);
+ }
+ if (SignalStrength)
+ *SignalStrength = m_LastSignalStrength;
+ if (SignalQuality)
+ *SignalQuality = m_LastSignalQuality;
+ return 0;
+}
+
bool cClientSocket::SetPid(int Pid, bool On) {
if (!CheckConnection()) return false;
diff --git a/client/socket.h b/client/socket.h
index 1197678..42d7574 100644
--- a/client/socket.h
+++ b/client/socket.h
@@ -22,6 +22,9 @@ private:
char m_Buffer[BUFSIZ + 1]; // various uses
bool m_Prio; // server supports command PRIO
+ time_t m_LastSignalUpdate;
+ int m_LastSignalStrength;
+ int m_LastSignalQuality;
protected:
/* Send Command, and return true if the command results in Expected.
Returns false on failure, setting errno appropriately if it has been
@@ -50,6 +53,7 @@ public:
bool SetPriority(int Priority);
bool SetPid(int Pid, bool On);
bool SetFilter(ushort Pid, uchar Tid, uchar Mask, bool On);
+ bool GetSignal(int *SignalStrength, int *SignalQuality);
bool CloseDvr(void);
bool SuspendServer(void);
bool Quit(void);