On Sat, May 07, 2011 at 08:11:20PM +0200, Juergen Lock wrote:
> Hi!
> 
>  There seems to be a change in recent vdr versions regarding
> NumProvidedSystems() which at least the reelchannelscan plugin
> uses to tell apart a dvb-s2 tuner from a dvb-s one in a few places,
> apparently it used to return 2 for a dvb-s2 tuner and now returns 3.
> Is this intentional?
> 
>  I patched reelchannelscan like below:  (would need to check the
> vdr version to be general of course, this was for 1.7.18; symptom
> was a manual scan wrote out qam32 modulation into the channels.conf
> instead of qpsk and of course vdr couldn't tune the new channel(s).)
> 
>  Thanx!
>       Juergen
> 
> --- a/csmenu.c
> +++ b/csmenu.c
> @@ -243,7 +243,7 @@ void cMenuChannelscan::TunerDetection()
>                  txtstream << tr("DVB-C - Cable") << " (" << tr("Tuner") << ' 
> ' << tuner + 1 << ')';
>                  stp = CABLE;
>              } else if (device->ProvidesSource(cSource::stSat)) {
> -                if (device->NumProvidedSystems() == 2) { 
> +                if (device->NumProvidedSystems() == 3) { 
>  //                    if(TunerIsRotor(tuner))
>  //                       txtstream << tr("DVB-S2 - Rotor") << " (" << 
> tr("Tuner") << ' ' << tuner + 1 << ')';
>  //                    else
> --- a/scan.c
> +++ b/scan.c
> @@ -421,7 +421,7 @@ void cScan::ScanNitServices()
>  void cScan::ScanDVB_S(cTransponder * tp, cChannel * c)
>  {
>   //const time_t tt = time(NULL);
> -  int maxmods = device->NumProvidedSystems() == 2? 4 : 2;
> +  int maxmods = device->NumProvidedSystems() == 3? 4 : 2;
>  
>     // esyslog("%s cTransponder* tp = %x  cChannel *c = %x", 
> __PRETTY_FUNCTION__);
>      esyslog("maxmods = %d",maxmods);
> @@ -431,7 +431,7 @@ void cScan::ScanDVB_S(cTransponder * tp,
>          ;
>  
>      // skip HD Transonders on SD Tuner
> -    if ( !device->NumProvidedSystems() == 2 && static_cast < cSatTransponder 
> * >(tp)->System() == 1)
> +    if ( !device->NumProvidedSystems() == 3 && static_cast < cSatTransponder 
> * >(tp)->System() == 1)
>          return;
>  
>    unsigned  int nRadio = radioChannelNames.size();

Sorry for following up to myself, but I forgot to say this is the
0.6.1+beta1.7.15 reelchannelscan snapshot that yavdr uses, ported
to FreeBSD:

        http://www.freshports.org/multimedia/vdr-plugin-reelchannelscan/

        
http://ppa.launchpad.net/yavdr/stable-vdr/ubuntu/pool/main/v/vdr-plugin-reelchannelscan/vdr-plugin-reelchannelscan_0.6.1+beta1.7.15.orig.tar.gz

 ..and you can see all the FreeBSD patches I applied here:

        
http://www.freebsd.org/cgi/cvsweb.cgi/ports/multimedia/vdr-plugin-reelchannelscan/files/

files/patch-scan.c also should be relevant on non-FreeBSD too:

--- a/scan.c
+++ b/scan.c
@@ -197,7 +197,7 @@ bool cScan::StartScanning(cScanParameter
 
 #ifndef DEVICE_ATTRIBUTES
     char buffer[265];
-    snprintf(buffer, sizeof(buffer), "/dev/dvb/adapter%d/frontend0", cardnr);
+    snprintf(buffer, sizeof(buffer), "/dev/dvb/adapter%d/frontend0", 
cDevice::GetDevice(cardnr)->CardIndex());
 
     fd_frontend = open(buffer, O_RDONLY | O_NONBLOCK);
     if (fd_frontend <= 0) {
@@ -932,12 +932,12 @@ void cScan::Action()
               char *strDate;
               asprintf(&strDate,"%s", asctime(localtime(&tt)));
               strDate[strlen(strDate)-1] = 0;
-              fprintf(fp,"\n\n%s tp=%4d, %6d(%d) TV:%4d Radio:%4d in %3d 
sec",strDate,i , frequency, !alreadyScanned, tvChannelNames.size()-ntv, 
radioChannelNames.size()-nradio, (int)difftime(t_out,t_in) );
+              fprintf(fp,"\n\n%s tp=%4d, %6d(%d) TV:%4ld Radio:%4ld in %3d 
sec",strDate,i , frequency, !alreadyScanned, tvChannelNames.size()-ntv, 
radioChannelNames.size()-nradio, (int)difftime(t_out,t_in) );
               fclose(fp);
 
               fp = fopen("/tmp/tScan.log","a");
               //fprintf(fp,"\n\n%s tp=%4d, %6d/%2d/%5d TV:%4d Radio:%4d in 
%3dsec",strDate,i , frequency,(*tp)->Modulation(), (*tp)->Symbolrate(), 
tvChannelNames.size()-ntv, radioChannelNames.size()-nradio, 
(int)difftime(t_out,t_in) );
-              fprintf(fp,"\n\ntp=%4d, %6d/%2d/%5d TV:%4d Radio:%4d in %3dsec 
new:%3d",i , frequency,(*tp)->Modulation(), (*tp)->Symbolrate(), 
tvChannelNames.size()-ntv, radioChannelNames.size()-nradio, 
(int)difftime(t_out,t_in),tvChannelNames.size()-ntv+ 
radioChannelNames.size()-nradio );
+              fprintf(fp,"\n\ntp=%4d, %6d/%2d/%5d TV:%4ld Radio:%4ld in %3dsec 
new:%3ld",i , frequency,(*tp)->Modulation(), (*tp)->Symbolrate(), 
tvChannelNames.size()-ntv, radioChannelNames.size()-nradio, 
(int)difftime(t_out,t_in),tvChannelNames.size()-ntv+ 
radioChannelNames.size()-nradio );
               fclose(fp);
 
               free(strDate);

_______________________________________________
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr

Reply via email to