mirror of
				https://github.com/rofafor/vdr-plugin-femon.git
				synced 2023-10-10 11:36:53 +00: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:
		
							
								
								
									
										4
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								HISTORY
									
									
									
									
									
								
							@@ -417,4 +417,6 @@ VDR Plugin 'femon' Revision History
 | 
			
		||||
 | 
			
		||||
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]|
 | 
			
		||||
|[=====Signal Strength in % ==============|=================]|
 | 
			
		||||
|[=====Signal-to-Noise Ratio in % ========|=================]|
 | 
			
		||||
|[=====Signal Strength ===================|=================]|
 | 
			
		||||
|[=====Signal Quality ================|=====================]|
 | 
			
		||||
| STR: #0000 (0%)       BER: #00000000       Video: 0 Mbit/s |
 | 
			
		||||
| SNR: #0000 (0%)       UNC: #00000000       Audio: 0 kbit/s |
 | 
			
		||||
| [LOCK]     [SIGNAL]     [CARRIER]     [VITERBI]     [SYNC] |
 | 
			
		||||
--------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
STR     - Signal strength
 | 
			
		||||
SNR     - Signal-to-noise ratio
 | 
			
		||||
STR     - Signal strength from driver
 | 
			
		||||
SNR     - Signal-to-noise ratio from driver
 | 
			
		||||
BER     - Bit error rate
 | 
			
		||||
UNC     - Uncorrected blocks
 | 
			
		||||
Video   - Calculated video bitrate in Mbit/s
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								femon.c
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								femon.c
									
									
									
									
									
								
							@@ -14,8 +14,8 @@
 | 
			
		||||
#include "femonservice.h"
 | 
			
		||||
#include "femontools.h"
 | 
			
		||||
 | 
			
		||||
#if defined(APIVERSNUM) && APIVERSNUM < 10718
 | 
			
		||||
#error "VDR-1.7.18 API version or greater is required!"
 | 
			
		||||
#if defined(APIVERSNUM) && APIVERSNUM < 10719
 | 
			
		||||
#error "VDR-1.7.19 API version or greater is required!"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static const char VERSION[]       = "1.7.11";
 | 
			
		||||
@@ -169,10 +169,14 @@ const char **cPluginFemon::SVDRPHelpPages(void)
 | 
			
		||||
    "    Print the current frontend name.",
 | 
			
		||||
    "STAT\n"
 | 
			
		||||
    "    Print the current frontend status.",
 | 
			
		||||
    "SGNL\n"
 | 
			
		||||
    "STRG\n"
 | 
			
		||||
    "    Print the current signal strength.",
 | 
			
		||||
    "QUAL\n"
 | 
			
		||||
    "    Print the current signal quality.",
 | 
			
		||||
    "SGNL\n"
 | 
			
		||||
    "    Print the current signal strength from driver.",
 | 
			
		||||
    "SNRA\n"
 | 
			
		||||
    "    Print the current signal-to-noise ratio.",
 | 
			
		||||
    "    Print the current signal-to-noise ratio from driver.",
 | 
			
		||||
    "BERA\n"
 | 
			
		||||
    "    Print the current bit error rate.",
 | 
			
		||||
    "UNCB\n"
 | 
			
		||||
@@ -225,6 +229,12 @@ cString cPluginFemon::SVDRPCommand(const char *Command, const char *Option, int
 | 
			
		||||
  else if (strcasecmp(Command, "STAT") == 0) {
 | 
			
		||||
     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) {
 | 
			
		||||
     int value = getSignal(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_Number(0),
 | 
			
		||||
  m_OldNumber(0),
 | 
			
		||||
  m_Quality(0),
 | 
			
		||||
  m_QualityValid(false),
 | 
			
		||||
  m_Strength(0),
 | 
			
		||||
  m_StrengthValid(false),
 | 
			
		||||
  m_SNR(0),
 | 
			
		||||
  m_SNRValid(false),
 | 
			
		||||
  m_Signal(0),
 | 
			
		||||
@@ -333,11 +337,11 @@ void cFemonOsd::DrawStatusWindow(void)
 | 
			
		||||
        OSDDRAWSTATUSBM(OSDSPACING);
 | 
			
		||||
        }
 | 
			
		||||
     offset += OSDROWHEIGHT;
 | 
			
		||||
     if (m_SignalValid)
 | 
			
		||||
        OSDDRAWSTATUSBAR(m_Signal / 655);
 | 
			
		||||
     if (m_StrengthValid)
 | 
			
		||||
        OSDDRAWSTATUSBAR(m_Strength);
 | 
			
		||||
     offset += OSDROWHEIGHT;
 | 
			
		||||
     if (m_SNRValid)
 | 
			
		||||
        OSDDRAWSTATUSBAR(m_SNR / 655);
 | 
			
		||||
     if (m_QualityValid)
 | 
			
		||||
        OSDDRAWSTATUSBAR(m_Quality);
 | 
			
		||||
     offset += OSDROWHEIGHT;
 | 
			
		||||
     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")),
 | 
			
		||||
@@ -521,6 +525,10 @@ void cFemonOsd::Action(void)
 | 
			
		||||
    m_SvdrpVideoBitrate = -1.0;
 | 
			
		||||
    m_SvdrpAudioBitrate = -1.0;
 | 
			
		||||
    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_SignalValid = (ioctl(m_Frontend, FE_READ_SIGNAL_STRENGTH, &m_Signal) >= 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;
 | 
			
		||||
       m_SvdrpPlugin->Service("SvdrpCommand-v1.0", &cmd);
 | 
			
		||||
       if (cmd.responseCode == 900) {
 | 
			
		||||
          m_StrengthValid = false;
 | 
			
		||||
          m_QualityValid = false;
 | 
			
		||||
          m_FrontendStatusValid = false;
 | 
			
		||||
          m_SignalValid = false;
 | 
			
		||||
          m_SNRValid = false;
 | 
			
		||||
@@ -542,6 +552,14 @@ void cFemonOsd::Action(void)
 | 
			
		||||
              const char *s = line->Text();
 | 
			
		||||
	      if (!strncasecmp(s, "CARD:", 5))
 | 
			
		||||
                 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))
 | 
			
		||||
                 m_FrontendInfo.type = (fe_type_t)strtol(s + 5, NULL, 10);
 | 
			
		||||
              else if (!strncasecmp(s, "NAME:", 5)) {
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,10 @@ private:
 | 
			
		||||
  cPlugin          *m_SvdrpPlugin;
 | 
			
		||||
  int               m_Number;
 | 
			
		||||
  int               m_OldNumber;
 | 
			
		||||
  int               m_Quality;
 | 
			
		||||
  bool              m_QualityValid;
 | 
			
		||||
  int               m_Strength;
 | 
			
		||||
  bool              m_StrengthValid;
 | 
			
		||||
  uint16_t          m_SNR;
 | 
			
		||||
  bool              m_SNRValid;
 | 
			
		||||
  uint16_t          m_Signal;
 | 
			
		||||
 
 | 
			
		||||
@@ -92,7 +92,7 @@ cString getFrontendInfo(int cardIndex)
 | 
			
		||||
  if (fe < 0)
 | 
			
		||||
     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)
 | 
			
		||||
     info = cString::sprintf("%s\nTYPE:%d\nNAME:%s", *info, value.type, value.name);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user