mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	New Setup parameter TrustedTransponder
This commit is contained in:
		
							
								
								
									
										4
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								HISTORY
									
									
									
									
									
								
							| @@ -1092,3 +1092,7 @@ Video Disk Recorder Revision History | ||||
|   activity, but this should be no problem for normal use). | ||||
| - Changed the MANUAL description of the "Conditional Access" setup parameters | ||||
|   to reflect the actual "CICAM DVBn m" notation in the "Setup" menu. | ||||
| - The new Setup parameter TrustedTransponder can be used to define which | ||||
|   transponder shall be used to set the system time (see MANUAL for details). | ||||
|   If you have been using the SetSystemTime option previously, you now MUST | ||||
|   select a channel that you trust to have a reliable time base. | ||||
|   | ||||
							
								
								
									
										18
									
								
								MANUAL
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								MANUAL
									
									
									
									
									
								
							| @@ -415,9 +415,23 @@ Video Disk Recorder User's Manual | ||||
|   SetSystemTime = 0      Defines whether the system time will be set according to | ||||
|                          the time received from the DVB data stream. | ||||
|                          0 = system time will not be set | ||||
|                          1 = system time wil be set | ||||
|                          1 = system time will be set | ||||
|                          Note that this works only if VDR is running under a user | ||||
|                          id that has permisson to set the system time. | ||||
|                          id that has permisson to set the system time. You also | ||||
|                          need to set the option TrustedTransponder to a channel | ||||
|                          that you trust to transmit a reliable time base (not all | ||||
|                          channels seem to have access to a correct time base...). | ||||
|  | ||||
|   TrustedTransponder = 0 The frequency of the transponder that shall be used to | ||||
|                          set the system time. The Setup menu will offer the full | ||||
|                          list of channels, even if several of them are on the | ||||
|                          same transponder. Also, when selecting a channel, saving | ||||
|                          the Setup and opening the Setup menu again, there may be | ||||
|                          a different channel listed here, since the first one | ||||
|                          in 'channels.conf' that is on the given transponder will | ||||
|                          be taken. Note that in order to set the system time from | ||||
|                          the transponder data the option SetSystemTime must also | ||||
|                          be enabled. | ||||
|  | ||||
|   MarginStart = 2        Defines how many minutes before the official start time | ||||
|   MarginStop = 10        of a broadcast VDR shall start recording, and how long | ||||
|   | ||||
							
								
								
									
										9
									
								
								config.c
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								config.c
									
									
									
									
									
								
							| @@ -4,7 +4,7 @@ | ||||
|  * See the main source file 'vdr.c' for copyright information and | ||||
|  * how to reach the author. | ||||
|  * | ||||
|  * $Id: config.c 1.89 2002/03/08 14:57:08 kls Exp $ | ||||
|  * $Id: config.c 1.90 2002/03/10 12:22:25 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #include "config.h" | ||||
| @@ -811,7 +811,7 @@ cChannel *cChannels::GetByNumber(int Number) | ||||
| { | ||||
|   cChannel *channel = (cChannel *)First(); | ||||
|   while (channel) { | ||||
|         if (channel->number == Number) | ||||
|         if (!channel->groupSep && channel->number == Number) | ||||
|            return channel; | ||||
|         channel = (cChannel *)channel->Next(); | ||||
|         } | ||||
| @@ -822,7 +822,7 @@ cChannel *cChannels::GetByServiceID(unsigned short ServiceId) | ||||
| { | ||||
|   cChannel *channel = (cChannel *)First(); | ||||
|   while (channel) { | ||||
|         if (channel->pnr == ServiceId) | ||||
|         if (!channel->groupSep && channel->pnr == ServiceId) | ||||
|            return channel; | ||||
|         channel = (cChannel *)channel->Next(); | ||||
|         } | ||||
| @@ -931,6 +931,7 @@ cSetup::cSetup(void) | ||||
|   LnbFrequHi = 10600; | ||||
|   DiSEqC = 0; | ||||
|   SetSystemTime = 0; | ||||
|   TrustedTransponder = 0; | ||||
|   MarginStart = 2; | ||||
|   MarginStop = 10; | ||||
|   EPGScanTimeout = 5; | ||||
| @@ -1017,6 +1018,7 @@ bool cSetup::Parse(char *s) | ||||
|         else if (!strcasecmp(Name, "LnbFrequHi"))          LnbFrequHi         = atoi(Value); | ||||
|         else if (!strcasecmp(Name, "DiSEqC"))              DiSEqC             = atoi(Value); | ||||
|         else if (!strcasecmp(Name, "SetSystemTime"))       SetSystemTime      = atoi(Value); | ||||
|         else if (!strcasecmp(Name, "TrustedTransponder"))  TrustedTransponder = atoi(Value); | ||||
|         else if (!strcasecmp(Name, "MarginStart"))         MarginStart        = atoi(Value); | ||||
|         else if (!strcasecmp(Name, "MarginStop"))          MarginStop         = atoi(Value); | ||||
|         else if (!strcasecmp(Name, "EPGScanTimeout"))      EPGScanTimeout     = atoi(Value); | ||||
| @@ -1098,6 +1100,7 @@ bool cSetup::Save(const char *FileName) | ||||
|         fprintf(f, "LnbFrequHi         = %d\n", LnbFrequHi); | ||||
|         fprintf(f, "DiSEqC             = %d\n", DiSEqC); | ||||
|         fprintf(f, "SetSystemTime      = %d\n", SetSystemTime); | ||||
|         fprintf(f, "TrustedTransponder = %d\n", TrustedTransponder); | ||||
|         fprintf(f, "MarginStart        = %d\n", MarginStart); | ||||
|         fprintf(f, "MarginStop         = %d\n", MarginStop); | ||||
|         fprintf(f, "EPGScanTimeout     = %d\n", EPGScanTimeout); | ||||
|   | ||||
							
								
								
									
										5
									
								
								config.h
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								config.h
									
									
									
									
									
								
							| @@ -4,7 +4,7 @@ | ||||
|  * See the main source file 'vdr.c' for copyright information and | ||||
|  * how to reach the author. | ||||
|  * | ||||
|  * $Id: config.h 1.103 2002/03/08 17:59:02 kls Exp $ | ||||
|  * $Id: config.h 1.104 2002/03/10 12:45:11 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #ifndef __CONFIG_H | ||||
| @@ -92,6 +92,8 @@ public: | ||||
|   void Set(eKeys Key, unsigned int Code); | ||||
|   }; | ||||
|  | ||||
| #define ISTRANSPONDER(f1, f2)  (abs((f1) - (f2)) < 4) | ||||
|  | ||||
| class cChannel : public cListObject { | ||||
| private: | ||||
|   static char *buffer; | ||||
| @@ -340,6 +342,7 @@ public: | ||||
|   int LnbFrequHi; | ||||
|   int DiSEqC; | ||||
|   int SetSystemTime; | ||||
|   int TrustedTransponder; | ||||
|   int MarginStart, MarginStop; | ||||
|   int EPGScanTimeout; | ||||
|   int EPGBugfixLevel; | ||||
|   | ||||
							
								
								
									
										14
									
								
								dvbapi.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								dvbapi.c
									
									
									
									
									
								
							| @@ -4,7 +4,7 @@ | ||||
|  * See the main source file 'vdr.c' for copyright information and | ||||
|  * how to reach the author. | ||||
|  * | ||||
|  * $Id: dvbapi.c 1.161 2002/03/09 14:18:25 kls Exp $ | ||||
|  * $Id: dvbapi.c 1.162 2002/03/10 11:01:38 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #include "dvbapi.h" | ||||
| @@ -1723,8 +1723,6 @@ cDvbApi::cDvbApi(int n) | ||||
|  | ||||
|   if (fd_frontend >= 0 && fd_demuxv >= 0 && fd_demuxa1 >= 0 && fd_demuxa2 >= 0 && fd_demuxd1 >= 0 && fd_demuxd2 >= 0 && fd_demuxt >= 0) { | ||||
|      siProcessor = new cSIProcessor(OstName(DEV_OST_DEMUX, n)); | ||||
|      if (!dvbApi[0]) // only the first one shall set the system time | ||||
|         siProcessor->SetUseTSTime(Setup.SetSystemTime); | ||||
|      FrontendInfo feinfo; | ||||
|      CHECK(ioctl(fd_frontend, FE_GET_INFO, &feinfo)); | ||||
|      frontendType = feinfo.type; | ||||
| @@ -2324,6 +2322,11 @@ eSetChannelResult cDvbApi::SetChannel(int ChannelNumber, int Frequency, char Pol | ||||
|      CHECK(ioctl(fd_audio, AUDIO_CLEAR_BUFFER)); | ||||
|      } | ||||
|  | ||||
|   // Stop setting system time: | ||||
|  | ||||
|   if (siProcessor) | ||||
|      siProcessor->SetCurrentTransponder(0); | ||||
|  | ||||
|   // If this card can't receive this channel, we must not actually switch | ||||
|   // the channel here, because that would irritate the driver when we | ||||
|   // start replaying in Transfer Mode immediately after switching the channel: | ||||
| @@ -2475,6 +2478,11 @@ eSetChannelResult cDvbApi::SetChannel(int ChannelNumber, int Frequency, char Pol | ||||
|      CHECK(ioctl(fd_video, VIDEO_SET_BLANK, false)); | ||||
|      } | ||||
|  | ||||
|   // Start setting system time: | ||||
|  | ||||
|   if (Result == scrOk && siProcessor) | ||||
|      siProcessor->SetCurrentTransponder(Frequency); | ||||
|  | ||||
|   return Result; | ||||
| } | ||||
|  | ||||
|   | ||||
							
								
								
									
										4
									
								
								dvbapi.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								dvbapi.h
									
									
									
									
									
								
							| @@ -4,7 +4,7 @@ | ||||
|  * See the main source file 'vdr.c' for copyright information and | ||||
|  * how to reach the author. | ||||
|  * | ||||
|  * $Id: dvbapi.h 1.67 2002/03/09 14:18:10 kls Exp $ | ||||
|  * $Id: dvbapi.h 1.68 2002/03/10 10:50:00 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #ifndef __DVBAPI_H | ||||
| @@ -149,8 +149,6 @@ public: | ||||
| private: | ||||
|   cSIProcessor *siProcessor; | ||||
| public: | ||||
|   void SetUseTSTime(bool On) { if (siProcessor) siProcessor->SetUseTSTime(On); } | ||||
|  | ||||
|   // Image Grab facilities | ||||
|  | ||||
|   bool GrabImage(const char *FileName, bool Jpeg = true, int Quality = -1, int SizeX = -1, int SizeY = -1); | ||||
|   | ||||
							
								
								
									
										19
									
								
								eit.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								eit.c
									
									
									
									
									
								
							| @@ -16,7 +16,7 @@ | ||||
|  *   the Free Software Foundation; either version 2 of the License, or     * | ||||
|  *   (at your option) any later version.                                   * | ||||
|  *                                                                         * | ||||
|  * $Id: eit.c 1.39 2002/03/01 16:32:11 kls Exp $ | ||||
|  * $Id: eit.c 1.40 2002/03/10 12:45:38 kls Exp $ | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #include "eit.h" | ||||
| @@ -981,7 +981,6 @@ cSIProcessor::cSIProcessor(const char *FileName) | ||||
| { | ||||
|    fileName = strdup(FileName); | ||||
|    masterSIProcessor = numSIProcessors == 0; // the first one becomes the 'master' | ||||
|    useTStime = false; | ||||
|    filters = NULL; | ||||
|    if (!numSIProcessors++) // the first one creates it | ||||
|       schedules = new cSchedules; | ||||
| @@ -1138,7 +1137,7 @@ void cSIProcessor::Action() | ||||
|                         case 0x14: | ||||
|                            if (buf[0] == 0x70) | ||||
|                            { | ||||
|                               if (useTStime) | ||||
|                               if (Setup.SetSystemTime && Setup.TrustedTransponder && ISTRANSPONDER(currentTransponder, Setup.TrustedTransponder)) | ||||
|                               { | ||||
|                                  cTDT ctdt((tdt_t *)buf); | ||||
|                                  ctdt.SetSystemTime(); | ||||
| @@ -1222,14 +1221,6 @@ bool cSIProcessor::AddFilter(u_char pid, u_char tid) | ||||
|    return false; | ||||
| } | ||||
|  | ||||
| /** set whether local systems time should be | ||||
| set by the received TDT or TOT packets */ | ||||
| bool cSIProcessor::SetUseTSTime(bool use) | ||||
| { | ||||
|    useTStime = use; | ||||
|    return useTStime; | ||||
| } | ||||
|  | ||||
| /**  */ | ||||
| bool cSIProcessor::ShutDownFilters(void) | ||||
| { | ||||
| @@ -1246,6 +1237,12 @@ bool cSIProcessor::ShutDownFilters(void) | ||||
|    return true; // there's no real 'boolean' to return here... | ||||
| } | ||||
|  | ||||
| /** */ | ||||
| void cSIProcessor::SetCurrentTransponder(int CurrentTransponder) | ||||
| { | ||||
|   currentTransponder = CurrentTransponder; | ||||
| } | ||||
|  | ||||
| /** */ | ||||
| bool cSIProcessor::SetCurrentServiceID(unsigned short servid) | ||||
| { | ||||
|   | ||||
							
								
								
									
										6
									
								
								eit.h
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								eit.h
									
									
									
									
									
								
							| @@ -16,7 +16,7 @@ | ||||
|  *   the Free Software Foundation; either version 2 of the License, or     * | ||||
|  *   (at your option) any later version.                                   * | ||||
|  *                                                                         * | ||||
|  * $Id: eit.h 1.15 2002/02/23 15:30:25 kls Exp $ | ||||
|  * $Id: eit.h 1.16 2002/03/10 10:56:57 kls Exp $ | ||||
|  ***************************************************************************/ | ||||
|  | ||||
| #ifndef __EIT_H | ||||
| @@ -139,7 +139,7 @@ private: | ||||
|   static cMutex schedulesMutex; | ||||
|   static const char *epgDataFileName; | ||||
|   bool masterSIProcessor; | ||||
|   bool useTStime; | ||||
|   int currentTransponder; | ||||
|   SIP_FILTER *filters; | ||||
|   char *fileName; | ||||
|   bool active; | ||||
| @@ -157,7 +157,7 @@ public: | ||||
|          // longer used, the cMutexLock must be destroyed. | ||||
|   static bool Read(FILE *f = NULL); | ||||
|   void SetStatus(bool On); | ||||
|   bool SetUseTSTime(bool use); | ||||
|   void SetCurrentTransponder(int CurrentTransponder); | ||||
|   bool SetCurrentServiceID(unsigned short servid); | ||||
|   }; | ||||
|  | ||||
|   | ||||
							
								
								
									
										12
									
								
								i18n.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								i18n.c
									
									
									
									
									
								
							| @@ -4,7 +4,7 @@ | ||||
|  * See the main source file 'vdr.c' for copyright information and | ||||
|  * how to reach the author. | ||||
|  * | ||||
|  * $Id: i18n.c 1.61 2002/03/09 16:21:59 kls Exp $ | ||||
|  * $Id: i18n.c 1.62 2002/03/10 10:43:46 kls Exp $ | ||||
|  * | ||||
|  * Slovenian translations provided by Miha Setina <mihasetina@softhome.net> | ||||
|  * Italian   translations provided by Alberto Carraro <bertocar@tin.it> | ||||
| @@ -964,6 +964,16 @@ const tPhrase Phrases[] = { | ||||
|     "Juster system-klokken", | ||||
|     "Vastaanota kellonaika", | ||||
|   }, | ||||
|   { "TrustedTransponder", | ||||
|     "Vertr. Transponder", | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|   }, | ||||
|   { "MarginStart", | ||||
|     "Zeitpuffer bei Anfang", | ||||
|     "Premor pred zacetkom", | ||||
|   | ||||
							
								
								
									
										45
									
								
								menu.c
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								menu.c
									
									
									
									
									
								
							| @@ -4,7 +4,7 @@ | ||||
|  * See the main source file 'vdr.c' for copyright information and | ||||
|  * how to reach the author. | ||||
|  * | ||||
|  * $Id: menu.c 1.163 2002/03/09 16:57:34 kls Exp $ | ||||
|  * $Id: menu.c 1.164 2002/03/10 12:45:58 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #include "menu.h" | ||||
| @@ -168,6 +168,47 @@ void cMenuEditChanItem::Set(void) | ||||
|   SetValue(buf); | ||||
| } | ||||
|  | ||||
| // --- cMenuEditTranItem ----------------------------------------------------- | ||||
|  | ||||
| class cMenuEditTranItem : public cMenuEditChanItem { | ||||
| private: | ||||
|   int number; | ||||
|   int transponder; | ||||
| public: | ||||
|   cMenuEditTranItem(const char *Name, int *Value); | ||||
|   virtual eOSState ProcessKey(eKeys Key); | ||||
|   }; | ||||
|  | ||||
| cMenuEditTranItem::cMenuEditTranItem(const char *Name, int *Value) | ||||
| :cMenuEditChanItem(Name, Value) | ||||
| { | ||||
|   number = 0; | ||||
|   transponder = *Value; | ||||
|   cChannel *channel = Channels.First(); | ||||
|   while (channel) { | ||||
|         if (!channel->groupSep && ISTRANSPONDER(channel->frequency, *Value)) { | ||||
|            number = channel->number; | ||||
|            break; | ||||
|            } | ||||
|         channel = (cChannel *)channel->Next(); | ||||
|         } | ||||
|   *Value = number; | ||||
|   Set(); | ||||
|   *Value = transponder; | ||||
| } | ||||
|  | ||||
| eOSState cMenuEditTranItem::ProcessKey(eKeys Key) | ||||
| { | ||||
|   *value = number; | ||||
|   eOSState state = cMenuEditChanItem::ProcessKey(Key); | ||||
|   number = *value; | ||||
|   cChannel *channel = Channels.GetByNumber(*value); | ||||
|   if (channel) | ||||
|      transponder = channel->frequency; | ||||
|   *value = transponder; | ||||
|   return state; | ||||
| } | ||||
|  | ||||
| // --- cMenuEditDayItem ------------------------------------------------------ | ||||
|  | ||||
| class cMenuEditDayItem : public cMenuEditIntItem { | ||||
| @@ -1911,6 +1952,7 @@ void cMenuSetup::Set(void) | ||||
|   Add(new cMenuEditIntItem( tr("LnbFrequHi"),         &data.LnbFrequHi)); | ||||
|   Add(new cMenuEditBoolItem(tr("Setup$DiSEqC"),       &data.DiSEqC)); | ||||
|   Add(new cMenuEditBoolItem(tr("SetSystemTime"),      &data.SetSystemTime)); | ||||
|   Add(new cMenuEditTranItem(tr("TrustedTransponder"), &data.TrustedTransponder)); | ||||
|   Add(new cMenuEditIntItem( tr("MarginStart"),        &data.MarginStart)); | ||||
|   Add(new cMenuEditIntItem( tr("MarginStop"),         &data.MarginStop)); | ||||
|   Add(new cMenuEditIntItem( tr("EPGScanTimeout"),     &data.EPGScanTimeout)); | ||||
| @@ -1950,7 +1992,6 @@ eOSState cMenuSetup::ProcessKey(eKeys Key) | ||||
|   if (state == osUnknown) { | ||||
|      switch (Key) { | ||||
|        case kOk: state = (Setup.PrimaryDVB != data.PrimaryDVB) ? osSwitchDvb : osEnd; | ||||
|                  cDvbApi::PrimaryDvbApi->SetUseTSTime(data.SetSystemTime); | ||||
|                  cDvbApi::PrimaryDvbApi->SetVideoFormat(data.VideoFormat ? VIDEO_FORMAT_16_9 : VIDEO_FORMAT_4_3); | ||||
|                  Setup = data; | ||||
|                  Setup.Save(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user