Re: [ANNOUNCE] scan-s2 is available, please test

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Media]     [Video 4 Linux]     [Asterisk]     [Samba]     [Xorg]     [Xfree86]     [Linux USB]

  Powered by Linux