diff options
| -rw-r--r-- | HISTORY | 4 | ||||
| -rw-r--r-- | MANUAL | 18 | ||||
| -rw-r--r-- | config.c | 9 | ||||
| -rw-r--r-- | config.h | 5 | ||||
| -rw-r--r-- | dvbapi.c | 14 | ||||
| -rw-r--r-- | dvbapi.h | 4 | ||||
| -rw-r--r-- | eit.c | 19 | ||||
| -rw-r--r-- | eit.h | 6 | ||||
| -rw-r--r-- | i18n.c | 12 | ||||
| -rw-r--r-- | menu.c | 45 | 
10 files changed, 107 insertions, 29 deletions
| @@ -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. @@ -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 @@ -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); @@ -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; @@ -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,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); @@ -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)  { @@ -1247,6 +1238,12 @@ bool cSIProcessor::ShutDownFilters(void)  }  /** */ +void cSIProcessor::SetCurrentTransponder(int CurrentTransponder) +{ +  currentTransponder = CurrentTransponder; +} + +/** */  bool cSIProcessor::SetCurrentServiceID(unsigned short servid)  {    cMutexLock MutexLock(&schedulesMutex); @@ -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);    }; @@ -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", @@ -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(); | 
