Mailing List archive

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

[linux-dvb] Re: disable zigzag scan?



	Subject: [linux-dvb] disable zigzag scan?
	Date: mer, gen 12, 2005 at 03:00:13 +0100

Quoting Gerd Knorr (kraxel@bytesex.org):

> Is there some way to disable the fe zigzag scanning?

I had posted a patch ages ago, but it has not been accepted into the
mainstream... I need to disable zigzagging when fine-pointing my
tripod-mounted dish.

Here I attach a diff to the dvb-kernel CVS sources of 5 December
(last time I updated). I am making regular use of the two ioctls.

Hope this helps (and maybe the patch will eventually be committed...)

Carlo

-- 
  *         Se la Strada e la sua Virtu' non fossero state messe da parte,
* K * Carlo E. Prelz - fluido@fluido.as             che bisogno ci sarebbe
  *               di parlare tanto di amore e di rettitudine? (Chuang-Tzu)
Index: DVB/driver/dvb_frontend.c
===================================================================
RCS file: /cvs/linuxtv/DVB/driver/dvb_frontend.c,v
retrieving revision 1.52
diff -u -r1.52 dvb_frontend.c
--- DVB/driver/dvb_frontend.c	23 Aug 2003 17:51:01 -0000	1.52
+++ DVB/driver/dvb_frontend.c	5 Dec 2004 09:30:38 -0000
@@ -71,6 +71,7 @@
 	int lost_sync_count;
 	int exit;
         fe_status_t status;
+        unsigned char dont_zigzag;
 };
 
 
@@ -400,27 +401,30 @@
 	/**
 	 *  let's start a zigzag scan to compensate LNB drift...
 	 */
-	if (fe->info->type == FE_QPSK)
-		stepsize = fe->parameters.u.qpsk.symbol_rate / 16000;
-	else if (fe->info->type == FE_QAM)
-		stepsize = 0;
-	else
-		stepsize = fe->info->frequency_stepsize * 2;
+	if(!fe->dont_zigzag)
+ 	{
+		if (fe->info->type == FE_QPSK)
+			stepsize = fe->parameters.u.qpsk.symbol_rate / 16000;
+		else if (fe->info->type == FE_QAM)
+			stepsize = 0;
+		else
+			stepsize = fe->info->frequency_stepsize * 2;
+	
+		if (j % 32 == 0) {
+			fe->lnb_drift = 0;
+		} else {
+			fe->lnb_drift = -fe->lnb_drift;
+			if (j % 2)
+				fe->lnb_drift += stepsize;
+		}
+	
+		dvb_frontend_set_parameters (fe, &fe->parameters, 0);
+		dvb_frontend_internal_ioctl (&fe->frontend, FE_RESET, NULL);
 
-	if (j % 32 == 0) {
-		fe->lnb_drift = 0;
-	} else {
-		fe->lnb_drift = -fe->lnb_drift;
-		if (j % 2)
-			fe->lnb_drift += stepsize;
 	}
-
-	dvb_frontend_set_parameters (fe, &fe->parameters, 0);
-	dvb_frontend_internal_ioctl (&fe->frontend, FE_RESET, NULL);
 }
 
 
-
 static
 int dvb_frontend_is_exiting (struct dvb_frontend_data *fe)
 {
@@ -569,6 +573,7 @@
 	if (down_interruptible (&fe->sem))
 		return -EINTR;
 
+	fe->dont_zigzag = 0;
 	fe->exit = 0;
 	fe->thread_pid = 0;
 	mb();
@@ -626,6 +631,12 @@
 	case FE_GET_EVENT:
 		err = dvb_frontend_get_event (fe, parg, file->f_flags);
 		break;
+	case FE_ZIGZAG:
+	        fe->dont_zigzag=0;
+		break;
+	case FE_DONT_ZIGZAG:
+	        fe->dont_zigzag=1;
+		break;
 	case FE_GET_FRONTEND:
 		memcpy (parg, &fe->parameters,
 			sizeof (struct dvb_frontend_parameters));
Index: DVB/include/linux/dvb/frontend.h
===================================================================
RCS file: /cvs/linuxtv/DVB/include/linux/dvb/frontend.h,v
retrieving revision 1.10
diff -u -r1.10 frontend.h
--- DVB/include/linux/dvb/frontend.h	7 Aug 2003 10:49:34 -0000	1.10
+++ DVB/include/linux/dvb/frontend.h	5 Dec 2004 09:30:38 -0000
@@ -259,6 +259,8 @@
 #define FE_GET_FRONTEND            _IOR('o', 77, struct dvb_frontend_parameters)
 #define FE_GET_EVENT               _IOR('o', 78, struct dvb_frontend_event)
 
+#define FE_ZIGZAG                  _IO('o', 79)
+#define FE_DONT_ZIGZAG             _IO('o', 80)
 
 #endif /*_DVBFRONTEND_H_*/
 
Index: dvb-kernel/linux/drivers/media/dvb/dvb-core/dvb_frontend.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/dvb-core/dvb_frontend.c,v
retrieving revision 1.98
diff -u -r1.98 dvb_frontend.c
--- dvb-kernel/linux/drivers/media/dvb/dvb-core/dvb_frontend.c	4 Dec 2004 19:43:33 -0000	1.98
+++ dvb-kernel/linux/drivers/media/dvb/dvb-core/dvb_frontend.c	5 Dec 2004 09:30:42 -0000
@@ -126,6 +126,7 @@
 	int exit;
 	int wakeup;
 	fe_status_t status;
+        unsigned char dont_zigzag;
 };
 
 static LIST_HEAD(frontend_list);
@@ -389,11 +390,13 @@
 		fe->auto_step, fe->auto_sub_step, fe->started_auto_step);
 
 	/* set the frontend itself */
-	fe->parameters.frequency += fe->lnb_drift + fe->bending;
+	if(!fe->dont_zigzag)
+	  	fe->parameters.frequency += fe->lnb_drift + fe->bending;
 	if (autoinversion)
 		fe->parameters.inversion = fe->inversion;
 	if (fe->frontend->ops->set_frontend)
 		fe->frontend->ops->set_frontend(fe->frontend, &fe->parameters);
+
 	fe->parameters.frequency = original_frequency;
 	fe->parameters.inversion = original_inversion;
 
@@ -459,7 +462,7 @@
 
 		timeout = wait_event_interruptible_timeout(fe->wait_queue,
 							   dvb_frontend_should_wakeup(fe),
-							   delay);
+							   fe->dont_zigzag ? fe->min_delay : delay);
 		if (0 != dvb_frontend_is_exiting(fe)) {
 			/* got signal or quitting */
 			break;
@@ -656,6 +659,7 @@
 	fe->state = FESTATE_IDLE;
 	fe->exit = 0;
 	fe->thread_pid = 0;
+	fe->dont_zigzag = 0;
 	mb();
 
 	ret = kernel_thread (dvb_frontend_thread, fe, 0);
@@ -856,6 +860,14 @@
 		err = dvb_frontend_get_event (fe, parg, file->f_flags);
 		break;
 
+	case FE_ZIGZAG:
+	        fe->dont_zigzag=0;
+		break;
+
+	case FE_DONT_ZIGZAG:
+	        fe->dont_zigzag=1;
+		break;
+
 	case FE_GET_FRONTEND:
 		if (fe->frontend->ops->get_frontend) {
 			memcpy (parg, &fe->parameters, sizeof (struct dvb_frontend_parameters));
Index: dvb-kernel/linux/include/linux/dvb/frontend.h
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/include/linux/dvb/frontend.h,v
retrieving revision 1.15
diff -u -r1.15 frontend.h
--- dvb-kernel/linux/include/linux/dvb/frontend.h	28 Oct 2004 17:37:09 -0000	1.15
+++ dvb-kernel/linux/include/linux/dvb/frontend.h	5 Dec 2004 09:30:42 -0000
@@ -260,6 +260,8 @@
 
 #define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */
 
+#define FE_ZIGZAG                  _IO('o', 81)
+#define FE_DONT_ZIGZAG             _IO('o', 82)
 
 #endif /*_DVBFRONTEND_H_*/
 

Home | Main Index | Thread Index