mirror of
https://github.com/rofafor/vdr-plugin-femon.git
synced 2023-10-10 13:36:53 +02:00
Updated for vdr-1.7.19: New API functions for signal strength and quality used to provide information for the OSD.
This commit is contained in:
parent
131a61c80c
commit
5003faabc4
4
HISTORY
4
HISTORY
@ -417,4 +417,6 @@ VDR Plugin 'femon' Revision History
|
|||||||
|
|
||||||
2011-xx-xx: Version 1.7.11
|
2011-xx-xx: Version 1.7.11
|
||||||
|
|
||||||
- Added cppcheck target into Makefile.
|
- Updated for vdr-1.7.19: New API functions for signal strength
|
||||||
|
and quality used to provide information for the OSD.
|
||||||
|
- Added cppcheck target into Makefile.
|
||||||
|
8
README
8
README
@ -32,15 +32,15 @@ Terminology:
|
|||||||
|
|
||||||
--------------------------------------------------------------
|
--------------------------------------------------------------
|
||||||
|## Channel Name ################### [SVDRP][AR][VF][A/DD][D]|
|
|## Channel Name ################### [SVDRP][AR][VF][A/DD][D]|
|
||||||
|[=====Signal Strength in % ==============|=================]|
|
|[=====Signal Strength ===================|=================]|
|
||||||
|[=====Signal-to-Noise Ratio in % ========|=================]|
|
|[=====Signal Quality ================|=====================]|
|
||||||
| STR: #0000 (0%) BER: #00000000 Video: 0 Mbit/s |
|
| STR: #0000 (0%) BER: #00000000 Video: 0 Mbit/s |
|
||||||
| SNR: #0000 (0%) UNC: #00000000 Audio: 0 kbit/s |
|
| SNR: #0000 (0%) UNC: #00000000 Audio: 0 kbit/s |
|
||||||
| [LOCK] [SIGNAL] [CARRIER] [VITERBI] [SYNC] |
|
| [LOCK] [SIGNAL] [CARRIER] [VITERBI] [SYNC] |
|
||||||
--------------------------------------------------------------
|
--------------------------------------------------------------
|
||||||
|
|
||||||
STR - Signal strength
|
STR - Signal strength from driver
|
||||||
SNR - Signal-to-noise ratio
|
SNR - Signal-to-noise ratio from driver
|
||||||
BER - Bit error rate
|
BER - Bit error rate
|
||||||
UNC - Uncorrected blocks
|
UNC - Uncorrected blocks
|
||||||
Video - Calculated video bitrate in Mbit/s
|
Video - Calculated video bitrate in Mbit/s
|
||||||
|
18
femon.c
18
femon.c
@ -14,8 +14,8 @@
|
|||||||
#include "femonservice.h"
|
#include "femonservice.h"
|
||||||
#include "femontools.h"
|
#include "femontools.h"
|
||||||
|
|
||||||
#if defined(APIVERSNUM) && APIVERSNUM < 10718
|
#if defined(APIVERSNUM) && APIVERSNUM < 10719
|
||||||
#error "VDR-1.7.18 API version or greater is required!"
|
#error "VDR-1.7.19 API version or greater is required!"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const char VERSION[] = "1.7.11";
|
static const char VERSION[] = "1.7.11";
|
||||||
@ -169,10 +169,14 @@ const char **cPluginFemon::SVDRPHelpPages(void)
|
|||||||
" Print the current frontend name.",
|
" Print the current frontend name.",
|
||||||
"STAT\n"
|
"STAT\n"
|
||||||
" Print the current frontend status.",
|
" Print the current frontend status.",
|
||||||
"SGNL\n"
|
"STRG\n"
|
||||||
" Print the current signal strength.",
|
" Print the current signal strength.",
|
||||||
|
"QUAL\n"
|
||||||
|
" Print the current signal quality.",
|
||||||
|
"SGNL\n"
|
||||||
|
" Print the current signal strength from driver.",
|
||||||
"SNRA\n"
|
"SNRA\n"
|
||||||
" Print the current signal-to-noise ratio.",
|
" Print the current signal-to-noise ratio from driver.",
|
||||||
"BERA\n"
|
"BERA\n"
|
||||||
" Print the current bit error rate.",
|
" Print the current bit error rate.",
|
||||||
"UNCB\n"
|
"UNCB\n"
|
||||||
@ -225,6 +229,12 @@ cString cPluginFemon::SVDRPCommand(const char *Command, const char *Option, int
|
|||||||
else if (strcasecmp(Command, "STAT") == 0) {
|
else if (strcasecmp(Command, "STAT") == 0) {
|
||||||
return getFrontendStatus(cDevice::ActualDevice()->CardIndex());
|
return getFrontendStatus(cDevice::ActualDevice()->CardIndex());
|
||||||
}
|
}
|
||||||
|
else if (strcasecmp(Command, "STRG") == 0) {
|
||||||
|
return cString::sprintf("%d on device #%d", cDevice::ActualDevice()->SignalStrength(), cDevice::ActualDevice()->CardIndex());
|
||||||
|
}
|
||||||
|
else if (strcasecmp(Command, "QUAL") == 0) {
|
||||||
|
return cString::sprintf("%d on device #%d", cDevice::ActualDevice()->SignalQuality(), cDevice::ActualDevice()->CardIndex());
|
||||||
|
}
|
||||||
else if (strcasecmp(Command, "SGNL") == 0) {
|
else if (strcasecmp(Command, "SGNL") == 0) {
|
||||||
int value = getSignal(cDevice::ActualDevice()->CardIndex());
|
int value = getSignal(cDevice::ActualDevice()->CardIndex());
|
||||||
return cString::sprintf("%04X (%02d%%) on device #%d", value, value / 655, cDevice::ActualDevice()->CardIndex());
|
return cString::sprintf("%04X (%02d%%) on device #%d", value, value / 655, cDevice::ActualDevice()->CardIndex());
|
||||||
|
26
femonosd.c
26
femonosd.c
@ -171,6 +171,10 @@ cFemonOsd::cFemonOsd()
|
|||||||
m_SvdrpPlugin(NULL),
|
m_SvdrpPlugin(NULL),
|
||||||
m_Number(0),
|
m_Number(0),
|
||||||
m_OldNumber(0),
|
m_OldNumber(0),
|
||||||
|
m_Quality(0),
|
||||||
|
m_QualityValid(false),
|
||||||
|
m_Strength(0),
|
||||||
|
m_StrengthValid(false),
|
||||||
m_SNR(0),
|
m_SNR(0),
|
||||||
m_SNRValid(false),
|
m_SNRValid(false),
|
||||||
m_Signal(0),
|
m_Signal(0),
|
||||||
@ -333,11 +337,11 @@ void cFemonOsd::DrawStatusWindow(void)
|
|||||||
OSDDRAWSTATUSBM(OSDSPACING);
|
OSDDRAWSTATUSBM(OSDSPACING);
|
||||||
}
|
}
|
||||||
offset += OSDROWHEIGHT;
|
offset += OSDROWHEIGHT;
|
||||||
if (m_SignalValid)
|
if (m_StrengthValid)
|
||||||
OSDDRAWSTATUSBAR(m_Signal / 655);
|
OSDDRAWSTATUSBAR(m_Strength);
|
||||||
offset += OSDROWHEIGHT;
|
offset += OSDROWHEIGHT;
|
||||||
if (m_SNRValid)
|
if (m_QualityValid)
|
||||||
OSDDRAWSTATUSBAR(m_SNR / 655);
|
OSDDRAWSTATUSBAR(m_Quality);
|
||||||
offset += OSDROWHEIGHT;
|
offset += OSDROWHEIGHT;
|
||||||
OSDDRAWSTATUSVALUES("STR:", m_SignalValid ? *cString::sprintf("%04x", m_Signal) : "", m_SignalValid ? *cString::sprintf("(%2d%%)", m_Signal / 655) : "",
|
OSDDRAWSTATUSVALUES("STR:", m_SignalValid ? *cString::sprintf("%04x", m_Signal) : "", m_SignalValid ? *cString::sprintf("(%2d%%)", m_Signal / 655) : "",
|
||||||
"BER:", m_BERValid ? *cString::sprintf("%08x", m_BER) : "", *cString::sprintf("%s:", tr("Video")),
|
"BER:", m_BERValid ? *cString::sprintf("%08x", m_BER) : "", *cString::sprintf("%s:", tr("Video")),
|
||||||
@ -521,6 +525,10 @@ void cFemonOsd::Action(void)
|
|||||||
m_SvdrpVideoBitrate = -1.0;
|
m_SvdrpVideoBitrate = -1.0;
|
||||||
m_SvdrpAudioBitrate = -1.0;
|
m_SvdrpAudioBitrate = -1.0;
|
||||||
if (m_Frontend != -1) {
|
if (m_Frontend != -1) {
|
||||||
|
m_Quality = cDevice::ActualDevice()->SignalQuality();
|
||||||
|
m_QualityValid = (m_Quality >= 0);
|
||||||
|
m_Strength = cDevice::ActualDevice()->SignalStrength();
|
||||||
|
m_StrengthValid = (m_Strength >= 0);
|
||||||
m_FrontendStatusValid = (ioctl(m_Frontend, FE_READ_STATUS, &m_FrontendStatus) >= 0);
|
m_FrontendStatusValid = (ioctl(m_Frontend, FE_READ_STATUS, &m_FrontendStatus) >= 0);
|
||||||
m_SignalValid = (ioctl(m_Frontend, FE_READ_SIGNAL_STRENGTH, &m_Signal) >= 0);
|
m_SignalValid = (ioctl(m_Frontend, FE_READ_SIGNAL_STRENGTH, &m_Signal) >= 0);
|
||||||
m_SNRValid = (ioctl(m_Frontend, FE_READ_SNR, &m_SNR) >= 0);
|
m_SNRValid = (ioctl(m_Frontend, FE_READ_SNR, &m_SNR) >= 0);
|
||||||
@ -533,6 +541,8 @@ void cFemonOsd::Action(void)
|
|||||||
cmd.handle = m_SvdrpConnection.handle;
|
cmd.handle = m_SvdrpConnection.handle;
|
||||||
m_SvdrpPlugin->Service("SvdrpCommand-v1.0", &cmd);
|
m_SvdrpPlugin->Service("SvdrpCommand-v1.0", &cmd);
|
||||||
if (cmd.responseCode == 900) {
|
if (cmd.responseCode == 900) {
|
||||||
|
m_StrengthValid = false;
|
||||||
|
m_QualityValid = false;
|
||||||
m_FrontendStatusValid = false;
|
m_FrontendStatusValid = false;
|
||||||
m_SignalValid = false;
|
m_SignalValid = false;
|
||||||
m_SNRValid = false;
|
m_SNRValid = false;
|
||||||
@ -542,6 +552,14 @@ void cFemonOsd::Action(void)
|
|||||||
const char *s = line->Text();
|
const char *s = line->Text();
|
||||||
if (!strncasecmp(s, "CARD:", 5))
|
if (!strncasecmp(s, "CARD:", 5))
|
||||||
m_SvdrpFrontend = (int)strtol(s + 5, NULL, 10);
|
m_SvdrpFrontend = (int)strtol(s + 5, NULL, 10);
|
||||||
|
else if (!strncasecmp(s, "STRG:", 5)) {
|
||||||
|
m_Strength = (int)strtol(s + 5, NULL, 10);
|
||||||
|
m_StrengthValid = (m_Strength >= 0);
|
||||||
|
}
|
||||||
|
else if (!strncasecmp(s, "QUAL:", 5)) {
|
||||||
|
m_Quality = (int)strtol(s + 5, NULL, 10);
|
||||||
|
m_QualityValid = (m_Quality >= 0);
|
||||||
|
}
|
||||||
else if (!strncasecmp(s, "TYPE:", 5))
|
else if (!strncasecmp(s, "TYPE:", 5))
|
||||||
m_FrontendInfo.type = (fe_type_t)strtol(s + 5, NULL, 10);
|
m_FrontendInfo.type = (fe_type_t)strtol(s + 5, NULL, 10);
|
||||||
else if (!strncasecmp(s, "NAME:", 5)) {
|
else if (!strncasecmp(s, "NAME:", 5)) {
|
||||||
|
@ -36,6 +36,10 @@ private:
|
|||||||
cPlugin *m_SvdrpPlugin;
|
cPlugin *m_SvdrpPlugin;
|
||||||
int m_Number;
|
int m_Number;
|
||||||
int m_OldNumber;
|
int m_OldNumber;
|
||||||
|
int m_Quality;
|
||||||
|
bool m_QualityValid;
|
||||||
|
int m_Strength;
|
||||||
|
bool m_StrengthValid;
|
||||||
uint16_t m_SNR;
|
uint16_t m_SNR;
|
||||||
bool m_SNRValid;
|
bool m_SNRValid;
|
||||||
uint16_t m_Signal;
|
uint16_t m_Signal;
|
||||||
|
@ -92,7 +92,7 @@ cString getFrontendInfo(int cardIndex)
|
|||||||
if (fe < 0)
|
if (fe < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
info = cString::sprintf("CARD:%d", cardIndex);
|
info = cString::sprintf("CARD:%d\nSTRG:%d\nQUAL:%d", cardIndex, cDevice::ActualDevice()->SignalStrength(), cDevice::ActualDevice()->SignalQuality());
|
||||||
|
|
||||||
if (ioctl(fe, FE_GET_INFO, &value) >= 0)
|
if (ioctl(fe, FE_GET_INFO, &value) >= 0)
|
||||||
info = cString::sprintf("%s\nTYPE:%d\nNAME:%s", *info, value.type, value.name);
|
info = cString::sprintf("%s\nTYPE:%d\nNAME:%s", *info, value.type, value.name);
|
||||||
|
Loading…
Reference in New Issue
Block a user