mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Added a Status parameter to the interface of cDevice::SignalStats() and cDvbDevice::SignalStats()
This commit is contained in:
parent
6bed5368e6
commit
44287ca25e
@ -1199,6 +1199,8 @@ Rolf Ahrenberg <Rolf.Ahrenberg@sci.fi>
|
|||||||
for the "binary skip" patch
|
for the "binary skip" patch
|
||||||
for adding support for LCN (Logical Channel Numbers)
|
for adding support for LCN (Logical Channel Numbers)
|
||||||
for suggesting to change the naming of "binary skip mode" to "adaptive skip mode"
|
for suggesting to change the naming of "binary skip mode" to "adaptive skip mode"
|
||||||
|
for adding a Status parameter to the interface of cDevice::SignalStats() and
|
||||||
|
cDvbDevice::SignalStats()
|
||||||
|
|
||||||
Ralf Klueber <ralf.klueber@vodafone.com>
|
Ralf Klueber <ralf.klueber@vodafone.com>
|
||||||
for reporting a bug in cutting a recording if there is only a single editing mark
|
for reporting a bug in cutting a recording if there is only a single editing mark
|
||||||
|
2
HISTORY
2
HISTORY
@ -9019,3 +9019,5 @@ Video Disk Recorder Revision History
|
|||||||
Jessich).
|
Jessich).
|
||||||
- Changed the legacy delivery system name "DMBTH" to "DTMB", and added names for
|
- Changed the legacy delivery system name "DMBTH" to "DTMB", and added names for
|
||||||
DVBC_ANNEX_C and DVBC2.
|
DVBC_ANNEX_C and DVBC2.
|
||||||
|
- Added a Status parameter to the interface of cDevice::SignalStats() and
|
||||||
|
cDvbDevice::SignalStats() (thanks to Rolf Ahrenberg).
|
||||||
|
4
device.c
4
device.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: device.c 4.18 2017/05/09 09:03:14 kls Exp $
|
* $Id: device.c 4.19 2017/05/09 11:24:47 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "device.h"
|
#include "device.h"
|
||||||
@ -750,7 +750,7 @@ const cPositioner *cDevice::Positioner(void) const
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cDevice::SignalStats(int &Valid, double *Strength, double *Cnr, double *BerPre, double *BerPost, double *Per) const
|
bool cDevice::SignalStats(int &Valid, double *Strength, double *Cnr, double *BerPre, double *BerPost, double *Per, int *Status) const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
13
device.h
13
device.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: device.h 4.8 2017/04/17 14:46:57 kls Exp $
|
* $Id: device.h 4.9 2017/05/09 11:24:47 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __DEVICE_H
|
#ifndef __DEVICE_H
|
||||||
@ -112,6 +112,14 @@ public:
|
|||||||
#define DTV_STAT_VALID_BERPRE 0x0004
|
#define DTV_STAT_VALID_BERPRE 0x0004
|
||||||
#define DTV_STAT_VALID_BERPOST 0x0008
|
#define DTV_STAT_VALID_BERPOST 0x0008
|
||||||
#define DTV_STAT_VALID_PER 0x0010
|
#define DTV_STAT_VALID_PER 0x0010
|
||||||
|
#define DTV_STAT_VALID_STATUS 0x0020
|
||||||
|
|
||||||
|
#define DTV_STAT_HAS_NONE 0x0000
|
||||||
|
#define DTV_STAT_HAS_SIGNAL 0x0001
|
||||||
|
#define DTV_STAT_HAS_CARRIER 0x0002
|
||||||
|
#define DTV_STAT_HAS_VITERBI 0x0004
|
||||||
|
#define DTV_STAT_HAS_SYNC 0x0008
|
||||||
|
#define DTV_STAT_HAS_LOCK 0x0010
|
||||||
|
|
||||||
class cDevice : public cThread {
|
class cDevice : public cThread {
|
||||||
friend class cLiveSubtitle;
|
friend class cLiveSubtitle;
|
||||||
@ -291,13 +299,14 @@ public:
|
|||||||
///< move the satellite dish to the requested position (only applies to DVB-S
|
///< move the satellite dish to the requested position (only applies to DVB-S
|
||||||
///< devices). If no positioner is involved, or this is not a DVB-S device,
|
///< devices). If no positioner is involved, or this is not a DVB-S device,
|
||||||
///< NULL will be returned.
|
///< NULL will be returned.
|
||||||
virtual bool SignalStats(int &Valid, double *Strength = NULL, double *Cnr = NULL, double *BerPre = NULL, double *BerPost = NULL, double *Per = NULL) const;
|
virtual bool SignalStats(int &Valid, double *Strength = NULL, double *Cnr = NULL, double *BerPre = NULL, double *BerPost = NULL, double *Per = NULL, int *Status = NULL) const;
|
||||||
///< Returns statistics about the currently received signal (if available).
|
///< Returns statistics about the currently received signal (if available).
|
||||||
///< Strength is the signal strength in dBm (typical range -100dBm...0dBm).
|
///< Strength is the signal strength in dBm (typical range -100dBm...0dBm).
|
||||||
///< Cnr is the carrier to noise ratio in dB (typical range 0dB...40dB).
|
///< Cnr is the carrier to noise ratio in dB (typical range 0dB...40dB).
|
||||||
///< BerPre is the bit error rate before the forward error correction (FEC).
|
///< BerPre is the bit error rate before the forward error correction (FEC).
|
||||||
///< BerPost is the bit error rate after the forward error correction (FEC).
|
///< BerPost is the bit error rate after the forward error correction (FEC).
|
||||||
///< Per is the block error rate after the forward error correction (FEC).
|
///< Per is the block error rate after the forward error correction (FEC).
|
||||||
|
///< Status is the masked frontend status (signal/carrier/viterbi/sync/lock).
|
||||||
///< Typical range for BerPre, BerPost and Per is 0...1.
|
///< Typical range for BerPre, BerPost and Per is 0...1.
|
||||||
///< If any of the given pointers is not NULL, the value of the respective signal
|
///< If any of the given pointers is not NULL, the value of the respective signal
|
||||||
///< statistic is returned in it. Upon return, Valid holds a combination of
|
///< statistic is returned in it. Upon return, Valid holds a combination of
|
||||||
|
27
dvbdevice.c
27
dvbdevice.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: dvbdevice.c 4.12 2017/05/09 09:44:10 kls Exp $
|
* $Id: dvbdevice.c 4.13 2017/05/09 11:50:38 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dvbdevice.h"
|
#include "dvbdevice.h"
|
||||||
@ -349,7 +349,7 @@ public:
|
|||||||
void SetChannel(const cChannel *Channel);
|
void SetChannel(const cChannel *Channel);
|
||||||
bool Locked(int TimeoutMs = 0);
|
bool Locked(int TimeoutMs = 0);
|
||||||
const cPositioner *Positioner(void) const { return positioner; }
|
const cPositioner *Positioner(void) const { return positioner; }
|
||||||
bool GetSignalStats(int &Valid, double *Strength = NULL, double *Cnr = NULL, double *BerPre = NULL, double *BerPost = NULL, double *Per = NULL) const;
|
bool GetSignalStats(int &Valid, double *Strength = NULL, double *Cnr = NULL, double *BerPre = NULL, double *BerPost = NULL, double *Per = NULL, int *Status = NULL) const;
|
||||||
int GetSignalStrength(void) const;
|
int GetSignalStrength(void) const;
|
||||||
int GetSignalQuality(void) const;
|
int GetSignalQuality(void) const;
|
||||||
};
|
};
|
||||||
@ -574,14 +574,29 @@ bool cDvbTuner::GetFrontendStatus(fe_status_t &Status) const
|
|||||||
}\
|
}\
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cDvbTuner::GetSignalStats(int &Valid, double *Strength, double *Cnr, double *BerPre, double *BerPost, double *Per) const
|
bool cDvbTuner::GetSignalStats(int &Valid, double *Strength, double *Cnr, double *BerPre, double *BerPost, double *Per, int *Status) const
|
||||||
{
|
{
|
||||||
ClearEventQueue();
|
ClearEventQueue();
|
||||||
|
fe_status_t FeStatus;
|
||||||
dtv_property Props[MAXFRONTENDCMDS];
|
dtv_property Props[MAXFRONTENDCMDS];
|
||||||
dtv_properties CmdSeq;
|
dtv_properties CmdSeq;
|
||||||
memset(&Props, 0, sizeof(Props));
|
memset(&Props, 0, sizeof(Props));
|
||||||
memset(&CmdSeq, 0, sizeof(CmdSeq));
|
memset(&CmdSeq, 0, sizeof(CmdSeq));
|
||||||
CmdSeq.props = Props;
|
CmdSeq.props = Props;
|
||||||
|
Valid = DTV_STAT_VALID_NONE;
|
||||||
|
if (ioctl(fd_frontend, FE_READ_STATUS, &FeStatus) != 0) {
|
||||||
|
esyslog("ERROR: frontend %d/%d: %m", adapter, frontend);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (Status) {
|
||||||
|
*Status = DTV_STAT_HAS_NONE;
|
||||||
|
if (FeStatus & FE_HAS_SIGNAL) *Status |= DTV_STAT_HAS_SIGNAL;
|
||||||
|
if (FeStatus & FE_HAS_CARRIER) *Status |= DTV_STAT_HAS_CARRIER;
|
||||||
|
if (FeStatus & FE_HAS_VITERBI) *Status |= DTV_STAT_HAS_VITERBI;
|
||||||
|
if (FeStatus & FE_HAS_SYNC) *Status |= DTV_STAT_HAS_SYNC;
|
||||||
|
if (FeStatus & FE_HAS_LOCK) *Status |= DTV_STAT_HAS_LOCK;
|
||||||
|
Valid |= DTV_STAT_VALID_STATUS;
|
||||||
|
}
|
||||||
if (Strength) SETCMD(DTV_STAT_SIGNAL_STRENGTH, 0);
|
if (Strength) SETCMD(DTV_STAT_SIGNAL_STRENGTH, 0);
|
||||||
if (Cnr) SETCMD(DTV_STAT_CNR, 0);
|
if (Cnr) SETCMD(DTV_STAT_CNR, 0);
|
||||||
if (BerPre) { SETCMD(DTV_STAT_PRE_ERROR_BIT_COUNT, 0);
|
if (BerPre) { SETCMD(DTV_STAT_PRE_ERROR_BIT_COUNT, 0);
|
||||||
@ -594,7 +609,6 @@ bool cDvbTuner::GetSignalStats(int &Valid, double *Strength, double *Cnr, double
|
|||||||
esyslog("ERROR: frontend %d/%d: %m", adapter, frontend);
|
esyslog("ERROR: frontend %d/%d: %m", adapter, frontend);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Valid = DTV_STAT_VALID_NONE;
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
if (Strength) {
|
if (Strength) {
|
||||||
if (Props[i].u.st.len > 0) {
|
if (Props[i].u.st.len > 0) {
|
||||||
@ -659,6 +673,7 @@ bool cDvbTuner::GetSignalStats(int &Valid, double *Strength, double *Cnr, double
|
|||||||
}
|
}
|
||||||
#ifdef DEBUG_SIGNALSTATS
|
#ifdef DEBUG_SIGNALSTATS
|
||||||
fprintf(stderr, "FE %d/%d: API5 %04X", adapter, frontend, Valid);
|
fprintf(stderr, "FE %d/%d: API5 %04X", adapter, frontend, Valid);
|
||||||
|
if ((Valid & DTV_STAT_VALID_STATUS) != 0) fprintf(stderr, " STAT=%04X", *Status);
|
||||||
if ((Valid & DTV_STAT_VALID_STRENGTH) != 0) fprintf(stderr, " STR=%1.1fdBm", *Strength);
|
if ((Valid & DTV_STAT_VALID_STRENGTH) != 0) fprintf(stderr, " STR=%1.1fdBm", *Strength);
|
||||||
if ((Valid & DTV_STAT_VALID_CNR) != 0) fprintf(stderr, " CNR=%1.1fdB", *Cnr);
|
if ((Valid & DTV_STAT_VALID_CNR) != 0) fprintf(stderr, " CNR=%1.1fdB", *Cnr);
|
||||||
if ((Valid & DTV_STAT_VALID_BERPRE) != 0) fprintf(stderr, " BERPRE=%1.1e", *BerPre);
|
if ((Valid & DTV_STAT_VALID_BERPRE) != 0) fprintf(stderr, " BERPRE=%1.1e", *BerPre);
|
||||||
@ -1841,9 +1856,9 @@ const cPositioner *cDvbDevice::Positioner(void) const
|
|||||||
return dvbTuner ? dvbTuner->Positioner() : NULL;
|
return dvbTuner ? dvbTuner->Positioner() : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cDvbDevice::SignalStats(int &Valid, double *Strength, double *Cnr, double *BerPre, double *BerPost, double *Per) const
|
bool cDvbDevice::SignalStats(int &Valid, double *Strength, double *Cnr, double *BerPre, double *BerPost, double *Per, int *Status) const
|
||||||
{
|
{
|
||||||
return dvbTuner ? dvbTuner->GetSignalStats(Valid, Strength, Cnr, BerPre, BerPost, Per) : false;
|
return dvbTuner ? dvbTuner->GetSignalStats(Valid, Strength, Cnr, BerPre, BerPost, Per, Status) : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cDvbDevice::SignalStrength(void) const
|
int cDvbDevice::SignalStrength(void) const
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: dvbdevice.h 4.3 2017/04/17 14:44:43 kls Exp $
|
* $Id: dvbdevice.h 4.4 2017/05/09 11:24:47 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __DVBDEVICE_H
|
#ifndef __DVBDEVICE_H
|
||||||
@ -244,7 +244,7 @@ public:
|
|||||||
virtual bool ProvidesEIT(void) const;
|
virtual bool ProvidesEIT(void) const;
|
||||||
virtual int NumProvidedSystems(void) const;
|
virtual int NumProvidedSystems(void) const;
|
||||||
virtual const cPositioner *Positioner(void) const;
|
virtual const cPositioner *Positioner(void) const;
|
||||||
virtual bool SignalStats(int &Valid, double *Strength = NULL, double *Cnr = NULL, double *BerPre = NULL, double *BerPost = NULL, double *Per = NULL) const;
|
virtual bool SignalStats(int &Valid, double *Strength = NULL, double *Cnr = NULL, double *BerPre = NULL, double *BerPost = NULL, double *Per = NULL, int *Status = NULL) const;
|
||||||
virtual int SignalStrength(void) const;
|
virtual int SignalStrength(void) const;
|
||||||
virtual int SignalQuality(void) const;
|
virtual int SignalQuality(void) const;
|
||||||
virtual const cChannel *GetCurrentlyTunedTransponder(void) const;
|
virtual const cChannel *GetCurrentlyTunedTransponder(void) const;
|
||||||
|
Loading…
Reference in New Issue
Block a user