This is a "plugin" for the Video Disk Recorder (VDR).

Written by:                  Luca Olivetti <>

Project's homepage:

Pieces of code and inspiration taken from the rotor plugin by  
Thomas Bergwinkl <>

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
See the file COPYING for more information.



With this plugin you can control a linear or an horizon to horizon actuator
controlled through the parallel port.
This kind of actuator usually needs a 36V supply (I drive mine at 12V to
reduce noise) and has a reed relay that gives pulses while the motor is 
running. By counting the pulses you know the position of the actuator
(and the position of the dish).
You have to build a simple circuit to interface the parallel port to the
actuator. The circuit I used is in the file actuator.sch (made with
geda-gschem, see, a png rendering is in
actuator.png) in the "module" subdirectory.
You also have to build and load a kernel module (2.6.x kernel needed), look
in the "module" subdirectory for details.
You can also use it without an actuator giving it the command line option,
-s or --scanonly, in this case it will work as a channel scanner.


The position increments going west and decrements going east (you have to
connect the motor accordingly!).
The soft East Limit (the origin) is always 0, i.e. during normal operation
the position range is 0..West Limit.


The plugins supports color themes to better blend with vdr. The default
theme uses the same color as the ST:TNG skin, to use the other provided
themes, copy the *.themes file to your themes directory. I provide themes
for the following skins

-Enigma with the Dark Blue theme

but you can write your own since these are standard vdr themes for a fake
"actuator" skin.


In the setup-menu of the plugin you have to select the dvb card which is
connected to the dish driven by the actuator (see below in "KNOWN PROBLEMS"
about multi cards setups).
Number 1 here is the first dvb adapter (/dev/dvb/adapter0), 2 the second
(/dev/dvb/adapter1) and so on.
If you don't have an actuator, this will be the card used for channel
You can also set a minimum screen refresh time (in ms) that will be used in
the plugin main menu: I found that, with a dxr3, if you refresh the screen
too often the osd gets garbled. I set it to 250 for my dxr3. Note that too
low a value will cause high cpu usage.
Finally you can select wether there should be an indication of the dish
position when the satellite is changed. 


In the plugin-menu you see on the top the dish target and position
Next there's an indication of the signal strength of the currently
tuned channel. You also see the dish target and the dish position.

Then the onscreen buttons (select with up,down,left,right, operate
with Ok):

Drive East      : moves the dish east.
Halt	    	: stops any movement of the motor.
Drive West 	: moves the dish west.
Recalc 		: sets the position of the dish to the position of the
                  currently selected satellite (source).
Goto xx    	: actuator goes to position xx.
Store    	: the current position will be stored to the current
		  satellite (source).
XX Steps East	: dish moves XX steps eastwards.
Limits          : enables/disables the soft limits. Note that the limits
                  will be automatically enabled when you leave the menu.
XX Steps West	: dish moves XX steps westwards.
Set East Limit  : sets the position of the dish at 0 and recalculates all
                  stored positions.
Set Zero        : sets the position of the dish but won't recalculate stored
Set West Limit  : stores the current position as the west soft limit.

The above buttons will only will available in actuator mode (without the -s
or --scanonly command line option).

If you're positioned on the line showing the current satellite, you can
select another one with the left and right buttons and go to its position
with the Ok button.

WARNING if you are using the plugin as a channel scanner only, make sure
you select the correct satellite, since all found channels will be stored
under the selected satellite. The same applies if you're using it as an
actuator, but in that case the plugin will only allow transponder/satellite
scanning if the position is set and the current position is equal to the
selected position.

Then there are fields to select the parameters of a transponder:

Frequency: the frecuency (direct entry) and polarization (left and right
Symbolrate: direct entry
Sys: press OK to switch between DVB-S and DVB-S2
Mod: press OK to switch between the possible modulations (QPSK, 8PSK,
16APSK, 32APSK and DIRECTV, unfortunately vdr isn't able to display all of
them so you'll see ??? instead).
Vpid: direct entry of the video pid
Apid: direct entry of the autio pid

Pressing OK on any of the fields Frequency, Symbolrate, Vpid or Apid will
tune to the selected transponder so you can see what signal-strength you get
there. If you correctly entered the pids, you should also see the new
channel on screen. Pressing the red key will hide the osd until you press
any other key, so you can check if you tuned to the correct channel.

Scan Transponder: If you press OK on Scan Transponder, vdr
will switch to the selected transponder and scan for new/updated channels.
During this operation a message and a progress bar is shown, and
pressing any key will interrupt the scanning. The header of the screen will
show the total number of channels found and the number of new ones.


if the plugin can find a file for the current source in the
"plugins/transponders" subdirectory of the configuration directory, there
will be an additional option "Scan Satellite". The two numbers at right are
the index of the transponder from where the scanning will start (so that you
can make a partial scan) and the total number of the transponders found in
the file. If you press left or right you can select a different transponder
and its data will be shown in the Frequency and Symbolrate fields. If you
press OK all transponders, starting from the selected index, will be
scanned. A message and a progress bar will be shown, and pressing any key
will stop the operation, leaving the index at the current position so you
can resume scanning later on. The header of the screen will show the total
number of channels found and the number of new ones.

The name of the transponder file for a satellite is XXXX.ini, where XXXX
represents the satellite position in tenths of degree, eg. for 
28.2E the filename will be 0282.ini, for 30.0W the filename will be 3300.ini
(i.e. (360.0-30.0)*10).
The file format is the same as the channelscan plugin, which in turn claims
to use the same format as the windows program prog-dvb.
You can search for pre-made ini files on google.


Channel marking is an aid in finding stale channel entries.
Marking a channel means prepending a "+" to its name, if, during a
transponder or satellite scan, a channel is found the "+" will be removed,
so the channels that still have a "+" in the name haven't been found during
a scan (note that this doesn't mean the channel is invalid, so check them
before deleting them).

The button "Mark channels" will mark all channels belonging to the currently
selected satellite, "Unmark channels" and "Delete marked channels" will
allow you to either remove the mark from all the channels or delete all
marked channels (regardless of the satellite they belong to).

Note that this isn't a foolproof method to remove stale channels (e.g. I
cannot seem to find many spanish channels with a channels scan even if
they're regularly broadcasting, spaniards in power are allergic to
standards) so double and triple check before hitting the "Delete marked
channels" button.


If you selected the corresponding option in the setup menu, each time the
satellite changes you'll see an indication of the dish position while the
dish is moving, but only if there's nothing else on the osd. You can
interact as usual with the osd, in that case the dish position indication
will disappear.


- The plugin will load the current dish position at start-up and stores it
on disk each time it detects it has changed. It's possible to lose the
actual position if the pc crashes while the dish is moving. In this case you
have to manually peak the dish at a known satellite (it may be necessary to
disable the limits) and use the "Recalc" function. I'd like to store the
position in the cmos ram (in the kernel module) but I don't know where I can
find a couple of free bytes (and if the pc crashes while storing the
position, it may not have updated the cmos ram checksum).

- When the pc is turned on or off my parallel port sets all data lines at 1,
driving both relays for a very short while. Due to the wiring of the relays
the motor should not move anyway. If you don't like it you can modify the
circuit to add some more logic to avoid the problem.

- vdr assumes that, as soon as a channel has been switched to, the new source
(satellite) is valid, even if the dish is moving, so the autoupdate function
will assign new/updated channels to the wrong satellite. The plugin's
workaround is to disable autoupdate while the dish is moving and restore the
previous setting only when it has reached the target satellite. It's
possible that the plugin will fail to restore the value of this setting.
If you see that channels aren't updating anymore check this setting (main
menu->configuration->dbv->update channels, note that while the dish is
moving this setting is always "no", so check and modify it only when the
actuator is idle).

- in a multi card setup, vdr considers all cards equally capable of providing
any source (satellite), regardless to the dish/lnb the card is connected to.
This is obviously wrong. Attached to the following post you'll find a patch
to configure which sources (satellites) a card can relly tune to:

- If a recording starts on a different satellite than the current one, it's
possible than vdr will restart if it takes too much time to reach the
position. In the patches subdirectory there's a steerable-vdr-x.x.x.patch to
give more time to the dish to reach the target after starting a recording.