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