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:
@@ -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);