mirror of
				https://github.com/rofafor/vdr-plugin-satip.git
				synced 2023-10-10 11:37:42 +00:00 
			
		
		
		
	Switched to standard 'S' and 'T' sources.
Added a new OperationMode setup parameter. Added new SVDRP commands.
This commit is contained in:
		
							
								
								
									
										6
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								HISTORY
									
									
									
									
									
								
							@@ -6,3 +6,9 @@ VDR Plugin 'satip' Revision History
 | 
			
		||||
 | 
			
		||||
- Initial revision.
 | 
			
		||||
- Added German translation (Thanks to Frank Neumann).
 | 
			
		||||
 | 
			
		||||
2014-03-15: Version 0.0.2
 | 
			
		||||
 | 
			
		||||
- Switched to standard 'S' and 'T' sources.
 | 
			
		||||
- Added a new OperationMode setup parameter.
 | 
			
		||||
- Added new SVDRP commands.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Makefile
									
									
									
									
									
								
							@@ -77,8 +77,8 @@ all-redirect: all
 | 
			
		||||
 | 
			
		||||
### The object files (add further files here):
 | 
			
		||||
 | 
			
		||||
OBJS = $(PLUGIN).o common.o config.o device.o discover.o \
 | 
			
		||||
	sectionfilter.o setup.o socket.o source.o statistics.o tuner.o
 | 
			
		||||
OBJS = $(PLUGIN).o common.o config.o device.o discover.o param.o \
 | 
			
		||||
	sectionfilter.o setup.o socket.o statistics.o tuner.o
 | 
			
		||||
 | 
			
		||||
### The main target:
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										136
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										136
									
								
								README
									
									
									
									
									
								
							@@ -32,9 +32,35 @@ Installation:
 | 
			
		||||
tar -xzf /put/your/path/here/vdr-satip-X.Y.Z.tgz
 | 
			
		||||
make -C satip-X.Y.Z install
 | 
			
		||||
 | 
			
		||||
Configuration:
 | 
			
		||||
 | 
			
		||||
The plugin accepts a "--devices" (-d) command-line parameter defaulting
 | 
			
		||||
to one. This parameter defines how many simultaneous transponders can
 | 
			
		||||
be received, if there are available SAT>IP tuners.
 | 
			
		||||
 | 
			
		||||
SAT>IP satellite positions (aka. signal sources) shall be defined via
 | 
			
		||||
sources.conf. If the source description begins with a number, it's used
 | 
			
		||||
as SAT>IP signal source selection parameter. Otherwise, the default
 | 
			
		||||
parameter is one:
 | 
			
		||||
 | 
			
		||||
S19.2E  Astra 1KR/1L/1M/2C
 | 
			
		||||
=> Signal source = 1
 | 
			
		||||
 | 
			
		||||
S19.2E  2
 | 
			
		||||
=> Signal source = 2
 | 
			
		||||
 | 
			
		||||
S19.2E  3 Astra 1KR/1L/1M/2C
 | 
			
		||||
=> Signal source = 3
 | 
			
		||||
 | 
			
		||||
Setup menu:
 | 
			
		||||
 | 
			
		||||
- Enable EPG scanning = yes  If you want exclude all SAT>IP devices 
 | 
			
		||||
- Operating mode = off       If you want exclude all SAT>IP devices
 | 
			
		||||
                   low       from VDR's device handling, set this
 | 
			
		||||
                   normal    option to "off". Otherwise, if you want
 | 
			
		||||
                             to keep SAT>IP at a low priority when
 | 
			
		||||
                             selecting available devices, set this
 | 
			
		||||
                             option to "low".
 | 
			
		||||
- Enable EPG scanning = yes  If you want exclude all SAT>IP devices
 | 
			
		||||
                             from VDR's EIT background scanning, set
 | 
			
		||||
                             this option to "no".
 | 
			
		||||
- Disabled filters = none    Certain section filters might cause some
 | 
			
		||||
@@ -57,108 +83,6 @@ Information menu:
 | 
			
		||||
- [Yellow:Filters]           Opens the section filter statistics page.
 | 
			
		||||
- [Blue:Bits/bytes]          Toggles between bits and bytes mode.
 | 
			
		||||
 | 
			
		||||
SAT>IP device menu:
 | 
			
		||||
 | 
			
		||||
- [Red:Scan]                 Starts the channel scanning sometime in
 | 
			
		||||
                             the future.
 | 
			
		||||
 | 
			
		||||
Configuration:
 | 
			
		||||
 | 
			
		||||
- Parameters
 | 
			
		||||
 | 
			
		||||
  Various parameters, depending on whether this is a DVB-S, DVB-S2, DVB-T,
 | 
			
		||||
  or DVB-T2 channel. Each parameter consist of a key character, followed by
 | 
			
		||||
  an integer number that represents the actual setting of that parameter.
 | 
			
		||||
  The valid key characters, their meaning, and allowed values are:
 | 
			
		||||
 | 
			
		||||
  B  Bandwidth (1712, 5, 6, 7, 8, 10)
 | 
			
		||||
  C  Code rate high priority (12, 23, 34, 35, 45, 56, 67, 78, 89, 910)
 | 
			
		||||
  G  Guard interval (4, 8, 16, 32, 128, 19128, 19256)
 | 
			
		||||
  H  Horizontal polarization
 | 
			
		||||
  L  Left circular polarization
 | 
			
		||||
  M  Modulation (2, 5, 16, 64, 256)
 | 
			
		||||
  N  pilot toNes (0, 1)
 | 
			
		||||
  O  rollOff (20, 25, 35)
 | 
			
		||||
  P  stream id (0-255)
 | 
			
		||||
  Q  t2 system id (0-65535)
 | 
			
		||||
  R  Right circular polarization
 | 
			
		||||
  S  delivery System (0, 1)
 | 
			
		||||
  T  Transmission mode (1, 2, 4, 8, 16, 32)
 | 
			
		||||
  V  Vertical polarization
 | 
			
		||||
  X  siso/miso mode (0, 1)
 | 
			
		||||
  Z  signal source position (1-255)
 | 
			
		||||
 | 
			
		||||
  Bandwidth: The bandwidth of the channel in MHz (1712 in kHz)
 | 
			
		||||
    (DVB-T/DVB-T2)
 | 
			
		||||
 | 
			
		||||
  Code rate high priority: Forward Error Correction (FEC) of the high
 | 
			
		||||
    priority stream (DVB-T/DVB-T2) or the the inner FEC scheme (DVB-S/DVB-S2)
 | 
			
		||||
    12 = 1/2, 23 = 2/3, 34 = 3/4, 35 = 3/5, 45 = 4/5, 56 = 5/6,
 | 
			
		||||
    67 = 6/7, 78 = 7/8, 89 = 8/9, 910 = 9/10
 | 
			
		||||
    (DVB-T/DVB-T2/DVB-S/DVB-S2)
 | 
			
		||||
 | 
			
		||||
  Guard interval: The guard interval value
 | 
			
		||||
    4 = 1/4, 8 = 1/8, 16 = 1/16, 32 = 1/32, 128 = 1/128,
 | 
			
		||||
    19128 = 19/128, 19256 = 19/256
 | 
			
		||||
    (DVB-T/DVB-T2)
 | 
			
		||||
 | 
			
		||||
  Modulation: Specifies the modulation/constellation of the channel
 | 
			
		||||
    2   = QPSK (DVB-S, DVB-S2, DVB-T, DVB-T2)
 | 
			
		||||
    5   = 8PSK (DVB-S, DVB-S2)
 | 
			
		||||
    16  = QAM16 (DVB-T, DVB-T2)
 | 
			
		||||
    64  = QAM64 (DVB-T, DVB-T2)
 | 
			
		||||
    256 = QAM256 (DVB-T2)
 | 
			
		||||
 | 
			
		||||
  Pilot tones: Specifies pilot tones usage
 | 
			
		||||
    0 = off, 1 = on
 | 
			
		||||
    (DVB-S2)
 | 
			
		||||
 | 
			
		||||
  Rolloff: The Nyquist filter rolloff factor
 | 
			
		||||
    35 = 0.35, 25 = 0.25, 20 = 0.20
 | 
			
		||||
    (DVB-S/DVB-S2)
 | 
			
		||||
 | 
			
		||||
  Stream id: Physical Layer Pipe (PLP) id (0-255) for DVB-T2 multiplex
 | 
			
		||||
    (DVB-T2)
 | 
			
		||||
 | 
			
		||||
  T2 system id: Unique identifier (0-65535) of the T2 system
 | 
			
		||||
    (DVB-T2)
 | 
			
		||||
 | 
			
		||||
  Transmission mode: Number of DVB-T OFDM carriers
 | 
			
		||||
    32 = 32k, 16 = 16k, 8 = 8k, 4 = 4k, 2 = 2k, 1 = 1k
 | 
			
		||||
    (DVB-T/DVB-T2)
 | 
			
		||||
 | 
			
		||||
  Delivery System: The delivery system
 | 
			
		||||
    0 = "first generation" (DVB-S/DVB-T)
 | 
			
		||||
    1 = "second generation" (DVB-S2/DVB-T2)
 | 
			
		||||
 | 
			
		||||
  Polarization: Satellite antenna polarization
 | 
			
		||||
    H = horizontal, V = vertical
 | 
			
		||||
    R = circular right, L = circular left
 | 
			
		||||
    (DVB-S/DVB-S2)
 | 
			
		||||
 | 
			
		||||
  Signal source: Specifies the signal source (satellite) position
 | 
			
		||||
    (DVB-S/DVB-S2)
 | 
			
		||||
 | 
			
		||||
  SISO/MISO: Specifies the Single-Input/Multiple-Input Single-Output mode
 | 
			
		||||
    0 = SISO, 1 = MISO
 | 
			
		||||
    (DVB-T2)
 | 
			
		||||
 | 
			
		||||
- Source
 | 
			
		||||
 | 
			
		||||
  There are two separate signal sources for SAT>IP channels:
 | 
			
		||||
    Z = SAT>IP Satellite (DVB-S/DVB-S2)
 | 
			
		||||
    Y = SAT>IP Terrestrial (DVB-T/DVB-T2)
 | 
			
		||||
 | 
			
		||||
- Examples
 | 
			
		||||
 | 
			
		||||
  MTV3;DVB-T:658000000:B8C23D23G8M64S0T8Y0:T:0:305=2:561=fin@4,562=dut@4:5010;1073=fin,1074=dut:0:49:8438:8193:0
 | 
			
		||||
  =>
 | 
			
		||||
  MTV3;SAT>IP:658000000:B8C23G8M64S0T8:Y:0:305=2:561=fin@4,562=dut@4:5010;1073=fin,1074=dut:0:49:8438:8193:0
 | 
			
		||||
 | 
			
		||||
  Das Erste HD;DVB-S2:11494:HC23M5O35S1:S19.2E:22000:5101=27:5102=deu@3,5103=mis@3;5106=deu@106:5104;5105=deu:0:10301:1:1019:0
 | 
			
		||||
  =>
 | 
			
		||||
  Das Erste HD;SAT>IP:11494:HC23M5O35S1:Z:22000:5101=27:5102=deu@3,5103=mis@3;5106=deu@106:5104;5105=deu:0:10301:1:1019:0
 | 
			
		||||
 | 
			
		||||
Notes:
 | 
			
		||||
 | 
			
		||||
- The stream id "-1" states about unsuccessful tuning. This might be a
 | 
			
		||||
@@ -169,6 +93,12 @@ Notes:
 | 
			
		||||
- If the plugin doesn't detect your SAT>IP network device, make sure
 | 
			
		||||
  your setup doesn't have firewalled the UDP port 1900.
 | 
			
		||||
 | 
			
		||||
- Stream decryption requires a separate CAM plugin that works without
 | 
			
		||||
  direct access to any DVB card devices.
 | 
			
		||||
 | 
			
		||||
- The 100% compliance against SAT>IP specification 1.2 requires a
 | 
			
		||||
  patched VDR.
 | 
			
		||||
 | 
			
		||||
Acknowledgements:
 | 
			
		||||
 | 
			
		||||
- Big thanks to Digital Devices GmbH for providing the Octopus Net
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								config.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								config.c
									
									
									
									
									
								
							@@ -11,7 +11,8 @@
 | 
			
		||||
cSatipConfig SatipConfig;
 | 
			
		||||
 | 
			
		||||
cSatipConfig::cSatipConfig(void)
 | 
			
		||||
: eitScanM(1),
 | 
			
		||||
: operatingModeM(OPERATING_MODE_LOW),
 | 
			
		||||
  eitScanM(1),
 | 
			
		||||
  useBytesM(1)
 | 
			
		||||
{
 | 
			
		||||
  for (unsigned int i = 0; i < ARRAY_SIZE(disabledFiltersM); ++i)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								config.h
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								config.h
									
									
									
									
									
								
							@@ -14,19 +14,34 @@
 | 
			
		||||
class cSatipConfig
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
  unsigned int operatingModeM;
 | 
			
		||||
  unsigned int eitScanM;
 | 
			
		||||
  unsigned int useBytesM;
 | 
			
		||||
  int disabledFiltersM[SECTION_FILTER_TABLE_SIZE];
 | 
			
		||||
  char configDirectoryM[PATH_MAX];
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  enum {
 | 
			
		||||
    OPERATING_MODE_OFF = 0,
 | 
			
		||||
    OPERATING_MODE_LOW,
 | 
			
		||||
    OPERATING_MODE_NORMAL,
 | 
			
		||||
    OPERATING_MODE_HIGH,
 | 
			
		||||
    NUMBER_OF_OPERATING_MODES
 | 
			
		||||
  };
 | 
			
		||||
  cSatipConfig();
 | 
			
		||||
  unsigned int GetOperatingMode(void) const { return operatingModeM; }
 | 
			
		||||
  bool IsOperatingModeOff(void) const { return (operatingModeM == OPERATING_MODE_OFF); }
 | 
			
		||||
  bool IsOperatingModeLow(void) const { return (operatingModeM == OPERATING_MODE_LOW); }
 | 
			
		||||
  bool IsOperatingModeNormal(void) const { return (operatingModeM == OPERATING_MODE_NORMAL); }
 | 
			
		||||
  bool IsOperatingModeHigh(void) const { return (operatingModeM == OPERATING_MODE_HIGH); }
 | 
			
		||||
  void ToggleOperatingMode(void) { operatingModeM = (operatingModeM + 1) % NUMBER_OF_OPERATING_MODES; }
 | 
			
		||||
  unsigned int GetEITScan(void) const { return eitScanM; }
 | 
			
		||||
  unsigned int GetUseBytes(void) const { return useBytesM; }
 | 
			
		||||
  const char *GetConfigDirectory(void) const { return configDirectoryM; }
 | 
			
		||||
  unsigned int GetDisabledFiltersCount(void) const;
 | 
			
		||||
  int GetDisabledFilters(unsigned int indexP) const;
 | 
			
		||||
 | 
			
		||||
  void SetOperatingMode(unsigned int operatingModeP) { operatingModeM = operatingModeP; }
 | 
			
		||||
  void SetEITScan(unsigned int onOffP) { eitScanM = onOffP; }
 | 
			
		||||
  void SetUseBytes(unsigned int onOffP) { useBytesM = onOffP; }
 | 
			
		||||
  void SetConfigDirectory(const char *directoryP);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										56
									
								
								device.c
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								device.c
									
									
									
									
									
								
							@@ -7,7 +7,7 @@
 | 
			
		||||
 | 
			
		||||
#include "config.h"
 | 
			
		||||
#include "discover.h"
 | 
			
		||||
#include "source.h"
 | 
			
		||||
#include "param.h"
 | 
			
		||||
#include "device.h"
 | 
			
		||||
 | 
			
		||||
#define SATIP_MAX_DEVICES MAXDEVICES
 | 
			
		||||
@@ -49,8 +49,6 @@ cSatipDevice::~cSatipDevice()
 | 
			
		||||
bool cSatipDevice::Initialize(unsigned int deviceCountP)
 | 
			
		||||
{
 | 
			
		||||
  debug("cSatipDevice::%s(%u)", __FUNCTION__, deviceCountP);
 | 
			
		||||
  new cSatipSourceParam('Y', "DVB-T (SAT>IP)");
 | 
			
		||||
  new cSatipSourceParam('Z', "DVB-S (SAT>IP)");
 | 
			
		||||
  if (deviceCountP > SATIP_MAX_DEVICES)
 | 
			
		||||
     deviceCountP = SATIP_MAX_DEVICES;
 | 
			
		||||
  for (unsigned int i = 0; i < deviceCountP; ++i)
 | 
			
		||||
@@ -158,6 +156,12 @@ cString cSatipDevice::DeviceName(void) const
 | 
			
		||||
  return deviceNameM;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool cSatipDevice::AvoidRecording(void) const
 | 
			
		||||
{
 | 
			
		||||
  //debug("cSatipDevice::%s(%u)", __FUNCTION__, deviceIndexM);
 | 
			
		||||
  return SatipConfig.IsOperatingModeLow();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int cSatipDevice::SignalStrength(void) const
 | 
			
		||||
{
 | 
			
		||||
  //debug("cSatipDevice::%s(%u)", __FUNCTION__, deviceIndexM);
 | 
			
		||||
@@ -173,12 +177,7 @@ int cSatipDevice::SignalQuality(void) const
 | 
			
		||||
bool cSatipDevice::ProvidesSource(int sourceP) const
 | 
			
		||||
{
 | 
			
		||||
  debug("cSatipDevice::%s(%u)", __FUNCTION__, deviceIndexM);
 | 
			
		||||
  int model = 0;
 | 
			
		||||
  if (cSource::IsType(sourceP, 'Z'))
 | 
			
		||||
     model |= cSatipServer::eSatipModelTypeDVBS2;
 | 
			
		||||
  if (cSource::IsType(sourceP, 'Y'))
 | 
			
		||||
     model |= cSatipServer::eSatipModelTypeDVBT2 | cSatipServer::eSatipModelTypeDVBT;
 | 
			
		||||
  return !!cSatipDiscover::GetInstance()->GetServer(model);
 | 
			
		||||
  return (!SatipConfig.IsOperatingModeOff() && !!cSatipDiscover::GetInstance()->GetServer(sourceP));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool cSatipDevice::ProvidesTransponder(const cChannel *channelP) const
 | 
			
		||||
@@ -230,7 +229,18 @@ bool cSatipDevice::ProvidesEIT(void) const
 | 
			
		||||
 | 
			
		||||
int cSatipDevice::NumProvidedSystems(void) const
 | 
			
		||||
{
 | 
			
		||||
  return cSatipDiscover::GetInstance()->NumProvidedSystems();
 | 
			
		||||
  int count = cSatipDiscover::GetInstance()->NumProvidedSystems();
 | 
			
		||||
  // Tweak the count according to operation mode
 | 
			
		||||
  if (SatipConfig.IsOperatingModeLow())
 | 
			
		||||
     count = 15;
 | 
			
		||||
  else if (SatipConfig.IsOperatingModeHigh())
 | 
			
		||||
     count = 1;
 | 
			
		||||
  // Clamp the count between 1 and 15
 | 
			
		||||
  if (count > 15)
 | 
			
		||||
     count = 15;
 | 
			
		||||
  else if (count < 1)
 | 
			
		||||
     count = 1;
 | 
			
		||||
  return count;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const cChannel *cSatipDevice::GetCurrentlyTunedTransponder(void) const
 | 
			
		||||
@@ -255,31 +265,19 @@ bool cSatipDevice::MaySwitchTransponder(const cChannel *channelP) const
 | 
			
		||||
bool cSatipDevice::SetChannelDevice(const cChannel *channelP, bool liveViewP)
 | 
			
		||||
{
 | 
			
		||||
  if (channelP) {
 | 
			
		||||
     cSatipTransponderParameters stp(channelP->Parameters());
 | 
			
		||||
     cString params = stp.UrlParameters(cSource::ToChar(channelP->Source()));
 | 
			
		||||
     cDvbTransponderParameters dtp(channelP->Parameters());
 | 
			
		||||
     cString params = GetTransponderUrlParameters(channelP);
 | 
			
		||||
     if (isempty(params)) {
 | 
			
		||||
        error("Unrecognized SAT>IP channel parameters: %s", channelP->Parameters());
 | 
			
		||||
        return false;
 | 
			
		||||
        }
 | 
			
		||||
     cString address;
 | 
			
		||||
     int mode = 0;
 | 
			
		||||
     if (cSource::IsType(channelP->Source(), 'Z'))
 | 
			
		||||
        mode |= cSatipServer::eSatipModelTypeDVBS2;
 | 
			
		||||
     if (cSource::IsType(channelP->Source(), 'Y'))
 | 
			
		||||
        mode |= stp.System() ? cSatipServer::eSatipModelTypeDVBT2 : cSatipServer::eSatipModelTypeDVBT;
 | 
			
		||||
     cSatipServer *server = cSatipDiscover::GetInstance()->GetServer(mode);
 | 
			
		||||
     cSatipServer *server = cSatipDiscover::GetInstance()->GetServer(channelP->Source(), dtp.System());
 | 
			
		||||
     if (!server) {
 | 
			
		||||
        debug("cSatipDevice::%s(%u): no suitable server found", __FUNCTION__, deviceIndexM);
 | 
			
		||||
        return false;
 | 
			
		||||
        }
 | 
			
		||||
     address = server->Address();
 | 
			
		||||
     float freq = channelP->Frequency();
 | 
			
		||||
     if (isempty(params)) {
 | 
			
		||||
        error("Unrecognized SAT>IP channel parameters: %s", channelP->Parameters());
 | 
			
		||||
        return false;
 | 
			
		||||
        }
 | 
			
		||||
     // Scale down frequencies to MHz
 | 
			
		||||
     while (freq > 20000L)
 | 
			
		||||
           freq /= 1000L;
 | 
			
		||||
     params = cString::sprintf("freq=%s%s", *dtoa(freq, "%.3f"), *params);
 | 
			
		||||
     if (cSource::IsType(channelP->Source(), 'Z'))
 | 
			
		||||
        params = cString::sprintf("%s&sr=%d", *params, channelP->Srate());
 | 
			
		||||
     if (pTunerM && pTunerM->SetSource(*address, *params, deviceIndexM)) {
 | 
			
		||||
        deviceNameM = cString::sprintf("%s %d %s:%s:%s", *DeviceType(), deviceIndexM, server->Address(), server->Model(), server->Description());
 | 
			
		||||
        channelM = *channelP;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								device.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								device.h
									
									
									
									
									
								
							@@ -56,6 +56,7 @@ private:
 | 
			
		||||
public:
 | 
			
		||||
  virtual cString DeviceType(void) const;
 | 
			
		||||
  virtual cString DeviceName(void) const;
 | 
			
		||||
  virtual bool AvoidRecording(void) const;
 | 
			
		||||
  virtual int SignalStrength(void) const;
 | 
			
		||||
  virtual int SignalQuality(void) const;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										23
									
								
								discover.c
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								discover.c
									
									
									
									
									
								
							@@ -241,12 +241,21 @@ bool cSatipDiscover::IsValidServer(cSatipServer *serverP)
 | 
			
		||||
  return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cSatipServer *cSatipDiscover::GetServer(int modelP)
 | 
			
		||||
cSatipServer *cSatipDiscover::GetServer(int sourceP, int systemP)
 | 
			
		||||
{
 | 
			
		||||
  //debug("cSatipDiscover::%s(%d)", __FUNCTION__, modelP);
 | 
			
		||||
  //debug("cSatipDiscover::%s(%d, %d)", __FUNCTION__, sourceP, systemP);
 | 
			
		||||
  cMutexLock MutexLock(&mutexM);
 | 
			
		||||
  int model = 0;
 | 
			
		||||
  if (cSource::IsType(sourceP, 'S'))
 | 
			
		||||
     model |= cSatipServer::eSatipModelTypeDVBS2;
 | 
			
		||||
  if (cSource::IsType(sourceP, 'T')) {
 | 
			
		||||
     if (systemP < 0)
 | 
			
		||||
        model |= cSatipServer::eSatipModelTypeDVBT2 | cSatipServer::eSatipModelTypeDVBT;
 | 
			
		||||
     else
 | 
			
		||||
        model |= systemP ? cSatipServer::eSatipModelTypeDVBT2 : cSatipServer::eSatipModelTypeDVBT;
 | 
			
		||||
     }
 | 
			
		||||
  for (cSatipServer *srv = serversM->First(); srv; srv = serversM->Next(srv)) {
 | 
			
		||||
      if (srv->Match(modelP))
 | 
			
		||||
      if (srv->Match(model))
 | 
			
		||||
         return srv;
 | 
			
		||||
      }
 | 
			
		||||
  return NULL;
 | 
			
		||||
@@ -275,9 +284,11 @@ int cSatipDiscover::NumProvidedSystems(void)
 | 
			
		||||
  cMutexLock MutexLock(&mutexM);
 | 
			
		||||
  int count = 0;
 | 
			
		||||
  for (cSatipServer *srv = serversM->First(); srv; srv = serversM->Next(srv)) {
 | 
			
		||||
      count += srv->Satellite();
 | 
			
		||||
      count += srv->Terrestrial();
 | 
			
		||||
      count += srv->Terrestrial2();
 | 
			
		||||
      // DVB-S*: qpsk, 8psk
 | 
			
		||||
      count += srv->Satellite() * 4;
 | 
			
		||||
      // DVB-T*: qpsk, qam16, qam64, qam256
 | 
			
		||||
      count += (srv->Terrestrial2() ? srv->Terrestrial2() : srv->Terrestrial()) * 4;
 | 
			
		||||
      }
 | 
			
		||||
  count = 1;
 | 
			
		||||
  return count;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -120,7 +120,7 @@ public:
 | 
			
		||||
  static void Destroy(void);
 | 
			
		||||
  virtual ~cSatipDiscover();
 | 
			
		||||
  bool IsValidServer(cSatipServer *serverP);
 | 
			
		||||
  cSatipServer *GetServer(int modelP);
 | 
			
		||||
  cSatipServer *GetServer(int sourceP, int systemP = -1);
 | 
			
		||||
  cSatipServers *GetServers(void);
 | 
			
		||||
  cString GetServerList(void);
 | 
			
		||||
  int NumProvidedSystems(void);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										168
									
								
								param.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								param.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,168 @@
 | 
			
		||||
/*
 | 
			
		||||
 * param.c: SAT>IP plugin for the Video Disk Recorder
 | 
			
		||||
 *
 | 
			
		||||
 * See the README file for copyright information and how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#include <vdr/dvbdevice.h>
 | 
			
		||||
#include "common.h"
 | 
			
		||||
#include "param.h"
 | 
			
		||||
 | 
			
		||||
// --- cSatipParameterMaps ----------------------------------------------------
 | 
			
		||||
 | 
			
		||||
struct tSatipParameterMap {
 | 
			
		||||
  int         driverValue;
 | 
			
		||||
  const char *satipString;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipBandwidthValues[] = {
 | 
			
		||||
  {  5000000, "bw=5"     },
 | 
			
		||||
  {  6000000, "bw=6"     },
 | 
			
		||||
  {  7000000, "bw=7"     },
 | 
			
		||||
  {  8000000, "bw=8"     },
 | 
			
		||||
  { 10000000, "bw=10"    },
 | 
			
		||||
  {  1712000, "bw=1.712" },
 | 
			
		||||
  {       -1, NULL       }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipPilotValues[] = {
 | 
			
		||||
  {  PILOT_OFF, "plts=off" },
 | 
			
		||||
  {   PILOT_ON, "plts=on"  },
 | 
			
		||||
  { PILOT_AUTO, ""         },
 | 
			
		||||
  {         -1, NULL       }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipSisoMisoValues[] = {
 | 
			
		||||
  {   0, "sm=0" },
 | 
			
		||||
  {   1, "sm=1" },
 | 
			
		||||
  {  -1, NULL   }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipCodeRateValues[] = {
 | 
			
		||||
  { FEC_NONE, ""        },
 | 
			
		||||
  {  FEC_1_2, "fec=12"  },
 | 
			
		||||
  {  FEC_2_3, "fec=23"  },
 | 
			
		||||
  {  FEC_3_4, "fec=34"  },
 | 
			
		||||
  {  FEC_3_5, "fec=35"  },
 | 
			
		||||
  {  FEC_4_5, "fec=45"  },
 | 
			
		||||
  {  FEC_5_6, "fec=56"  },
 | 
			
		||||
  {  FEC_6_7, "fec=67"  },
 | 
			
		||||
  {  FEC_7_8, "fec=78"  },
 | 
			
		||||
  {  FEC_8_9, "fec=89"  },
 | 
			
		||||
  { FEC_9_10, "fec=910" },
 | 
			
		||||
  { FEC_AUTO, ""        },
 | 
			
		||||
  {       -1, NULL      }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipModulationValues[] = {
 | 
			
		||||
  {     QPSK, "mtype=qpsk"   },
 | 
			
		||||
  {    PSK_8, "mtype=8psk"   },
 | 
			
		||||
  {   QAM_16, "mtype=16qam"  },
 | 
			
		||||
  {   QAM_64, "mtype=64qam"  },
 | 
			
		||||
  {  QAM_256, "mtype=256qam" },
 | 
			
		||||
  { QAM_AUTO, ""             },
 | 
			
		||||
  {       -1, NULL           }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipSystemValuesSat[] = {
 | 
			
		||||
  {   0, "msys=dvbs"  },
 | 
			
		||||
  {   1, "msys=dvbs2" },
 | 
			
		||||
  {  -1, NULL         }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipSystemValuesTerr[] = {
 | 
			
		||||
  {   0, "msys=dvbt"  },
 | 
			
		||||
  {   1, "msys=dvbt2" },
 | 
			
		||||
  {  -1, NULL         }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipTransmissionValues[] = {
 | 
			
		||||
  {   TRANSMISSION_MODE_1K, "tmode=1k"  },
 | 
			
		||||
  {   TRANSMISSION_MODE_2K, "tmode=2k"  },
 | 
			
		||||
  {   TRANSMISSION_MODE_4K, "tmode=4k"  },
 | 
			
		||||
  {   TRANSMISSION_MODE_8K, "tmode=8k"  },
 | 
			
		||||
  {  TRANSMISSION_MODE_16K, "tmode=16k" },
 | 
			
		||||
  {  TRANSMISSION_MODE_32K, "tmode=32k" },
 | 
			
		||||
  { TRANSMISSION_MODE_AUTO, ""          },
 | 
			
		||||
  {                     -1, NULL        }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipGuardValues[] = {
 | 
			
		||||
  {    GUARD_INTERVAL_1_4, "gi=14"    },
 | 
			
		||||
  {    GUARD_INTERVAL_1_8, "gi=18"    },
 | 
			
		||||
  {   GUARD_INTERVAL_1_16, "gi=116"   },
 | 
			
		||||
  {   GUARD_INTERVAL_1_32, "gi=132"   },
 | 
			
		||||
  {  GUARD_INTERVAL_1_128, "gi=1128"  },
 | 
			
		||||
  { GUARD_INTERVAL_19_128, "gi=19128" },
 | 
			
		||||
  { GUARD_INTERVAL_19_256, "gi=19256" },
 | 
			
		||||
  {   GUARD_INTERVAL_AUTO, ""         },
 | 
			
		||||
  {                    -1, NULL       }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipRollOffValues[] = {
 | 
			
		||||
  { ROLLOFF_AUTO, ""        },
 | 
			
		||||
  {   ROLLOFF_20, "ro=0.20" },
 | 
			
		||||
  {   ROLLOFF_25, "ro=0.25" },
 | 
			
		||||
  {   ROLLOFF_35, "ro=0.35" },
 | 
			
		||||
  {           -1, NULL      }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int SatipUserIndex(int valueP, const tSatipParameterMap *mapP)
 | 
			
		||||
{
 | 
			
		||||
  const tSatipParameterMap *map = mapP;
 | 
			
		||||
  while (map && map->driverValue != -1) {
 | 
			
		||||
        if (map->driverValue == valueP)
 | 
			
		||||
           return map - mapP;
 | 
			
		||||
        map++;
 | 
			
		||||
        }
 | 
			
		||||
  return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int PrintUrlString(char *ptrP, int valueP, const tSatipParameterMap *mapP)
 | 
			
		||||
{
 | 
			
		||||
  int n = SatipUserIndex(valueP, mapP);
 | 
			
		||||
  return (n >= 0) ? sprintf(ptrP, "&%s", tr(mapP[n].satipString)) : 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cString GetTransponderUrlParameters(const cChannel *channelP)
 | 
			
		||||
{
 | 
			
		||||
  if (channelP) {
 | 
			
		||||
     cDvbTransponderParameters dtp(channelP->Parameters());
 | 
			
		||||
     int Pilot = PILOT_AUTO; // should be added into cDvbTransponderParameters
 | 
			
		||||
     int T2SystemId = 0;     // should be added into cDvbTransponderParameters
 | 
			
		||||
     int SisoMiso = 0;       // should be added into cDvbTransponderParameters
 | 
			
		||||
     float freq = channelP->Frequency();
 | 
			
		||||
     char type = cSource::ToChar(channelP->Source());
 | 
			
		||||
     cSource *source = Sources.Get(channelP->Source());
 | 
			
		||||
     int src = (strchr("S", type) && source) ? atoi(source->Description()) : 1;
 | 
			
		||||
     char buffer[255];
 | 
			
		||||
     char *q = buffer;
 | 
			
		||||
     *q = 0;
 | 
			
		||||
     // Scale down frequencies to MHz
 | 
			
		||||
     while (freq > 20000L)
 | 
			
		||||
           freq /= 1000L;
 | 
			
		||||
     q += sprintf(q, "freq=%s", *dtoa(freq, "%.3f"));
 | 
			
		||||
#define ST(s) if (strchr(s, type) && (strchr(s, '0' + dtp.System() + 1) || strchr(s, '*')))
 | 
			
		||||
     ST("S *") q += sprintf(q,        "&src=%d",          ((src > 0) && (src <= 255)) ? src : 1);
 | 
			
		||||
     ST("S *") q += sprintf(q,        "&sr=%d",           channelP->Srate());
 | 
			
		||||
     ST("S *") q += sprintf(q,        "&pol=%c",          tolower(dtp.Polarization()));
 | 
			
		||||
     ST(" T2") q += sprintf(q,        "&plp=%d",          dtp.StreamId());
 | 
			
		||||
     ST(" T2") q += sprintf(q,        "&t2id=%d",         T2SystemId);
 | 
			
		||||
     ST(" T2") q += PrintUrlString(q, SisoMiso,           SatipSisoMisoValues);
 | 
			
		||||
     ST(" T*") q += PrintUrlString(q, dtp.Bandwidth(),    SatipBandwidthValues);
 | 
			
		||||
     ST(" T*") q += PrintUrlString(q, dtp.Guard(),        SatipGuardValues);
 | 
			
		||||
     ST("ST*") q += PrintUrlString(q, dtp.CoderateH(),    SatipCodeRateValues);
 | 
			
		||||
     ST("S 2") q += PrintUrlString(q, Pilot,              SatipPilotValues);
 | 
			
		||||
     ST("S 2") q += PrintUrlString(q, dtp.Modulation(),   SatipModulationValues);
 | 
			
		||||
     ST(" T*") q += PrintUrlString(q, dtp.Modulation(),   SatipModulationValues);
 | 
			
		||||
     ST("S 2") q += PrintUrlString(q, dtp.RollOff(),      SatipRollOffValues);
 | 
			
		||||
     ST("S *") q += PrintUrlString(q, dtp.System(),       SatipSystemValuesSat);
 | 
			
		||||
     ST(" T*") q += PrintUrlString(q, dtp.System(),       SatipSystemValuesTerr);
 | 
			
		||||
     ST(" T*") q += PrintUrlString(q, dtp.Transmission(), SatipTransmissionValues);
 | 
			
		||||
#undef ST
 | 
			
		||||
     return buffer;
 | 
			
		||||
     }
 | 
			
		||||
  return NULL;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								param.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								param.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
/*
 | 
			
		||||
 * param.h: SAT>IP plugin for the Video Disk Recorder
 | 
			
		||||
 *
 | 
			
		||||
 * See the README file for copyright information and how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __SATIP_PARAM_H
 | 
			
		||||
#define __SATIP_PARAM_H
 | 
			
		||||
 | 
			
		||||
#include "common.h"
 | 
			
		||||
 | 
			
		||||
cString GetTransponderUrlParameters(const cChannel *channelP);
 | 
			
		||||
 | 
			
		||||
#endif // __SATIP_PARAM_H
 | 
			
		||||
							
								
								
									
										76
									
								
								po/de_DE.po
									
									
									
									
									
								
							
							
						
						
									
										76
									
								
								po/de_DE.po
									
									
									
									
									
								
							@@ -5,10 +5,10 @@
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: vdr-satip 0.0.1\n"
 | 
			
		||||
"Project-Id-Version: vdr-satip 0.0.2\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: <see README>\n"
 | 
			
		||||
"POT-Creation-Date: 2014-03-08 03:08+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2014-03-08 03:08+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2014-03-15 03:15+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2014-03-15 03:15+0200\n"
 | 
			
		||||
"Last-Translator: Frank Neumann <fnu@yavdr.org>\n"
 | 
			
		||||
"Language-Team: German <vdr@linuxtv.org>\n"
 | 
			
		||||
"Language: de\n"
 | 
			
		||||
@@ -43,9 +43,6 @@ msgstr "SAT>IP Geräte"
 | 
			
		||||
msgid "SAT>IP Device"
 | 
			
		||||
msgstr "SAT>IP Gerät"
 | 
			
		||||
 | 
			
		||||
msgid "Button$Scan"
 | 
			
		||||
msgstr "Starte Kanalsuche"
 | 
			
		||||
 | 
			
		||||
msgid "SAT>IP Information"
 | 
			
		||||
msgstr "SAT>IP Informationen"
 | 
			
		||||
 | 
			
		||||
@@ -64,6 +61,36 @@ msgstr "Bits/Bytes"
 | 
			
		||||
msgid "SAT>IP information not available!"
 | 
			
		||||
msgstr "Keine SAT>IP Informationen verfügbar!"
 | 
			
		||||
 | 
			
		||||
msgid "off"
 | 
			
		||||
msgstr "aus"
 | 
			
		||||
 | 
			
		||||
msgid "low"
 | 
			
		||||
msgstr "niedrig"
 | 
			
		||||
 | 
			
		||||
msgid "normal"
 | 
			
		||||
msgstr "normal"
 | 
			
		||||
 | 
			
		||||
msgid "high"
 | 
			
		||||
msgstr "hoch"
 | 
			
		||||
 | 
			
		||||
msgid "Operating mode"
 | 
			
		||||
msgstr "Betriebsmodus"
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"Define the used operating mode for all SAT>IP devices:\n"
 | 
			
		||||
"\n"
 | 
			
		||||
"off - devices are disabled\n"
 | 
			
		||||
"low - devices are working at the lowest priority\n"
 | 
			
		||||
"normal - devices are working within normal parameters\n"
 | 
			
		||||
"high - devices are working at the highest priority"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Bestimme den Betriebsmodus für alle SAT>IP Geräte:\n"
 | 
			
		||||
"\n"
 | 
			
		||||
"aus - Geräte sind abgeschaltet\n"
 | 
			
		||||
"niedrig - Geräte arbeiten mit geringster Priorität\n"
 | 
			
		||||
"normal - Geräte arbeiten innerhalb der gewöhnlichen Parameter\n"
 | 
			
		||||
"hoch - Geräte arbeiten mit höchste Priorität"
 | 
			
		||||
 | 
			
		||||
msgid "Enable EPG scanning"
 | 
			
		||||
msgstr "Aktiviere EPG Aktualisierung"
 | 
			
		||||
 | 
			
		||||
@@ -76,7 +103,6 @@ msgstr ""
 | 
			
		||||
"\n"
 | 
			
		||||
"Diese Einstellung schaltet die automatische EIT Aktualisierung für alle SAT>IP Geräte."
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
msgid "Disabled filters"
 | 
			
		||||
msgstr "Deaktivierte Filter"
 | 
			
		||||
 | 
			
		||||
@@ -103,39 +129,3 @@ msgstr "Aktive SAT>IP Geräte:"
 | 
			
		||||
 | 
			
		||||
msgid "Help"
 | 
			
		||||
msgstr "Hilfe"
 | 
			
		||||
 | 
			
		||||
msgid "off"
 | 
			
		||||
msgstr "aus"
 | 
			
		||||
 | 
			
		||||
msgid "on"
 | 
			
		||||
msgstr "ein"
 | 
			
		||||
 | 
			
		||||
msgid "auto"
 | 
			
		||||
msgstr "auto"
 | 
			
		||||
 | 
			
		||||
msgid "SISO"
 | 
			
		||||
msgstr "SISO"
 | 
			
		||||
 | 
			
		||||
msgid "MISO"
 | 
			
		||||
msgstr "MISO"
 | 
			
		||||
 | 
			
		||||
msgid "Nid"
 | 
			
		||||
msgstr "Nid"
 | 
			
		||||
 | 
			
		||||
msgid "Tid"
 | 
			
		||||
msgstr "Tid"
 | 
			
		||||
 | 
			
		||||
msgid "Rid"
 | 
			
		||||
msgstr "Rid"
 | 
			
		||||
 | 
			
		||||
msgid "SignalSource"
 | 
			
		||||
msgstr "Signalquelle"
 | 
			
		||||
 | 
			
		||||
msgid "PilotTones"
 | 
			
		||||
msgstr "Pilottöne"
 | 
			
		||||
 | 
			
		||||
msgid "T2SystemId"
 | 
			
		||||
msgstr "T2-Systemkennung"
 | 
			
		||||
 | 
			
		||||
msgid "SISO/MISO"
 | 
			
		||||
msgstr "SISO/MISO"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										74
									
								
								po/fi_FI.po
									
									
									
									
									
								
							
							
						
						
									
										74
									
								
								po/fi_FI.po
									
									
									
									
									
								
							@@ -5,10 +5,10 @@
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: vdr-satip 0.0.1\n"
 | 
			
		||||
"Project-Id-Version: vdr-satip 0.0.2\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: <see README>\n"
 | 
			
		||||
"POT-Creation-Date: 2014-03-08 03:08+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2014-03-08 03:08+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2014-03-15 03:15+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2014-03-15 03:15+0200\n"
 | 
			
		||||
"Last-Translator: Rolf Ahrenberg\n"
 | 
			
		||||
"Language-Team: Finnish <vdr@linuxtv.org>\n"
 | 
			
		||||
"Language: fi\n"
 | 
			
		||||
@@ -43,9 +43,6 @@ msgstr "SAT>IP-laitteet"
 | 
			
		||||
msgid "SAT>IP Device"
 | 
			
		||||
msgstr "SAT>IP-laite"
 | 
			
		||||
 | 
			
		||||
msgid "Button$Scan"
 | 
			
		||||
msgstr "Kanavahaku"
 | 
			
		||||
 | 
			
		||||
msgid "SAT>IP Information"
 | 
			
		||||
msgstr "SAT>IP-tiedot"
 | 
			
		||||
 | 
			
		||||
@@ -64,6 +61,35 @@ msgstr "Bitit/tavut"
 | 
			
		||||
msgid "SAT>IP information not available!"
 | 
			
		||||
msgstr "SAT>IP-tietoja ei saatavilla!"
 | 
			
		||||
 | 
			
		||||
msgid "off"
 | 
			
		||||
msgstr "ei käytössä"
 | 
			
		||||
 | 
			
		||||
msgid "low"
 | 
			
		||||
msgstr "matala"
 | 
			
		||||
 | 
			
		||||
msgid "normal"
 | 
			
		||||
msgstr "normaali"
 | 
			
		||||
 | 
			
		||||
msgid "high"
 | 
			
		||||
msgstr "korkea"
 | 
			
		||||
 | 
			
		||||
msgid "Operating mode"
 | 
			
		||||
msgstr "Laitteiden toimintatapa"
 | 
			
		||||
 | 
			
		||||
msgid ""
 | 
			
		||||
"Define the used operating mode for all SAT>IP devices:\n"
 | 
			
		||||
"\n"
 | 
			
		||||
"off - devices are disabled\n"
 | 
			
		||||
"low - devices are working at the lowest priority\n"
 | 
			
		||||
"normal - devices are working within normal parameters\n"
 | 
			
		||||
"high - devices are working at the highest priority"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Määrittele toimintamoodi SAT>IP-laitteille:\n"
 | 
			
		||||
"ei käytössä - laitteet ovat pois käytöstä\n"
 | 
			
		||||
"matala - laitteet toimivat matalalla prioriteetilla\n"
 | 
			
		||||
"normaali - laitteet toimivat normaalilla prioriteetilla\n"
 | 
			
		||||
"korkea - laitteet toimivat korkealla prioriteetilla"
 | 
			
		||||
 | 
			
		||||
msgid "Enable EPG scanning"
 | 
			
		||||
msgstr "Käytä ohjelmaoppaan taustapäivitystä"
 | 
			
		||||
 | 
			
		||||
@@ -102,39 +128,3 @@ msgstr "Aktiiviset SAT>IP-laitteet:"
 | 
			
		||||
 | 
			
		||||
msgid "Help"
 | 
			
		||||
msgstr "Opaste"
 | 
			
		||||
 | 
			
		||||
msgid "off"
 | 
			
		||||
msgstr "pois"
 | 
			
		||||
 | 
			
		||||
msgid "on"
 | 
			
		||||
msgstr "päällä"
 | 
			
		||||
 | 
			
		||||
msgid "auto"
 | 
			
		||||
msgstr "auto"
 | 
			
		||||
 | 
			
		||||
msgid "SISO"
 | 
			
		||||
msgstr "SISO"
 | 
			
		||||
 | 
			
		||||
msgid "MISO"
 | 
			
		||||
msgstr "MISO"
 | 
			
		||||
 | 
			
		||||
msgid "Nid"
 | 
			
		||||
msgstr "Verkko-ID"
 | 
			
		||||
 | 
			
		||||
msgid "Tid"
 | 
			
		||||
msgstr "Lähete-ID"
 | 
			
		||||
 | 
			
		||||
msgid "Rid"
 | 
			
		||||
msgstr "Radio-ID"
 | 
			
		||||
 | 
			
		||||
msgid "SignalSource"
 | 
			
		||||
msgstr "Signaalin lähde"
 | 
			
		||||
 | 
			
		||||
msgid "PilotTones"
 | 
			
		||||
msgstr "Pilottiäänet"
 | 
			
		||||
 | 
			
		||||
msgid "T2SystemId"
 | 
			
		||||
msgstr "T2-järjestelmä"
 | 
			
		||||
 | 
			
		||||
msgid "SISO/MISO"
 | 
			
		||||
msgstr "SISO/MISO"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										28
									
								
								satip.c
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								satip.c
									
									
									
									
									
								
							@@ -21,7 +21,7 @@
 | 
			
		||||
#define GITVERSION ""
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
       const char VERSION[]     = "0.0.1" GITVERSION;
 | 
			
		||||
       const char VERSION[]     = "0.0.2" GITVERSION;
 | 
			
		||||
static const char DESCRIPTION[] = trNOOP("SAT>IP Devices");
 | 
			
		||||
 | 
			
		||||
class cPluginSatip : public cPlugin {
 | 
			
		||||
@@ -194,6 +194,8 @@ bool cPluginSatip::SetupParse(const char *nameP, const char *valueP)
 | 
			
		||||
{
 | 
			
		||||
  debug("cPluginSatip::%s()", __FUNCTION__);
 | 
			
		||||
  // Parse your own setup parameters and store their values.
 | 
			
		||||
  if (!strcasecmp(nameP, "OperatingMode"))
 | 
			
		||||
     SatipConfig.SetOperatingMode(atoi(valueP));
 | 
			
		||||
  if (!strcasecmp(nameP, "EnableEITScan"))
 | 
			
		||||
     SatipConfig.SetEITScan(atoi(valueP));
 | 
			
		||||
  else if (!strcasecmp(nameP, "DisabledFilters")) {
 | 
			
		||||
@@ -229,6 +231,8 @@ const char **cPluginSatip::SVDRPHelpPages(void)
 | 
			
		||||
    "    Lists active SAT>IP servers.\n",
 | 
			
		||||
    "CONT\n"
 | 
			
		||||
    "    Shows SAT>IP device count.\n",
 | 
			
		||||
    "OPER\n"
 | 
			
		||||
    "    Toggles operating mode of SAT>IP devices.\n",
 | 
			
		||||
    NULL
 | 
			
		||||
    };
 | 
			
		||||
  return HelpPages;
 | 
			
		||||
@@ -284,6 +288,28 @@ cString cPluginSatip::SVDRPCommand(const char *commandP, const char *optionP, in
 | 
			
		||||
  else if (strcasecmp(commandP, "CONT") == 0) {
 | 
			
		||||
     return cString::sprintf("SAT>IP device count: %u", cSatipDevice::Count());
 | 
			
		||||
     }
 | 
			
		||||
  else if (strcasecmp(commandP, "OPER") == 0) {
 | 
			
		||||
     cString mode;
 | 
			
		||||
     SatipConfig.ToggleOperatingMode();
 | 
			
		||||
     switch (SatipConfig.GetOperatingMode()) {
 | 
			
		||||
       case cSatipConfig::OPERATING_MODE_OFF:
 | 
			
		||||
            mode = "off";
 | 
			
		||||
            break;
 | 
			
		||||
       case cSatipConfig::OPERATING_MODE_LOW:
 | 
			
		||||
            mode = "low";
 | 
			
		||||
            break;
 | 
			
		||||
       case cSatipConfig::OPERATING_MODE_NORMAL:
 | 
			
		||||
            mode = "normal";
 | 
			
		||||
            break;
 | 
			
		||||
       case cSatipConfig::OPERATING_MODE_HIGH:
 | 
			
		||||
            mode = "high";
 | 
			
		||||
            break;
 | 
			
		||||
       default:
 | 
			
		||||
            mode = "unknown";
 | 
			
		||||
            break;
 | 
			
		||||
       }
 | 
			
		||||
     return cString::sprintf("SAT>IP operating mode: %s\n", *mode);
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
  return NULL;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										52
									
								
								setup.c
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								setup.c
									
									
									
									
									
								
							@@ -14,9 +14,9 @@
 | 
			
		||||
#include "discover.h"
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
// --- cSatipMenuScan ---------------------------------------------------------
 | 
			
		||||
// --- cSatipServerInfo -------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class cSatipMenuScan : public cOsdMenu
 | 
			
		||||
class cSatipServerInfo : public cOsdMenu
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
  enum {
 | 
			
		||||
@@ -26,13 +26,13 @@ private:
 | 
			
		||||
  cTimeMs timeoutM;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  cSatipMenuScan(cSatipServer *serverP);
 | 
			
		||||
  virtual ~cSatipMenuScan();
 | 
			
		||||
  cSatipServerInfo(cSatipServer *serverP);
 | 
			
		||||
  virtual ~cSatipServerInfo();
 | 
			
		||||
  virtual void Display(void);
 | 
			
		||||
  virtual eOSState ProcessKey(eKeys keyP);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
cSatipMenuScan::cSatipMenuScan(cSatipServer *serverP)
 | 
			
		||||
cSatipServerInfo::cSatipServerInfo(cSatipServer *serverP)
 | 
			
		||||
: cOsdMenu(tr("SAT>IP Device")),
 | 
			
		||||
  textM("")
 | 
			
		||||
{
 | 
			
		||||
@@ -45,14 +45,14 @@ cSatipMenuScan::cSatipMenuScan(cSatipServer *serverP)
 | 
			
		||||
     if (serverP->Description())
 | 
			
		||||
        textM = cString::sprintf("%s\nDescription:\t%s", *textM, serverP->Description());
 | 
			
		||||
     }
 | 
			
		||||
  SetHelp(tr("Button$Scan"), NULL, NULL, NULL);
 | 
			
		||||
  SetHelp(NULL, NULL, NULL, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cSatipMenuScan::~cSatipMenuScan()
 | 
			
		||||
cSatipServerInfo::~cSatipServerInfo()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cSatipMenuScan::Display(void)
 | 
			
		||||
void cSatipServerInfo::Display(void)
 | 
			
		||||
{
 | 
			
		||||
  cOsdMenu::Display();
 | 
			
		||||
  DisplayMenu()->SetText(textM, true);
 | 
			
		||||
@@ -60,7 +60,7 @@ void cSatipMenuScan::Display(void)
 | 
			
		||||
     cStatus::MsgOsdTextItem(textM);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
eOSState cSatipMenuScan::ProcessKey(eKeys keyP)
 | 
			
		||||
eOSState cSatipServerInfo::ProcessKey(eKeys keyP)
 | 
			
		||||
{
 | 
			
		||||
  eOSState state = cOsdMenu::ProcessKey(keyP);
 | 
			
		||||
 | 
			
		||||
@@ -75,7 +75,7 @@ eOSState cSatipMenuScan::ProcessKey(eKeys keyP)
 | 
			
		||||
  return state;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// --- cSatipMenuInfo ---------------------------------------------------------
 | 
			
		||||
// --- cSatipServerItem -------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class cSatipServerItem : public cOsdItem {
 | 
			
		||||
private:
 | 
			
		||||
@@ -203,10 +203,15 @@ eOSState cSatipMenuInfo::ProcessKey(eKeys keyP)
 | 
			
		||||
 | 
			
		||||
cSatipPluginSetup::cSatipPluginSetup()
 | 
			
		||||
: deviceCountM(0),
 | 
			
		||||
  operatingModeM(SatipConfig.GetOperatingMode()),
 | 
			
		||||
  eitScanM(SatipConfig.GetEITScan()),
 | 
			
		||||
  numDisabledFiltersM(SatipConfig.GetDisabledFiltersCount())
 | 
			
		||||
{
 | 
			
		||||
  debug("cSatipPluginSetup::%s()", __FUNCTION__);
 | 
			
		||||
  operatingModeTextsM[0] = tr("off");
 | 
			
		||||
  operatingModeTextsM[1] = tr("low");
 | 
			
		||||
  operatingModeTextsM[2] = tr("normal");
 | 
			
		||||
  operatingModeTextsM[3] = tr("high");
 | 
			
		||||
  if (numDisabledFiltersM > SECTION_FILTER_TABLE_SIZE)
 | 
			
		||||
     numDisabledFiltersM = SECTION_FILTER_TABLE_SIZE;
 | 
			
		||||
  for (int i = 0; i < SECTION_FILTER_TABLE_SIZE; ++i) {
 | 
			
		||||
@@ -225,17 +230,21 @@ void cSatipPluginSetup::Setup(void)
 | 
			
		||||
  Clear();
 | 
			
		||||
  helpM.Clear();
 | 
			
		||||
 | 
			
		||||
  Add(new cMenuEditBoolItem(tr("Enable EPG scanning"), &eitScanM));
 | 
			
		||||
  helpM.Append(tr("Define whether the EPG background scanning shall be used.\n\nThis setting disables the automatic EIT scanning functionality for all SAT>IP devices."));
 | 
			
		||||
  Add(new cMenuEditStraItem(tr("Operating mode"), &operatingModeM, ELEMENTS(operatingModeTextsM), operatingModeTextsM));
 | 
			
		||||
  helpM.Append(tr("Define the used operating mode for all SAT>IP devices:\n\noff - devices are disabled\nlow - devices are working at the lowest priority\nnormal - devices are working within normal parameters\nhigh - devices are working at the highest priority"));
 | 
			
		||||
 | 
			
		||||
  Add(new cMenuEditIntItem(tr("Disabled filters"), &numDisabledFiltersM, 0, SECTION_FILTER_TABLE_SIZE, tr("none")));
 | 
			
		||||
  helpM.Append(tr("Define number of section filters to be disabled.\n\nCertain section filters might cause some unwanted behaviour to VDR such as time being falsely synchronized. By black-listing the filters here useful section data can be left intact for VDR to process."));
 | 
			
		||||
  if (operatingModeM) {
 | 
			
		||||
     Add(new cMenuEditBoolItem(tr("Enable EPG scanning"), &eitScanM));
 | 
			
		||||
     helpM.Append(tr("Define whether the EPG background scanning shall be used.\n\nThis setting disables the automatic EIT scanning functionality for all SAT>IP devices."));
 | 
			
		||||
 | 
			
		||||
  for (int i = 0; i < numDisabledFiltersM; ++i) {
 | 
			
		||||
      Add(new cMenuEditStraItem(*cString::sprintf(" %s %d", tr("Filter"), i + 1), &disabledFilterIndexesM[i], SECTION_FILTER_TABLE_SIZE, disabledFilterNamesM));
 | 
			
		||||
      helpM.Append(tr("Define an ill-behaving filter to be blacklisted."));
 | 
			
		||||
      }
 | 
			
		||||
     Add(new cMenuEditIntItem(tr("Disabled filters"), &numDisabledFiltersM, 0, SECTION_FILTER_TABLE_SIZE, tr("none")));
 | 
			
		||||
     helpM.Append(tr("Define number of section filters to be disabled.\n\nCertain section filters might cause some unwanted behaviour to VDR such as time being falsely synchronized. By black-listing the filters here useful section data can be left intact for VDR to process."));
 | 
			
		||||
 | 
			
		||||
     for (int i = 0; i < numDisabledFiltersM; ++i) {
 | 
			
		||||
         Add(new cMenuEditStraItem(*cString::sprintf(" %s %d", tr("Filter"), i + 1), &disabledFilterIndexesM[i], SECTION_FILTER_TABLE_SIZE, disabledFilterNamesM));
 | 
			
		||||
         helpM.Append(tr("Define an ill-behaving filter to be blacklisted."));
 | 
			
		||||
         }
 | 
			
		||||
     }
 | 
			
		||||
  Add(new cOsdItem(tr("Active SAT>IP devices:"), osUnknown, false));
 | 
			
		||||
  helpM.Append("");
 | 
			
		||||
 | 
			
		||||
@@ -258,7 +267,7 @@ eOSState cSatipPluginSetup::ChannelScan(void)
 | 
			
		||||
 | 
			
		||||
  cSatipServerItem *item = reinterpret_cast<cSatipServerItem *>(Get(Current()));
 | 
			
		||||
  if (item && cSatipDiscover::GetInstance()->IsValidServer(item->Server()))
 | 
			
		||||
     return AddSubMenu(new cSatipMenuScan(item->Server()));
 | 
			
		||||
     return AddSubMenu(new cSatipServerInfo(item->Server()));
 | 
			
		||||
 | 
			
		||||
  return osContinue;
 | 
			
		||||
}
 | 
			
		||||
@@ -275,6 +284,7 @@ eOSState cSatipPluginSetup::ShowInfo(void)
 | 
			
		||||
eOSState cSatipPluginSetup::ProcessKey(eKeys keyP)
 | 
			
		||||
{
 | 
			
		||||
  bool hadSubMenu = HasSubMenu();
 | 
			
		||||
  int oldOperatingMode = operatingModeM;
 | 
			
		||||
  int oldNumDisabledFilters = numDisabledFiltersM;
 | 
			
		||||
  eOSState state = cMenuSetupPage::ProcessKey(keyP);
 | 
			
		||||
 | 
			
		||||
@@ -295,7 +305,7 @@ eOSState cSatipPluginSetup::ProcessKey(eKeys keyP)
 | 
			
		||||
  if ((keyP == kNone) && (cSatipDiscover::GetInstance()->GetServers()->Count() != deviceCountM))
 | 
			
		||||
     Setup();
 | 
			
		||||
 | 
			
		||||
  if ((keyP != kNone) && (numDisabledFiltersM != oldNumDisabledFilters)) {
 | 
			
		||||
  if ((keyP != kNone) && ((numDisabledFiltersM != oldNumDisabledFilters) || (operatingModeM != oldOperatingMode))) {
 | 
			
		||||
     while ((numDisabledFiltersM < oldNumDisabledFilters) && (oldNumDisabledFilters > 0))
 | 
			
		||||
           disabledFilterIndexesM[--oldNumDisabledFilters] = -1;
 | 
			
		||||
     Setup();
 | 
			
		||||
@@ -326,9 +336,11 @@ void cSatipPluginSetup::StoreFilters(const char *nameP, int *valuesP)
 | 
			
		||||
void cSatipPluginSetup::Store(void)
 | 
			
		||||
{
 | 
			
		||||
  // Store values into setup.conf
 | 
			
		||||
  SetupStore("OperatingMode", operatingModeM);
 | 
			
		||||
  SetupStore("EnableEITScan", eitScanM);
 | 
			
		||||
  StoreFilters("DisabledFilters", disabledFilterIndexesM);
 | 
			
		||||
  // Update global config
 | 
			
		||||
  SatipConfig.SetOperatingMode(operatingModeM);
 | 
			
		||||
  SatipConfig.SetEITScan(eitScanM);
 | 
			
		||||
  for (int i = 0; i < SECTION_FILTER_TABLE_SIZE; ++i)
 | 
			
		||||
      SatipConfig.SetDisabledFilters(i, disabledFilterIndexesM[i]);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								setup.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								setup.h
									
									
									
									
									
								
							@@ -16,6 +16,8 @@ class cSatipPluginSetup : public cMenuSetupPage
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
  int deviceCountM;
 | 
			
		||||
  int operatingModeM;
 | 
			
		||||
  const char *operatingModeTextsM[4];
 | 
			
		||||
  int eitScanM;
 | 
			
		||||
  int numDisabledFiltersM;
 | 
			
		||||
  int disabledFilterIndexesM[SECTION_FILTER_TABLE_SIZE];
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										384
									
								
								source.c
									
									
									
									
									
								
							
							
						
						
									
										384
									
								
								source.c
									
									
									
									
									
								
							@@ -1,384 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * source.c: SAT>IP plugin for the Video Disk Recorder
 | 
			
		||||
 *
 | 
			
		||||
 * See the README file for copyright information and how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#include "common.h"
 | 
			
		||||
#include "source.h"
 | 
			
		||||
 | 
			
		||||
// --- cSatipParameterMaps ----------------------------------------------------
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipBandwidthValues[] = {
 | 
			
		||||
  {    5, "5 MHz",     "bw=5"     },
 | 
			
		||||
  {    6, "6 MHz",     "bw=6"     },
 | 
			
		||||
  {    7, "7 MHz",     "bw=7"     },
 | 
			
		||||
  {    8, "8 MHz",     "bw=8"     },
 | 
			
		||||
  {   10, "10 MHz",    "bw=10"    },
 | 
			
		||||
  { 1712, "1.712 MHz", "bw=1.712" },
 | 
			
		||||
  {   -1, NULL,        NULL       }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipPilotTonesValues[] = {
 | 
			
		||||
  {   0, trNOOP("off"),  "plts=off" },
 | 
			
		||||
  {   1, trNOOP("on"),   "plts=on"  },
 | 
			
		||||
  { 999, trNOOP("auto"), ""         },
 | 
			
		||||
  {  -1, NULL,           NULL       }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipSisoMisoValues[] = {
 | 
			
		||||
  {   0, trNOOP("SISO"), "sm=0" },
 | 
			
		||||
  {   1, trNOOP("MISO"), "sm=1" },
 | 
			
		||||
  { 999, trNOOP("auto"), ""     },
 | 
			
		||||
  {  -1, NULL,           NULL   }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipCodeRateValues[] = {
 | 
			
		||||
  {   0, trNOOP("none"), ""        },
 | 
			
		||||
  {  12, "1/2",          "fec=12"  },
 | 
			
		||||
  {  23, "2/3",          "fec=23"  },
 | 
			
		||||
  {  34, "3/4",          "fec=34"  },
 | 
			
		||||
  {  35, "3/5",          "fec=35"  },
 | 
			
		||||
  {  45, "4/5",          "fec=45"  },
 | 
			
		||||
  {  56, "5/6",          "fec=56"  },
 | 
			
		||||
  {  78, "7/8",          "fec=78"  },
 | 
			
		||||
  {  89, "8/9",          "fec=89"  },
 | 
			
		||||
  { 910, "9/10",         "fec=910" },
 | 
			
		||||
  { 999, trNOOP("auto"), ""        },
 | 
			
		||||
  {  -1, NULL,           NULL      }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipModulationValues[] = {
 | 
			
		||||
  {   2, "QPSK",         "mtype=qpsk"   },
 | 
			
		||||
  {   5, "8PSK",         "mtype=8psk"   },
 | 
			
		||||
  {  16, "QAM16",        "mtype=16qam"  },
 | 
			
		||||
  {  64, "QAM64",        "mtype=64qam"  },
 | 
			
		||||
  { 256, "QAM256",       "mtype=256qam" },
 | 
			
		||||
  { 999, trNOOP("auto"), ""             },
 | 
			
		||||
  {  -1, NULL,           NULL           }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipSystemValuesSat[] = {
 | 
			
		||||
  {   0, "DVB-S",  "msys=dvbs"  },
 | 
			
		||||
  {   1, "DVB-S2", "msys=dvbs2" },
 | 
			
		||||
  {  -1, NULL,     NULL         }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipSystemValuesTerr[] = {
 | 
			
		||||
  {   0, "DVB-T",  "msys=dvbt"  },
 | 
			
		||||
  {   1, "DVB-T2", "msys=dvbt2" },
 | 
			
		||||
  {  -1, NULL,     NULL         }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipTransmissionValues[] = {
 | 
			
		||||
  {   1, "1K",           "tmode=1k"  },
 | 
			
		||||
  {   2, "2K",           "tmode=2k"  },
 | 
			
		||||
  {   4, "4K",           "tmode=4k"  },
 | 
			
		||||
  {   8, "8K",           "tmode=8k"  },
 | 
			
		||||
  {  16, "16K",          "tmode=16k" },
 | 
			
		||||
  {  32, "32K",          "tmode=32k" },
 | 
			
		||||
  { 999, trNOOP("auto"), ""          },
 | 
			
		||||
  {  -1, NULL,           NULL        }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipGuardValues[] = {
 | 
			
		||||
  {     4, "1/4",          "gi=14"    },
 | 
			
		||||
  {     8, "1/8",          "gi=18"    },
 | 
			
		||||
  {    16, "1/16",         "gi=116"   },
 | 
			
		||||
  {    32, "1/32",         "gi=132"   },
 | 
			
		||||
  {   128, "1/128",        "gi=1128"  },
 | 
			
		||||
  { 19128, "19/128",       "gi=19128" },
 | 
			
		||||
  { 19256, "19/256",       "gi=19256" },
 | 
			
		||||
  {   999, trNOOP("auto"), ""         },
 | 
			
		||||
  {    -1, NULL,           NULL       }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const tSatipParameterMap SatipRollOffValues[] = {
 | 
			
		||||
  {  0, trNOOP("auto"), ""        },
 | 
			
		||||
  { 20, "0.20",         "ro=0.20" },
 | 
			
		||||
  { 25, "0.25",         "ro=0.25" },
 | 
			
		||||
  { 35, "0.35",         "ro=0.35" },
 | 
			
		||||
  { -1, NULL,            NULL     }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int SatipUserIndex(int valueP, const tSatipParameterMap *mapP)
 | 
			
		||||
{
 | 
			
		||||
  const tSatipParameterMap *map = mapP;
 | 
			
		||||
  while (map && map->userValue != -1) {
 | 
			
		||||
        if (map->userValue == valueP)
 | 
			
		||||
           return map - mapP;
 | 
			
		||||
        map++;
 | 
			
		||||
        }
 | 
			
		||||
  return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int SatipMapToUser(int valueP, const tSatipParameterMap *mapP, const char **strP)
 | 
			
		||||
{
 | 
			
		||||
  int n = SatipUserIndex(valueP, mapP);
 | 
			
		||||
  if (n >= 0) {
 | 
			
		||||
     if (strP)
 | 
			
		||||
        *strP = tr(mapP[n].userString);
 | 
			
		||||
     return mapP[n].userValue;
 | 
			
		||||
     }
 | 
			
		||||
  return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// --- cMenuEditSatipItem -----------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class cMenuEditSatipItem : public cMenuEditItem {
 | 
			
		||||
protected:
 | 
			
		||||
  int *valueM;
 | 
			
		||||
  const tSatipParameterMap *mapM;
 | 
			
		||||
  const char *zeroStringM;
 | 
			
		||||
  virtual void Set(void);
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  cMenuEditSatipItem(const char *nameP, int *valueP, const tSatipParameterMap *mapP, const char *zeroStringP = NULL);
 | 
			
		||||
  virtual eOSState ProcessKey(eKeys keyP);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
cMenuEditSatipItem::cMenuEditSatipItem(const char *nameP, int *valueP, const tSatipParameterMap *mapP, const char *zeroStringP)
 | 
			
		||||
: cMenuEditItem(nameP)
 | 
			
		||||
{
 | 
			
		||||
  valueM = valueP;
 | 
			
		||||
  mapM = mapP;
 | 
			
		||||
  zeroStringM = zeroStringP;
 | 
			
		||||
  Set();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cMenuEditSatipItem::Set(void)
 | 
			
		||||
{
 | 
			
		||||
  const char *s = NULL;
 | 
			
		||||
  int n = SatipMapToUser(*valueM, mapM, &s);
 | 
			
		||||
  if (n == 0 && zeroStringM)
 | 
			
		||||
     SetValue(zeroStringM);
 | 
			
		||||
  else if (n >= 0) {
 | 
			
		||||
     if (s)
 | 
			
		||||
        SetValue(s);
 | 
			
		||||
     else {
 | 
			
		||||
        char buf[16];
 | 
			
		||||
        snprintf(buf, sizeof(buf), "%d", n);
 | 
			
		||||
        SetValue(buf);
 | 
			
		||||
        }
 | 
			
		||||
     }
 | 
			
		||||
  else
 | 
			
		||||
     SetValue("???");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
eOSState cMenuEditSatipItem::ProcessKey(eKeys keyP)
 | 
			
		||||
{
 | 
			
		||||
  eOSState state = cMenuEditItem::ProcessKey(keyP);
 | 
			
		||||
 | 
			
		||||
  if (state == osUnknown) {
 | 
			
		||||
     int newValue = *valueM;
 | 
			
		||||
     int n = SatipUserIndex(*valueM, mapM);
 | 
			
		||||
     if (NORMALKEY(keyP) == kLeft) { // TODO might want to increase the delta if repeated quickly?
 | 
			
		||||
        if (n-- > 0)
 | 
			
		||||
           newValue = mapM[n].userValue;
 | 
			
		||||
        }
 | 
			
		||||
     else if (NORMALKEY(keyP) == kRight) {
 | 
			
		||||
        if (mapM[++n].userValue >= 0)
 | 
			
		||||
           newValue = mapM[n].userValue;
 | 
			
		||||
        }
 | 
			
		||||
     else
 | 
			
		||||
        return state;
 | 
			
		||||
     if (newValue != *valueM) {
 | 
			
		||||
        *valueM = newValue;
 | 
			
		||||
        Set();
 | 
			
		||||
        }
 | 
			
		||||
     state = osContinue;
 | 
			
		||||
     }
 | 
			
		||||
  return state;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// --- cSatipTransponderParameters --------------------------------------------
 | 
			
		||||
 | 
			
		||||
cSatipTransponderParameters::cSatipTransponderParameters(const char *parametersP)
 | 
			
		||||
: polarizationM('H'),
 | 
			
		||||
  bandwidthM(8),
 | 
			
		||||
  coderateHM(0),
 | 
			
		||||
  systemM(0),
 | 
			
		||||
  modulationM(999),
 | 
			
		||||
  transmissionM(8),
 | 
			
		||||
  guardM(999),
 | 
			
		||||
  rollOffM(0),
 | 
			
		||||
  streamIdM(0),
 | 
			
		||||
  t2SystemIdM(0),
 | 
			
		||||
  sisoMisoM(999),
 | 
			
		||||
  pilotTonesM(0),
 | 
			
		||||
  signalSourceM(1)
 | 
			
		||||
{
 | 
			
		||||
  Parse(parametersP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int cSatipTransponderParameters::PrintParameter(char *ptrP, char nameP, int valueP) const
 | 
			
		||||
{
 | 
			
		||||
  return (valueP >= 0 && valueP != 999) ? sprintf(ptrP, "%c%d", nameP, valueP) : 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int cSatipTransponderParameters::PrintString(char *ptrP, int valueP, const tSatipParameterMap *mapP)
 | 
			
		||||
{
 | 
			
		||||
  int n = SatipUserIndex(valueP, mapP);
 | 
			
		||||
  return (n >= 0) ? sprintf(ptrP, "&%s", tr(mapP[n].satipString)) : 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cString cSatipTransponderParameters::UrlParameters(char typeP)
 | 
			
		||||
{
 | 
			
		||||
  char buffer[255];
 | 
			
		||||
  char *q = buffer;
 | 
			
		||||
  *q = 0;
 | 
			
		||||
#define ST(s) if (strchr(s, typeP) && (strchr(s, '0' + systemM + 1) || strchr(s, '*')))
 | 
			
		||||
  ST("Z *") q += sprintf(q,     "&src=%d",     signalSourceM);
 | 
			
		||||
  ST("Z *") q += sprintf(q,     "&pol=%c",     tolower(polarizationM));
 | 
			
		||||
  ST(" Y2") q += sprintf(q,     "&plp=%d",     streamIdM);
 | 
			
		||||
  ST(" Y2") q += sprintf(q,     "&t2id=%d",    t2SystemIdM);
 | 
			
		||||
  ST(" Y*") q += PrintString(q, bandwidthM,    SatipBandwidthValues);
 | 
			
		||||
  ST(" Y*") q += PrintString(q, guardM,        SatipGuardValues);
 | 
			
		||||
  ST("ZY*") q += PrintString(q, coderateHM,    SatipCodeRateValues);
 | 
			
		||||
  ST("Z 2") q += PrintString(q, pilotTonesM,   SatipPilotTonesValues);
 | 
			
		||||
  ST("Z 2") q += PrintString(q, modulationM,   SatipModulationValues);
 | 
			
		||||
  ST(" Y*") q += PrintString(q, modulationM,   SatipModulationValues);
 | 
			
		||||
  ST("Z 2") q += PrintString(q, rollOffM,      SatipRollOffValues);
 | 
			
		||||
  ST("Z *") q += PrintString(q, systemM,       SatipSystemValuesSat);
 | 
			
		||||
  ST(" Y*") q += PrintString(q, systemM,       SatipSystemValuesTerr);
 | 
			
		||||
  ST(" Y*") q += PrintString(q, transmissionM, SatipTransmissionValues);
 | 
			
		||||
  ST(" Y2") q += PrintString(q, sisoMisoM,     SatipSisoMisoValues);
 | 
			
		||||
#undef ST
 | 
			
		||||
  return buffer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cString cSatipTransponderParameters::ToString(char typeP) const
 | 
			
		||||
{
 | 
			
		||||
  char buffer[64];
 | 
			
		||||
  char *q = buffer;
 | 
			
		||||
  *q = 0;
 | 
			
		||||
#define ST(s) if (strchr(s, typeP) && (strchr(s, '0' + systemM + 1) || strchr(s, '*')))
 | 
			
		||||
  ST("Z *") q += sprintf(q, "%c", polarizationM);
 | 
			
		||||
  ST(" Y*") q += PrintParameter(q, 'B', bandwidthM);
 | 
			
		||||
  ST("ZY*") q += PrintParameter(q, 'C', coderateHM);
 | 
			
		||||
  ST(" Y*") q += PrintParameter(q, 'G', guardM);
 | 
			
		||||
  ST("Z 2") q += PrintParameter(q, 'M', modulationM);
 | 
			
		||||
  ST(" Y*") q += PrintParameter(q, 'M', modulationM);
 | 
			
		||||
  ST("Z 2") q += PrintParameter(q, 'N', pilotTonesM);
 | 
			
		||||
  ST("Z 2") q += PrintParameter(q, 'O', rollOffM);
 | 
			
		||||
  ST(" Y2") q += PrintParameter(q, 'P', streamIdM);
 | 
			
		||||
  ST(" Y2") q += PrintParameter(q, 'Q', t2SystemIdM);
 | 
			
		||||
  ST("ZY*") q += PrintParameter(q, 'S', systemM);
 | 
			
		||||
  ST(" Y*") q += PrintParameter(q, 'T', transmissionM);
 | 
			
		||||
  ST(" Y2") q += PrintParameter(q, 'X', sisoMisoM);
 | 
			
		||||
  ST("Z *") q += PrintParameter(q, 'Z', signalSourceM);
 | 
			
		||||
#undef ST
 | 
			
		||||
  return buffer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *cSatipTransponderParameters::ParseParameter(const char *strP, int &valueP)
 | 
			
		||||
{
 | 
			
		||||
  if (*++strP) {
 | 
			
		||||
     char *p = NULL;
 | 
			
		||||
     errno = 0;
 | 
			
		||||
     int n = strtol(strP, &p, 10);
 | 
			
		||||
     if (!errno && p != strP) {
 | 
			
		||||
        valueP = n;
 | 
			
		||||
        if (valueP >= 0)
 | 
			
		||||
           return p;
 | 
			
		||||
        }
 | 
			
		||||
     }
 | 
			
		||||
  error("invalid value for parameter '%c'", *(strP - 1));
 | 
			
		||||
  return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool cSatipTransponderParameters::Parse(const char *strP)
 | 
			
		||||
{
 | 
			
		||||
  while (strP && *strP) {
 | 
			
		||||
        int ignoreThis;
 | 
			
		||||
        switch (toupper(*strP)) {
 | 
			
		||||
          case 'B': strP = ParseParameter(strP, bandwidthM);    break;
 | 
			
		||||
          case 'C': strP = ParseParameter(strP, coderateHM);    break;
 | 
			
		||||
          case 'G': strP = ParseParameter(strP, guardM);        break;
 | 
			
		||||
          case 'H': polarizationM = 'H'; strP++;                break;
 | 
			
		||||
          case 'L': polarizationM = 'L'; strP++;                break;
 | 
			
		||||
          case 'M': strP = ParseParameter(strP, modulationM);   break;
 | 
			
		||||
          case 'N': strP = ParseParameter(strP, pilotTonesM);   break;
 | 
			
		||||
          case 'O': strP = ParseParameter(strP, rollOffM);      break;
 | 
			
		||||
          case 'P': strP = ParseParameter(strP, streamIdM);     break;
 | 
			
		||||
          case 'Q': strP = ParseParameter(strP, t2SystemIdM);   break;
 | 
			
		||||
          case 'R': polarizationM = 'R'; strP++;                break;
 | 
			
		||||
          case 'S': strP = ParseParameter(strP, systemM);       break;
 | 
			
		||||
          case 'T': strP = ParseParameter(strP, transmissionM); break;
 | 
			
		||||
          case 'V': polarizationM = 'V'; strP++;                break;
 | 
			
		||||
          case 'X': strP = ParseParameter(strP, sisoMisoM);     break;
 | 
			
		||||
          case 'Z': strP = ParseParameter(strP, signalSourceM); break;
 | 
			
		||||
          case 'D': strP = ParseParameter(strP, ignoreThis);    break; /* silently ignore coderate low priority */
 | 
			
		||||
          case 'I': strP = ParseParameter(strP, ignoreThis);    break; /* silently ignore inversion */
 | 
			
		||||
          case 'Y': strP = ParseParameter(strP, ignoreThis);    break; /* silently ignore hierarchy */
 | 
			
		||||
          default: esyslog("ERROR: unknown parameter key '%c'", *strP);
 | 
			
		||||
                   return false;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// --- cSatipSourceParam ------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
cSatipSourceParam::cSatipSourceParam(char sourceP, const char *descriptionP)
 | 
			
		||||
: cSourceParam(sourceP, descriptionP),
 | 
			
		||||
  paramM(0),
 | 
			
		||||
  nidM(0),
 | 
			
		||||
  tidM(0),
 | 
			
		||||
  ridM(0),
 | 
			
		||||
  srateM(0),
 | 
			
		||||
  dataM(),
 | 
			
		||||
  stpM()
 | 
			
		||||
{
 | 
			
		||||
  debug("cSatipSourceParam::%s(%c, %s)", __FUNCTION__, sourceP, descriptionP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cSatipSourceParam::SetData(cChannel *channelP)
 | 
			
		||||
{
 | 
			
		||||
  debug("cSatipSourceParam::%s(%s)", __FUNCTION__, channelP->Parameters());
 | 
			
		||||
  dataM = *channelP;
 | 
			
		||||
  nidM = dataM.Nid();
 | 
			
		||||
  tidM = dataM.Tid();
 | 
			
		||||
  ridM = dataM.Rid();
 | 
			
		||||
  srateM = dataM.Srate();
 | 
			
		||||
  stpM.Parse(dataM.Parameters());
 | 
			
		||||
  paramM = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cSatipSourceParam::GetData(cChannel *channelP)
 | 
			
		||||
{
 | 
			
		||||
  debug("cSatipSourceParam::%s(%s)", __FUNCTION__, channelP->Parameters());
 | 
			
		||||
  channelP->SetTransponderData(channelP->Source(), channelP->Frequency(), srateM, stpM.ToString(Source()), true);
 | 
			
		||||
  channelP->SetId(nidM, tidM, channelP->Sid(), ridM);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cOsdItem *cSatipSourceParam::GetOsdItem(void)
 | 
			
		||||
{
 | 
			
		||||
  char type = Source();
 | 
			
		||||
  const tSatipParameterMap *SatipSystemValues = type == 'Z' ? SatipSystemValuesSat : SatipSystemValuesTerr;
 | 
			
		||||
#define ST(s) if (strchr(s, type))
 | 
			
		||||
  switch (paramM++) {
 | 
			
		||||
    case  0:           return new cMenuEditIntItem(      tr("Nid"),         &nidM, 0);
 | 
			
		||||
    case  1:           return new cMenuEditIntItem(      tr("Tid"),         &tidM, 0);
 | 
			
		||||
    case  2:           return new cMenuEditIntItem(      tr("Rid"),         &ridM, 0);
 | 
			
		||||
    case  3: ST("Z ")  return new cMenuEditIntItem(  trVDR("Srate"),        &srateM);                                      else return GetOsdItem();
 | 
			
		||||
    case  4: ST("Z ")  return new cMenuEditIntItem(     tr("SignalSource"), &stpM.signalSourceM, 1, 255);                  else return GetOsdItem();
 | 
			
		||||
    case  5: ST("Z ")  return new cMenuEditChrItem(  trVDR("Polarization"), &stpM.polarizationM, "HVLR");                  else return GetOsdItem();
 | 
			
		||||
    case  6: ST("Z ")  return new cMenuEditSatipItem(trVDR("Rolloff"),      &stpM.rollOffM,      SatipRollOffValues);      else return GetOsdItem();
 | 
			
		||||
    case  7: ST("Z ")  return new cMenuEditSatipItem(   tr("PilotTones"),   &stpM.pilotTonesM,   SatipPilotTonesValues);   else return GetOsdItem();
 | 
			
		||||
    case  8: ST("ZY")  return new cMenuEditSatipItem(trVDR("System"),       &stpM.systemM,       SatipSystemValues);       else return GetOsdItem();
 | 
			
		||||
    case  9: ST("ZY")  return new cMenuEditSatipItem(trVDR("Modulation"),   &stpM.modulationM,   SatipModulationValues);   else return GetOsdItem();
 | 
			
		||||
    case 10: ST("ZY")  return new cMenuEditSatipItem(trVDR("CoderateH"),    &stpM.coderateHM,    SatipCodeRateValues);     else return GetOsdItem();
 | 
			
		||||
    case 11: ST(" Y")  return new cMenuEditSatipItem(trVDR("Bandwidth"),    &stpM.bandwidthM,    SatipBandwidthValues);    else return GetOsdItem();
 | 
			
		||||
    case 12: ST(" Y")  return new cMenuEditSatipItem(trVDR("Transmission"), &stpM.transmissionM, SatipTransmissionValues); else return GetOsdItem();
 | 
			
		||||
    case 13: ST(" Y")  return new cMenuEditSatipItem(trVDR("Guard"),        &stpM.guardM,        SatipGuardValues);        else return GetOsdItem();
 | 
			
		||||
    case 14: ST(" Y")  return new cMenuEditIntItem(  trVDR("StreamId"),     &stpM.streamIdM,     0, 255);                  else return GetOsdItem();
 | 
			
		||||
    case 15: ST(" Y")  return new cMenuEditIntItem(     tr("T2SystemId"),   &stpM.t2SystemIdM,   0, 65535);                else return GetOsdItem();
 | 
			
		||||
    case 16: ST(" Y")  return new cMenuEditSatipItem(   tr("SISO/MISO"),    &stpM.sisoMisoM,     SatipSisoMisoValues);     else return GetOsdItem();
 | 
			
		||||
    default: return NULL;
 | 
			
		||||
    }
 | 
			
		||||
#undef ST
 | 
			
		||||
  return NULL;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										93
									
								
								source.h
									
									
									
									
									
								
							
							
						
						
									
										93
									
								
								source.h
									
									
									
									
									
								
							@@ -1,93 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * source.h: SAT>IP plugin for the Video Disk Recorder
 | 
			
		||||
 *
 | 
			
		||||
 * See the README file for copyright information and how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __SATIP_SOURCE_H
 | 
			
		||||
#define __SATIP_SOURCE_H
 | 
			
		||||
 | 
			
		||||
#include <vdr/menuitems.h>
 | 
			
		||||
#include <vdr/sourceparams.h>
 | 
			
		||||
#include "common.h"
 | 
			
		||||
 | 
			
		||||
struct tSatipParameterMap {
 | 
			
		||||
  int userValue;
 | 
			
		||||
  const char *userString;
 | 
			
		||||
  const char *satipString;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class cSatipTransponderParameters {
 | 
			
		||||
  friend class cSatipSourceParam;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
  char polarizationM;
 | 
			
		||||
  int bandwidthM;
 | 
			
		||||
  int coderateHM;
 | 
			
		||||
  int systemM;
 | 
			
		||||
  int modulationM;
 | 
			
		||||
  int transmissionM;
 | 
			
		||||
  int guardM;
 | 
			
		||||
  int rollOffM;
 | 
			
		||||
  int streamIdM;
 | 
			
		||||
  int t2SystemIdM;
 | 
			
		||||
  int sisoMisoM;
 | 
			
		||||
  int pilotTonesM;
 | 
			
		||||
  int signalSourceM;
 | 
			
		||||
  int PrintParameter(char *ptrP, char nameP, int valueP) const;
 | 
			
		||||
  int PrintString(char *ptrP, int valueP, const tSatipParameterMap *mapP);
 | 
			
		||||
  const char *ParseParameter(const char *strP, int &valueP);
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  cSatipTransponderParameters(const char *parametersP = NULL);
 | 
			
		||||
  char Polarization(void) const { return polarizationM; }
 | 
			
		||||
  int Bandwidth(void) const { return bandwidthM; }
 | 
			
		||||
  int CoderateH(void) const { return coderateHM; }
 | 
			
		||||
  int System(void) const { return systemM; }
 | 
			
		||||
  int Modulation(void) const { return modulationM; }
 | 
			
		||||
  int Transmission(void) const { return transmissionM; }
 | 
			
		||||
  int Guard(void) const { return guardM; }
 | 
			
		||||
  int RollOff(void) const { return rollOffM; }
 | 
			
		||||
  int StreamId(void) const { return streamIdM; }
 | 
			
		||||
  int T2SystemId(void) const { return t2SystemIdM; }
 | 
			
		||||
  int SisoMiso(void) const { return sisoMisoM; }
 | 
			
		||||
  int PilotTones(void) const { return pilotTonesM; }
 | 
			
		||||
  int SignalSource(void) const { return signalSourceM; }
 | 
			
		||||
  void SetPolarization(char polarizationP) { polarizationM = polarizationP; }
 | 
			
		||||
  void SetBandwidth(int bandwidthP) { bandwidthM = bandwidthP; }
 | 
			
		||||
  void SetCoderateH(int coderateHP) { coderateHM = coderateHP; }
 | 
			
		||||
  void SetSystem(int systemP) { systemM = systemP; }
 | 
			
		||||
  void SetModulation(int modulationP) { modulationM = modulationP; }
 | 
			
		||||
  void SetTransmission(int transmissionP) { transmissionM = transmissionP; }
 | 
			
		||||
  void SetGuard(int guardP) { guardM = guardP; }
 | 
			
		||||
  void SetRollOff(int rollOffP) { rollOffM = rollOffP; }
 | 
			
		||||
  void SetStreamId(int streamIdP) { streamIdM = streamIdP; }
 | 
			
		||||
  void SetT2SystemId(int t2SystemIdP) { t2SystemIdM = t2SystemIdP; }
 | 
			
		||||
  void SetSisoMiso(int sisoMisoP) { sisoMisoM = sisoMisoP; }
 | 
			
		||||
  void SetPilotTones(int pilotTonesP) { pilotTonesM = pilotTonesP; }
 | 
			
		||||
  void SetSignalSource(int signalSourceP) { signalSourceM = signalSourceP; }
 | 
			
		||||
  cString UrlParameters(char typeP);
 | 
			
		||||
  cString ToString(char typeP) const;
 | 
			
		||||
  bool Parse(const char *strP);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class cSatipSourceParam : public cSourceParam
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
  int paramM;
 | 
			
		||||
  int nidM;
 | 
			
		||||
  int tidM;
 | 
			
		||||
  int ridM;
 | 
			
		||||
  int srateM;
 | 
			
		||||
  cChannel dataM;
 | 
			
		||||
  cSatipTransponderParameters stpM;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  cSatipSourceParam(char sourceP, const char *descriptionP);
 | 
			
		||||
  virtual void SetData(cChannel *channelP);
 | 
			
		||||
  virtual void GetData(cChannel *channelP);
 | 
			
		||||
  virtual cOsdItem *GetOsdItem(void);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // __SATIP_SOURCE_H
 | 
			
		||||
							
								
								
									
										6
									
								
								tuner.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								tuner.c
									
									
									
									
									
								
							@@ -313,7 +313,7 @@ bool cSatipTuner::ValidateLatestResponse(void)
 | 
			
		||||
 | 
			
		||||
void cSatipTuner::ParseReceptionParameters(const char *paramP)
 | 
			
		||||
{
 | 
			
		||||
  debug("cSatipTuner::%s(%s)", __FUNCTION__, paramP);
 | 
			
		||||
  //debug("cSatipTuner::%s(%s)", __FUNCTION__, paramP);
 | 
			
		||||
  // DVB-S2:
 | 
			
		||||
  // ver=<major>.<minor>;src=<srcID>;tuner=<feID>,<level>,<lock>,<quality>,<frequency>,<polarisation>,<system>,<type>,<pilots>,<roll_off>,<symbol_rate>,<fec_inner>;pids=<pid0>,...,<pidn>
 | 
			
		||||
  // DVB-T2:
 | 
			
		||||
@@ -380,7 +380,7 @@ bool cSatipTuner::SetSource(const char* addressP, const char *parameterP, const
 | 
			
		||||
 | 
			
		||||
bool cSatipTuner::SetPid(int pidP, int typeP, bool onP)
 | 
			
		||||
{
 | 
			
		||||
  debug("cSatipTuner::%s(%d, %d, %d)", __FUNCTION__, pidP, typeP, onP);
 | 
			
		||||
  //debug("cSatipTuner::%s(%d, %d, %d)", __FUNCTION__, pidP, typeP, onP);
 | 
			
		||||
  cMutexLock MutexLock(&mutexM);
 | 
			
		||||
  bool found = false;
 | 
			
		||||
  for (int i = 0; i < pidsM.Size(); ++i) {
 | 
			
		||||
@@ -405,7 +405,7 @@ bool cSatipTuner::UpdatePids(void)
 | 
			
		||||
{
 | 
			
		||||
  cMutexLock MutexLock(&mutexM);
 | 
			
		||||
  if (pidUpdateCacheM.TimedOut() && pidUpdatedM && pidsM.Size() && tunedM && handleM && !isempty(*streamAddrM) && (streamIdM > 0)) {
 | 
			
		||||
     debug("cSatipTuner::%s()", __FUNCTION__);
 | 
			
		||||
     //debug("cSatipTuner::%s()", __FUNCTION__);
 | 
			
		||||
     CURLcode res = CURLE_OK;
 | 
			
		||||
     //cString uri = cString::sprintf("rtsp://%s/stream=%d?%spids=%d", *streamAddrM, streamIdM, onP ? "add" : "del", pidP);
 | 
			
		||||
     cString uri = cString::sprintf("rtsp://%s/stream=%d?pids=", *streamAddrM, streamIdM);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user