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-reel...
..and you can see all the FreeBSD patches I applied here:
http://www.freebsd.org/cgi/cvsweb.cgi/ports/multimedia/vdr-plugin-reelchanne...
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);