Hello Michel,
Thanks for your proposals.
I also has a thought about S2 parameter in frequency file, but decided to perform both DVB-S and DVB-S2 scans automatically since it easy on maintaining the frequency file.
I will probably leave "S" frequency as is and will add "S1" and "S2" if you want to specify what delivery should be used.
Also, I've been reported that some drivers can't work with AUTO modulation so it have to be implicitly specified. scan-s2 will have to monitor the modulation and scan S2 channels directly when 8PSK is specified or scan only DVB-S if QPSK is specified.
I'll review your patches later, don't have time now.
Thanks for your proposals.
I also has a thought about S2 parameter in frequency file, but decided to perform both DVB-S and DVB-S2 scans automatically since it easy on maintaining the frequency file.
I will probably leave "S" frequency as is and will add "S1" and "S2" if you want to specify what delivery should be used.
Also, I've been reported that some drivers can't work with AUTO modulation so it have to be implicitly specified. scan-s2 will have to monitor the modulation and scan S2 channels directly when 8PSK is specified or scan only DVB-S if QPSK is specified.
I'll review your patches later, don't have time now.
On Sat, Nov 1, 2008 at 5:11 PM, Michel Verbraak <michel@xxxxxxxxxxxx> wrote:
Alex,
Tested your scan-s2 with a Technisat HD2 card.
Scanning works. But some channels are reported twice with different frequency. I found an error which is fixed by the patch file named scan.c.diff1.
I would also like to propose the following change (see file scan.c.diff2 or scan.c.diff which includes both patches). This change makes it possible to only scan for DVB-S channels or DVB-S2 channels or both. This is done by specifying lines starting with S or S2 in the input file.
example input file:
# Astra 19.2E SDT info service transponder
# freq pol sr fec
S 12522000 H 22000000 2/3 <only DVB-S channels are scanned>
S 11914000 H 27500000 AUTO
S 10743750 H 22000000 5/6
S 12187500 H 27500000 3/4
S 12343500 H 27500000 3/4
S 12515250 H 22000000 5/6
S 12574250 H 22000000 5/6
S2 12522000 H 22000000 AUTO <only DVB-S2 channels are scanned>
S2 11914000 H 27500000 AUTO
I hope this is usefull.
Regards,
Michel.
--- scan-s2-88afcf030566/scan.c.orig 2008-11-01 10:09:43.000000000 +0100
+++ scan-s2-88afcf030566/scan.c 2008-11-01 15:55:14.000000000 +0100
@@ -906,10 +906,7 @@
// New transponder
t = alloc_transponder(tn.frequency);
- // For sattelites start with DVB-S, it will switch to DVB-S2 if DVB-S gives no results
- if(current_tp->delivery_system == SYS_DVBS || current_tp->delivery_system == SYS_DVBS2) {
- tn.delivery_system = SYS_DVBS;
- }
+ tn.delivery_system = current_tp->delivery_system;
copy_transponder(t, &tn);
}
@@ -1578,7 +1575,10 @@
if_freq = abs(t->frequency - lnb_type.low_val);
}
if (verbosity >= 2)
+ if (t->delivery_system == SYS_DVBS)
dprintf(1,"DVB-S IF freq is %d\n", if_freq);
+ else if (t->delivery_system == SYS_DVBS2)
+ dprintf(1,"DVB-S2 IF freq is %d\n", if_freq);
}
@@ -1640,7 +1640,8 @@
// get the actual parameters from the driver for that channel
if ((ioctl(frontend_fd, FE_GET_PROPERTY, &cmdseq)) == -1) {
perror("FE_GET_PROPERTY failed");
- return;
+ t->last_tuning_failed = 1;
+ return -1;
}
t->delivery_system = p[0].u.data;
@@ -1722,12 +1723,6 @@
rc = tune_to_transponder(frontend_fd, t);
- // If scan failed and it's a DVB-S system, try DVB-S2 before giving up
- if (rc != 0 && t->delivery_system == SYS_DVBS) {
- t->delivery_system = SYS_DVBS2;
- rc = tune_to_transponder(frontend_fd, t);
- }
-
if (rc == 0) {
return 0;
}
@@ -1992,6 +1987,42 @@
t->frequency,
pol[0], t->symbol_rate, fec2str(t->fec), rolloff2str(t->rolloff), qam2str(t->modulation));
}
+ else if (sscanf(buf, "S2 %u %1[HVLR] %u %4s %4s %6s\n", &f, pol, &sr, fec, rolloff, qam) >= 3) {
+ t = alloc_transponder(f);
+ t->delivery_system = SYS_DVBS2;
+ t->modulation = QAM_AUTO;
+ t->rolloff = ROLLOFF_AUTO;
+ t->fec = FEC_AUTO;
+ switch(pol[0])
+ {
+ case 'H':
+ case 'L':
+ t->polarisation = POLARISATION_HORIZONTAL;
+ break;
+ default:
+ t->polarisation = POLARISATION_VERTICAL;;
+ break;
+ }
+ t->inversion = spectral_inversion;
+ t->symbol_rate = sr;
+
+ // parse optional parameters
+ if(strlen(fec) > 0) {
+ t->fec = str2fec(fec);
+ }
+
+ if(strlen(rolloff) > 0) {
+ t->rolloff = str2rolloff(rolloff);
+ }
+
+ if(strlen(qam) > 0) {
+ t->modulation = str2qam(qam);
+ }
+
+ info("initial transponder %u %c %d %s %s %s\n",
+ t->frequency,
+ pol[0], t->symbol_rate, fec2str(t->fec), rolloff2str(t->rolloff), qam2str(t->modulation));
+ }
else if (sscanf(buf, "C %u %u %4s %6s\n", &f, &sr, fec, qam) >= 2) {
t = alloc_transponder(f);
t->delivery_system = SYS_DVBC_ANNEX_AC;
--- scan-s2-88afcf030566/scan.c.orig 2008-11-01 10:09:43.000000000 +0100
+++ scan-s2-88afcf030566/scan.c 2008-11-01 15:55:14.000000000 +0100
@@ -1640,7 +1640,8 @@
// get the actual parameters from the driver for that channel
if ((ioctl(frontend_fd, FE_GET_PROPERTY, &cmdseq)) == -1) {
perror("FE_GET_PROPERTY failed");
- return;
+ t->last_tuning_failed = 1;
+ return -1;
}
t->delivery_system = p[0].u.data;
--- scan-s2-88afcf030566/scan.c.orig 2008-11-01 10:09:43.000000000 +0100
+++ scan-s2-88afcf030566/scan.c 2008-11-01 15:55:14.000000000 +0100
@@ -906,10 +906,7 @@
// New transponder
t = alloc_transponder(tn.frequency);
- // For sattelites start with DVB-S, it will switch to DVB-S2 if DVB-S gives no results
- if(current_tp->delivery_system == SYS_DVBS || current_tp->delivery_system == SYS_DVBS2) {
- tn.delivery_system = SYS_DVBS;
- }
+ tn.delivery_system = current_tp->delivery_system;
copy_transponder(t, &tn);
}
@@ -1578,7 +1575,10 @@
if_freq = abs(t->frequency - lnb_type.low_val);
}
if (verbosity >= 2)
+ if (t->delivery_system == SYS_DVBS)
dprintf(1,"DVB-S IF freq is %d\n", if_freq);
+ else if (t->delivery_system == SYS_DVBS2)
+ dprintf(1,"DVB-S2 IF freq is %d\n", if_freq);
}
@@ -1722,12 +1723,6 @@
rc = tune_to_transponder(frontend_fd, t);
- // If scan failed and it's a DVB-S system, try DVB-S2 before giving up
- if (rc != 0 && t->delivery_system == SYS_DVBS) {
- t->delivery_system = SYS_DVBS2;
- rc = tune_to_transponder(frontend_fd, t);
- }
-
if (rc == 0) {
return 0;
}
@@ -1992,6 +1987,42 @@
t->frequency,
pol[0], t->symbol_rate, fec2str(t->fec), rolloff2str(t->rolloff), qam2str(t->modulation));
}
+ else if (sscanf(buf, "S2 %u %1[HVLR] %u %4s %4s %6s\n", &f, pol, &sr, fec, rolloff, qam) >= 3) {
+ t = alloc_transponder(f);
+ t->delivery_system = SYS_DVBS2;
+ t->modulation = QAM_AUTO;
+ t->rolloff = ROLLOFF_AUTO;
+ t->fec = FEC_AUTO;
+ switch(pol[0])
+ {
+ case 'H':
+ case 'L':
+ t->polarisation = POLARISATION_HORIZONTAL;
+ break;
+ default:
+ t->polarisation = POLARISATION_VERTICAL;;
+ break;
+ }
+ t->inversion = spectral_inversion;
+ t->symbol_rate = sr;
+
+ // parse optional parameters
+ if(strlen(fec) > 0) {
+ t->fec = str2fec(fec);
+ }
+
+ if(strlen(rolloff) > 0) {
+ t->rolloff = str2rolloff(rolloff);
+ }
+
+ if(strlen(qam) > 0) {
+ t->modulation = str2qam(qam);
+ }
+
+ info("initial transponder %u %c %d %s %s %s\n",
+ t->frequency,
+ pol[0], t->symbol_rate, fec2str(t->fec), rolloff2str(t->rolloff), qam2str(t->modulation));
+ }
else if (sscanf(buf, "C %u %u %4s %6s\n", &f, &sr, fec, qam) >= 2) {
t = alloc_transponder(f);
t->delivery_system = SYS_DVBC_ANNEX_AC;
_______________________________________________ linux-dvb mailing list linux-dvb@xxxxxxxxxxx http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb