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