A few weeks ago I had taken the time to write a small mod to the dvb
drivers that allows me to enable or disable zigzagging with a ioctl
call. I need it because I like to move my parabola to point to
different satellites, and the signal strength indication is
frustratingly useless as a help for correct alignment if tuning is
happily jumpimg up and down. 

I added two IOCTL's, called FE_ZIGZAG and FE_DONT_ZIGZAG. The patch is
very simple, and works fine here. I have made sure that, if these
ioctls are not used, there is no change in behaviour. 

I have now generated a patch file from plain linuxtv-dvb-1.0.0, that I
am including in this message. Is there some possibility to have this
applied to the main tree?

Thanks.

Carlo


-- 
  *         Se la Strada e la sua Virtu' non fossero state messe da parte,
* K * Carlo E. Prelz - [EMAIL PROTECTED]             che bisogno ci sarebbe
  *               di parlare tanto di amore e di rettitudine? (Chuang-Tzu)
diff -urN linuxtv-dvb-1.0.0-orig/driver/dvb_frontend.c 
linuxtv-dvb-1.0.0/driver/dvb_frontend.c
--- linuxtv-dvb-1.0.0-orig/driver/dvb_frontend.c        2003-08-01 17:27:21.000000000 
+0200
+++ linuxtv-dvb-1.0.0/driver/dvb_frontend.c     2003-08-05 07:31:34.000000000 +0200
@@ -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)
 {
@@ -567,6 +571,7 @@
        if (down_interruptible (&fe->sem))
                return -EINTR;
 
+       fe->dont_zigzag = 0;
        fe->exit = 0;
        fe->thread_pid = 0;
        mb();
@@ -624,6 +629,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));
diff -urN linuxtv-dvb-1.0.0-orig/include/linux/dvb/frontend.h 
linuxtv-dvb-1.0.0/include/linux/dvb/frontend.h
--- linuxtv-dvb-1.0.0-orig/include/linux/dvb/frontend.h 2003-05-08 15:50:10.000000000 
+0200
+++ linuxtv-dvb-1.0.0/include/linux/dvb/frontend.h      2003-08-04 20:22:43.000000000 
+0200
@@ -258,6 +258,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_*/
 

Reply via email to