--- MANUAL	2024/01/21 10:43:20	5.9
+++ MANUAL	2024/03/04 20:53:59
@@ -829,6 +829,16 @@
                          A value of '0' completely turns off scanning on both single
                          and multiple card systems.
 
+  EPG scan max. channel number = 0
+                         The EPG scan will only tune to transponders of channels with
+                         numbers below this limit. By default all transponders will
+                         be scanned.
+
+  EPG pause after scan = no
+                         After a complete scan of all transponders (optionally limited
+                         by "EPG scan max. channel number") the EPG scan pauses for
+                         "EPG scan timeout" hours if this option is set to "yes".
+
   EPG bugfix level = 3   Some tv stations transmit weirdly formatted EPG data.
                          VDR attempts to fix these bugs up to the given level:
                          0 = no EPG fixing
--- config.c	2018/02/15 14:40:36	5.0
+++ config.c	2024/03/04 20:27:49
@@ -409,6 +409,8 @@
   SubtitleBgTransparency = 0;
   EPGLanguages[0] = -1;
   EPGScanTimeout = 5;
+  EPGScanMaxChannel = 0;
+  EPGPauseAfterScan = 0;
   EPGBugfixLevel = 3;
   EPGLinger = 0;
   SVDRPTimeout = 300;
@@ -637,6 +639,8 @@
   else if (!strcasecmp(Name, "SubtitleBgTransparency")) SubtitleBgTransparency = atoi(Value);
   else if (!strcasecmp(Name, "EPGLanguages"))        return ParseLanguages(Value, EPGLanguages);
   else if (!strcasecmp(Name, "EPGScanTimeout"))      EPGScanTimeout     = atoi(Value);
+  else if (!strcasecmp(Name, "EPGScanMaxChannel"))   EPGScanMaxChannel  = atoi(Value);
+  else if (!strcasecmp(Name, "EPGPauseAfterScan"))   EPGPauseAfterScan  = atoi(Value);
   else if (!strcasecmp(Name, "EPGBugfixLevel"))      EPGBugfixLevel     = atoi(Value);
   else if (!strcasecmp(Name, "EPGLinger"))           EPGLinger          = atoi(Value);
   else if (!strcasecmp(Name, "SVDRPTimeout"))        SVDRPTimeout       = atoi(Value);
@@ -769,6 +773,8 @@
   Store("SubtitleBgTransparency", SubtitleBgTransparency);
   StoreLanguages("EPGLanguages", EPGLanguages);
   Store("EPGScanTimeout",     EPGScanTimeout);
+  Store("EPGScanMaxChannel",  EPGScanMaxChannel);
+  Store("EPGPauseAfterScan",  EPGPauseAfterScan);
   Store("EPGBugfixLevel",     EPGBugfixLevel);
   Store("EPGLinger",          EPGLinger);
   Store("SVDRPTimeout",       SVDRPTimeout);
--- config.h	2024/01/25 09:44:48	5.14
+++ config.h	2024/03/04 20:27:15
@@ -291,6 +291,8 @@
   int SubtitleOffset;
   int SubtitleFgTransparency, SubtitleBgTransparency;
   int EPGLanguages[I18N_MAX_LANGUAGES + 1];
+  int EPGScanMaxChannel;
+  int EPGPauseAfterScan;
   int EPGScanTimeout;
   int EPGBugfixLevel;
   int EPGLinger;
--- eitscan.c	2019/03/12 11:46:05	5.0
+++ eitscan.c	2024/03/04 20:26:52
@@ -58,7 +58,7 @@
 
 void cScanList::AddTransponder(const cChannel *Channel)
 {
-  if (Channel->Source() && Channel->Transponder()) {
+  if (Channel->Source() && Channel->Transponder() && (Setup.EPGScanMaxChannel <= 0 || Channel->Number() < Setup.EPGScanMaxChannel)) {
      for (cScanData *sd = First(); sd; sd = Next(sd)) {
          if (sd->Source() == Channel->Source() && ISTRANSPONDER(sd->Transponder(), Channel->Transponder()))
             return;
@@ -91,7 +91,8 @@
 
 cEITScanner::cEITScanner(void)
 {
-  lastScan = lastActivity = time(NULL);
+  lastScan = 0;
+  lastActivity = time(NULL);
   currentChannel = 0;
   scanList = NULL;
   transponderList = NULL;
@@ -130,6 +131,8 @@
   if (Setup.EPGScanTimeout || !lastActivity) { // !lastActivity means a scan was forced
      time_t now = time(NULL);
      if (now - lastScan > ScanTimeout && now - lastActivity > ActivityTimeout) {
+        if (Setup.EPGPauseAfterScan && !scanList && lastActivity && lastScan && now - lastScan < Setup.EPGScanTimeout * 3600)
+           return; // pause for Setup.EPGScanTimeout hours
         cStateKey StateKey;
         if (const cChannels *Channels = cChannels::GetChannelsRead(StateKey, 10)) {
            if (!scanList) {
@@ -140,6 +143,7 @@
                  transponderList = NULL;
                  }
               scanList->AddTransponders(Channels);
+              dsyslog("EIT scan: %d scanList entries", scanList->Count());//XXX //
               }
            bool AnyDeviceSwitched = false;
            for (int i = 0; i < cDevice::NumDevices(); i++) {
@@ -164,7 +168,7 @@
                                            Skins.Message(mtInfo, tr("Starting EPG scan"));
                                            }
                                         }
-                                     //dsyslog("EIT scan: device %d  source  %-8s tp %5d", Device->DeviceNumber() + 1, *cSource::ToString(Channel->Source()), Channel->Transponder());
+                                     dsyslog("EIT scan: %d device %d  source  %-8s tp %5d", scanList->Count(), Device->DeviceNumber() + 1, *cSource::ToString(Channel->Source()), Channel->Transponder());//XXX //
                                      Device->SwitchChannel(Channel, false);
                                      scanList->Del(ScanData);
                                      AnyDeviceSwitched = true;
--- menu.c	2024/03/02 21:49:21	5.11
+++ menu.c	2024/03/04 20:39:04
@@ -3653,6 +3653,8 @@
   Clear();
 
   Add(new cMenuEditIntItem( tr("Setup.EPG$EPG scan timeout (h)"),      &data.EPGScanTimeout));
+  Add(new cMenuEditIntItem( tr("Setup.EPG$EPG scan max. channel number (0=all)"), &data.EPGScanMaxChannel));
+  Add(new cMenuEditBoolItem(tr("Setup.EPG$EPG pause after scan"),      &data.EPGPauseAfterScan));
   Add(new cMenuEditIntItem( tr("Setup.EPG$EPG bugfix level"),          &data.EPGBugfixLevel, 0, MAXEPGBUGFIXLEVEL));
   Add(new cMenuEditIntItem( tr("Setup.EPG$EPG linger time (min)"),     &data.EPGLinger, 0));
   Add(new cMenuEditBoolItem(tr("Setup.EPG$Set system time"),           &data.SetSystemTime));
--- po/de_DE.po	2022/12/01 20:57:12	5.7
+++ po/de_DE.po	2024/03/04 20:40:17
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: VDR 2.6.0\n"
 "Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2022-12-01 14:54+0100\n"
+"POT-Creation-Date: 2024-02-04 15:32+0100\n"
 "PO-Revision-Date: 2015-02-10 13:45+0100\n"
 "Last-Translator: Klaus Schmidinger <vdr@tvdr.de>\n"
 "Language-Team: German <vdr@linuxtv.org>\n"
@@ -1023,6 +1023,12 @@
 msgid "Button$Scan"
 msgstr "Scan"
 
+msgid "Setup.EPG$EPG scan max. channel number (0=all)"
+msgstr "Maximaler Kanal für EPG-Scan (0=alle)"
+
+msgid "Setup.EPG$EPG pause after scan"
+msgstr "Pause nach EPG-Scan"
+
 msgid "Setup.EPG$EPG scan timeout (h)"
 msgstr "Zeit bis zur EPG-Aktualisierung (h)"
 
