mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
New Setup parameter TrustedTransponder
This commit is contained in:
parent
550c79e411
commit
f9a3885ef2
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();
|
||||
|
Loading…
Reference in New Issue
Block a user